@@ -36,6 +36,14 @@ var maybeUnwrapSymlink = function maybeUnwrapSymlink(x, opts, cb) {
3636 }
3737} ;
3838
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+
3947module . exports = function resolve ( x , options , callback ) {
4048 var cb = callback ;
4149 var opts = options ;
@@ -55,6 +63,7 @@ module.exports = function resolve(x, options, callback) {
5563 var isFile = opts . isFile || defaultIsFile ;
5664 var isDirectory = opts . isDirectory || defaultIsDir ;
5765 var readFile = opts . readFile || fs . readFile ;
66+ var packageIterator = opts . packageIterator ;
5867
5968 var extensions = opts . extensions || [ '.js' ] ;
6069 var basedir = opts . basedir || path . dirname ( caller ( ) ) ;
@@ -265,19 +274,18 @@ module.exports = function resolve(x, options, callback) {
265274 if ( dirs . length === 0 ) return cb ( null , undefined ) ;
266275 var dir = dirs [ 0 ] ;
267276
268- isDirectory ( dir , isdir ) ;
277+ isDirectory ( path . dirname ( dir ) , isdir ) ;
269278
270279 function isdir ( err , isdir ) {
271280 if ( err ) return cb ( err ) ;
272281 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 ) ;
275283 }
276284
277285 function onfile ( err , m , pkg ) {
278286 if ( err ) return cb ( err ) ;
279287 if ( m ) return cb ( null , m , pkg ) ;
280- loadAsDirectory ( path . join ( dir , x ) , opts . package , ondir ) ;
288+ loadAsDirectory ( dir , opts . package , ondir ) ;
281289 }
282290
283291 function ondir ( err , n , pkg ) {
@@ -287,6 +295,10 @@ module.exports = function resolve(x, options, callback) {
287295 }
288296 }
289297 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+ ) ;
291303 }
292304} ;
0 commit comments