Skip to content
This repository was archived by the owner on Aug 4, 2021. It is now read-only.

Commit 1719511

Browse files
manucorporatlukastaegert
authored andcommittedJun 16, 2019
fix(): make empty.js virtual (#224)
* fix(): make empty.js virtual * Using \0 for virtual module
1 parent 75bebd4 commit 1719511

File tree

3 files changed

+24
-13
lines changed

3 files changed

+24
-13
lines changed
 

‎src/empty.js

-1
This file was deleted.

‎src/index.js

+23-11
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ import fs from 'fs';
66
import {createFilter} from 'rollup-pluginutils';
77
import {peerDependencies} from '../package.json';
88

9-
const builtins = builtinList.reduce((set, id) => set.add(id), new Set());
9+
const builtins = new Set(builtinList);
1010

11-
const ES6_BROWSER_EMPTY = resolve( __dirname, '../src/empty.js' );
11+
const ES6_BROWSER_EMPTY = '\0node-resolve:empty.js';
1212
// It is important that .mjs occur before .js so that Rollup will interpret npm modules
1313
// which deploy both ESM .mjs and CommonJS .js files as ESM.
1414
const DEFAULT_EXTS = [ '.mjs', '.js', '.json', '.node' ];
@@ -91,7 +91,7 @@ export default function nodeResolve ( options = {} ) {
9191
: new RegExp('^' + String(o).replace(/[\\^$*+?.()|[\]{}]/g, '\\$&') + '$')
9292
)
9393
: null;
94-
const browserMapCache = {};
94+
const browserMapCache = new Map();
9595

9696
if ( options.skip ) {
9797
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 = {} ) {
179179
},
180180

181181
resolveId ( importee, importer ) {
182+
if (importee === ES6_BROWSER_EMPTY) {
183+
return importee;
184+
}
185+
182186
if ( /\0/.test( importee ) ) return null; // ignore IDs with null character, these belong to other plugins
183187

184188
const basedir = importer ? dirname( importer ) : process.cwd();
@@ -188,21 +192,22 @@ export default function nodeResolve ( options = {} ) {
188192
}
189193

190194
// https://github.com/defunctzombie/package-browser-field-spec
191-
if (useBrowserOverrides && browserMapCache[importer]) {
195+
const browser = browserMapCache.get(importer);
196+
if (useBrowserOverrides && browser) {
192197
const resolvedImportee = resolve( basedir, importee );
193-
const browser = browserMapCache[importer];
194198
if (browser[importee] === false || browser[resolvedImportee] === false) {
195199
return ES6_BROWSER_EMPTY;
196200
}
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;
199204
}
200205
}
201206

202207
const parts = importee.split( /[/\\]/ );
203208
let id = parts.shift();
204209

205-
if ( id[0] === '@' && parts.length ) {
210+
if ( id[0] === '@' && parts.length > 0 ) {
206211
// scoped packages
207212
id += `/${parts.shift()}`;
208213
} else if ( id[0] === '.' ) {
@@ -261,12 +266,12 @@ export default function nodeResolve ( options = {} ) {
261266
if ( resolved && packageBrowserField ) {
262267
if ( packageBrowserField.hasOwnProperty(resolved) ) {
263268
if (!packageBrowserField[resolved]) {
264-
browserMapCache[resolved] = packageBrowserField;
269+
browserMapCache.set(resolved, packageBrowserField);
265270
return ES6_BROWSER_EMPTY;
266271
}
267272
resolved = packageBrowserField[ resolved ];
268273
}
269-
browserMapCache[resolved] = packageBrowserField;
274+
browserMapCache.set(resolved, packageBrowserField);
270275
}
271276

272277
if ( hasPackageEntry ) {
@@ -298,6 +303,13 @@ export default function nodeResolve ( options = {} ) {
298303
}
299304
})
300305
.catch(() => null);
301-
}
306+
},
307+
308+
load ( importee ) {
309+
if ( importee === ES6_BROWSER_EMPTY ) {
310+
return 'export default {};';
311+
}
312+
return null;
313+
},
302314
};
303315
}

‎test/samples/browser-object-with-false/main.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import Client from 'isomorphic-object-with-false';
22
import HTTPTracker from 'isomorphic-object-with-false/lib/client/http-tracker';
3-
import ES6_BROWSER_EMPTY from '../../../src/empty';
3+
import ES6_BROWSER_EMPTY from '\0node-resolve:empty.js';
44
import HTTPTrackerWithSubPath from 'isomorphic-object-with-false/lib/subpath/foo';
55

66
// do some assert

0 commit comments

Comments
 (0)
This repository has been archived.