Skip to content

Commit c622aef

Browse files
parshapljharb
authored andcommitted
[new] Add err.code = 'MODULE_NOT_FOUND'
Match behavior of node's require.resolve. [1] [1] https://github.com/nodejs/node/blob/e11fe0c2777561827cdb7207d46b0917ef3c42a7/lib/module.js#L333
1 parent dd50615 commit c622aef

File tree

4 files changed

+26
-8
lines changed

4 files changed

+26
-8
lines changed

lib/async.js

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,11 @@ module.exports = function resolve(x, options, callback) {
4242
if (err) cb(err);
4343
else if (n) cb(null, n, pkg);
4444
else if (core[x]) return cb(null, x);
45-
else cb(new Error("Cannot find module '" + x + "' from '" + y + "'"));
45+
else {
46+
var err = new Error("Cannot find module '" + x + "' from '" + y + "'");
47+
err.code = 'MODULE_NOT_FOUND';
48+
cb(err);
49+
}
4650
});
4751

4852
function onfile(err, m, pkg) {
@@ -51,7 +55,11 @@ module.exports = function resolve(x, options, callback) {
5155
else loadAsDirectory(res, function (err, d, pkg) {
5256
if (err) cb(err);
5357
else if (d) cb(null, d, pkg);
54-
else cb(new Error("Cannot find module '" + x + "' from '" + y + "'"));
58+
else {
59+
var err = new Error("Cannot find module '" + x + "' from '" + y + "'");
60+
err.code = 'MODULE_NOT_FOUND';
61+
cb(err);
62+
}
5563
});
5664
}
5765

lib/sync.js

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

3535
if (core[x]) return x;
3636

37-
throw new Error("Cannot find module '" + x + "' from '" + y + "'");
37+
var err = new Error("Cannot find module '" + x + "' from '" + y + "'");
38+
err.code = 'MODULE_NOT_FOUND';
39+
throw err;
3840

3941
function loadAsFileSync(x) {
4042
if (isFile(x)) {

test/mock.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ var test = require('tape');
33
var resolve = require('../');
44

55
test('mock', function (t) {
6-
t.plan(6);
6+
t.plan(8);
77

88
var files = {};
99
files[path.resolve('/foo/bar/baz.js')] = 'beep';
@@ -34,15 +34,17 @@ test('mock', function (t) {
3434

3535
resolve('baz', opts('/foo/bar'), function (err, res) {
3636
t.equal(err.message, "Cannot find module 'baz' from '" + path.resolve('/foo/bar') + "'");
37+
t.equal(err.code, 'MODULE_NOT_FOUND');
3738
});
3839

3940
resolve('../baz', opts('/foo/bar'), function (err, res) {
4041
t.equal(err.message, "Cannot find module '../baz' from '" + path.resolve('/foo/bar') + "'");
42+
t.equal(err.code, 'MODULE_NOT_FOUND');
4143
});
4244
});
4345

4446
test('mock from package', function (t) {
45-
t.plan(6);
47+
t.plan(8);
4648

4749
var files = {};
4850
files[path.resolve('/foo/bar/baz.js')] = 'beep';
@@ -74,10 +76,12 @@ test('mock from package', function (t) {
7476

7577
resolve('baz', opts('/foo/bar'), function (err, res) {
7678
t.equal(err.message, "Cannot find module 'baz' from '" + path.resolve('/foo/bar') + "'");
79+
t.equal(err.code, 'MODULE_NOT_FOUND');
7780
});
7881

7982
resolve('../baz', opts('/foo/bar'), function (err, res) {
8083
t.equal(err.message, "Cannot find module '../baz' from '" + path.resolve('/foo/bar') + "'");
84+
t.equal(err.code, 'MODULE_NOT_FOUND');
8185
});
8286
});
8387

test/resolver.js

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ var test = require('tape');
33
var resolve = require('../');
44

55
test('async foo', function (t) {
6-
t.plan(9);
6+
t.plan(10);
77
var dir = path.join(__dirname, 'resolver');
88

99
resolve('./foo', { basedir: dir }, function (err, res, pkg) {
@@ -32,6 +32,7 @@ test('async foo', function (t) {
3232

3333
resolve('foo', { basedir: dir }, function (err) {
3434
t.equal(err.message, "Cannot find module 'foo' from '" + path.resolve(dir) + "'");
35+
t.equal(err.code, 'MODULE_NOT_FOUND');
3536
});
3637
});
3738

@@ -175,7 +176,7 @@ test('normalize', function (t) {
175176
});
176177

177178
test('cup', function (t) {
178-
t.plan(3);
179+
t.plan(4);
179180
var dir = path.join(__dirname, 'resolver');
180181

181182
resolve('./cup', { basedir: dir, extensions: ['.js', '.coffee'] }, function (err, res) {
@@ -190,6 +191,7 @@ test('cup', function (t) {
190191

191192
resolve('./cup', { basedir: dir, extensions: ['.js'] }, function (err, res) {
192193
t.equal(err.message, "Cannot find module './cup' from '" + path.resolve(dir) + "'");
194+
t.equal(err.code, 'MODULE_NOT_FOUND');
193195
});
194196
});
195197

@@ -213,7 +215,7 @@ test('mug', function (t) {
213215
});
214216

215217
test('other path', function (t) {
216-
t.plan(4);
218+
t.plan(6);
217219
var resolverDir = path.join(__dirname, 'resolver');
218220
var dir = path.join(resolverDir, 'bar');
219221
var otherDir = path.join(resolverDir, 'other_path');
@@ -230,10 +232,12 @@ test('other path', function (t) {
230232

231233
resolve('root', { basedir: dir }, function (err, res) {
232234
t.equal(err.message, "Cannot find module 'root' from '" + path.resolve(dir) + "'");
235+
t.equal(err.code, 'MODULE_NOT_FOUND');
233236
});
234237

235238
resolve('zzz', { basedir: dir, paths: [otherDir] }, function (err, res) {
236239
t.equal(err.message, "Cannot find module 'zzz' from '" + path.resolve(dir) + "'");
240+
t.equal(err.code, 'MODULE_NOT_FOUND');
237241
});
238242
});
239243

0 commit comments

Comments
 (0)