Skip to content

Commit a983d38

Browse files
committed
[Fix] correctly resolve dir paths when file with the same name exists
1 parent 26369cf commit a983d38

File tree

6 files changed

+33
-2
lines changed

6 files changed

+33
-2
lines changed

lib/async.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ module.exports = function resolve(x, options, callback) {
3434

3535
if (/^(?:\.\.?(?:\/|$)|\/|([A-Za-z]:)?[/\\])/.test(x)) {
3636
var res = path.resolve(y, x);
37-
if (x === '..') res += '/';
37+
if (x === '..' || x.slice(-1) === '/') res += '/';
3838
if (/\/$/.test(x) && res === y) {
3939
loadAsDirectory(res, opts.package, onfile);
4040
} else loadAsFile(res, opts.package, onfile);

lib/sync.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ module.exports = function (x, options) {
2727

2828
if (/^(?:\.\.?(?:\/|$)|\/|([A-Za-z]:)?[/\\])/.test(x)) {
2929
var res = path.resolve(y, x);
30-
if (x === '..') res += '/';
30+
if (x === '..' || x.slice(-1) === '/') res += '/';
3131
var m = loadAsFileSync(res) || loadAsDirectorySync(res);
3232
if (m) return m;
3333
} else {

test/resolver.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,3 +278,19 @@ test('#25: node modules with the same name as node stdlib modules', function (t)
278278
t.equal(res, path.join(resolverDir, 'node_modules/punycode/index.js'));
279279
});
280280
});
281+
282+
test('#52 - incorrectly resolves module-paths like "./someFolder/" when there is a file of the same name', function (t) {
283+
t.plan(2);
284+
285+
var dir = path.join(__dirname, 'resolver');
286+
287+
resolve('./foo', { basedir: path.join(dir, 'same_names') }, function (err, res, pkg) {
288+
if (err) t.fail(err);
289+
t.equal(res, path.join(dir, 'same_names/foo.js'));
290+
});
291+
292+
resolve('./foo/', { basedir: path.join(dir, 'same_names') }, function (err, res, pkg) {
293+
if (err) t.fail(err);
294+
t.equal(res, path.join(dir, 'same_names/foo/index.js'));
295+
});
296+
});

test/resolver/same_names/foo.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
module.exports = 42;

test/resolver/same_names/foo/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
module.exports = 1;

test/resolver_sync.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,3 +204,16 @@ test('#79 - re-throw non ENOENT errors from stat', function (t) {
204204
t.end();
205205
});
206206

207+
test('#52 - incorrectly resolves module-paths like "./someFolder/" when there is a file of the same name', function (t) {
208+
var dir = path.join(__dirname, 'resolver');
209+
210+
t.equal(
211+
resolve.sync('./foo', { basedir: path.join(dir, 'same_names') }),
212+
path.join(dir, 'same_names/foo.js')
213+
);
214+
t.equal(
215+
resolve.sync('./foo/', { basedir: path.join(dir, 'same_names') }),
216+
path.join(dir, 'same_names/foo/index.js')
217+
);
218+
t.end();
219+
});

0 commit comments

Comments
 (0)