@@ -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 ( ) ) ;
@@ -251,19 +260,18 @@ module.exports = function resolve(x, options, callback) {
251
260
if ( dirs . length === 0 ) return cb ( null , undefined ) ;
252
261
var dir = dirs [ 0 ] ;
253
262
254
- isDirectory ( dir , isdir ) ;
263
+ isDirectory ( path . dirname ( dir ) , isdir ) ;
255
264
256
265
function isdir ( err , isdir ) {
257
266
if ( err ) return cb ( err ) ;
258
267
if ( ! isdir ) return processDirs ( cb , dirs . slice ( 1 ) ) ;
259
- var file = path . join ( dir , x ) ;
260
- loadAsFile ( file , opts . package , onfile ) ;
268
+ loadAsFile ( dir , opts . package , onfile ) ;
261
269
}
262
270
263
271
function onfile ( err , m , pkg ) {
264
272
if ( err ) return cb ( err ) ;
265
273
if ( m ) return cb ( null , m , pkg ) ;
266
- loadAsDirectory ( path . join ( dir , x ) , opts . package , ondir ) ;
274
+ loadAsDirectory ( dir , opts . package , ondir ) ;
267
275
}
268
276
269
277
function ondir ( err , n , pkg ) {
@@ -273,6 +281,10 @@ module.exports = function resolve(x, options, callback) {
273
281
}
274
282
}
275
283
function loadNodeModules ( x , start , cb ) {
276
- processDirs ( cb , nodeModulesPaths ( start , opts , x ) ) ;
284
+ var thunk = function ( ) { return getPackageCandidates ( x , start , opts ) ; } ;
285
+ processDirs (
286
+ cb ,
287
+ packageIterator ? packageIterator ( x , start , thunk , opts ) : thunk ( )
288
+ ) ;
277
289
}
278
290
} ;
0 commit comments