Skip to content

Commit 7f5a63b

Browse files
tjenkinsonljharb
authored andcommitted
[New] sync/async: add 'includeCoreModules' option
1 parent 881a0bf commit 7f5a63b

File tree

4 files changed

+26
-2
lines changed

4 files changed

+26
-2
lines changed

lib/async.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ module.exports = function resolve(x, options, callback) {
7373
var packageIterator = opts.packageIterator;
7474

7575
var extensions = opts.extensions || ['.js'];
76+
var includeCoreModules = opts.includeCoreModules !== false;
7677
var basedir = opts.basedir || path.dirname(caller());
7778
var parent = opts.filename || basedir;
7879

@@ -113,7 +114,7 @@ module.exports = function resolve(x, options, callback) {
113114
if ((/\/$/).test(x) && res === basedir) {
114115
loadAsDirectory(res, opts.package, onfile);
115116
} else loadAsFile(res, opts.package, onfile);
116-
} else if (isCore(x)) {
117+
} else if (includeCoreModules && isCore(x)) {
117118
return cb(null, x);
118119
} else loadNodeModules(x, basedir, function (err, n, pkg) {
119120
if (err) cb(err);

lib/sync.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ module.exports = function resolveSync(x, options) {
6666
var packageIterator = opts.packageIterator;
6767

6868
var extensions = opts.extensions || ['.js'];
69+
var includeCoreModules = opts.includeCoreModules !== false;
6970
var basedir = opts.basedir || path.dirname(caller());
7071
var parent = opts.filename || basedir;
7172

@@ -85,7 +86,7 @@ module.exports = function resolveSync(x, options) {
8586
if (x === '.' || x === '..' || x.slice(-1) === '/') res += '/';
8687
var m = loadAsFileSync(res) || loadAsDirectorySync(res);
8788
if (m) return maybeRealpathSync(realpathSync, m, opts);
88-
} else if (isCore(x)) {
89+
} else if (includeCoreModules && isCore(x)) {
8990
return x;
9091
} else {
9192
var n = loadNodeModulesSync(x, absoluteStart);

readme.markdown

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ options are:
6161

6262
* opts.extensions - array of file extensions to search in order
6363

64+
* opts.includeCoreModules - set to `false` to exclude node core modules (e.g. `fs`) from the search
65+
6466
* opts.readFile - how to read files asynchronously
6567

6668
* opts.isFile - function to asynchronously test whether a file exists
@@ -108,6 +110,7 @@ default `opts` values:
108110
paths: [],
109111
basedir: __dirname,
110112
extensions: ['.js'],
113+
includeCoreModules: true,
111114
readFile: fs.readFile,
112115
isFile: function isFile(file, cb) {
113116
fs.stat(file, function (err, stat) {
@@ -150,6 +153,8 @@ options are:
150153

151154
* opts.extensions - array of file extensions to search in order
152155

156+
* opts.includeCoreModules - set to `false` to exclude node core modules (e.g. `fs`) from the search
157+
153158
* opts.readFile - how to read files synchronously
154159

155160
* opts.isFile - function to synchronously test whether a file exists
@@ -195,6 +200,7 @@ default `opts` values:
195200
paths: [],
196201
basedir: __dirname,
197202
extensions: ['.js'],
203+
includeCoreModules: true,
198204
readFileSync: fs.readFileSync,
199205
isFile: function isFile(file) {
200206
try {

test/shadowed_core.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,19 @@ test('shadowed core modules return shadow when appending `/` [sync]', function (
3636
t.equal(res, path.join(__dirname, 'shadowed_core/node_modules/util/index.js'));
3737
});
3838

39+
test('shadowed core modules return shadow with `includeCoreModules: false`', function (t) {
40+
t.plan(2);
41+
42+
resolve('util', { basedir: path.join(__dirname, 'shadowed_core'), includeCoreModules: false }, function (err, res) {
43+
t.ifError(err);
44+
t.equal(res, path.join(__dirname, 'shadowed_core/node_modules/util/index.js'));
45+
});
46+
});
47+
48+
test('shadowed core modules return shadow with `includeCoreModules: false` [sync]', function (t) {
49+
t.plan(1);
50+
51+
var res = resolve.sync('util', { basedir: path.join(__dirname, 'shadowed_core'), includeCoreModules: false });
52+
53+
t.equal(res, path.join(__dirname, 'shadowed_core/node_modules/util/index.js'));
54+
});

0 commit comments

Comments
 (0)