@@ -38,6 +38,8 @@ function cachedIsFile (file, cb) {
38
38
isFileCache [ file ] . then ( contents => cb ( null , contents ) , cb ) ;
39
39
}
40
40
41
+ const resolveIdAsync = ( file , opts ) => new Promise ( ( fulfil , reject ) => resolveId ( file , opts , ( err , contents ) => err ? reject ( err ) : fulfil ( contents ) ) ) ;
42
+
41
43
export default function nodeResolve ( options = { } ) {
42
44
const useModule = options . module !== false ;
43
45
const useMain = options . main !== false ;
@@ -109,100 +111,92 @@ export default function nodeResolve ( options = {} ) {
109
111
110
112
if ( only && ! only . some ( pattern => pattern . test ( id ) ) ) return null ;
111
113
112
- return new Promise ( ( fulfil , reject ) => {
113
- let disregardResult = false ;
114
- let packageBrowserField = false ;
115
- const extensions = options . extensions || DEFAULT_EXTS ;
116
-
117
- const resolveOptions = {
118
- basedir : dirname ( importer ) ,
119
- packageFilter ( pkg , pkgPath ) {
120
- const pkgRoot = dirname ( pkgPath ) ;
121
- if ( options . browser && typeof pkg [ 'browser' ] === 'object' ) {
122
- packageBrowserField = Object . keys ( pkg [ 'browser' ] ) . reduce ( ( browser , key ) => {
123
- const resolved = pkg [ 'browser' ] [ key ] === false ? false : resolve ( pkgRoot , pkg [ 'browser' ] [ key ] ) ;
124
- browser [ key ] = resolved ;
125
- if ( key [ 0 ] === '.' ) {
126
- const absoluteKey = resolve ( pkgRoot , key ) ;
127
- browser [ absoluteKey ] = resolved ;
128
- if ( ! extname ( key ) ) {
129
- extensions . reduce ( ( browser , ext ) => {
130
- browser [ absoluteKey + ext ] = browser [ key ] ;
131
- return browser ;
132
- } , browser ) ;
133
- }
114
+ let disregardResult = false ;
115
+ let packageBrowserField = false ;
116
+ const extensions = options . extensions || DEFAULT_EXTS ;
117
+
118
+ const resolveOptions = {
119
+ basedir : dirname ( importer ) ,
120
+ packageFilter ( pkg , pkgPath ) {
121
+ const pkgRoot = dirname ( pkgPath ) ;
122
+ if ( options . browser && typeof pkg [ 'browser' ] === 'object' ) {
123
+ packageBrowserField = Object . keys ( pkg [ 'browser' ] ) . reduce ( ( browser , key ) => {
124
+ const resolved = pkg [ 'browser' ] [ key ] === false ? false : resolve ( pkgRoot , pkg [ 'browser' ] [ key ] ) ;
125
+ browser [ key ] = resolved ;
126
+ if ( key [ 0 ] === '.' ) {
127
+ const absoluteKey = resolve ( pkgRoot , key ) ;
128
+ browser [ absoluteKey ] = resolved ;
129
+ if ( ! extname ( key ) ) {
130
+ extensions . reduce ( ( browser , ext ) => {
131
+ browser [ absoluteKey + ext ] = browser [ key ] ;
132
+ return browser ;
133
+ } , browser ) ;
134
134
}
135
- return browser ;
136
- } , { } ) ;
137
- }
135
+ }
136
+ return browser ;
137
+ } , { } ) ;
138
+ }
138
139
139
- if ( options . browser && typeof pkg [ 'browser' ] === 'string' ) {
140
- pkg [ 'main' ] = pkg [ 'browser' ] ;
141
- } else if ( useModule && pkg [ 'module' ] ) {
142
- pkg [ 'main' ] = pkg [ 'module' ] ;
143
- } else if ( useJsnext && pkg [ 'jsnext:main' ] ) {
144
- pkg [ 'main' ] = pkg [ 'jsnext:main' ] ;
145
- } else if ( ( useJsnext || useModule ) && ! useMain ) {
146
- disregardResult = true ;
147
- }
148
- return pkg ;
149
- } ,
150
- readFile : cachedReadFile ,
151
- isFile : cachedIsFile ,
152
- extensions : extensions
153
- } ;
154
-
155
- if ( preserveSymlinks !== undefined ) {
156
- resolveOptions . preserveSymlinks = preserveSymlinks ;
157
- }
140
+ if ( options . browser && typeof pkg [ 'browser' ] === 'string' ) {
141
+ pkg [ 'main' ] = pkg [ 'browser' ] ;
142
+ } else if ( useModule && pkg [ 'module' ] ) {
143
+ pkg [ 'main' ] = pkg [ 'module' ] ;
144
+ } else if ( useJsnext && pkg [ 'jsnext:main' ] ) {
145
+ pkg [ 'main' ] = pkg [ 'jsnext:main' ] ;
146
+ } else if ( ( useJsnext || useModule ) && ! useMain ) {
147
+ disregardResult = true ;
148
+ }
149
+ return pkg ;
150
+ } ,
151
+ readFile : cachedReadFile ,
152
+ isFile : cachedIsFile ,
153
+ extensions : extensions
154
+ } ;
155
+
156
+ if ( preserveSymlinks !== undefined ) {
157
+ resolveOptions . preserveSymlinks = preserveSymlinks ;
158
+ }
158
159
159
- resolveId (
160
- importee ,
161
- Object . assign ( resolveOptions , customResolveOptions ) ,
162
- ( err , resolved ) => {
163
- if ( options . browser && packageBrowserField ) {
164
- if ( packageBrowserField [ resolved ] ) {
165
- resolved = packageBrowserField [ resolved ] ;
166
- }
167
- browserMapCache [ resolved ] = packageBrowserField ;
160
+ return resolveIdAsync (
161
+ importee ,
162
+ Object . assign ( resolveOptions , customResolveOptions )
163
+ )
164
+ . catch ( ( ) => false )
165
+ . then ( resolved => {
166
+ if ( options . browser && packageBrowserField ) {
167
+ if ( packageBrowserField [ resolved ] ) {
168
+ resolved = packageBrowserField [ resolved ] ;
168
169
}
170
+ browserMapCache [ resolved ] = packageBrowserField ;
171
+ }
169
172
170
- if ( ! disregardResult && ! err ) {
171
- if ( ! preserveSymlinks && resolved && fs . existsSync ( resolved ) ) {
172
- resolved = fs . realpathSync ( resolved ) ;
173
- }
173
+ if ( ! disregardResult && resolved !== false ) {
174
+ if ( ! preserveSymlinks && resolved && fs . existsSync ( resolved ) ) {
175
+ resolved = fs . realpathSync ( resolved ) ;
176
+ }
174
177
175
- if ( ~ builtins . indexOf ( resolved ) ) {
176
- fulfil ( null ) ;
177
- } else if ( ~ builtins . indexOf ( importee ) && preferBuiltins ) {
178
- if ( ! isPreferBuiltinsSet ) {
179
- onwarn (
180
- `preferring built-in module '${ importee } ' over local alternative ` +
181
- `at '${ resolved } ', pass 'preferBuiltins: false' to disable this ` +
182
- `behavior or 'preferBuiltins: true' to disable this warning`
183
- ) ;
184
- }
185
- fulfil ( null ) ;
186
- } else if ( jail && resolved . indexOf ( normalize ( jail . trim ( sep ) ) ) !== 0 ) {
187
- fulfil ( null ) ;
178
+ if ( ~ builtins . indexOf ( resolved ) ) {
179
+ return null ;
180
+ } else if ( ~ builtins . indexOf ( importee ) && preferBuiltins ) {
181
+ if ( ! isPreferBuiltinsSet ) {
182
+ onwarn (
183
+ `preferring built-in module '${ importee } ' over local alternative ` +
184
+ `at '${ resolved } ', pass 'preferBuiltins: false' to disable this ` +
185
+ `behavior or 'preferBuiltins: true' to disable this warning`
186
+ ) ;
188
187
}
188
+ return null ;
189
+ } else if ( jail && resolved . indexOf ( normalize ( jail . trim ( sep ) ) ) !== 0 ) {
190
+ return null ;
189
191
}
192
+ }
190
193
191
- if ( resolved && options . modulesOnly ) {
192
- fs . readFile ( resolved , 'utf-8' , ( err , code ) => {
193
- if ( err ) {
194
- reject ( err ) ;
195
- } else {
196
- const valid = isModule ( code ) ;
197
- fulfil ( valid ? resolved : null ) ;
198
- }
199
- } ) ;
200
- } else {
201
- fulfil ( resolved ) ;
202
- }
194
+ if ( resolved && options . modulesOnly ) {
195
+ return readFileAsync ( resolved , 'utf-8' ) . then ( code => isModule ( code ) ? resolved : null ) ;
196
+ } else {
197
+ return resolved === false ? null : resolved ;
203
198
}
204
- ) ;
205
- } ) ;
199
+ } ) ;
206
200
}
207
201
} ;
208
202
}
0 commit comments