@@ -61,11 +61,17 @@ module.exports = function resolve(x, options, callback) {
61
61
var res ;
62
62
function validBasedir ( ) {
63
63
if ( / ^ (?: \. \. ? (?: \/ | $ ) | \/ | ( [ A - Z a - z ] : ) ? [ / \\ ] ) / . test ( x ) ) {
64
- res = path . resolve ( basedir , x ) ;
64
+ res = path . normalize ( path . join ( basedir , x ) ) ;
65
65
if ( x === '..' || x . slice ( - 1 ) === '/' ) res += '/' ;
66
66
if ( / \/ $ / . test ( x ) && res === basedir ) {
67
67
loadAsDirectory ( res , opts . package , onfile ) ;
68
- } else loadAsFile ( res , opts . package , onfile ) ;
68
+ } else {
69
+ isFileWithExtensions ( res , function ( err , resIsFile ) {
70
+ if ( err ) { return onfile ( err ) ; }
71
+ if ( resIsFile ) { return loadAsFile ( res , opts . package , onfile ) ; }
72
+ return loadAsDirectory ( res , opts . package , onfile ) ;
73
+ } ) ;
74
+ }
69
75
} else loadNodeModules ( x , basedir , function ( err , n , pkg ) {
70
76
if ( err ) cb ( err ) ;
71
77
else if ( core [ x ] ) return cb ( null , x ) ;
@@ -78,6 +84,27 @@ module.exports = function resolve(x, options, callback) {
78
84
} ) ;
79
85
}
80
86
87
+ function isFileWithExtensions ( file , cb , extensionIndex ) {
88
+ var newExtensionIndex = 0 ;
89
+ var filename = file ;
90
+ if ( typeof extensionIndex === 'number' ) {
91
+ if ( extensionIndex >= extensions . length ) {
92
+ return cb ( null , false ) ;
93
+ }
94
+
95
+ newExtensionIndex = extensionIndex + 1 ;
96
+ filename = file + extensions [ extensionIndex ] ;
97
+ }
98
+
99
+ isFile ( filename , function ( err , filenameIsFile ) {
100
+ if ( err ) { return cb ( err ) ; }
101
+ if ( filenameIsFile ) {
102
+ return cb ( null , filenameIsFile ) ;
103
+ }
104
+ isFileWithExtensions ( file , cb , newExtensionIndex ) ;
105
+ } ) ;
106
+ }
107
+
81
108
function onfile ( err , m , pkg ) {
82
109
if ( err ) cb ( err ) ;
83
110
else if ( m ) cb ( null , m , pkg ) ;
0 commit comments