diff --git a/src/utils/chunkColouring.ts b/src/utils/chunkColouring.ts index 973f26ee708..c310f040fe3 100644 --- a/src/utils/chunkColouring.ts +++ b/src/utils/chunkColouring.ts @@ -11,7 +11,7 @@ export function assignChunkColouringHashes( let currentEntry: Module, currentEntryHash: Uint8Array; let modulesVisitedForCurrentEntry: { [id: string]: boolean }; const handledEntryPoints: { [id: string]: boolean } = {}; - const dynamicImports: Set = new Set(); + const dynamicImports: Module[] = []; const addCurrentEntryColourToModule = (module: Module) => { if (currentEntry.chunkAlias) { @@ -36,7 +36,7 @@ export function assignChunkColouringHashes( resolution.isDynamicEntryPoint && !resolution.chunkAlias ) { - dynamicImports.add(resolution); + dynamicImports.push(resolution); } } }; @@ -72,10 +72,11 @@ Try defining "${chunkName}" first in the manualChunks definitions of the Rollup addCurrentEntryColourToModule(currentEntry); } - for (currentEntry of Array.from(dynamicImports)) { + for (currentEntry of dynamicImports) { if (handledEntryPoints[currentEntry.id]) { continue; } + handledEntryPoints[currentEntry.id] = true; currentEntryHash = randomUint8Array(10); modulesVisitedForCurrentEntry = { [currentEntry.id]: null }; addCurrentEntryColourToModule(currentEntry); diff --git a/test/chunking-form/samples/nested-dynamic-imports/_config.js b/test/chunking-form/samples/nested-dynamic-imports/_config.js new file mode 100644 index 00000000000..f96b6c536d2 --- /dev/null +++ b/test/chunking-form/samples/nested-dynamic-imports/_config.js @@ -0,0 +1,6 @@ +module.exports = { + description: 'handles dynamic imports containing dynamic imports', + options: { + input: 'main' + } +}; diff --git a/test/chunking-form/samples/nested-dynamic-imports/_expected/amd/generated-chunk.js b/test/chunking-form/samples/nested-dynamic-imports/_expected/amd/generated-chunk.js new file mode 100644 index 00000000000..986051119fc --- /dev/null +++ b/test/chunking-form/samples/nested-dynamic-imports/_expected/amd/generated-chunk.js @@ -0,0 +1,6 @@ +define(['require'], function (require) { 'use strict'; + + new Promise(function (resolve, reject) { require(['./generated-chunk2.js'], resolve, reject) }); + console.log('dynamic1'); + +}); diff --git a/test/chunking-form/samples/nested-dynamic-imports/_expected/amd/generated-chunk2.js b/test/chunking-form/samples/nested-dynamic-imports/_expected/amd/generated-chunk2.js new file mode 100644 index 00000000000..1b30cdd57b8 --- /dev/null +++ b/test/chunking-form/samples/nested-dynamic-imports/_expected/amd/generated-chunk2.js @@ -0,0 +1,6 @@ +define(['require'], function (require) { 'use strict'; + + new Promise(function (resolve, reject) { require(['./generated-chunk3.js'], resolve, reject) }); + console.log('dynamic2'); + +}); diff --git a/test/chunking-form/samples/nested-dynamic-imports/_expected/amd/generated-chunk3.js b/test/chunking-form/samples/nested-dynamic-imports/_expected/amd/generated-chunk3.js new file mode 100644 index 00000000000..429e468a258 --- /dev/null +++ b/test/chunking-form/samples/nested-dynamic-imports/_expected/amd/generated-chunk3.js @@ -0,0 +1,6 @@ +define(['require'], function (require) { 'use strict'; + + new Promise(function (resolve, reject) { require(['./generated-chunk4.js'], resolve, reject) }); + console.log('dynamic3'); + +}); diff --git a/test/chunking-form/samples/nested-dynamic-imports/_expected/amd/generated-chunk4.js b/test/chunking-form/samples/nested-dynamic-imports/_expected/amd/generated-chunk4.js new file mode 100644 index 00000000000..fd70ed340c9 --- /dev/null +++ b/test/chunking-form/samples/nested-dynamic-imports/_expected/amd/generated-chunk4.js @@ -0,0 +1,6 @@ +define(['require'], function (require) { 'use strict'; + + new Promise(function (resolve, reject) { require(['./generated-chunk5.js'], resolve, reject) }); + console.log('dynamic4'); + +}); diff --git a/test/chunking-form/samples/nested-dynamic-imports/_expected/amd/generated-chunk5.js b/test/chunking-form/samples/nested-dynamic-imports/_expected/amd/generated-chunk5.js new file mode 100644 index 00000000000..3bbcbbb8a61 --- /dev/null +++ b/test/chunking-form/samples/nested-dynamic-imports/_expected/amd/generated-chunk5.js @@ -0,0 +1,5 @@ +define(function () { 'use strict'; + + console.log('dynamic5'); + +}); diff --git a/test/chunking-form/samples/nested-dynamic-imports/_expected/amd/main.js b/test/chunking-form/samples/nested-dynamic-imports/_expected/amd/main.js new file mode 100644 index 00000000000..c8a31868ae7 --- /dev/null +++ b/test/chunking-form/samples/nested-dynamic-imports/_expected/amd/main.js @@ -0,0 +1,6 @@ +define(['require'], function (require) { 'use strict'; + + new Promise(function (resolve, reject) { require(['./generated-chunk.js'], resolve, reject) }); + console.log('main'); + +}); diff --git a/test/chunking-form/samples/nested-dynamic-imports/_expected/cjs/generated-chunk.js b/test/chunking-form/samples/nested-dynamic-imports/_expected/cjs/generated-chunk.js new file mode 100644 index 00000000000..b09e30b302a --- /dev/null +++ b/test/chunking-form/samples/nested-dynamic-imports/_expected/cjs/generated-chunk.js @@ -0,0 +1,4 @@ +'use strict'; + +Promise.resolve(require('./generated-chunk2.js')); +console.log('dynamic1'); diff --git a/test/chunking-form/samples/nested-dynamic-imports/_expected/cjs/generated-chunk2.js b/test/chunking-form/samples/nested-dynamic-imports/_expected/cjs/generated-chunk2.js new file mode 100644 index 00000000000..7d9a89fbaf2 --- /dev/null +++ b/test/chunking-form/samples/nested-dynamic-imports/_expected/cjs/generated-chunk2.js @@ -0,0 +1,4 @@ +'use strict'; + +Promise.resolve(require('./generated-chunk3.js')); +console.log('dynamic2'); diff --git a/test/chunking-form/samples/nested-dynamic-imports/_expected/cjs/generated-chunk3.js b/test/chunking-form/samples/nested-dynamic-imports/_expected/cjs/generated-chunk3.js new file mode 100644 index 00000000000..88071473204 --- /dev/null +++ b/test/chunking-form/samples/nested-dynamic-imports/_expected/cjs/generated-chunk3.js @@ -0,0 +1,4 @@ +'use strict'; + +Promise.resolve(require('./generated-chunk4.js')); +console.log('dynamic3'); diff --git a/test/chunking-form/samples/nested-dynamic-imports/_expected/cjs/generated-chunk4.js b/test/chunking-form/samples/nested-dynamic-imports/_expected/cjs/generated-chunk4.js new file mode 100644 index 00000000000..214f7ec28ca --- /dev/null +++ b/test/chunking-form/samples/nested-dynamic-imports/_expected/cjs/generated-chunk4.js @@ -0,0 +1,4 @@ +'use strict'; + +Promise.resolve(require('./generated-chunk5.js')); +console.log('dynamic4'); diff --git a/test/chunking-form/samples/nested-dynamic-imports/_expected/cjs/generated-chunk5.js b/test/chunking-form/samples/nested-dynamic-imports/_expected/cjs/generated-chunk5.js new file mode 100644 index 00000000000..49db69799ac --- /dev/null +++ b/test/chunking-form/samples/nested-dynamic-imports/_expected/cjs/generated-chunk5.js @@ -0,0 +1,3 @@ +'use strict'; + +console.log('dynamic5'); diff --git a/test/chunking-form/samples/nested-dynamic-imports/_expected/cjs/main.js b/test/chunking-form/samples/nested-dynamic-imports/_expected/cjs/main.js new file mode 100644 index 00000000000..5b3ffb7c6e4 --- /dev/null +++ b/test/chunking-form/samples/nested-dynamic-imports/_expected/cjs/main.js @@ -0,0 +1,4 @@ +'use strict'; + +Promise.resolve(require('./generated-chunk.js')); +console.log('main'); diff --git a/test/chunking-form/samples/nested-dynamic-imports/_expected/es/generated-chunk.js b/test/chunking-form/samples/nested-dynamic-imports/_expected/es/generated-chunk.js new file mode 100644 index 00000000000..04888332178 --- /dev/null +++ b/test/chunking-form/samples/nested-dynamic-imports/_expected/es/generated-chunk.js @@ -0,0 +1,2 @@ +import('./generated-chunk2.js'); +console.log('dynamic1'); diff --git a/test/chunking-form/samples/nested-dynamic-imports/_expected/es/generated-chunk2.js b/test/chunking-form/samples/nested-dynamic-imports/_expected/es/generated-chunk2.js new file mode 100644 index 00000000000..f43111637d5 --- /dev/null +++ b/test/chunking-form/samples/nested-dynamic-imports/_expected/es/generated-chunk2.js @@ -0,0 +1,2 @@ +import('./generated-chunk3.js'); +console.log('dynamic2'); diff --git a/test/chunking-form/samples/nested-dynamic-imports/_expected/es/generated-chunk3.js b/test/chunking-form/samples/nested-dynamic-imports/_expected/es/generated-chunk3.js new file mode 100644 index 00000000000..b830dba19da --- /dev/null +++ b/test/chunking-form/samples/nested-dynamic-imports/_expected/es/generated-chunk3.js @@ -0,0 +1,2 @@ +import('./generated-chunk4.js'); +console.log('dynamic3'); diff --git a/test/chunking-form/samples/nested-dynamic-imports/_expected/es/generated-chunk4.js b/test/chunking-form/samples/nested-dynamic-imports/_expected/es/generated-chunk4.js new file mode 100644 index 00000000000..0ea2bc62e07 --- /dev/null +++ b/test/chunking-form/samples/nested-dynamic-imports/_expected/es/generated-chunk4.js @@ -0,0 +1,2 @@ +import('./generated-chunk5.js'); +console.log('dynamic4'); diff --git a/test/chunking-form/samples/nested-dynamic-imports/_expected/es/generated-chunk5.js b/test/chunking-form/samples/nested-dynamic-imports/_expected/es/generated-chunk5.js new file mode 100644 index 00000000000..926214e0879 --- /dev/null +++ b/test/chunking-form/samples/nested-dynamic-imports/_expected/es/generated-chunk5.js @@ -0,0 +1 @@ +console.log('dynamic5'); diff --git a/test/chunking-form/samples/nested-dynamic-imports/_expected/es/main.js b/test/chunking-form/samples/nested-dynamic-imports/_expected/es/main.js new file mode 100644 index 00000000000..0d08731bb46 --- /dev/null +++ b/test/chunking-form/samples/nested-dynamic-imports/_expected/es/main.js @@ -0,0 +1,2 @@ +import('./generated-chunk.js'); +console.log('main'); diff --git a/test/chunking-form/samples/nested-dynamic-imports/_expected/system/generated-chunk.js b/test/chunking-form/samples/nested-dynamic-imports/_expected/system/generated-chunk.js new file mode 100644 index 00000000000..10450928e02 --- /dev/null +++ b/test/chunking-form/samples/nested-dynamic-imports/_expected/system/generated-chunk.js @@ -0,0 +1,11 @@ +System.register([], function (exports, module) { + 'use strict'; + return { + execute: function () { + + module.import('./generated-chunk2.js'); + console.log('dynamic1'); + + } + }; +}); diff --git a/test/chunking-form/samples/nested-dynamic-imports/_expected/system/generated-chunk2.js b/test/chunking-form/samples/nested-dynamic-imports/_expected/system/generated-chunk2.js new file mode 100644 index 00000000000..8a981954622 --- /dev/null +++ b/test/chunking-form/samples/nested-dynamic-imports/_expected/system/generated-chunk2.js @@ -0,0 +1,11 @@ +System.register([], function (exports, module) { + 'use strict'; + return { + execute: function () { + + module.import('./generated-chunk3.js'); + console.log('dynamic2'); + + } + }; +}); diff --git a/test/chunking-form/samples/nested-dynamic-imports/_expected/system/generated-chunk3.js b/test/chunking-form/samples/nested-dynamic-imports/_expected/system/generated-chunk3.js new file mode 100644 index 00000000000..913ec0b469d --- /dev/null +++ b/test/chunking-form/samples/nested-dynamic-imports/_expected/system/generated-chunk3.js @@ -0,0 +1,11 @@ +System.register([], function (exports, module) { + 'use strict'; + return { + execute: function () { + + module.import('./generated-chunk4.js'); + console.log('dynamic3'); + + } + }; +}); diff --git a/test/chunking-form/samples/nested-dynamic-imports/_expected/system/generated-chunk4.js b/test/chunking-form/samples/nested-dynamic-imports/_expected/system/generated-chunk4.js new file mode 100644 index 00000000000..928a453dd1c --- /dev/null +++ b/test/chunking-form/samples/nested-dynamic-imports/_expected/system/generated-chunk4.js @@ -0,0 +1,11 @@ +System.register([], function (exports, module) { + 'use strict'; + return { + execute: function () { + + module.import('./generated-chunk5.js'); + console.log('dynamic4'); + + } + }; +}); diff --git a/test/chunking-form/samples/nested-dynamic-imports/_expected/system/generated-chunk5.js b/test/chunking-form/samples/nested-dynamic-imports/_expected/system/generated-chunk5.js new file mode 100644 index 00000000000..3c6edbde62a --- /dev/null +++ b/test/chunking-form/samples/nested-dynamic-imports/_expected/system/generated-chunk5.js @@ -0,0 +1,10 @@ +System.register([], function (exports, module) { + 'use strict'; + return { + execute: function () { + + console.log('dynamic5'); + + } + }; +}); diff --git a/test/chunking-form/samples/nested-dynamic-imports/_expected/system/main.js b/test/chunking-form/samples/nested-dynamic-imports/_expected/system/main.js new file mode 100644 index 00000000000..61f5627b5c3 --- /dev/null +++ b/test/chunking-form/samples/nested-dynamic-imports/_expected/system/main.js @@ -0,0 +1,11 @@ +System.register([], function (exports, module) { + 'use strict'; + return { + execute: function () { + + module.import('./generated-chunk.js'); + console.log('main'); + + } + }; +}); diff --git a/test/chunking-form/samples/nested-dynamic-imports/dynamic1.js b/test/chunking-form/samples/nested-dynamic-imports/dynamic1.js new file mode 100644 index 00000000000..a760f02104c --- /dev/null +++ b/test/chunking-form/samples/nested-dynamic-imports/dynamic1.js @@ -0,0 +1,2 @@ +import('./dynamic2.js'); +console.log('dynamic1'); diff --git a/test/chunking-form/samples/nested-dynamic-imports/dynamic2.js b/test/chunking-form/samples/nested-dynamic-imports/dynamic2.js new file mode 100644 index 00000000000..15e993beea0 --- /dev/null +++ b/test/chunking-form/samples/nested-dynamic-imports/dynamic2.js @@ -0,0 +1,2 @@ +import('./dynamic3.js'); +console.log('dynamic2'); diff --git a/test/chunking-form/samples/nested-dynamic-imports/dynamic3.js b/test/chunking-form/samples/nested-dynamic-imports/dynamic3.js new file mode 100644 index 00000000000..0c1c540806c --- /dev/null +++ b/test/chunking-form/samples/nested-dynamic-imports/dynamic3.js @@ -0,0 +1,2 @@ +import('./dynamic4.js'); +console.log('dynamic3'); diff --git a/test/chunking-form/samples/nested-dynamic-imports/dynamic4.js b/test/chunking-form/samples/nested-dynamic-imports/dynamic4.js new file mode 100644 index 00000000000..b39067b0eae --- /dev/null +++ b/test/chunking-form/samples/nested-dynamic-imports/dynamic4.js @@ -0,0 +1,2 @@ +import('./dynamic5.js'); +console.log('dynamic4'); diff --git a/test/chunking-form/samples/nested-dynamic-imports/dynamic5.js b/test/chunking-form/samples/nested-dynamic-imports/dynamic5.js new file mode 100644 index 00000000000..926214e0879 --- /dev/null +++ b/test/chunking-form/samples/nested-dynamic-imports/dynamic5.js @@ -0,0 +1 @@ +console.log('dynamic5'); diff --git a/test/chunking-form/samples/nested-dynamic-imports/main.js b/test/chunking-form/samples/nested-dynamic-imports/main.js new file mode 100644 index 00000000000..8f6b6f5d570 --- /dev/null +++ b/test/chunking-form/samples/nested-dynamic-imports/main.js @@ -0,0 +1,2 @@ +import('./dynamic1.js'); +console.log('main');