diff --git a/src/utils/deconflictChunk.ts b/src/utils/deconflictChunk.ts index 6f0d78c0667..e692d25f5d9 100644 --- a/src/utils/deconflictChunk.ts +++ b/src/utils/deconflictChunk.ts @@ -18,7 +18,7 @@ const DECONFLICT_IMPORTED_VARIABLES_BY_FORMAT: { cjs: deconflictImportsOther, es: deconflictImportsEsm, iife: deconflictImportsOther, - system: deconflictImportsEsm, + system: deconflictImportsEsmOrSystem, umd: deconflictImportsOther }; @@ -49,6 +49,29 @@ export function deconflictChunk( } function deconflictImportsEsm( + usedNames: Set, + imports: Set, + dependencies: Set, + interop: boolean, + preserveModules: boolean +) { + // Deconflict re-exported variables of dependencies when preserveModules is true. + // However, this implementation will result in unnecessary variable renaming without + // a deeper, wider fix. + // + // TODO: https://github.com/rollup/rollup/pull/3435#discussion_r390792792 + if (preserveModules) { + for (const chunkOrExternalModule of dependencies) { + chunkOrExternalModule.variableName = getSafeName( + chunkOrExternalModule.variableName, + usedNames + ); + } + } + deconflictImportsEsmOrSystem(usedNames, imports, dependencies, interop); +} + +function deconflictImportsEsmOrSystem( usedNames: Set, imports: Set, _dependencies: Set, diff --git a/test/chunking-form/samples/preserve-modules-commonjs/_expected/es/_virtual/_external_commonjs-external b/test/chunking-form/samples/preserve-modules-commonjs/_expected/es/_virtual/_external_commonjs-external index 43be5de5e7e..daae6f0b371 100644 --- a/test/chunking-form/samples/preserve-modules-commonjs/_expected/es/_virtual/_external_commonjs-external +++ b/test/chunking-form/samples/preserve-modules-commonjs/_expected/es/_virtual/_external_commonjs-external @@ -1,5 +1,5 @@ -import external from 'external'; +import external$1 from 'external'; -export default external; +export default external$1; diff --git a/test/chunking-form/samples/preserve-modules-commonjs/_expected/es/_virtual/other.js_commonjs-proxy b/test/chunking-form/samples/preserve-modules-commonjs/_expected/es/_virtual/other.js_commonjs-proxy index e1f8c6eb7c2..33c596f28e9 100644 --- a/test/chunking-form/samples/preserve-modules-commonjs/_expected/es/_virtual/other.js_commonjs-proxy +++ b/test/chunking-form/samples/preserve-modules-commonjs/_expected/es/_virtual/other.js_commonjs-proxy @@ -1,5 +1,5 @@ -import { __moduleExports as other } from '../other.js'; +import { __moduleExports as other$1 } from '../other.js'; -export default other; +export default other$1; diff --git a/test/chunking-form/samples/preserve-modules-commonjs/_expected/es/commonjs.js b/test/chunking-form/samples/preserve-modules-commonjs/_expected/es/commonjs.js index b78f6b0097e..583f1a12fdf 100644 --- a/test/chunking-form/samples/preserve-modules-commonjs/_expected/es/commonjs.js +++ b/test/chunking-form/samples/preserve-modules-commonjs/_expected/es/commonjs.js @@ -1,10 +1,10 @@ import 'external'; -import external from './_virtual/_external_commonjs-external'; +import external$1 from './_virtual/_external_commonjs-external'; import require$$0 from './_virtual/other.js_commonjs-proxy'; const { value } = require$$0; -console.log(external, value); +console.log(external$1, value); var commonjs = 42; diff --git a/test/chunking-form/samples/preserve-modules-commonjs/_expected/es/main.js b/test/chunking-form/samples/preserve-modules-commonjs/_expected/es/main.js index bb1cdbb2d38..fbedb892d6c 100644 --- a/test/chunking-form/samples/preserve-modules-commonjs/_expected/es/main.js +++ b/test/chunking-form/samples/preserve-modules-commonjs/_expected/es/main.js @@ -1,4 +1,4 @@ -import external from 'external'; +import external$1 from 'external'; import value from './commonjs.js'; -console.log(value, external); +console.log(value, external$1); diff --git a/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_config.js b/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_config.js new file mode 100644 index 00000000000..650ae278b0d --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_config.js @@ -0,0 +1,7 @@ +module.exports = { + description: 'confirm exports are deconflicted when exporting nested index aliases', + options: { + input: 'main.js', + preserveModules: true + } +}; diff --git a/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/amd/main.js b/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/amd/main.js new file mode 100644 index 00000000000..12dccf71f8f --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/amd/main.js @@ -0,0 +1,10 @@ +define(['exports', './module-a/v1/index', './module-b/v1/index'], function (exports, index, index$1) { 'use strict'; + + + + exports.ModuleA_V1 = index; + exports.ModuleB_V1 = index$1; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/amd/module-a/v1/index.js b/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/amd/module-a/v1/index.js new file mode 100644 index 00000000000..2c1cbb5248d --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/amd/module-a/v1/index.js @@ -0,0 +1,9 @@ +define(['exports'], function (exports) { 'use strict'; + + const TEST_MODULE_A = 'A'; + + exports.TEST_MODULE_A = TEST_MODULE_A; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/amd/module-b/v1/index.js b/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/amd/module-b/v1/index.js new file mode 100644 index 00000000000..b56f633d9fb --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/amd/module-b/v1/index.js @@ -0,0 +1,9 @@ +define(['exports'], function (exports) { 'use strict'; + + const TEST_MODULE_B = 'A'; + + exports.TEST_MODULE_B = TEST_MODULE_B; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/cjs/main.js b/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/cjs/main.js new file mode 100644 index 00000000000..632ce47b9ae --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/cjs/main.js @@ -0,0 +1,11 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +var index = require('./module-a/v1/index.js'); +var index$1 = require('./module-b/v1/index.js'); + + + +exports.ModuleA_V1 = index; +exports.ModuleB_V1 = index$1; diff --git a/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/cjs/module-a/v1/index.js b/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/cjs/module-a/v1/index.js new file mode 100644 index 00000000000..a8ab4802133 --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/cjs/module-a/v1/index.js @@ -0,0 +1,7 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +const TEST_MODULE_A = 'A'; + +exports.TEST_MODULE_A = TEST_MODULE_A; diff --git a/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/cjs/module-b/v1/index.js b/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/cjs/module-b/v1/index.js new file mode 100644 index 00000000000..2c2b23c7d63 --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/cjs/module-b/v1/index.js @@ -0,0 +1,7 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +const TEST_MODULE_B = 'A'; + +exports.TEST_MODULE_B = TEST_MODULE_B; diff --git a/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/es/main.js b/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/es/main.js new file mode 100644 index 00000000000..537dda397a8 --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/es/main.js @@ -0,0 +1,4 @@ +import * as index from './module-a/v1/index.js'; +export { index as ModuleA_V1 }; +import * as index$1 from './module-b/v1/index.js'; +export { index$1 as ModuleB_V1 }; diff --git a/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/es/module-a/v1/index.js b/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/es/module-a/v1/index.js new file mode 100644 index 00000000000..a8158380482 --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/es/module-a/v1/index.js @@ -0,0 +1,3 @@ +const TEST_MODULE_A = 'A'; + +export { TEST_MODULE_A }; diff --git a/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/es/module-b/v1/index.js b/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/es/module-b/v1/index.js new file mode 100644 index 00000000000..338a266e13c --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/es/module-b/v1/index.js @@ -0,0 +1,3 @@ +const TEST_MODULE_B = 'A'; + +export { TEST_MODULE_B }; diff --git a/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/system/main.js b/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/system/main.js new file mode 100644 index 00000000000..69423415aa6 --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/system/main.js @@ -0,0 +1,15 @@ +System.register(['./module-a/v1/index.js', './module-b/v1/index.js'], function (exports) { + 'use strict'; + return { + setters: [function (module) { + exports('ModuleA_V1', module); + }, function (module) { + exports('ModuleB_V1', module); + }], + execute: function () { + + + + } + }; +}); diff --git a/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/system/module-a/v1/index.js b/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/system/module-a/v1/index.js new file mode 100644 index 00000000000..400a5460fc9 --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/system/module-a/v1/index.js @@ -0,0 +1,10 @@ +System.register([], function (exports) { + 'use strict'; + return { + execute: function () { + + const TEST_MODULE_A = exports('TEST_MODULE_A', 'A'); + + } + }; +}); diff --git a/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/system/module-b/v1/index.js b/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/system/module-b/v1/index.js new file mode 100644 index 00000000000..337b556bb25 --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/system/module-b/v1/index.js @@ -0,0 +1,10 @@ +System.register([], function (exports) { + 'use strict'; + return { + execute: function () { + + const TEST_MODULE_B = exports('TEST_MODULE_B', 'A'); + + } + }; +}); diff --git a/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/main.js b/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/main.js new file mode 100644 index 00000000000..6322b946820 --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/main.js @@ -0,0 +1,2 @@ +export * from './module-a/index' +export * from './module-b/index' \ No newline at end of file diff --git a/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/module-a/index.js b/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/module-a/index.js new file mode 100644 index 00000000000..6bd359daf1f --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/module-a/index.js @@ -0,0 +1,3 @@ +import * as ModuleA_V1 from './v1/index' + +export { ModuleA_V1 } \ No newline at end of file diff --git a/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/module-a/v1/index.js b/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/module-a/v1/index.js new file mode 100644 index 00000000000..8bc392c756a --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/module-a/v1/index.js @@ -0,0 +1 @@ +export const TEST_MODULE_A = 'A' \ No newline at end of file diff --git a/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/module-b/index.js b/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/module-b/index.js new file mode 100644 index 00000000000..f9b363cdf9f --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/module-b/index.js @@ -0,0 +1,3 @@ +import * as ModuleB_V1 from './v1/index' + +export { ModuleB_V1 } \ No newline at end of file diff --git a/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/module-b/v1/index.js b/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/module-b/v1/index.js new file mode 100644 index 00000000000..1d751964f68 --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/module-b/v1/index.js @@ -0,0 +1 @@ +export const TEST_MODULE_B = 'A' \ No newline at end of file diff --git a/test/chunking-form/samples/side-effect-free-dependencies/avoid-imports-preserve-modules/_expected/es/main.js b/test/chunking-form/samples/side-effect-free-dependencies/avoid-imports-preserve-modules/_expected/es/main.js index 0b42cf037c6..ae089cc4dae 100644 --- a/test/chunking-form/samples/side-effect-free-dependencies/avoid-imports-preserve-modules/_expected/es/main.js +++ b/test/chunking-form/samples/side-effect-free-dependencies/avoid-imports-preserve-modules/_expected/es/main.js @@ -1,4 +1,4 @@ -import { a } from './a.js'; +import { a as a$1 } from './a.js'; import { d } from './one.js'; -console.log(a + d); +console.log(a$1 + d); diff --git a/test/chunking-form/samples/side-effect-free-dependencies/avoid-imports-preserve-modules/_expected/es/one.js b/test/chunking-form/samples/side-effect-free-dependencies/avoid-imports-preserve-modules/_expected/es/one.js index d9291f1bff3..0d36a94fad2 100644 --- a/test/chunking-form/samples/side-effect-free-dependencies/avoid-imports-preserve-modules/_expected/es/one.js +++ b/test/chunking-form/samples/side-effect-free-dependencies/avoid-imports-preserve-modules/_expected/es/one.js @@ -1,5 +1,5 @@ -import { b } from './b.js'; +import { b as b$1 } from './b.js'; -const d = b + 4; +const d = b$1 + 4; export { d }; diff --git a/test/misc/bundle-information.js b/test/misc/bundle-information.js index 70acf942b23..6a663b8d784 100644 --- a/test/misc/bundle-information.js +++ b/test/misc/bundle-information.js @@ -381,9 +381,9 @@ describe('The bundle object', () => { assert.deepEqual( output.map(chunk => chunk.code), [ - `import { other } from './other'; + `import { other as other$1 } from './other'; -console.log(other);Promise.all([import('./dynamic1'), import('./dynamic2')]).then(([{dynamic1}, {dynamic2}]) => console.log(dynamic1, dynamic2));\n`, +console.log(other$1);Promise.all([import('./dynamic1'), import('./dynamic2')]).then(([{dynamic1}, {dynamic2}]) => console.log(dynamic1, dynamic2));\n`, 'const dynamic1 = "dynamic1";\n\nexport { dynamic1 };\n', 'const other = "other";\n\nexport { other };\n', 'const dynamic2 = "dynamic2";\n\nexport { dynamic2 };\n' @@ -418,7 +418,7 @@ console.log(other);Promise.all([import('./dynamic1'), import('./dynamic2')]).the originalLength: 169, removedExports: [], renderedExports: [], - renderedLength: 141 + renderedLength: 143 } }, {