From 39c9ce1d3f53841e51d28b1d6e973263d710832e Mon Sep 17 00:00:00 2001 From: Tom Jenkinson Date: Sat, 5 Sep 2020 19:50:52 +0100 Subject: [PATCH 01/18] do not ignore errors --- packages/node-resolve/src/index.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/node-resolve/src/index.js b/packages/node-resolve/src/index.js index 0c045b003..47b7040f9 100644 --- a/packages/node-resolve/src/index.js +++ b/packages/node-resolve/src/index.js @@ -18,7 +18,7 @@ import { const builtins = new Set(builtinList); const ES6_BROWSER_EMPTY = '\0node-resolve:empty.js'; const nullFn = () => null; -const deepFreeze = object => { +const deepFreeze = (object) => { Object.freeze(object); for (const value of Object.values(object)) { @@ -273,7 +273,9 @@ export function nodeResolve(opts = {}) { }; return result; } catch (error) { - return null; + // rethrow for now to prevent indentation changes + // TODO remove block + throw error; } }, From b4565200f651adf6faa3101cb5b9b0dee9af1682 Mon Sep 17 00:00:00 2001 From: Tom Jenkinson Date: Sat, 5 Sep 2020 19:53:27 +0100 Subject: [PATCH 02/18] do not error when import specifier does not map to file --- packages/node-resolve/src/util.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/node-resolve/src/util.js b/packages/node-resolve/src/util.js index c4c8949c6..3bd56607d 100644 --- a/packages/node-resolve/src/util.js +++ b/packages/node-resolve/src/util.js @@ -173,7 +173,11 @@ export function resolveImportSpecifiers(importSpecifierList, resolveOptions) { return resolveId(importSpecifierList[i], resolveOptions).then((result) => { if (!resolveOptions.preserveSymlinks) { - result = realpathSync(result); + try { + result = realpathSync(result); + } catch (e) { + // maybe the file does not exist. Might be a builtin + } } return result; }); From d78fa0fe8fc7ee3c01e5fd1703fadb6981c21245 Mon Sep 17 00:00:00 2001 From: Tom Jenkinson Date: Sat, 5 Sep 2020 19:54:05 +0100 Subject: [PATCH 03/18] always swallow MODULE_NOT_FOUND errors as not being able to resolve the id is a valid output --- packages/node-resolve/src/util.js | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/packages/node-resolve/src/util.js b/packages/node-resolve/src/util.js index 3bd56607d..0c47fe774 100644 --- a/packages/node-resolve/src/util.js +++ b/packages/node-resolve/src/util.js @@ -183,14 +183,12 @@ export function resolveImportSpecifiers(importSpecifierList, resolveOptions) { }); }); - if (i < importSpecifierList.length - 1) { - // swallow MODULE_NOT_FOUND errors from all but the last resolution - promise = promise.catch((error) => { - if (error.code !== 'MODULE_NOT_FOUND') { - throw error; - } - }); - } + // swallow MODULE_NOT_FOUND errors + promise = promise.catch((error) => { + if (error.code !== 'MODULE_NOT_FOUND') { + throw error; + } + }); } return promise; From 81890b772924ff0d910a83174860fbe9a9cabb67 Mon Sep 17 00:00:00 2001 From: Tom Jenkinson Date: Sat, 5 Sep 2020 19:55:52 +0100 Subject: [PATCH 04/18] return null from resolveId early if can't resolve --- packages/node-resolve/src/index.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/node-resolve/src/index.js b/packages/node-resolve/src/index.js index 47b7040f9..4517e7cb8 100644 --- a/packages/node-resolve/src/index.js +++ b/packages/node-resolve/src/index.js @@ -221,8 +221,11 @@ export function nodeResolve(opts = {}) { try { let resolved = await resolveImportSpecifiers(importSpecifierList, resolveOptions); + if (!resolved) { + return null; + } - if (resolved && packageBrowserField) { + if (packageBrowserField) { if (Object.prototype.hasOwnProperty.call(packageBrowserField, resolved)) { if (!packageBrowserField[resolved]) { browserMapCache.set(resolved, packageBrowserField); @@ -233,7 +236,7 @@ export function nodeResolve(opts = {}) { browserMapCache.set(resolved, packageBrowserField); } - if (hasPackageEntry && !preserveSymlinks && resolved) { + if (hasPackageEntry && !preserveSymlinks) { const fileExists = await exists(resolved); if (fileExists) { resolved = await realpath(resolved); @@ -257,7 +260,7 @@ export function nodeResolve(opts = {}) { } } - if (resolved && options.modulesOnly) { + if (options.modulesOnly) { const code = await readFile(resolved, 'utf-8'); if (isModule(code)) { return { From edffa14a57ada89e720f916252d925d6bf262469 Mon Sep 17 00:00:00 2001 From: Tom Jenkinson Date: Sat, 5 Sep 2020 19:57:15 +0100 Subject: [PATCH 05/18] strip null byte from importer if there is one --- packages/node-resolve/src/index.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/node-resolve/src/index.js b/packages/node-resolve/src/index.js index 4517e7cb8..f0b0bb221 100644 --- a/packages/node-resolve/src/index.js +++ b/packages/node-resolve/src/index.js @@ -100,6 +100,12 @@ export function nodeResolve(opts = {}) { // ignore IDs with null character, these belong to other plugins if (/\0/.test(importee)) return null; + if (/\0/.test(importer)) { + // handle cases like common-js plugin which has form + // \u0000?commonjs-proxy + importer = importer.slice(1); + } + // strip hash and query params from import const [withoutHash, hash] = importee.split('#'); const [importPath, params] = withoutHash.split('?'); From b4daacdfb841340cbb1b973929c11d8de68461b6 Mon Sep 17 00:00:00 2001 From: Tom Jenkinson Date: Sat, 5 Sep 2020 19:58:41 +0100 Subject: [PATCH 06/18] fix root-dir test this was passing before because the real error was being ignored --- packages/node-resolve/test/root-dir.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/node-resolve/test/root-dir.js b/packages/node-resolve/test/root-dir.js index f200d3ca4..734823e49 100644 --- a/packages/node-resolve/test/root-dir.js +++ b/packages/node-resolve/test/root-dir.js @@ -7,11 +7,9 @@ const { testBundle } = require('../../../util/test'); const { nodeResolve } = require('..'); -process.chdir(join(__dirname, 'fixtures', 'monorepo-dedupe', 'packages', 'package-a')); - test('deduplicates modules from the given root directory', async (t) => { const bundle = await rollup({ - input: 'index.js', + input: './packages/package-a/index.js', plugins: [ nodeResolve({ dedupe: ['react'], From b321a7de8b7f76649be9c06130168c5efff9375b Mon Sep 17 00:00:00 2001 From: Tom Jenkinson Date: Sat, 5 Sep 2020 20:02:32 +0100 Subject: [PATCH 07/18] remove try/catch --- packages/node-resolve/src/index.js | 94 ++++++++++++++---------------- 1 file changed, 44 insertions(+), 50 deletions(-) diff --git a/packages/node-resolve/src/index.js b/packages/node-resolve/src/index.js index f0b0bb221..490445ca5 100644 --- a/packages/node-resolve/src/index.js +++ b/packages/node-resolve/src/index.js @@ -225,67 +225,61 @@ export function nodeResolve(opts = {}) { importSpecifierList.push(importee); resolveOptions = Object.assign(resolveOptions, customResolveOptions); - try { - let resolved = await resolveImportSpecifiers(importSpecifierList, resolveOptions); - if (!resolved) { - return null; - } + let resolved = await resolveImportSpecifiers(importSpecifierList, resolveOptions); + if (!resolved) { + return null; + } - if (packageBrowserField) { - if (Object.prototype.hasOwnProperty.call(packageBrowserField, resolved)) { - if (!packageBrowserField[resolved]) { - browserMapCache.set(resolved, packageBrowserField); - return ES6_BROWSER_EMPTY; - } - resolved = packageBrowserField[resolved]; + if (packageBrowserField) { + if (Object.prototype.hasOwnProperty.call(packageBrowserField, resolved)) { + if (!packageBrowserField[resolved]) { + browserMapCache.set(resolved, packageBrowserField); + return ES6_BROWSER_EMPTY; } - browserMapCache.set(resolved, packageBrowserField); + resolved = packageBrowserField[resolved]; } + browserMapCache.set(resolved, packageBrowserField); + } - if (hasPackageEntry && !preserveSymlinks) { - const fileExists = await exists(resolved); - if (fileExists) { - resolved = await realpath(resolved); - } + if (hasPackageEntry && !preserveSymlinks) { + const fileExists = await exists(resolved); + if (fileExists) { + resolved = await realpath(resolved); } + } - idToPackageInfo.set(resolved, packageInfo); - - if (hasPackageEntry) { - if (builtins.has(resolved) && preferBuiltins && isPreferBuiltinsSet) { - return null; - } else if (importeeIsBuiltin && preferBuiltins) { - if (!isPreferBuiltinsSet) { - this.warn( - `preferring built-in module '${importee}' over local alternative at '${resolved}', pass 'preferBuiltins: false' to disable this behavior or 'preferBuiltins: true' to disable this warning` - ); - } - return null; - } else if (jail && resolved.indexOf(normalize(jail.trim(sep))) !== 0) { - return null; - } - } + idToPackageInfo.set(resolved, packageInfo); - if (options.modulesOnly) { - const code = await readFile(resolved, 'utf-8'); - if (isModule(code)) { - return { - id: `${resolved}${importSuffix}`, - moduleSideEffects: hasModuleSideEffects(resolved) - }; + if (hasPackageEntry) { + if (builtins.has(resolved) && preferBuiltins && isPreferBuiltinsSet) { + return null; + } else if (importeeIsBuiltin && preferBuiltins) { + if (!isPreferBuiltinsSet) { + this.warn( + `preferring built-in module '${importee}' over local alternative at '${resolved}', pass 'preferBuiltins: false' to disable this behavior or 'preferBuiltins: true' to disable this warning` + ); } return null; + } else if (jail && resolved.indexOf(normalize(jail.trim(sep))) !== 0) { + return null; } - const result = { - id: `${resolved}${importSuffix}`, - moduleSideEffects: hasModuleSideEffects(resolved) - }; - return result; - } catch (error) { - // rethrow for now to prevent indentation changes - // TODO remove block - throw error; } + + if (options.modulesOnly) { + const code = await readFile(resolved, 'utf-8'); + if (isModule(code)) { + return { + id: `${resolved}${importSuffix}`, + moduleSideEffects: hasModuleSideEffects(resolved) + }; + } + return null; + } + const result = { + id: `${resolved}${importSuffix}`, + moduleSideEffects: hasModuleSideEffects(resolved) + }; + return result; }, load(importee) { From 703f9cdb919ef323ee14defa1e0e473ca73dcf06 Mon Sep 17 00:00:00 2001 From: Tom Jenkinson Date: Sat, 5 Sep 2020 20:20:31 +0100 Subject: [PATCH 08/18] treat builtins as externals (depending on useBuiltins option) --- packages/node-resolve/src/index.js | 4 +-- packages/node-resolve/test/prefer-builtins.js | 8 ++--- .../test/snapshots/prefer-builtins.js.md | 32 +----------------- .../test/snapshots/prefer-builtins.js.snap | Bin 629 -> 308 bytes 4 files changed, 6 insertions(+), 38 deletions(-) diff --git a/packages/node-resolve/src/index.js b/packages/node-resolve/src/index.js index 490445ca5..af748fa44 100644 --- a/packages/node-resolve/src/index.js +++ b/packages/node-resolve/src/index.js @@ -252,14 +252,14 @@ export function nodeResolve(opts = {}) { if (hasPackageEntry) { if (builtins.has(resolved) && preferBuiltins && isPreferBuiltinsSet) { - return null; + return false; } else if (importeeIsBuiltin && preferBuiltins) { if (!isPreferBuiltinsSet) { this.warn( `preferring built-in module '${importee}' over local alternative at '${resolved}', pass 'preferBuiltins: false' to disable this behavior or 'preferBuiltins: true' to disable this warning` ); } - return null; + return false; } else if (jail && resolved.indexOf(normalize(jail.trim(sep))) !== 0) { return null; } diff --git a/packages/node-resolve/test/prefer-builtins.js b/packages/node-resolve/test/prefer-builtins.js index dda3f5008..977d4e789 100644 --- a/packages/node-resolve/test/prefer-builtins.js +++ b/packages/node-resolve/test/prefer-builtins.js @@ -9,7 +9,7 @@ const { nodeResolve } = require('..'); process.chdir(join(__dirname, 'fixtures')); -test('warns when importing builtins', async (t) => { +test('handles importing builtins', async (t) => { const warnings = []; const bundle = await rollup({ input: 'builtins.js', @@ -24,8 +24,7 @@ test('warns when importing builtins', async (t) => { const { module } = await testBundle(t, bundle); - t.is(warnings.length, 1); - t.snapshot(warnings); + t.is(warnings.length, 0); // eslint-disable-next-line global-require t.is(module.exports, require('path').sep); }); @@ -66,8 +65,7 @@ test('true allows preferring a builtin to a local module of the same name', asyn const imports = await getImports(bundle); - t.is(warnings.length, 1); - t.snapshot(warnings); + t.is(warnings.length, 0); t.deepEqual(imports, ['events']); }); diff --git a/packages/node-resolve/test/snapshots/prefer-builtins.js.md b/packages/node-resolve/test/snapshots/prefer-builtins.js.md index 4653621e7..75d479022 100644 --- a/packages/node-resolve/test/snapshots/prefer-builtins.js.md +++ b/packages/node-resolve/test/snapshots/prefer-builtins.js.md @@ -2,7 +2,7 @@ The actual snapshot is saved in `prefer-builtins.js.snap`. -Generated by [AVA](https://ava.li). +Generated by [AVA](https://avajs.dev). ## false allows resolving a local module with the same name as a builtin module @@ -16,33 +16,3 @@ Generated by [AVA](https://ava.li). toString: Function {}, }, ] - -## true allows preferring a builtin to a local module of the same name - -> Snapshot 1 - - [ - { - code: 'UNRESOLVED_IMPORT', - importer: 'prefer-builtin.js', - message: '\'events\' is imported by prefer-builtin.js, but could not be resolved – treating it as an external dependency', - source: 'events', - toString: Function {}, - url: 'https://rollupjs.org/guide/en/#warning-treating-module-as-external-dependency', - }, - ] - -## warns when importing builtins - -> Snapshot 1 - - [ - { - code: 'UNRESOLVED_IMPORT', - importer: 'builtins.js', - message: '\'path\' is imported by builtins.js, but could not be resolved – treating it as an external dependency', - source: 'path', - toString: Function {}, - url: 'https://rollupjs.org/guide/en/#warning-treating-module-as-external-dependency', - }, - ] diff --git a/packages/node-resolve/test/snapshots/prefer-builtins.js.snap b/packages/node-resolve/test/snapshots/prefer-builtins.js.snap index 509265fa31fd89b309629217ba5dd0ea989c1d2e..a68c04dd6996992cfa42761ae165ca333ba2632d 100644 GIT binary patch literal 308 zcmV-40n7eDRzVU(cj+wF)^ibHfUXGId;F6-uymSUeNst|a5MOe*mF6XvWaj5FG9z(-J_P_X7GKSI G0RRB)V0tzH literal 629 zcmV-*0*d`XRzVjQe7*4_?H`K>00000000Bk zQ_pJ?K@^^s%`aPR66!%c4ecQy-3AI?f){P02u)I&R8VN@W_OZovYA+ zn|LaCQSewn6#N53@FWNx^yWzqqE~0P*(FWI9E5-iAM<8-KfZn6dsT#xf(}<-{^(cV zHu9C^^KbaYPe9(6k04aLyZ!m-d%v^z>lLd#*#8Rt>w$vM;N!j6>YM#bk83l{_lH-G zz<+%m^YSJ9ct}EINuDbb^AOKK>>B4<4Rop0V zR>!=PX4ht15FSR@oHPhm>#k`DlPmAVL2N<|LiOGlo4CVV zu7_me$6OH10nAI;!rv6EBDl;w7OuG53hZJ_2;0f$a-3O~YqyL|~PUZKpfe90Rw)rH9@C?gjs;lEB!jLFlLcp~vm;=<&K ziHY?r#%zwou%t-r2dnRa#pwOc<5RHwh(N^X9`7w`+?Y_G{u`by3Yo8nAf#zxlGMC;TljwG1E5=K1^zJSXA Pu!6q<)r{x55e5JN7KSf$ From 512b06e691440d896500ebe5c046b82f5f395a2b Mon Sep 17 00:00:00 2001 From: Tom Jenkinson Date: Sat, 5 Sep 2020 20:21:24 +0100 Subject: [PATCH 09/18] update readme sections on builtins --- packages/node-resolve/README.md | 27 ++++++++++----------------- 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/packages/node-resolve/README.md b/packages/node-resolve/README.md index 9f093239e..3e41e9092 100755 --- a/packages/node-resolve/README.md +++ b/packages/node-resolve/README.md @@ -34,9 +34,9 @@ export default { input: 'src/index.js', output: { dir: 'output', - format: 'cjs' + format: 'cjs', }, - plugins: [nodeResolve()] + plugins: [nodeResolve()], }; ``` @@ -118,10 +118,12 @@ DEPRECATED: use "resolveOnly" instead ### `preferBuiltins` Type: `Boolean`
-Default: `true` +Default: unset If `true`, the plugin will prefer built-in modules (e.g. `fs`, `path`). If `false`, the plugin will look for locally installed modules of the same name. +If unset the plugin will first look for modules of the same name, and then fall back to built-in modules. + ### `modulesOnly` Type: `Boolean`
@@ -164,28 +166,19 @@ export default { output: { file: 'bundle.js', format: 'iife', - name: 'MyModule' + name: 'MyModule', }, - plugins: [resolve(), commonjs()] + plugins: [resolve(), commonjs()], }; ``` ## Resolving Built-Ins (like `fs`) -This plugin won't resolve any builtins (e.g. `fs`). If you need to resolve builtins you can install local modules and set `preferBuiltins` to `false`, or install a plugin like [rollup-plugin-node-polyfills](https://github.com/ionic-team/rollup-plugin-node-polyfills) which provides stubbed versions of these methods. +By default this plugin will try and resolve everything to a local module. If that fails and the id matches a built-in module, then the module will be marked as external. -If you want to silence warnings about builtins, you can add the list of builtins to the `externals` option; like so: +See [`preferBuiltins`](#preferbuiltins). -```js -import resolve from '@rollup/plugin-node-resolve'; -import builtins from 'builtin-modules' -export default ({ - input: ..., - plugins: [resolve()], - external: builtins, - output: ... -}) -``` +Use a plugin like [rollup-plugin-node-polyfills](https://github.com/ionic-team/rollup-plugin-node-polyfills) to provide stubbed versions of built-ins. ## Meta From 8ffc867199b6ff45756e218783847b53a5b1aa49 Mon Sep 17 00:00:00 2001 From: Tom Jenkinson Date: Sat, 5 Sep 2020 20:22:36 +0100 Subject: [PATCH 10/18] fix readme doc about `jail` --- packages/node-resolve/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/node-resolve/README.md b/packages/node-resolve/README.md index 3e41e9092..721c710dd 100755 --- a/packages/node-resolve/README.md +++ b/packages/node-resolve/README.md @@ -101,7 +101,7 @@ Specifies the extensions of files that the plugin will operate on. Type: `String`
Default: `'/'` -Locks the module search within specified path (e.g. chroot). Modules defined outside this path will be marked as external. +Locks the module search within specified path (e.g. chroot). Modules defined outside this path will be ignored by this plugin. ### `mainFields` From 77860fba5ce69a63e0bf61619d9887742465469f Mon Sep 17 00:00:00 2001 From: Tom Jenkinson Date: Sat, 5 Sep 2020 20:25:33 +0100 Subject: [PATCH 11/18] update all other snapshots --- .../test/snapshots/dedupe-custom.js.md | 2 +- .../node-resolve/test/snapshots/dedupe.js.md | 2 +- .../node-resolve/test/snapshots/dedupe.js.snap | Bin 354 -> 356 bytes packages/node-resolve/test/snapshots/jail.js.md | 2 +- packages/node-resolve/test/snapshots/only.js.md | 8 ++++---- .../node-resolve/test/snapshots/only.js.snap | Bin 435 -> 434 bytes .../node-resolve/test/snapshots/root-dir.js.md | 8 +------- .../test/snapshots/root-dir.js.snap | Bin 169 -> 143 bytes packages/node-resolve/test/snapshots/test.js.md | 2 +- .../node-resolve/test/snapshots/test.js.snap | Bin 618 -> 618 bytes 10 files changed, 9 insertions(+), 15 deletions(-) diff --git a/packages/node-resolve/test/snapshots/dedupe-custom.js.md b/packages/node-resolve/test/snapshots/dedupe-custom.js.md index 98f8f1114..5465a0577 100644 --- a/packages/node-resolve/test/snapshots/dedupe-custom.js.md +++ b/packages/node-resolve/test/snapshots/dedupe-custom.js.md @@ -2,7 +2,7 @@ The actual snapshot is saved in `dedupe-custom.js.snap`. -Generated by [AVA](https://ava.li). +Generated by [AVA](https://avajs.dev). ## can deduplicate custom module directory diff --git a/packages/node-resolve/test/snapshots/dedupe.js.md b/packages/node-resolve/test/snapshots/dedupe.js.md index 62b1a6ca6..5e20bc021 100644 --- a/packages/node-resolve/test/snapshots/dedupe.js.md +++ b/packages/node-resolve/test/snapshots/dedupe.js.md @@ -2,7 +2,7 @@ The actual snapshot is saved in `dedupe.js.snap`. -Generated by [AVA](https://ava.li). +Generated by [AVA](https://avajs.dev). ## dedupes deep imports by package name if dedupe is set diff --git a/packages/node-resolve/test/snapshots/dedupe.js.snap b/packages/node-resolve/test/snapshots/dedupe.js.snap index e91f821dc56a81106e1c33bf00e70c36b552dfcc..f03048c2e723b83356d6f6b9e9906f4f38f7c497 100644 GIT binary patch delta 305 zcmV-10nYy70^|ZBK~_N^Q*L2!b7*gLAa*he0sus{jH)LwpzK)Ly#vn>0)CMqK7YZk zCI4neU74`@X`Ic=F@i-Um>3vD8H@!FDooFftnfX$v6E0AgWAHbF)<|D>$c0mMbd#aNR+z?Mb8Z5q&gBBzL%cI3u{jf`^9o6K9&d1RenD!AOKM6f zkb;Q{7lTE0Qy{|F+$)Nr5#8O|s0JWBfW_b;7|?Wgo)lK+C1+&jqyPXZg9aC3-va;u DR(gnU delta 303 zcmV+~0nq;B0^$N9K~_N^Q*L2!b7*gLAa*he0sz18V&MGEeq+|KH^18X@sW`tK7WB| z!;<@{DU0ShycST~_aQEp5iI%^h<7ddH#_Regw;>uY+f#3QhARNEV`YEfg$F?Ebk@p zF{LL9_A35l5pHJ$i-t2ZFfcQ)gY9JGU}QD|(iT9R0mQ$t8@8aHfEO z00Sd010xdyBR^0LlL#X-10$;-BY$g9YGQH;j3-nC;_0WPrWWXB6Qth diff --git a/packages/node-resolve/test/snapshots/jail.js.md b/packages/node-resolve/test/snapshots/jail.js.md index ff9eee7dc..b9ee3395b 100644 --- a/packages/node-resolve/test/snapshots/jail.js.md +++ b/packages/node-resolve/test/snapshots/jail.js.md @@ -2,7 +2,7 @@ The actual snapshot is saved in `jail.js.snap`. -Generated by [AVA](https://ava.li). +Generated by [AVA](https://avajs.dev). ## mark module outside the jail as external diff --git a/packages/node-resolve/test/snapshots/only.js.md b/packages/node-resolve/test/snapshots/only.js.md index 0996c4937..16eb1a462 100644 --- a/packages/node-resolve/test/snapshots/only.js.md +++ b/packages/node-resolve/test/snapshots/only.js.md @@ -2,7 +2,7 @@ The actual snapshot is saved in `only.js.snap`. -Generated by [AVA](https://ava.li). +Generated by [AVA](https://avajs.dev). ## deprecated: regex @@ -30,19 +30,19 @@ Generated by [AVA](https://ava.li). }, ] -## regex +## handles nested entry modules > Snapshot 1 [] -## specify the only packages to resolve +## regex > Snapshot 1 [] -## handles nested entry modules +## specify the only packages to resolve > Snapshot 1 diff --git a/packages/node-resolve/test/snapshots/only.js.snap b/packages/node-resolve/test/snapshots/only.js.snap index 4f4bed592576a826608a857c63089d2c1cef9638..dec35a9b170722262304fc4480799be14c29a06a 100644 GIT binary patch delta 388 zcmV-~0ek+l1F{1mK~_N^Q*L2!b7*gLAa*he0sv6p{Ec-_8X(D%CHne$)ryfKC@bdW z|7flUuZ=Y=AH`Rzv~e+lMW+L?|Ed<|=i-gslh>?Wl>c!KPzEHr3z1(HfA0dZq+<-5 zNZ-6SFQ>E5dV78fCnH!ikePvjnSmW_CnEu$g i8RQ5?W+VQKLaBd1AikU10y#hqYX?GYd(-J1>yxj%mK8{m=S6Kn}1SP zYH|r96Pzg^Ai%)L%fQIOz{n3&!z9AU%)rPh$jFkMpOOmW@CEpUx_kP?hdT!OdHT7d zDP_-1EiO(>hpYC;18UVRN-fUMDND6d2+2rQNXXC2sZ3DFFDS{(&ns5QENfOsNi8T! zO-?LHP0>*($Vp8sPE{xc;smHRe~@}Kd)NwcO4Bp*U|b$#YZw^$7#V$m-h|0=l;j7O z6lLb6GcZbm3=xC`0Eb&?UNXoLjLb+JU?3pE9A{9Iq+~Sa22sob0G#bDQ`rLm01;%Y AasU7T diff --git a/packages/node-resolve/test/snapshots/root-dir.js.md b/packages/node-resolve/test/snapshots/root-dir.js.md index 004f7d9b6..64b00a4b4 100644 --- a/packages/node-resolve/test/snapshots/root-dir.js.md +++ b/packages/node-resolve/test/snapshots/root-dir.js.md @@ -2,13 +2,7 @@ The actual snapshot is saved in `root-dir.js.snap`. -Generated by [AVA](https://ava.li). - -## deduplicated from the given root directory - -> Snapshot 1 - - 'Package A React: react imported from root | package B react: react imported from root' +Generated by [AVA](https://avajs.dev). ## deduplicates modules from the given root directory diff --git a/packages/node-resolve/test/snapshots/root-dir.js.snap b/packages/node-resolve/test/snapshots/root-dir.js.snap index 0dfe37a480a51a7cc3d7e115ef5d612834666e0b..98b3cdf3b0adf2ca8c0a2ef47ccfc01a5551a418 100644 GIT binary patch literal 143 zcmZ<^b5sb`nVidcAiuX<8oE- tQZ(MKuz!V$sjK2z4g2tg8ut5L7P>8DSapqa5y$o@hGSx~Q<{Oc001H>Hf#U@ literal 169 zcmV;a09OA&RzVbfYzzWO@)E$u`C4WKC z3M87KrXZN2%bgQ0a_r#q(L@yz3t~WGpaV0A4Iw6mGE}fIF*7iLR0IP%JMWVClqN!) z^y!}8=l8wO&)y=0Sj0YcZ?ExIfBNy^%*)-z=RT15tELF~zO(Z9_HXj-;B;Nzd1n2B zVfHEF$;pq;*ZG(9QuOB7yS?fT41crltynKRtcM(=R`Fj!9EVI1(wCHS2LL9@=ko*> z2mpaafQzOmyN&+`h}Vdpag2UmA@*S`l&Lj4%+ruc!a|`y;3$C%fjsU>odAnKx(IWg z^qE-{Z&o+g>b2{))~+K%hnkkc5_8IHhqpU5Yu)ETaIDad5!l}w^ zmxZC*PFnR#Eh(M2xf;bC4drMSi)#o*9z6A1guDL6K~wr zx))w>93?rAdY!N=RoiJtfq%~&CY+URR|!->cnfDzZ$=4M1XjNc!AhQ zd`0|06yQHEHAmn`Y&sd+f*aHEsm_imfLZRG;Zn2QdBa(TTO4r#jwh*a$hoAj43$k3ht#m!Uo7d@EQkS#fey?dHiVcM%22_=#LU0|QV|U7?7U0jQ<|va zq)&eLKELmM&-NxE#3Dbom!91DL%#2yuIanat=~Z6?-Ig3b$_@1PJjOS@yx58`j;LI zvd>b4JU#j8#cJ?1y%4=U_I`JL8-E7b4_2&~9n?db6rplOMuA6#)Ku|M1`jwbm7S)P zCE8T7LnARtdv+jQ7L?mzQlEp=GOiWGamW-QeOW2i2QX1SpC>R!00_(jTr@@5EnFWW z-XMO(G0yWEu?HieOtsPGu7*?+777IdM+syI> zUb$MozIL;^u{p6j=XbhNX|7CS(c`>p53{zA!tO{f3OEiqQJL-VFl4QyRj-6cW6fs>(NG^9xAy^89E<7L)!7jRFwLDaTxyy-Z#c_v^Fz+ZF(-S5oJk6sEC~65 ghH1miY84%%GE-E=P}xLrKn=S61FJt$z77Nc0C;H}?EnA( From 921602405484f67bb3d9251cf880da6c55022556 Mon Sep 17 00:00:00 2001 From: Tom Jenkinson Date: Sun, 6 Sep 2020 16:35:09 +0100 Subject: [PATCH 12/18] use exists() instead of try/catch --- packages/node-resolve/src/util.js | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/packages/node-resolve/src/util.js b/packages/node-resolve/src/util.js index 0c47fe774..0c83139b6 100644 --- a/packages/node-resolve/src/util.js +++ b/packages/node-resolve/src/util.js @@ -5,7 +5,7 @@ import { createFilter } from '@rollup/pluginutils'; import resolveModule from 'resolve'; -import { realpathSync } from './fs'; +import { realpathSync, exists } from './fs'; const resolveId = promisify(resolveModule); @@ -165,22 +165,19 @@ export function resolveImportSpecifiers(importSpecifierList, resolveOptions) { let promise = Promise.resolve(); for (let i = 0; i < importSpecifierList.length; i++) { - promise = promise.then((value) => { + promise = promise.then(async (value) => { // if we've already resolved to something, just return it. if (value) { return value; } - return resolveId(importSpecifierList[i], resolveOptions).then((result) => { - if (!resolveOptions.preserveSymlinks) { - try { - result = realpathSync(result); - } catch (e) { - // maybe the file does not exist. Might be a builtin - } + let result = await resolveId(importSpecifierList[i], resolveOptions); + if (!resolveOptions.preserveSymlinks) { + if (await exists(result)) { + result = realpathSync(result); } - return result; - }); + } + return result; }); // swallow MODULE_NOT_FOUND errors From 1f43a9047651a9dba70d17e8c6e096ed383be522 Mon Sep 17 00:00:00 2001 From: Tom Jenkinson Date: Sun, 6 Sep 2020 16:38:35 +0100 Subject: [PATCH 13/18] refactor resolveImportSpecifiers to use async/await --- packages/node-resolve/src/util.js | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/packages/node-resolve/src/util.js b/packages/node-resolve/src/util.js index 0c83139b6..8203874ef 100644 --- a/packages/node-resolve/src/util.js +++ b/packages/node-resolve/src/util.js @@ -161,32 +161,24 @@ export function normalizeInput(input) { // Resolve module specifiers in order. Promise resolves to the first module that resolves // successfully, or the error that resulted from the last attempted module resolution. -export function resolveImportSpecifiers(importSpecifierList, resolveOptions) { - let promise = Promise.resolve(); - +export async function resolveImportSpecifiers(importSpecifierList, resolveOptions) { for (let i = 0; i < importSpecifierList.length; i++) { - promise = promise.then(async (value) => { - // if we've already resolved to something, just return it. - if (value) { - return value; - } - + try { + // eslint-disable-next-line no-await-in-loop let result = await resolveId(importSpecifierList[i], resolveOptions); if (!resolveOptions.preserveSymlinks) { + // eslint-disable-next-line no-await-in-loop if (await exists(result)) { result = realpathSync(result); } } return result; - }); - - // swallow MODULE_NOT_FOUND errors - promise = promise.catch((error) => { + } catch (error) { + // swallow MODULE_NOT_FOUND errors if (error.code !== 'MODULE_NOT_FOUND') { throw error; } - }); + } } - - return promise; + return null; } From 3eab8f670e3b1ff5f4be38aa16b0b9d9a681e830 Mon Sep 17 00:00:00 2001 From: Tom Jenkinson Date: Sun, 1 Nov 2020 10:25:10 +0000 Subject: [PATCH 14/18] use async `realpath` --- packages/node-resolve/src/util.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/node-resolve/src/util.js b/packages/node-resolve/src/util.js index c24281747..302ac6bf1 100644 --- a/packages/node-resolve/src/util.js +++ b/packages/node-resolve/src/util.js @@ -169,7 +169,8 @@ export async function resolveImportSpecifiers(importSpecifierList, resolveOption if (!resolveOptions.preserveSymlinks) { // eslint-disable-next-line no-await-in-loop if (await exists(result)) { - result = realpathSync(result); + // eslint-disable-next-line no-await-in-loop + result = await realpath(result); } } return result; From aebc3e58a453c797605705cf6358b685a7a37053 Mon Sep 17 00:00:00 2001 From: Tom Jenkinson Date: Sat, 7 Nov 2020 11:58:45 +0000 Subject: [PATCH 15/18] remove duplicate lines --- packages/node-resolve/src/index.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/node-resolve/src/index.js b/packages/node-resolve/src/index.js index 9e6472091..53eae4e26 100644 --- a/packages/node-resolve/src/index.js +++ b/packages/node-resolve/src/index.js @@ -259,8 +259,6 @@ export function nodeResolve(opts = {}) { return false; } else if (jail && resolved.indexOf(normalize(jail.trim(sep))) !== 0) { return null; - } else if (jail && resolved.indexOf(normalize(jail.trim(sep))) !== 0) { - return null; } } From f6c1ec41a0107898fd6abcdcd4119403587d9b11 Mon Sep 17 00:00:00 2001 From: Tom Jenkinson Date: Sun, 8 Nov 2020 12:17:56 +0000 Subject: [PATCH 16/18] remove readme update --- packages/node-resolve/README.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/packages/node-resolve/README.md b/packages/node-resolve/README.md index 721c710dd..2fe73c608 100755 --- a/packages/node-resolve/README.md +++ b/packages/node-resolve/README.md @@ -118,12 +118,9 @@ DEPRECATED: use "resolveOnly" instead ### `preferBuiltins` Type: `Boolean`
-Default: unset If `true`, the plugin will prefer built-in modules (e.g. `fs`, `path`). If `false`, the plugin will look for locally installed modules of the same name. -If unset the plugin will first look for modules of the same name, and then fall back to built-in modules. - ### `modulesOnly` Type: `Boolean`
From 197be11eae71f725bfc033dc50247f4a775801ab Mon Sep 17 00:00:00 2001 From: Tom Jenkinson Date: Sun, 8 Nov 2020 12:22:01 +0000 Subject: [PATCH 17/18] fix doc --- packages/node-resolve/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/node-resolve/README.md b/packages/node-resolve/README.md index 2fe73c608..0c857d68d 100755 --- a/packages/node-resolve/README.md +++ b/packages/node-resolve/README.md @@ -171,7 +171,7 @@ export default { ## Resolving Built-Ins (like `fs`) -By default this plugin will try and resolve everything to a local module. If that fails and the id matches a built-in module, then the module will be marked as external. +By default this plugin will prefer built-ins over local modules, marking them as external. See [`preferBuiltins`](#preferbuiltins). From 00673c41d5a218f168aacd6857062fd345c3a944 Mon Sep 17 00:00:00 2001 From: Tom Jenkinson Date: Sun, 8 Nov 2020 12:22:50 +0000 Subject: [PATCH 18/18] add note that `preferBuiltins` should be `false` for stubbed builtins --- packages/node-resolve/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/node-resolve/README.md b/packages/node-resolve/README.md index 0c857d68d..f6b9a3472 100755 --- a/packages/node-resolve/README.md +++ b/packages/node-resolve/README.md @@ -175,7 +175,7 @@ By default this plugin will prefer built-ins over local modules, marking them as See [`preferBuiltins`](#preferbuiltins). -Use a plugin like [rollup-plugin-node-polyfills](https://github.com/ionic-team/rollup-plugin-node-polyfills) to provide stubbed versions of built-ins. +Use a plugin like [rollup-plugin-node-polyfills](https://github.com/ionic-team/rollup-plugin-node-polyfills) to provide stubbed versions of built-ins, and set `preferBuiltins` to `false`. ## Meta