@@ -36,6 +36,14 @@ var maybeUnwrapSymlink = function maybeUnwrapSymlink(x, opts, cb) {
36
36
}
37
37
} ;
38
38
39
+ var getPackageCandidates = function getPackageCandidates ( x , start , opts ) {
40
+ var dirs = nodeModulesPaths ( start , opts , x ) ;
41
+ for ( var i = 0 ; i < dirs . length ; i ++ ) {
42
+ dirs [ i ] = path . join ( dirs [ i ] , x ) ;
43
+ }
44
+ return dirs ;
45
+ } ;
46
+
39
47
module . exports = function resolve ( x , options , callback ) {
40
48
var cb = callback ;
41
49
var opts = options ;
@@ -55,6 +63,7 @@ module.exports = function resolve(x, options, callback) {
55
63
var isFile = opts . isFile || defaultIsFile ;
56
64
var isDirectory = opts . isDirectory || defaultIsDir ;
57
65
var readFile = opts . readFile || fs . readFile ;
66
+ var packageIterator = opts . packageIterator ;
58
67
59
68
var extensions = opts . extensions || [ '.js' ] ;
60
69
var basedir = opts . basedir || path . dirname ( caller ( ) ) ;
@@ -265,19 +274,18 @@ module.exports = function resolve(x, options, callback) {
265
274
if ( dirs . length === 0 ) return cb ( null , undefined ) ;
266
275
var dir = dirs [ 0 ] ;
267
276
268
- isDirectory ( dir , isdir ) ;
277
+ isDirectory ( path . dirname ( dir ) , isdir ) ;
269
278
270
279
function isdir ( err , isdir ) {
271
280
if ( err ) return cb ( err ) ;
272
281
if ( ! isdir ) return processDirs ( cb , dirs . slice ( 1 ) ) ;
273
- var file = path . join ( dir , x ) ;
274
- loadAsFile ( file , opts . package , onfile ) ;
282
+ loadAsFile ( dir , opts . package , onfile ) ;
275
283
}
276
284
277
285
function onfile ( err , m , pkg ) {
278
286
if ( err ) return cb ( err ) ;
279
287
if ( m ) return cb ( null , m , pkg ) ;
280
- loadAsDirectory ( path . join ( dir , x ) , opts . package , ondir ) ;
288
+ loadAsDirectory ( dir , opts . package , ondir ) ;
281
289
}
282
290
283
291
function ondir ( err , n , pkg ) {
@@ -287,6 +295,10 @@ module.exports = function resolve(x, options, callback) {
287
295
}
288
296
}
289
297
function loadNodeModules ( x , start , cb ) {
290
- processDirs ( cb , nodeModulesPaths ( start , opts , x ) ) ;
298
+ var thunk = function ( ) { return getPackageCandidates ( x , start , opts ) ; } ;
299
+ processDirs (
300
+ cb ,
301
+ packageIterator ? packageIterator ( x , start , thunk , opts ) : thunk ( )
302
+ ) ;
291
303
}
292
304
} ;
0 commit comments