From 055eded7cfe8246ec200eaee950550046f670798 Mon Sep 17 00:00:00 2001 From: Jesse McCarthy Date: Wed, 21 Jan 2015 11:05:58 -0500 Subject: [PATCH 1/4] Add failing test for parent filename in error msg. --- test/resolver.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/test/resolver.js b/test/resolver.js index 1301e55a..cfaa2199 100644 --- a/test/resolver.js +++ b/test/resolver.js @@ -3,7 +3,7 @@ var test = require('tap').test; var resolve = require('../'); test('async foo', function (t) { - t.plan(9); + t.plan(10); var dir = __dirname + '/resolver'; resolve('./foo', { basedir : dir }, function (err, res, pkg) { @@ -33,6 +33,11 @@ test('async foo', function (t) { resolve('foo', { basedir : dir }, function (err) { t.equal(err.message, "Cannot find module 'foo' from '" + path.resolve(dir) + "'"); }); + + // Test that filename is reported as the "from" value when passed. + resolve('foo', { basedir : dir, filename : path.join(dir, 'baz.js') }, function (err) { + t.equal(err.message, "Cannot find module 'foo' from '" + path.join(dir, 'baz.js') + "'"); + }); }); test('bar', function (t) { From 4638c411808df231bae0de4e63cd1ac9d1cef810 Mon Sep 17 00:00:00 2001 From: Jesse McCarthy Date: Wed, 21 Jan 2015 11:08:12 -0500 Subject: [PATCH 2/4] Add failing test for parent filename in error msg. --- test/resolver.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/test/resolver.js b/test/resolver.js index cfaa2199..6b801aa3 100644 --- a/test/resolver.js +++ b/test/resolver.js @@ -180,7 +180,7 @@ test('normalize', function (t) { }); test('cup', function (t) { - t.plan(3); + t.plan(4); var dir = __dirname + '/resolver'; resolve('./cup', { basedir : dir, extensions : [ '.js', '.coffee' ] }, @@ -198,6 +198,12 @@ test('cup', function (t) { function (err, res) { t.equal(err.message, "Cannot find module './cup' from '" + path.resolve(dir) + "'"); }); + + // Test that filename is reported as the "from" value when passed. + resolve('./cup', { basedir : dir, extensions : [ '.js' ], filename : path.join(dir, 'cupboard.js') }, + function (err, res) { + t.equal(err.message, "Cannot find module './cup' from '" + path.join(dir, 'cupboard.js') + "'"); + }); }); test('mug', function (t) { From 658f7b56db6c6a582f4db1f0f05e57543d4a6399 Mon Sep 17 00:00:00 2001 From: Jesse McCarthy Date: Wed, 21 Jan 2015 11:37:01 -0500 Subject: [PATCH 3/4] Add failing test for parent filename in error msg. --- test/resolver_sync.js | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/test/resolver_sync.js b/test/resolver_sync.js index 5f808f34..d2709517 100644 --- a/test/resolver_sync.js +++ b/test/resolver_sync.js @@ -1,5 +1,6 @@ var test = require('tap').test; var resolve = require('../'); +var path = require('path'); test('foo', function (t) { var dir = __dirname + '/resolver'; @@ -17,7 +18,19 @@ test('foo', function (t) { t.throws(function () { resolve.sync('foo', { basedir : dir }); }); - + + // Test that filename is reported as the "from" value when passed. + t.throws( + function () { + resolve.sync('foo', { basedir : dir, filename : path.join(dir, 'bar.js') }); + }, + { + name : 'Error', + message : "Cannot find module 'foo' from '" + + path.join(dir, 'bar.js') + "'" + } + ); + t.end(); }); From 4eb424ba952af0c651fcaf14e05395b146c541dc Mon Sep 17 00:00:00 2001 From: Jesse McCarthy Date: Wed, 21 Jan 2015 10:06:26 -0500 Subject: [PATCH 4/4] Utilize opts.filename when available to ID parent. --- lib/async.js | 7 ++++--- lib/sync.js | 7 ++++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/lib/async.js b/lib/async.js index 83b2c6c4..bd952801 100644 --- a/lib/async.js +++ b/lib/async.js @@ -27,7 +27,8 @@ module.exports = function resolve (x, opts, cb) { var extensions = opts.extensions || [ '.js' ]; var y = opts.basedir || path.dirname(caller()); - + var parent = opts.filename || y; + opts.paths = opts.paths || []; if (/^(?:\.\.?(?:\/|$)|\/|([A-Za-z]:)?[\\\/])/.test(x)) { @@ -39,7 +40,7 @@ module.exports = function resolve (x, opts, cb) { else loadAsDirectory(path.resolve(y, x), function (err, d, pkg) { if (err) cb(err) else if (d) cb(null, d, pkg) - else cb(new Error("Cannot find module '" + x + "' from '" + y + "'")) + else cb(new Error("Cannot find module '" + x + "' from '" + parent + "'")) }) }); } @@ -47,7 +48,7 @@ module.exports = function resolve (x, opts, cb) { if (err) cb(err) else if (n) cb(null, n, pkg) else if (core[x]) return cb(null, x); - else cb(new Error("Cannot find module '" + x + "' from '" + y + "'")) + else cb(new Error("Cannot find module '" + x + "' from '" + parent + "'")) }); function loadAsFile (x, pkg, cb) { diff --git a/lib/sync.js b/lib/sync.js index ef91eddb..c4328230 100644 --- a/lib/sync.js +++ b/lib/sync.js @@ -15,6 +15,7 @@ module.exports = function (x, opts) { var extensions = opts.extensions || [ '.js' ]; var y = opts.basedir || path.dirname(caller()); + var parent = opts.filename || y; opts.paths = opts.paths || []; @@ -29,9 +30,9 @@ module.exports = function (x, opts) { } if (core[x]) return x; - - throw new Error("Cannot find module '" + x + "' from '" + y + "'"); - + + throw new Error("Cannot find module '" + x + "' from '" + parent + "'"); + function loadAsFileSync (x) { if (isFile(x)) { return x;