Skip to content

Commit 749a248

Browse files
zkochansindresorhus
authored andcommitted
Resolve directory to the real path before using as base for resolve (#7)
Close #6
1 parent 8398327 commit 749a248

File tree

6 files changed

+19
-1
lines changed

6 files changed

+19
-1
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
!node_modules

fixture/fixture-for-symlinks/subfolder/node_modules/foo.js

Whitespace-only changes.

fixture/fixture-for-symlinks/subfolder/symlink-target/.gitkeep

Whitespace-only changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
subfolder/symlink-target/

index.js

+13-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
'use strict';
22
const path = require('path');
33
const Module = require('module');
4+
const fs = require('fs');
45

56
const resolveFrom = (fromDir, moduleId, silent) => {
67
if (typeof fromDir !== 'string') {
@@ -11,7 +12,18 @@ const resolveFrom = (fromDir, moduleId, silent) => {
1112
throw new TypeError(`Expected \`moduleId\` to be of type \`string\`, got \`${typeof moduleId}\``);
1213
}
1314

14-
fromDir = path.resolve(fromDir);
15+
try {
16+
fromDir = fs.realpathSync(fromDir);
17+
} catch (err) {
18+
if (err.code === 'ENOENT') {
19+
fromDir = path.resolve(fromDir);
20+
} else if (silent) {
21+
return null;
22+
} else {
23+
throw err;
24+
}
25+
}
26+
1527
const fromFile = path.join(fromDir, 'noop.js');
1628

1729
const resolveFileName = () => Module._resolveFilename(moduleId, {

test.js

+4
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ test('resolveFrom()', t => {
1515

1616
const resolveFromfixture = m.bind(null, 'fixture');
1717
t.regex(resolveFromfixture('./fixture'), /fixture\/fixture\.js$/);
18+
19+
t.truthy(m('./fixture/fixture-for-symlinks/symlink-target', 'foo'));
1820
});
1921

2022
test('resolveFrom.silent()', t => {
@@ -23,4 +25,6 @@ test('resolveFrom.silent()', t => {
2325

2426
const silentResolveFromfixture = m.silent.bind(null, 'fixture');
2527
t.regex(silentResolveFromfixture('./fixture'), /fixture\/fixture\.js$/);
28+
29+
t.is(m.silent('fixture-not-exists', './fixture'), null);
2630
});

0 commit comments

Comments
 (0)