@@ -6,9 +6,9 @@ import fs from 'fs';
6
6
import { createFilter } from 'rollup-pluginutils' ;
7
7
import { peerDependencies } from '../package.json' ;
8
8
9
- const builtins = builtinList . reduce ( ( set , id ) => set . add ( id ) , new Set ( ) ) ;
9
+ const builtins = new Set ( builtinList ) ;
10
10
11
- const ES6_BROWSER_EMPTY = resolve ( __dirname , '../src/ empty.js' ) ;
11
+ const ES6_BROWSER_EMPTY = '\0node-resolve: empty.js';
12
12
// It is important that .mjs occur before .js so that Rollup will interpret npm modules
13
13
// which deploy both ESM .mjs and CommonJS .js files as ESM.
14
14
const DEFAULT_EXTS = [ '.mjs' , '.js' , '.json' , '.node' ] ;
@@ -91,7 +91,7 @@ export default function nodeResolve ( options = {} ) {
91
91
: new RegExp ( '^' + String ( o ) . replace ( / [ \\ ^ $ * + ? . ( ) | [ \] { } ] / g, '\\$&' ) + '$' )
92
92
)
93
93
: null ;
94
- const browserMapCache = { } ;
94
+ const browserMapCache = new Map ( ) ;
95
95
96
96
if ( options . skip ) {
97
97
throw new Error ( 'options.skip is no longer supported — you should use the main Rollup `external` option instead' ) ;
@@ -179,6 +179,10 @@ export default function nodeResolve ( options = {} ) {
179
179
} ,
180
180
181
181
resolveId ( importee , importer ) {
182
+ if ( importee === ES6_BROWSER_EMPTY ) {
183
+ return importee ;
184
+ }
185
+
182
186
if ( / \0 / . test ( importee ) ) return null ; // ignore IDs with null character, these belong to other plugins
183
187
184
188
const basedir = importer ? dirname ( importer ) : process . cwd ( ) ;
@@ -188,21 +192,22 @@ export default function nodeResolve ( options = {} ) {
188
192
}
189
193
190
194
// https://github.com/defunctzombie/package-browser-field-spec
191
- if ( useBrowserOverrides && browserMapCache [ importer ] ) {
195
+ const browser = browserMapCache . get ( importer ) ;
196
+ if ( useBrowserOverrides && browser ) {
192
197
const resolvedImportee = resolve ( basedir , importee ) ;
193
- const browser = browserMapCache [ importer ] ;
194
198
if ( browser [ importee ] === false || browser [ resolvedImportee ] === false ) {
195
199
return ES6_BROWSER_EMPTY ;
196
200
}
197
- if ( browser [ importee ] || browser [ resolvedImportee ] || browser [ resolvedImportee + '.js' ] || browser [ resolvedImportee + '.json' ] ) {
198
- importee = browser [ importee ] || browser [ resolvedImportee ] || browser [ resolvedImportee + '.js' ] || browser [ resolvedImportee + '.json' ] ;
201
+ const browserImportee = browser [ importee ] || browser [ resolvedImportee ] || browser [ resolvedImportee + '.js' ] || browser [ resolvedImportee + '.json' ] ;
202
+ if ( browserImportee ) {
203
+ importee = browserImportee ;
199
204
}
200
205
}
201
206
202
207
const parts = importee . split ( / [ / \\ ] / ) ;
203
208
let id = parts . shift ( ) ;
204
209
205
- if ( id [ 0 ] === '@' && parts . length ) {
210
+ if ( id [ 0 ] === '@' && parts . length > 0 ) {
206
211
// scoped packages
207
212
id += `/${ parts . shift ( ) } ` ;
208
213
} else if ( id [ 0 ] === '.' ) {
@@ -261,12 +266,12 @@ export default function nodeResolve ( options = {} ) {
261
266
if ( resolved && packageBrowserField ) {
262
267
if ( packageBrowserField . hasOwnProperty ( resolved ) ) {
263
268
if ( ! packageBrowserField [ resolved ] ) {
264
- browserMapCache [ resolved ] = packageBrowserField ;
269
+ browserMapCache . set ( resolved , packageBrowserField ) ;
265
270
return ES6_BROWSER_EMPTY ;
266
271
}
267
272
resolved = packageBrowserField [ resolved ] ;
268
273
}
269
- browserMapCache [ resolved ] = packageBrowserField ;
274
+ browserMapCache . set ( resolved , packageBrowserField ) ;
270
275
}
271
276
272
277
if ( hasPackageEntry ) {
@@ -298,6 +303,13 @@ export default function nodeResolve ( options = {} ) {
298
303
}
299
304
} )
300
305
. catch ( ( ) => null ) ;
301
- }
306
+ } ,
307
+
308
+ load ( importee ) {
309
+ if ( importee === ES6_BROWSER_EMPTY ) {
310
+ return 'export default {};' ;
311
+ }
312
+ return null ;
313
+ } ,
302
314
} ;
303
315
}
0 commit comments