From ac4af85d14ad6197184b3d719783a5b15b3b6045 Mon Sep 17 00:00:00 2001 From: Kamran Ayub Date: Tue, 10 Mar 2020 09:27:26 -0500 Subject: [PATCH 01/10] Add failing test for barrel exports #3365 --- .../_config.js | 7 +++++++ .../_expected/amd/main.js | 7 +++++++ .../_expected/cjs/main.js | 9 +++++++++ .../_expected/es/main.js | 4 ++++ .../_expected/es/module-a/index.js | 3 +++ .../_expected/es/module-a/v1/index.js | 3 +++ .../_expected/es/module-b/index.js | 3 +++ .../_expected/es/module-b/v1/index.js | 3 +++ .../_expected/system/main.js | 15 +++++++++++++++ .../main.js | 2 ++ .../module-a/index.js | 3 +++ .../module-a/v1/index.js | 1 + .../module-b/index.js | 3 +++ .../module-b/v1/index.js | 1 + 14 files changed, 64 insertions(+) create mode 100644 test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_config.js create mode 100644 test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/amd/main.js create mode 100644 test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/cjs/main.js create mode 100644 test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/es/main.js create mode 100644 test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/es/module-a/index.js create mode 100644 test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/es/module-a/v1/index.js create mode 100644 test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/es/module-b/index.js create mode 100644 test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/es/module-b/v1/index.js create mode 100644 test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/system/main.js create mode 100644 test/chunking-form/samples/preserve-modules-nested-barrel-es-export/main.js create mode 100644 test/chunking-form/samples/preserve-modules-nested-barrel-es-export/module-a/index.js create mode 100644 test/chunking-form/samples/preserve-modules-nested-barrel-es-export/module-a/v1/index.js create mode 100644 test/chunking-form/samples/preserve-modules-nested-barrel-es-export/module-b/index.js create mode 100644 test/chunking-form/samples/preserve-modules-nested-barrel-es-export/module-b/v1/index.js 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..454bc294b9b --- /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 preserved when exporting a module', + 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..1300e837486 --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/amd/main.js @@ -0,0 +1,7 @@ +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/cjs/main.js b/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/cjs/main.js new file mode 100644 index 00000000000..ed3d26d57c1 --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/cjs/main.js @@ -0,0 +1,9 @@ +'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/es/main.js b/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/es/main.js new file mode 100644 index 00000000000..7aa438ff154 --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/es/main.js @@ -0,0 +1,4 @@ +import * as index$0 from './module-a/v1/index.js'; +export { index$0 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/index.js b/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/es/module-a/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/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-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/index.js b/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/es/module-b/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/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/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..d0920b733d8 --- /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 () { + + + + } + }; +}); \ No newline at end of file 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 From a96f3445e9429b47fd369d6b30816cbae4e3f305 Mon Sep 17 00:00:00 2001 From: Kamran Ayub Date: Tue, 10 Mar 2020 09:53:16 -0500 Subject: [PATCH 02/10] Update expected outputs --- .../_expected/amd/main.js | 3 ++ .../_expected/cjs/main.js | 2 ++ .../_expected/system/main.js | 28 +++++++++---------- 3 files changed, 19 insertions(+), 14 deletions(-) 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 index 1300e837486..12dccf71f8f 100644 --- 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 @@ -1,7 +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/cjs/main.js b/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/cjs/main.js index ed3d26d57c1..632ce47b9ae 100644 --- 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 @@ -5,5 +5,7 @@ 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/system/main.js b/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/system/main.js index d0920b733d8..69423415aa6 100644 --- 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 @@ -1,15 +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 () { - - - - } - }; -}); \ No newline at end of file + 'use strict'; + return { + setters: [function (module) { + exports('ModuleA_V1', module); + }, function (module) { + exports('ModuleB_V1', module); + }], + execute: function () { + + + + } + }; +}); From a1e404cdce0657bbfae21df50e3ab3261beecf10 Mon Sep 17 00:00:00 2001 From: Kamran Ayub Date: Tue, 10 Mar 2020 10:27:00 -0500 Subject: [PATCH 03/10] Fix expected output --- .../_config.js | 2 +- .../_expected/amd/module-a/v1/index.js | 9 +++++++++ .../_expected/amd/module-b/v1/index.js | 9 +++++++++ .../_expected/cjs/module-a/v1/index.js | 7 +++++++ .../_expected/cjs/module-b/v1/index.js | 7 +++++++ .../_expected/es/main.js | 4 ++-- .../_expected/es/module-a/index.js | 3 --- .../_expected/es/module-b/index.js | 3 --- .../_expected/system/module-a/v1/index.js | 10 ++++++++++ .../_expected/system/module-b/v1/index.js | 10 ++++++++++ 10 files changed, 55 insertions(+), 9 deletions(-) create mode 100644 test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/amd/module-a/v1/index.js create mode 100644 test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/amd/module-b/v1/index.js create mode 100644 test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/cjs/module-a/v1/index.js create mode 100644 test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/cjs/module-b/v1/index.js delete mode 100644 test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/es/module-a/index.js delete mode 100644 test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/es/module-b/index.js create mode 100644 test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/system/module-a/v1/index.js create mode 100644 test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/system/module-b/v1/index.js 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 index 454bc294b9b..650ae278b0d 100644 --- 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 @@ -1,5 +1,5 @@ module.exports = { - description: 'confirm exports are preserved when exporting a module', + 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/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/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 index 7aa438ff154..537dda397a8 100644 --- 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 @@ -1,4 +1,4 @@ -import * as index$0 from './module-a/v1/index.js'; -export { index$0 as ModuleA_V1 }; +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/index.js b/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/es/module-a/index.js deleted file mode 100644 index a8158380482..00000000000 --- a/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/es/module-a/index.js +++ /dev/null @@ -1,3 +0,0 @@ -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/index.js b/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/es/module-b/index.js deleted file mode 100644 index 338a266e13c..00000000000 --- a/test/chunking-form/samples/preserve-modules-nested-barrel-es-export/_expected/es/module-b/index.js +++ /dev/null @@ -1,3 +0,0 @@ -const TEST_MODULE_B = 'A'; - -export { TEST_MODULE_B }; 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'); + + } + }; +}); From 58d6d8946a3123bcb948e755fad29e240b7cf4c4 Mon Sep 17 00:00:00 2001 From: Kamran Ayub Date: Tue, 10 Mar 2020 10:48:00 -0500 Subject: [PATCH 04/10] Set chunkOrExternalModule.variableName in deconflictImportsEsm --- src/utils/deconflictChunk.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/utils/deconflictChunk.ts b/src/utils/deconflictChunk.ts index 6f0d78c0667..5e759b5640a 100644 --- a/src/utils/deconflictChunk.ts +++ b/src/utils/deconflictChunk.ts @@ -51,9 +51,18 @@ export function deconflictChunk( function deconflictImportsEsm( usedNames: Set, imports: Set, - _dependencies: Set, + dependencies: Set, interop: boolean ) { + for (const chunkOrExternalModule of dependencies) { + // only deconflict index aliased variables for ESM/System + if (chunkOrExternalModule.variableName === 'index') { + chunkOrExternalModule.variableName = getSafeName( + chunkOrExternalModule.variableName, + usedNames + ); + } + } for (const variable of imports) { const module = variable.module; const name = variable.name; From 53b45c4ebf32c80e975b33dc5d10ad26f6663b9e Mon Sep 17 00:00:00 2001 From: Kamran Ayub Date: Wed, 11 Mar 2020 10:57:38 -0500 Subject: [PATCH 05/10] Dconflict deps when preserveModules is true --- src/utils/deconflictChunk.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/utils/deconflictChunk.ts b/src/utils/deconflictChunk.ts index 5e759b5640a..1f7d903691a 100644 --- a/src/utils/deconflictChunk.ts +++ b/src/utils/deconflictChunk.ts @@ -54,15 +54,16 @@ function deconflictImportsEsm( dependencies: Set, interop: boolean ) { - for (const chunkOrExternalModule of dependencies) { - // only deconflict index aliased variables for ESM/System - if (chunkOrExternalModule.variableName === 'index') { + // only deconflict all dependencies when preserveModules is enabled + if (interop) { + for (const chunkOrExternalModule of dependencies) { chunkOrExternalModule.variableName = getSafeName( chunkOrExternalModule.variableName, usedNames ); } } + for (const variable of imports) { const module = variable.module; const name = variable.name; From 4a8dbe8ea3c824ff5a2a6fdefb97e1dda15e37f1 Mon Sep 17 00:00:00 2001 From: Kamran Ayub Date: Wed, 11 Mar 2020 10:59:45 -0500 Subject: [PATCH 06/10] Update system-exports-wrap-pure-annotation --- .../_expected/es/main1.js | 4 ++-- .../_expected/es/main2.js | 4 ++-- .../_expected/system/main1.js | 6 +++--- .../_expected/system/main2.js | 6 +++--- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/test/chunking-form/samples/system-exports-wrap-pure-annotation/_expected/es/main1.js b/test/chunking-form/samples/system-exports-wrap-pure-annotation/_expected/es/main1.js index f30deaee122..6c15dc212fe 100644 --- a/test/chunking-form/samples/system-exports-wrap-pure-annotation/_expected/es/main1.js +++ b/test/chunking-form/samples/system-exports-wrap-pure-annotation/_expected/es/main1.js @@ -1,3 +1,3 @@ -import { d as dep } from './generated-dep.js'; +import { d as dep$1 } from './generated-dep.js'; -console.log('1', dep); +console.log('1', dep$1); diff --git a/test/chunking-form/samples/system-exports-wrap-pure-annotation/_expected/es/main2.js b/test/chunking-form/samples/system-exports-wrap-pure-annotation/_expected/es/main2.js index 831adcfdfad..220f12bbd23 100644 --- a/test/chunking-form/samples/system-exports-wrap-pure-annotation/_expected/es/main2.js +++ b/test/chunking-form/samples/system-exports-wrap-pure-annotation/_expected/es/main2.js @@ -1,3 +1,3 @@ -import { d as dep } from './generated-dep.js'; +import { d as dep$1 } from './generated-dep.js'; -console.log('2', dep); +console.log('2', dep$1); diff --git a/test/chunking-form/samples/system-exports-wrap-pure-annotation/_expected/system/main1.js b/test/chunking-form/samples/system-exports-wrap-pure-annotation/_expected/system/main1.js index 8daf064dae0..aabfd74e19e 100644 --- a/test/chunking-form/samples/system-exports-wrap-pure-annotation/_expected/system/main1.js +++ b/test/chunking-form/samples/system-exports-wrap-pure-annotation/_expected/system/main1.js @@ -1,13 +1,13 @@ System.register(['./generated-dep.js'], function () { 'use strict'; - var dep; + var dep$1; return { setters: [function (module) { - dep = module.d; + dep$1 = module.d; }], execute: function () { - console.log('1', dep); + console.log('1', dep$1); } }; diff --git a/test/chunking-form/samples/system-exports-wrap-pure-annotation/_expected/system/main2.js b/test/chunking-form/samples/system-exports-wrap-pure-annotation/_expected/system/main2.js index 23664a93e78..d39e0645984 100644 --- a/test/chunking-form/samples/system-exports-wrap-pure-annotation/_expected/system/main2.js +++ b/test/chunking-form/samples/system-exports-wrap-pure-annotation/_expected/system/main2.js @@ -1,13 +1,13 @@ System.register(['./generated-dep.js'], function () { 'use strict'; - var dep; + var dep$1; return { setters: [function (module) { - dep = module.d; + dep$1 = module.d; }], execute: function () { - console.log('2', dep); + console.log('2', dep$1); } }; From 15cf5ab233dfb97b92577bb89a86015afceae7c8 Mon Sep 17 00:00:00 2001 From: Kamran Ayub Date: Wed, 11 Mar 2020 11:18:20 -0500 Subject: [PATCH 07/10] Actually use preserveModules flag --- src/utils/deconflictChunk.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/utils/deconflictChunk.ts b/src/utils/deconflictChunk.ts index 1f7d903691a..c6cd13eb067 100644 --- a/src/utils/deconflictChunk.ts +++ b/src/utils/deconflictChunk.ts @@ -52,10 +52,13 @@ function deconflictImportsEsm( usedNames: Set, imports: Set, dependencies: Set, - interop: boolean + interop: boolean, + preserveModules: boolean ) { // only deconflict all dependencies when preserveModules is enabled - if (interop) { + // TODO: This isn't ideal, the wider fix is more involved, see: + // https://github.com/rollup/rollup/pull/3435#discussion_r390792792 + if (preserveModules) { for (const chunkOrExternalModule of dependencies) { chunkOrExternalModule.variableName = getSafeName( chunkOrExternalModule.variableName, From b804496286a79d3c3a020193e9460457fbff7874 Mon Sep 17 00:00:00 2001 From: Kamran Ayub Date: Wed, 11 Mar 2020 11:22:17 -0500 Subject: [PATCH 08/10] Only deconflict deps in esm to minimize impact --- src/utils/deconflictChunk.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/utils/deconflictChunk.ts b/src/utils/deconflictChunk.ts index c6cd13eb067..26995325c34 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 }; @@ -66,7 +66,15 @@ function deconflictImportsEsm( ); } } + deconflictImportsEsmOrSystem(usedNames, imports, dependencies, interop); +} +function deconflictImportsEsmOrSystem( + usedNames: Set, + imports: Set, + _dependencies: Set, + interop: boolean +) { for (const variable of imports) { const module = variable.module; const name = variable.name; From 04a4385e0edf68541e01f6d955ba29c1d909b624 Mon Sep 17 00:00:00 2001 From: Kamran Ayub Date: Wed, 11 Mar 2020 11:25:25 -0500 Subject: [PATCH 09/10] Update tests expected output --- .../_expected/es/_virtual/_external_commonjs-external | 4 ++-- .../_expected/es/_virtual/other.js_commonjs-proxy | 4 ++-- .../preserve-modules-commonjs/_expected/es/commonjs.js | 4 ++-- .../samples/preserve-modules-commonjs/_expected/es/main.js | 4 ++-- .../avoid-imports-preserve-modules/_expected/es/main.js | 4 ++-- .../avoid-imports-preserve-modules/_expected/es/one.js | 4 ++-- .../_expected/es/main1.js | 4 ++-- .../_expected/es/main2.js | 4 ++-- .../_expected/system/main1.js | 6 +++--- .../_expected/system/main2.js | 6 +++--- 10 files changed, 22 insertions(+), 22 deletions(-) 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/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/chunking-form/samples/system-exports-wrap-pure-annotation/_expected/es/main1.js b/test/chunking-form/samples/system-exports-wrap-pure-annotation/_expected/es/main1.js index 6c15dc212fe..f30deaee122 100644 --- a/test/chunking-form/samples/system-exports-wrap-pure-annotation/_expected/es/main1.js +++ b/test/chunking-form/samples/system-exports-wrap-pure-annotation/_expected/es/main1.js @@ -1,3 +1,3 @@ -import { d as dep$1 } from './generated-dep.js'; +import { d as dep } from './generated-dep.js'; -console.log('1', dep$1); +console.log('1', dep); diff --git a/test/chunking-form/samples/system-exports-wrap-pure-annotation/_expected/es/main2.js b/test/chunking-form/samples/system-exports-wrap-pure-annotation/_expected/es/main2.js index 220f12bbd23..831adcfdfad 100644 --- a/test/chunking-form/samples/system-exports-wrap-pure-annotation/_expected/es/main2.js +++ b/test/chunking-form/samples/system-exports-wrap-pure-annotation/_expected/es/main2.js @@ -1,3 +1,3 @@ -import { d as dep$1 } from './generated-dep.js'; +import { d as dep } from './generated-dep.js'; -console.log('2', dep$1); +console.log('2', dep); diff --git a/test/chunking-form/samples/system-exports-wrap-pure-annotation/_expected/system/main1.js b/test/chunking-form/samples/system-exports-wrap-pure-annotation/_expected/system/main1.js index aabfd74e19e..8daf064dae0 100644 --- a/test/chunking-form/samples/system-exports-wrap-pure-annotation/_expected/system/main1.js +++ b/test/chunking-form/samples/system-exports-wrap-pure-annotation/_expected/system/main1.js @@ -1,13 +1,13 @@ System.register(['./generated-dep.js'], function () { 'use strict'; - var dep$1; + var dep; return { setters: [function (module) { - dep$1 = module.d; + dep = module.d; }], execute: function () { - console.log('1', dep$1); + console.log('1', dep); } }; diff --git a/test/chunking-form/samples/system-exports-wrap-pure-annotation/_expected/system/main2.js b/test/chunking-form/samples/system-exports-wrap-pure-annotation/_expected/system/main2.js index d39e0645984..23664a93e78 100644 --- a/test/chunking-form/samples/system-exports-wrap-pure-annotation/_expected/system/main2.js +++ b/test/chunking-form/samples/system-exports-wrap-pure-annotation/_expected/system/main2.js @@ -1,13 +1,13 @@ System.register(['./generated-dep.js'], function () { 'use strict'; - var dep$1; + var dep; return { setters: [function (module) { - dep$1 = module.d; + dep = module.d; }], execute: function () { - console.log('2', dep$1); + console.log('2', dep); } }; From 3e97deeb088baa039d37de1ba9182e5d77589c91 Mon Sep 17 00:00:00 2001 From: Kamran Ayub Date: Wed, 11 Mar 2020 11:34:46 -0500 Subject: [PATCH 10/10] Update test, add more context to comment --- src/utils/deconflictChunk.ts | 8 +++++--- test/misc/bundle-information.js | 6 +++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/utils/deconflictChunk.ts b/src/utils/deconflictChunk.ts index 26995325c34..e692d25f5d9 100644 --- a/src/utils/deconflictChunk.ts +++ b/src/utils/deconflictChunk.ts @@ -55,9 +55,11 @@ function deconflictImportsEsm( interop: boolean, preserveModules: boolean ) { - // only deconflict all dependencies when preserveModules is enabled - // TODO: This isn't ideal, the wider fix is more involved, see: - // https://github.com/rollup/rollup/pull/3435#discussion_r390792792 + // 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( 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 } }, {