From 6e33b20ca2d6b6199776f067bad55dd4c89fad29 Mon Sep 17 00:00:00 2001 From: Daniel Cohen Gindi Date: Wed, 1 Sep 2021 19:56:49 +0300 Subject: [PATCH] fix(commonjs): node_modules lookup depth limit to avoid infinite loops --- packages/commonjs/README.md | 8 + packages/commonjs/src/helpers.js | 19 +- packages/commonjs/src/index.js | 7 +- .../dynamic-require-alias-hack/_config.js | 9 + .../dynamic-require-alias-hack/main.js | 9 + .../dynamic-require-alias-hack/stub.js | 0 .../commonjs/test/snapshots/function.js.md | 343 +++++++++++++----- .../commonjs/test/snapshots/function.js.snap | Bin 18946 -> 19256 bytes packages/commonjs/types/index.d.ts | 6 + 9 files changed, 297 insertions(+), 104 deletions(-) create mode 100755 packages/commonjs/test/fixtures/function/dynamic-require-alias-hack/_config.js create mode 100755 packages/commonjs/test/fixtures/function/dynamic-require-alias-hack/main.js create mode 100755 packages/commonjs/test/fixtures/function/dynamic-require-alias-hack/stub.js diff --git a/packages/commonjs/README.md b/packages/commonjs/README.md index 31b1f1e6d..98f646e6f 100644 --- a/packages/commonjs/README.md +++ b/packages/commonjs/README.md @@ -345,6 +345,14 @@ For these situations, you can change Rollup's behaviour either globally or per m To change this for individual modules, you can supply a function for `requireReturnsDefault` instead. This function will then be called once for each required ES module or external dependency with the corresponding id and allows you to return different values for different modules. +### nodeModulesLookupDepth + +Type: `number`
+Default: `15` + +Max depth for `node_modules` lookup algorithm in the virtual `require` realm. +This is here for safety, in case of a dynamic require to something that does not exist. + ## Using with @rollup/plugin-node-resolve Since most CommonJS packages you are importing are probably dependencies in `node_modules`, you may need to use [@rollup/plugin-node-resolve](https://github.com/rollup/plugins/tree/master/packages/node-resolve): diff --git a/packages/commonjs/src/helpers.js b/packages/commonjs/src/helpers.js index fa13894d0..19f2b203f 100644 --- a/packages/commonjs/src/helpers.js +++ b/packages/commonjs/src/helpers.js @@ -58,7 +58,7 @@ export function commonjsRequire (path) { } `; -const getDynamicHelpers = (ignoreDynamicRequires) => ` +const getDynamicHelpers = (ignoreDynamicRequires, nodeModulesLookupDepth) => ` export function createModule(modulePath) { return { path: modulePath, @@ -172,7 +172,8 @@ export function commonjsResolveImpl (path, originalModuleDir, testCache) { if (path[0] === '/') { originalModuleDir = '/'; } - while (true) { + let depth = 0; + while (depth++ < ${nodeModulesLookupDepth}) { if (!shouldTryNodeModules) { relPath = originalModuleDir ? normalize(originalModuleDir + '/' + path) : path; } else if (originalModuleDir) { @@ -181,10 +182,6 @@ export function commonjsResolveImpl (path, originalModuleDir, testCache) { relPath = normalize(join('node_modules', path)); } - if (relPath.endsWith('/..')) { - break; // Travelled too far up, avoid infinite loop - } - for (let extensionIndex = 0; extensionIndex < CHECKED_EXTENSIONS.length; extensionIndex++) { const resolvedPath = relPath + CHECKED_EXTENSIONS[extensionIndex]; if (DYNAMIC_REQUIRE_CACHE[resolvedPath]) { @@ -257,8 +254,14 @@ commonjsRequire.cache = DYNAMIC_REQUIRE_CACHE; commonjsRequire.resolve = commonjsResolve; `; -export function getHelpersModule(isDynamicRequireModulesEnabled, ignoreDynamicRequires) { +export function getHelpersModule( + isDynamicRequireModulesEnabled, + ignoreDynamicRequires, + nodeModulesLookupDepth +) { return `${HELPERS}${ - isDynamicRequireModulesEnabled ? getDynamicHelpers(ignoreDynamicRequires) : HELPER_NON_DYNAMIC + isDynamicRequireModulesEnabled + ? getDynamicHelpers(ignoreDynamicRequires, nodeModulesLookupDepth) + : HELPER_NON_DYNAMIC }`; } diff --git a/packages/commonjs/src/index.js b/packages/commonjs/src/index.js index 09925de34..76fe406fb 100644 --- a/packages/commonjs/src/index.js +++ b/packages/commonjs/src/index.js @@ -46,6 +46,7 @@ export default function commonjs(options = {}) { const { ignoreGlobal, ignoreDynamicRequires, + nodeModulesLookupDepth, requireReturnsDefault: requireReturnsDefaultOption, esmExternals } = options; @@ -168,7 +169,11 @@ export default function commonjs(options = {}) { load(id) { if (id === HELPERS_ID) { - return getHelpersModule(isDynamicRequireModulesEnabled, ignoreDynamicRequires); + return getHelpersModule( + isDynamicRequireModulesEnabled, + ignoreDynamicRequires, + typeof nodeModulesLookupDepth === 'number' ? nodeModulesLookupDepth : 15 + ); } if (id.startsWith(HELPERS_ID)) { diff --git a/packages/commonjs/test/fixtures/function/dynamic-require-alias-hack/_config.js b/packages/commonjs/test/fixtures/function/dynamic-require-alias-hack/_config.js new file mode 100755 index 000000000..5d2c2f23a --- /dev/null +++ b/packages/commonjs/test/fixtures/function/dynamic-require-alias-hack/_config.js @@ -0,0 +1,9 @@ +module.exports = { + description: 'resolves both windows and posix paths', + pluginOptions: { + dynamicRequireTargets: [ + 'fixtures/function/dynamic-require-alias-hack/stub.js' + ], + ignoreDynamicRequires: true + } +}; diff --git a/packages/commonjs/test/fixtures/function/dynamic-require-alias-hack/main.js b/packages/commonjs/test/fixtures/function/dynamic-require-alias-hack/main.js new file mode 100755 index 000000000..8fe3e299b --- /dev/null +++ b/packages/commonjs/test/fixtures/function/dynamic-require-alias-hack/main.js @@ -0,0 +1,9 @@ +/* eslint-disable global-require */ +// noinspection UnnecessaryLocalVariableJS + +// A hack used in many old libraries, saying "workaround to exclude package from browserify list." +// Will bypass rollup-commonjs finding out that this is a require that should not go through the plugin, and will do an infinite search. +let _require = require; +let buffer = _require('buffer'); + +t.is(buffer, require('buffer')); diff --git a/packages/commonjs/test/fixtures/function/dynamic-require-alias-hack/stub.js b/packages/commonjs/test/fixtures/function/dynamic-require-alias-hack/stub.js new file mode 100755 index 000000000..e69de29bb diff --git a/packages/commonjs/test/snapshots/function.js.md b/packages/commonjs/test/snapshots/function.js.md index eb98d9b21..6ae07eb2b 100644 --- a/packages/commonjs/test/snapshots/function.js.md +++ b/packages/commonjs/test/snapshots/function.js.md @@ -436,7 +436,8 @@ Generated by [AVA](https://avajs.dev). if (path[0] === '/') {␊ originalModuleDir = '/';␊ }␊ - while (true) {␊ + let depth = 0;␊ + while (depth++ < 15) {␊ if (!shouldTryNodeModules) {␊ relPath = originalModuleDir ? normalize(originalModuleDir + '/' + path) : path;␊ } else if (originalModuleDir) {␊ @@ -444,10 +445,6 @@ Generated by [AVA](https://avajs.dev). } else {␊ relPath = normalize(join('node_modules', path));␊ }␊ - ␊ - if (relPath.endsWith('/..')) {␊ - break; // Travelled too far up, avoid infinite loop␊ - }␊ ␊ for (let extensionIndex = 0; extensionIndex < CHECKED_EXTENSIONS.length; extensionIndex++) {␊ const resolvedPath = relPath + CHECKED_EXTENSIONS[extensionIndex];␊ @@ -657,7 +654,8 @@ Generated by [AVA](https://avajs.dev). if (path[0] === '/') {␊ originalModuleDir = '/';␊ }␊ - while (true) {␊ + let depth = 0;␊ + while (depth++ < 15) {␊ if (!shouldTryNodeModules) {␊ relPath = originalModuleDir ? normalize(originalModuleDir + '/' + path) : path;␊ } else if (originalModuleDir) {␊ @@ -665,10 +663,6 @@ Generated by [AVA](https://avajs.dev). } else {␊ relPath = normalize(join('node_modules', path));␊ }␊ - ␊ - if (relPath.endsWith('/..')) {␊ - break; // Travelled too far up, avoid infinite loop␊ - }␊ ␊ for (let extensionIndex = 0; extensionIndex < CHECKED_EXTENSIONS.length; extensionIndex++) {␊ const resolvedPath = relPath + CHECKED_EXTENSIONS[extensionIndex];␊ @@ -874,7 +868,8 @@ Generated by [AVA](https://avajs.dev). if (path[0] === '/') {␊ originalModuleDir = '/';␊ }␊ - while (true) {␊ + let depth = 0;␊ + while (depth++ < 15) {␊ if (!shouldTryNodeModules) {␊ relPath = originalModuleDir ? normalize(originalModuleDir + '/' + path) : path;␊ } else if (originalModuleDir) {␊ @@ -882,10 +877,6 @@ Generated by [AVA](https://avajs.dev). } else {␊ relPath = normalize(join('node_modules', path));␊ }␊ - ␊ - if (relPath.endsWith('/..')) {␊ - break; // Travelled too far up, avoid infinite loop␊ - }␊ ␊ for (let extensionIndex = 0; extensionIndex < CHECKED_EXTENSIONS.length; extensionIndex++) {␊ const resolvedPath = relPath + CHECKED_EXTENSIONS[extensionIndex];␊ @@ -1113,7 +1104,8 @@ Generated by [AVA](https://avajs.dev). if (path[0] === '/') {␊ originalModuleDir = '/';␊ }␊ - while (true) {␊ + let depth = 0;␊ + while (depth++ < 15) {␊ if (!shouldTryNodeModules) {␊ relPath = originalModuleDir ? normalize(originalModuleDir + '/' + path) : path;␊ } else if (originalModuleDir) {␊ @@ -1121,10 +1113,6 @@ Generated by [AVA](https://avajs.dev). } else {␊ relPath = normalize(join('node_modules', path));␊ }␊ - ␊ - if (relPath.endsWith('/..')) {␊ - break; // Travelled too far up, avoid infinite loop␊ - }␊ ␊ for (let extensionIndex = 0; extensionIndex < CHECKED_EXTENSIONS.length; extensionIndex++) {␊ const resolvedPath = relPath + CHECKED_EXTENSIONS[extensionIndex];␊ @@ -1361,7 +1349,8 @@ Generated by [AVA](https://avajs.dev). if (path[0] === '/') {␊ originalModuleDir = '/';␊ }␊ - while (true) {␊ + let depth = 0;␊ + while (depth++ < 15) {␊ if (!shouldTryNodeModules) {␊ relPath = originalModuleDir ? normalize(originalModuleDir + '/' + path) : path;␊ } else if (originalModuleDir) {␊ @@ -1369,10 +1358,6 @@ Generated by [AVA](https://avajs.dev). } else {␊ relPath = normalize(join('node_modules', path));␊ }␊ - ␊ - if (relPath.endsWith('/..')) {␊ - break; // Travelled too far up, avoid infinite loop␊ - }␊ ␊ for (let extensionIndex = 0; extensionIndex < CHECKED_EXTENSIONS.length; extensionIndex++) {␊ const resolvedPath = relPath + CHECKED_EXTENSIONS[extensionIndex];␊ @@ -1598,7 +1583,8 @@ Generated by [AVA](https://avajs.dev). if (path[0] === '/') {␊ originalModuleDir = '/';␊ }␊ - while (true) {␊ + let depth = 0;␊ + while (depth++ < 15) {␊ if (!shouldTryNodeModules) {␊ relPath = originalModuleDir ? normalize(originalModuleDir + '/' + path) : path;␊ } else if (originalModuleDir) {␊ @@ -1606,10 +1592,6 @@ Generated by [AVA](https://avajs.dev). } else {␊ relPath = normalize(join('node_modules', path));␊ }␊ - ␊ - if (relPath.endsWith('/..')) {␊ - break; // Travelled too far up, avoid infinite loop␊ - }␊ ␊ for (let extensionIndex = 0; extensionIndex < CHECKED_EXTENSIONS.length; extensionIndex++) {␊ const resolvedPath = relPath + CHECKED_EXTENSIONS[extensionIndex];␊ @@ -1802,7 +1784,8 @@ Generated by [AVA](https://avajs.dev). if (path[0] === '/') {␊ originalModuleDir = '/';␊ }␊ - while (true) {␊ + let depth = 0;␊ + while (depth++ < 15) {␊ if (!shouldTryNodeModules) {␊ relPath = originalModuleDir ? normalize(originalModuleDir + '/' + path) : path;␊ } else if (originalModuleDir) {␊ @@ -1810,10 +1793,6 @@ Generated by [AVA](https://avajs.dev). } else {␊ relPath = normalize(join('node_modules', path));␊ }␊ - ␊ - if (relPath.endsWith('/..')) {␊ - break; // Travelled too far up, avoid infinite loop␊ - }␊ ␊ for (let extensionIndex = 0; extensionIndex < CHECKED_EXTENSIONS.length; extensionIndex++) {␊ const resolvedPath = relPath + CHECKED_EXTENSIONS[extensionIndex];␊ @@ -2038,7 +2017,8 @@ Generated by [AVA](https://avajs.dev). if (path[0] === '/') {␊ originalModuleDir = '/';␊ }␊ - while (true) {␊ + let depth = 0;␊ + while (depth++ < 15) {␊ if (!shouldTryNodeModules) {␊ relPath = originalModuleDir ? normalize(originalModuleDir + '/' + path) : path;␊ } else if (originalModuleDir) {␊ @@ -2046,10 +2026,6 @@ Generated by [AVA](https://avajs.dev). } else {␊ relPath = normalize(join('node_modules', path));␊ }␊ - ␊ - if (relPath.endsWith('/..')) {␊ - break; // Travelled too far up, avoid infinite loop␊ - }␊ ␊ for (let extensionIndex = 0; extensionIndex < CHECKED_EXTENSIONS.length; extensionIndex++) {␊ const resolvedPath = relPath + CHECKED_EXTENSIONS[extensionIndex];␊ @@ -2236,7 +2212,8 @@ Generated by [AVA](https://avajs.dev). if (path[0] === '/') {␊ originalModuleDir = '/';␊ }␊ - while (true) {␊ + let depth = 0;␊ + while (depth++ < 15) {␊ if (!shouldTryNodeModules) {␊ relPath = originalModuleDir ? normalize(originalModuleDir + '/' + path) : path;␊ } else if (originalModuleDir) {␊ @@ -2244,10 +2221,6 @@ Generated by [AVA](https://avajs.dev). } else {␊ relPath = normalize(join('node_modules', path));␊ }␊ - ␊ - if (relPath.endsWith('/..')) {␊ - break; // Travelled too far up, avoid infinite loop␊ - }␊ ␊ for (let extensionIndex = 0; extensionIndex < CHECKED_EXTENSIONS.length; extensionIndex++) {␊ const resolvedPath = relPath + CHECKED_EXTENSIONS[extensionIndex];␊ @@ -2469,7 +2442,8 @@ Generated by [AVA](https://avajs.dev). if (path[0] === '/') {␊ originalModuleDir = '/';␊ }␊ - while (true) {␊ + let depth = 0;␊ + while (depth++ < 15) {␊ if (!shouldTryNodeModules) {␊ relPath = originalModuleDir ? normalize(originalModuleDir + '/' + path) : path;␊ } else if (originalModuleDir) {␊ @@ -2477,10 +2451,6 @@ Generated by [AVA](https://avajs.dev). } else {␊ relPath = normalize(join('node_modules', path));␊ }␊ - ␊ - if (relPath.endsWith('/..')) {␊ - break; // Travelled too far up, avoid infinite loop␊ - }␊ ␊ for (let extensionIndex = 0; extensionIndex < CHECKED_EXTENSIONS.length; extensionIndex++) {␊ const resolvedPath = relPath + CHECKED_EXTENSIONS[extensionIndex];␊ @@ -2691,7 +2661,8 @@ Generated by [AVA](https://avajs.dev). if (path[0] === '/') {␊ originalModuleDir = '/';␊ }␊ - while (true) {␊ + let depth = 0;␊ + while (depth++ < 15) {␊ if (!shouldTryNodeModules) {␊ relPath = originalModuleDir ? normalize(originalModuleDir + '/' + path) : path;␊ } else if (originalModuleDir) {␊ @@ -2699,10 +2670,6 @@ Generated by [AVA](https://avajs.dev). } else {␊ relPath = normalize(join('node_modules', path));␊ }␊ - ␊ - if (relPath.endsWith('/..')) {␊ - break; // Travelled too far up, avoid infinite loop␊ - }␊ ␊ for (let extensionIndex = 0; extensionIndex < CHECKED_EXTENSIONS.length; extensionIndex++) {␊ const resolvedPath = relPath + CHECKED_EXTENSIONS[extensionIndex];␊ @@ -2939,7 +2906,8 @@ Generated by [AVA](https://avajs.dev). if (path[0] === '/') {␊ originalModuleDir = '/';␊ }␊ - while (true) {␊ + let depth = 0;␊ + while (depth++ < 15) {␊ if (!shouldTryNodeModules) {␊ relPath = originalModuleDir ? normalize(originalModuleDir + '/' + path) : path;␊ } else if (originalModuleDir) {␊ @@ -2947,10 +2915,6 @@ Generated by [AVA](https://avajs.dev). } else {␊ relPath = normalize(join('node_modules', path));␊ }␊ - ␊ - if (relPath.endsWith('/..')) {␊ - break; // Travelled too far up, avoid infinite loop␊ - }␊ ␊ for (let extensionIndex = 0; extensionIndex < CHECKED_EXTENSIONS.length; extensionIndex++) {␊ const resolvedPath = relPath + CHECKED_EXTENSIONS[extensionIndex];␊ @@ -3189,7 +3153,8 @@ Generated by [AVA](https://avajs.dev). if (path[0] === '/') {␊ originalModuleDir = '/';␊ }␊ - while (true) {␊ + let depth = 0;␊ + while (depth++ < 15) {␊ if (!shouldTryNodeModules) {␊ relPath = originalModuleDir ? normalize(originalModuleDir + '/' + path) : path;␊ } else if (originalModuleDir) {␊ @@ -3197,10 +3162,6 @@ Generated by [AVA](https://avajs.dev). } else {␊ relPath = normalize(join('node_modules', path));␊ }␊ - ␊ - if (relPath.endsWith('/..')) {␊ - break; // Travelled too far up, avoid infinite loop␊ - }␊ ␊ for (let extensionIndex = 0; extensionIndex < CHECKED_EXTENSIONS.length; extensionIndex++) {␊ const resolvedPath = relPath + CHECKED_EXTENSIONS[extensionIndex];␊ @@ -3402,7 +3363,8 @@ Generated by [AVA](https://avajs.dev). if (path[0] === '/') {␊ originalModuleDir = '/';␊ }␊ - while (true) {␊ + let depth = 0;␊ + while (depth++ < 15) {␊ if (!shouldTryNodeModules) {␊ relPath = originalModuleDir ? normalize(originalModuleDir + '/' + path) : path;␊ } else if (originalModuleDir) {␊ @@ -3410,10 +3372,6 @@ Generated by [AVA](https://avajs.dev). } else {␊ relPath = normalize(join('node_modules', path));␊ }␊ - ␊ - if (relPath.endsWith('/..')) {␊ - break; // Travelled too far up, avoid infinite loop␊ - }␊ ␊ for (let extensionIndex = 0; extensionIndex < CHECKED_EXTENSIONS.length; extensionIndex++) {␊ const resolvedPath = relPath + CHECKED_EXTENSIONS[extensionIndex];␊ @@ -3626,7 +3584,8 @@ Generated by [AVA](https://avajs.dev). if (path[0] === '/') {␊ originalModuleDir = '/';␊ }␊ - while (true) {␊ + let depth = 0;␊ + while (depth++ < 15) {␊ if (!shouldTryNodeModules) {␊ relPath = originalModuleDir ? normalize(originalModuleDir + '/' + path) : path;␊ } else if (originalModuleDir) {␊ @@ -3634,10 +3593,6 @@ Generated by [AVA](https://avajs.dev). } else {␊ relPath = normalize(join('node_modules', path));␊ }␊ - ␊ - if (relPath.endsWith('/..')) {␊ - break; // Travelled too far up, avoid infinite loop␊ - }␊ ␊ for (let extensionIndex = 0; extensionIndex < CHECKED_EXTENSIONS.length; extensionIndex++) {␊ const resolvedPath = relPath + CHECKED_EXTENSIONS[extensionIndex];␊ @@ -3876,7 +3831,8 @@ Generated by [AVA](https://avajs.dev). if (path[0] === '/') {␊ originalModuleDir = '/';␊ }␊ - while (true) {␊ + let depth = 0;␊ + while (depth++ < 15) {␊ if (!shouldTryNodeModules) {␊ relPath = originalModuleDir ? normalize(originalModuleDir + '/' + path) : path;␊ } else if (originalModuleDir) {␊ @@ -3884,10 +3840,6 @@ Generated by [AVA](https://avajs.dev). } else {␊ relPath = normalize(join('node_modules', path));␊ }␊ - ␊ - if (relPath.endsWith('/..')) {␊ - break; // Travelled too far up, avoid infinite loop␊ - }␊ ␊ for (let extensionIndex = 0; extensionIndex < CHECKED_EXTENSIONS.length; extensionIndex++) {␊ const resolvedPath = relPath + CHECKED_EXTENSIONS[extensionIndex];␊ @@ -4102,7 +4054,8 @@ Generated by [AVA](https://avajs.dev). if (path[0] === '/') {␊ originalModuleDir = '/';␊ }␊ - while (true) {␊ + let depth = 0;␊ + while (depth++ < 15) {␊ if (!shouldTryNodeModules) {␊ relPath = originalModuleDir ? normalize(originalModuleDir + '/' + path) : path;␊ } else if (originalModuleDir) {␊ @@ -4110,10 +4063,6 @@ Generated by [AVA](https://avajs.dev). } else {␊ relPath = normalize(join('node_modules', path));␊ }␊ - ␊ - if (relPath.endsWith('/..')) {␊ - break; // Travelled too far up, avoid infinite loop␊ - }␊ ␊ for (let extensionIndex = 0; extensionIndex < CHECKED_EXTENSIONS.length; extensionIndex++) {␊ const resolvedPath = relPath + CHECKED_EXTENSIONS[extensionIndex];␊ @@ -4335,7 +4284,8 @@ Generated by [AVA](https://avajs.dev). if (path[0] === '/') {␊ originalModuleDir = '/';␊ }␊ - while (true) {␊ + let depth = 0;␊ + while (depth++ < 15) {␊ if (!shouldTryNodeModules) {␊ relPath = originalModuleDir ? normalize(originalModuleDir + '/' + path) : path;␊ } else if (originalModuleDir) {␊ @@ -4343,10 +4293,6 @@ Generated by [AVA](https://avajs.dev). } else {␊ relPath = normalize(join('node_modules', path));␊ }␊ - ␊ - if (relPath.endsWith('/..')) {␊ - break; // Travelled too far up, avoid infinite loop␊ - }␊ ␊ for (let extensionIndex = 0; extensionIndex < CHECKED_EXTENSIONS.length; extensionIndex++) {␊ const resolvedPath = relPath + CHECKED_EXTENSIONS[extensionIndex];␊ @@ -4543,7 +4489,8 @@ Generated by [AVA](https://avajs.dev). if (path[0] === '/') {␊ originalModuleDir = '/';␊ }␊ - while (true) {␊ + let depth = 0;␊ + while (depth++ < 15) {␊ if (!shouldTryNodeModules) {␊ relPath = originalModuleDir ? normalize(originalModuleDir + '/' + path) : path;␊ } else if (originalModuleDir) {␊ @@ -4551,10 +4498,6 @@ Generated by [AVA](https://avajs.dev). } else {␊ relPath = normalize(join('node_modules', path));␊ }␊ - ␊ - if (relPath.endsWith('/..')) {␊ - break; // Travelled too far up, avoid infinite loop␊ - }␊ ␊ for (let extensionIndex = 0; extensionIndex < CHECKED_EXTENSIONS.length; extensionIndex++) {␊ const resolvedPath = relPath + CHECKED_EXTENSIONS[extensionIndex];␊ @@ -7871,3 +7814,213 @@ Generated by [AVA](https://avajs.dev). module.exports = main;␊ `, } + +## dynamic-require-alias-hack + +> Snapshot 1 + + { + 'main.js': `'use strict';␊ + ␊ + var require$$0 = require('buffer');␊ + ␊ + function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }␊ + ␊ + var require$$0__default = /*#__PURE__*/_interopDefaultLegacy(require$$0);␊ + ␊ + var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};␊ + ␊ + function commonjsRegister (path, loader) {␊ + DYNAMIC_REQUIRE_LOADERS[path] = loader;␊ + }␊ + ␊ + const DYNAMIC_REQUIRE_LOADERS = Object.create(null);␊ + const DYNAMIC_REQUIRE_CACHE = Object.create(null);␊ + const DYNAMIC_REQUIRE_SHORTS = Object.create(null);␊ + const DEFAULT_PARENT_MODULE = {␊ + id: '<' + 'rollup>', exports: {}, parent: undefined, filename: null, loaded: false, children: [], paths: []␊ + };␊ + const CHECKED_EXTENSIONS = ['', '.js', '.json'];␊ + ␊ + function normalize (path) {␊ + path = path.replace(/\\\\/g, '/');␊ + const parts = path.split('/');␊ + const slashed = parts[0] === '';␊ + for (let i = 1; i < parts.length; i++) {␊ + if (parts[i] === '.' || parts[i] === '') {␊ + parts.splice(i--, 1);␊ + }␊ + }␊ + for (let i = 1; i < parts.length; i++) {␊ + if (parts[i] !== '..') continue;␊ + if (i > 0 && parts[i - 1] !== '..' && parts[i - 1] !== '.') {␊ + parts.splice(--i, 2);␊ + i--;␊ + }␊ + }␊ + path = parts.join('/');␊ + if (slashed && path[0] !== '/')␊ + path = '/' + path;␊ + else if (path.length === 0)␊ + path = '.';␊ + return path;␊ + }␊ + ␊ + function join () {␊ + if (arguments.length === 0)␊ + return '.';␊ + let joined;␊ + for (let i = 0; i < arguments.length; ++i) {␊ + let arg = arguments[i];␊ + if (arg.length > 0) {␊ + if (joined === undefined)␊ + joined = arg;␊ + else␊ + joined += '/' + arg;␊ + }␊ + }␊ + if (joined === undefined)␊ + return '.';␊ + ␊ + return joined;␊ + }␊ + ␊ + function isPossibleNodeModulesPath (modulePath) {␊ + let c0 = modulePath[0];␊ + if (c0 === '/' || c0 === '\\\\') return false;␊ + let c1 = modulePath[1], c2 = modulePath[2];␊ + if ((c0 === '.' && (!c1 || c1 === '/' || c1 === '\\\\')) ||␊ + (c0 === '.' && c1 === '.' && (!c2 || c2 === '/' || c2 === '\\\\'))) return false;␊ + if (c1 === ':' && (c2 === '/' || c2 === '\\\\'))␊ + return false;␊ + return true;␊ + }␊ + ␊ + function dirname (path) {␊ + if (path.length === 0)␊ + return '.';␊ + ␊ + let i = path.length - 1;␊ + while (i > 0) {␊ + const c = path.charCodeAt(i);␊ + if ((c === 47 || c === 92) && i !== path.length - 1)␊ + break;␊ + i--;␊ + }␊ + ␊ + if (i > 0)␊ + return path.substr(0, i);␊ + ␊ + if (path.chartCodeAt(0) === 47 || path.chartCodeAt(0) === 92)␊ + return path.charAt(0);␊ + ␊ + return '.';␊ + }␊ + ␊ + function commonjsResolveImpl (path, originalModuleDir, testCache) {␊ + const shouldTryNodeModules = isPossibleNodeModulesPath(path);␊ + path = normalize(path);␊ + let relPath;␊ + if (path[0] === '/') {␊ + originalModuleDir = '/';␊ + }␊ + let depth = 0;␊ + while (depth++ < 15) {␊ + if (!shouldTryNodeModules) {␊ + relPath = originalModuleDir ? normalize(originalModuleDir + '/' + path) : path;␊ + } else if (originalModuleDir) {␊ + relPath = normalize(originalModuleDir + '/node_modules/' + path);␊ + } else {␊ + relPath = normalize(join('node_modules', path));␊ + }␊ + ␊ + for (let extensionIndex = 0; extensionIndex < CHECKED_EXTENSIONS.length; extensionIndex++) {␊ + const resolvedPath = relPath + CHECKED_EXTENSIONS[extensionIndex];␊ + if (DYNAMIC_REQUIRE_CACHE[resolvedPath]) {␊ + return resolvedPath;␊ + }␊ + if (DYNAMIC_REQUIRE_SHORTS[resolvedPath]) {␊ + return resolvedPath;␊ + }␊ + if (DYNAMIC_REQUIRE_LOADERS[resolvedPath]) {␊ + return resolvedPath;␊ + }␊ + }␊ + if (!shouldTryNodeModules) break;␊ + const nextDir = normalize(originalModuleDir + '/..');␊ + if (nextDir === originalModuleDir) break;␊ + originalModuleDir = nextDir;␊ + }␊ + return null;␊ + }␊ + ␊ + function commonjsResolve (path, originalModuleDir) {␊ + const resolvedPath = commonjsResolveImpl(path, originalModuleDir);␊ + if (resolvedPath !== null) {␊ + return resolvedPath;␊ + }␊ + return require.resolve(path);␊ + }␊ + ␊ + function commonjsRequire (path, originalModuleDir) {␊ + let resolvedPath = commonjsResolveImpl(path, originalModuleDir);␊ + if (resolvedPath !== null) {␊ + let cachedModule = DYNAMIC_REQUIRE_CACHE[resolvedPath];␊ + if (cachedModule) return cachedModule.exports;␊ + let shortTo = DYNAMIC_REQUIRE_SHORTS[resolvedPath];␊ + if (shortTo) {␊ + cachedModule = DYNAMIC_REQUIRE_CACHE[shortTo];␊ + if (cachedModule)␊ + return cachedModule.exports;␊ + resolvedPath = commonjsResolveImpl(shortTo, null);␊ + }␊ + const loader = DYNAMIC_REQUIRE_LOADERS[resolvedPath];␊ + if (loader) {␊ + DYNAMIC_REQUIRE_CACHE[resolvedPath] = cachedModule = {␊ + id: resolvedPath,␊ + filename: resolvedPath,␊ + path: dirname(resolvedPath),␊ + exports: {},␊ + parent: DEFAULT_PARENT_MODULE,␊ + loaded: false,␊ + children: [],␊ + paths: [],␊ + require: function (path, base) {␊ + return commonjsRequire(path, (base === undefined || base === null) ? cachedModule.path : base);␊ + }␊ + };␊ + try {␊ + loader.call(commonjsGlobal, cachedModule, cachedModule.exports);␊ + } catch (error) {␊ + delete DYNAMIC_REQUIRE_CACHE[resolvedPath];␊ + throw error;␊ + }␊ + cachedModule.loaded = true;␊ + return cachedModule.exports;␊ + } }␊ + return require(path);␊ + }␊ + ␊ + commonjsRequire.cache = DYNAMIC_REQUIRE_CACHE;␊ + commonjsRequire.resolve = commonjsResolve;␊ + ␊ + var main = {};␊ + ␊ + const commonjsRegister$1 = commonjsRegister;␊ + commonjsRegister$1("/$$rollup_base$$/fixtures/function/dynamic-require-alias-hack/stub.js", function (module, exports) {␊ + ␊ + });␊ + ␊ + /* eslint-disable global-require */␊ + // noinspection UnnecessaryLocalVariableJS␊ + ␊ + // A hack used in many old libraries, saying "workaround to exclude package from browserify list."␊ + // Will bypass rollup-commonjs finding out that this is a require that should not go through the plugin, and will do an infinite search.␊ + let _require = commonjsRequire;␊ + let buffer = _require('buffer');␊ + ␊ + t.is(buffer, require$$0__default['default']);␊ + ␊ + module.exports = main;␊ + `, + } diff --git a/packages/commonjs/test/snapshots/function.js.snap b/packages/commonjs/test/snapshots/function.js.snap index 64dda0340c862945483b26c60e2b323c217ff2af..73e94fa4d3096abe880ed540ca26d82957262072 100644 GIT binary patch literal 19256 zcmb5UV{k9gw=EjmHg~LFY}?6>ZQHhu9ox2T+qP{dJGuLv`{C8ASNEL%?W&$NYpnjz zYxV42bMzR3s)9sHwg&c2=623Ru1qi>K*f~nL*@4pg%-bqgpnl-+z6wffd1;V*5 zh$uK13`NtN94rxu=xN7SlPEs;0d+68r?Ioqt@6)}vHn~9t?fi6JF}hXPS@)RuZ^@Q zr=((Buha6x`lHt8%#ZHsNu}Giq{^NjgFpXs*R-$80NanpVYKuM=i}0%T2Dd2QrwGj z5@Y{ulWTRB{R`P?mct@~ytQw9#Rj(el#UYD%Nl z97fw5*O~QI{HCrp{l-feYN>62q~Zm|49BDLEq?Z?A77odru!frwNy5WGTLnW-_c^D z&FYAz9j{G|uO-c^HIdH0tQ0`%f<*e{#*bKAI*7u}y$ z!fw~yCz~6pr*g_?hCk>gVX|(1f447vy;a^0zgH16evS~8lRO^+A{z=@u1n-^od$IL z=ydH9`J)+g#5c%?}~z}@1^a=-OQgxm0Lca z(aFOU#GaahrAtJ`B;FGn-&2Zn2l-yMbI-rsq;8(FqUBDdL0PCP?8lh7&o6)2zr3~g z8=6bsq1}C&wg=d4)Ar~61)D4O(sA4WgurR!TSom+K!9f0StPv?hdfy z&EL<8MmcYb*KB^}Coem7W?j*80v*KxX(Ms`hVwVIUU#2Q51Ly(MZZSW#r9=PPtyccux~|XwnN+_m*D%cZn19u@ z-uS)`GVpzsNB*Ae`K^eMrfGJoQ^yQFA26b!3-(cH>~y z>2k30beC09w0yD_m{Xqbr(ZJnigTF%($}T;QVUllDWgqQ5uw9e&UYm9r|0iIh3jQE zz~KrFy_mjJToK`B;YF|4eU*-(-K~=5)b67&{a@X@>WZdwT70xHXy5;3*Mrsjo_x)8 z-Tn8pA$Myj8@v2CY^U35s$XqvZZ&#s5S9YUxxW+@Py9YdK2l_R){Z`?+;}|hK`Win zi*w$I#yIaw@fmLF9*Moc`MM2KT$dSCk~$6tBOB~j-wY-qVSBfK-XPWJ-Cd$$(jjAmIrDvNpR?cfR&te*zi)m1&D-y! zIF*7o7k=CEeFZb_bJ>Nkg7TTdNclJ%QfV~yZ-Ld_?yKI{_U7-~Dn-SM?#%Lu38x+I z&m2Tu80|#A_a#Kvc5`0280%7M@m(g0)$Y5hr3w7qp6?sPQ}0kEH*gMLFVV?r=F{fC z&DRt1@|RlB$44ojl_zKX2~df-caJ<2ME_&LA7`DMFL*ZW+# zbv#G>PHv->ez^5io@{ovkIy?1+ik{GDSX$`Rrm+X&44d1Hf|b(Uwf(Uma=+V{Z8$& zZ+Bvq^td%tItX`fSH*RF-nkKZK1Q?YcV7n4%8edyM@r}JrdcC!IATMr&bw{)p@Md8M$q;KM5I?>-^<@K+o~)pBs>+ z_x<7(Mz`Mj)8-JuxS8cC!!FnT<_oyoUpXb;YWYr9x_IgM~o$B*5RNl&0MLpWG)pN~yan%!+ zq1DqnO2vG#zcjR~O!oTDKl6RuKRe=wdCle0pS{ZsQcCYBrvlS6e0%$Nm&WPWZkBnk zB>#8VIqL(rjsZ=+>ml##em2)_{~VNY_usUOev&|o>3)*)u!ZA&tP*24 zLa7y~^Re$!hyQyp8oUuv{ciQV7az3?xHRV>r=lwJ@yn_9=b=dH*7wNHjWG4^BBH$| zhQ8l`-AzZQ-OiugZ10sP+10LYN6ajoZwVE-F2?R>4RM?IuZ{K8T(A2MJ#Bv__P#7L zKgYx5PlC6b>mK)?0GnRDXeEYEtSq;v+qIj6uv=}v+a#L5X8eyY8XPWrs4DMrk3FTi z-Q?YanbLM2cgM$cKmFyKe+k$8AaX9W?rtFc{OX*}V+hIFtYei%ZS+dBy1#R98P+bF zNfB}h^|pQ2npW*Cy+^r@AsMRIULrddXS#2@JAdr$T%Q&Hy@3|BT*q6bdV2Xkw%^V3 z42hesdar^KqUE=8WlA$YuN|dwU)#I3@N#$f4cjiCJVgad>7Of9n0}WtE5)~j&O5a? zocE`ryVx9JqUD&Lmr2j;&2hXoAL*DMr#Jkz{c$he(xT;VGF3|Sy!kX0EIprtxz9Dd zH+s8~H{}IO%qM|ak3D|}&)I+WYDR5)Zsn`BuAo(UWq2>OTqaChQhT;u*HdbJJQXiC zUVok-(g@Q!jzQuZ^?s;w-EkP6uDjHZxGUMfxlv^PS}SHh@LS#NKF@6-)8u;T&miJ< z5JFz!l;m_4$+dqhW7hcY1?u_r=+y4?Tt}J;Kmwi%i(MvI!$b)-{zCq2Z#N!c#&q&K zsjG^X$1#9%GWb1x_w4t^ZMuy_?=a7HUi&F0eT+nM9d9u6EJ7_teU@-+t39PVy*ycgb&u;qI(|r;q;|$m^B! z*xP`u$#5Mgw!87z*}d$Nmr?n*$**s49q0eZbp8Ecee!Gi{$I;&CHKYAK%|>iEa~`Tg>FX2P}4 z<+gge2PxC|g&5+vMkCkct*5L9m9ko)P`3jm#7$SJRjLUXVhPUcC#8& z?RsAcz`0>%c#i_Oj+3?YVn0oLy)OevZ@SudS{ubh%Ncm}O1oUwV`YEVUJA8Vx}Jj$ zjQHiP|Me`bx?s*9e@Ap2Tk-8@dR;$uW-f%|zWx<3Vh@O84#&x=-}d1xB;NOVN$qu$ zxww7Gz*2JU3e}I7qw!?iD!=2%mX>at&+eY8pR%ImsNZFhUod~iZMTQ??e;~YJip&X z&nyr-l+x}u-ci=d*n-;*S#q$%Zxf=N-m~L&S-ig}iP})R z#0OU~(Q92d#TDKD4Q!p%!Ahyr%6k^vG4Aft=**K2T|M(>*Tsx_$540mAw;{OaL?x1 zeE^k}H&@COreB1K&`$nbQ;m9)Kpx!bqkh;}Zk0TgH%G`;K5V;@^Q>Ix_GWucyIcTHF$V1mfIZAgnwu6M|j**Pv zYXG+OKOWbYaCqynjDhXNRFZfYwlhhZnTC~N;st#glpfQm`+EjtY<7KEX|XR|h2 z5*d16nyWdJin<+vA@i8Z&Zz`&gxsZ1=`|asuu6n5Qo;&@JFfv%dA~|#6vXA?Fr5j{ zo7+$ZEX`E_nkE-b(>Xof-wkUA=h7P(^ig!`ELQK{Yj9^~O!EaErJl`_8SJUD#gW~R z9-tXJyRfG0h!He-&m&HrC36Lg2e9VZ<4HLYrOy~FvcVldc{3bX-To`{*)n7T#TYin z)at!+*Z2Dw1*U+lC#c>rqNlJA1L3OP!kx{Rty zk``??2veq#$wDQ`Myif>6f{tUmX@WOCTgEo9mL6Kirg9oFr0+fhp?Q-gF=jD$HV3` zLc!x$!QT0&WX3V>1?` z=2H+Dz&FLS2`mUj^tphXQV}5%-f2l5q!?V7N)caQzg*rI!_j{G!6{ziWG}_a+Baiy zV2)*S$$7XQc&X)tqt14#2CnhM{Md?niJu} z5iB91(R5LdC7>KtlF|*EOQ6rPt%RFiBy_sICB%tHbsPsBwyde!J=X)0I>PoDG2`0i zK^?CV6F{8*ptwOx!%MkB+u5pIBJqGDWdggMgVmhApu((}o9c<`EzgbGGPzBsS z0K0!4ctA8%*QqTXWWPBiYy8Al4bOJ?I1?O(&Jhg6&jvI`11)asFIToA;DO};JytNk2O%UX~xrTKk^Ahw9s!gIJWWZFV zyn%le;@emlzO{c>q4r`5{&S<^k`~ z%VCgpRId4Xa4A1664uSrfiTd`(jMl17v;|&anR6Gyi0$OztS|>l+_HP3e++drU11H zAvP0rhyv3sb2D7X74T*NkW^G;XxQ(S^13#btsX^>H!6DL^jLovC6Vx7&fTroYle8* zkdfEGHu#yIG~~dOLt6e8=6=oBgLij!$Ik;srT(+!d$*`6iaAv@m4pOF^N4ZcmGm6# z?d_Zy;RJmak+Uk`8HUOkj)WrTp`1s<{;~^BA;5&xAP^K7i;rzix*P~r2jwJ1c74N56e-~LLbs~hEJ)OK8*XJ2-$Z--A47plfZH4nONlNt|!hu z)i$cZl<;-j<&%JwzD=i zMJqc|ageH|^l1{=a%n5{8v=tSgFyNEJ5f-iHbQn4Uw)kOd=E3`d23Yej23TCVqzk; z`>7GJ+0r2QjWPPcWzG0221OcpC-7!dMn{a*LgT|z))z(qIG4Hu(!4jr()6VaY^5-7 z0s)gM;h$VVI;@S`ENdKlAKIi};GRzbJQ6SglNPvbmLJjB*Tf)3>ZOpEnbvb*>2tLO5^?@z;wXG=8&NAbVUK4yh<{coDvc4 zX3%@a3N^z*-jvx=%FoHX>bCO1N6$gN!XwwC1FKU~D}0mviwGO#;Pch!%WVB zRghu&5Om4-P*uOv${I-DRbY~pU%4X@?{@aV37xa&x7&v}VN7W-E~iak*VUud2Lyxz ztYN`M^$_~yoyk$(puihoy07o?HlOu1+Xp+13uBNU1*3^P*BD3e`@B0@+6zjCNBQuF ztVh@skM$ow#Y^LFoXIF#mw$)YI*~ywY7Va*O8q7nL`aap<%S%Cj(waP!}Tz>w4leP z%$lti7K@Nc0fiHrcl3Ug9el(^1|ngw0SLreQ_s{f9rIY8bO6U9`acEe8%VkMn_Psa zC+GuF&Kn@9LRA$48(W`D8)t7YAqV9xvgjF6lN0DAK( z`AS<&#(w-Gaz%^p6e~Q6g*wu;lpYMTFv)QNTdrc+951l~uubYbij#th08apo-9*~DQKzZI-!1Pnd`$|SZL)m>;Kc9<=HN2xb zC^4IF9572!Tj#Ls3%ZDhWHr|d>eF>Pl< z%JjunwP<5S%Js!|wRme+{er%>6lOZP{Kw?VY#i%6vrrIT4pY>KKKnLgL|fSrnnkSt zoWLATeEK%P{4UIWyU>Mg0+&G4HXM^vt9gE3gFMAZd=Qm)Lj<0eH#kzNZP=CQGv5_I z9=QQ;Ky#jBEMSFy4Fe+`GoR%A3Ws-Ju)zK%?Udf8u629{n8|~0K3iTnu=}v;Y^0Pz z$e45>6S(WX-}cjr`>PjO=MZ36LqFrHEa?a5i~kCLfqoSzbT__j>LCkGtFV}m#;*!M zDQR2=-?ZkU&;d-9FxP^JrB|K2d#ZIA0X?>rXrXwhN6}$-Yp@WVRU;hIHT|NMVo=D6 zN7c=561)VY*-3%8P6Q{+mYL(`NfC=$3#(BTl}Y?E0NFlrj(i;TYIjP@A7ykto;77} z7CCKh(@l5kD8J&|w&skpaw(bklQGhkk}6Z&q|I395_k#bIf`+! zqO>QLf`|z_j&_#441n5jXa@vcfXPUDbrn*;9qTDPM3i;4jzljnlF7N6wG)&iJC=|P zmRrrw3L^ObK~B`d?j^7=5GK+N8D6Hts!Ee<6=cyrqF^?QXb=uaCKWv!DCBH|@s-dG zN$+W!k{Ki(aWuV+K9{~@14dan2ri6fw$6r#f6ES| zU#N_DvLxxwkodn&B?SLWn!@(S8rKx2MV?A|P)P{wOeUkkFTjH=2J`5qz~|djuM?Dz zQ9o7fVK^PB2Bg3e>oOrD^H>5(1-O-slZk!FFG7+QlBb2H5AyJRm4W=0c)Hti41Irx z0v7W!>=T9esb^_L+5`bE#<8-EW&@d-hh_S)F&Ypead?>i!Ey{8yHPu!i;`~3L`{W2 z?xY_BeQfk`Of{)0$)_pT?43l>SJI{EhU(|^f^=dAy$nBfXVeXhZL+B-!8&@2r0dE^i-9O?bKcJ(3)SgB#h1YFiRcfq|Q#j$fa&PQWy1;VaRjTD1vAy0Z;* zugmOwfX`aWq2nnw3%nr-Mg?Kgb->~INp*~7rsc)lR5+^a=iuwI1;}SgLBBXN9T&j% zak}&y_hibZVCry`r<$1@Da3|_WIi$d5s4=bdmxdvOh(ufcKb7;y09jNqa|rXV_{7e zQ(aV_%+iwhpMb&SAXvC}>*YbB>xxXY(Oy9`nF~>rei2$50-Q8|s51%S^B3p$pEe+C zEFqJjP6jyOq{k8>4?5w>)hJ=6M$FEcgXxtmQI(MUKgAnM=W(1_En94bUI1fRHAxx^ z;lwL@uf!#TTF1Jcyv@%K4mA?+(6tMyw>s|NFNMvaGl9Mc-M(c+CeT?AI41gO=7U%4 zGp0O2MC{ca}{~wYE9M{T#y0Up3pvI zj2+-6`N+tWKy1H-JCuIASXM+vg;Pf@mzPYmK~+v2>mP_!!OB2C4;%;2&<^^+maz3H z7@RmWs)6OIH|cXkWB;NA1*h?p!|K(VG>?3^h)cP zKk#uA)IJjJg{E4QtU87$Kg+P zrZF+#)if}BVs(~=_#>aPAU6)?g6%=Km+ark`Jl@m)iwIQgejhgb7N&BQ8*aPNa-0Q z(_|xtM!taSw*S?qUKm;3;yyT+F8UnEwA8%Hrd)j;@i=#|nqjp4G*HjTdt&m8uY2n` z0gh5Af@jS@t`uTSJ{#7`irNwf^wOx_%Bnry+q&_qt{Frk?=itQZOebf$*Rpff{b~L#JnC z!k}C;xkBYX58G=hm4z=HSQ7+~p;9cr)8&@tAjP^0-!E1dGSBS2Q0Z1P$=$jwaK!9@ z!jhv9?OffFs>E4gq3pJk=`2qp34{vsE%uy8g^rzni3IjK9ZC9Z!qSM?pcf3lq;LwV z$OJ`G=i4ye4&GklRV-qxVrxEOG}WhU3JV*+CdIgs4nL_fKc{+no8%weqsSuy=qI7b zXT6L{z{@7hW$>5b0e-oKmb&hUf~m2!kNH#UAnLjrPIlJS!a-n?&UgHSpnQPY~Otcil3@3Ba~sDD#p&CSM)F zrGei;D9TL1WSAvO6m{<6(O`(KJoU>NsJ_OVu)feH(CpB<)zh99M*}_p2L#IL<59!2 zhcxwy4rpK+tcl=P6_ODeEg`5$)pRdoR zg7pYm#T_x2CW^F=ij7VgMyAA((Pw@32|O!|JDadz*@V|{jcrU+NG3opN>4HbC?rXv zzqdeHB0I~gk_(KoGS0{bX3GR(nut(Xh-kuzP|UzOM#(fcL`_|jLCxeG#X)WgO+$`agiX98uXg zoeWrH^580U*!e3YxcPoTI8rNiZpv7GPIS<3=)9Jyid9JYnBs@|3Ru+SG%Yv-$?Q88 z<@NRP+n2*?ddtS82B;lz~nMR+UzCf2oAYg#S zN9@`S^S$~;AFu@Y+yXuF-kDmGHMkSwS5y}^q$IH1I%A&uM^nd2o{!UWWLg-QOGV}& z`LM>gPO`uteg~>y+A0iz=fg*^nb+ZnQ6d|rsf$uDmP(m)E3ZiZ-vqzMr00GRf;D|| zT(C=)WrEwY0Gu`{d`|z0!rR^ejEXUbAbo+XEso$b3F23ny368j>b!@+yHWv5yDplN zm5O=sQ7Ev_yB46CrlgS^WKus2O1iSsMZtsDEX=VHpyZ3Z+>u7(?Re=t0C2|{E7t~j z!X-FGK5Kx$tNr(J`_0=!R@POXAtDA1PCjIGVc+$kGd{mu>GBX_GIJos#mKp(U%BlO zG(nZsmY;Lp+@K4o#~g>^-xFczpU_=q@8}QD3Bp)h{w<;;v>ZJ>m?rzHjRUkf-yk?b=yK5Wg9awJZ_^_!;3>ectG6V4 zz&Tpd`XB%;xqTRS_rP*!1v2V+M9+#RO~2G>X=_xQ_a`AHR+AQ3>1y!tZAqf>>Mmy%C+XLdw5JJ==)nlYS%bfC(Xop@c-nptS!DxB;5 zYWXf4NkP9YvpYLZj_0SV(yeQ2{x9YE8etl4B=ur|qKWuJB^q_PEs5OuXtAZQw$zA~ zP{DWv~pJ(PsaI0hzg92E9I}o?)-5DG5~>|M0-zeYil*s{S@ho7Um8#Ep+CqAXAB zKMGF|gwa9)T6g#1@Q=eIfRO{~$0?g#NUjKg=jXUsPO?k}$~9h+AEJsjBZIe{u?3C1 zi6gTJ(IN1f0o-*PJX0SW^b?LCI9xx&m@<;3ow&vSAGIm}BS473m}WluUb{!Z4a^R~ z)}>4?5@v%&jl@EZ-zH2vNeoS&IO@&OB8f5vrC70mMJh=wVu4Z-hfJzaP*~+0EcX9bHX~e+Hi1hj^$`jaiXQUrErEw>+lt^-kDbs|-jsYMsG~Y@c zH5fSs^*V6$*Ced6iV;*NPK6?@#19pKde=^cNF5_dGe#oBc%xgEN`>K%V5*g1i0{Qw zf5$O~Sm!7pb+OB*`qC<3@|AnpOJZ8fF*?io;c*pGh0x(y zUDzgM+$2|1-0bXh+(_)i4Ozuxiyzx|@_NA1$k*Tm zdeyd~rk{kF^g@l`2CGCTgvBb+HBOOEP?J@>EByZ%Tw19yV41>t@j|x@BFYL)~j6 zj7Q(7GjXe^N1~IHNJ_sW>EXZwtMLHgRLGqoqJhf+sKU}_y1Uob%TL8*CvC;5epg=_ z_b#bP_=NoD0ZvlSV27>!`oW4o130Vh-n$MLLU{}`^19~Nk6eRKClEg##Hc&dpW9`| zuH*FR9pFLeBZw0-;F#+0)5N-q))Y_u^>Z8%5t@_!Ux5aaqs*Y1Y{_%K$6xR$%TGZy z`S{|eoGsuL2vKKE`W^i@u)BLnRbj}E}Aph12{)48C?jKm<$8#)@oIihs7C4@tgrGeq8 zi$3(FBWT|cK0pL0fR|67-D?WDj{?l(qX)7~b)Kpz2`4KAZDoG-h#k0maT6s{IoW|) zT50r-=PWeneyAk*q8Ib%O+5Z*p@)C%ZHLerjv6{p4*;!E3HWGTfP~h^g$}$HxurCA z0=-fhFmDrJaf9(3#Z?`Rygv3^JgQ-rC7sJe(S;0Kl&rsmjGEVVWVmVRJhBrCkjvo9-Bw&Xg<`(JJ40p9K9yqK$i;EhD(suK~JFz=OuI ztUYkBg!-ORJ#YqeP(J?_UoRM`qV%aCLs*ATKDM6TZSGEKk_{6jJt(^yNBD;my+I~& z?3Ma9A6_6(cbyVgoe^5SWETVu9H}fe<3bp4zGbS4FwTV z0y^oiuoO-8_iaO9IJG^Lm&mGwY`h+zl@HS{tXO#LfZ8^!q-9Rsw&n^%NH@D4P|517?PK&P>QdK%2R zx=Hh$n#{c^C9#tH#q&bw?tmuyyR8kZi2Ig8WGFtV^m1t>eaJ)cjGw)I>ej8Y8SI5@-QNqZi)sa9NW`@pTXc4x^EZ z2BN3xe`I5iW$Vc`-c3gz3h|8`kGk|?t)GO9EU81#nq@VM<1?%mHK>YAdr7S(442l0 zPhkk-H-#36VKA3m(KBW+9_TMBWUa8eN?-=}SfehXNmmo-VFC~5QE*zPLL466@|g~f z>o0RSLE%X^LF!1xXMUlaRUHNs)cMa&pbL*M zXTh$L`y(phy4;K030r{qY$T zxN(*d2~GRQ>^IR6f;OIxF)*;pA`#3Agg&7vid&r1$ zH@NE%9f2~;83iD&OA_TcwlrEd^fnVkttjW!BAPprliU^_6m+*m$JtF?e^T5Q9_0R8 zkcmYqko+(mK>PU^pQk|q8*!qa>2uP)$E?;H*aVJfYd z>a>;9iN3NCv(zQz)p9w){6;ARZv6g?hOp!>+P@`M36~s_)Qe8A2KKzI%M9}_pEXRs zbubMSh2f3FTx{GSx1_<*i)CY=BK8rGO%S+l6I93vQgP(>RgFTey$l(J z_hy7=E;1TP=F>yswU|*(G0J$MY{u7#MCL3tqL5Bq)e>)AHxUH6Z(_KmT$h+KFqq*L zJCoNelA31iO;Q;}yrS*0@JEtYbP{Db+M46LA++YFXG|8E`(=k#<9-PnV_t=2>iALq zlh2M~5q(kVIIwbrFl;IFZ`^$q^-LLAs{~i4zWwWQ2c)g}TX6%r8*(|Pq|UlQv`7~q zdN7p66buQN!e{#?U}N5(YGLgn)f|IyRAS-`SQXr?u} z9q5oo92?3Y!~hfXTx35J@s@Yrc^L(|*FROtoB@o!-DYoM!bXr+9V!xH-5iQ&3VD^5 zcQ--$1*6Y|4|UEnzDhk>5ziR139Jfni~)GojIwKmdAKPjNQPC64hU5cTQ|c9+22g{ zrHTn`w@&g2aXf~3VlS@dH?4Pvxez?K zZD#gArLfyhEDOpA0F?zgOoRnO-#;fqwpqOeiQPYwRa3j{llNGUrMX>?#mIl(M_fQ& zVeX&y8>6WRJ`tpjmk*T>STG&y6eF=@02Za|C4T1K4hm=w#hb7V zEaO(#+-vduI@Zy(=rXPLP;7xt7&1esY@Rf!cH%mEBtc4=RZK`9EutH6#VtoFvN!Am zKkacx>ov(PP!YZX&|kWX?&u?Ztx(*q94p5Vez2EfW^@*%Fg{cd&k7dalxovT#5X+l z3WDP9g?BQ}w!6Vo%$iG8*0p}VRd71;jNT8>UeblN)tmD{Zd7deL{kg`70*K^DxJwc zQU}*LOt6cFnu|j~_lb^#m-_=MI1&Yv%hVVdU+0!x$%V2w5zvSrla$(ZP(*H)BxcH# z0rrPc6cA49w+;r|d&tPm@MaS#n9c_(4vNTb*H@R^QGxsLc1V6ciJAlvC7r0W=qzSvu)zn)JwVUViqF#Adh0Nlv zPm^j#*fpNA$;uB6oD;$nY<5Q^HvG0K&xUoBpA01=K>8$X{wIjiJJdwR+P_RX*k!$w z;W1_>?HMR85YzOZM?7HwiOYWv`reG?(4Vh@YGg-B>V&>dyVN%=Vye6W$%6TwQ{T1^ zsc?3_sNKPN*G(V;xgrlnxH+`y=4~1bMgE1FDYwO%vzUO%shL)~e#yzSCdDQI@mQnL z!S*s5w^b(xOS%R%h3D`o7-V&{igwoXl1$xBxfC+96*rK43a-;+(q$rroACsj(decx zgPZ9zns=4TOV0WM;5OrQxhHZ&X0pgKW4P{}W%?DJ*_x;TcYS6am~~UU1*b{<|6yh~ zsjI_^?eqxGwyJ>wG~KsJd9zZtL}cTOd%O60Tk`au9ef7|WIjv#%U|JLs;3@EUm)Ai z8J%WVs_v#(g%2ewyF*~KBjRS{Fop_Bxqd;fS48;--B;NX4~GdW2vL$i@C&IQ>c zNjm0umvW3py#Y*ek!0P4br%1@@d(-r2)|0xRfzt&OUts zS{}mPCjaBXr-QxiaPetvb|S+SfCEP#lgp63rie>UTS_y^r4|q;`<-b6tHY3TOR1hL zqAWiKHrK{9kZdLlZ6clXCFkUVu*IO}(+OGJ9=0?=<^xm`3u&HCKt-T8>@{#Np}?CW z?LsKcoKP>(tl~q49hDPdg$pIyxvZk6Qqm4uF}vuw>^+T#Y9(`ZVrd;4J;9~g2;hp8_eiLc_gf`mth#JpHQXBfPC5(_u?Ns?~G^-1A`f%YS+_ai(pcHZ5V|Xwrh!^P70sZ_4Mf~XQ_k#Y=N=xZZARO=AT4v=Omc!h zhE510BOB81Q5HjYTyAm^uGKb#ek?E_o)QvF`x9a-0d9oe&AD!fkpPl2fmtB{R*DA1;1y1Tw+6JS1GNQoIcDFCgML{hwbh- zTm2GK#?-%-=T)143K3e;EFh7C_r4jSIPH%dTa_WFUNZ4~ldgwXvWl>Ccc=cUR-3)Y zpWnk=!CzrtAkZ1$MKr^Q@MUr5g!m0TyeGmHl_Vb#L4$c-yN-&WaQ39d6$xz-KO{C~ zc=;~G7jGgekjmS~T5kD~e=kT781F*UUd(MMV87aqRdr-AE2OYtC zl4yhxP(IL7kmS{SdIgs0$m||Pc07GkZc#$D-Ic2u3X$5{fOT@}d=zgFr6+$n3X$h( z-A_v5f!9YPl$5$9t#B9RNjOqk5|=_+45&POwRb|!Cq-ghCh=+AZtF&&L~T|8b-bmMvlsAU`jf$ z6T2tgshb9YsFWz)h39k?Q3sK(f5C!~8Vw^Q27OhA)KV9UK;^zNL0Zb?7EapxchtV+!#bdux-qA7A==~t@im1r!XHkkD-n*Fh+xf zA%&jZ*edSBbEtPW@qeG@JI2?tA6>$~dkXjLV7*+z*Q+(*^q%-{Ll=zEdX@;YKc@U| z8<}gdxBYWIUn~HPO`V2aB3B9^aL(E@qs=A@UY9YlHkZu%Aple7#d`g?3(!G2KW_&#RJ*&6is(mT3m7DkEEjKM(I ziG`*UvpIy0p(p{y;zIK3#y4+^!w~tQh}~N}A=?DvOOU8J;IpQS6qBN`9o@qh+aY&_ z0p33RnI2X&z-tmVl0?cA2O(<(B55{|5tg_4Eh*BC7M2-s@;-bXzXIRV@#G5eVhcP-5>bBCcb#2YY=n{7%G|&^`#LYfvByh$dUmu0xI7{l)b73Ho z>1@mST)U7+T14u1=>Ap#0GhZdc!j&o7GpkZ$U>_+{6VpV0H9O|%~4NxOx&9^$~PXM zufHuk!>byUzGiiifp5sIIZ$kbW%6=OZqAN&37Al91`1}n8R_Pp7B01Op4l|oFAg6% z1xmSBQrP}Pw6{t7e?r(7I2A%C0;hoxFa?in|0#Q;2!5; zqgO+WRyhMrYw--HkEj{M&o*_Ux5no8WrHTaFa=VZCh8A@fbYu4y1rCKN$44C} zKS586kn{!vAS>rPxvPFDGeN9REqhF_&W_?;{&Ok(-HN#3g3#!tf>`g@?ByI&?-e8v za&nhwbl*}Fp!ctjA$Me!`C`lr4UZ-LJ$exALLzeUrW&;3`o1*fZmCF~gN0>Az+-0v z7jrFXS0Qw38Fz^ZGcD#!TdEKAD_Ri#btt0Pc9a?E@VbxBq(QK4_xJ%{zaJd+UIufW zU_B9Nx!O&h10w5;FllcUWI6tBedL}WRM$8(5Q@M`VfvSOrr@pco-}RXe&F_>CgD=h z3T*{o`|oEphK?bw`Mb-f@4>}6>mkd!Dx`0G;@Z@eymThVd%N4nb7>$2(se8u4w}aN z9U`2)-4_;*tT^6-tsr6lLsnT?Nc+ha_C^ery#Wdid#t=?y8uZ?hfKv&Z-};t6h?0K%P5WvtAPPl8OZUY=2NdwgJHK=CB;$qVw*BlazQnoXz21g#xip62rE zty%Z28DD95qpR>3NTj;f6SAINmYe`wab(R#FJ&pFfiR@Ke_*4axjxQ>*&>(v`xsML zI8B*@+!R1IL~lLx%yN<(KVW{4{qOwL&qXeWjjIL(=8m|C^PPz@+&h zVu*#)uurr_S{r&NnlX~jjdc0^eA+O^3tPUq5MR%rFj}06WM6Cx9HTrGR|c6Fj?Qze zEMZ_Q*a>M(!s}lP`a4tD6={RjH4j&)GnN(-m?0Ls{-34oi#NqJ9~O){aVF3!CXBfU zyQ9~eS)~cvm!0#a*fs1bBfCg4kVP_{9D3oGV8$zLU;81#?d@0Q>%t7-D;7Hz=>02m2cI zzx@dr>DkH%cv35_K-Md@Y($r6rbwT9*MO?Un;wROZqM1Q zyIWF6U`qYnxWj8AkFa2pFw2Wb5gQfUkqSlPRTRsVpDgI)w3c+yObzURmQHqrCdL6NDEDLAK0fRqWJ zjfB2L4nz1=9l15qLl$nSW=zy%)&98m;{aOKBmGry>y)3l>w5|H*&dR-@173iuC)z3fD;CqQNK3cwf zc<3x=p&?$KDG#I0q0B~`Woo&z4QsItDS|nV2f{Q)_RX$`m@%t%zAINhzRnhcVdyrT zokpEx&sUYUl zJ4aP&s}P~GHR38JL!FSnU@VIAMNnwf{*hWSp-Af`;R8usTN7|@}sYL z()Gf8-=Pbp#_HW(`VPF3&9NC;leqG@3ua-kY2;h9Vs8XD!85bp|rT; zcypeZjS6Kwdrs|K1Pr?HUjXTjQ}$mQE8vs~hSUavAD^OxmQ9GAn+ z54>Su25}BXuB7R?M zz`4x^{)gN)UeqV#<4uei^*>Ks7Kq0_=3<2;He9Tx*46(CsK|(lqftB`bo+j)CU8@{ z5SI+7VRm3~8isj-bQ~nWL_jw0$~h>i++x!mcGJn;kYBTyb9-uUCBMGxeV}lGN(eO+K^B1XzM~&<7pn!k}^V>3=~=kw@4NpCdwe6HyuCj z!-7oB9afqari>|x?(wkkXghm~CGqNu^=-KwPijN(DGT=^*uz0xf+U+g0E^^N{Gx(Omq6&1y@8f35!s^KE* z(WJ}2e{(YP$ZlUTfJ~M<@>>7%h~+$Z#|>cxK7&hlSnyY}bC|y8(KX~1IYu^IlDH&% zZ;G(W5&d=_7%KAZ6%KJ_Z_~HpA*R&2_D@f#SiP4}#Ifp5^YaJ^W&PjhKRN8ebD~>aI@_L+M~M{`S(gDK=<6V=rzgWs-n(QN`({)>n3Qa!OT z;yGoh+uz=D$9t$2f4QP20$~P!f6v49C?NX`tGF;)^wd}XFXh#VC&RWcP$LWQI=rw7 zkgC1{JLL~G>!j10vQq~*b99{hrzMhNaHFU7+t+mpjg>Rntns~vJte_v0sGuc{(Cm>k6I|h}0h-YAVmXj| z1_86OGgzo?Q@IGG-YBNosoR9!;Uo`g8JMw#^UaaHqw>;`-XILqz0|Q})t;8OE`1J! z_TTxu#oMUW4e$@CWEpX#q?BpIC~`Gs!5OKsL1pI9^^ls(&_8J~8VYhWn-=}M#kpiP z9fwCOh=o@X$wGgfL+51UBcA%RxLte-^}Na(!1b?`lP-a5lv&sN>RC0z-0Jy3e&n{i z_JdKBZ-9#^_Gcpy+xEU@up`Yl4XHh-H$5H^o&m_lGMJ83<5<> zC`HYDAu2cO+k9>CNuNgtbeKB&TdJd(9@eg=16V=Gz%&j9#LWfa5QA z8`aaznVcyEuA9h*xekxjlh%wv(o=aO;mI`4%g$=I=Qgcb@7M3A&D_`I*!(zxatp0X zCYwjR!_SA>JV&{k?wUHrQ>adP#YM|8c`dino9o!9zDqq8?t6d@Phc&)h30mM4`rE_ zn=ZOd@6W7L-1~qRPv8#TO0&%$!k;fmJMYtF<`2TJXJEe_Kn>}s0kZt2ZB%7|-+S+by7+I+H&@h7Kh6QM`G|zI7G2o9Hcx}XWjhb< z=QUl&xjzTLc>-sxSDJeWxXL^ZXOEM9c^}DF4#gjn{L(_VVl8$1H*s z)Nrba%^!7^=goh*rF8T7xsJo|y+53?oa;Qt!52Q61F-oKe?8iM@V_;&+GecSkK#A| z$Vvh_G30T71ZC4~{eJ(@Lkjpk-aXBEy9CAN=M5z*yu55b-(sxx`V5j|>UH0y&^v?m zbjU9b?l*bGc6})@UY+rN6s%r*ATNOy@Lv%f&D!W@I!sj0#re6-Rb6`!-Lc{ekC6*a ze$6omzBI2suOFh$bpM3@HgX303aGG17^$Je>sU_b{P}uja7x|w`sCmVB-k#oKyB?f z$}e+0-|6r@TEF~QYm{b<`hD=1r??z#rW7Y4mxtGVm^JUj7o z@K{`gZ`0jI?eO@w;9WV8%HQ*!_tFKs#Y1&AeiNBDpDYEWr$&D)Hik>uE}zaXCC4sZ zJ_P;;|oGbL-=R-828g-S3C*?wnfE(`UP& zWOl*L*K<}%XTE03IIlL({X|L^uXI-Z2WmH{{ z!1s~$Yb&i=yZ0mgs^7m@P@#3c;Sg8+YvW)y2h`8+_Wouo!_zM%Hh*>Le53I}kng59 zP7hW$!S8E2?xowBKlHk>sy4@cvs!!g(@AB@)$1nh#h2v*7A^;4zQvBgrqky=JC#zi z_WiRub{k`a>9JkZrRGUXkmvqvRB`4s!YJ3{YGdqr7_j6mG+|c8_ZlYs^2Oc$a4jfs zLg@6;5BLkBbFuYCDT(jtbo-_;*Xr{ThflZ_Qc%R&x$-nk+{d$@NxSR!TCscMd-N-> znCUUtE(q_Y?)^(+OxLYn;DxX8Ze(S*#lYM=r?#e>&RK5nW=yYVZ|IP~mg_Xj%;*$y zkI_eNck+

#93Lp>E@%X)*7WJ~Y>h0c-On8~w7bBwX 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 KJwOH>1pFIGrNZL? diff --git a/packages/commonjs/types/index.d.ts b/packages/commonjs/types/index.d.ts index 2b0b06797..d861962f2 100644 --- a/packages/commonjs/types/index.d.ts +++ b/packages/commonjs/types/index.d.ts @@ -175,6 +175,12 @@ interface RollupCommonJSOptions { * replacing strings like `"/Users/John/Desktop/foo-project/"` -> `"/"`. */ dynamicRequireTargets?: string | ReadonlyArray; + + /** + * Max depth for `node_modules` lookup algorithm in the virtual `require` realm. + * This is here for safety, in case of a dynamic require to something that does not exist. + */ + nodeModulesLookupDepth?: number; } /**