From 24eaa837d9527c8e4db822daef049a095621297f Mon Sep 17 00:00:00 2001 From: Thomas Ghysels Date: Tue, 3 Dec 2019 00:18:34 +0100 Subject: [PATCH] chore: migrate rollup-plugin-node-resolve (#32) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(alias) add backwards compatible mapping options Resolve rollup/plugins#27 * chore: migrate rollup-plugin-node-resolve (WIP) * chore: move types * chore: update lib, get deprecated tests working * chore: reorg tests * test: working on tests * test: all tests but one passing * test: fix last test, clean up * chore: fix linting * test: use snapshots to diagnose failing test * chore: add nested node_modules in fixtures * test: fix type tests * chore: update meta * chore: review comments * chore: update snapshots * Update packages/node-resolve/CHANGELOG.md Co-Authored-By: Huáng Jùnliàng * chore: checkout alias/src from master * chore: checkout alias from master * chore: update pnpm lock * fix: use right pluginutils dep --- .editorconfig | 1 + .gitignore | 2 + README.md | 1 + packages/node-resolve/.eslintignore | 1 + packages/node-resolve/CHANGELOG.md | 214 +++++++++ packages/node-resolve/README.md | 185 +++++++ packages/node-resolve/package.json | 80 +++ packages/node-resolve/rollup.config.js | 28 ++ packages/node-resolve/src/index.js | 454 ++++++++++++++++++ packages/node-resolve/test/browser.js | 201 ++++++++ packages/node-resolve/test/dedupe.js | 48 ++ packages/node-resolve/test/deprecated.js | 69 +++ packages/node-resolve/test/fixtures/.eslintrc | 12 + .../browser-entry-points-to-node-module.js | 3 + .../test/fixtures/browser-false.js | 3 + .../test/fixtures/browser-local.js | 4 + .../test/fixtures/browser-object-builtin.js | 3 + .../test/fixtures/browser-object-implicit.js | 3 + .../test/fixtures/browser-object-main.js | 3 + .../test/fixtures/browser-object-nested.js | 3 + .../fixtures/browser-object-with-false.js | 18 + .../test/fixtures/browser-object.js | 3 + .../node-resolve/test/fixtures/browser.js | 3 + .../node-resolve/test/fixtures/builtins.js | 3 + .../node-resolve/test/fixtures/commonjs.js | 3 + .../custom-resolve-options/js_modules/foo.js | 1 + .../fixtures/custom-resolve-options/main.js | 3 + .../test/fixtures/deep-import-non-module.js | 3 + .../test/fixtures/dual-cjs-mjs.js | 3 + .../node-resolve/test/fixtures/dynamic.js | 1 + .../test/fixtures/extensions/lol.wut | 1 + .../test/fixtures/extensions/main.js | 3 + .../node-resolve/test/fixtures/granular.js | 3 + packages/node-resolve/test/fixtures/jail.js | 3 + packages/node-resolve/test/fixtures/jsnext.js | 3 + .../fixtures/local-index/forty-two/index.js | 1 + .../test/fixtures/local-index/main.js | 3 + packages/node-resolve/test/fixtures/main.js | 1 + .../test/fixtures/manualchunks.js | 3 + .../node-resolve/test/fixtures/module-mjs.js | 3 + packages/node-resolve/test/fixtures/module.js | 3 + .../test/fixtures/node_modules/.gitkeep | 0 .../node_modules/@scoped/bar/index.js | 1 + .../node_modules/@scoped/foo/index.js | 1 + .../index.js | 2 + .../package.json | 6 + .../node_modules/builtins-browser/fs.js | 1 + .../node_modules/builtins-browser/index.js | 2 + .../builtins-browser/package.json | 6 + .../node_modules/component-type/index.js | 1 + .../node_modules/component-type/package.json | 3 + .../node_modules/dual-cjs-mjs/entry.js | 1 + .../node_modules/dual-cjs-mjs/entry.mjs | 1 + .../node_modules/dual-cjs-mjs/package.json | 3 + .../node_modules/entries/jsnext-entry.js | 1 + .../node_modules/entries/main-entry.js | 1 + .../node_modules/entries/module-entry.js | 1 + .../node_modules/entries/package.json | 5 + .../fixtures/node_modules/events/index.js | 1 + .../fixtures/node_modules/events/package.json | 3 + .../isomorphic-nested/lib/browser-dep.js | 1 + .../isomorphic-nested/lib/browser-test.js | 1 + .../isomorphic-nested/lib/browser.js | 5 + .../node_modules/isomorphic-nested/lib/dep.js | 1 + .../isomorphic-nested/lib/index.js | 5 + .../isomorphic-nested/package.json | 8 + .../browser.js | 2 + .../isomorphic-object-main-implicit/index.js | 2 + .../package.json | 5 + .../isomorphic-object-main/browser-dep.js | 1 + .../isomorphic-object-main/browser-test.js | 1 + .../isomorphic-object-main/browser.js | 5 + .../isomorphic-object-main/dep.js | 1 + .../isomorphic-object-main/index.js | 5 + .../isomorphic-object-main/package.json | 8 + .../lib/client/http-tracker.js | 4 + .../lib/client/udp-tracker.js | 4 + .../lib/client/websocket-tracker.js | 4 + .../isomorphic-object-with-false/lib/index.js | 20 + .../lib/subpath/foo/index.js | 2 + .../isomorphic-object-with-false/package.json | 8 + .../isomorphic-object/browser-dep.js | 1 + .../isomorphic-object/browser-test.js | 1 + .../node_modules/isomorphic-object/browser.js | 5 + .../node_modules/isomorphic-object/dep.js | 1 + .../node_modules/isomorphic-object/index.js | 5 + .../isomorphic-object/package.json | 8 + .../node_modules/isomorphic/browser.js | 1 + .../fixtures/node_modules/isomorphic/node.js | 1 + .../node_modules/isomorphic/package.json | 4 + .../node_modules/jsnext/entry-main.js | 1 + .../fixtures/node_modules/jsnext/entry.js | 1 + .../fixtures/node_modules/jsnext/package.json | 4 + .../fixtures/node_modules/legacy/entry.js | 1 + .../fixtures/node_modules/legacy/package.json | 3 + .../node_modules/module-mjs/entry.mjs | 1 + .../node_modules/module-mjs/package.json | 3 + .../node_modules/module/entry-main.js | 1 + .../fixtures/node_modules/module/entry.js | 1 + .../fixtures/node_modules/module/package.json | 4 + .../node_modules/react-consumer/index.js | 3 + .../react-consumer/node_modules/.gitkeep | 0 .../node_modules/react/index.js | 1 + .../test/fixtures/node_modules/react/index.js | 1 + .../node_modules/side-effects-array/dep1.js | 4 + .../node_modules/side-effects-array/dep2.js | 4 + .../side-effects-array/dep3-effect.js | 4 + .../node_modules/side-effects-array/index.js | 8 + .../side-effects-array/nested/dep4.js | 4 + .../side-effects-array/nested/dep5-effect.js | 4 + .../side-effects-array/package.json | 8 + .../node_modules/side-effects-false/dep1.js | 4 + .../node_modules/side-effects-false/dep2.js | 4 + .../node_modules/side-effects-false/index.js | 5 + .../side-effects-false/package.json | 4 + .../node_modules/side-effects-true/dep1.js | 4 + .../node_modules/side-effects-true/dep2.js | 4 + .../node_modules/side-effects-true/index.js | 5 + .../side-effects-true/package.json | 4 + .../fixtures/node_modules/simple/index.js | 1 + .../fixtures/node_modules/string/uppercase.js | 3 + .../test/fixtures/node_modules/test/index.js | 1 + .../node_modules/uses-buffer/index.js | 2 + .../node_modules/uses-buffer/package.json | 5 + packages/node-resolve/test/fixtures/only.js | 7 + .../test/fixtures/package-index.js | 1 + .../node-resolve/test/fixtures/package.json | 13 + .../test/fixtures/prefer-builtin.js | 1 + .../test/fixtures/prefer-jsnext.js | 3 + .../node-resolve/test/fixtures/prefer-main.js | 3 + .../test/fixtures/prefer-module.js | 3 + .../node-resolve/test/fixtures/react-app.js | 4 + .../test/fixtures/side-effects.js | 4 + .../test/fixtures/symlinked/first/index.js | 2 + .../test/fixtures/symlinked/second/index.js | 3 + .../test/fixtures/symlinked/third/index.js | 3 + .../test/fixtures/trailing-slash.js | 3 + .../test/fixtures/unresolved-global.js | 1 + .../test/fixtures/unresolved-local.js | 1 + .../node-resolve/test/get-package-info.js | 115 +++++ packages/node-resolve/test/jail.js | 44 ++ packages/node-resolve/test/only.js | 46 ++ packages/node-resolve/test/order.js | 49 ++ packages/node-resolve/test/prefer-builtins.js | 91 ++++ .../node-resolve/test/snapshots/dedupe.js.md | 32 ++ .../test/snapshots/dedupe.js.snap | Bin 0 -> 238 bytes .../node-resolve/test/snapshots/jail.js.md | 20 + .../node-resolve/test/snapshots/jail.js.snap | Bin 0 -> 433 bytes .../node-resolve/test/snapshots/only.js.md | 43 ++ .../node-resolve/test/snapshots/only.js.snap | Bin 0 -> 589 bytes .../test/snapshots/prefer-builtins.js.md | 48 ++ .../test/snapshots/prefer-builtins.js.snap | Bin 0 -> 629 bytes .../node-resolve/test/snapshots/test.js.md | 41 ++ .../node-resolve/test/snapshots/test.js.snap | Bin 0 -> 618 bytes packages/node-resolve/test/symlinks.js | 65 +++ packages/node-resolve/test/test.js | 222 +++++++++ packages/node-resolve/test/types.ts | 32 ++ packages/node-resolve/types/index.d.ts | 100 ++++ pnpm-lock.yaml | 343 ++++++++----- util/test.js | 26 +- 160 files changed, 2895 insertions(+), 127 deletions(-) create mode 100644 packages/node-resolve/.eslintignore create mode 100755 packages/node-resolve/CHANGELOG.md create mode 100755 packages/node-resolve/README.md create mode 100755 packages/node-resolve/package.json create mode 100755 packages/node-resolve/rollup.config.js create mode 100755 packages/node-resolve/src/index.js create mode 100644 packages/node-resolve/test/browser.js create mode 100644 packages/node-resolve/test/dedupe.js create mode 100644 packages/node-resolve/test/deprecated.js create mode 100644 packages/node-resolve/test/fixtures/.eslintrc create mode 100755 packages/node-resolve/test/fixtures/browser-entry-points-to-node-module.js create mode 100755 packages/node-resolve/test/fixtures/browser-false.js create mode 100755 packages/node-resolve/test/fixtures/browser-local.js create mode 100755 packages/node-resolve/test/fixtures/browser-object-builtin.js create mode 100755 packages/node-resolve/test/fixtures/browser-object-implicit.js create mode 100755 packages/node-resolve/test/fixtures/browser-object-main.js create mode 100755 packages/node-resolve/test/fixtures/browser-object-nested.js create mode 100755 packages/node-resolve/test/fixtures/browser-object-with-false.js create mode 100755 packages/node-resolve/test/fixtures/browser-object.js create mode 100755 packages/node-resolve/test/fixtures/browser.js create mode 100755 packages/node-resolve/test/fixtures/builtins.js create mode 100755 packages/node-resolve/test/fixtures/commonjs.js create mode 100755 packages/node-resolve/test/fixtures/custom-resolve-options/js_modules/foo.js create mode 100755 packages/node-resolve/test/fixtures/custom-resolve-options/main.js create mode 100755 packages/node-resolve/test/fixtures/deep-import-non-module.js create mode 100755 packages/node-resolve/test/fixtures/dual-cjs-mjs.js create mode 100755 packages/node-resolve/test/fixtures/dynamic.js create mode 100755 packages/node-resolve/test/fixtures/extensions/lol.wut create mode 100755 packages/node-resolve/test/fixtures/extensions/main.js create mode 100755 packages/node-resolve/test/fixtures/granular.js create mode 100755 packages/node-resolve/test/fixtures/jail.js create mode 100755 packages/node-resolve/test/fixtures/jsnext.js create mode 100755 packages/node-resolve/test/fixtures/local-index/forty-two/index.js create mode 100755 packages/node-resolve/test/fixtures/local-index/main.js create mode 100644 packages/node-resolve/test/fixtures/main.js create mode 100755 packages/node-resolve/test/fixtures/manualchunks.js create mode 100755 packages/node-resolve/test/fixtures/module-mjs.js create mode 100755 packages/node-resolve/test/fixtures/module.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/.gitkeep create mode 100644 packages/node-resolve/test/fixtures/node_modules/@scoped/bar/index.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/@scoped/foo/index.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/browser-entry-points-to-node-module/index.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/browser-entry-points-to-node-module/package.json create mode 100644 packages/node-resolve/test/fixtures/node_modules/builtins-browser/fs.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/builtins-browser/index.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/builtins-browser/package.json create mode 100644 packages/node-resolve/test/fixtures/node_modules/component-type/index.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/component-type/package.json create mode 100644 packages/node-resolve/test/fixtures/node_modules/dual-cjs-mjs/entry.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/dual-cjs-mjs/entry.mjs create mode 100644 packages/node-resolve/test/fixtures/node_modules/dual-cjs-mjs/package.json create mode 100644 packages/node-resolve/test/fixtures/node_modules/entries/jsnext-entry.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/entries/main-entry.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/entries/module-entry.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/entries/package.json create mode 100644 packages/node-resolve/test/fixtures/node_modules/events/index.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/events/package.json create mode 100644 packages/node-resolve/test/fixtures/node_modules/isomorphic-nested/lib/browser-dep.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/isomorphic-nested/lib/browser-test.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/isomorphic-nested/lib/browser.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/isomorphic-nested/lib/dep.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/isomorphic-nested/lib/index.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/isomorphic-nested/package.json create mode 100644 packages/node-resolve/test/fixtures/node_modules/isomorphic-object-main-implicit/browser.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/isomorphic-object-main-implicit/index.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/isomorphic-object-main-implicit/package.json create mode 100644 packages/node-resolve/test/fixtures/node_modules/isomorphic-object-main/browser-dep.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/isomorphic-object-main/browser-test.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/isomorphic-object-main/browser.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/isomorphic-object-main/dep.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/isomorphic-object-main/index.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/isomorphic-object-main/package.json create mode 100644 packages/node-resolve/test/fixtures/node_modules/isomorphic-object-with-false/lib/client/http-tracker.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/isomorphic-object-with-false/lib/client/udp-tracker.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/isomorphic-object-with-false/lib/client/websocket-tracker.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/isomorphic-object-with-false/lib/index.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/isomorphic-object-with-false/lib/subpath/foo/index.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/isomorphic-object-with-false/package.json create mode 100644 packages/node-resolve/test/fixtures/node_modules/isomorphic-object/browser-dep.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/isomorphic-object/browser-test.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/isomorphic-object/browser.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/isomorphic-object/dep.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/isomorphic-object/index.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/isomorphic-object/package.json create mode 100644 packages/node-resolve/test/fixtures/node_modules/isomorphic/browser.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/isomorphic/node.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/isomorphic/package.json create mode 100644 packages/node-resolve/test/fixtures/node_modules/jsnext/entry-main.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/jsnext/entry.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/jsnext/package.json create mode 100644 packages/node-resolve/test/fixtures/node_modules/legacy/entry.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/legacy/package.json create mode 100644 packages/node-resolve/test/fixtures/node_modules/module-mjs/entry.mjs create mode 100644 packages/node-resolve/test/fixtures/node_modules/module-mjs/package.json create mode 100644 packages/node-resolve/test/fixtures/node_modules/module/entry-main.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/module/entry.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/module/package.json create mode 100644 packages/node-resolve/test/fixtures/node_modules/react-consumer/index.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/react-consumer/node_modules/.gitkeep create mode 100644 packages/node-resolve/test/fixtures/node_modules/react-consumer/node_modules/react/index.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/react/index.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/side-effects-array/dep1.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/side-effects-array/dep2.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/side-effects-array/dep3-effect.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/side-effects-array/index.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/side-effects-array/nested/dep4.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/side-effects-array/nested/dep5-effect.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/side-effects-array/package.json create mode 100644 packages/node-resolve/test/fixtures/node_modules/side-effects-false/dep1.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/side-effects-false/dep2.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/side-effects-false/index.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/side-effects-false/package.json create mode 100644 packages/node-resolve/test/fixtures/node_modules/side-effects-true/dep1.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/side-effects-true/dep2.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/side-effects-true/index.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/side-effects-true/package.json create mode 100644 packages/node-resolve/test/fixtures/node_modules/simple/index.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/string/uppercase.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/test/index.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/uses-buffer/index.js create mode 100644 packages/node-resolve/test/fixtures/node_modules/uses-buffer/package.json create mode 100755 packages/node-resolve/test/fixtures/only.js create mode 100755 packages/node-resolve/test/fixtures/package-index.js create mode 100755 packages/node-resolve/test/fixtures/package.json create mode 100755 packages/node-resolve/test/fixtures/prefer-builtin.js create mode 100755 packages/node-resolve/test/fixtures/prefer-jsnext.js create mode 100755 packages/node-resolve/test/fixtures/prefer-main.js create mode 100755 packages/node-resolve/test/fixtures/prefer-module.js create mode 100755 packages/node-resolve/test/fixtures/react-app.js create mode 100755 packages/node-resolve/test/fixtures/side-effects.js create mode 100755 packages/node-resolve/test/fixtures/symlinked/first/index.js create mode 100755 packages/node-resolve/test/fixtures/symlinked/second/index.js create mode 100755 packages/node-resolve/test/fixtures/symlinked/third/index.js create mode 100755 packages/node-resolve/test/fixtures/trailing-slash.js create mode 100755 packages/node-resolve/test/fixtures/unresolved-global.js create mode 100755 packages/node-resolve/test/fixtures/unresolved-local.js create mode 100644 packages/node-resolve/test/get-package-info.js create mode 100644 packages/node-resolve/test/jail.js create mode 100644 packages/node-resolve/test/only.js create mode 100644 packages/node-resolve/test/order.js create mode 100644 packages/node-resolve/test/prefer-builtins.js create mode 100644 packages/node-resolve/test/snapshots/dedupe.js.md create mode 100644 packages/node-resolve/test/snapshots/dedupe.js.snap create mode 100644 packages/node-resolve/test/snapshots/jail.js.md create mode 100644 packages/node-resolve/test/snapshots/jail.js.snap create mode 100644 packages/node-resolve/test/snapshots/only.js.md create mode 100644 packages/node-resolve/test/snapshots/only.js.snap create mode 100644 packages/node-resolve/test/snapshots/prefer-builtins.js.md create mode 100644 packages/node-resolve/test/snapshots/prefer-builtins.js.snap create mode 100644 packages/node-resolve/test/snapshots/test.js.md create mode 100644 packages/node-resolve/test/snapshots/test.js.snap create mode 100644 packages/node-resolve/test/symlinks.js create mode 100755 packages/node-resolve/test/test.js create mode 100755 packages/node-resolve/test/types.ts create mode 100755 packages/node-resolve/types/index.d.ts diff --git a/.editorconfig b/.editorconfig index 8e3b1f6db..e8db72371 100644 --- a/.editorconfig +++ b/.editorconfig @@ -12,6 +12,7 @@ trim_trailing_whitespace = true [*.md] insert_final_newline = true trim_trailing_whitespace = false +max_line_length = 500 [*.yml] max_line_length = 500 diff --git a/.gitignore b/.gitignore index b96767f48..d3e8cecde 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,5 @@ output/ coverage.lcov pnpm-debug.log .idea + +!packages/node-resolve/test/fixtures/**/node_modules diff --git a/README.md b/README.md index 4b0385595..7f98b60cd 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,7 @@ This repository houses plugins that Rollup considers critical to every day use o | [inject](packages/inject) | Scan modules for global variables and injects `import` statements where necessary | | [json](packages/json) | Convert .json files to ES6 modules | | [legacy](packages/legacy) | Add `export` declarations to legacy non-module scripts. | +| [node-resolve](packages/node-resolve) | Locate and bundle third-party dependencies in node_modules | | [replace](packages/replace) | Replace strings in files while bundling | | [strip](packages/strip) | Remove debugger statements and functions like assert.equal and console.log from your code | | [url](packages/url) | Import files as data-URIs or ES Modules | diff --git a/packages/node-resolve/.eslintignore b/packages/node-resolve/.eslintignore new file mode 100644 index 000000000..97ee4d3c2 --- /dev/null +++ b/packages/node-resolve/.eslintignore @@ -0,0 +1 @@ +test/fixtures/node_modules diff --git a/packages/node-resolve/CHANGELOG.md b/packages/node-resolve/CHANGELOG.md new file mode 100755 index 000000000..77e727fd6 --- /dev/null +++ b/packages/node-resolve/CHANGELOG.md @@ -0,0 +1,214 @@ +# @rollup/plugin-node-resolve Change Log + +## 6.0.0 + +_2019-11-25_ + +- **Breaking:** Minimum compatible Rollup version is 1.2.0 +- **Breaking:** Minimum supported Node version is 8.0.0 +- Published as @rollup/plugin-node-resolve + +## 5.2.1 (unreleased) + +- add missing MIT license file ([#233](https://github.com/rollup/rollup-plugin-node-resolve/pull/233) by @kenjiO) +- Fix incorrect example of config ([#239](https://github.com/rollup/rollup-plugin-node-resolve/pull/240) by @myshov) +- Fix typo in readme ([#240](https://github.com/rollup/rollup-plugin-node-resolve/pull/240) by @LinusU) + +## 5.2.0 (2019-06-29) + +- dedupe accepts a function ([#225](https://github.com/rollup/rollup-plugin-node-resolve/pull/225) by @manucorporat) + +## 5.1.1 (2019-06-29) + +- Move Rollup version check to buildStart hook to avoid issues ([#232](https://github.com/rollup/rollup-plugin-node-resolve/pull/232) by @lukastaegert) + +## 5.1.0 (2019-06-22) + +- Fix path fragment inputs ([#229](https://github.com/rollup/rollup-plugin-node-resolve/pull/229) by @bterlson) + +## 5.0.4 (2019-06-22) + +- Treat sideEffects array as inclusion list ([#227](https://github.com/rollup/rollup-plugin-node-resolve/pull/227) by @mikeharder) + +## 5.0.3 (2019-06-16) + +- Make empty.js a virtual module ([#224](https://github.com/rollup/rollup-plugin-node-resolve/pull/224) by @manucorporat) + +## 5.0.2 (2019-06-13) + +- Support resolve 1.11.1, add built-in test ([#223](https://github.com/rollup/rollup-plugin-node-resolve/pull/223) by @bterlson) + +## 5.0.1 (2019-05-31) + +- Update to resolve@1.11.0 for better performance ([#220](https://github.com/rollup/rollup-plugin-node-resolve/pull/220) by @keithamus) + +## 5.0.0 (2019-05-15) + +- Replace bublé with babel, update dependencies ([#216](https://github.com/rollup/rollup-plugin-node-resolve/pull/216) by @mecurc) +- Handle module side-effects ([#219](https://github.com/rollup/rollup-plugin-node-resolve/pull/219) by @lukastaegert) + +### Breaking Changes + +- Requires at least rollup@1.11.0 to work (v1.12.0 for module side-effects to be respected) +- If used with rollup-plugin-commonjs, it should be at least v10.0.0 + +## 4.2.4 (2019-05-11) + +- Add note on builtins to Readme ([#215](https://github.com/rollup/rollup-plugin-node-resolve/pull/215) by @keithamus) +- Add issue templates ([#217](https://github.com/rollup/rollup-plugin-node-resolve/pull/217) by @mecurc) +- Improve performance by caching `isDir` ([#218](https://github.com/rollup/rollup-plugin-node-resolve/pull/218) by @keithamus) + +## 4.2.3 (2019-04-11) + +- Fix ordering of jsnext:main when using the jsnext option ([#209](https://github.com/rollup/rollup-plugin-node-resolve/pull/209) by @lukastaegert) + +## 4.2.2 (2019-04-10) + +- Fix TypeScript typings (rename and export Options interface) ([#206](https://github.com/rollup/rollup-plugin-node-resolve/pull/206) by @Kocal) +- Fix mainfields typing ([#207](https://github.com/rollup/rollup-plugin-node-resolve/pull/207) by @nicolashenry) + +## 4.2.1 (2019-04-06) + +- Respect setting the deprecated fields "module", "main", and "jsnext" ([#204](https://github.com/rollup/rollup-plugin-node-resolve/pull/204) by @nick-woodward) + +## 4.2.0 (2019-04-06) + +- Add new mainfields option ([#182](https://github.com/rollup/rollup-plugin-node-resolve/pull/182) by @keithamus) +- Added dedupe option to prevent bundling the same package multiple times ([#201](https://github.com/rollup/rollup-plugin-node-resolve/pull/182) by @sormy) + +## 4.1.0 (2019-04-05) + +- Add TypeScript typings ([#189](https://github.com/rollup/rollup-plugin-node-resolve/pull/189) by @NotWoods) +- Update dependencies ([#202](https://github.com/rollup/rollup-plugin-node-resolve/pull/202) by @lukastaegert) + +## 4.0.1 (2019-02-22) + +- Fix issue when external modules are specified in `package.browser` ([#143](https://github.com/rollup/rollup-plugin-node-resolve/pull/143) by @keithamus) +- Fix `package.browser` mapping issue when `false` is specified ([#183](https://github.com/rollup/rollup-plugin-node-resolve/pull/183) by @allex) + +## 4.0.0 (2018-12-09) + +This release will support rollup@1.0 + +### Features + +- Resolve modules used to define manual chunks ([#185](https://github.com/rollup/rollup-plugin-node-resolve/pull/185) by @mcshaman) +- Update dependencies and plugin hook usage ([#187](https://github.com/rollup/rollup-plugin-node-resolve/pull/187) by @lukastaegert) + +## 3.4.0 (2018-09-04) + +This release now supports `.mjs` files by default + +### Features + +- feat: Support .mjs files by default (https://github.com/rollup/rollup-plugin-node-resolve/pull/151, by @leebyron) + +## 3.3.0 (2018-03-17) + +This release adds the `only` option + +### New Features + +- feat: add `only` option (#83; @arantes555) + +### Docs + +- docs: correct description of `jail` option (#120; @GeorgeTaveras1231) + +## 3.2.0 (2018-03-07) + +This release caches reading/statting of files, to improve speed. + +### Performance Improvements + +- perf: cache file stats/reads (#126; @keithamus) + +## 3.0.4 (unreleased) + +- Update lockfile [#137](https://github.com/rollup/rollup-plugin-node-resolve/issues/137) +- Update rollup dependency [#138](https://github.com/rollup/rollup-plugin-node-resolve/issues/138) +- Enable installation from Github [#142](https://github.com/rollup/rollup-plugin-node-resolve/issues/142) + +## 3.0.3 + +- Fix [#130](https://github.com/rollup/rollup-plugin-node-resolve/issues/130) and [#131](https://github.com/rollup/rollup-plugin-node-resolve/issues/131) + +## 3.0.2 + +- Ensure `pkg.browser` is an object if necessary ([#129](https://github.com/rollup/rollup-plugin-node-resolve/pull/129)) + +## 3.0.1 + +- Remove `browser-resolve` dependency ([#127](https://github.com/rollup/rollup-plugin-node-resolve/pull/127)) + +## 3.0.0 + +- [BREAKING] Remove `options.skip` ([#90](https://github.com/rollup/rollup-plugin-node-resolve/pull/90)) +- Add `modulesOnly` option ([#96](https://github.com/rollup/rollup-plugin-node-resolve/pull/96)) + +## 2.1.1 + +- Prevent `jail` from breaking builds on Windows ([#93](https://github.com/rollup/rollup-plugin-node-resolve/issues/93)) + +## 2.1.0 + +- Add `jail` option ([#53](https://github.com/rollup/rollup-plugin-node-resolve/pull/53)) +- Add `customResolveOptions` option ([#79](https://github.com/rollup/rollup-plugin-node-resolve/pull/79)) +- Support symlinked packages ([#82](https://github.com/rollup/rollup-plugin-node-resolve/pull/82)) + +## 2.0.0 + +- Add support `module` field in package.json as an official alternative to jsnext + +## 1.7.3 + +- Error messages are more descriptive ([#50](https://github.com/rollup/rollup-plugin-node-resolve/issues/50)) + +## 1.7.2 + +- Allow entry point paths beginning with ./ + +## 1.7.1 + +- Return a `name` + +## 1.7.0 + +- Allow relative IDs to be external ([#32](https://github.com/rollup/rollup-plugin-node-resolve/pull/32)) + +## 1.6.0 + +- Skip IDs containing null character + +## 1.5.0 + +- Prefer built-in options, but allow opting out ([#28](https://github.com/rollup/rollup-plugin-node-resolve/pull/28)) + +## 1.4.0 + +- Pass `options.extensions` through to `node-resolve` + +## 1.3.0 + +- `skip: true` skips all packages that don't satisfy the `main` or `jsnext` options ([#16](https://github.com/rollup/rollup-plugin-node-resolve/pull/16)) + +## 1.2.1 + +- Support scoped packages in `skip` option ([#15](https://github.com/rollup/rollup-plugin-node-resolve/issues/15)) + +## 1.2.0 + +- Support `browser` field ([#8](https://github.com/rollup/rollup-plugin-node-resolve/issues/8)) +- Get tests to pass on Windows + +## 1.1.0 + +- Use node-resolve to handle various corner cases + +## 1.0.0 + +- Add ES6 build, use Rollup 0.20.0 + +## 0.1.0 + +- First release diff --git a/packages/node-resolve/README.md b/packages/node-resolve/README.md new file mode 100755 index 000000000..f0eac2f8b --- /dev/null +++ b/packages/node-resolve/README.md @@ -0,0 +1,185 @@ +[npm]: https://img.shields.io/npm/v/@rollup/plugin-node-resolve +[npm-url]: https://www.npmjs.com/package/@rollup/plugin-node-resolve +[size]: https://packagephobia.now.sh/badge?p=@rollup/plugin-node-resolve +[size-url]: https://packagephobia.now.sh/result?p=@rollup/plugin-node-resolve + +[![npm][npm]][npm-url] +[![size][size]][size-url] +[![libera manifesto](https://img.shields.io/badge/libera-manifesto-lightgrey.svg)](https://liberamanifesto.com) + +# @rollup/plugin-node-resolve + +🍣 A Rollup plugin which locates modules using the [Node resolution algorithm](https://nodejs.org/api/modules.html#modules_all_together), for using third party modules in `node_modules` + +## Requirements + +This plugin requires an [LTS](https://github.com/nodejs/Release) Node version (v8.0.0+) and Rollup v1.20.0+. + +## Install + +Using npm: + +```console +npm install @rollup/plugin-node-resolve --save-dev +``` + +## Usage + +Create a `rollup.config.js` [configuration file](https://www.rollupjs.org/guide/en/#configuration-files) and import the plugin: + +```js +import resolve from '@rollup/plugin-node-resolve'; + +export default { + input: 'src/index.js', + output: { + dir: 'output', + format: 'cjs' + }, + plugins: [resolve()] +}; +``` + +Then call `rollup` either via the [CLI](https://www.rollupjs.org/guide/en/#command-line-reference) or the [API](https://www.rollupjs.org/guide/en/#javascript-api). + +## Options + +### `mainFields` + +Type: `Array[String]`
+Default: `['module', 'main']` + +The fields to scan in a package.json to determine the entry point if this list contains "browser", overrides specified in "pkg.browser" will be used + +### `module` + +Type: `Boolean`
+Default: `true` + +DEPRECATED: use "mainFields" instead +Use "module" field for ES6 module if possible + +### `jsnext` + +Type: `Boolean`
+Default: `false` + +DEPRECATED: use "mainFields" instead +Use "jsnext:main" if possible, legacy field pointing to ES6 module in third-party libraries, deprecated in favor of "pkg.module", see: https://github.com/rollup/rollup/wiki/pkg.module + +### `main` + +Type: `Boolean`
+Default: `true` + +DEPRECATED: use "mainFields" instead +Use "main" field or index.js, even if it's not an ES6 module (needs to be converted from CommonJS to ES6) – see https://github.com/rollup/rollup-plugin-commonjs + +### `browser` + +Type: `Boolean`
+Default: `false` + +Some package.json files have a "browser" field which specifies alternative files to load for people bundling for the browser. If that's you, either use this option or add "browser" to the "mainFields" option, otherwise pkg.browser will be ignored + +### `extensions` + +Type: `Array[String]`
+Default: `['.mjs', '.js', '.json', '.node']` + +Resolve extensions other than .js in the order specified. + +### `preferBuiltins` + +Type: `Boolean`
+Default: `true` + +Whether to prefer built-in modules (e.g. `fs`, `path`) or local ones with the same names + +### `jail` + +Type: `String`
+Default: `'/'` + +Lock the module search in this path (like a chroot). Modules defined outside this path will be marked as external. + +### `only` + +Type: `Array[String|RegExp]`
+Default: `null` + +Example: `only: ['some_module', /^@some_scope\/.*$/]` + +### `modulesOnly` + +Type: `Boolean`
+Default: `false` + +If true, inspect resolved files to check that they are ES2015 modules. + +### `dedupe` + +Type: `Array[String]`
+Default: `[]` + +Force resolving for these modules to root's node_modules that helps to prevent bundling the same package multiple times if package is imported from dependencies. + +``` +dedupe: [ 'react', 'react-dom' ] +``` + +### `customResolveOptions` + +Type: `Boolean`
+Default: `null` + +Any additional options that should be passed through to node-resolve. + +``` +customResolveOptions: { + moduleDirectory: 'js_modules' +} +``` + +## Using with rollup-plugin-commonjs + +Since most packages in your node_modules folder are probably legacy CommonJS rather than JavaScript modules, you may need to use [rollup-plugin-commonjs](https://github.com/rollup/rollup-plugin-commonjs): + +```js +// rollup.config.js +import resolve from '@rollup/plugin-node-resolve'; +import commonjs from 'rollup-plugin-commonjs'; + +export default { + input: 'main.js', + output: { + file: 'bundle.js', + format: 'iife', + name: 'MyModule' + }, + 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-builtins](https://github.com/calvinmetcalf/rollup-plugin-node-builtins) which provides stubbed versions of these methods. + +If you want to silence warnings about builtins, you can add the list of builtins to the `externals` option; like so: + +```js +import resolve from '@rollup/plugin-node-resolve'; +import builtins from 'builtin-modules' +export default ({ + input: ..., + plugins: [resolve()], + external: builtins, + output: ... +}) +``` + +## Meta + +[CONTRIBUTING](/.github/CONTRIBUTING.md) + +[LICENSE (MIT)](/LICENSE) diff --git a/packages/node-resolve/package.json b/packages/node-resolve/package.json new file mode 100755 index 000000000..35eb0aeac --- /dev/null +++ b/packages/node-resolve/package.json @@ -0,0 +1,80 @@ +{ + "name": "@rollup/plugin-node-resolve", + "version": "6.0.0", + "publishConfig": { + "access": "public" + }, + "description": "Locate and bundle third-party dependencies in node_modules", + "license": "MIT", + "repository": "rollup/plugins", + "author": "Rich Harris ", + "homepage": "https://github.com/rollup/plugins/packages/node-resolve/#readme", + "bugs": "https://github.com/rollup/plugins/issues", + "main": "dist/index.js", + "engines": { + "node": ">= 8.0.0" + }, + "scripts": { + "build": "rollup -c", + "ci:coverage": "nyc pnpm run test && nyc report --reporter=text-lcov > coverage.lcov", + "ci:lint": "pnpm run build && pnpm run lint && pnpm run security", + "ci:lint:commits": "commitlint --from=${CIRCLE_BRANCH} --to=${CIRCLE_SHA1}", + "ci:test": "pnpm run test -- --verbose && pnpm run test:ts", + "lint": "pnpm run lint:js && pnpm run lint:docs && pnpm run lint:package", + "lint:docs": "prettier --single-quote --write README.md", + "lint:js": "eslint --fix --cache src test", + "lint:package": "prettier --write package.json --plugin=prettier-plugin-package", + "prebuild": "del-cli dist", + "prepare": "pnpm run build", + "prepublishOnly": "pnpm run lint && pnpm run test && pnpm run test:ts", + "pretest": "pnpm run build", + "security": "echo 'pnpm needs `npm audit` support'", + "test": "ava", + "test:ts": "tsc types/index.d.ts test/types.ts --noEmit" + }, + "files": [ + "dist", + "types", + "README.md", + "LICENSE" + ], + "keywords": [ + "rollup", + "plugin", + "es2015", + "npm", + "modules" + ], + "peerDependencies": { + "rollup": "^1.20.0" + }, + "dependencies": { + "@rollup/pluginutils": "^3.0.0", + "@types/resolve": "0.0.8", + "builtin-modules": "^3.1.0", + "is-module": "^1.0.0", + "resolve": "^1.11.1" + }, + "devDependencies": { + "@babel/core": "^7.4.5", + "@babel/preset-env": "^7.4.5", + "@rollup/plugin-json": "^4.0.0", + "es5-ext": "^0.10.50", + "rollup": "^1.20.0", + "rollup-plugin-babel": "^4.3.2", + "rollup-plugin-commonjs": "^10.0.0", + "string-capitalize": "^1.0.1", + "source-map": "^0.7.3" + }, + "ava": { + "files": [ + "!**/fixtures/**", + "!**/helpers/**", + "!**/recipes/**", + "!**/types.ts" + ] + }, + "jsnext:main": "dist/index.es.js", + "module": "dist/index.es.js", + "types": "types/index.d.ts" +} diff --git a/packages/node-resolve/rollup.config.js b/packages/node-resolve/rollup.config.js new file mode 100755 index 000000000..fe1fd1a65 --- /dev/null +++ b/packages/node-resolve/rollup.config.js @@ -0,0 +1,28 @@ +import babel from 'rollup-plugin-babel'; +import json from '@rollup/plugin-json'; + +import pkg from './package.json'; + +export default { + input: 'src/index.js', + plugins: [ + json(), + babel({ + presets: [ + [ + '@babel/preset-env', + { + targets: { + node: 6 + } + } + ] + ] + }) + ], + external: Object.keys(pkg.dependencies).concat(['path', 'fs', 'os']), + output: [ + { file: pkg.main, format: 'cjs' }, + { file: pkg.module, format: 'es' } + ] +}; diff --git a/packages/node-resolve/src/index.js b/packages/node-resolve/src/index.js new file mode 100755 index 000000000..f8928c04b --- /dev/null +++ b/packages/node-resolve/src/index.js @@ -0,0 +1,454 @@ +/* eslint-disable no-param-reassign, no-shadow, no-undefined */ +import { dirname, extname, join, normalize, resolve, sep } from 'path'; + +import fs, { realpathSync } from 'fs'; + +import builtinList from 'builtin-modules'; +import resolveId from 'resolve'; +import isModule from 'is-module'; +import { createFilter } from '@rollup/pluginutils'; + +import { peerDependencies } from '../package.json'; + +const builtins = new Set(builtinList); + +const ES6_BROWSER_EMPTY = '\0node-resolve:empty.js'; +// It is important that .mjs occur before .js so that Rollup will interpret npm modules +// which deploy both ESM .mjs and CommonJS .js files as ESM. +const DEFAULT_EXTS = ['.mjs', '.js', '.json', '.node']; + +const existsAsync = (file) => new Promise((fulfil) => fs.exists(file, fulfil)); + +const readFileAsync = (file) => + new Promise((fulfil, reject) => + fs.readFile(file, (err, contents) => (err ? reject(err) : fulfil(contents))) + ); + +const realpathAsync = (file) => + new Promise((fulfil, reject) => + fs.realpath(file, (err, contents) => (err ? reject(err) : fulfil(contents))) + ); + +const statAsync = (file) => + new Promise((fulfil, reject) => + fs.stat(file, (err, contents) => (err ? reject(err) : fulfil(contents))) + ); + +const cache = (fn) => { + const cache = new Map(); + const wrapped = (param, done) => { + if (cache.has(param) === false) { + cache.set( + param, + fn(param).catch((err) => { + cache.delete(param); + throw err; + }) + ); + } + return cache.get(param).then((result) => done(null, result), done); + }; + wrapped.clear = () => cache.clear(); + return wrapped; +}; + +const ignoreENOENT = (err) => { + if (err.code === 'ENOENT') return false; + throw err; +}; + +const readFileCached = cache(readFileAsync); + +const isDirCached = cache((file) => + statAsync(file).then((stat) => stat.isDirectory(), ignoreENOENT) +); + +const isFileCached = cache((file) => statAsync(file).then((stat) => stat.isFile(), ignoreENOENT)); + +function getMainFields(options) { + let mainFields; + if (options.mainFields) { + if ('module' in options || 'main' in options || 'jsnext' in options) { + throw new Error( + `node-resolve: do not use deprecated 'module', 'main', 'jsnext' options with 'mainFields'` + ); + } + ({ mainFields } = options); + } else { + mainFields = []; + [ + ['module', 'module', true], + ['jsnext', 'jsnext:main', false], + ['main', 'main', true] + ].forEach(([option, field, defaultIncluded]) => { + if (option in options) { + // eslint-disable-next-line no-console + console.warn( + `node-resolve: setting options.${option} is deprecated, please override options.mainFields instead` + ); + if (options[option]) { + mainFields.push(field); + } + } else if (defaultIncluded) { + mainFields.push(field); + } + }); + } + if (options.browser && mainFields.indexOf('browser') === -1) { + return ['browser'].concat(mainFields); + } + if (!mainFields.length) { + throw new Error(`Please ensure at least one 'mainFields' value is specified`); + } + return mainFields; +} + +const alwaysNull = () => null; + +const resolveIdAsync = (file, opts) => + new Promise((fulfil, reject) => + resolveId(file, opts, (err, contents) => (err ? reject(err) : fulfil(contents))) + ); + +// 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. +function resolveImportSpecifiers(importSpecifierList, resolveOptions) { + let p = Promise.resolve(); + for (let i = 0; i < importSpecifierList.length; i++) { + p = p.then((v) => { + // if we've already resolved to something, just return it. + if (v) return v; + + return resolveIdAsync(importSpecifierList[i], resolveOptions); + }); + + if (i < importSpecifierList.length - 1) { + // swallow MODULE_NOT_FOUND errors from all but the last resolution + p = p.catch((err) => { + if (err.code !== 'MODULE_NOT_FOUND') { + throw err; + } + }); + } + } + + return p; +} + +export default function nodeResolve(options = {}) { + const mainFields = getMainFields(options); + const useBrowserOverrides = mainFields.indexOf('browser') !== -1; + const dedupe = options.dedupe || []; + const isPreferBuiltinsSet = options.preferBuiltins === true || options.preferBuiltins === false; + const preferBuiltins = isPreferBuiltinsSet ? options.preferBuiltins : true; + const customResolveOptions = options.customResolveOptions || {}; + const { jail } = options; + const only = Array.isArray(options.only) + ? options.only.map((o) => + o instanceof RegExp + ? o + : new RegExp(`^${String(o).replace(/[\\^$*+?.()|[\]{}]/g, '\\$&')}$`) + ) + : null; + const browserMapCache = new Map(); + let preserveSymlinks; + + if (options.skip) { + throw new Error( + 'options.skip is no longer supported — you should use the main Rollup `external` option instead' + ); + } + + const extensions = options.extensions || DEFAULT_EXTS; + const packageInfoCache = new Map(); + const idToPackageInfo = new Map(); + + const shouldDedupe = + typeof dedupe === 'function' ? dedupe : (importee) => dedupe.includes(importee); + + function getCachedPackageInfo(pkg, pkgPath) { + if (packageInfoCache.has(pkgPath)) { + return packageInfoCache.get(pkgPath); + } + + // browserify/resolve doesn't realpath paths returned in its packageFilter callback + if (!preserveSymlinks) { + pkgPath = realpathSync(pkgPath); + } + + const pkgRoot = dirname(pkgPath); + + const packageInfo = { + // copy as we are about to munge the `main` field of `pkg`. + packageJson: Object.assign({}, pkg), + + // path to package.json file + packageJsonPath: pkgPath, + + // directory containing the package.json + root: pkgRoot, + + // which main field was used during resolution of this module (main, module, or browser) + resolvedMainField: 'main', + + // whether the browser map was used to resolve the entry point to this module + browserMappedMain: false, + + // the entry point of the module with respect to the selected main field and any + // relevant browser mappings. + resolvedEntryPoint: '' + }; + + let overriddenMain = false; + for (let i = 0; i < mainFields.length; i++) { + const field = mainFields[i]; + if (typeof pkg[field] === 'string') { + pkg.main = pkg[field]; + packageInfo.resolvedMainField = field; + overriddenMain = true; + break; + } + } + + const internalPackageInfo = { + cachedPkg: pkg, + hasModuleSideEffects: alwaysNull, + hasPackageEntry: overriddenMain !== false || mainFields.indexOf('main') !== -1, + packageBrowserField: + useBrowserOverrides && + typeof pkg.browser === 'object' && + Object.keys(pkg.browser).reduce((browser, key) => { + let resolved = pkg.browser[key]; + if (resolved && resolved[0] === '.') { + resolved = resolve(pkgRoot, resolved); + } + browser[key] = resolved; + if (key[0] === '.') { + const absoluteKey = resolve(pkgRoot, key); + browser[absoluteKey] = resolved; + if (!extname(key)) { + extensions.reduce((browser, ext) => { + browser[absoluteKey + ext] = browser[key]; + return browser; + }, browser); + } + } + return browser; + }, {}), + packageInfo + }; + + const browserMap = internalPackageInfo.packageBrowserField; + if ( + useBrowserOverrides && + typeof pkg.browser === 'object' && + // eslint-disable-next-line no-prototype-builtins + browserMap.hasOwnProperty(pkg.main) + ) { + packageInfo.resolvedEntryPoint = browserMap[pkg.main]; + packageInfo.browserMappedMain = true; + } else { + // index.node is technically a valid default entrypoint as well... + packageInfo.resolvedEntryPoint = resolve(pkgRoot, pkg.main || 'index.js'); + packageInfo.browserMappedMain = false; + } + + const packageSideEffects = pkg.sideEffects; + if (typeof packageSideEffects === 'boolean') { + internalPackageInfo.hasModuleSideEffects = () => packageSideEffects; + } else if (Array.isArray(packageSideEffects)) { + internalPackageInfo.hasModuleSideEffects = createFilter(packageSideEffects, null, { + resolve: pkgRoot + }); + } + + packageInfoCache.set(pkgPath, internalPackageInfo); + return internalPackageInfo; + } + + return { + name: 'node-resolve', + + buildStart(options) { + ({ preserveSymlinks } = options); + const [major, minor] = this.meta.rollupVersion.split('.').map(Number); + const minVersion = peerDependencies.rollup.slice(2); + const [minMajor, minMinor] = minVersion.split('.').map(Number); + if (major < minMajor || (major === minMajor && minor < minMinor)) { + this.error( + `Insufficient Rollup version: "rollup-plugin-node-resolve" requires at least rollup@${minVersion} but found rollup@${this.meta.rollupVersion}.` + ); + } + }, + + generateBundle() { + readFileCached.clear(); + isFileCached.clear(); + isDirCached.clear(); + }, + + resolveId(importee, importer) { + if (importee === ES6_BROWSER_EMPTY) { + return importee; + } + // ignore IDs with null character, these belong to other plugins + if (/\0/.test(importee)) return null; + + const basedir = importer ? dirname(importer) : process.cwd(); + + if (shouldDedupe(importee)) { + importee = join(process.cwd(), 'node_modules', importee); + } + + // https://github.com/defunctzombie/package-browser-field-spec + const browser = browserMapCache.get(importer); + if (useBrowserOverrides && browser) { + const resolvedImportee = resolve(basedir, importee); + if (browser[importee] === false || browser[resolvedImportee] === false) { + return ES6_BROWSER_EMPTY; + } + const browserImportee = + browser[importee] || + browser[resolvedImportee] || + browser[`${resolvedImportee}.js`] || + browser[`${resolvedImportee}.json`]; + if (browserImportee) { + importee = browserImportee; + } + } + + const parts = importee.split(/[/\\]/); + let id = parts.shift(); + + if (id[0] === '@' && parts.length > 0) { + // scoped packages + id += `/${parts.shift()}`; + } else if (id[0] === '.') { + // an import relative to the parent dir of the importer + id = resolve(basedir, importee); + } + + if (only && !only.some((pattern) => pattern.test(id))) return null; + + let hasModuleSideEffects = alwaysNull; + let hasPackageEntry = true; + let packageBrowserField = false; + let packageInfo; + + const resolveOptions = { + basedir, + packageFilter(pkg, pkgPath) { + let cachedPkg; + ({ + packageInfo, + cachedPkg, + hasModuleSideEffects, + hasPackageEntry, + packageBrowserField + } = getCachedPackageInfo(pkg, pkgPath)); + + return cachedPkg; + }, + readFile: readFileCached, + isFile: isFileCached, + isDirectory: isDirCached, + extensions + }; + + if (preserveSymlinks !== undefined) { + resolveOptions.preserveSymlinks = preserveSymlinks; + } + + const importSpecifierList = []; + + if (importer === undefined && !importee[0].match(/^\.?\.?\//)) { + // For module graph roots (i.e. when importer is undefined), we + // need to handle 'path fragments` like `foo/bar` that are commonly + // found in rollup config files. If importee doesn't look like a + // relative or absolute path, we make it relative and attempt to + // resolve it. If we don't find anything, we try resolving it as we + // got it. + importSpecifierList.push(`./${importee}`); + } + + const importeeIsBuiltin = builtins.has(importee); + + if (importeeIsBuiltin && (!preferBuiltins || !isPreferBuiltinsSet)) { + // The `resolve` library will not resolve packages with the same + // name as a node built-in module. If we're resolving something + // that's a builtin, and we don't prefer to find built-ins, we + // first try to look up a local module with that name. If we don't + // find anything, we resolve the builtin which just returns back + // the built-in's name. + importSpecifierList.push(`${importee}/`); + } + + importSpecifierList.push(importee); + return resolveImportSpecifiers( + importSpecifierList, + Object.assign(resolveOptions, customResolveOptions) + ) + .then((resolved) => { + if (resolved && packageBrowserField) { + if (Object.prototype.hasOwnProperty.call(packageBrowserField, resolved)) { + if (!packageBrowserField[resolved]) { + browserMapCache.set(resolved, packageBrowserField); + return ES6_BROWSER_EMPTY; + } + resolved = packageBrowserField[resolved]; + } + browserMapCache.set(resolved, packageBrowserField); + } + + if (hasPackageEntry && !preserveSymlinks && resolved) { + return existsAsync(resolved).then((exists) => + exists ? realpathAsync(resolved) : resolved + ); + } + return resolved; + }) + .then((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; + } + } + + if (resolved && options.modulesOnly) { + return readFileAsync(resolved, 'utf-8').then((code) => + isModule(code) + ? { id: resolved, moduleSideEffects: hasModuleSideEffects(resolved) } + : null + ); + } + return { id: resolved, moduleSideEffects: hasModuleSideEffects(resolved) }; + }) + .catch(() => null); + }, + + load(importee) { + if (importee === ES6_BROWSER_EMPTY) { + return 'export default {};'; + } + return null; + }, + + getPackageInfoForId(id) { + return idToPackageInfo.get(id); + } + }; +} diff --git a/packages/node-resolve/test/browser.js b/packages/node-resolve/test/browser.js new file mode 100644 index 000000000..ae8ed9416 --- /dev/null +++ b/packages/node-resolve/test/browser.js @@ -0,0 +1,201 @@ +const { join } = require('path'); + +const test = require('ava'); +const { rollup } = require('rollup'); +const commonjs = require('rollup-plugin-commonjs'); + +const { testBundle } = require('../../../util/test'); + +const nodeResolve = require('..'); + +process.chdir(join(__dirname, 'fixtures')); + +test('disregards top-level browser field', async (t) => { + const bundle = await rollup({ + input: 'browser.js', + onwarn: () => t.fail('No warnings were expected'), + plugins: [nodeResolve()] + }); + const { module } = await testBundle(t, bundle); + + t.is(module.exports, 'node'); +}); + +test('allows use of the top-level browser field', async (t) => { + const bundle = await rollup({ + input: 'browser.js', + onwarn: () => t.fail('No warnings were expected'), + plugins: [ + nodeResolve({ + mainFields: ['browser', 'main'] + }) + ] + }); + const { module } = await testBundle(t, bundle); + + t.is(module.exports, 'browser'); +}); + +test('disregards object browser field', async (t) => { + const bundle = await rollup({ + input: 'browser-object.js', + onwarn: () => t.fail('No warnings were expected'), + plugins: [nodeResolve()] + }); + const { module } = await testBundle(t, bundle); + + t.is(module.exports.env, 'node'); + t.is(module.exports.dep, 'node-dep'); + t.is(module.exports.test, 42); +}); + +test('allows use of the object browser field', async (t) => { + const bundle = await rollup({ + input: 'browser-object.js', + onwarn: () => t.fail('No warnings were expected'), + plugins: [ + nodeResolve({ + mainFields: ['browser', 'main'] + }) + ] + }); + const { module } = await testBundle(t, bundle); + + t.is(module.exports.env, 'browser'); + t.is(module.exports.dep, 'browser-dep'); + t.is(module.exports.test, 43); +}); + +test('allows use of object browser field, resolving `main`', async (t) => { + const bundle = await rollup({ + input: 'browser-object-main.js', + onwarn: () => t.fail('No warnings were expected'), + plugins: [ + nodeResolve({ + mainFields: ['browser', 'main'] + }) + ] + }); + const { module } = await testBundle(t, bundle); + + t.is(module.exports.env, 'browser'); + t.is(module.exports.dep, 'browser-dep'); + t.is(module.exports.test, 43); +}); + +test('options.browser = true still works', async (t) => { + const bundle = await rollup({ + input: 'browser-object-main.js', + plugins: [ + nodeResolve({ + browser: true + }) + ] + }); + const { module } = await testBundle(t, bundle); + + t.is(module.exports.env, 'browser'); + t.is(module.exports.dep, 'browser-dep'); + t.is(module.exports.test, 43); +}); + +test('allows use of object browser field, resolving implicit `main`', async (t) => { + const bundle = await rollup({ + input: 'browser-object-implicit.js', + onwarn: () => t.fail('No warnings were expected'), + plugins: [ + nodeResolve({ + mainFields: ['browser', 'main'] + }) + ] + }); + const { module } = await testBundle(t, bundle); + + t.is(module.exports.env, 'browser'); +}); + +test('allows use of object browser field, resolving replaced builtins', async (t) => { + const bundle = await rollup({ + input: 'browser-object-builtin.js', + onwarn: () => t.fail('No warnings were expected'), + plugins: [ + nodeResolve({ + mainFields: ['browser', 'main'] + }) + ] + }); + const { module } = await testBundle(t, bundle); + + t.is(module.exports, 'browser-fs'); +}); + +test('allows use of object browser field, resolving nested directories', async (t) => { + const bundle = await rollup({ + input: 'browser-object-nested.js', + onwarn: () => t.fail('No warnings were expected'), + plugins: [ + nodeResolve({ + mainFields: ['browser', 'main'] + }) + ] + }); + const { module } = await testBundle(t, bundle); + + t.is(module.exports.env, 'browser'); + t.is(module.exports.dep, 'browser-dep'); + t.is(module.exports.test, 43); +}); + +test('respects local browser field', async (t) => { + const bundle = await rollup({ + input: 'browser-local.js', + onwarn: () => t.fail('No warnings were expected'), + plugins: [ + nodeResolve({ + mainFields: ['browser', 'main'] + }) + ] + }); + const { module } = await testBundle(t, bundle); + + t.is(module.exports, 'component-type'); +}); + +test('allows use of object browser field, resolving to nested node_modules', async (t) => { + const bundle = await rollup({ + input: 'browser-entry-points-to-node-module.js', + onwarn: () => t.fail('No warnings were expected'), + plugins: [ + nodeResolve({ + main: true, + browser: true + }) + ] + }); + const { module } = await testBundle(t, bundle); + + t.is(module.exports, 'component-type'); +}); + +test('supports `false` in browser field', async (t) => { + const bundle = await rollup({ + input: 'browser-false.js', + onwarn: () => t.fail('No warnings were expected'), + plugins: [ + nodeResolve({ + mainFields: ['browser', 'main'] + }) + ] + }); + await testBundle(t, bundle); +}); + +test('pkg.browser with mapping to prevent bundle by specifying a value of false', async (t) => { + const bundle = await rollup({ + input: 'browser-object-with-false.js', + plugins: [nodeResolve({ browser: true }), commonjs()] + }); + const { module } = await testBundle(t, bundle); + + t.is(module.exports, 'ok'); +}); diff --git a/packages/node-resolve/test/dedupe.js b/packages/node-resolve/test/dedupe.js new file mode 100644 index 000000000..126dc0d39 --- /dev/null +++ b/packages/node-resolve/test/dedupe.js @@ -0,0 +1,48 @@ +const { join } = require('path'); + +const test = require('ava'); +const { rollup } = require('rollup'); + +const { testBundle } = require('../../../util/test'); + +const nodeResolve = require('..'); + +process.chdir(join(__dirname, 'fixtures')); + +test('single module version is bundled if dedupe is set', async (t) => { + const bundle = await rollup({ + input: 'react-app.js', + plugins: [ + nodeResolve({ + dedupe: ['react'] + }) + ] + }); + const { module } = await testBundle(t, bundle); + + t.snapshot(module.exports); +}); + +test('single module version is bundled if dedupe is set as a function', async (t) => { + const bundle = await rollup({ + input: 'react-app.js', + plugins: [ + nodeResolve({ + dedupe: (dep) => dep === 'react' + }) + ] + }); + const { module } = await testBundle(t, bundle); + + t.snapshot(module.exports); +}); + +test('multiple module versions are bundled if dedupe is not set', async (t) => { + const bundle = await rollup({ + input: 'react-app.js', + plugins: [nodeResolve()] + }); + const { module } = await testBundle(t, bundle); + + t.snapshot(module.exports); +}); diff --git a/packages/node-resolve/test/deprecated.js b/packages/node-resolve/test/deprecated.js new file mode 100644 index 000000000..7fdbda94d --- /dev/null +++ b/packages/node-resolve/test/deprecated.js @@ -0,0 +1,69 @@ +const { join } = require('path'); + +const test = require('ava'); +const { rollup } = require('rollup'); + +const { testBundle } = require('../../../util/test'); + +const nodeResolve = require('..'); + +process.chdir(join(__dirname, 'fixtures')); + +test('options.jsnext still works with correct priority', async (t) => { + const bundle = await rollup({ + input: 'jsnext.js', + plugins: [nodeResolve({ jsnext: true, main: true })] + }); + const { module } = await testBundle(t, bundle); + t.is(module.exports, 'JSNEXT'); +}); + +test('options.module still works with correct priority', async (t) => { + const bundle = await rollup({ + input: 'module.js', + plugins: [nodeResolve({ module: true, main: true, preferBuiltins: false })] + }); + const { module } = await testBundle(t, bundle); + t.is(module.exports, 'MODULE'); +}); + +test('should support enabling "jsnext" field resolution', async (t) => { + const bundle = await rollup({ + input: 'prefer-module.js', + plugins: [nodeResolve({ main: false, module: false, jsnext: true })] + }); + const { module } = await testBundle(t, bundle); + + t.is(module.exports, 'JSNEXT-ENTRY'); +}); + +test('should support disabling "module" field resolution', async (t) => { + const bundle = await rollup({ + input: 'prefer-main.js', + plugins: [nodeResolve({ module: false })] + }); + const { module } = await testBundle(t, bundle); + + t.is(module.exports, 'MAIN-ENTRY'); +}); + +test('should support disabling "main" field resolution', async (t) => { + const bundle = await rollup({ + input: 'prefer-module.js', + plugins: [nodeResolve({ main: false })] + }); + const { module } = await testBundle(t, bundle); + + t.is(module.exports, 'MODULE-ENTRY'); +}); + +test('finds a module with module field', async (t) => { + const bundle = await rollup({ + input: 'module.js', + onwarn: () => t.fail('No warnings were expected'), + plugins: [nodeResolve({ preferBuiltins: false })] + }); + const { module } = await testBundle(t, bundle); + + t.is(module.exports, 'MODULE'); +}); diff --git a/packages/node-resolve/test/fixtures/.eslintrc b/packages/node-resolve/test/fixtures/.eslintrc new file mode 100644 index 000000000..524185c83 --- /dev/null +++ b/packages/node-resolve/test/fixtures/.eslintrc @@ -0,0 +1,12 @@ +{ + "globals": { + "t": true + }, + "rules": { + "import/extensions": "off", + "import/no-unresolved": "off", + "import/prefer-default-export": "off", + "line-comment-position": "off", + "no-console": "off" + } +} diff --git a/packages/node-resolve/test/fixtures/browser-entry-points-to-node-module.js b/packages/node-resolve/test/fixtures/browser-entry-points-to-node-module.js new file mode 100755 index 000000000..0697a9677 --- /dev/null +++ b/packages/node-resolve/test/fixtures/browser-entry-points-to-node-module.js @@ -0,0 +1,3 @@ +import sample from 'browser-entry-points-to-node-module'; + +export default sample; diff --git a/packages/node-resolve/test/fixtures/browser-false.js b/packages/node-resolve/test/fixtures/browser-false.js new file mode 100755 index 000000000..7768eea7f --- /dev/null +++ b/packages/node-resolve/test/fixtures/browser-false.js @@ -0,0 +1,3 @@ +import thing from 'uses-buffer'; + +t.deepEqual(thing, {}); diff --git a/packages/node-resolve/test/fixtures/browser-local.js b/packages/node-resolve/test/fixtures/browser-local.js new file mode 100755 index 000000000..f50e1bbb3 --- /dev/null +++ b/packages/node-resolve/test/fixtures/browser-local.js @@ -0,0 +1,4 @@ +// test browser mapped imports from the main entrypoint +import s from 'dummy-module'; + +export default s; diff --git a/packages/node-resolve/test/fixtures/browser-object-builtin.js b/packages/node-resolve/test/fixtures/browser-object-builtin.js new file mode 100755 index 000000000..b253efcaf --- /dev/null +++ b/packages/node-resolve/test/fixtures/browser-object-builtin.js @@ -0,0 +1,3 @@ +import main from 'builtins-browser'; + +export default main; diff --git a/packages/node-resolve/test/fixtures/browser-object-implicit.js b/packages/node-resolve/test/fixtures/browser-object-implicit.js new file mode 100755 index 000000000..47fb83f51 --- /dev/null +++ b/packages/node-resolve/test/fixtures/browser-object-implicit.js @@ -0,0 +1,3 @@ +import { env } from 'isomorphic-object-main-implicit'; + +export { env }; diff --git a/packages/node-resolve/test/fixtures/browser-object-main.js b/packages/node-resolve/test/fixtures/browser-object-main.js new file mode 100755 index 000000000..49cea7892 --- /dev/null +++ b/packages/node-resolve/test/fixtures/browser-object-main.js @@ -0,0 +1,3 @@ +import { env, dep, test } from 'isomorphic-object-main'; + +export { env, dep, test }; diff --git a/packages/node-resolve/test/fixtures/browser-object-nested.js b/packages/node-resolve/test/fixtures/browser-object-nested.js new file mode 100755 index 000000000..930ba5635 --- /dev/null +++ b/packages/node-resolve/test/fixtures/browser-object-nested.js @@ -0,0 +1,3 @@ +import { env, dep, test } from 'isomorphic-nested'; + +export { env, dep, test }; diff --git a/packages/node-resolve/test/fixtures/browser-object-with-false.js b/packages/node-resolve/test/fixtures/browser-object-with-false.js new file mode 100755 index 000000000..938b3416c --- /dev/null +++ b/packages/node-resolve/test/fixtures/browser-object-with-false.js @@ -0,0 +1,18 @@ +import Client from 'isomorphic-object-with-false'; +import HTTPTracker from 'isomorphic-object-with-false/lib/client/http-tracker'; + +import HTTPTrackerWithSubPath from 'isomorphic-object-with-false/lib/subpath/foo'; + +import ES6_BROWSER_EMPTY from '\0node-resolve:empty.js'; + +// do some assert +const clientWs = new Client('ws:'); +const clientHttp = new Client('http:'); + +t.is(clientWs.name, 'websocket-tracker'); +t.is(clientHttp.name, 'NULL'); +t.is(HTTPTracker, ES6_BROWSER_EMPTY); +t.is(HTTPTrackerWithSubPath, ES6_BROWSER_EMPTY); + +// expose +export default 'ok'; diff --git a/packages/node-resolve/test/fixtures/browser-object.js b/packages/node-resolve/test/fixtures/browser-object.js new file mode 100755 index 000000000..9f8806f83 --- /dev/null +++ b/packages/node-resolve/test/fixtures/browser-object.js @@ -0,0 +1,3 @@ +import { env, dep, test } from 'isomorphic-object'; + +export { env, dep, test }; diff --git a/packages/node-resolve/test/fixtures/browser.js b/packages/node-resolve/test/fixtures/browser.js new file mode 100755 index 000000000..043d164a7 --- /dev/null +++ b/packages/node-resolve/test/fixtures/browser.js @@ -0,0 +1,3 @@ +import env from 'isomorphic'; + +export default env; diff --git a/packages/node-resolve/test/fixtures/builtins.js b/packages/node-resolve/test/fixtures/builtins.js new file mode 100755 index 000000000..6eddd0626 --- /dev/null +++ b/packages/node-resolve/test/fixtures/builtins.js @@ -0,0 +1,3 @@ +import { sep } from 'path'; + +export default sep; diff --git a/packages/node-resolve/test/fixtures/commonjs.js b/packages/node-resolve/test/fixtures/commonjs.js new file mode 100755 index 000000000..bd60317d2 --- /dev/null +++ b/packages/node-resolve/test/fixtures/commonjs.js @@ -0,0 +1,3 @@ +import capitalize from 'string-capitalize'; + +export default capitalize('it works!'); diff --git a/packages/node-resolve/test/fixtures/custom-resolve-options/js_modules/foo.js b/packages/node-resolve/test/fixtures/custom-resolve-options/js_modules/foo.js new file mode 100755 index 000000000..7a4e8a723 --- /dev/null +++ b/packages/node-resolve/test/fixtures/custom-resolve-options/js_modules/foo.js @@ -0,0 +1 @@ +export default 42; diff --git a/packages/node-resolve/test/fixtures/custom-resolve-options/main.js b/packages/node-resolve/test/fixtures/custom-resolve-options/main.js new file mode 100755 index 000000000..683062af1 --- /dev/null +++ b/packages/node-resolve/test/fixtures/custom-resolve-options/main.js @@ -0,0 +1,3 @@ +import foo from 'foo'; + +t.is(foo, 42); diff --git a/packages/node-resolve/test/fixtures/deep-import-non-module.js b/packages/node-resolve/test/fixtures/deep-import-non-module.js new file mode 100755 index 000000000..9869d4db8 --- /dev/null +++ b/packages/node-resolve/test/fixtures/deep-import-non-module.js @@ -0,0 +1,3 @@ +import deep from 'foo/deep'; + +console.log(deep); diff --git a/packages/node-resolve/test/fixtures/dual-cjs-mjs.js b/packages/node-resolve/test/fixtures/dual-cjs-mjs.js new file mode 100755 index 000000000..c6ed8f74e --- /dev/null +++ b/packages/node-resolve/test/fixtures/dual-cjs-mjs.js @@ -0,0 +1,3 @@ +import module from 'dual-cjs-mjs'; + +export default module; // MODULE diff --git a/packages/node-resolve/test/fixtures/dynamic.js b/packages/node-resolve/test/fixtures/dynamic.js new file mode 100755 index 000000000..b0ac82338 --- /dev/null +++ b/packages/node-resolve/test/fixtures/dynamic.js @@ -0,0 +1 @@ +export default import('test'); diff --git a/packages/node-resolve/test/fixtures/extensions/lol.wut b/packages/node-resolve/test/fixtures/extensions/lol.wut new file mode 100755 index 000000000..96100aefe --- /dev/null +++ b/packages/node-resolve/test/fixtures/extensions/lol.wut @@ -0,0 +1 @@ +export var answer = 42; diff --git a/packages/node-resolve/test/fixtures/extensions/main.js b/packages/node-resolve/test/fixtures/extensions/main.js new file mode 100755 index 000000000..df3e589d8 --- /dev/null +++ b/packages/node-resolve/test/fixtures/extensions/main.js @@ -0,0 +1,3 @@ +import { answer } from './lol'; + +t.is(answer, 42); diff --git a/packages/node-resolve/test/fixtures/granular.js b/packages/node-resolve/test/fixtures/granular.js new file mode 100755 index 000000000..095dc66b6 --- /dev/null +++ b/packages/node-resolve/test/fixtures/granular.js @@ -0,0 +1,3 @@ +import uppercase from 'string/uppercase.js'; + +export default uppercase('foo'); diff --git a/packages/node-resolve/test/fixtures/jail.js b/packages/node-resolve/test/fixtures/jail.js new file mode 100755 index 000000000..095dc66b6 --- /dev/null +++ b/packages/node-resolve/test/fixtures/jail.js @@ -0,0 +1,3 @@ +import uppercase from 'string/uppercase.js'; + +export default uppercase('foo'); diff --git a/packages/node-resolve/test/fixtures/jsnext.js b/packages/node-resolve/test/fixtures/jsnext.js new file mode 100755 index 000000000..47ccbbb25 --- /dev/null +++ b/packages/node-resolve/test/fixtures/jsnext.js @@ -0,0 +1,3 @@ +import value from 'jsnext'; + +export default value; diff --git a/packages/node-resolve/test/fixtures/local-index/forty-two/index.js b/packages/node-resolve/test/fixtures/local-index/forty-two/index.js new file mode 100755 index 000000000..7a4e8a723 --- /dev/null +++ b/packages/node-resolve/test/fixtures/local-index/forty-two/index.js @@ -0,0 +1 @@ +export default 42; diff --git a/packages/node-resolve/test/fixtures/local-index/main.js b/packages/node-resolve/test/fixtures/local-index/main.js new file mode 100755 index 000000000..6825e66e5 --- /dev/null +++ b/packages/node-resolve/test/fixtures/local-index/main.js @@ -0,0 +1,3 @@ +import fortyTwo from './forty-two'; + +export default fortyTwo; diff --git a/packages/node-resolve/test/fixtures/main.js b/packages/node-resolve/test/fixtures/main.js new file mode 100644 index 000000000..a2cbd95ee --- /dev/null +++ b/packages/node-resolve/test/fixtures/main.js @@ -0,0 +1 @@ +// placeholder for ../package.json diff --git a/packages/node-resolve/test/fixtures/manualchunks.js b/packages/node-resolve/test/fixtures/manualchunks.js new file mode 100755 index 000000000..734a62396 --- /dev/null +++ b/packages/node-resolve/test/fixtures/manualchunks.js @@ -0,0 +1,3 @@ +import simple from 'simple'; + +console.log(simple); diff --git a/packages/node-resolve/test/fixtures/module-mjs.js b/packages/node-resolve/test/fixtures/module-mjs.js new file mode 100755 index 000000000..9d2a79d82 --- /dev/null +++ b/packages/node-resolve/test/fixtures/module-mjs.js @@ -0,0 +1,3 @@ +import module from 'module-mjs'; + +export default module; // MODULE diff --git a/packages/node-resolve/test/fixtures/module.js b/packages/node-resolve/test/fixtures/module.js new file mode 100755 index 000000000..01b304c14 --- /dev/null +++ b/packages/node-resolve/test/fixtures/module.js @@ -0,0 +1,3 @@ +import module from 'module'; + +export default module; // MODULE diff --git a/packages/node-resolve/test/fixtures/node_modules/.gitkeep b/packages/node-resolve/test/fixtures/node_modules/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/packages/node-resolve/test/fixtures/node_modules/@scoped/bar/index.js b/packages/node-resolve/test/fixtures/node_modules/@scoped/bar/index.js new file mode 100644 index 000000000..d742342f6 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/@scoped/bar/index.js @@ -0,0 +1 @@ +export default 'BAR'; diff --git a/packages/node-resolve/test/fixtures/node_modules/@scoped/foo/index.js b/packages/node-resolve/test/fixtures/node_modules/@scoped/foo/index.js new file mode 100644 index 000000000..20fc97bf8 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/@scoped/foo/index.js @@ -0,0 +1 @@ +export default 'FOO'; diff --git a/packages/node-resolve/test/fixtures/node_modules/browser-entry-points-to-node-module/index.js b/packages/node-resolve/test/fixtures/node_modules/browser-entry-points-to-node-module/index.js new file mode 100644 index 000000000..57a69eeca --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/browser-entry-points-to-node-module/index.js @@ -0,0 +1,2 @@ +import dep from 'type'; +export default dep; diff --git a/packages/node-resolve/test/fixtures/node_modules/browser-entry-points-to-node-module/package.json b/packages/node-resolve/test/fixtures/node_modules/browser-entry-points-to-node-module/package.json new file mode 100644 index 000000000..7c578df4e --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/browser-entry-points-to-node-module/package.json @@ -0,0 +1,6 @@ +{ + "main": "index.js", + "browser": { + "type": "component-type" + } +} diff --git a/packages/node-resolve/test/fixtures/node_modules/builtins-browser/fs.js b/packages/node-resolve/test/fixtures/node_modules/builtins-browser/fs.js new file mode 100644 index 000000000..ff4756e7a --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/builtins-browser/fs.js @@ -0,0 +1 @@ +export default 'browser-fs'; diff --git a/packages/node-resolve/test/fixtures/node_modules/builtins-browser/index.js b/packages/node-resolve/test/fixtures/node_modules/builtins-browser/index.js new file mode 100644 index 000000000..f0a6c3c62 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/builtins-browser/index.js @@ -0,0 +1,2 @@ +import fs from 'fs'; +export default fs; diff --git a/packages/node-resolve/test/fixtures/node_modules/builtins-browser/package.json b/packages/node-resolve/test/fixtures/node_modules/builtins-browser/package.json new file mode 100644 index 000000000..548673887 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/builtins-browser/package.json @@ -0,0 +1,6 @@ +{ + "main": "./index.js", + "browser": { + "fs": "./fs.js" + } +} diff --git a/packages/node-resolve/test/fixtures/node_modules/component-type/index.js b/packages/node-resolve/test/fixtures/node_modules/component-type/index.js new file mode 100644 index 000000000..57deab6f6 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/component-type/index.js @@ -0,0 +1 @@ +export default 'component-type'; diff --git a/packages/node-resolve/test/fixtures/node_modules/component-type/package.json b/packages/node-resolve/test/fixtures/node_modules/component-type/package.json new file mode 100644 index 000000000..7721d2376 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/component-type/package.json @@ -0,0 +1,3 @@ +{ + "main": "index.js" +} diff --git a/packages/node-resolve/test/fixtures/node_modules/dual-cjs-mjs/entry.js b/packages/node-resolve/test/fixtures/node_modules/dual-cjs-mjs/entry.js new file mode 100644 index 000000000..8d278e07d --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/dual-cjs-mjs/entry.js @@ -0,0 +1 @@ +module.exports = 'DUAL-CJS'; diff --git a/packages/node-resolve/test/fixtures/node_modules/dual-cjs-mjs/entry.mjs b/packages/node-resolve/test/fixtures/node_modules/dual-cjs-mjs/entry.mjs new file mode 100644 index 000000000..f4c86d1bd --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/dual-cjs-mjs/entry.mjs @@ -0,0 +1 @@ +export default 'DUAL-MJS'; diff --git a/packages/node-resolve/test/fixtures/node_modules/dual-cjs-mjs/package.json b/packages/node-resolve/test/fixtures/node_modules/dual-cjs-mjs/package.json new file mode 100644 index 000000000..bf2e35593 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/dual-cjs-mjs/package.json @@ -0,0 +1,3 @@ +{ + "main": "entry" +} \ No newline at end of file diff --git a/packages/node-resolve/test/fixtures/node_modules/entries/jsnext-entry.js b/packages/node-resolve/test/fixtures/node_modules/entries/jsnext-entry.js new file mode 100644 index 000000000..1f55238f0 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/entries/jsnext-entry.js @@ -0,0 +1 @@ +export default 'JSNEXT-ENTRY'; diff --git a/packages/node-resolve/test/fixtures/node_modules/entries/main-entry.js b/packages/node-resolve/test/fixtures/node_modules/entries/main-entry.js new file mode 100644 index 000000000..4af5ca49a --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/entries/main-entry.js @@ -0,0 +1 @@ +export default 'MAIN-ENTRY'; diff --git a/packages/node-resolve/test/fixtures/node_modules/entries/module-entry.js b/packages/node-resolve/test/fixtures/node_modules/entries/module-entry.js new file mode 100644 index 000000000..95c37d93f --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/entries/module-entry.js @@ -0,0 +1 @@ +export default 'MODULE-ENTRY'; diff --git a/packages/node-resolve/test/fixtures/node_modules/entries/package.json b/packages/node-resolve/test/fixtures/node_modules/entries/package.json new file mode 100644 index 000000000..155bbf86a --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/entries/package.json @@ -0,0 +1,5 @@ +{ + "main": "main-entry.js", + "module": "module-entry.js", + "jsnext:main": "jsnext-entry.js" +} diff --git a/packages/node-resolve/test/fixtures/node_modules/events/index.js b/packages/node-resolve/test/fixtures/node_modules/events/index.js new file mode 100644 index 000000000..e9aca1612 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/events/index.js @@ -0,0 +1 @@ +export default 'not the built-in events module'; diff --git a/packages/node-resolve/test/fixtures/node_modules/events/package.json b/packages/node-resolve/test/fixtures/node_modules/events/package.json new file mode 100644 index 000000000..5e55a1e86 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/events/package.json @@ -0,0 +1,3 @@ +{ + "main": "./index.js" +} diff --git a/packages/node-resolve/test/fixtures/node_modules/isomorphic-nested/lib/browser-dep.js b/packages/node-resolve/test/fixtures/node_modules/isomorphic-nested/lib/browser-dep.js new file mode 100644 index 000000000..35ba3db3a --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/isomorphic-nested/lib/browser-dep.js @@ -0,0 +1 @@ +export default 'browser-dep'; diff --git a/packages/node-resolve/test/fixtures/node_modules/isomorphic-nested/lib/browser-test.js b/packages/node-resolve/test/fixtures/node_modules/isomorphic-nested/lib/browser-test.js new file mode 100644 index 000000000..8efc72994 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/isomorphic-nested/lib/browser-test.js @@ -0,0 +1 @@ +export default 43; diff --git a/packages/node-resolve/test/fixtures/node_modules/isomorphic-nested/lib/browser.js b/packages/node-resolve/test/fixtures/node_modules/isomorphic-nested/lib/browser.js new file mode 100644 index 000000000..d3cd12458 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/isomorphic-nested/lib/browser.js @@ -0,0 +1,5 @@ +import dep from './dep.js'; +import test from './test'; + +const env = 'browser'; +export { env, dep, test }; diff --git a/packages/node-resolve/test/fixtures/node_modules/isomorphic-nested/lib/dep.js b/packages/node-resolve/test/fixtures/node_modules/isomorphic-nested/lib/dep.js new file mode 100644 index 000000000..2089e1937 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/isomorphic-nested/lib/dep.js @@ -0,0 +1 @@ +export default 'node-dep'; diff --git a/packages/node-resolve/test/fixtures/node_modules/isomorphic-nested/lib/index.js b/packages/node-resolve/test/fixtures/node_modules/isomorphic-nested/lib/index.js new file mode 100644 index 000000000..16bed7888 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/isomorphic-nested/lib/index.js @@ -0,0 +1,5 @@ +import dep from './dep.js'; +import test from 'test'; + +const env = 'node'; +export { env, dep, test }; diff --git a/packages/node-resolve/test/fixtures/node_modules/isomorphic-nested/package.json b/packages/node-resolve/test/fixtures/node_modules/isomorphic-nested/package.json new file mode 100644 index 000000000..976f6d3f3 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/isomorphic-nested/package.json @@ -0,0 +1,8 @@ +{ + "main": "./lib/index.js", + "browser": { + "./lib/index.js": "./lib/browser.js", + "./lib/dep.js": "./lib/browser-dep.js", + "./lib/test": "./lib/browser-test.js" + } +} diff --git a/packages/node-resolve/test/fixtures/node_modules/isomorphic-object-main-implicit/browser.js b/packages/node-resolve/test/fixtures/node_modules/isomorphic-object-main-implicit/browser.js new file mode 100644 index 000000000..f6516fee6 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/isomorphic-object-main-implicit/browser.js @@ -0,0 +1,2 @@ +const env = 'browser'; +export { env }; diff --git a/packages/node-resolve/test/fixtures/node_modules/isomorphic-object-main-implicit/index.js b/packages/node-resolve/test/fixtures/node_modules/isomorphic-object-main-implicit/index.js new file mode 100644 index 000000000..5b118a40a --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/isomorphic-object-main-implicit/index.js @@ -0,0 +1,2 @@ +const env = 'node'; +export { env }; diff --git a/packages/node-resolve/test/fixtures/node_modules/isomorphic-object-main-implicit/package.json b/packages/node-resolve/test/fixtures/node_modules/isomorphic-object-main-implicit/package.json new file mode 100644 index 000000000..dadb70d87 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/isomorphic-object-main-implicit/package.json @@ -0,0 +1,5 @@ +{ + "browser": { + "./index.js": "./browser.js" + } +} diff --git a/packages/node-resolve/test/fixtures/node_modules/isomorphic-object-main/browser-dep.js b/packages/node-resolve/test/fixtures/node_modules/isomorphic-object-main/browser-dep.js new file mode 100644 index 000000000..35ba3db3a --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/isomorphic-object-main/browser-dep.js @@ -0,0 +1 @@ +export default 'browser-dep'; diff --git a/packages/node-resolve/test/fixtures/node_modules/isomorphic-object-main/browser-test.js b/packages/node-resolve/test/fixtures/node_modules/isomorphic-object-main/browser-test.js new file mode 100644 index 000000000..8efc72994 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/isomorphic-object-main/browser-test.js @@ -0,0 +1 @@ +export default 43; diff --git a/packages/node-resolve/test/fixtures/node_modules/isomorphic-object-main/browser.js b/packages/node-resolve/test/fixtures/node_modules/isomorphic-object-main/browser.js new file mode 100644 index 000000000..3497d5174 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/isomorphic-object-main/browser.js @@ -0,0 +1,5 @@ +import dep from './dep.js'; +import test from 'test'; + +const env = 'browser'; +export { env, dep, test }; diff --git a/packages/node-resolve/test/fixtures/node_modules/isomorphic-object-main/dep.js b/packages/node-resolve/test/fixtures/node_modules/isomorphic-object-main/dep.js new file mode 100644 index 000000000..2089e1937 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/isomorphic-object-main/dep.js @@ -0,0 +1 @@ +export default 'node-dep'; diff --git a/packages/node-resolve/test/fixtures/node_modules/isomorphic-object-main/index.js b/packages/node-resolve/test/fixtures/node_modules/isomorphic-object-main/index.js new file mode 100644 index 000000000..16bed7888 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/isomorphic-object-main/index.js @@ -0,0 +1,5 @@ +import dep from './dep.js'; +import test from 'test'; + +const env = 'node'; +export { env, dep, test }; diff --git a/packages/node-resolve/test/fixtures/node_modules/isomorphic-object-main/package.json b/packages/node-resolve/test/fixtures/node_modules/isomorphic-object-main/package.json new file mode 100644 index 000000000..39bbc8b26 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/isomorphic-object-main/package.json @@ -0,0 +1,8 @@ +{ + "main": "index.js", + "browser": { + "./index.js": "./browser.js", + "./dep.js": "./browser-dep.js", + "test": "./browser-test.js" + } +} diff --git a/packages/node-resolve/test/fixtures/node_modules/isomorphic-object-with-false/lib/client/http-tracker.js b/packages/node-resolve/test/fixtures/node_modules/isomorphic-object-with-false/lib/client/http-tracker.js new file mode 100644 index 000000000..75e80bd81 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/isomorphic-object-with-false/lib/client/http-tracker.js @@ -0,0 +1,4 @@ + +module.exports = function(client, announceUrl) { + this.name = 'http-tracker' +} diff --git a/packages/node-resolve/test/fixtures/node_modules/isomorphic-object-with-false/lib/client/udp-tracker.js b/packages/node-resolve/test/fixtures/node_modules/isomorphic-object-with-false/lib/client/udp-tracker.js new file mode 100644 index 000000000..bb2c98b2c --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/isomorphic-object-with-false/lib/client/udp-tracker.js @@ -0,0 +1,4 @@ + +module.exports = function(client, announceUrl) { + this.name = 'udp-tracker' +} diff --git a/packages/node-resolve/test/fixtures/node_modules/isomorphic-object-with-false/lib/client/websocket-tracker.js b/packages/node-resolve/test/fixtures/node_modules/isomorphic-object-with-false/lib/client/websocket-tracker.js new file mode 100644 index 000000000..c7a38e449 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/isomorphic-object-with-false/lib/client/websocket-tracker.js @@ -0,0 +1,4 @@ + +module.exports = function(client, announceUrl) { + this.name = 'websocket-tracker' +} diff --git a/packages/node-resolve/test/fixtures/node_modules/isomorphic-object-with-false/lib/index.js b/packages/node-resolve/test/fixtures/node_modules/isomorphic-object-with-false/lib/index.js new file mode 100644 index 000000000..073ab9fe7 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/isomorphic-object-with-false/lib/index.js @@ -0,0 +1,20 @@ +// sample code inspired by npm: bittorrent-tracker-client + +var HTTPTracker = require('./client/http-tracker') // empty object in browser +var UDPTracker = require('./client/udp-tracker') // empty object in browser +var WebSocketTracker = require('./client/websocket-tracker') + +function Client(protocol, announceUrl) { + var self = this; + if ((protocol === 'http:' || protocol === 'https:') && + typeof HTTPTracker === 'function') { + return new HTTPTracker(self, announceUrl) + } else if (protocol === 'udp:' && typeof UDPTracker === 'function') { + return new UDPTracker(self, announceUrl) + } else if ((protocol === 'ws:' || protocol === 'wss:')) { + return new WebSocketTracker(self, announceUrl) + } + this.name = 'NULL'; +} + +module.exports = Client diff --git a/packages/node-resolve/test/fixtures/node_modules/isomorphic-object-with-false/lib/subpath/foo/index.js b/packages/node-resolve/test/fixtures/node_modules/isomorphic-object-with-false/lib/subpath/foo/index.js new file mode 100644 index 000000000..082f03b3d --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/isomorphic-object-with-false/lib/subpath/foo/index.js @@ -0,0 +1,2 @@ +var HTTPTracker = require('../../client/http-tracker') // empty object in browser +module.exports = HTTPTracker diff --git a/packages/node-resolve/test/fixtures/node_modules/isomorphic-object-with-false/package.json b/packages/node-resolve/test/fixtures/node_modules/isomorphic-object-with-false/package.json new file mode 100644 index 000000000..6b9be5006 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/isomorphic-object-with-false/package.json @@ -0,0 +1,8 @@ +{ + "main": "./lib/index.js", + "browser": { + "./lib/common.js": "./lib/common-browser.js", + "./lib/client/http-tracker.js": false, + "./lib/client/udp-tracker.js": false + } +} diff --git a/packages/node-resolve/test/fixtures/node_modules/isomorphic-object/browser-dep.js b/packages/node-resolve/test/fixtures/node_modules/isomorphic-object/browser-dep.js new file mode 100644 index 000000000..35ba3db3a --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/isomorphic-object/browser-dep.js @@ -0,0 +1 @@ +export default 'browser-dep'; diff --git a/packages/node-resolve/test/fixtures/node_modules/isomorphic-object/browser-test.js b/packages/node-resolve/test/fixtures/node_modules/isomorphic-object/browser-test.js new file mode 100644 index 000000000..8efc72994 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/isomorphic-object/browser-test.js @@ -0,0 +1 @@ +export default 43; diff --git a/packages/node-resolve/test/fixtures/node_modules/isomorphic-object/browser.js b/packages/node-resolve/test/fixtures/node_modules/isomorphic-object/browser.js new file mode 100644 index 000000000..3497d5174 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/isomorphic-object/browser.js @@ -0,0 +1,5 @@ +import dep from './dep.js'; +import test from 'test'; + +const env = 'browser'; +export { env, dep, test }; diff --git a/packages/node-resolve/test/fixtures/node_modules/isomorphic-object/dep.js b/packages/node-resolve/test/fixtures/node_modules/isomorphic-object/dep.js new file mode 100644 index 000000000..2089e1937 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/isomorphic-object/dep.js @@ -0,0 +1 @@ +export default 'node-dep'; diff --git a/packages/node-resolve/test/fixtures/node_modules/isomorphic-object/index.js b/packages/node-resolve/test/fixtures/node_modules/isomorphic-object/index.js new file mode 100644 index 000000000..16bed7888 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/isomorphic-object/index.js @@ -0,0 +1,5 @@ +import dep from './dep.js'; +import test from 'test'; + +const env = 'node'; +export { env, dep, test }; diff --git a/packages/node-resolve/test/fixtures/node_modules/isomorphic-object/package.json b/packages/node-resolve/test/fixtures/node_modules/isomorphic-object/package.json new file mode 100644 index 000000000..c72325939 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/isomorphic-object/package.json @@ -0,0 +1,8 @@ +{ + "main": "./index.js", + "browser": { + "./index.js": "./browser.js", + "./dep.js": "./browser-dep.js", + "test": "./browser-test.js" + } +} diff --git a/packages/node-resolve/test/fixtures/node_modules/isomorphic/browser.js b/packages/node-resolve/test/fixtures/node_modules/isomorphic/browser.js new file mode 100644 index 000000000..9577136bb --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/isomorphic/browser.js @@ -0,0 +1 @@ +export default 'browser'; diff --git a/packages/node-resolve/test/fixtures/node_modules/isomorphic/node.js b/packages/node-resolve/test/fixtures/node_modules/isomorphic/node.js new file mode 100644 index 000000000..502c042dc --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/isomorphic/node.js @@ -0,0 +1 @@ +export default 'node'; diff --git a/packages/node-resolve/test/fixtures/node_modules/isomorphic/package.json b/packages/node-resolve/test/fixtures/node_modules/isomorphic/package.json new file mode 100644 index 000000000..f3c0e613e --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/isomorphic/package.json @@ -0,0 +1,4 @@ +{ + "main": "./node.js", + "browser": "./browser.js" +} diff --git a/packages/node-resolve/test/fixtures/node_modules/jsnext/entry-main.js b/packages/node-resolve/test/fixtures/node_modules/jsnext/entry-main.js new file mode 100644 index 000000000..aaf1b3fe1 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/jsnext/entry-main.js @@ -0,0 +1 @@ +export default 'MAIN'; diff --git a/packages/node-resolve/test/fixtures/node_modules/jsnext/entry.js b/packages/node-resolve/test/fixtures/node_modules/jsnext/entry.js new file mode 100644 index 000000000..b8e8806b3 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/jsnext/entry.js @@ -0,0 +1 @@ +export default 'JSNEXT'; diff --git a/packages/node-resolve/test/fixtures/node_modules/jsnext/package.json b/packages/node-resolve/test/fixtures/node_modules/jsnext/package.json new file mode 100644 index 000000000..c13699bc6 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/jsnext/package.json @@ -0,0 +1,4 @@ +{ + "jsnext:main": "entry.js", + "main": "entry-main.js" +} diff --git a/packages/node-resolve/test/fixtures/node_modules/legacy/entry.js b/packages/node-resolve/test/fixtures/node_modules/legacy/entry.js new file mode 100644 index 000000000..67ad7f605 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/legacy/entry.js @@ -0,0 +1 @@ +export default 'LEGACY'; diff --git a/packages/node-resolve/test/fixtures/node_modules/legacy/package.json b/packages/node-resolve/test/fixtures/node_modules/legacy/package.json new file mode 100644 index 000000000..6cde76d65 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/legacy/package.json @@ -0,0 +1,3 @@ +{ + "main": "entry.js" +} diff --git a/packages/node-resolve/test/fixtures/node_modules/module-mjs/entry.mjs b/packages/node-resolve/test/fixtures/node_modules/module-mjs/entry.mjs new file mode 100644 index 000000000..9773a84b9 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/module-mjs/entry.mjs @@ -0,0 +1 @@ +export default 'MODULE-MJS'; diff --git a/packages/node-resolve/test/fixtures/node_modules/module-mjs/package.json b/packages/node-resolve/test/fixtures/node_modules/module-mjs/package.json new file mode 100644 index 000000000..bf2e35593 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/module-mjs/package.json @@ -0,0 +1,3 @@ +{ + "main": "entry" +} \ No newline at end of file diff --git a/packages/node-resolve/test/fixtures/node_modules/module/entry-main.js b/packages/node-resolve/test/fixtures/node_modules/module/entry-main.js new file mode 100644 index 000000000..aaf1b3fe1 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/module/entry-main.js @@ -0,0 +1 @@ +export default 'MAIN'; diff --git a/packages/node-resolve/test/fixtures/node_modules/module/entry.js b/packages/node-resolve/test/fixtures/node_modules/module/entry.js new file mode 100644 index 000000000..6772250dc --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/module/entry.js @@ -0,0 +1 @@ +export default 'MODULE'; diff --git a/packages/node-resolve/test/fixtures/node_modules/module/package.json b/packages/node-resolve/test/fixtures/node_modules/module/package.json new file mode 100644 index 000000000..8430c83c4 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/module/package.json @@ -0,0 +1,4 @@ +{ + "main": "entry-main.js", + "module": "entry.js" +} diff --git a/packages/node-resolve/test/fixtures/node_modules/react-consumer/index.js b/packages/node-resolve/test/fixtures/node_modules/react-consumer/index.js new file mode 100644 index 000000000..bfc70f0d2 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/react-consumer/index.js @@ -0,0 +1,3 @@ +import React from 'react' + +export default 'react-consumer:' + React diff --git a/packages/node-resolve/test/fixtures/node_modules/react-consumer/node_modules/.gitkeep b/packages/node-resolve/test/fixtures/node_modules/react-consumer/node_modules/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/packages/node-resolve/test/fixtures/node_modules/react-consumer/node_modules/react/index.js b/packages/node-resolve/test/fixtures/node_modules/react-consumer/node_modules/react/index.js new file mode 100644 index 000000000..8bfd7ab47 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/react-consumer/node_modules/react/index.js @@ -0,0 +1 @@ +export default 'react:child' \ No newline at end of file diff --git a/packages/node-resolve/test/fixtures/node_modules/react/index.js b/packages/node-resolve/test/fixtures/node_modules/react/index.js new file mode 100644 index 000000000..6fd06a9bb --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/react/index.js @@ -0,0 +1 @@ +export default 'react:root' diff --git a/packages/node-resolve/test/fixtures/node_modules/side-effects-array/dep1.js b/packages/node-resolve/test/fixtures/node_modules/side-effects-array/dep1.js new file mode 100644 index 000000000..c58447453 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/side-effects-array/dep1.js @@ -0,0 +1,4 @@ +global.sideEffects = global.sideEffects || []; +global.sideEffects.push('array-dep1'); + +export const value = 'dep1'; diff --git a/packages/node-resolve/test/fixtures/node_modules/side-effects-array/dep2.js b/packages/node-resolve/test/fixtures/node_modules/side-effects-array/dep2.js new file mode 100644 index 000000000..ff72e7b44 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/side-effects-array/dep2.js @@ -0,0 +1,4 @@ +global.sideEffects = global.sideEffects || []; +global.sideEffects.push('array-dep2'); + +export const value = 'dep2'; diff --git a/packages/node-resolve/test/fixtures/node_modules/side-effects-array/dep3-effect.js b/packages/node-resolve/test/fixtures/node_modules/side-effects-array/dep3-effect.js new file mode 100644 index 000000000..22d5f6fa2 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/side-effects-array/dep3-effect.js @@ -0,0 +1,4 @@ +global.sideEffects = global.sideEffects || []; +global.sideEffects.push('array-dep3'); + +export const value = 'dep3'; diff --git a/packages/node-resolve/test/fixtures/node_modules/side-effects-array/index.js b/packages/node-resolve/test/fixtures/node_modules/side-effects-array/index.js new file mode 100644 index 000000000..0e04e8f55 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/side-effects-array/index.js @@ -0,0 +1,8 @@ +global.sideEffects = global.sideEffects || []; +global.sideEffects.push('array-index'); + +export {value as value1} from './dep1.js'; +export {value as value2} from './dep2.js'; +export {value as value3} from './dep3-effect.js'; +export {value as value4} from './nested/dep4'; +export {value as value5} from './nested/dep5-effect'; diff --git a/packages/node-resolve/test/fixtures/node_modules/side-effects-array/nested/dep4.js b/packages/node-resolve/test/fixtures/node_modules/side-effects-array/nested/dep4.js new file mode 100644 index 000000000..4a4155de1 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/side-effects-array/nested/dep4.js @@ -0,0 +1,4 @@ +global.sideEffects = global.sideEffects || []; +global.sideEffects.push('array-dep4'); + +export const value = 'dep3'; diff --git a/packages/node-resolve/test/fixtures/node_modules/side-effects-array/nested/dep5-effect.js b/packages/node-resolve/test/fixtures/node_modules/side-effects-array/nested/dep5-effect.js new file mode 100644 index 000000000..cfc9de504 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/side-effects-array/nested/dep5-effect.js @@ -0,0 +1,4 @@ +global.sideEffects = global.sideEffects || []; +global.sideEffects.push('array-dep5'); + +export const value = 'dep3'; diff --git a/packages/node-resolve/test/fixtures/node_modules/side-effects-array/package.json b/packages/node-resolve/test/fixtures/node_modules/side-effects-array/package.json new file mode 100644 index 000000000..2a39b98fa --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/side-effects-array/package.json @@ -0,0 +1,8 @@ +{ + "main": "./index.js", + "sideEffects": [ + "./index.js", + "./dep1.js", + "**/*-effect.js" + ] +} diff --git a/packages/node-resolve/test/fixtures/node_modules/side-effects-false/dep1.js b/packages/node-resolve/test/fixtures/node_modules/side-effects-false/dep1.js new file mode 100644 index 000000000..ea6965268 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/side-effects-false/dep1.js @@ -0,0 +1,4 @@ +global.sideEffects = global.sideEffects || []; +global.sideEffects.push('false-dep1'); + +export const value = 'dep1'; diff --git a/packages/node-resolve/test/fixtures/node_modules/side-effects-false/dep2.js b/packages/node-resolve/test/fixtures/node_modules/side-effects-false/dep2.js new file mode 100644 index 000000000..c31f44ea2 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/side-effects-false/dep2.js @@ -0,0 +1,4 @@ +global.sideEffects = global.sideEffects || []; +global.sideEffects.push('false-dep2'); + +export const value = 'dep2'; diff --git a/packages/node-resolve/test/fixtures/node_modules/side-effects-false/index.js b/packages/node-resolve/test/fixtures/node_modules/side-effects-false/index.js new file mode 100644 index 000000000..29754ae3e --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/side-effects-false/index.js @@ -0,0 +1,5 @@ +global.sideEffects = global.sideEffects || []; +global.sideEffects.push('false-index'); + +export {value as value1} from './dep1.js'; +export {value as value2} from './dep2.js'; diff --git a/packages/node-resolve/test/fixtures/node_modules/side-effects-false/package.json b/packages/node-resolve/test/fixtures/node_modules/side-effects-false/package.json new file mode 100644 index 000000000..67eb6cf1a --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/side-effects-false/package.json @@ -0,0 +1,4 @@ +{ + "main": "./index.js", + "sideEffects": false +} diff --git a/packages/node-resolve/test/fixtures/node_modules/side-effects-true/dep1.js b/packages/node-resolve/test/fixtures/node_modules/side-effects-true/dep1.js new file mode 100644 index 000000000..4b370cc72 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/side-effects-true/dep1.js @@ -0,0 +1,4 @@ +global.sideEffects = global.sideEffects || []; +global.sideEffects.push('true-dep1'); + +export const value = 'dep1'; diff --git a/packages/node-resolve/test/fixtures/node_modules/side-effects-true/dep2.js b/packages/node-resolve/test/fixtures/node_modules/side-effects-true/dep2.js new file mode 100644 index 000000000..8c73a0138 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/side-effects-true/dep2.js @@ -0,0 +1,4 @@ +global.sideEffects = global.sideEffects || []; +global.sideEffects.push('true-dep2'); + +export const value = 'dep2'; diff --git a/packages/node-resolve/test/fixtures/node_modules/side-effects-true/index.js b/packages/node-resolve/test/fixtures/node_modules/side-effects-true/index.js new file mode 100644 index 000000000..f0fcb7132 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/side-effects-true/index.js @@ -0,0 +1,5 @@ +global.sideEffects = global.sideEffects || []; +global.sideEffects.push('true-index'); + +export {value as value1} from './dep1.js'; +export {value as value2} from './dep2.js'; diff --git a/packages/node-resolve/test/fixtures/node_modules/side-effects-true/package.json b/packages/node-resolve/test/fixtures/node_modules/side-effects-true/package.json new file mode 100644 index 000000000..d721c8a51 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/side-effects-true/package.json @@ -0,0 +1,4 @@ +{ + "main": "./index.js", + "sideEffects": true +} diff --git a/packages/node-resolve/test/fixtures/node_modules/simple/index.js b/packages/node-resolve/test/fixtures/node_modules/simple/index.js new file mode 100644 index 000000000..7a4e8a723 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/simple/index.js @@ -0,0 +1 @@ +export default 42; diff --git a/packages/node-resolve/test/fixtures/node_modules/string/uppercase.js b/packages/node-resolve/test/fixtures/node_modules/string/uppercase.js new file mode 100644 index 000000000..05fdfb7d9 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/string/uppercase.js @@ -0,0 +1,3 @@ +export default function uppercase ( str ) { + return str.toUpperCase(); +} diff --git a/packages/node-resolve/test/fixtures/node_modules/test/index.js b/packages/node-resolve/test/fixtures/node_modules/test/index.js new file mode 100644 index 000000000..7a4e8a723 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/test/index.js @@ -0,0 +1 @@ +export default 42; diff --git a/packages/node-resolve/test/fixtures/node_modules/uses-buffer/index.js b/packages/node-resolve/test/fixtures/node_modules/uses-buffer/index.js new file mode 100644 index 000000000..849dd1eb4 --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/uses-buffer/index.js @@ -0,0 +1,2 @@ +import Buffer from 'buffer'; +export default Buffer; diff --git a/packages/node-resolve/test/fixtures/node_modules/uses-buffer/package.json b/packages/node-resolve/test/fixtures/node_modules/uses-buffer/package.json new file mode 100644 index 000000000..0793b7bac --- /dev/null +++ b/packages/node-resolve/test/fixtures/node_modules/uses-buffer/package.json @@ -0,0 +1,5 @@ +{ + "browser": { + "buffer": false + } +} diff --git a/packages/node-resolve/test/fixtures/only.js b/packages/node-resolve/test/fixtures/only.js new file mode 100755 index 000000000..70f00e6ca --- /dev/null +++ b/packages/node-resolve/test/fixtures/only.js @@ -0,0 +1,7 @@ +import foo from '@scoped/foo'; +import bar from '@scoped/bar'; +import test from 'test'; + +console.log(foo); +console.log(bar); +console.log(test); diff --git a/packages/node-resolve/test/fixtures/package-index.js b/packages/node-resolve/test/fixtures/package-index.js new file mode 100755 index 000000000..58709917d --- /dev/null +++ b/packages/node-resolve/test/fixtures/package-index.js @@ -0,0 +1 @@ +import 'es5-ext/object/set-prototype-of'; diff --git a/packages/node-resolve/test/fixtures/package.json b/packages/node-resolve/test/fixtures/package.json new file mode 100755 index 000000000..a58c25b80 --- /dev/null +++ b/packages/node-resolve/test/fixtures/package.json @@ -0,0 +1,13 @@ +{ + "name": "test", + "version": "1.0.0", + "description": "", + "license": "ISC", + "author": "", + "main": "main.js", + "scripts": {}, + "keywords": [], + "browser": { + "dummy-module": "component-type" + } +} diff --git a/packages/node-resolve/test/fixtures/prefer-builtin.js b/packages/node-resolve/test/fixtures/prefer-builtin.js new file mode 100755 index 000000000..c6ab084cf --- /dev/null +++ b/packages/node-resolve/test/fixtures/prefer-builtin.js @@ -0,0 +1 @@ +import 'events'; diff --git a/packages/node-resolve/test/fixtures/prefer-jsnext.js b/packages/node-resolve/test/fixtures/prefer-jsnext.js new file mode 100755 index 000000000..c5a945dea --- /dev/null +++ b/packages/node-resolve/test/fixtures/prefer-jsnext.js @@ -0,0 +1,3 @@ +import entry from 'entries'; + +export default entry; diff --git a/packages/node-resolve/test/fixtures/prefer-main.js b/packages/node-resolve/test/fixtures/prefer-main.js new file mode 100755 index 000000000..c5a945dea --- /dev/null +++ b/packages/node-resolve/test/fixtures/prefer-main.js @@ -0,0 +1,3 @@ +import entry from 'entries'; + +export default entry; diff --git a/packages/node-resolve/test/fixtures/prefer-module.js b/packages/node-resolve/test/fixtures/prefer-module.js new file mode 100755 index 000000000..c5a945dea --- /dev/null +++ b/packages/node-resolve/test/fixtures/prefer-module.js @@ -0,0 +1,3 @@ +import entry from 'entries'; + +export default entry; diff --git a/packages/node-resolve/test/fixtures/react-app.js b/packages/node-resolve/test/fixtures/react-app.js new file mode 100755 index 000000000..84e5d12ff --- /dev/null +++ b/packages/node-resolve/test/fixtures/react-app.js @@ -0,0 +1,4 @@ +import React from 'react'; +import ReactConsumer from 'react-consumer'; + +export { React, ReactConsumer }; diff --git a/packages/node-resolve/test/fixtures/side-effects.js b/packages/node-resolve/test/fixtures/side-effects.js new file mode 100755 index 000000000..2e8522eb4 --- /dev/null +++ b/packages/node-resolve/test/fixtures/side-effects.js @@ -0,0 +1,4 @@ +import 'side-effects-array'; + +export { value1 as falseValue } from 'side-effects-false'; +export { value1 as trueValue } from 'side-effects-true'; diff --git a/packages/node-resolve/test/fixtures/symlinked/first/index.js b/packages/node-resolve/test/fixtures/symlinked/first/index.js new file mode 100755 index 000000000..2258e0703 --- /dev/null +++ b/packages/node-resolve/test/fixtures/symlinked/first/index.js @@ -0,0 +1,2 @@ +export { default as number1 } from 'second'; +export { default as number2 } from 'third'; diff --git a/packages/node-resolve/test/fixtures/symlinked/second/index.js b/packages/node-resolve/test/fixtures/symlinked/second/index.js new file mode 100755 index 000000000..989df8237 --- /dev/null +++ b/packages/node-resolve/test/fixtures/symlinked/second/index.js @@ -0,0 +1,3 @@ +import randomNumber from 'third'; + +export default randomNumber; diff --git a/packages/node-resolve/test/fixtures/symlinked/third/index.js b/packages/node-resolve/test/fixtures/symlinked/third/index.js new file mode 100755 index 000000000..f62d29398 --- /dev/null +++ b/packages/node-resolve/test/fixtures/symlinked/third/index.js @@ -0,0 +1,3 @@ +const randomNumber = Math.random(); + +export default randomNumber; diff --git a/packages/node-resolve/test/fixtures/trailing-slash.js b/packages/node-resolve/test/fixtures/trailing-slash.js new file mode 100755 index 000000000..c227dc2e1 --- /dev/null +++ b/packages/node-resolve/test/fixtures/trailing-slash.js @@ -0,0 +1,3 @@ +import capitalize from 'string-capitalize/'; + +export default capitalize('it works!'); diff --git a/packages/node-resolve/test/fixtures/unresolved-global.js b/packages/node-resolve/test/fixtures/unresolved-global.js new file mode 100755 index 000000000..7efc8da80 --- /dev/null +++ b/packages/node-resolve/test/fixtures/unresolved-global.js @@ -0,0 +1 @@ +import 'foo'; diff --git a/packages/node-resolve/test/fixtures/unresolved-local.js b/packages/node-resolve/test/fixtures/unresolved-local.js new file mode 100755 index 000000000..ead12a719 --- /dev/null +++ b/packages/node-resolve/test/fixtures/unresolved-local.js @@ -0,0 +1 @@ +import './foo'; diff --git a/packages/node-resolve/test/get-package-info.js b/packages/node-resolve/test/get-package-info.js new file mode 100644 index 000000000..6de9ed7e7 --- /dev/null +++ b/packages/node-resolve/test/get-package-info.js @@ -0,0 +1,115 @@ +/* eslint-disable consistent-return, import/no-dynamic-require, global-require */ + +const path = require('path'); + +const test = require('ava'); +const { rollup } = require('rollup'); + +const nodeResolve = require('..'); + +process.chdir(path.join(__dirname, 'fixtures')); + +test('populates info for main', async (t) => { + const resolve = nodeResolve({ + mainFields: ['main'] + }); + + let entriesInfo; + + await rollup({ + input: 'prefer-main.js', + plugins: [ + resolve, + { + transform(code, id) { + if (!id.match(/main-entry.js$/)) return; + entriesInfo = resolve.getPackageInfoForId(id); + return code; + } + } + ] + }); + + const entriesPkgJsonPath = path.resolve('node_modules/entries/package.json'); + const root = path.dirname(entriesPkgJsonPath); + + t.deepEqual(entriesInfo, { + browserMappedMain: false, + resolvedMainField: 'main', + packageJson: require(entriesPkgJsonPath), + packageJsonPath: entriesPkgJsonPath, + root, + resolvedEntryPoint: path.resolve(root, './main-entry.js') + }); +}); + +test('populates info for module', async (t) => { + const resolve = nodeResolve({ + mainFields: ['module'] + }); + + let entriesInfo; + + await rollup({ + input: 'prefer-main.js', + plugins: [ + resolve, + { + transform(code, id) { + if (!id.match(/module-entry.js$/)) return; + entriesInfo = resolve.getPackageInfoForId(id); + return code; + } + } + ] + }); + + const entriesPkgJsonPath = path.resolve('node_modules/entries/package.json'); + const root = path.dirname(entriesPkgJsonPath); + + t.deepEqual(entriesInfo, { + browserMappedMain: false, + resolvedMainField: 'module', + packageJson: require(entriesPkgJsonPath), + packageJsonPath: entriesPkgJsonPath, + root, + resolvedEntryPoint: path.resolve(root, './module-entry.js') + }); +}); + +test('populates info for browser', async (t) => { + const resolve = nodeResolve({ + mainFields: ['browser'] + }); + + const entriesInfoMap = new Map(); + + await rollup({ + input: 'browser-object.js', + plugins: [ + resolve, + { + transform(code, id) { + if (!id.match(/isomorphic-object/)) return; + entriesInfoMap.set(id, resolve.getPackageInfoForId(id)); + return code; + } + } + ] + }); + + const entriesPkgJsonPath = path.resolve('node_modules/isomorphic-object/package.json'); + const root = path.dirname(entriesPkgJsonPath); + const expectedPkgJson = require(entriesPkgJsonPath); + + for (const entriesInfo of entriesInfoMap.values()) { + t.deepEqual(entriesInfo, { + browserMappedMain: true, + resolvedMainField: 'main', + packageJson: expectedPkgJson, + packageJsonPath: entriesPkgJsonPath, + root, + resolvedEntryPoint: path.resolve(root, './browser.js') + }); + } +}); diff --git a/packages/node-resolve/test/jail.js b/packages/node-resolve/test/jail.js new file mode 100644 index 000000000..27c50d346 --- /dev/null +++ b/packages/node-resolve/test/jail.js @@ -0,0 +1,44 @@ +const { join } = require('path'); + +const test = require('ava'); +const { rollup } = require('rollup'); + +const { getImports } = require('../../../util/test'); + +const nodeResolve = require('..'); + +process.chdir(join(__dirname, 'fixtures')); + +test('mark module outside the jail as external', async (t) => { + const warnings = []; + const bundle = await rollup({ + input: 'jail.js', + onwarn: (warning) => warnings.push(warning), + plugins: [ + nodeResolve({ + // changed to /fixtures above + jail: join(__dirname, 'snapshots') + }) + ] + }); + const imports = await getImports(bundle); + + t.snapshot(warnings); + t.is(warnings.length, 1); + t.deepEqual(imports, ['string/uppercase.js']); +}); + +test('bundle module defined inside the jail', async (t) => { + const bundle = await rollup({ + input: 'jail.js', + onwarn: () => t.fail('No warnings were expected'), + plugins: [ + nodeResolve({ + jail: `${__dirname}/` + }) + ] + }); + const imports = await getImports(bundle); + + t.deepEqual(imports, []); +}); diff --git a/packages/node-resolve/test/only.js b/packages/node-resolve/test/only.js new file mode 100644 index 000000000..ada4d7606 --- /dev/null +++ b/packages/node-resolve/test/only.js @@ -0,0 +1,46 @@ +const { join } = require('path'); + +const test = require('ava'); +const { rollup } = require('rollup'); + +const { getImports } = require('../../../util/test'); + +const nodeResolve = require('..'); + +process.chdir(join(__dirname, 'fixtures')); + +test('specify the only packages to resolve', async (t) => { + const warnings = []; + const bundle = await rollup({ + input: 'only.js', + onwarn: (warning) => warnings.push(warning), + plugins: [ + nodeResolve({ + only: ['test'] + }) + ] + }); + const imports = await getImports(bundle); + + t.is(warnings.length, 2); + t.snapshot(warnings); + t.deepEqual(imports, ['@scoped/foo', '@scoped/bar']); +}); + +test('regex', async (t) => { + const warnings = []; + const bundle = await rollup({ + input: 'only.js', + onwarn: (warning) => warnings.push(warning), + plugins: [ + nodeResolve({ + only: [/^@scoped\/.*$/] + }) + ] + }); + const imports = await getImports(bundle); + + t.is(warnings.length, 1); + t.snapshot(warnings); + t.deepEqual(imports, ['test']); +}); diff --git a/packages/node-resolve/test/order.js b/packages/node-resolve/test/order.js new file mode 100644 index 000000000..2bd505822 --- /dev/null +++ b/packages/node-resolve/test/order.js @@ -0,0 +1,49 @@ +const { join } = require('path'); + +const test = require('ava'); +const { rollup } = require('rollup'); + +const { testBundle } = require('../../../util/test'); + +const nodeResolve = require('..'); + +process.chdir(join(__dirname, 'fixtures')); + +test('respects order if given module,jsnext:main,main', async (t) => { + const bundle = await rollup({ + input: 'prefer-module.js', + onwarn: () => t.fail('No warnings were expected'), + plugins: [nodeResolve({ mainFields: ['module', 'jsnext:main', 'main'], preferBuiltins: false })] + }); + const { module } = await testBundle(t, bundle); + t.is(module.exports, 'MODULE-ENTRY'); +}); + +test('finds and uses a dual-distributed .js & .mjs module', async (t) => { + const bundle = await rollup({ + input: 'dual-cjs-mjs.js', + onwarn: () => t.fail('No warnings were expected'), + plugins: [nodeResolve({ preferBuiltins: false })] + }); + const { module } = await testBundle(t, bundle); + t.is(module.exports, 'DUAL-MJS'); +}); + +test('keeps the order of [browser, module, jsnext, main] with all enabled', async (t) => { + const bundle = await rollup({ + input: 'browser.js', + plugins: [nodeResolve({ main: true, browser: true, jsnext: true, module: true })] + }); + const { module } = await testBundle(t, bundle); + t.is(module.exports, 'browser'); +}); + +test('respects order if given jsnext:main, main', async (t) => { + const bundle = await rollup({ + input: 'prefer-jsnext.js', + onwarn: () => t.fail('No warnings were expected'), + plugins: [nodeResolve({ mainFields: ['jsnext:main', 'main'], preferBuiltins: false })] + }); + const { module } = await testBundle(t, bundle); + t.is(module.exports, 'JSNEXT-ENTRY'); +}); diff --git a/packages/node-resolve/test/prefer-builtins.js b/packages/node-resolve/test/prefer-builtins.js new file mode 100644 index 000000000..3059a8973 --- /dev/null +++ b/packages/node-resolve/test/prefer-builtins.js @@ -0,0 +1,91 @@ +const { join, resolve } = require('path'); + +const test = require('ava'); +const { rollup } = require('rollup'); + +const { getImports, testBundle } = require('../../../util/test'); + +const nodeResolve = require('..'); + +process.chdir(join(__dirname, 'fixtures')); + +test('warns when importing builtins', async (t) => { + const warnings = []; + const bundle = await rollup({ + input: 'builtins.js', + onwarn: (warning) => warnings.push(warning), + plugins: [ + nodeResolve({ + mainFields: ['browser', 'main'], + preferBuiltins: true + }) + ] + }); + + const { module } = await testBundle(t, bundle); + + t.is(warnings.length, 1); + t.snapshot(warnings); + // eslint-disable-next-line global-require + t.is(module.exports, require('path').sep); +}); + +test('warning when preferring a builtin module, no explicit configuration', async (t) => { + let warning = null; + await rollup({ + input: 'prefer-builtin.js', + onwarn({ message }) { + // eslint-disable-next-line no-bitwise + if (~message.indexOf('preferring')) { + warning = message; + } + }, + plugins: [nodeResolve()] + }); + + const localPath = resolve('node_modules/events/index.js'); + t.is( + warning, + `preferring built-in module 'events' over local alternative ` + + `at '${localPath}', pass 'preferBuiltins: false' to disable this behavior ` + + `or 'preferBuiltins: true' to disable this warning` + ); +}); + +test('true allows preferring a builtin to a local module of the same name', async (t) => { + const warnings = []; + const bundle = await rollup({ + input: 'prefer-builtin.js', + onwarn: (warning) => warnings.push(warning), + plugins: [ + nodeResolve({ + preferBuiltins: true + }) + ] + }); + + const imports = await getImports(bundle); + + t.is(warnings.length, 1); + t.snapshot(warnings); + t.deepEqual(imports, ['events']); +}); + +test('false allows resolving a local module with the same name as a builtin module', async (t) => { + const warnings = []; + const bundle = await rollup({ + input: 'prefer-builtin.js', + onwarn: (warning) => warnings.push(warning), + plugins: [ + nodeResolve({ + preferBuiltins: false + }) + ] + }); + + const imports = await getImports(bundle); + + t.is(warnings.length, 1); + t.snapshot(warnings); + t.deepEqual(imports, []); +}); diff --git a/packages/node-resolve/test/snapshots/dedupe.js.md b/packages/node-resolve/test/snapshots/dedupe.js.md new file mode 100644 index 000000000..dd40dcaba --- /dev/null +++ b/packages/node-resolve/test/snapshots/dedupe.js.md @@ -0,0 +1,32 @@ +# Snapshot report for `test/dedupe.js` + +The actual snapshot is saved in `dedupe.js.snap`. + +Generated by [AVA](https://ava.li). + +## multiple module versions are bundled if dedupe is not set + +> Snapshot 1 + + { + React: 'react:root', + ReactConsumer: 'react-consumer:react:child', + } + +## single module version is bundled if dedupe is set + +> Snapshot 1 + + { + React: 'react:root', + ReactConsumer: 'react-consumer:react:root', + } + +## single module version is bundled if dedupe is set as a function + +> Snapshot 1 + + { + React: 'react:root', + ReactConsumer: 'react-consumer:react:root', + } diff --git a/packages/node-resolve/test/snapshots/dedupe.js.snap b/packages/node-resolve/test/snapshots/dedupe.js.snap new file mode 100644 index 0000000000000000000000000000000000000000..181097faa78be95a12e31ad6d0b977218f5a8051 GIT binary patch literal 238 zcmV$cpF literal 0 HcmV?d00001 diff --git a/packages/node-resolve/test/snapshots/jail.js.md b/packages/node-resolve/test/snapshots/jail.js.md new file mode 100644 index 000000000..ff9eee7dc --- /dev/null +++ b/packages/node-resolve/test/snapshots/jail.js.md @@ -0,0 +1,20 @@ +# Snapshot report for `test/jail.js` + +The actual snapshot is saved in `jail.js.snap`. + +Generated by [AVA](https://ava.li). + +## mark module outside the jail as external + +> Snapshot 1 + + [ + { + code: 'UNRESOLVED_IMPORT', + importer: 'jail.js', + message: '\'string/uppercase.js\' is imported by jail.js, but could not be resolved – treating it as an external dependency', + source: 'string/uppercase.js', + toString: Function {}, + url: 'https://rollupjs.org/guide/en/#warning-treating-module-as-external-dependency', + }, + ] diff --git a/packages/node-resolve/test/snapshots/jail.js.snap b/packages/node-resolve/test/snapshots/jail.js.snap new file mode 100644 index 0000000000000000000000000000000000000000..f2e90e743b5dc11bee535e4e5f74262632e9087f GIT binary patch literal 433 zcmV;i0Z#rwRzV~Ej2H1*+?6IkL1}_G02EOrrGI)i#QNGh3Qcpo9p`}s@ z!3u&rf}+u6*1$rLD?`@fK8>65`AN6c>l|OS_AZawr=9LuN?iy>5f_Sz_`)8NAZ!d} zN@tI#lw^N>HMV84eUC5)+2$t%<})hq$PVcyA_4 zd0AS7F>hZf70FH46+8@eG?Wc42JS!yK6NQ`*T+OK Snapshot 1 + + [ + { + code: 'UNRESOLVED_IMPORT', + importer: 'only.js', + message: '\'test\' is imported by only.js, but could not be resolved – treating it as an external dependency', + source: 'test', + toString: Function {}, + url: 'https://rollupjs.org/guide/en/#warning-treating-module-as-external-dependency', + }, + ] + +## specify the only packages to resolve + +> Snapshot 1 + + [ + { + code: 'UNRESOLVED_IMPORT', + importer: 'only.js', + message: '\'@scoped/foo\' is imported by only.js, but could not be resolved – treating it as an external dependency', + source: '@scoped/foo', + toString: Function {}, + url: 'https://rollupjs.org/guide/en/#warning-treating-module-as-external-dependency', + }, + { + code: 'UNRESOLVED_IMPORT', + importer: 'only.js', + message: '\'@scoped/bar\' is imported by only.js, but could not be resolved – treating it as an external dependency', + source: '@scoped/bar', + toString: Function {}, + url: 'https://rollupjs.org/guide/en/#warning-treating-module-as-external-dependency', + }, + ] diff --git a/packages/node-resolve/test/snapshots/only.js.snap b/packages/node-resolve/test/snapshots/only.js.snap new file mode 100644 index 0000000000000000000000000000000000000000..6245650f68d204481cf0e90c407a05d6843ba78c GIT binary patch literal 589 zcmV-T0%_{!!XGRx#XQC?3Kla|f zzyAEiWBKdR48q_$k^@+J`zrW&;Ngj{?>|Sq*IzDUy4x%O*x;m5SVa2}*`tI-!fq^7 zFn>}huaB5{rBVrS2G9bWMLe^SNZ#Fn#Q}%&hTM0A--P`n;0fUa;U^9`3w6KE1B2Gc zEtkt_YQqA!M7T$INjPQ$_=FqwL~3qx>Q2A{V2NU^J!k{wE0_yp$g@SId2V&NQ9pZe zdFjgOmGkx03lq`BsMD3oaFuO1QpElFww{P{I$Ue7H6o6xi#m{99=cbhtg=Y6AyLTu zJ{xk(F+VXZkVzaeAr136Q(VjVIz@fEwa$#akc_k Snapshot 1 + + [ + { + chunkName: 'prefer-builtin', + code: 'EMPTY_BUNDLE', + message: 'Generated an empty chunk: "prefer-builtin"', + 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 new file mode 100644 index 0000000000000000000000000000000000000000..509265fa31fd89b309629217ba5dd0ea989c1d2e GIT binary patch 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$ literal 0 HcmV?d00001 diff --git a/packages/node-resolve/test/snapshots/test.js.md b/packages/node-resolve/test/snapshots/test.js.md new file mode 100644 index 000000000..3ceff3dac --- /dev/null +++ b/packages/node-resolve/test/snapshots/test.js.md @@ -0,0 +1,41 @@ +# Snapshot report for `test/test.js` + +The actual snapshot is saved in `test.js.snap`. + +Generated by [AVA](https://ava.li). + +## handles package side-effects + +> Snapshot 1 + + [ + 'array-dep1', + 'array-dep3', + 'array-dep5', + 'array-index', + 'false-dep1', + 'true-dep1', + 'true-dep2', + 'true-index', + ] + +## ignores deep-import non-modules + +> Snapshot 1 + + [ + { + code: 'UNRESOLVED_IMPORT', + importer: 'deep-import-non-module.js', + message: '\'foo/deep\' is imported by deep-import-non-module.js, but could not be resolved – treating it as an external dependency', + source: 'foo/deep', + toString: Function {}, + url: 'https://rollupjs.org/guide/en/#warning-treating-module-as-external-dependency', + }, + ] + +## throws error if local id is not resolved + +> Snapshot 1 + + 'Could not resolve \'./foo\' from unresolved-local.js' diff --git a/packages/node-resolve/test/snapshots/test.js.snap b/packages/node-resolve/test/snapshots/test.js.snap new file mode 100644 index 0000000000000000000000000000000000000000..49dd00ca3a718fc3845284601a8dca3b15b7ceb2 GIT binary patch literal 618 zcmV-w0+sziRzV)-t4wCzrR#e;ydR4Q00000000Ap zQax-FF%>E%Qa3t|94E0Ab|nu1`8oI596bg_faM-x>@EQkS# zfey?dHiVcM%22_=#LU0|QV|U7?7U0jQ<|vaq)&eLKELmM&-NxE#3Dbom!91DL%#2y zuIanat=~Z6?-Ig3b$_@1PJjOS@yx58`j;LIvd>b4JU#j8#cJ?1y%4=U_I`JL8wS}A zR;-sD)I*vSp>jn=fk%bZRPj&-4>&EAou-r}+ElVbBQZ*Qb|76Al-prapM%sgt`)>_ z$P^)cSt-^BFi}3ACoo3<2+RXqG)37hTpuFdAb!O$&hr|v2P2_OwbACThEx(33Izg3 z31kT5aZl<5Sm?h9Gp_Ww`6=F7-&m9MbOk&aFylW4$ zwvfW^NG}RF4mnYo?eH*Ut)x}2gh%AW)g|hObfoLiMxP!kxl9|8rfzcH4Q`Iyqx+9` zs8*b5U$m&NDGMnRl=sl9U;%1&x$wAf`xCx0p^TK9*vc7K1Qq~Fc;N}7WlbwopAfJj z6_|MKp4Q#)g5xL|1W~sgmZfSrt;qMd!-cc7#gsq=+ZY{j)q581WLZhxms0izvW zGhAw#J8wA4aPvdX$1!_`oJk6sEC~65hH1miY84%%GE-E=P}xLrKn=S61FJt$z77Nc E08Jqy!2kdN literal 0 HcmV?d00001 diff --git a/packages/node-resolve/test/symlinks.js b/packages/node-resolve/test/symlinks.js new file mode 100644 index 000000000..50133362b --- /dev/null +++ b/packages/node-resolve/test/symlinks.js @@ -0,0 +1,65 @@ +const fs = require('fs'); +const { join } = require('path'); + +const test = require('ava'); +const { rollup } = require('rollup'); + +const { testBundle } = require('../../../util/test'); + +const nodeResolve = require('..'); + +process.chdir(join(__dirname, 'fixtures')); + +function createMissingDirectories() { + createDirectory('symlinked/first/node_modules'); + createDirectory('symlinked/second/node_modules'); + createDirectory('symlinked/third/node_modules'); +} + +function createDirectory(pathToDir) { + if (!fs.existsSync(pathToDir)) { + fs.mkdirSync(pathToDir); + } +} + +function linkDirectories() { + fs.symlinkSync('../../second', 'symlinked/first/node_modules/second', 'dir'); + fs.symlinkSync('../../third', 'symlinked/first/node_modules/third', 'dir'); + fs.symlinkSync('../../third', 'symlinked/second/node_modules/third', 'dir'); +} + +function unlinkDirectories() { + fs.unlinkSync('symlinked/first/node_modules/second'); + fs.unlinkSync('symlinked/first/node_modules/third'); + fs.unlinkSync('symlinked/second/node_modules/third'); +} + +test.beforeEach(() => { + createMissingDirectories(); + linkDirectories(); +}); + +test.afterEach(() => { + unlinkDirectories(); +}); + +test.serial('resolves symlinked packages', async (t) => { + const bundle = await rollup({ + input: 'symlinked/first/index.js', + onwarn: () => t.fail('No warnings were expected'), + plugins: [nodeResolve()] + }); + const { module } = await testBundle(t, bundle); + t.is(module.exports.number1, module.exports.number2); +}); + +test.serial('preserves symlinks if `preserveSymlinks` is true', async (t) => { + const bundle = await rollup({ + input: 'symlinked/first/index.js', + onwarn: () => t.fail('No warnings were expected'), + plugins: [nodeResolve()], + preserveSymlinks: true + }); + const { module } = await testBundle(t, bundle); + t.not(module.exports.number1, module.exports.number2); +}); diff --git a/packages/node-resolve/test/test.js b/packages/node-resolve/test/test.js new file mode 100755 index 000000000..c41deeee3 --- /dev/null +++ b/packages/node-resolve/test/test.js @@ -0,0 +1,222 @@ +const { join, resolve } = require('path'); + +const test = require('ava'); +const { rollup } = require('rollup'); +const babel = require('rollup-plugin-babel'); +const commonjs = require('rollup-plugin-commonjs'); + +const { getCode, getImports, testBundle } = require('../../../util/test'); + +const nodeResolve = require('..'); + +process.chdir(join(__dirname, 'fixtures')); + +test('finds a module with jsnext:main', async (t) => { + const bundle = await rollup({ + input: 'jsnext.js', + onwarn: () => t.fail('No warnings were expected'), + plugins: [nodeResolve({ mainFields: ['jsnext:main', 'module', 'main'] })] + }); + const { module } = await testBundle(t, bundle); + + t.is(module.exports, 'JSNEXT'); +}); + +test('finds and converts a basic CommonJS module', async (t) => { + const bundle = await rollup({ + input: 'commonjs.js', + onwarn: () => t.fail('No warnings were expected'), + plugins: [nodeResolve({ mainFields: ['main'] }), commonjs()] + }); + const { module } = await testBundle(t, bundle); + + t.is(module.exports, 'It works!'); +}); + +test('handles a trailing slash', async (t) => { + const bundle = await rollup({ + input: 'trailing-slash.js', + onwarn: () => t.fail('No warnings were expected'), + plugins: [nodeResolve({ mainFields: ['main'] }), commonjs()] + }); + const { module } = await testBundle(t, bundle); + + t.is(module.exports, 'It works!'); +}); + +test('finds a file inside a package directory', async (t) => { + const bundle = await rollup({ + input: 'granular.js', + onwarn: () => t.fail('No warnings were expected'), + plugins: [ + nodeResolve(), + babel({ + presets: [ + [ + '@babel/preset-env', + { + targets: { + node: 6 + } + } + ] + ] + }) + ] + }); + const { module } = await testBundle(t, bundle); + + t.is(module.exports, 'FOO'); +}); + +test('loads local directories by finding index.js within them', async (t) => { + const bundle = await rollup({ + input: 'local-index/main.js', + onwarn: () => t.fail('No warnings were expected'), + plugins: [nodeResolve()] + }); + const { module } = await testBundle(t, bundle); + + t.is(module.exports, 42); +}); + +test('loads package directories by finding index.js within them', async (t) => { + const bundle = await rollup({ + input: 'package-index.js', + onwarn: () => t.fail('No warnings were expected'), + plugins: [nodeResolve()] + }); + const code = await getCode(bundle); + + t.truthy(code.indexOf('setPrototypeOf')); +}); + +test('supports non-standard extensions', async (t) => { + const bundle = await rollup({ + input: 'extensions/main.js', + onwarn: () => t.fail('No warnings were expected'), + plugins: [ + nodeResolve({ + extensions: ['.js', '.wut'] + }) + ] + }); + await testBundle(t, bundle); +}); + +test('ignores IDs with null character', async (t) => { + const result = nodeResolve().resolveId('\0someid', 'test.js'); + t.is(result, null); +}); + +test('finds and uses an .mjs module', async (t) => { + const bundle = await rollup({ + input: 'module-mjs.js', + onwarn: () => t.fail('No warnings were expected'), + plugins: [nodeResolve({ preferBuiltins: false })] + }); + const { module } = await testBundle(t, bundle); + + t.is(module.exports, 'MODULE-MJS'); +}); + +test('supports ./ in entry filename', async (t) => { + const bundle = await rollup({ + input: './jsnext.js', + onwarn: () => t.fail('No warnings were expected'), + plugins: [nodeResolve({})] + }); + const { module } = await testBundle(t, bundle); + + t.is(module.exports, 'MAIN'); +}); + +test('throws error if local id is not resolved', async (t) => { + t.plan(1); + try { + await rollup({ + input: 'unresolved-local.js', + onwarn: () => t.fail('No warnings were expected'), + plugins: [nodeResolve()] + }); + } catch (e) { + t.snapshot(e.message); + } +}); + +test('allows custom options', async (t) => { + const bundle = await rollup({ + input: 'custom-resolve-options/main.js', + onwarn: () => t.fail('No warnings were expected'), + plugins: [ + nodeResolve({ + customResolveOptions: { + moduleDirectory: 'js_modules' + } + }) + ] + }); + + t.is(bundle.cache.modules[0].id, resolve('custom-resolve-options/js_modules/foo.js')); +}); + +test('ignores deep-import non-modules', async (t) => { + const warnings = []; + const bundle = await rollup({ + input: 'deep-import-non-module.js', + onwarn: (warning) => warnings.push(warning), + plugins: [ + nodeResolve({ + modulesOnly: true + }) + ] + }); + const imports = await getImports(bundle); + + t.is(warnings.length, 1); + t.snapshot(warnings); + t.deepEqual(imports, ['foo/deep']); +}); + +test('generates manual chunks', async (t) => { + const chunkName = 'mychunk'; + const bundle = await rollup({ + input: 'manualchunks.js', + onwarn: () => t.fail('No warnings were expected'), + manualChunks: { + [chunkName]: ['simple'] + }, + plugins: [nodeResolve()] + }); + + const { output } = await bundle.generate({ + format: 'esm', + chunkFileNames: '[name]' + }); + + t.truthy(output.find(({ fileName }) => fileName === chunkName)); +}); + +test('resolves dynamic imports', async (t) => { + const bundle = await rollup({ + input: 'dynamic.js', + onwarn: () => t.fail('No warnings were expected'), + inlineDynamicImports: true, + plugins: [nodeResolve()] + }); + const { module } = await testBundle(t, bundle); + const result = await module.exports; + t.is(result.default, 42); +}); + +test('handles package side-effects', async (t) => { + const bundle = await rollup({ + input: 'side-effects.js', + plugins: [nodeResolve()] + }); + await testBundle(t, bundle); + + t.snapshot(global.sideEffects); + + delete global.sideEffects; +}); diff --git a/packages/node-resolve/test/types.ts b/packages/node-resolve/test/types.ts new file mode 100755 index 000000000..1ca38f5b5 --- /dev/null +++ b/packages/node-resolve/test/types.ts @@ -0,0 +1,32 @@ +// @ts-check +import resolve from '..'; + +/** @type {import("rollup").RollupOptions} */ +const config = { + input: 'main.js', + output: { + file: 'bundle.js', + format: 'iife', + name: 'MyModule' + }, + plugins: [ + resolve({ + mainFields: ['untranspiled', 'module', 'main'], + module: true, + jsnext: true, + main: true, + browser: true, + extensions: ['.mjs', '.js', '.jsx', '.json'], + preferBuiltins: false, + jail: '/my/jail/path', + only: ['some_module', /^@some_scope\/.*$/], + dedupe: ['lodash'], + modulesOnly: true, + customResolveOptions: { + moduleDirectory: 'js_modules' + } + }) + ] +}; + +export default config; diff --git a/packages/node-resolve/types/index.d.ts b/packages/node-resolve/types/index.d.ts new file mode 100755 index 000000000..caf8aad09 --- /dev/null +++ b/packages/node-resolve/types/index.d.ts @@ -0,0 +1,100 @@ +import { Plugin } from 'rollup'; +import { AsyncOpts } from 'resolve'; + +export interface Options { + /** + * the fields to scan in a package.json to determine the entry point + * if this list contains "browser", overrides specified in "pkg.browser" + * will be used + * @default ['module', 'main'] + */ + mainFields?: ReadonlyArray; + + /** + * @deprecated use "mainFields" instead + * use "module" field for ES6 module if possible + * @default true + */ + module?: boolean; + + /** + * @deprecated use "mainFields" instead + * use "jsnext:main" if possible + * legacy field pointing to ES6 module in third-party libraries, + * deprecated in favor of "pkg.module": + * - see: https://github.com/rollup/rollup/wiki/pkg.module + * @default false + */ + jsnext?: boolean; + + /** + * @deprecated use "mainFields" instead + * use "main" field or index.js, even if it's not an ES6 module + * (needs to be converted from CommonJS to ES6) + * – see https://github.com/rollup/rollup-plugin-commonjs + * @default true + */ + main?: boolean; + + /** + * some package.json files have a "browser" field which specifies + * alternative files to load for people bundling for the browser. If + * that's you, either use this option or add "browser" to the + * "mainfields" option, otherwise pkg.browser will be ignored + * @default false + */ + browser?: boolean; + + /** + * not all files you want to resolve are .js files + * @default [ '.mjs', '.js', '.json', '.node' ] + */ + extensions?: ReadonlyArray; + + /** + * whether to prefer built-in modules (e.g. `fs`, `path`) or + * local ones with the same names + * @default true + */ + preferBuiltins?: boolean; + + /** + * Lock the module search in this path (like a chroot). Module defined + * outside this path will be marked as external + * @default '/' + */ + jail?: string; + + /** + * Set to an array of strings and/or regexps to lock the module search + * to modules that match at least one entry. Modules not matching any + * entry will be marked as external + * @default null + */ + only?: ReadonlyArray | null; + + /** + * If true, inspect resolved files to check that they are + * ES2015 modules + * @default false + */ + modulesOnly?: boolean; + + /** + * Force resolving for these modules to root's node_modules that helps + * to prevent bundling the same package multiple times if package is + * imported from dependencies. + */ + dedupe?: string[] | ((importee: string) => boolean); + + /** + * Any additional options that should be passed through + * to node-resolve + */ + customResolveOptions?: AsyncOpts; +} + +/** + * Locate modules using the Node resolution algorithm, for using third party modules in node_modules + */ +export default function nodeResolve(options?: Options): Plugin; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f28e4c51a..162fce423 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,8 +1,8 @@ importers: .: devDependencies: - '@typescript-eslint/eslint-plugin': 2.9.0_7d81ef8db268c0610d875f6201091ee0 - '@typescript-eslint/parser': 2.9.0_typescript@3.7.2 + '@typescript-eslint/eslint-plugin': 2.10.0_5e4c5b4b3611e7f57e1c4733830e94f0 + '@typescript-eslint/parser': 2.10.0_typescript@3.7.2 ava: 2.4.0 chalk: 2.4.2 codecov-lite: 0.3.1 @@ -11,13 +11,13 @@ importers: execa: 2.1.0 globby: 10.0.1 husky: 3.1.0 - lint-staged: 9.4.3 + lint-staged: 9.5.0 nyc: 14.1.1 pnpm: 4.3.3 prettier: 1.19.1 prettier-plugin-package: 0.3.1_prettier@1.19.1 - rollup: 1.27.5 - ts-node: 8.5.2_typescript@3.7.2 + rollup: 1.27.8 + ts-node: 8.5.4_typescript@3.7.2 tsconfig-paths: 3.9.0 tslib: 1.10.0 typescript: 3.7.2 @@ -49,7 +49,7 @@ importers: slash: 3.0.0 devDependencies: del-cli: 3.0.0 - rollup: 1.27.5 + rollup: 1.27.8 specifiers: del-cli: ^3.0.0 rollup: ^1.20.0 @@ -59,8 +59,8 @@ importers: node-noop: 1.0.0 devDependencies: del: 5.1.0 - rollup: 1.27.5 - rollup-plugin-node-resolve: 5.2.0_rollup@1.27.5 + rollup: 1.27.8 + rollup-plugin-node-resolve: 5.2.0_rollup@1.27.8 specifiers: del: ^5.1.0 node-noop: ^1.0.0 @@ -70,7 +70,7 @@ importers: specifiers: {} packages/beep: devDependencies: - rollup: 1.27.5 + rollup: 1.27.8 strip-ansi: 5.2.0 specifiers: rollup: ^1.20.0 @@ -82,7 +82,7 @@ importers: rollup-pluginutils: 2.8.2 devDependencies: del-cli: 3.0.0 - rollup: 1.27.5 + rollup: 1.27.8 source-map: 0.7.3 typescript: 3.7.2 specifiers: @@ -100,7 +100,7 @@ importers: tosource: 1.0.0 devDependencies: del-cli: 3.0.0 - rollup: 1.27.5 + rollup: 1.27.8 specifiers: d3-dsv: ^0.1.14 del-cli: ^3.0.0 @@ -109,7 +109,7 @@ importers: tosource: ^1.0.0 packages/html: devDependencies: - rollup: 1.27.5 + rollup: 1.27.8 rollup-plugin-postcss: 2.0.3 specifiers: rollup: ^1.27.5 @@ -118,7 +118,7 @@ importers: dependencies: rollup-pluginutils: 2.8.2 devDependencies: - rollup: 1.27.5 + rollup: 1.27.8 rollup-plugin-buble: 0.10.0 specifiers: rollup: ^1.20.0 @@ -132,7 +132,7 @@ importers: devDependencies: del-cli: 3.0.0 locate-character: 2.0.5 - rollup: 1.27.5 + rollup: 1.27.8 rollup-plugin-buble: 0.19.8 source-map: 0.7.3 typescript: 3.7.2 @@ -162,13 +162,47 @@ importers: specifiers: {} packages/legacy: devDependencies: - '@rollup/plugin-buble': 0.20.0_rollup@1.27.5 + '@rollup/plugin-buble': 0.20.0_rollup@1.27.8 del-cli: 3.0.0 - rollup: 1.27.5 + rollup: 1.27.8 specifiers: '@rollup/plugin-buble': ^0.20.0 del-cli: ^3.0.0 rollup: ^1.27.2 + packages/node-resolve: + dependencies: + '@rollup/pluginutils': 3.0.0_rollup@1.27.8 + '@types/resolve': 0.0.8 + builtin-modules: 3.1.0 + is-module: 1.0.0 + resolve: 1.13.1 + devDependencies: + '@babel/core': 7.7.4 + '@babel/preset-env': 7.7.4_@babel+core@7.7.4 + '@rollup/plugin-json': 4.0.0_rollup@1.27.8 + es5-ext: 0.10.53 + rollup: 1.27.8 + rollup-plugin-babel: 4.3.3_@babel+core@7.7.4+rollup@1.27.8 + rollup-plugin-commonjs: 10.1.0_rollup@1.27.8 + source-map: 0.7.3 + string-capitalize: 1.0.1 + specifiers: + '@babel/core': ^7.4.5 + '@babel/preset-env': ^7.4.5 + '@rollup/plugin-json': ^4.0.0 + '@rollup/pluginutils': ^3.0.0 + '@types/resolve': 0.0.8 + builtin-modules: ^3.1.0 + es5-ext: ^0.10.50 + is-module: ^1.0.0 + resolve: ^1.11.1 + rollup: ^1.20.0 + rollup-plugin-babel: ^4.3.2 + rollup-plugin-commonjs: ^10.0.0 + source-map: ^0.7.3 + string-capitalize: ^1.0.1 + packages/node-resolve/test/fixtures: + specifiers: {} packages/pluginutils: dependencies: estree-walker: 0.6.1 @@ -176,7 +210,7 @@ importers: '@types/estree': 0.0.39 '@types/jest': 24.0.23 '@types/micromatch': 3.1.1 - '@types/node': 12.12.12 + '@types/node': 12.12.14 micromatch: 4.0.2 rollup-plugin-commonjs: 10.1.0 rollup-plugin-node-resolve: 5.2.0 @@ -200,7 +234,7 @@ importers: devDependencies: del-cli: 3.0.0 locate-character: 2.0.5 - rollup: 1.27.5 + rollup: 1.27.8 rollup-plugin-buble: 0.19.8 source-map: 0.7.3 typescript: 3.7.2 @@ -216,7 +250,7 @@ importers: packages/run: devDependencies: del: 5.1.0 - rollup: 1.27.5 + rollup: 1.27.8 sinon: 7.5.0 specifiers: del: ^5.1.0 @@ -228,8 +262,8 @@ importers: magic-string: 0.25.4 rollup-pluginutils: 2.8.2 devDependencies: - acorn: 6.3.0 - rollup: 1.27.5 + acorn: 6.4.0 + rollup: 1.27.8 specifiers: acorn: ^6.0.2 estree-walker: ^0.6.0 @@ -247,8 +281,8 @@ importers: '@babel/register': 7.7.4_@babel+core@7.7.4 del: 5.1.0 globby: 10.0.1 - rollup: 1.27.5 - rollup-plugin-babel: 4.3.3_@babel+core@7.7.4+rollup@1.27.5 + rollup: 1.27.8 + rollup-plugin-babel: 4.3.3_@babel+core@7.7.4+rollup@1.27.8 specifiers: '@babel/core': ^7.7.4 '@babel/preset-env': ^7.7.4 @@ -262,15 +296,15 @@ importers: rollup-pluginutils: ^2.8.2 packages/virtual: devDependencies: - rollup: 1.27.5 - rollup-plugin-node-resolve: 5.2.0_rollup@1.27.5 + rollup: 1.27.8 + rollup-plugin-node-resolve: 5.2.0_rollup@1.27.8 specifiers: rollup: ^1.20.0 rollup-plugin-node-resolve: ^5.2.0 packages/wasm: devDependencies: del-cli: 3.0.0 - rollup: 1.27.5 + rollup: 1.27.8 source-map: 0.7.3 specifiers: del-cli: ^3.0.0 @@ -285,9 +319,9 @@ importers: '@babel/core': 7.7.4 '@babel/preset-env': 7.7.4_@babel+core@7.7.4 del-cli: 3.0.0 - rollup: 1.27.5 - rollup-plugin-babel: 4.3.3_@babel+core@7.7.4+rollup@1.27.5 - rollup-plugin-node-resolve: 5.2.0_rollup@1.27.5 + rollup: 1.27.8 + rollup-plugin-babel: 4.3.3_@babel+core@7.7.4+rollup@1.27.8 + rollup-plugin-node-resolve: 5.2.0_rollup@1.27.8 source-map-support: 0.5.16 specifiers: '@babel/core': ^7.7.2 @@ -350,7 +384,7 @@ packages: debug: 4.1.1 json5: 2.1.1 lodash: 4.17.15 - resolve: 1.12.2 + resolve: 1.13.1 semver: 5.7.1 source-map: 0.5.7 dev: true @@ -1008,8 +1042,8 @@ packages: '@babel/plugin-transform-typeof-symbol': 7.7.4_@babel+core@7.7.4 '@babel/plugin-transform-unicode-regex': 7.7.4_@babel+core@7.7.4 '@babel/types': 7.7.4 - browserslist: 4.7.3 - core-js-compat: 3.4.2 + browserslist: 4.8.0 + core-js-compat: 3.4.7 invariant: 2.2.4 js-levenshtein: 1.1.6 semver: 5.7.1 @@ -1109,10 +1143,10 @@ packages: node: '>= 8' resolution: integrity: sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ== - /@rollup/plugin-buble/0.20.0_rollup@1.27.5: + /@rollup/plugin-buble/0.20.0_rollup@1.27.8: dependencies: buble: 0.19.8 - rollup: 1.27.5 + rollup: 1.27.8 rollup-pluginutils: 2.8.2 typescript: 3.7.2 dev: true @@ -1120,6 +1154,26 @@ packages: rollup: ^1.20.0 resolution: integrity: sha512-3Qkoa3n+6NjQggLkN5R6ouVL3/jveyqjJjJXxbk04HEig/97YyOwoimWYIOC5vlQ60Z+xLhnAvGd6mM0gFY2wQ== + /@rollup/plugin-json/4.0.0_rollup@1.27.8: + dependencies: + rollup: 1.27.8 + rollup-pluginutils: 2.8.2 + dev: true + peerDependencies: + rollup: ^1.20.0 + resolution: + integrity: sha512-Z65CtEVWv40+ri4CvmswyhtuUtki9yP5p0UJN/GyCKKyU4jRuDS9CG0ZuV7/XuS7zGkoajyE7E4XBEaC4GW62A== + /@rollup/pluginutils/3.0.0_rollup@1.27.8: + dependencies: + estree-walker: 0.6.1 + rollup: 1.27.8 + dev: false + engines: + node: '>= 8.0.0' + peerDependencies: + rollup: ^1.20.0 + resolution: + integrity: sha512-qBbGQQaUUiId/lBU9VMeYlVLOoRNvz1fV8HWY5tiGDpI2gdPZHbmOfCjzSdXPhdq3XOfyWvXEBlIPbnM3+9ogQ== /@samverschueren/stream-to-observable/0.3.0: dependencies: any-observable: 0.3.0 @@ -1190,7 +1244,6 @@ packages: resolution: integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== /@types/estree/0.0.40: - dev: true resolution: integrity: sha512-p3KZgMto/JyxosKGmnLDJ/dG5wf+qTRMUjHJcspC2oQKa4jP7mz+tv0ND56lLBu3ojHlhzY33Ol+khLyNmilkA== /@types/events/3.0.0: @@ -1246,12 +1299,7 @@ packages: dev: true resolution: integrity: sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== - /@types/node/12.12.12: - dev: true - resolution: - integrity: sha512-MGuvYJrPU0HUwqF7LqvIj50RZUX23Z+m583KBygKYUZLlZ88n6w28XRNJRJgsHukLEnLz6w6SvxZoLgbr5wLqQ== /@types/node/12.12.14: - dev: true resolution: integrity: sha512-u/SJDyXwuihpwjXy7hOOghagLEV1KdAST6syfnOk6QZAMzZuWZqXy5aYYZbh8Jdpd4escVFP0MvftHNDb9pruA== /@types/normalize-package-data/2.4.0: @@ -1264,8 +1312,7 @@ packages: integrity: sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw== /@types/resolve/0.0.8: dependencies: - '@types/node': 12.12.12 - dev: true + '@types/node': 12.12.14 resolution: integrity: sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ== /@types/yargs-parser/13.1.0: @@ -1278,10 +1325,10 @@ packages: dev: true resolution: integrity: sha512-K8/LfZq2duW33XW/tFwEAfnZlqIfVsoyRB3kfXdPXYhl0nfM8mmh7GS0jg7WrX2Dgq/0Ha/pR1PaR+BvmWwjiQ== - /@typescript-eslint/eslint-plugin/2.9.0_7d81ef8db268c0610d875f6201091ee0: + /@typescript-eslint/eslint-plugin/2.10.0_5e4c5b4b3611e7f57e1c4733830e94f0: dependencies: - '@typescript-eslint/experimental-utils': 2.9.0_typescript@3.7.2 - '@typescript-eslint/parser': 2.9.0_typescript@3.7.2 + '@typescript-eslint/experimental-utils': 2.10.0_typescript@3.7.2 + '@typescript-eslint/parser': 2.10.0_typescript@3.7.2 eslint-utils: 1.4.3 functional-red-black-tree: 1.0.1 regexpp: 3.0.0 @@ -1298,11 +1345,11 @@ packages: typescript: optional: true resolution: - integrity: sha512-98rfOt3NYn5Gr9wekTB8TexxN6oM8ZRvYuphPs1Atfsy419SDLYCaE30aJkRiiTCwGEY98vOhFsEVm7Zs4toQQ== - /@typescript-eslint/experimental-utils/2.9.0_typescript@3.7.2: + integrity: sha512-rT51fNLW0u3fnDGnAHVC5nu+Das+y2CpW10yqvf6/j5xbuUV3FxA3mBaIbM24CXODXjbgUznNb4Kg9XZOUxKAw== + /@typescript-eslint/experimental-utils/2.10.0_typescript@3.7.2: dependencies: '@types/json-schema': 7.0.3 - '@typescript-eslint/typescript-estree': 2.9.0_typescript@3.7.2 + '@typescript-eslint/typescript-estree': 2.10.0_typescript@3.7.2 eslint-scope: 5.0.0 dev: true engines: @@ -1311,12 +1358,12 @@ packages: eslint: '*' typescript: '*' resolution: - integrity: sha512-0lOLFdpdJsCMqMSZT7l7W2ta0+GX8A3iefG3FovJjrX+QR8y6htFlFdU7aOVPL6pDvt6XcsOb8fxk5sq+girTw== - /@typescript-eslint/parser/2.9.0_typescript@3.7.2: + integrity: sha512-FZhWq6hWWZBP76aZ7bkrfzTMP31CCefVIImrwP3giPLcoXocmLTmr92NLZxuIcTL4GTEOE33jQMWy9PwelL+yQ== + /@typescript-eslint/parser/2.10.0_typescript@3.7.2: dependencies: '@types/eslint-visitor-keys': 1.0.0 - '@typescript-eslint/experimental-utils': 2.9.0_typescript@3.7.2 - '@typescript-eslint/typescript-estree': 2.9.0_typescript@3.7.2 + '@typescript-eslint/experimental-utils': 2.10.0_typescript@3.7.2 + '@typescript-eslint/typescript-estree': 2.10.0_typescript@3.7.2 eslint-visitor-keys: 1.1.0 dev: true engines: @@ -1325,8 +1372,8 @@ packages: eslint: ^5.0.0 || ^6.0.0 typescript: '*' resolution: - integrity: sha512-fJ+dNs3CCvEsJK2/Vg5c2ZjuQ860ySOAsodDPwBaVlrGvRN+iCNC8kUfLFL8cT49W4GSiLPa/bHiMjYXA7EhKQ== - /@typescript-eslint/typescript-estree/2.9.0_typescript@3.7.2: + integrity: sha512-wQNiBokcP5ZsTuB+i4BlmVWq6o+oAhd8en2eSm/EE9m7BgZUIfEeYFd6z3S+T7bgNuloeiHA1/cevvbBDLr98g== + /@typescript-eslint/typescript-estree/2.10.0_typescript@3.7.2: dependencies: debug: 4.1.1 eslint-visitor-keys: 1.1.0 @@ -1345,7 +1392,7 @@ packages: typescript: optional: true resolution: - integrity: sha512-v6btSPXEWCP594eZbM+JCXuFoXWXyF/z8kaSBSdCb83DF+Y7+xItW29SsKtSULgLemqJBT+LpT+0ZqdfH7QVmA== + integrity: sha512-oOYnplddQNm/LGVkqbkAwx4TIBuuZ36cAQq9v3nFIU9FmhemHuVzAesMSXNQDdAzCa5bFgCrfD3JWhYVKlRN2g== /acorn-dynamic-import/4.0.0_acorn@6.4.0: dependencies: acorn: 6.4.0 @@ -1387,13 +1434,6 @@ packages: hasBin: true resolution: integrity: sha1-ReN/s56No/JbruP/U2niu18iAXo= - /acorn/6.3.0: - dev: true - engines: - node: '>=0.4.0' - hasBin: true - resolution: - integrity: sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA== /acorn/6.4.0: engines: node: '>=0.4.0' @@ -1401,7 +1441,6 @@ packages: resolution: integrity: sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw== /acorn/7.1.0: - dev: true engines: node: '>=0.4.0' hasBin: true @@ -1613,7 +1652,7 @@ packages: array-union: 2.1.0 array-uniq: 2.1.0 arrify: 2.0.1 - bluebird: 3.7.1 + bluebird: 3.7.2 chalk: 2.4.2 chokidar: 3.3.0 chunkd: 1.0.0 @@ -1713,10 +1752,10 @@ packages: node: '>=8' resolution: integrity: sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow== - /bluebird/3.7.1: + /bluebird/3.7.2: dev: true resolution: - integrity: sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg== + integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== /blueimp-md5/2.12.0: dev: true resolution: @@ -1755,15 +1794,15 @@ packages: node: '>=8' resolution: integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - /browserslist/4.7.3: + /browserslist/4.8.0: dependencies: - caniuse-lite: 1.0.30001012 - electron-to-chromium: 1.3.314 + caniuse-lite: 1.0.30001013 + electron-to-chromium: 1.3.322 node-releases: 1.1.41 dev: true hasBin: true resolution: - integrity: sha512-jWvmhqYpx+9EZm/FxcZSbUZyDEvDTLDi3nSAKbzEkyWvtI0mNSmUosey+5awDW1RUlrgXbQb5A6qY1xQH9U6MQ== + integrity: sha512-HYnxc/oLRWvJ3TsGegR0SRL/UDnknGq2s/a8dYYEO+kOQ9m9apKoS5oiathLKZdh/e9uE+/J3j92qPlGD/vTqA== /buble/0.10.7: dependencies: acorn: 3.3.0 @@ -1794,7 +1833,6 @@ packages: resolution: integrity: sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== /builtin-modules/3.1.0: - dev: true engines: node: '>=6' resolution: @@ -1891,17 +1929,17 @@ packages: integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== /caniuse-api/3.0.0: dependencies: - browserslist: 4.7.3 - caniuse-lite: 1.0.30001012 + browserslist: 4.8.0 + caniuse-lite: 1.0.30001013 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 dev: true resolution: integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== - /caniuse-lite/1.0.30001012: + /caniuse-lite/1.0.30001013: dev: true resolution: - integrity: sha512-7RR4Uh04t9K1uYRWzOJmzplgEOAXbfK72oVNokCdMzA67trrhPzy93ahKk1AWHiA0c58tD2P+NHqxrA8FZ+Trg== + integrity: sha512-hOAXaWKuq/UVFgYawxIOdPdyMQdYcwOCDOjnZcKn7wCgFUrhP7smuNZjGLuJlPSgE6aRA4cRJ+bGSrhtEt7ZAg== /chalk/1.1.3: dependencies: ansi-styles: 2.2.1 @@ -2175,13 +2213,13 @@ packages: node: '>= 4' resolution: integrity: sha1-fj5Iu+bZl7FBfdyihoIEtNPYVxU= - /core-js-compat/3.4.2: + /core-js-compat/3.4.7: dependencies: - browserslist: 4.7.3 + browserslist: 4.8.0 semver: 6.3.0 dev: true resolution: - integrity: sha512-W0Aj+LM3EAxxjD0Kp2o4be8UlnxIZHNupBv2znqrheR4aY2nOn91794k/xoSp+SxqqriiZpTsSwBtZr60cbkwQ== + integrity: sha512-57+mgz/P/xsGdjwQYkwtBZR3LuISaxD1dEwVDtbk8xJMqAmwqaxLOvnNT7kdJ7jYE/NjNptyzXi+IQFMi/2fCw== /core-js/2.6.10: deprecated: 'core-js@<3.0 is no longer maintained and not recommended for usage due to the number of issues. Please, upgrade your dependencies to the actual version of core-js@3.' dev: true @@ -2420,6 +2458,13 @@ packages: node: '>=0.10.0' resolution: integrity: sha1-mI3zP+qxke95mmE2nddsF635V+o= + /d/1.0.1: + dependencies: + es5-ext: 0.10.53 + type: 1.2.0 + dev: true + resolution: + integrity: sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== /d3-dsv/0.1.14: dev: false hasBin: true @@ -2647,10 +2692,10 @@ packages: dev: true resolution: integrity: sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= - /electron-to-chromium/1.3.314: + /electron-to-chromium/1.3.322: dev: true resolution: - integrity: sha512-IKDR/xCxKFhPts7h+VaSXS02Z1mznP3fli1BbXWXeN89i2gCzKraU8qLpEid8YzKcmZdZD3Mly3cn5/lY9xsBQ== + integrity: sha512-Tc8JQEfGQ1MzfSzI/bTlSr7btJv/FFO7Yh6tanqVmIWOuNCu6/D1MilIEgLtmWqIrsv+o4IjpLAhgMBr/ncNAA== /elegant-spinner/1.0.1: dev: true engines: @@ -2733,10 +2778,33 @@ packages: node: '>= 0.4' resolution: integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + /es5-ext/0.10.53: + dependencies: + es6-iterator: 2.0.3 + es6-symbol: 3.1.3 + next-tick: 1.0.0 + dev: true + resolution: + integrity: sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== /es6-error/4.1.1: dev: true resolution: integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== + /es6-iterator/2.0.3: + dependencies: + d: 1.0.1 + es5-ext: 0.10.53 + es6-symbol: 3.1.3 + dev: true + resolution: + integrity: sha1-p96IkUGgWpSwhUQDstCg+/qY87c= + /es6-symbol/3.1.3: + dependencies: + d: 1.0.1 + ext: 1.4.0 + dev: true + resolution: + integrity: sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== /escape-string-regexp/1.0.5: engines: node: '>=0.8.0' @@ -2750,9 +2818,9 @@ packages: integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== /eslint-config-rollup/0.1.0: dependencies: - eslint: 6.7.1 - eslint-plugin-import: 2.18.2_eslint@6.7.1 - eslint-plugin-prettier: 3.1.1_eslint@6.7.1+prettier@1.19.1 + eslint: 6.7.2 + eslint-plugin-import: 2.18.2_eslint@6.7.2 + eslint-plugin-prettier: 3.1.1_eslint@6.7.2+prettier@1.19.1 prettier: 1.19.1 dev: true engines: @@ -2775,13 +2843,13 @@ packages: node: '>=4' resolution: integrity: sha512-H6DOj+ejw7Tesdgbfs4jeS4YMFrT8uI8xwd1gtQqXssaR0EQ26L+2O/w6wkYFy2MymON0fTwHmXBvvfLNZVZEw== - /eslint-plugin-import/2.18.2_eslint@6.7.1: + /eslint-plugin-import/2.18.2_eslint@6.7.2: dependencies: array-includes: 3.0.3 contains-path: 0.1.0 debug: 2.6.9 doctrine: 1.5.0 - eslint: 6.7.1 + eslint: 6.7.2 eslint-import-resolver-node: 0.3.2 eslint-module-utils: 2.4.1 has: 1.0.3 @@ -2796,9 +2864,9 @@ packages: eslint: 2.x - 6.x resolution: integrity: sha512-5ohpsHAiUBRNaBWAF08izwUGlbrJoJJ+W9/TBwsGoR1MnlgfwMIKrFeSjWbt6moabiXW9xNvtFz+97KHRfI4HQ== - /eslint-plugin-prettier/3.1.1_eslint@6.7.1+prettier@1.19.1: + /eslint-plugin-prettier/3.1.1_eslint@6.7.2+prettier@1.19.1: dependencies: - eslint: 6.7.1 + eslint: 6.7.2 prettier: 1.19.1 prettier-linter-helpers: 1.0.0 dev: true @@ -2832,7 +2900,7 @@ packages: node: '>=4' resolution: integrity: sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== - /eslint/6.7.1: + /eslint/6.7.2: dependencies: '@babel/code-frame': 7.5.5 ajv: 6.10.2 @@ -2876,7 +2944,7 @@ packages: node: ^8.10.0 || ^10.13.0 || >=11.10.1 hasBin: true resolution: - integrity: sha512-UWzBS79pNcsDSxgxbdjkmzn/B6BhsXMfUaOHnNwyE8nD+Q6pyT96ow2MccVayUTV4yMid4qLhMiQaywctRkBLA== + integrity: sha512-qMlSWJaCSxDFr8fBPvJM9kJwbazrhNcBU3+DszDW1OlEwKBBRWsJc7NJFelvwQpanHCR14cOLD41x8Eqvo3Nng== /esm/3.2.25: dev: true engines: @@ -2997,6 +3065,12 @@ packages: node: ^8.12.0 || >=9.7.0 resolution: integrity: sha512-Y/URAVapfbYy2Xp/gb6A0E7iR8xeqOCXsuuaoMn7A5PzrXUK84E1gyiEfq0wQd/GHA6GsoHWwhNq8anb0mleIw== + /ext/1.4.0: + dependencies: + type: 2.0.0 + dev: true + resolution: + integrity: sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A== /external-editor/3.1.0: dependencies: chardet: 0.7.0 @@ -3015,7 +3089,7 @@ packages: dev: true resolution: integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== - /fast-glob/3.1.0: + /fast-glob/3.1.1: dependencies: '@nodelib/fs.stat': 2.0.3 '@nodelib/fs.walk': 1.2.4 @@ -3026,7 +3100,7 @@ packages: engines: node: '>=8' resolution: - integrity: sha512-TrUz3THiq2Vy3bjfQUB2wNyPdGBeGmdjbzzBLhfHN4YFurYptCKwGq/TfiRavbGywFRzY6U2CdmQ1zmsY5yYaw== + integrity: sha512-nTCREpBY8w8r+boyFYAx21iL6faSsQynliPHM4Uf56SbkyohCNxpVPEH9xrF5TXKy+IsjkPUHDKiUkzBVRXn9g== /fast-json-stable-stringify/2.0.0: dev: true resolution: @@ -3259,7 +3333,7 @@ packages: '@types/glob': 7.1.1 array-union: 2.1.0 dir-glob: 3.0.1 - fast-glob: 3.1.0 + fast-glob: 3.1.1 glob: 7.1.6 ignore: 5.1.4 merge2: 1.3.0 @@ -3313,7 +3387,7 @@ packages: node: '>=0.4.7' hasBin: true optionalDependencies: - uglify-js: 3.7.0 + uglify-js: 3.7.1 resolution: integrity: sha512-3yPecJoJHK/4c6aZhSvxOyG4vJKDshV36VHp0iVCDVh7o9w2vwi3NSnL2MMPj3YdduqaBcu7cGbggJQM0br9xA== /has-ansi/2.0.0: @@ -3681,7 +3755,6 @@ packages: resolution: integrity: sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA= /is-module/1.0.0: - dev: true resolution: integrity: sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= /is-npm/3.0.0: @@ -4039,7 +4112,7 @@ packages: dev: true resolution: integrity: sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= - /lint-staged/9.4.3: + /lint-staged/9.5.0: dependencies: chalk: 2.4.2 commander: 2.20.3 @@ -4058,7 +4131,7 @@ packages: dev: true hasBin: true resolution: - integrity: sha512-PejnI+rwOAmKAIO+5UuAZU9gxdej/ovSEOAY34yMfC3OS4Ac82vCBPzAWLReR9zCPOMqeVwQRaZ3bUBpAsaL2Q== + integrity: sha512-nawMob9cb/G1J98nb8v3VC/E8rcX1rryUYXVZ69aT9kde6YWX+uvNOEHY5yf2gcWcTJGiD0kqXmCnS3oD75GIA== /listr-silent-renderer/1.1.1: dev: true engines: @@ -4509,6 +4582,10 @@ packages: dev: true resolution: integrity: sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug== + /next-tick/1.0.0: + dev: true + resolution: + integrity: sha1-yobR/ogoFpsBICCOPchCS524NCw= /nice-try/1.0.5: dev: true resolution: @@ -4967,7 +5044,6 @@ packages: resolution: integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== /path-parse/1.0.6: - dev: true resolution: integrity: sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== /path-to-regexp/1.8.0: @@ -5109,7 +5185,7 @@ packages: integrity: sha512-oXqx0m6tb4N3JGdmeMSc/i91KppbYsFZKdH0xMOqK8V1rJlzrKlTdokz8ozUXLVejydRN6u2IddxpcijRj2FqQ== /postcss-colormin/4.0.3: dependencies: - browserslist: 4.7.3 + browserslist: 4.8.0 color: 3.1.2 has: 1.0.3 postcss: 7.0.23 @@ -5182,7 +5258,7 @@ packages: integrity: sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw== /postcss-merge-rules/4.0.3: dependencies: - browserslist: 4.7.3 + browserslist: 4.8.0 caniuse-api: 3.0.0 cssnano-util-same-parent: 4.0.1 postcss: 7.0.23 @@ -5216,7 +5292,7 @@ packages: /postcss-minify-params/4.0.2: dependencies: alphanum-sort: 1.0.2 - browserslist: 4.7.3 + browserslist: 4.8.0 cssnano-util-get-arguments: 4.0.0 postcss: 7.0.23 postcss-value-parser: 3.3.1 @@ -5336,7 +5412,7 @@ packages: integrity: sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A== /postcss-normalize-unicode/4.0.1: dependencies: - browserslist: 4.7.3 + browserslist: 4.8.0 postcss: 7.0.23 postcss-value-parser: 3.3.1 dev: true @@ -5376,7 +5452,7 @@ packages: integrity: sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw== /postcss-reduce-initial/4.0.3: dependencies: - browserslist: 4.7.3 + browserslist: 4.8.0 caniuse-api: 3.0.0 has: 1.0.3 postcss: 7.0.23 @@ -5805,16 +5881,9 @@ packages: node: '>=8' resolution: integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - /resolve/1.12.2: - dependencies: - path-parse: 1.0.6 - dev: true - resolution: - integrity: sha512-cAVTI2VLHWYsGOirfeYVVQ7ZDejtQ9fp4YhYckWDEkFfqbVjaT11iM8k6xSAfGFMM+gDpZjMnFssPu8we+mqFw== /resolve/1.13.1: dependencies: path-parse: 1.0.6 - dev: true resolution: integrity: sha512-CxqObCX8K8YtAhOBRg+lrcdn+LK+WYOS8tSjqSFbjtrI5PnS63QPhZl4+yKfrU9tdsbMu9Anr/amegT87M9Z6w== /responselike/1.0.2: @@ -5877,11 +5946,11 @@ packages: hasBin: true resolution: integrity: sha512-NDGVxTsjqfunkds7CqsOiEnxln4Bo7Nddl3XhS4pXg5OzwkLqJ971ZVAAnB+DDLnF76N+VnDEiBHaVV8I06SUg== - /rollup-plugin-babel/4.3.3_@babel+core@7.7.4+rollup@1.27.5: + /rollup-plugin-babel/4.3.3_@babel+core@7.7.4+rollup@1.27.8: dependencies: '@babel/core': 7.7.4 '@babel/helper-module-imports': 7.7.4 - rollup: 1.27.5 + rollup: 1.27.8 rollup-pluginutils: 2.8.2 dev: true peerDependencies: @@ -5908,7 +5977,20 @@ packages: estree-walker: 0.6.1 is-reference: 1.1.4 magic-string: 0.25.4 - resolve: 1.12.2 + resolve: 1.13.1 + rollup-pluginutils: 2.8.2 + dev: true + peerDependencies: + rollup: '>=1.12.0' + resolution: + integrity: sha512-jlXbjZSQg8EIeAAvepNwhJj++qJWNJw1Cl0YnOqKtP5Djx+fFGkp3WRh+W0ASCaFG5w1jhmzDxgu3SJuVxPF4Q== + /rollup-plugin-commonjs/10.1.0_rollup@1.27.8: + dependencies: + estree-walker: 0.6.1 + is-reference: 1.1.4 + magic-string: 0.25.4 + resolve: 1.13.1 + rollup: 1.27.8 rollup-pluginutils: 2.8.2 dev: true peerDependencies: @@ -5920,20 +6002,20 @@ packages: '@types/resolve': 0.0.8 builtin-modules: 3.1.0 is-module: 1.0.0 - resolve: 1.12.2 + resolve: 1.13.1 rollup-pluginutils: 2.8.2 dev: true peerDependencies: rollup: '>=1.11.0' resolution: integrity: sha512-jUlyaDXts7TW2CqQ4GaO5VJ4PwwaV8VUGA7+km3n6k6xtOEacf61u0VXwN80phY/evMcaS+9eIeJ9MOyDxt5Zw== - /rollup-plugin-node-resolve/5.2.0_rollup@1.27.5: + /rollup-plugin-node-resolve/5.2.0_rollup@1.27.8: dependencies: '@types/resolve': 0.0.8 builtin-modules: 3.1.0 is-module: 1.0.0 - resolve: 1.12.2 - rollup: 1.27.5 + resolve: 1.13.1 + rollup: 1.27.8 rollup-pluginutils: 2.8.2 dev: true peerDependencies: @@ -5963,7 +6045,7 @@ packages: integrity: sha512-d12oKl6za/GGXmlytzVPzzTdPCKgti/Kq2kNhtfm5vv9hkNbyrTvizMBm6zZ5rRWX/sIWl3znjIJ8xy6Hofoeg== /rollup-plugin-typescript/1.0.1_typescript@3.7.2: dependencies: - resolve: 1.12.2 + resolve: 1.13.1 rollup-pluginutils: 2.8.2 typescript: 3.7.2 dev: true @@ -5984,15 +6066,14 @@ packages: estree-walker: 0.6.1 resolution: integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== - /rollup/1.27.5: + /rollup/1.27.8: dependencies: '@types/estree': 0.0.40 '@types/node': 12.12.14 acorn: 7.1.0 - dev: true hasBin: true resolution: - integrity: sha512-8rfVdzuTg2kt8ObD9LNJpEwUN7B6lsl3sHc5fddtgICpLjpYeSf4m2+RftBzcCaBTMi1iYX3Ez8zFT4Gj2nJjg== + integrity: sha512-EVoEV5rAWl+5clnGznt1KY8PeVkzVQh/R0d2s3gHEkN7gfoyC4JmvIVuCtPbYE8NM5Ep/g+nAmvKXBjzaqTsHA== /run-async/2.3.0: dependencies: is-promise: 2.1.0 @@ -6218,6 +6299,10 @@ packages: node: '>=0.6.19' resolution: integrity: sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== + /string-capitalize/1.0.1: + dev: true + resolution: + integrity: sha1-qGZfdzYbTOBKa95tm7shcSu5dJ4= /string-hash/1.1.3: dev: true resolution: @@ -6371,7 +6456,7 @@ packages: integrity: sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw== /stylehacks/4.0.3: dependencies: - browserslist: 4.7.3 + browserslist: 4.8.0 postcss: 7.0.23 postcss-selector-parser: 3.1.1 dev: true @@ -6555,7 +6640,7 @@ packages: node: '>=0.10.0' resolution: integrity: sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= - /ts-node/8.5.2_typescript@3.7.2: + /ts-node/8.5.4_typescript@3.7.2: dependencies: arg: 4.1.2 diff: 4.0.1 @@ -6570,7 +6655,7 @@ packages: peerDependencies: typescript: '>=2.0' resolution: - integrity: sha512-W1DK/a6BGoV/D4x/SXXm6TSQx6q3blECUzd5TN+j56YEMX3yPVMpHsICLedUw3DvGF3aTQ8hfdR9AKMaHjIi+A== + integrity: sha512-izbVCRV68EasEPQ8MSIGBNK9dc/4sYJJKYA+IarMQct1RtEot6Xp0bXuClsbUSnKpg50ho+aOAx8en5c+y4OFw== /tsconfig-paths/3.9.0: dependencies: '@types/json5': 0.0.29 @@ -6627,6 +6712,14 @@ packages: node: '>=8' resolution: integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + /type/1.2.0: + dev: true + resolution: + integrity: sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== + /type/2.0.0: + dev: true + resolution: + integrity: sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow== /typedarray-to-buffer/3.1.5: dependencies: is-typedarray: 1.0.0 @@ -6640,7 +6733,7 @@ packages: hasBin: true resolution: integrity: sha512-ml7V7JfiN2Xwvcer+XAf2csGO1bPBdRbFCkYBczNZggrBZ9c7G3riSUeJmqEU5uOtXNPMhE3n+R4FA/3YOAWOQ== - /uglify-js/3.7.0: + /uglify-js/3.7.1: dependencies: commander: 2.20.3 source-map: 0.6.1 @@ -6650,7 +6743,7 @@ packages: hasBin: true optional: true resolution: - integrity: sha512-PC/ee458NEMITe1OufAjal65i6lB58R1HWMRcxwvdz1UopW0DYqlRL3xdu3IcTvTXsB02CRHykidkTRL+A3hQA== + integrity: sha512-pnOF7jY82wdIhATVn87uUY/FHU+MDUdPLkmGFvGoclQmeu229eTkbG5gjGGBi3R7UuYYSEeYXY/TTY5j2aym2g== /uid2/0.0.3: dev: true resolution: diff --git a/util/test.js b/util/test.js index a0612f108..564892374 100644 --- a/util/test.js +++ b/util/test.js @@ -10,17 +10,39 @@ const getCode = async (bundle, outputOptions, allFiles = false) => { return code; }; +const getImports = async (bundle) => { + if (bundle.imports) { + return bundle.imports; + } + const { output } = await bundle.generate({ format: 'esm' }); + const [{ imports }] = output; + return imports; +}; + const testBundle = async (t, bundle, args = {}) => { const { output } = await bundle.generate({ format: 'cjs' }); const [{ code }] = output; - const params = Object.keys(args).concat('t', `let result;\n\n${code}\n\nreturn result;`); + const module = { exports: {} }; + const params = ['module', 'exports', 'require', 't', ...Object.keys(args)].concat( + `process.chdir('${process.cwd()}'); let result;\n\n${code}\n\nreturn result;` + ); + // eslint-disable-next-line no-new-func const func = new Function(...params); + let error; + let result; + + try { + result = func(...[module, module.exports, require, t, ...Object.values(args)]); + } catch (e) { + error = e; + } - return { code, result: func(...[t, ...Object.values(args)]) }; + return { code, error, module, result }; }; module.exports = { getCode, + getImports, testBundle };