@@ -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 ( ) ) ;
@@ -251,19 +260,18 @@ module.exports = function resolve(x, options, callback) {
251260 if ( dirs . length === 0 ) return cb ( null , undefined ) ;
252261 var dir = dirs [ 0 ] ;
253262
254- isDirectory ( dir , isdir ) ;
263+ isDirectory ( path . dirname ( dir ) , isdir ) ;
255264
256265 function isdir ( err , isdir ) {
257266 if ( err ) return cb ( err ) ;
258267 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 ) ;
261269 }
262270
263271 function onfile ( err , m , pkg ) {
264272 if ( err ) return cb ( err ) ;
265273 if ( m ) return cb ( null , m , pkg ) ;
266- loadAsDirectory ( path . join ( dir , x ) , opts . package , ondir ) ;
274+ loadAsDirectory ( dir , opts . package , ondir ) ;
267275 }
268276
269277 function ondir ( err , n , pkg ) {
@@ -273,6 +281,10 @@ module.exports = function resolve(x, options, callback) {
273281 }
274282 }
275283 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+ ) ;
277289 }
278290} ;
0 commit comments