From a797c344b307ed5f264900225ab2009d1183fb90 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Tue, 2 May 2023 21:24:46 +0200 Subject: [PATCH 01/13] Tests --- src/utils/chunkAssignment.ts | 2 ++ .../samples/entry-without-code-dynamic/_config.js | 8 ++++++++ .../_expected/amd/generated-dynamic.js | 7 +++++++ .../_expected/amd/main1.js | 5 +++++ .../_expected/amd/main2.js | 5 +++++ .../_expected/cjs/generated-dynamic.js | 5 +++++ .../_expected/cjs/main1.js | 5 +++++ .../_expected/cjs/main2.js | 3 +++ .../_expected/es/generated-dynamic.js | 3 +++ .../_expected/es/main1.js | 3 +++ .../_expected/es/main2.js | 1 + .../_expected/system/generated-dynamic.js | 10 ++++++++++ .../_expected/system/main1.js | 14 ++++++++++++++ .../_expected/system/main2.js | 10 ++++++++++ .../samples/entry-without-code-dynamic/dynamic.js | 1 + .../samples/entry-without-code-dynamic/foo.js | 1 + .../samples/entry-without-code-dynamic/main1.js | 3 +++ .../samples/entry-without-code-dynamic/main2.js | 1 + .../samples/entry-without-code/_config.js | 8 ++++++++ .../entry-without-code/_expected/amd/main1.js | 5 +++++ .../entry-without-code/_expected/amd/main2.js | 7 +++++++ .../entry-without-code/_expected/cjs/main1.js | 5 +++++ .../entry-without-code/_expected/cjs/main2.js | 5 +++++ .../entry-without-code/_expected/es/main1.js | 3 +++ .../entry-without-code/_expected/es/main2.js | 3 +++ .../entry-without-code/_expected/system/main1.js | 14 ++++++++++++++ .../entry-without-code/_expected/system/main2.js | 10 ++++++++++ .../samples/entry-without-code/foo.js | 1 + .../samples/entry-without-code/main1.js | 3 +++ .../samples/entry-without-code/main2.js | 1 + 30 files changed, 152 insertions(+) create mode 100644 test/chunking-form/samples/entry-without-code-dynamic/_config.js create mode 100644 test/chunking-form/samples/entry-without-code-dynamic/_expected/amd/generated-dynamic.js create mode 100644 test/chunking-form/samples/entry-without-code-dynamic/_expected/amd/main1.js create mode 100644 test/chunking-form/samples/entry-without-code-dynamic/_expected/amd/main2.js create mode 100644 test/chunking-form/samples/entry-without-code-dynamic/_expected/cjs/generated-dynamic.js create mode 100644 test/chunking-form/samples/entry-without-code-dynamic/_expected/cjs/main1.js create mode 100644 test/chunking-form/samples/entry-without-code-dynamic/_expected/cjs/main2.js create mode 100644 test/chunking-form/samples/entry-without-code-dynamic/_expected/es/generated-dynamic.js create mode 100644 test/chunking-form/samples/entry-without-code-dynamic/_expected/es/main1.js create mode 100644 test/chunking-form/samples/entry-without-code-dynamic/_expected/es/main2.js create mode 100644 test/chunking-form/samples/entry-without-code-dynamic/_expected/system/generated-dynamic.js create mode 100644 test/chunking-form/samples/entry-without-code-dynamic/_expected/system/main1.js create mode 100644 test/chunking-form/samples/entry-without-code-dynamic/_expected/system/main2.js create mode 100644 test/chunking-form/samples/entry-without-code-dynamic/dynamic.js create mode 100644 test/chunking-form/samples/entry-without-code-dynamic/foo.js create mode 100644 test/chunking-form/samples/entry-without-code-dynamic/main1.js create mode 100644 test/chunking-form/samples/entry-without-code-dynamic/main2.js create mode 100644 test/chunking-form/samples/entry-without-code/_config.js create mode 100644 test/chunking-form/samples/entry-without-code/_expected/amd/main1.js create mode 100644 test/chunking-form/samples/entry-without-code/_expected/amd/main2.js create mode 100644 test/chunking-form/samples/entry-without-code/_expected/cjs/main1.js create mode 100644 test/chunking-form/samples/entry-without-code/_expected/cjs/main2.js create mode 100644 test/chunking-form/samples/entry-without-code/_expected/es/main1.js create mode 100644 test/chunking-form/samples/entry-without-code/_expected/es/main2.js create mode 100644 test/chunking-form/samples/entry-without-code/_expected/system/main1.js create mode 100644 test/chunking-form/samples/entry-without-code/_expected/system/main2.js create mode 100644 test/chunking-form/samples/entry-without-code/foo.js create mode 100644 test/chunking-form/samples/entry-without-code/main1.js create mode 100644 test/chunking-form/samples/entry-without-code/main2.js diff --git a/src/utils/chunkAssignment.ts b/src/utils/chunkAssignment.ts index fecc4abc728..938620ec7e5 100644 --- a/src/utils/chunkAssignment.ts +++ b/src/utils/chunkAssignment.ts @@ -169,6 +169,8 @@ export function getChunkAssignments( return chunkDefinitions; } +// TODO Lukas to prevent empty chunks, find chunks that contain only a single +// empty module and see if there is a valid merge target for them function getChunkDefinitionsFromManualChunks( manualChunkAliasByEntry: ReadonlyMap ): { chunkDefinitions: ChunkDefinitions; modulesInManualChunks: Set } { diff --git a/test/chunking-form/samples/entry-without-code-dynamic/_config.js b/test/chunking-form/samples/entry-without-code-dynamic/_config.js new file mode 100644 index 00000000000..bcdd9e3dae4 --- /dev/null +++ b/test/chunking-form/samples/entry-without-code-dynamic/_config.js @@ -0,0 +1,8 @@ +module.exports = defineTest({ + solo: true, + description: + 'optimizes chunks when a dynamic entry point without own code is imported from another entry', + options: { + input: ['main1.js', 'main2.js'] + } +}); diff --git a/test/chunking-form/samples/entry-without-code-dynamic/_expected/amd/generated-dynamic.js b/test/chunking-form/samples/entry-without-code-dynamic/_expected/amd/generated-dynamic.js new file mode 100644 index 00000000000..6fd637014ea --- /dev/null +++ b/test/chunking-form/samples/entry-without-code-dynamic/_expected/amd/generated-dynamic.js @@ -0,0 +1,7 @@ +define(['exports'], (function (exports) { 'use strict'; + + const foo = 'foo'; + + exports.foo = foo; + +})); diff --git a/test/chunking-form/samples/entry-without-code-dynamic/_expected/amd/main1.js b/test/chunking-form/samples/entry-without-code-dynamic/_expected/amd/main1.js new file mode 100644 index 00000000000..0d4971e9c75 --- /dev/null +++ b/test/chunking-form/samples/entry-without-code-dynamic/_expected/amd/main1.js @@ -0,0 +1,5 @@ +define(['./generated-dynamic'], (function (dynamic) { 'use strict'; + + console.log(dynamic.foo); + +})); diff --git a/test/chunking-form/samples/entry-without-code-dynamic/_expected/amd/main2.js b/test/chunking-form/samples/entry-without-code-dynamic/_expected/amd/main2.js new file mode 100644 index 00000000000..f6f80ef24e4 --- /dev/null +++ b/test/chunking-form/samples/entry-without-code-dynamic/_expected/amd/main2.js @@ -0,0 +1,5 @@ +define(['require'], (function (require) { 'use strict'; + + new Promise(function (resolve, reject) { require(['./generated-dynamic'], resolve, reject); }).then(console.log); + +})); diff --git a/test/chunking-form/samples/entry-without-code-dynamic/_expected/cjs/generated-dynamic.js b/test/chunking-form/samples/entry-without-code-dynamic/_expected/cjs/generated-dynamic.js new file mode 100644 index 00000000000..71c76a07cc0 --- /dev/null +++ b/test/chunking-form/samples/entry-without-code-dynamic/_expected/cjs/generated-dynamic.js @@ -0,0 +1,5 @@ +'use strict'; + +const foo = 'foo'; + +exports.foo = foo; diff --git a/test/chunking-form/samples/entry-without-code-dynamic/_expected/cjs/main1.js b/test/chunking-form/samples/entry-without-code-dynamic/_expected/cjs/main1.js new file mode 100644 index 00000000000..df6293c8293 --- /dev/null +++ b/test/chunking-form/samples/entry-without-code-dynamic/_expected/cjs/main1.js @@ -0,0 +1,5 @@ +'use strict'; + +var dynamic = require('./generated-dynamic.js'); + +console.log(dynamic.foo); diff --git a/test/chunking-form/samples/entry-without-code-dynamic/_expected/cjs/main2.js b/test/chunking-form/samples/entry-without-code-dynamic/_expected/cjs/main2.js new file mode 100644 index 00000000000..187995b6f39 --- /dev/null +++ b/test/chunking-form/samples/entry-without-code-dynamic/_expected/cjs/main2.js @@ -0,0 +1,3 @@ +'use strict'; + +Promise.resolve().then(function () { return require('./generated-dynamic.js'); }).then(console.log); diff --git a/test/chunking-form/samples/entry-without-code-dynamic/_expected/es/generated-dynamic.js b/test/chunking-form/samples/entry-without-code-dynamic/_expected/es/generated-dynamic.js new file mode 100644 index 00000000000..d1f660b22f1 --- /dev/null +++ b/test/chunking-form/samples/entry-without-code-dynamic/_expected/es/generated-dynamic.js @@ -0,0 +1,3 @@ +const foo = 'foo'; + +export { foo }; diff --git a/test/chunking-form/samples/entry-without-code-dynamic/_expected/es/main1.js b/test/chunking-form/samples/entry-without-code-dynamic/_expected/es/main1.js new file mode 100644 index 00000000000..9dc76696e25 --- /dev/null +++ b/test/chunking-form/samples/entry-without-code-dynamic/_expected/es/main1.js @@ -0,0 +1,3 @@ +import { foo } from './generated-dynamic.js'; + +console.log(foo); diff --git a/test/chunking-form/samples/entry-without-code-dynamic/_expected/es/main2.js b/test/chunking-form/samples/entry-without-code-dynamic/_expected/es/main2.js new file mode 100644 index 00000000000..57e21c798b1 --- /dev/null +++ b/test/chunking-form/samples/entry-without-code-dynamic/_expected/es/main2.js @@ -0,0 +1 @@ +import('./generated-dynamic.js').then(console.log); diff --git a/test/chunking-form/samples/entry-without-code-dynamic/_expected/system/generated-dynamic.js b/test/chunking-form/samples/entry-without-code-dynamic/_expected/system/generated-dynamic.js new file mode 100644 index 00000000000..da5629348b1 --- /dev/null +++ b/test/chunking-form/samples/entry-without-code-dynamic/_expected/system/generated-dynamic.js @@ -0,0 +1,10 @@ +System.register([], (function (exports) { + 'use strict'; + return { + execute: (function () { + + const foo = exports('foo', 'foo'); + + }) + }; +})); diff --git a/test/chunking-form/samples/entry-without-code-dynamic/_expected/system/main1.js b/test/chunking-form/samples/entry-without-code-dynamic/_expected/system/main1.js new file mode 100644 index 00000000000..e150c52dcf2 --- /dev/null +++ b/test/chunking-form/samples/entry-without-code-dynamic/_expected/system/main1.js @@ -0,0 +1,14 @@ +System.register(['./generated-dynamic.js'], (function () { + 'use strict'; + var foo; + return { + setters: [function (module) { + foo = module.foo; + }], + execute: (function () { + + console.log(foo); + + }) + }; +})); diff --git a/test/chunking-form/samples/entry-without-code-dynamic/_expected/system/main2.js b/test/chunking-form/samples/entry-without-code-dynamic/_expected/system/main2.js new file mode 100644 index 00000000000..7241408dff3 --- /dev/null +++ b/test/chunking-form/samples/entry-without-code-dynamic/_expected/system/main2.js @@ -0,0 +1,10 @@ +System.register([], (function (exports, module) { + 'use strict'; + return { + execute: (function () { + + module.import('./generated-dynamic.js').then(console.log); + + }) + }; +})); diff --git a/test/chunking-form/samples/entry-without-code-dynamic/dynamic.js b/test/chunking-form/samples/entry-without-code-dynamic/dynamic.js new file mode 100644 index 00000000000..4ffe2d41cfe --- /dev/null +++ b/test/chunking-form/samples/entry-without-code-dynamic/dynamic.js @@ -0,0 +1 @@ +export { foo } from './foo.js'; diff --git a/test/chunking-form/samples/entry-without-code-dynamic/foo.js b/test/chunking-form/samples/entry-without-code-dynamic/foo.js new file mode 100644 index 00000000000..3329a7d972f --- /dev/null +++ b/test/chunking-form/samples/entry-without-code-dynamic/foo.js @@ -0,0 +1 @@ +export const foo = 'foo'; diff --git a/test/chunking-form/samples/entry-without-code-dynamic/main1.js b/test/chunking-form/samples/entry-without-code-dynamic/main1.js new file mode 100644 index 00000000000..19ce0a562c7 --- /dev/null +++ b/test/chunking-form/samples/entry-without-code-dynamic/main1.js @@ -0,0 +1,3 @@ +import { foo } from './dynamic.js'; + +console.log(foo); diff --git a/test/chunking-form/samples/entry-without-code-dynamic/main2.js b/test/chunking-form/samples/entry-without-code-dynamic/main2.js new file mode 100644 index 00000000000..b25e0542502 --- /dev/null +++ b/test/chunking-form/samples/entry-without-code-dynamic/main2.js @@ -0,0 +1 @@ +import('./dynamic.js').then(console.log); diff --git a/test/chunking-form/samples/entry-without-code/_config.js b/test/chunking-form/samples/entry-without-code/_config.js new file mode 100644 index 00000000000..c68776ab1f7 --- /dev/null +++ b/test/chunking-form/samples/entry-without-code/_config.js @@ -0,0 +1,8 @@ +module.exports = defineTest({ + solo: true, + description: + 'optimizes chunks when an entry point without own code is imported from another entry', + options: { + input: ['main1.js', 'main2.js'] + } +}); diff --git a/test/chunking-form/samples/entry-without-code/_expected/amd/main1.js b/test/chunking-form/samples/entry-without-code/_expected/amd/main1.js new file mode 100644 index 00000000000..079eb43bd23 --- /dev/null +++ b/test/chunking-form/samples/entry-without-code/_expected/amd/main1.js @@ -0,0 +1,5 @@ +define(['./main2'], (function (main2) { 'use strict'; + + console.log(main2.foo); + +})); diff --git a/test/chunking-form/samples/entry-without-code/_expected/amd/main2.js b/test/chunking-form/samples/entry-without-code/_expected/amd/main2.js new file mode 100644 index 00000000000..6fd637014ea --- /dev/null +++ b/test/chunking-form/samples/entry-without-code/_expected/amd/main2.js @@ -0,0 +1,7 @@ +define(['exports'], (function (exports) { 'use strict'; + + const foo = 'foo'; + + exports.foo = foo; + +})); diff --git a/test/chunking-form/samples/entry-without-code/_expected/cjs/main1.js b/test/chunking-form/samples/entry-without-code/_expected/cjs/main1.js new file mode 100644 index 00000000000..38ef54c59ac --- /dev/null +++ b/test/chunking-form/samples/entry-without-code/_expected/cjs/main1.js @@ -0,0 +1,5 @@ +'use strict'; + +var main2 = require('./main2.js'); + +console.log(main2.foo); diff --git a/test/chunking-form/samples/entry-without-code/_expected/cjs/main2.js b/test/chunking-form/samples/entry-without-code/_expected/cjs/main2.js new file mode 100644 index 00000000000..71c76a07cc0 --- /dev/null +++ b/test/chunking-form/samples/entry-without-code/_expected/cjs/main2.js @@ -0,0 +1,5 @@ +'use strict'; + +const foo = 'foo'; + +exports.foo = foo; diff --git a/test/chunking-form/samples/entry-without-code/_expected/es/main1.js b/test/chunking-form/samples/entry-without-code/_expected/es/main1.js new file mode 100644 index 00000000000..cfccb2a5a43 --- /dev/null +++ b/test/chunking-form/samples/entry-without-code/_expected/es/main1.js @@ -0,0 +1,3 @@ +import { foo } from './main2.js'; + +console.log(foo); diff --git a/test/chunking-form/samples/entry-without-code/_expected/es/main2.js b/test/chunking-form/samples/entry-without-code/_expected/es/main2.js new file mode 100644 index 00000000000..d1f660b22f1 --- /dev/null +++ b/test/chunking-form/samples/entry-without-code/_expected/es/main2.js @@ -0,0 +1,3 @@ +const foo = 'foo'; + +export { foo }; diff --git a/test/chunking-form/samples/entry-without-code/_expected/system/main1.js b/test/chunking-form/samples/entry-without-code/_expected/system/main1.js new file mode 100644 index 00000000000..ef625ce147e --- /dev/null +++ b/test/chunking-form/samples/entry-without-code/_expected/system/main1.js @@ -0,0 +1,14 @@ +System.register(['./main2.js'], (function () { + 'use strict'; + var foo; + return { + setters: [function (module) { + foo = module.foo; + }], + execute: (function () { + + console.log(foo); + + }) + }; +})); diff --git a/test/chunking-form/samples/entry-without-code/_expected/system/main2.js b/test/chunking-form/samples/entry-without-code/_expected/system/main2.js new file mode 100644 index 00000000000..da5629348b1 --- /dev/null +++ b/test/chunking-form/samples/entry-without-code/_expected/system/main2.js @@ -0,0 +1,10 @@ +System.register([], (function (exports) { + 'use strict'; + return { + execute: (function () { + + const foo = exports('foo', 'foo'); + + }) + }; +})); diff --git a/test/chunking-form/samples/entry-without-code/foo.js b/test/chunking-form/samples/entry-without-code/foo.js new file mode 100644 index 00000000000..3329a7d972f --- /dev/null +++ b/test/chunking-form/samples/entry-without-code/foo.js @@ -0,0 +1 @@ +export const foo = 'foo'; diff --git a/test/chunking-form/samples/entry-without-code/main1.js b/test/chunking-form/samples/entry-without-code/main1.js new file mode 100644 index 00000000000..cfccb2a5a43 --- /dev/null +++ b/test/chunking-form/samples/entry-without-code/main1.js @@ -0,0 +1,3 @@ +import { foo } from './main2.js'; + +console.log(foo); diff --git a/test/chunking-form/samples/entry-without-code/main2.js b/test/chunking-form/samples/entry-without-code/main2.js new file mode 100644 index 00000000000..4ffe2d41cfe --- /dev/null +++ b/test/chunking-form/samples/entry-without-code/main2.js @@ -0,0 +1 @@ +export { foo } from './foo.js'; From d10898a8730c5d246aeceff92e01f751a052179c Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Tue, 9 May 2023 21:27:30 +0200 Subject: [PATCH 02/13] Automatically merge empty chunks if possible --- src/Chunk.ts | 7 +- src/utils/chunkAssignment.ts | 162 +++++++++--------- .../_expected/amd/generated-dep1.js | 8 - .../_expected/amd/generated-dep2.js | 8 - .../_expected/amd/generated-shared2.js | 12 -- .../_expected/amd/main1.js | 4 +- .../_expected/amd/main2.js | 9 +- .../_expected/amd/main3.js | 5 +- .../_expected/amd/main4.js | 5 +- .../_expected/cjs/generated-dep1.js | 6 - .../_expected/cjs/generated-dep2.js | 6 - .../_expected/cjs/generated-shared2.js | 13 -- .../_expected/cjs/main1.js | 8 +- .../_expected/cjs/main2.js | 13 +- .../_expected/cjs/main3.js | 4 +- .../_expected/cjs/main4.js | 4 +- .../_expected/es/generated-dep1.js | 4 - .../_expected/es/generated-dep2.js | 4 - .../_expected/es/generated-shared2.js | 10 -- .../_expected/es/main1.js | 6 +- .../_expected/es/main2.js | 13 +- .../_expected/es/main3.js | 5 +- .../_expected/es/main4.js | 5 +- .../_expected/system/generated-dep1.js | 11 -- .../_expected/system/generated-dep2.js | 11 -- .../_expected/system/generated-shared2.js | 20 --- .../_expected/system/main1.js | 2 +- .../_expected/system/main2.js | 13 +- .../_expected/system/main3.js | 6 +- .../_expected/system/main4.js | 6 +- .../_expected/amd/generated-dep11.js | 5 - .../_expected/amd/generated-dep111.js | 5 - .../_expected/amd/generated-dep112.js | 8 - .../_expected/amd/main1.js | 4 +- .../_expected/amd/main2.js | 4 +- .../_expected/amd/main3.js | 4 +- .../_expected/amd/main4.js | 5 +- .../_expected/cjs/generated-dep11.js | 6 - .../_expected/cjs/generated-dep111.js | 3 - .../_expected/cjs/generated-dep112.js | 6 - .../_expected/cjs/main1.js | 8 +- .../_expected/cjs/main2.js | 6 +- .../_expected/cjs/main3.js | 3 +- .../_expected/cjs/main4.js | 4 +- .../_expected/es/generated-dep11.js | 4 - .../_expected/es/generated-dep111.js | 1 - .../_expected/es/generated-dep112.js | 4 - .../_expected/es/main1.js | 6 +- .../_expected/es/main2.js | 7 +- .../_expected/es/main3.js | 2 +- .../_expected/es/main4.js | 5 +- .../_expected/system/generated-dep11.js | 11 -- .../_expected/system/generated-dep111.js | 10 -- .../_expected/system/generated-dep112.js | 11 -- .../_expected/system/main1.js | 2 +- .../_expected/system/main2.js | 6 +- .../_expected/system/main3.js | 5 +- .../_expected/system/main4.js | 6 +- .../{generated-one.js => generated-main1.js} | 0 .../_expected/amd/main1.js | 4 +- .../_expected/amd/main2.js | 4 +- .../{generated-one.js => generated-main1.js} | 0 .../_expected/cjs/main1.js | 4 +- .../_expected/cjs/main2.js | 4 +- .../{generated-one.js => generated-main1.js} | 2 +- .../_expected/es/main1.js | 2 +- .../_expected/es/main2.js | 2 +- .../{generated-one.js => generated-main1.js} | 4 +- .../_expected/system/main1.js | 4 +- .../_expected/system/main2.js | 4 +- .../_expected/amd/generated-dep.js | 5 - .../chunking-reexport/_expected/amd/main1.js | 4 +- .../chunking-reexport/_expected/amd/main2.js | 2 +- .../_expected/cjs/generated-dep.js | 5 - .../chunking-reexport/_expected/cjs/main1.js | 3 +- .../chunking-reexport/_expected/cjs/main2.js | 2 +- .../_expected/es/generated-dep.js | 3 - .../chunking-reexport/_expected/es/main1.js | 3 +- .../chunking-reexport/_expected/es/main2.js | 2 +- .../_expected/system/generated-dep.js | 11 -- .../_expected/system/main1.js | 6 +- .../_expected/system/main2.js | 2 +- ...{generated-main1.js => generated-main3.js} | 0 .../_expected/amd/main1.js | 2 +- .../_expected/amd/main2.js | 2 +- .../_expected/amd/main3.js | 2 +- ...{generated-main1.js => generated-main3.js} | 0 .../_expected/cjs/main1.js | 2 +- .../_expected/cjs/main2.js | 2 +- .../_expected/cjs/main3.js | 2 +- ...{generated-main1.js => generated-main3.js} | 0 .../_expected/es/main1.js | 2 +- .../_expected/es/main2.js | 2 +- .../_expected/es/main3.js | 2 +- ...{generated-main1.js => generated-main3.js} | 0 .../_expected/system/main1.js | 2 +- .../_expected/system/main2.js | 2 +- .../_expected/system/main3.js | 2 +- .../_expected/amd/generated-dep.js | 7 - .../_expected/amd/main1-alias.js | 4 +- .../entry-aliases/_expected/amd/main1.js | 6 +- .../entry-aliases/_expected/amd/main2.js | 4 +- .../_expected/cjs/generated-dep.js | 5 - .../_expected/cjs/main1-alias.js | 4 +- .../entry-aliases/_expected/cjs/main1.js | 6 +- .../entry-aliases/_expected/cjs/main2.js | 4 +- .../_expected/es/generated-dep.js | 3 - .../entry-aliases/_expected/es/main1-alias.js | 2 +- .../entry-aliases/_expected/es/main1.js | 4 +- .../entry-aliases/_expected/es/main2.js | 2 +- .../_expected/system/generated-dep.js | 10 -- .../_expected/system/main1-alias.js | 4 +- .../entry-aliases/_expected/system/main1.js | 7 +- .../entry-aliases/_expected/system/main2.js | 4 +- .../entry-without-code-dynamic/_config.js | 1 - .../samples/entry-without-code/_config.js | 1 - .../_expected/amd/chunks/shared.js | 7 - .../_expected/amd/main.js | 4 +- .../_expected/amd/other.js | 6 +- .../_expected/cjs/chunks/shared.js | 5 - .../_expected/cjs/main.js | 4 +- .../_expected/cjs/other.js | 6 +- .../_expected/es/chunks/shared.js | 3 - .../_expected/es/main.js | 2 +- .../_expected/es/other.js | 4 +- .../_expected/system/chunks/shared.js | 10 -- .../_expected/system/main.js | 4 +- .../_expected/system/other.js | 7 +- ...erated-otherEntry.js => generated-main.js} | 0 .../reexport-from-entry/_expected/amd/main.js | 2 +- .../_expected/amd/otherEntry.js | 2 +- ...erated-otherEntry.js => generated-main.js} | 0 .../reexport-from-entry/_expected/cjs/main.js | 2 +- .../_expected/cjs/otherEntry.js | 2 +- ...erated-otherEntry.js => generated-main.js} | 0 .../reexport-from-entry/_expected/es/main.js | 2 +- .../_expected/es/otherEntry.js | 2 +- ...erated-otherEntry.js => generated-main.js} | 0 .../_expected/system/main.js | 2 +- .../_expected/system/otherEntry.js | 2 +- .../_expected/amd/generated-dep2.js | 8 - .../_expected/amd/main1.js | 4 +- .../_expected/amd/main2.js | 5 +- .../_expected/amd/main3.js | 2 +- .../_expected/cjs/generated-dep2.js | 6 - .../_expected/cjs/main1.js | 4 +- .../_expected/cjs/main2.js | 4 +- .../_expected/cjs/main3.js | 2 +- .../_expected/es/generated-dep2.js | 4 - .../reexport-shortpaths/_expected/es/main1.js | 2 +- .../reexport-shortpaths/_expected/es/main2.js | 5 +- .../reexport-shortpaths/_expected/es/main3.js | 2 +- .../_expected/system/generated-dep2.js | 13 -- .../_expected/system/main1.js | 2 +- .../_expected/system/main2.js | 6 +- .../_expected/system/main3.js | 2 +- .../_expected/amd/generated-lib.js | 7 - .../_expected/amd/main1.js | 8 +- .../_expected/amd/main2.js | 4 +- .../_expected/amd/main3.js | 4 +- .../_expected/cjs/generated-lib.js | 5 - .../_expected/cjs/main1.js | 8 +- .../_expected/cjs/main2.js | 4 +- .../_expected/cjs/main3.js | 4 +- .../_expected/es/generated-lib.js | 3 - .../_expected/es/main1.js | 4 +- .../_expected/es/main2.js | 2 +- .../_expected/es/main3.js | 2 +- .../_expected/system/generated-lib.js | 10 -- .../_expected/system/main1.js | 9 +- .../_expected/system/main2.js | 4 +- .../_expected/system/main3.js | 4 +- .../chunking-duplicate-reexport/_config.js | 7 +- 173 files changed, 350 insertions(+), 613 deletions(-) delete mode 100644 test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/amd/generated-dep1.js delete mode 100644 test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/amd/generated-dep2.js delete mode 100644 test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/amd/generated-shared2.js delete mode 100644 test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/cjs/generated-dep1.js delete mode 100644 test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/cjs/generated-dep2.js delete mode 100644 test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/cjs/generated-shared2.js delete mode 100644 test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/es/generated-dep1.js delete mode 100644 test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/es/generated-dep2.js delete mode 100644 test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/es/generated-shared2.js delete mode 100644 test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/system/generated-dep1.js delete mode 100644 test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/system/generated-dep2.js delete mode 100644 test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/system/generated-shared2.js delete mode 100644 test/chunking-form/samples/chunk-execution-order/_expected/amd/generated-dep11.js delete mode 100644 test/chunking-form/samples/chunk-execution-order/_expected/amd/generated-dep111.js delete mode 100644 test/chunking-form/samples/chunk-execution-order/_expected/amd/generated-dep112.js delete mode 100644 test/chunking-form/samples/chunk-execution-order/_expected/cjs/generated-dep11.js delete mode 100644 test/chunking-form/samples/chunk-execution-order/_expected/cjs/generated-dep111.js delete mode 100644 test/chunking-form/samples/chunk-execution-order/_expected/cjs/generated-dep112.js delete mode 100644 test/chunking-form/samples/chunk-execution-order/_expected/es/generated-dep11.js delete mode 100644 test/chunking-form/samples/chunk-execution-order/_expected/es/generated-dep111.js delete mode 100644 test/chunking-form/samples/chunk-execution-order/_expected/es/generated-dep112.js delete mode 100644 test/chunking-form/samples/chunk-execution-order/_expected/system/generated-dep11.js delete mode 100644 test/chunking-form/samples/chunk-execution-order/_expected/system/generated-dep111.js delete mode 100644 test/chunking-form/samples/chunk-execution-order/_expected/system/generated-dep112.js rename test/chunking-form/samples/chunk-export-renaming/_expected/amd/{generated-one.js => generated-main1.js} (100%) rename test/chunking-form/samples/chunk-export-renaming/_expected/cjs/{generated-one.js => generated-main1.js} (100%) rename test/chunking-form/samples/chunk-export-renaming/_expected/es/{generated-one.js => generated-main1.js} (70%) rename test/chunking-form/samples/chunk-export-renaming/_expected/system/{generated-one.js => generated-main1.js} (70%) delete mode 100644 test/chunking-form/samples/chunking-reexport/_expected/amd/generated-dep.js delete mode 100644 test/chunking-form/samples/chunking-reexport/_expected/cjs/generated-dep.js delete mode 100644 test/chunking-form/samples/chunking-reexport/_expected/es/generated-dep.js delete mode 100644 test/chunking-form/samples/chunking-reexport/_expected/system/generated-dep.js rename test/chunking-form/samples/circular-entry-points3/_expected/amd/{generated-main1.js => generated-main3.js} (100%) rename test/chunking-form/samples/circular-entry-points3/_expected/cjs/{generated-main1.js => generated-main3.js} (100%) rename test/chunking-form/samples/circular-entry-points3/_expected/es/{generated-main1.js => generated-main3.js} (100%) rename test/chunking-form/samples/circular-entry-points3/_expected/system/{generated-main1.js => generated-main3.js} (100%) delete mode 100644 test/chunking-form/samples/entry-aliases/_expected/amd/generated-dep.js delete mode 100644 test/chunking-form/samples/entry-aliases/_expected/cjs/generated-dep.js delete mode 100644 test/chunking-form/samples/entry-aliases/_expected/es/generated-dep.js delete mode 100644 test/chunking-form/samples/entry-aliases/_expected/system/generated-dep.js delete mode 100644 test/chunking-form/samples/multiple-entry-points/_expected/amd/chunks/shared.js delete mode 100644 test/chunking-form/samples/multiple-entry-points/_expected/cjs/chunks/shared.js delete mode 100644 test/chunking-form/samples/multiple-entry-points/_expected/es/chunks/shared.js delete mode 100644 test/chunking-form/samples/multiple-entry-points/_expected/system/chunks/shared.js rename test/chunking-form/samples/reexport-from-entry/_expected/amd/{generated-otherEntry.js => generated-main.js} (100%) rename test/chunking-form/samples/reexport-from-entry/_expected/cjs/{generated-otherEntry.js => generated-main.js} (100%) rename test/chunking-form/samples/reexport-from-entry/_expected/es/{generated-otherEntry.js => generated-main.js} (100%) rename test/chunking-form/samples/reexport-from-entry/_expected/system/{generated-otherEntry.js => generated-main.js} (100%) delete mode 100644 test/chunking-form/samples/reexport-shortpaths/_expected/amd/generated-dep2.js delete mode 100644 test/chunking-form/samples/reexport-shortpaths/_expected/cjs/generated-dep2.js delete mode 100644 test/chunking-form/samples/reexport-shortpaths/_expected/es/generated-dep2.js delete mode 100644 test/chunking-form/samples/reexport-shortpaths/_expected/system/generated-dep2.js delete mode 100644 test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/amd/generated-lib.js delete mode 100644 test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/cjs/generated-lib.js delete mode 100644 test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/es/generated-lib.js delete mode 100644 test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/system/generated-lib.js diff --git a/src/Chunk.ts b/src/Chunk.ts index e9ce9812479..c4d60b8c2c3 100644 --- a/src/Chunk.ts +++ b/src/Chunk.ts @@ -309,7 +309,12 @@ export default class Chunk { } for (const exposedVariable of exposedVariables) { if ( - !(moduleExportNamesByVariable.has(exposedVariable) || exposedVariable.module === module) + !( + exposedVariable.module === module || + moduleExportNamesByVariable.has(exposedVariable) || + (exposedVariable instanceof SyntheticNamedExportVariable && + moduleExportNamesByVariable.has(exposedVariable.getBaseVariable())) + ) ) { return false; } diff --git a/src/utils/chunkAssignment.ts b/src/utils/chunkAssignment.ts index 938620ec7e5..52d9da49458 100644 --- a/src/utils/chunkAssignment.ts +++ b/src/utils/chunkAssignment.ts @@ -6,9 +6,6 @@ import { timeEnd, timeStart } from './timers'; type ChunkDefinitions = { alias: string | null; modules: Module[] }[]; -interface ChunksBySignature { - [chunkSignature: string]: ModulesWithDependentEntries; -} interface ModulesWithDependentEntries { dependentEntries: Set; modules: Module[]; @@ -148,10 +145,8 @@ export function getChunkAssignments( } = analyzeModuleGraph(entries); // Each chunk is identified by its position in this array - const initialChunks = Object.values( - getChunksBySignature( - getModulesWithDependentEntries(dependentEntriesByModule, modulesInManualChunks) - ) + const initialChunks = getChunksFromDependentEntries( + getModulesWithDependentEntries(dependentEntriesByModule, modulesInManualChunks) ); // This mutates initialChunks but also clears @@ -164,13 +159,18 @@ export function getChunkAssignments( ); chunkDefinitions.push( - ...createChunks(allEntries, getChunksBySignature(initialChunks), minChunkSize) + ...getOptimizedChunks( + getChunksFromDependentEntries(initialChunks), + allEntries.length, + minChunkSize + ).map(({ modules }) => ({ + alias: null, + modules + })) ); return chunkDefinitions; } -// TODO Lukas to prevent empty chunks, find chunks that contain only a single -// empty module and see if there is a valid merge target for them function getChunkDefinitionsFromManualChunks( manualChunkAliasByEntry: ReadonlyMap ): { chunkDefinitions: ChunkDefinitions; modulesInManualChunks: Set } { @@ -316,10 +316,12 @@ function getDynamicallyDependentEntriesByDynamicEntry( return dynamicallyDependentEntriesByDynamicEntry; } -function getChunksBySignature( +function getChunksFromDependentEntries( modulesWithDependentEntries: Iterable -): ChunksBySignature { - const chunkModules: ChunksBySignature = Object.create(null); +): ModulesWithDependentEntries[] { + const chunkModules: { + [signature: string]: ModulesWithDependentEntries; + } = Object.create(null); for (const { dependentEntries, modules } of modulesWithDependentEntries) { let chunkSignature = 0n; for (const entryIndex of dependentEntries) { @@ -330,7 +332,7 @@ function getChunksBySignature( modules: [] }).modules.push(...modules); } - return chunkModules; + return Object.values(chunkModules); } function* getModulesWithDependentEntries( @@ -412,29 +414,12 @@ function removeUnnecessaryDependentEntries( } } -function createChunks( - allEntries: ReadonlyArray, - chunkModulesBySignature: ChunksBySignature, - minChunkSize: number -): ChunkDefinitions { - return minChunkSize === 0 - ? Object.values(chunkModulesBySignature).map(({ modules }) => ({ - alias: null, - modules - })) - : getOptimizedChunks(chunkModulesBySignature, allEntries.length, minChunkSize).map( - ({ modules }) => ({ - alias: null, - modules - }) - ); -} - interface ChunkDescription { // The signatures of all side effects included in or loaded with this chunk. // This is the intersection of all dependent entry side effects. As chunks are // merged, these sets are intersected. - correlatedSideEffects: Set; + // TODO Lukas use BigInt + correlatedSideEffects: Set; dependencies: Set; dependentChunks: Set; // The indices of the entries depending on this chunk @@ -442,7 +427,8 @@ interface ChunkDescription { modules: Module[]; pure: boolean; // These are only the sideEffects contained in that chunk - sideEffects: Set; + // TODO Lukas use BigInt + sideEffects: Set; size: number; } @@ -492,85 +478,90 @@ type ChunkPartition = { * dependency side effects are AF. * For entry chunks, dependency and correlated side effects are the same. * - * With these concepts, merging chunks is allowed if the correlated side effects - * of each entry do not change. Thus, we are allowed to merge two chunks if + * With these concepts, merging chunks is allowed if the correlated side + * effects of each entry do not change. Thus, we are allowed to merge two + * chunks if + * * a) the dependency side effects of each chunk are a subset of the correlated * side effects of the other chunk, so no additional side effects are * triggered for any entry, or - * b) The signature of chunk A is a subset of the signature of chunk B while the - * dependency side effects of A are a subset of the correlated side effects - * of B. Because in that scenario, whenever A is loaded, B is loaded as well. - * But there are cases when B is loaded where A is not loaded. So if we merge - * the chunks, all dependency side effects of A will be added to the - * correlated side effects of B, and as the latter is not allowed to change, - * the former need to be a subset of the latter. + * b) The dependent entry points of chunk A are a subset of the dependent entry + * points of chunk B while the dependency side effects of A are a subset of + * the correlated side effects of B. Because in that scenario, whenever A is + * loaded, B is loaded as well. But there are cases when B is loaded where A + * is not loaded. So if we merge the chunks, all dependency side effects of + * A will be added to the correlated side effects of B, and as the latter is + * not allowed to change, the former need to be a subset of the latter. * - * Another consideration when merging small chunks into other chunks is to avoid + * Another consideration when merging small chunks into other chunks is to + * avoid * that too much additional code is loaded. This is achieved when the dependent - * entries of the small chunk are a subset of the dependent entries of the other + * entries of the small chunk are a subset of the dependent entries of the + * other * chunk. Because then when the small chunk is loaded, the other chunk was * loaded/in memory anyway, so at most when the other chunk is loaded, the * additional size of the small chunk is loaded unnecessarily. * * So the algorithm performs merges in two passes: + * * 1. First we try to merge small chunks A only into other chunks B if the * dependent entries of A are a subset of the dependent entries of B and the * dependency side effects of A are a subset of the correlated side effects * of B. * 2. Only then for all remaining small chunks, we look for arbitrary merges - * following the above rules (a) and (b), starting with the smallest chunks - * to look for possible merge targets. + * following the rule (a), starting with the smallest chunks to look for + * possible merge targets. */ // TODO instead of picking the "closest" chunk, we could actually use a // technique similar to what we do for side effects to compare the size of the // static dependencies that are not part of the correlated dependencies function getOptimizedChunks( - chunkModulesBySignature: ChunksBySignature, + chunkModules: ModulesWithDependentEntries[], numberOfEntries: number, minChunkSize: number -) { +): { modules: Module[] }[] { timeStart('optimize chunks', 3); - const chunkPartition = getPartitionedChunks( - chunkModulesBySignature, - numberOfEntries, - minChunkSize - ); - console.log( - 'Before eliminating small chunks, there were\n', - Object.keys(chunkModulesBySignature).length, - 'chunks, of which\n', - chunkPartition.small.size, - 'were below minChunkSize.' - ); + const chunkPartition = getPartitionedChunks(chunkModules, numberOfEntries, minChunkSize); + if (!chunkPartition) { + timeEnd('optimize chunks', 3); + return chunkModules; // the actual modules + } + minChunkSize && + console.log( + 'Before eliminating small chunks, there were\n', + chunkModules.length, + 'chunks, of which\n', + chunkPartition.small.size, + 'were below minChunkSize.' + ); if (chunkPartition.small.size > 0) { mergeChunks(chunkPartition, minChunkSize); } - console.log( - 'After merging chunks,\n', - chunkPartition.small.size + chunkPartition.big.size, - 'chunks remain, of which\n', - chunkPartition.small.size, - 'are below minChunkSize.' - ); + minChunkSize && + console.log( + 'After merging chunks,\n', + chunkPartition.small.size + chunkPartition.big.size, + 'chunks remain, of which\n', + chunkPartition.small.size, + 'are below minChunkSize.' + ); timeEnd('optimize chunks', 3); return [...chunkPartition.small, ...chunkPartition.big]; } function getPartitionedChunks( - chunkModulesBySignature: ChunksBySignature, + chunkModules: ModulesWithDependentEntries[], numberOfEntries: number, minChunkSize: number -): ChunkPartition { +): ChunkPartition | null { const smallChunks: ChunkDescription[] = []; const bigChunks: ChunkDescription[] = []; const chunkByModule = new Map(); - const sideEffectsByEntry: Set[] = []; + const sideEffectsByEntry: Set[] = []; for (let index = 0; index < numberOfEntries; index++) { sideEffectsByEntry.push(new Set()); } - for (const [signature, { dependentEntries, modules }] of Object.entries( - chunkModulesBySignature - )) { + for (const [index, { dependentEntries, modules }] of chunkModules.entries()) { const chunkDescription: ChunkDescription = { correlatedSideEffects: new Set(), dependencies: new Set(), @@ -585,22 +576,28 @@ function getPartitionedChunks( let pure = true; for (const module of modules) { chunkByModule.set(module, chunkDescription); - pure &&= !module.hasEffects(); // Unfortunately, we cannot take tree-shaking into account here because - // rendering did not happen yet - size += module.originalCode.length; + // rendering did not happen yet, but we can detect empty modules + if (module.isIncluded()) { + pure &&= !module.hasEffects(); + size += module.originalCode.length; + } } chunkDescription.pure = pure; chunkDescription.size = size; if (!pure) { for (const entryIndex of dependentEntries) { - sideEffectsByEntry[entryIndex].add(signature); + sideEffectsByEntry[entryIndex].add(index); } // In the beginning, each chunk is only its own side effect. After // merging, additional side effects can accumulate. - chunkDescription.sideEffects.add(signature); + chunkDescription.sideEffects.add(index); } - (size < minChunkSize ? smallChunks : bigChunks).push(chunkDescription); + (size <= minChunkSize ? smallChunks : bigChunks).push(chunkDescription); + } + // If there are no small chunks, we will not optimize + if (smallChunks.length === 0) { + return null; } sortChunksAndAddDependenciesAndEffects( [bigChunks, smallChunks], @@ -616,7 +613,7 @@ function getPartitionedChunks( function sortChunksAndAddDependenciesAndEffects( chunkLists: ChunkDescription[][], chunkByModule: Map, - sideEffectsByEntry: Set[] + sideEffectsByEntry: Set[] ) { for (const chunks of chunkLists) { chunks.sort(compareChunkSize); @@ -660,7 +657,7 @@ function compareChunkSize( } function mergeChunks(chunkPartition: ChunkPartition, minChunkSize: number) { - for (const allowArbitraryMerges of [false, true]) { + for (const allowArbitraryMerges of minChunkSize > 0 ? [false, true] : [false]) { for (const mergedChunk of chunkPartition.small) { let closestChunk: ChunkDescription | null = null; let closestChunkDistance = Infinity; @@ -670,6 +667,7 @@ function mergeChunks(chunkPartition: ChunkPartition, minChunkSize: number) { // If both chunks are small, we also allow for unrelated merges during // the first pass const onlySubsetMerge = !allowArbitraryMerges && targetChunk.size >= minChunkSize; + // TODO Lukas this could be the load size increase instead, take it if there is no increase (non-included are taken as 0) const distance = getChunkEntryDistance(mergedChunk, targetChunk, onlySubsetMerge); if ( distance < closestChunkDistance && diff --git a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/amd/generated-dep1.js b/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/amd/generated-dep1.js deleted file mode 100644 index 262610de8e1..00000000000 --- a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/amd/generated-dep1.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['exports'], (function (exports) { 'use strict'; - - var x = 42; - console.log('dep1'); - - exports.x = x; - -})); diff --git a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/amd/generated-dep2.js b/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/amd/generated-dep2.js deleted file mode 100644 index 3c2c6ef8874..00000000000 --- a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/amd/generated-dep2.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['exports'], (function (exports) { 'use strict'; - - var x = 43; - console.log('dep2'); - - exports.x = x; - -})); diff --git a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/amd/generated-shared2.js b/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/amd/generated-shared2.js deleted file mode 100644 index d98c1d5c38a..00000000000 --- a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/amd/generated-shared2.js +++ /dev/null @@ -1,12 +0,0 @@ -define(['exports', './generated-dep1', './generated-dep2'], (function (exports, dep1, dep2) { 'use strict'; - - var x = dep1.x + 1; - console.log('shared1'); - - var y = dep2.x + 1; - console.log('shared2'); - - exports.x = x; - exports.y = y; - -})); diff --git a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/amd/main1.js b/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/amd/main1.js index d1a3ebafc4d..a594827dc20 100644 --- a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/amd/main1.js +++ b/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/amd/main1.js @@ -1,5 +1,5 @@ -define(['./generated-shared2', './generated-dep1', './generated-dep2'], (function (shared2, dep1, dep2) { 'use strict'; +define(['./main2', './main3', './main4'], (function (main2, main3, main4) { 'use strict'; - console.log(shared2.x + shared2.y); + console.log(main2.x + main2.y); })); diff --git a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/amd/main2.js b/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/amd/main2.js index adc4db25b45..35bb3c8eaf2 100644 --- a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/amd/main2.js +++ b/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/amd/main2.js @@ -1,5 +1,12 @@ -define(['./generated-shared2', './generated-dep1', './generated-dep2'], (function (shared2, dep1, dep2) { 'use strict'; +define(['exports', './main3', './main4'], (function (exports, main3, main4) { 'use strict'; + var x = main3.x + 1; + console.log('shared1'); + var y = main4.x + 1; + console.log('shared2'); + + exports.x = x; + exports.y = y; })); diff --git a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/amd/main3.js b/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/amd/main3.js index 10d10f8c4ec..262610de8e1 100644 --- a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/amd/main3.js +++ b/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/amd/main3.js @@ -1,5 +1,8 @@ -define(['./generated-dep1'], (function (dep1) { 'use strict'; +define(['exports'], (function (exports) { 'use strict'; + var x = 42; + console.log('dep1'); + exports.x = x; })); diff --git a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/amd/main4.js b/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/amd/main4.js index 610e7e8956c..3c2c6ef8874 100644 --- a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/amd/main4.js +++ b/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/amd/main4.js @@ -1,5 +1,8 @@ -define(['./generated-dep2'], (function (dep2) { 'use strict'; +define(['exports'], (function (exports) { 'use strict'; + var x = 43; + console.log('dep2'); + exports.x = x; })); diff --git a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/cjs/generated-dep1.js b/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/cjs/generated-dep1.js deleted file mode 100644 index 0832148cd65..00000000000 --- a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/cjs/generated-dep1.js +++ /dev/null @@ -1,6 +0,0 @@ -'use strict'; - -var x = 42; -console.log('dep1'); - -exports.x = x; diff --git a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/cjs/generated-dep2.js b/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/cjs/generated-dep2.js deleted file mode 100644 index 2d4b0b3b7e2..00000000000 --- a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/cjs/generated-dep2.js +++ /dev/null @@ -1,6 +0,0 @@ -'use strict'; - -var x = 43; -console.log('dep2'); - -exports.x = x; diff --git a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/cjs/generated-shared2.js b/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/cjs/generated-shared2.js deleted file mode 100644 index 6dfe1e7a09f..00000000000 --- a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/cjs/generated-shared2.js +++ /dev/null @@ -1,13 +0,0 @@ -'use strict'; - -var dep1 = require('./generated-dep1.js'); -var dep2 = require('./generated-dep2.js'); - -var x = dep1.x + 1; -console.log('shared1'); - -var y = dep2.x + 1; -console.log('shared2'); - -exports.x = x; -exports.y = y; diff --git a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/cjs/main1.js b/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/cjs/main1.js index e7c819ca823..82028036790 100644 --- a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/cjs/main1.js +++ b/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/cjs/main1.js @@ -1,7 +1,7 @@ 'use strict'; -var shared2 = require('./generated-shared2.js'); -require('./generated-dep1.js'); -require('./generated-dep2.js'); +var main2 = require('./main2.js'); +require('./main3.js'); +require('./main4.js'); -console.log(shared2.x + shared2.y); +console.log(main2.x + main2.y); diff --git a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/cjs/main2.js b/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/cjs/main2.js index 3a2eedeb32c..de3ae8b1320 100644 --- a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/cjs/main2.js +++ b/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/cjs/main2.js @@ -1,6 +1,13 @@ 'use strict'; -require('./generated-shared2.js'); -require('./generated-dep1.js'); -require('./generated-dep2.js'); +var main3 = require('./main3.js'); +var main4 = require('./main4.js'); +var x = main3.x + 1; +console.log('shared1'); + +var y = main4.x + 1; +console.log('shared2'); + +exports.x = x; +exports.y = y; diff --git a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/cjs/main3.js b/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/cjs/main3.js index ccb8d98ce68..0832148cd65 100644 --- a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/cjs/main3.js +++ b/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/cjs/main3.js @@ -1,4 +1,6 @@ 'use strict'; -require('./generated-dep1.js'); +var x = 42; +console.log('dep1'); +exports.x = x; diff --git a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/cjs/main4.js b/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/cjs/main4.js index 8bcaed1c530..2d4b0b3b7e2 100644 --- a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/cjs/main4.js +++ b/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/cjs/main4.js @@ -1,4 +1,6 @@ 'use strict'; -require('./generated-dep2.js'); +var x = 43; +console.log('dep2'); +exports.x = x; diff --git a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/es/generated-dep1.js b/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/es/generated-dep1.js deleted file mode 100644 index d6d2ae2cb09..00000000000 --- a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/es/generated-dep1.js +++ /dev/null @@ -1,4 +0,0 @@ -var x = 42; -console.log('dep1'); - -export { x }; diff --git a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/es/generated-dep2.js b/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/es/generated-dep2.js deleted file mode 100644 index 2ba7d8fc572..00000000000 --- a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/es/generated-dep2.js +++ /dev/null @@ -1,4 +0,0 @@ -var x = 43; -console.log('dep2'); - -export { x }; diff --git a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/es/generated-shared2.js b/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/es/generated-shared2.js deleted file mode 100644 index f0db7b88f4a..00000000000 --- a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/es/generated-shared2.js +++ /dev/null @@ -1,10 +0,0 @@ -import { x as x$1 } from './generated-dep1.js'; -import { x as x$2 } from './generated-dep2.js'; - -var x = x$1 + 1; -console.log('shared1'); - -var y = x$2 + 1; -console.log('shared2'); - -export { x, y }; diff --git a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/es/main1.js b/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/es/main1.js index 4ecb3793798..ba9b7f1beda 100644 --- a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/es/main1.js +++ b/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/es/main1.js @@ -1,5 +1,5 @@ -import { x, y } from './generated-shared2.js'; -import './generated-dep1.js'; -import './generated-dep2.js'; +import { x, y } from './main2.js'; +import './main3.js'; +import './main4.js'; console.log(x + y); diff --git a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/es/main2.js b/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/es/main2.js index ad419134b5a..de6e14112c0 100644 --- a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/es/main2.js +++ b/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/es/main2.js @@ -1,3 +1,10 @@ -import './generated-shared2.js'; -import './generated-dep1.js'; -import './generated-dep2.js'; +import { x as x$1 } from './main3.js'; +import { x as x$2 } from './main4.js'; + +var x = x$1 + 1; +console.log('shared1'); + +var y = x$2 + 1; +console.log('shared2'); + +export { x, y }; diff --git a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/es/main3.js b/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/es/main3.js index 934a68ee7f1..d6d2ae2cb09 100644 --- a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/es/main3.js +++ b/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/es/main3.js @@ -1 +1,4 @@ -import './generated-dep1.js'; +var x = 42; +console.log('dep1'); + +export { x }; diff --git a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/es/main4.js b/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/es/main4.js index e38989d38f2..2ba7d8fc572 100644 --- a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/es/main4.js +++ b/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/es/main4.js @@ -1 +1,4 @@ -import './generated-dep2.js'; +var x = 43; +console.log('dep2'); + +export { x }; diff --git a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/system/generated-dep1.js b/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/system/generated-dep1.js deleted file mode 100644 index e07e554968f..00000000000 --- a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/system/generated-dep1.js +++ /dev/null @@ -1,11 +0,0 @@ -System.register([], (function (exports) { - 'use strict'; - return { - execute: (function () { - - var x = exports('x', 42); - console.log('dep1'); - - }) - }; -})); diff --git a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/system/generated-dep2.js b/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/system/generated-dep2.js deleted file mode 100644 index fbe9a9f73a6..00000000000 --- a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/system/generated-dep2.js +++ /dev/null @@ -1,11 +0,0 @@ -System.register([], (function (exports) { - 'use strict'; - return { - execute: (function () { - - var x = exports('x', 43); - console.log('dep2'); - - }) - }; -})); diff --git a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/system/generated-shared2.js b/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/system/generated-shared2.js deleted file mode 100644 index 9c019853a7b..00000000000 --- a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/system/generated-shared2.js +++ /dev/null @@ -1,20 +0,0 @@ -System.register(['./generated-dep1.js', './generated-dep2.js'], (function (exports) { - 'use strict'; - var x$1, x$2; - return { - setters: [function (module) { - x$1 = module.x; - }, function (module) { - x$2 = module.x; - }], - execute: (function () { - - var x = exports('x', x$1 + 1); - console.log('shared1'); - - var y = exports('y', x$2 + 1); - console.log('shared2'); - - }) - }; -})); diff --git a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/system/main1.js b/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/system/main1.js index 139159c6874..ff4b6f14868 100644 --- a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/system/main1.js +++ b/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/system/main1.js @@ -1,4 +1,4 @@ -System.register(['./generated-shared2.js', './generated-dep1.js', './generated-dep2.js'], (function () { +System.register(['./main2.js', './main3.js', './main4.js'], (function () { 'use strict'; var x, y; return { diff --git a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/system/main2.js b/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/system/main2.js index 675df34673d..7bc01937350 100644 --- a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/system/main2.js +++ b/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/system/main2.js @@ -1,10 +1,19 @@ -System.register(['./generated-shared2.js', './generated-dep1.js', './generated-dep2.js'], (function () { +System.register(['./main3.js', './main4.js'], (function (exports) { 'use strict'; + var x$1, x$2; return { - setters: [null, null, null], + setters: [function (module) { + x$1 = module.x; + }, function (module) { + x$2 = module.x; + }], execute: (function () { + var x = exports('x', x$1 + 1); + console.log('shared1'); + var y = exports('y', x$2 + 1); + console.log('shared2'); }) }; diff --git a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/system/main3.js b/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/system/main3.js index 08bfc8833ba..e07e554968f 100644 --- a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/system/main3.js +++ b/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/system/main3.js @@ -1,10 +1,10 @@ -System.register(['./generated-dep1.js'], (function () { +System.register([], (function (exports) { 'use strict'; return { - setters: [null], execute: (function () { - + var x = exports('x', 42); + console.log('dep1'); }) }; diff --git a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/system/main4.js b/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/system/main4.js index 710c9ab7a39..fbe9a9f73a6 100644 --- a/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/system/main4.js +++ b/test/chunking-form/samples/chunk-deshadowing-reassignment/_expected/system/main4.js @@ -1,10 +1,10 @@ -System.register(['./generated-dep2.js'], (function () { +System.register([], (function (exports) { 'use strict'; return { - setters: [null], execute: (function () { - + var x = exports('x', 43); + console.log('dep2'); }) }; diff --git a/test/chunking-form/samples/chunk-execution-order/_expected/amd/generated-dep11.js b/test/chunking-form/samples/chunk-execution-order/_expected/amd/generated-dep11.js deleted file mode 100644 index ecaab38669a..00000000000 --- a/test/chunking-form/samples/chunk-execution-order/_expected/amd/generated-dep11.js +++ /dev/null @@ -1,5 +0,0 @@ -define(['./generated-dep111', './generated-dep112'], (function (dep111, dep112) { 'use strict'; - - console.log('11'); - -})); diff --git a/test/chunking-form/samples/chunk-execution-order/_expected/amd/generated-dep111.js b/test/chunking-form/samples/chunk-execution-order/_expected/amd/generated-dep111.js deleted file mode 100644 index 22ac93b635d..00000000000 --- a/test/chunking-form/samples/chunk-execution-order/_expected/amd/generated-dep111.js +++ /dev/null @@ -1,5 +0,0 @@ -define((function () { 'use strict'; - - console.log('111'); - -})); diff --git a/test/chunking-form/samples/chunk-execution-order/_expected/amd/generated-dep112.js b/test/chunking-form/samples/chunk-execution-order/_expected/amd/generated-dep112.js deleted file mode 100644 index 8db6250c9f8..00000000000 --- a/test/chunking-form/samples/chunk-execution-order/_expected/amd/generated-dep112.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['exports'], (function (exports) { 'use strict'; - - const x = 0; - console.log('112'); - - exports.x = x; - -})); diff --git a/test/chunking-form/samples/chunk-execution-order/_expected/amd/main1.js b/test/chunking-form/samples/chunk-execution-order/_expected/amd/main1.js index 302a756c8b8..88c2903ff99 100644 --- a/test/chunking-form/samples/chunk-execution-order/_expected/amd/main1.js +++ b/test/chunking-form/samples/chunk-execution-order/_expected/amd/main1.js @@ -1,7 +1,7 @@ -define(['./generated-dep11', './generated-dep112', './generated-dep111'], (function (dep11, dep112, dep111) { 'use strict'; +define(['./main2', './main4', './main3'], (function (main2, main4, main3) { 'use strict'; console.log('1'); - console.log(dep112.x); + console.log(main4.x); })); diff --git a/test/chunking-form/samples/chunk-execution-order/_expected/amd/main2.js b/test/chunking-form/samples/chunk-execution-order/_expected/amd/main2.js index 7449af24785..e62322fcf97 100644 --- a/test/chunking-form/samples/chunk-execution-order/_expected/amd/main2.js +++ b/test/chunking-form/samples/chunk-execution-order/_expected/amd/main2.js @@ -1,5 +1,5 @@ -define(['./generated-dep11', './generated-dep111', './generated-dep112'], (function (dep11, dep111, dep112) { 'use strict'; - +define(['./main3', './main4'], (function (main3, main4) { 'use strict'; + console.log('11'); })); diff --git a/test/chunking-form/samples/chunk-execution-order/_expected/amd/main3.js b/test/chunking-form/samples/chunk-execution-order/_expected/amd/main3.js index 26134a08311..22ac93b635d 100644 --- a/test/chunking-form/samples/chunk-execution-order/_expected/amd/main3.js +++ b/test/chunking-form/samples/chunk-execution-order/_expected/amd/main3.js @@ -1,5 +1,5 @@ -define(['./generated-dep111'], (function (dep111) { 'use strict'; - +define((function () { 'use strict'; + console.log('111'); })); diff --git a/test/chunking-form/samples/chunk-execution-order/_expected/amd/main4.js b/test/chunking-form/samples/chunk-execution-order/_expected/amd/main4.js index 4d23415326c..8db6250c9f8 100644 --- a/test/chunking-form/samples/chunk-execution-order/_expected/amd/main4.js +++ b/test/chunking-form/samples/chunk-execution-order/_expected/amd/main4.js @@ -1,5 +1,8 @@ -define(['./generated-dep112'], (function (dep112) { 'use strict'; +define(['exports'], (function (exports) { 'use strict'; + const x = 0; + console.log('112'); + exports.x = x; })); diff --git a/test/chunking-form/samples/chunk-execution-order/_expected/cjs/generated-dep11.js b/test/chunking-form/samples/chunk-execution-order/_expected/cjs/generated-dep11.js deleted file mode 100644 index d53656de00a..00000000000 --- a/test/chunking-form/samples/chunk-execution-order/_expected/cjs/generated-dep11.js +++ /dev/null @@ -1,6 +0,0 @@ -'use strict'; - -require('./generated-dep111.js'); -require('./generated-dep112.js'); - -console.log('11'); diff --git a/test/chunking-form/samples/chunk-execution-order/_expected/cjs/generated-dep111.js b/test/chunking-form/samples/chunk-execution-order/_expected/cjs/generated-dep111.js deleted file mode 100644 index bf703b5acf3..00000000000 --- a/test/chunking-form/samples/chunk-execution-order/_expected/cjs/generated-dep111.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -console.log('111'); diff --git a/test/chunking-form/samples/chunk-execution-order/_expected/cjs/generated-dep112.js b/test/chunking-form/samples/chunk-execution-order/_expected/cjs/generated-dep112.js deleted file mode 100644 index 8ddf85976dd..00000000000 --- a/test/chunking-form/samples/chunk-execution-order/_expected/cjs/generated-dep112.js +++ /dev/null @@ -1,6 +0,0 @@ -'use strict'; - -const x = 0; -console.log('112'); - -exports.x = x; diff --git a/test/chunking-form/samples/chunk-execution-order/_expected/cjs/main1.js b/test/chunking-form/samples/chunk-execution-order/_expected/cjs/main1.js index e61cfc76ea0..76218bc748e 100644 --- a/test/chunking-form/samples/chunk-execution-order/_expected/cjs/main1.js +++ b/test/chunking-form/samples/chunk-execution-order/_expected/cjs/main1.js @@ -1,9 +1,9 @@ 'use strict'; -require('./generated-dep11.js'); -var dep112 = require('./generated-dep112.js'); -require('./generated-dep111.js'); +require('./main2.js'); +var main4 = require('./main4.js'); +require('./main3.js'); console.log('1'); -console.log(dep112.x); +console.log(main4.x); diff --git a/test/chunking-form/samples/chunk-execution-order/_expected/cjs/main2.js b/test/chunking-form/samples/chunk-execution-order/_expected/cjs/main2.js index 7bcc0f1f5c7..8c6d654f014 100644 --- a/test/chunking-form/samples/chunk-execution-order/_expected/cjs/main2.js +++ b/test/chunking-form/samples/chunk-execution-order/_expected/cjs/main2.js @@ -1,6 +1,6 @@ 'use strict'; -require('./generated-dep11.js'); -require('./generated-dep111.js'); -require('./generated-dep112.js'); +require('./main3.js'); +require('./main4.js'); +console.log('11'); diff --git a/test/chunking-form/samples/chunk-execution-order/_expected/cjs/main3.js b/test/chunking-form/samples/chunk-execution-order/_expected/cjs/main3.js index 03f5bcb4802..bf703b5acf3 100644 --- a/test/chunking-form/samples/chunk-execution-order/_expected/cjs/main3.js +++ b/test/chunking-form/samples/chunk-execution-order/_expected/cjs/main3.js @@ -1,4 +1,3 @@ 'use strict'; -require('./generated-dep111.js'); - +console.log('111'); diff --git a/test/chunking-form/samples/chunk-execution-order/_expected/cjs/main4.js b/test/chunking-form/samples/chunk-execution-order/_expected/cjs/main4.js index 9efc879ddeb..8ddf85976dd 100644 --- a/test/chunking-form/samples/chunk-execution-order/_expected/cjs/main4.js +++ b/test/chunking-form/samples/chunk-execution-order/_expected/cjs/main4.js @@ -1,4 +1,6 @@ 'use strict'; -require('./generated-dep112.js'); +const x = 0; +console.log('112'); +exports.x = x; diff --git a/test/chunking-form/samples/chunk-execution-order/_expected/es/generated-dep11.js b/test/chunking-form/samples/chunk-execution-order/_expected/es/generated-dep11.js deleted file mode 100644 index 113045c45f4..00000000000 --- a/test/chunking-form/samples/chunk-execution-order/_expected/es/generated-dep11.js +++ /dev/null @@ -1,4 +0,0 @@ -import './generated-dep111.js'; -import './generated-dep112.js'; - -console.log('11'); diff --git a/test/chunking-form/samples/chunk-execution-order/_expected/es/generated-dep111.js b/test/chunking-form/samples/chunk-execution-order/_expected/es/generated-dep111.js deleted file mode 100644 index ab8d7e39114..00000000000 --- a/test/chunking-form/samples/chunk-execution-order/_expected/es/generated-dep111.js +++ /dev/null @@ -1 +0,0 @@ -console.log('111'); diff --git a/test/chunking-form/samples/chunk-execution-order/_expected/es/generated-dep112.js b/test/chunking-form/samples/chunk-execution-order/_expected/es/generated-dep112.js deleted file mode 100644 index a72c32b4c0a..00000000000 --- a/test/chunking-form/samples/chunk-execution-order/_expected/es/generated-dep112.js +++ /dev/null @@ -1,4 +0,0 @@ -const x = 0; -console.log('112'); - -export { x }; diff --git a/test/chunking-form/samples/chunk-execution-order/_expected/es/main1.js b/test/chunking-form/samples/chunk-execution-order/_expected/es/main1.js index 8ccac0f4e96..69a2f611dd0 100644 --- a/test/chunking-form/samples/chunk-execution-order/_expected/es/main1.js +++ b/test/chunking-form/samples/chunk-execution-order/_expected/es/main1.js @@ -1,6 +1,6 @@ -import './generated-dep11.js'; -import { x } from './generated-dep112.js'; -import './generated-dep111.js'; +import './main2.js'; +import { x } from './main4.js'; +import './main3.js'; console.log('1'); diff --git a/test/chunking-form/samples/chunk-execution-order/_expected/es/main2.js b/test/chunking-form/samples/chunk-execution-order/_expected/es/main2.js index 85ab1d519aa..805eb879157 100644 --- a/test/chunking-form/samples/chunk-execution-order/_expected/es/main2.js +++ b/test/chunking-form/samples/chunk-execution-order/_expected/es/main2.js @@ -1,3 +1,4 @@ -import './generated-dep11.js'; -import './generated-dep111.js'; -import './generated-dep112.js'; +import './main3.js'; +import './main4.js'; + +console.log('11'); diff --git a/test/chunking-form/samples/chunk-execution-order/_expected/es/main3.js b/test/chunking-form/samples/chunk-execution-order/_expected/es/main3.js index 7fab442816a..ab8d7e39114 100644 --- a/test/chunking-form/samples/chunk-execution-order/_expected/es/main3.js +++ b/test/chunking-form/samples/chunk-execution-order/_expected/es/main3.js @@ -1 +1 @@ -import './generated-dep111.js'; +console.log('111'); diff --git a/test/chunking-form/samples/chunk-execution-order/_expected/es/main4.js b/test/chunking-form/samples/chunk-execution-order/_expected/es/main4.js index 7d06babc396..a72c32b4c0a 100644 --- a/test/chunking-form/samples/chunk-execution-order/_expected/es/main4.js +++ b/test/chunking-form/samples/chunk-execution-order/_expected/es/main4.js @@ -1 +1,4 @@ -import './generated-dep112.js'; +const x = 0; +console.log('112'); + +export { x }; diff --git a/test/chunking-form/samples/chunk-execution-order/_expected/system/generated-dep11.js b/test/chunking-form/samples/chunk-execution-order/_expected/system/generated-dep11.js deleted file mode 100644 index 561f7d05662..00000000000 --- a/test/chunking-form/samples/chunk-execution-order/_expected/system/generated-dep11.js +++ /dev/null @@ -1,11 +0,0 @@ -System.register(['./generated-dep111.js', './generated-dep112.js'], (function () { - 'use strict'; - return { - setters: [null, null], - execute: (function () { - - console.log('11'); - - }) - }; -})); diff --git a/test/chunking-form/samples/chunk-execution-order/_expected/system/generated-dep111.js b/test/chunking-form/samples/chunk-execution-order/_expected/system/generated-dep111.js deleted file mode 100644 index 43f080e2c33..00000000000 --- a/test/chunking-form/samples/chunk-execution-order/_expected/system/generated-dep111.js +++ /dev/null @@ -1,10 +0,0 @@ -System.register([], (function () { - 'use strict'; - return { - execute: (function () { - - console.log('111'); - - }) - }; -})); diff --git a/test/chunking-form/samples/chunk-execution-order/_expected/system/generated-dep112.js b/test/chunking-form/samples/chunk-execution-order/_expected/system/generated-dep112.js deleted file mode 100644 index e4a7f032c28..00000000000 --- a/test/chunking-form/samples/chunk-execution-order/_expected/system/generated-dep112.js +++ /dev/null @@ -1,11 +0,0 @@ -System.register([], (function (exports) { - 'use strict'; - return { - execute: (function () { - - const x = exports('x', 0); - console.log('112'); - - }) - }; -})); diff --git a/test/chunking-form/samples/chunk-execution-order/_expected/system/main1.js b/test/chunking-form/samples/chunk-execution-order/_expected/system/main1.js index e827089639a..797f64371a1 100644 --- a/test/chunking-form/samples/chunk-execution-order/_expected/system/main1.js +++ b/test/chunking-form/samples/chunk-execution-order/_expected/system/main1.js @@ -1,4 +1,4 @@ -System.register(['./generated-dep11.js', './generated-dep112.js', './generated-dep111.js'], (function () { +System.register(['./main2.js', './main4.js', './main3.js'], (function () { 'use strict'; var x; return { diff --git a/test/chunking-form/samples/chunk-execution-order/_expected/system/main2.js b/test/chunking-form/samples/chunk-execution-order/_expected/system/main2.js index 06e9c8d73cd..f8f44a795ba 100644 --- a/test/chunking-form/samples/chunk-execution-order/_expected/system/main2.js +++ b/test/chunking-form/samples/chunk-execution-order/_expected/system/main2.js @@ -1,10 +1,10 @@ -System.register(['./generated-dep11.js', './generated-dep111.js', './generated-dep112.js'], (function () { +System.register(['./main3.js', './main4.js'], (function () { 'use strict'; return { - setters: [null, null, null], + setters: [null, null], execute: (function () { - + console.log('11'); }) }; diff --git a/test/chunking-form/samples/chunk-execution-order/_expected/system/main3.js b/test/chunking-form/samples/chunk-execution-order/_expected/system/main3.js index c4037d4d2e8..43f080e2c33 100644 --- a/test/chunking-form/samples/chunk-execution-order/_expected/system/main3.js +++ b/test/chunking-form/samples/chunk-execution-order/_expected/system/main3.js @@ -1,10 +1,9 @@ -System.register(['./generated-dep111.js'], (function () { +System.register([], (function () { 'use strict'; return { - setters: [null], execute: (function () { - + console.log('111'); }) }; diff --git a/test/chunking-form/samples/chunk-execution-order/_expected/system/main4.js b/test/chunking-form/samples/chunk-execution-order/_expected/system/main4.js index 7dd00637184..e4a7f032c28 100644 --- a/test/chunking-form/samples/chunk-execution-order/_expected/system/main4.js +++ b/test/chunking-form/samples/chunk-execution-order/_expected/system/main4.js @@ -1,10 +1,10 @@ -System.register(['./generated-dep112.js'], (function () { +System.register([], (function (exports) { 'use strict'; return { - setters: [null], execute: (function () { - + const x = exports('x', 0); + console.log('112'); }) }; diff --git a/test/chunking-form/samples/chunk-export-renaming/_expected/amd/generated-one.js b/test/chunking-form/samples/chunk-export-renaming/_expected/amd/generated-main1.js similarity index 100% rename from test/chunking-form/samples/chunk-export-renaming/_expected/amd/generated-one.js rename to test/chunking-form/samples/chunk-export-renaming/_expected/amd/generated-main1.js diff --git a/test/chunking-form/samples/chunk-export-renaming/_expected/amd/main1.js b/test/chunking-form/samples/chunk-export-renaming/_expected/amd/main1.js index 9bb15a1ac26..5a17f385180 100644 --- a/test/chunking-form/samples/chunk-export-renaming/_expected/amd/main1.js +++ b/test/chunking-form/samples/chunk-export-renaming/_expected/amd/main1.js @@ -1,7 +1,7 @@ -define(['exports', './generated-one'], (function (exports, one) { 'use strict'; +define(['exports', './generated-main1'], (function (exports, main1) { 'use strict'; - exports.ItemOne = one.One; + exports.ItemOne = main1.One; })); diff --git a/test/chunking-form/samples/chunk-export-renaming/_expected/amd/main2.js b/test/chunking-form/samples/chunk-export-renaming/_expected/amd/main2.js index 7eea3c04e06..a04d2b3886e 100644 --- a/test/chunking-form/samples/chunk-export-renaming/_expected/amd/main2.js +++ b/test/chunking-form/samples/chunk-export-renaming/_expected/amd/main2.js @@ -1,8 +1,8 @@ -define(['exports', './generated-one'], (function (exports, one) { 'use strict'; +define(['exports', './generated-main1'], (function (exports, main1) { 'use strict'; class Two { test() { - return one.ONE_CONSTANT; + return main1.ONE_CONSTANT; } } diff --git a/test/chunking-form/samples/chunk-export-renaming/_expected/cjs/generated-one.js b/test/chunking-form/samples/chunk-export-renaming/_expected/cjs/generated-main1.js similarity index 100% rename from test/chunking-form/samples/chunk-export-renaming/_expected/cjs/generated-one.js rename to test/chunking-form/samples/chunk-export-renaming/_expected/cjs/generated-main1.js diff --git a/test/chunking-form/samples/chunk-export-renaming/_expected/cjs/main1.js b/test/chunking-form/samples/chunk-export-renaming/_expected/cjs/main1.js index 66df4796b19..a691df024c1 100644 --- a/test/chunking-form/samples/chunk-export-renaming/_expected/cjs/main1.js +++ b/test/chunking-form/samples/chunk-export-renaming/_expected/cjs/main1.js @@ -1,7 +1,7 @@ 'use strict'; -var one = require('./generated-one.js'); +var main1 = require('./generated-main1.js'); -exports.ItemOne = one.One; +exports.ItemOne = main1.One; diff --git a/test/chunking-form/samples/chunk-export-renaming/_expected/cjs/main2.js b/test/chunking-form/samples/chunk-export-renaming/_expected/cjs/main2.js index 83c41c90a5f..b06c4d03648 100644 --- a/test/chunking-form/samples/chunk-export-renaming/_expected/cjs/main2.js +++ b/test/chunking-form/samples/chunk-export-renaming/_expected/cjs/main2.js @@ -1,10 +1,10 @@ 'use strict'; -var one = require('./generated-one.js'); +var main1 = require('./generated-main1.js'); class Two { test() { - return one.ONE_CONSTANT; + return main1.ONE_CONSTANT; } } diff --git a/test/chunking-form/samples/chunk-export-renaming/_expected/es/generated-one.js b/test/chunking-form/samples/chunk-export-renaming/_expected/es/generated-main1.js similarity index 70% rename from test/chunking-form/samples/chunk-export-renaming/_expected/es/generated-one.js rename to test/chunking-form/samples/chunk-export-renaming/_expected/es/generated-main1.js index 34473c119fa..f9b0444b3e4 100644 --- a/test/chunking-form/samples/chunk-export-renaming/_expected/es/generated-one.js +++ b/test/chunking-form/samples/chunk-export-renaming/_expected/es/generated-main1.js @@ -6,4 +6,4 @@ class One { const ONE_CONSTANT = 'oneconstant'; -export { One as O, ONE_CONSTANT as a }; +export { ONE_CONSTANT as O, One as a }; diff --git a/test/chunking-form/samples/chunk-export-renaming/_expected/es/main1.js b/test/chunking-form/samples/chunk-export-renaming/_expected/es/main1.js index fe75206da7e..7596598026c 100644 --- a/test/chunking-form/samples/chunk-export-renaming/_expected/es/main1.js +++ b/test/chunking-form/samples/chunk-export-renaming/_expected/es/main1.js @@ -1 +1 @@ -export { O as ItemOne } from './generated-one.js'; +export { a as ItemOne } from './generated-main1.js'; diff --git a/test/chunking-form/samples/chunk-export-renaming/_expected/es/main2.js b/test/chunking-form/samples/chunk-export-renaming/_expected/es/main2.js index fccdd26cf28..e2b3239a134 100644 --- a/test/chunking-form/samples/chunk-export-renaming/_expected/es/main2.js +++ b/test/chunking-form/samples/chunk-export-renaming/_expected/es/main2.js @@ -1,4 +1,4 @@ -import { a as ONE_CONSTANT } from './generated-one.js'; +import { O as ONE_CONSTANT } from './generated-main1.js'; class Two { test() { diff --git a/test/chunking-form/samples/chunk-export-renaming/_expected/system/generated-one.js b/test/chunking-form/samples/chunk-export-renaming/_expected/system/generated-main1.js similarity index 70% rename from test/chunking-form/samples/chunk-export-renaming/_expected/system/generated-one.js rename to test/chunking-form/samples/chunk-export-renaming/_expected/system/generated-main1.js index 6ac7ba73acd..9f855c61658 100644 --- a/test/chunking-form/samples/chunk-export-renaming/_expected/system/generated-one.js +++ b/test/chunking-form/samples/chunk-export-renaming/_expected/system/generated-main1.js @@ -7,9 +7,9 @@ System.register([], (function (exports) { test() { return ONE_CONSTANT; } - } exports('O', One); + } exports('a', One); - const ONE_CONSTANT = exports('a', 'oneconstant'); + const ONE_CONSTANT = exports('O', 'oneconstant'); }) }; diff --git a/test/chunking-form/samples/chunk-export-renaming/_expected/system/main1.js b/test/chunking-form/samples/chunk-export-renaming/_expected/system/main1.js index 39a19bdbbc4..68a9b21c7cc 100644 --- a/test/chunking-form/samples/chunk-export-renaming/_expected/system/main1.js +++ b/test/chunking-form/samples/chunk-export-renaming/_expected/system/main1.js @@ -1,8 +1,8 @@ -System.register(['./generated-one.js'], (function (exports) { +System.register(['./generated-main1.js'], (function (exports) { 'use strict'; return { setters: [function (module) { - exports('ItemOne', module.O); + exports('ItemOne', module.a); }], execute: (function () { diff --git a/test/chunking-form/samples/chunk-export-renaming/_expected/system/main2.js b/test/chunking-form/samples/chunk-export-renaming/_expected/system/main2.js index f50e9c3d295..e559d5e14e8 100644 --- a/test/chunking-form/samples/chunk-export-renaming/_expected/system/main2.js +++ b/test/chunking-form/samples/chunk-export-renaming/_expected/system/main2.js @@ -1,9 +1,9 @@ -System.register(['./generated-one.js'], (function (exports) { +System.register(['./generated-main1.js'], (function (exports) { 'use strict'; var ONE_CONSTANT; return { setters: [function (module) { - ONE_CONSTANT = module.a; + ONE_CONSTANT = module.O; }], execute: (function () { diff --git a/test/chunking-form/samples/chunking-reexport/_expected/amd/generated-dep.js b/test/chunking-form/samples/chunking-reexport/_expected/amd/generated-dep.js deleted file mode 100644 index 380f3a10510..00000000000 --- a/test/chunking-form/samples/chunking-reexport/_expected/amd/generated-dep.js +++ /dev/null @@ -1,5 +0,0 @@ -define(['external'], (function (external) { 'use strict'; - - console.log('dep'); - -})); diff --git a/test/chunking-form/samples/chunking-reexport/_expected/amd/main1.js b/test/chunking-form/samples/chunking-reexport/_expected/amd/main1.js index 314412599d7..a6d4e8246c0 100644 --- a/test/chunking-form/samples/chunking-reexport/_expected/amd/main1.js +++ b/test/chunking-form/samples/chunking-reexport/_expected/amd/main1.js @@ -1,6 +1,6 @@ -define(['exports', './generated-dep', 'external'], (function (exports, dep, external) { 'use strict'; - +define(['exports', 'external'], (function (exports, external) { 'use strict'; + console.log('dep'); Object.defineProperty(exports, 'dep', { enumerable: true, diff --git a/test/chunking-form/samples/chunking-reexport/_expected/amd/main2.js b/test/chunking-form/samples/chunking-reexport/_expected/amd/main2.js index 314412599d7..6582d772210 100644 --- a/test/chunking-form/samples/chunking-reexport/_expected/amd/main2.js +++ b/test/chunking-form/samples/chunking-reexport/_expected/amd/main2.js @@ -1,4 +1,4 @@ -define(['exports', './generated-dep', 'external'], (function (exports, dep, external) { 'use strict'; +define(['exports', './main1', 'external'], (function (exports, main1, external) { 'use strict'; diff --git a/test/chunking-form/samples/chunking-reexport/_expected/cjs/generated-dep.js b/test/chunking-form/samples/chunking-reexport/_expected/cjs/generated-dep.js deleted file mode 100644 index 0d3516434e6..00000000000 --- a/test/chunking-form/samples/chunking-reexport/_expected/cjs/generated-dep.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -require('external'); - -console.log('dep'); diff --git a/test/chunking-form/samples/chunking-reexport/_expected/cjs/main1.js b/test/chunking-form/samples/chunking-reexport/_expected/cjs/main1.js index 357f61ce300..6d64de63534 100644 --- a/test/chunking-form/samples/chunking-reexport/_expected/cjs/main1.js +++ b/test/chunking-form/samples/chunking-reexport/_expected/cjs/main1.js @@ -1,9 +1,8 @@ 'use strict'; -require('./generated-dep.js'); var external = require('external'); - +console.log('dep'); Object.defineProperty(exports, 'dep', { enumerable: true, diff --git a/test/chunking-form/samples/chunking-reexport/_expected/cjs/main2.js b/test/chunking-form/samples/chunking-reexport/_expected/cjs/main2.js index 357f61ce300..73e66f27834 100644 --- a/test/chunking-form/samples/chunking-reexport/_expected/cjs/main2.js +++ b/test/chunking-form/samples/chunking-reexport/_expected/cjs/main2.js @@ -1,6 +1,6 @@ 'use strict'; -require('./generated-dep.js'); +require('./main1.js'); var external = require('external'); diff --git a/test/chunking-form/samples/chunking-reexport/_expected/es/generated-dep.js b/test/chunking-form/samples/chunking-reexport/_expected/es/generated-dep.js deleted file mode 100644 index 12514a3e503..00000000000 --- a/test/chunking-form/samples/chunking-reexport/_expected/es/generated-dep.js +++ /dev/null @@ -1,3 +0,0 @@ -import 'external'; - -console.log('dep'); diff --git a/test/chunking-form/samples/chunking-reexport/_expected/es/main1.js b/test/chunking-form/samples/chunking-reexport/_expected/es/main1.js index d751b5a173c..9f0b3a911d6 100644 --- a/test/chunking-form/samples/chunking-reexport/_expected/es/main1.js +++ b/test/chunking-form/samples/chunking-reexport/_expected/es/main1.js @@ -1,2 +1,3 @@ -import './generated-dep.js'; export { asdf as dep } from 'external'; + +console.log('dep'); diff --git a/test/chunking-form/samples/chunking-reexport/_expected/es/main2.js b/test/chunking-form/samples/chunking-reexport/_expected/es/main2.js index d751b5a173c..b6b84205109 100644 --- a/test/chunking-form/samples/chunking-reexport/_expected/es/main2.js +++ b/test/chunking-form/samples/chunking-reexport/_expected/es/main2.js @@ -1,2 +1,2 @@ -import './generated-dep.js'; +import './main1.js'; export { asdf as dep } from 'external'; diff --git a/test/chunking-form/samples/chunking-reexport/_expected/system/generated-dep.js b/test/chunking-form/samples/chunking-reexport/_expected/system/generated-dep.js deleted file mode 100644 index dc09e7bfb4c..00000000000 --- a/test/chunking-form/samples/chunking-reexport/_expected/system/generated-dep.js +++ /dev/null @@ -1,11 +0,0 @@ -System.register(['external'], (function () { - 'use strict'; - return { - setters: [null], - execute: (function () { - - console.log('dep'); - - }) - }; -})); diff --git a/test/chunking-form/samples/chunking-reexport/_expected/system/main1.js b/test/chunking-form/samples/chunking-reexport/_expected/system/main1.js index 0ba68be442a..8f0490026e9 100644 --- a/test/chunking-form/samples/chunking-reexport/_expected/system/main1.js +++ b/test/chunking-form/samples/chunking-reexport/_expected/system/main1.js @@ -1,12 +1,12 @@ -System.register(['./generated-dep.js', 'external'], (function (exports) { +System.register(['external'], (function (exports) { 'use strict'; return { - setters: [null, function (module) { + setters: [function (module) { exports('dep', module.asdf); }], execute: (function () { - + console.log('dep'); }) }; diff --git a/test/chunking-form/samples/chunking-reexport/_expected/system/main2.js b/test/chunking-form/samples/chunking-reexport/_expected/system/main2.js index 0ba68be442a..a31f7ffadba 100644 --- a/test/chunking-form/samples/chunking-reexport/_expected/system/main2.js +++ b/test/chunking-form/samples/chunking-reexport/_expected/system/main2.js @@ -1,4 +1,4 @@ -System.register(['./generated-dep.js', 'external'], (function (exports) { +System.register(['./main1.js', 'external'], (function (exports) { 'use strict'; return { setters: [null, function (module) { diff --git a/test/chunking-form/samples/circular-entry-points3/_expected/amd/generated-main1.js b/test/chunking-form/samples/circular-entry-points3/_expected/amd/generated-main3.js similarity index 100% rename from test/chunking-form/samples/circular-entry-points3/_expected/amd/generated-main1.js rename to test/chunking-form/samples/circular-entry-points3/_expected/amd/generated-main3.js diff --git a/test/chunking-form/samples/circular-entry-points3/_expected/amd/main1.js b/test/chunking-form/samples/circular-entry-points3/_expected/amd/main1.js index 8d0155c964a..9c961228361 100644 --- a/test/chunking-form/samples/circular-entry-points3/_expected/amd/main1.js +++ b/test/chunking-form/samples/circular-entry-points3/_expected/amd/main1.js @@ -1,4 +1,4 @@ -define(['exports', './generated-main1'], (function (exports, main2) { 'use strict'; +define(['exports', './generated-main3'], (function (exports, main2) { 'use strict'; diff --git a/test/chunking-form/samples/circular-entry-points3/_expected/amd/main2.js b/test/chunking-form/samples/circular-entry-points3/_expected/amd/main2.js index bfbdfd84014..9099e57045c 100644 --- a/test/chunking-form/samples/circular-entry-points3/_expected/amd/main2.js +++ b/test/chunking-form/samples/circular-entry-points3/_expected/amd/main2.js @@ -1,4 +1,4 @@ -define(['exports', './generated-main1'], (function (exports, main2) { 'use strict'; +define(['exports', './generated-main3'], (function (exports, main2) { 'use strict'; diff --git a/test/chunking-form/samples/circular-entry-points3/_expected/amd/main3.js b/test/chunking-form/samples/circular-entry-points3/_expected/amd/main3.js index 9cb9dfb1a65..3487a5f1cc0 100644 --- a/test/chunking-form/samples/circular-entry-points3/_expected/amd/main3.js +++ b/test/chunking-form/samples/circular-entry-points3/_expected/amd/main3.js @@ -1,4 +1,4 @@ -define(['exports', './generated-main1'], (function (exports, main2) { 'use strict'; +define(['exports', './generated-main3'], (function (exports, main2) { 'use strict'; diff --git a/test/chunking-form/samples/circular-entry-points3/_expected/cjs/generated-main1.js b/test/chunking-form/samples/circular-entry-points3/_expected/cjs/generated-main3.js similarity index 100% rename from test/chunking-form/samples/circular-entry-points3/_expected/cjs/generated-main1.js rename to test/chunking-form/samples/circular-entry-points3/_expected/cjs/generated-main3.js diff --git a/test/chunking-form/samples/circular-entry-points3/_expected/cjs/main1.js b/test/chunking-form/samples/circular-entry-points3/_expected/cjs/main1.js index 60e2d37cd2d..19eb040fb8e 100644 --- a/test/chunking-form/samples/circular-entry-points3/_expected/cjs/main1.js +++ b/test/chunking-form/samples/circular-entry-points3/_expected/cjs/main1.js @@ -1,6 +1,6 @@ 'use strict'; -var main2 = require('./generated-main1.js'); +var main2 = require('./generated-main3.js'); diff --git a/test/chunking-form/samples/circular-entry-points3/_expected/cjs/main2.js b/test/chunking-form/samples/circular-entry-points3/_expected/cjs/main2.js index 61eb5726bae..e79762526cf 100644 --- a/test/chunking-form/samples/circular-entry-points3/_expected/cjs/main2.js +++ b/test/chunking-form/samples/circular-entry-points3/_expected/cjs/main2.js @@ -1,6 +1,6 @@ 'use strict'; -var main2 = require('./generated-main1.js'); +var main2 = require('./generated-main3.js'); diff --git a/test/chunking-form/samples/circular-entry-points3/_expected/cjs/main3.js b/test/chunking-form/samples/circular-entry-points3/_expected/cjs/main3.js index 79ae2479f2f..896bb6ce005 100644 --- a/test/chunking-form/samples/circular-entry-points3/_expected/cjs/main3.js +++ b/test/chunking-form/samples/circular-entry-points3/_expected/cjs/main3.js @@ -1,6 +1,6 @@ 'use strict'; -var main2 = require('./generated-main1.js'); +var main2 = require('./generated-main3.js'); diff --git a/test/chunking-form/samples/circular-entry-points3/_expected/es/generated-main1.js b/test/chunking-form/samples/circular-entry-points3/_expected/es/generated-main3.js similarity index 100% rename from test/chunking-form/samples/circular-entry-points3/_expected/es/generated-main1.js rename to test/chunking-form/samples/circular-entry-points3/_expected/es/generated-main3.js diff --git a/test/chunking-form/samples/circular-entry-points3/_expected/es/main1.js b/test/chunking-form/samples/circular-entry-points3/_expected/es/main1.js index 0a83cdd426e..11a569a785c 100644 --- a/test/chunking-form/samples/circular-entry-points3/_expected/es/main1.js +++ b/test/chunking-form/samples/circular-entry-points3/_expected/es/main1.js @@ -1 +1 @@ -export { a as p } from './generated-main1.js'; +export { a as p } from './generated-main3.js'; diff --git a/test/chunking-form/samples/circular-entry-points3/_expected/es/main2.js b/test/chunking-form/samples/circular-entry-points3/_expected/es/main2.js index 422b3e863a5..575a8d8ea7b 100644 --- a/test/chunking-form/samples/circular-entry-points3/_expected/es/main2.js +++ b/test/chunking-form/samples/circular-entry-points3/_expected/es/main2.js @@ -1 +1 @@ -export { p, a as p2 } from './generated-main1.js'; +export { p, a as p2 } from './generated-main3.js'; diff --git a/test/chunking-form/samples/circular-entry-points3/_expected/es/main3.js b/test/chunking-form/samples/circular-entry-points3/_expected/es/main3.js index 541321f375e..fe6e31dfb80 100644 --- a/test/chunking-form/samples/circular-entry-points3/_expected/es/main3.js +++ b/test/chunking-form/samples/circular-entry-points3/_expected/es/main3.js @@ -1 +1 @@ -export { C } from './generated-main1.js'; +export { C } from './generated-main3.js'; diff --git a/test/chunking-form/samples/circular-entry-points3/_expected/system/generated-main1.js b/test/chunking-form/samples/circular-entry-points3/_expected/system/generated-main3.js similarity index 100% rename from test/chunking-form/samples/circular-entry-points3/_expected/system/generated-main1.js rename to test/chunking-form/samples/circular-entry-points3/_expected/system/generated-main3.js diff --git a/test/chunking-form/samples/circular-entry-points3/_expected/system/main1.js b/test/chunking-form/samples/circular-entry-points3/_expected/system/main1.js index 19ec4730a3e..f7422d4462c 100644 --- a/test/chunking-form/samples/circular-entry-points3/_expected/system/main1.js +++ b/test/chunking-form/samples/circular-entry-points3/_expected/system/main1.js @@ -1,4 +1,4 @@ -System.register(['./generated-main1.js'], (function (exports) { +System.register(['./generated-main3.js'], (function (exports) { 'use strict'; return { setters: [function (module) { diff --git a/test/chunking-form/samples/circular-entry-points3/_expected/system/main2.js b/test/chunking-form/samples/circular-entry-points3/_expected/system/main2.js index 1513b869d4c..5a8831a44a4 100644 --- a/test/chunking-form/samples/circular-entry-points3/_expected/system/main2.js +++ b/test/chunking-form/samples/circular-entry-points3/_expected/system/main2.js @@ -1,4 +1,4 @@ -System.register(['./generated-main1.js'], (function (exports) { +System.register(['./generated-main3.js'], (function (exports) { 'use strict'; return { setters: [function (module) { diff --git a/test/chunking-form/samples/circular-entry-points3/_expected/system/main3.js b/test/chunking-form/samples/circular-entry-points3/_expected/system/main3.js index 4f1beabc737..7e169b7a3ac 100644 --- a/test/chunking-form/samples/circular-entry-points3/_expected/system/main3.js +++ b/test/chunking-form/samples/circular-entry-points3/_expected/system/main3.js @@ -1,4 +1,4 @@ -System.register(['./generated-main1.js'], (function (exports) { +System.register(['./generated-main3.js'], (function (exports) { 'use strict'; return { setters: [function (module) { diff --git a/test/chunking-form/samples/entry-aliases/_expected/amd/generated-dep.js b/test/chunking-form/samples/entry-aliases/_expected/amd/generated-dep.js deleted file mode 100644 index 1828d3a1a3b..00000000000 --- a/test/chunking-form/samples/entry-aliases/_expected/amd/generated-dep.js +++ /dev/null @@ -1,7 +0,0 @@ -define(['exports'], (function (exports) { 'use strict'; - - var name = 'name'; - - exports.name = name; - -})); diff --git a/test/chunking-form/samples/entry-aliases/_expected/amd/main1-alias.js b/test/chunking-form/samples/entry-aliases/_expected/amd/main1-alias.js index 8971d94bc68..7a1a9208192 100644 --- a/test/chunking-form/samples/entry-aliases/_expected/amd/main1-alias.js +++ b/test/chunking-form/samples/entry-aliases/_expected/amd/main1-alias.js @@ -1,7 +1,7 @@ -define(['exports', './generated-dep'], (function (exports, dep) { 'use strict'; +define(['exports', './main1'], (function (exports, main1_js) { 'use strict'; - exports.name = dep.name; + exports.name = main1_js.name; })); diff --git a/test/chunking-form/samples/entry-aliases/_expected/amd/main1.js b/test/chunking-form/samples/entry-aliases/_expected/amd/main1.js index 8971d94bc68..1828d3a1a3b 100644 --- a/test/chunking-form/samples/entry-aliases/_expected/amd/main1.js +++ b/test/chunking-form/samples/entry-aliases/_expected/amd/main1.js @@ -1,7 +1,7 @@ -define(['exports', './generated-dep'], (function (exports, dep) { 'use strict'; +define(['exports'], (function (exports) { 'use strict'; + var name = 'name'; - - exports.name = dep.name; + exports.name = name; })); diff --git a/test/chunking-form/samples/entry-aliases/_expected/amd/main2.js b/test/chunking-form/samples/entry-aliases/_expected/amd/main2.js index 76aab3482ca..921f4ce0eea 100644 --- a/test/chunking-form/samples/entry-aliases/_expected/amd/main2.js +++ b/test/chunking-form/samples/entry-aliases/_expected/amd/main2.js @@ -1,5 +1,5 @@ -define(['./generated-dep'], (function (dep) { 'use strict'; +define(['./main1'], (function (main1_js) { 'use strict'; - console.log(dep.name); + console.log(main1_js.name); })); diff --git a/test/chunking-form/samples/entry-aliases/_expected/cjs/generated-dep.js b/test/chunking-form/samples/entry-aliases/_expected/cjs/generated-dep.js deleted file mode 100644 index fe90666bb92..00000000000 --- a/test/chunking-form/samples/entry-aliases/_expected/cjs/generated-dep.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -var name = 'name'; - -exports.name = name; diff --git a/test/chunking-form/samples/entry-aliases/_expected/cjs/main1-alias.js b/test/chunking-form/samples/entry-aliases/_expected/cjs/main1-alias.js index 1fc5317171f..24021e5ec62 100644 --- a/test/chunking-form/samples/entry-aliases/_expected/cjs/main1-alias.js +++ b/test/chunking-form/samples/entry-aliases/_expected/cjs/main1-alias.js @@ -1,7 +1,7 @@ 'use strict'; -var dep = require('./generated-dep.js'); +var main1_js = require('./main1.js'); -exports.name = dep.name; +exports.name = main1_js.name; diff --git a/test/chunking-form/samples/entry-aliases/_expected/cjs/main1.js b/test/chunking-form/samples/entry-aliases/_expected/cjs/main1.js index 1fc5317171f..fe90666bb92 100644 --- a/test/chunking-form/samples/entry-aliases/_expected/cjs/main1.js +++ b/test/chunking-form/samples/entry-aliases/_expected/cjs/main1.js @@ -1,7 +1,5 @@ 'use strict'; -var dep = require('./generated-dep.js'); +var name = 'name'; - - -exports.name = dep.name; +exports.name = name; diff --git a/test/chunking-form/samples/entry-aliases/_expected/cjs/main2.js b/test/chunking-form/samples/entry-aliases/_expected/cjs/main2.js index 033c5333a49..56a38b41c48 100644 --- a/test/chunking-form/samples/entry-aliases/_expected/cjs/main2.js +++ b/test/chunking-form/samples/entry-aliases/_expected/cjs/main2.js @@ -1,5 +1,5 @@ 'use strict'; -var dep = require('./generated-dep.js'); +var main1_js = require('./main1.js'); -console.log(dep.name); +console.log(main1_js.name); diff --git a/test/chunking-form/samples/entry-aliases/_expected/es/generated-dep.js b/test/chunking-form/samples/entry-aliases/_expected/es/generated-dep.js deleted file mode 100644 index 83809a871df..00000000000 --- a/test/chunking-form/samples/entry-aliases/_expected/es/generated-dep.js +++ /dev/null @@ -1,3 +0,0 @@ -var name = 'name'; - -export { name as n }; diff --git a/test/chunking-form/samples/entry-aliases/_expected/es/main1-alias.js b/test/chunking-form/samples/entry-aliases/_expected/es/main1-alias.js index a9f98d6ab2d..8e995fcd9ee 100644 --- a/test/chunking-form/samples/entry-aliases/_expected/es/main1-alias.js +++ b/test/chunking-form/samples/entry-aliases/_expected/es/main1-alias.js @@ -1 +1 @@ -export { n as name } from './generated-dep.js'; +export { name } from './main1.js'; diff --git a/test/chunking-form/samples/entry-aliases/_expected/es/main1.js b/test/chunking-form/samples/entry-aliases/_expected/es/main1.js index a9f98d6ab2d..6a9667dced1 100644 --- a/test/chunking-form/samples/entry-aliases/_expected/es/main1.js +++ b/test/chunking-form/samples/entry-aliases/_expected/es/main1.js @@ -1 +1,3 @@ -export { n as name } from './generated-dep.js'; +var name = 'name'; + +export { name }; diff --git a/test/chunking-form/samples/entry-aliases/_expected/es/main2.js b/test/chunking-form/samples/entry-aliases/_expected/es/main2.js index fc1b553e541..5cbdc9eed89 100644 --- a/test/chunking-form/samples/entry-aliases/_expected/es/main2.js +++ b/test/chunking-form/samples/entry-aliases/_expected/es/main2.js @@ -1,3 +1,3 @@ -import { n as name } from './generated-dep.js'; +import { name } from './main1.js'; console.log(name); diff --git a/test/chunking-form/samples/entry-aliases/_expected/system/generated-dep.js b/test/chunking-form/samples/entry-aliases/_expected/system/generated-dep.js deleted file mode 100644 index 3dd137a1d88..00000000000 --- a/test/chunking-form/samples/entry-aliases/_expected/system/generated-dep.js +++ /dev/null @@ -1,10 +0,0 @@ -System.register([], (function (exports) { - 'use strict'; - return { - execute: (function () { - - var name = exports('n', 'name'); - - }) - }; -})); diff --git a/test/chunking-form/samples/entry-aliases/_expected/system/main1-alias.js b/test/chunking-form/samples/entry-aliases/_expected/system/main1-alias.js index e6e2eb02d15..05546a7e9f0 100644 --- a/test/chunking-form/samples/entry-aliases/_expected/system/main1-alias.js +++ b/test/chunking-form/samples/entry-aliases/_expected/system/main1-alias.js @@ -1,8 +1,8 @@ -System.register(['./generated-dep.js'], (function (exports) { +System.register(['./main1.js'], (function (exports) { 'use strict'; return { setters: [function (module) { - exports('name', module.n); + exports('name', module.name); }], execute: (function () { diff --git a/test/chunking-form/samples/entry-aliases/_expected/system/main1.js b/test/chunking-form/samples/entry-aliases/_expected/system/main1.js index e6e2eb02d15..9d059fb48a8 100644 --- a/test/chunking-form/samples/entry-aliases/_expected/system/main1.js +++ b/test/chunking-form/samples/entry-aliases/_expected/system/main1.js @@ -1,12 +1,9 @@ -System.register(['./generated-dep.js'], (function (exports) { +System.register([], (function (exports) { 'use strict'; return { - setters: [function (module) { - exports('name', module.n); - }], execute: (function () { - + var name = exports('name', 'name'); }) }; diff --git a/test/chunking-form/samples/entry-aliases/_expected/system/main2.js b/test/chunking-form/samples/entry-aliases/_expected/system/main2.js index 1505b5c3e52..2a41336bf24 100644 --- a/test/chunking-form/samples/entry-aliases/_expected/system/main2.js +++ b/test/chunking-form/samples/entry-aliases/_expected/system/main2.js @@ -1,9 +1,9 @@ -System.register(['./generated-dep.js'], (function () { +System.register(['./main1.js'], (function () { 'use strict'; var name; return { setters: [function (module) { - name = module.n; + name = module.name; }], execute: (function () { diff --git a/test/chunking-form/samples/entry-without-code-dynamic/_config.js b/test/chunking-form/samples/entry-without-code-dynamic/_config.js index bcdd9e3dae4..af2dc8d4560 100644 --- a/test/chunking-form/samples/entry-without-code-dynamic/_config.js +++ b/test/chunking-form/samples/entry-without-code-dynamic/_config.js @@ -1,5 +1,4 @@ module.exports = defineTest({ - solo: true, description: 'optimizes chunks when a dynamic entry point without own code is imported from another entry', options: { diff --git a/test/chunking-form/samples/entry-without-code/_config.js b/test/chunking-form/samples/entry-without-code/_config.js index c68776ab1f7..5d503fdc17a 100644 --- a/test/chunking-form/samples/entry-without-code/_config.js +++ b/test/chunking-form/samples/entry-without-code/_config.js @@ -1,5 +1,4 @@ module.exports = defineTest({ - solo: true, description: 'optimizes chunks when an entry point without own code is imported from another entry', options: { diff --git a/test/chunking-form/samples/multiple-entry-points/_expected/amd/chunks/shared.js b/test/chunking-form/samples/multiple-entry-points/_expected/amd/chunks/shared.js deleted file mode 100644 index 5e9a4c1e85b..00000000000 --- a/test/chunking-form/samples/multiple-entry-points/_expected/amd/chunks/shared.js +++ /dev/null @@ -1,7 +0,0 @@ -define(['exports'], (function (exports) { 'use strict'; - - const sharedValue = 'shared'; - - exports.sharedValue = sharedValue; - -})); diff --git a/test/chunking-form/samples/multiple-entry-points/_expected/amd/main.js b/test/chunking-form/samples/multiple-entry-points/_expected/amd/main.js index 0d71d8f0fa7..336128932ce 100644 --- a/test/chunking-form/samples/multiple-entry-points/_expected/amd/main.js +++ b/test/chunking-form/samples/multiple-entry-points/_expected/amd/main.js @@ -1,5 +1,5 @@ -define(['./chunks/shared'], (function (shared) { 'use strict'; +define(['./other'], (function (other) { 'use strict'; - assert.equal(shared.sharedValue, 'shared'); + assert.equal(other.sharedValue, 'shared'); })); diff --git a/test/chunking-form/samples/multiple-entry-points/_expected/amd/other.js b/test/chunking-form/samples/multiple-entry-points/_expected/amd/other.js index d53c6b95fe7..5e9a4c1e85b 100644 --- a/test/chunking-form/samples/multiple-entry-points/_expected/amd/other.js +++ b/test/chunking-form/samples/multiple-entry-points/_expected/amd/other.js @@ -1,7 +1,7 @@ -define(['exports', './chunks/shared'], (function (exports, shared) { 'use strict'; +define(['exports'], (function (exports) { 'use strict'; + const sharedValue = 'shared'; - - exports.sharedValue = shared.sharedValue; + exports.sharedValue = sharedValue; })); diff --git a/test/chunking-form/samples/multiple-entry-points/_expected/cjs/chunks/shared.js b/test/chunking-form/samples/multiple-entry-points/_expected/cjs/chunks/shared.js deleted file mode 100644 index 5a6d40af489..00000000000 --- a/test/chunking-form/samples/multiple-entry-points/_expected/cjs/chunks/shared.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -const sharedValue = 'shared'; - -exports.sharedValue = sharedValue; diff --git a/test/chunking-form/samples/multiple-entry-points/_expected/cjs/main.js b/test/chunking-form/samples/multiple-entry-points/_expected/cjs/main.js index 713701b7e81..21ab3a39e5d 100644 --- a/test/chunking-form/samples/multiple-entry-points/_expected/cjs/main.js +++ b/test/chunking-form/samples/multiple-entry-points/_expected/cjs/main.js @@ -1,5 +1,5 @@ 'use strict'; -var shared = require('./chunks/shared.js'); +var other = require('./other.js'); -assert.equal(shared.sharedValue, 'shared'); +assert.equal(other.sharedValue, 'shared'); diff --git a/test/chunking-form/samples/multiple-entry-points/_expected/cjs/other.js b/test/chunking-form/samples/multiple-entry-points/_expected/cjs/other.js index 3239bae8072..5a6d40af489 100644 --- a/test/chunking-form/samples/multiple-entry-points/_expected/cjs/other.js +++ b/test/chunking-form/samples/multiple-entry-points/_expected/cjs/other.js @@ -1,7 +1,5 @@ 'use strict'; -var shared = require('./chunks/shared.js'); +const sharedValue = 'shared'; - - -exports.sharedValue = shared.sharedValue; +exports.sharedValue = sharedValue; diff --git a/test/chunking-form/samples/multiple-entry-points/_expected/es/chunks/shared.js b/test/chunking-form/samples/multiple-entry-points/_expected/es/chunks/shared.js deleted file mode 100644 index d5f271b2232..00000000000 --- a/test/chunking-form/samples/multiple-entry-points/_expected/es/chunks/shared.js +++ /dev/null @@ -1,3 +0,0 @@ -const sharedValue = 'shared'; - -export { sharedValue as s }; diff --git a/test/chunking-form/samples/multiple-entry-points/_expected/es/main.js b/test/chunking-form/samples/multiple-entry-points/_expected/es/main.js index 9af3da63084..0e4cbfb7d14 100644 --- a/test/chunking-form/samples/multiple-entry-points/_expected/es/main.js +++ b/test/chunking-form/samples/multiple-entry-points/_expected/es/main.js @@ -1,3 +1,3 @@ -import { s as sharedValue } from './chunks/shared.js'; +import { sharedValue } from './other.js'; assert.equal(sharedValue, 'shared'); diff --git a/test/chunking-form/samples/multiple-entry-points/_expected/es/other.js b/test/chunking-form/samples/multiple-entry-points/_expected/es/other.js index 7500959c939..5a4fd1b6713 100644 --- a/test/chunking-form/samples/multiple-entry-points/_expected/es/other.js +++ b/test/chunking-form/samples/multiple-entry-points/_expected/es/other.js @@ -1 +1,3 @@ -export { s as sharedValue } from './chunks/shared.js'; +const sharedValue = 'shared'; + +export { sharedValue }; diff --git a/test/chunking-form/samples/multiple-entry-points/_expected/system/chunks/shared.js b/test/chunking-form/samples/multiple-entry-points/_expected/system/chunks/shared.js deleted file mode 100644 index 2e36f352800..00000000000 --- a/test/chunking-form/samples/multiple-entry-points/_expected/system/chunks/shared.js +++ /dev/null @@ -1,10 +0,0 @@ -System.register([], (function (exports) { - 'use strict'; - return { - execute: (function () { - - const sharedValue = exports('s', 'shared'); - - }) - }; -})); diff --git a/test/chunking-form/samples/multiple-entry-points/_expected/system/main.js b/test/chunking-form/samples/multiple-entry-points/_expected/system/main.js index baf838e3bfc..5ac298477a7 100644 --- a/test/chunking-form/samples/multiple-entry-points/_expected/system/main.js +++ b/test/chunking-form/samples/multiple-entry-points/_expected/system/main.js @@ -1,9 +1,9 @@ -System.register(['./chunks/shared.js'], (function () { +System.register(['./other.js'], (function () { 'use strict'; var sharedValue; return { setters: [function (module) { - sharedValue = module.s; + sharedValue = module.sharedValue; }], execute: (function () { diff --git a/test/chunking-form/samples/multiple-entry-points/_expected/system/other.js b/test/chunking-form/samples/multiple-entry-points/_expected/system/other.js index cc804b0fa44..cf1e5ec6ebc 100644 --- a/test/chunking-form/samples/multiple-entry-points/_expected/system/other.js +++ b/test/chunking-form/samples/multiple-entry-points/_expected/system/other.js @@ -1,12 +1,9 @@ -System.register(['./chunks/shared.js'], (function (exports) { +System.register([], (function (exports) { 'use strict'; return { - setters: [function (module) { - exports('sharedValue', module.s); - }], execute: (function () { - + const sharedValue = exports('sharedValue', 'shared'); }) }; diff --git a/test/chunking-form/samples/reexport-from-entry/_expected/amd/generated-otherEntry.js b/test/chunking-form/samples/reexport-from-entry/_expected/amd/generated-main.js similarity index 100% rename from test/chunking-form/samples/reexport-from-entry/_expected/amd/generated-otherEntry.js rename to test/chunking-form/samples/reexport-from-entry/_expected/amd/generated-main.js diff --git a/test/chunking-form/samples/reexport-from-entry/_expected/amd/main.js b/test/chunking-form/samples/reexport-from-entry/_expected/amd/main.js index cf1d940d8f5..270ac5db5e2 100644 --- a/test/chunking-form/samples/reexport-from-entry/_expected/amd/main.js +++ b/test/chunking-form/samples/reexport-from-entry/_expected/amd/main.js @@ -1,4 +1,4 @@ -define(['exports', './generated-otherEntry'], (function (exports, otherEntry) { 'use strict'; +define(['exports', './generated-main'], (function (exports, otherEntry) { 'use strict'; diff --git a/test/chunking-form/samples/reexport-from-entry/_expected/amd/otherEntry.js b/test/chunking-form/samples/reexport-from-entry/_expected/amd/otherEntry.js index e24b7772193..f3c8f3fc36b 100644 --- a/test/chunking-form/samples/reexport-from-entry/_expected/amd/otherEntry.js +++ b/test/chunking-form/samples/reexport-from-entry/_expected/amd/otherEntry.js @@ -1,4 +1,4 @@ -define(['exports', './generated-otherEntry'], (function (exports, otherEntry) { 'use strict'; +define(['exports', './generated-main'], (function (exports, otherEntry) { 'use strict'; diff --git a/test/chunking-form/samples/reexport-from-entry/_expected/cjs/generated-otherEntry.js b/test/chunking-form/samples/reexport-from-entry/_expected/cjs/generated-main.js similarity index 100% rename from test/chunking-form/samples/reexport-from-entry/_expected/cjs/generated-otherEntry.js rename to test/chunking-form/samples/reexport-from-entry/_expected/cjs/generated-main.js diff --git a/test/chunking-form/samples/reexport-from-entry/_expected/cjs/main.js b/test/chunking-form/samples/reexport-from-entry/_expected/cjs/main.js index 9724777d3fa..2f8674f5c9a 100644 --- a/test/chunking-form/samples/reexport-from-entry/_expected/cjs/main.js +++ b/test/chunking-form/samples/reexport-from-entry/_expected/cjs/main.js @@ -1,6 +1,6 @@ 'use strict'; -var otherEntry = require('./generated-otherEntry.js'); +var otherEntry = require('./generated-main.js'); diff --git a/test/chunking-form/samples/reexport-from-entry/_expected/cjs/otherEntry.js b/test/chunking-form/samples/reexport-from-entry/_expected/cjs/otherEntry.js index 7cbc7f97253..cc42cc25188 100644 --- a/test/chunking-form/samples/reexport-from-entry/_expected/cjs/otherEntry.js +++ b/test/chunking-form/samples/reexport-from-entry/_expected/cjs/otherEntry.js @@ -1,6 +1,6 @@ 'use strict'; -var otherEntry = require('./generated-otherEntry.js'); +var otherEntry = require('./generated-main.js'); diff --git a/test/chunking-form/samples/reexport-from-entry/_expected/es/generated-otherEntry.js b/test/chunking-form/samples/reexport-from-entry/_expected/es/generated-main.js similarity index 100% rename from test/chunking-form/samples/reexport-from-entry/_expected/es/generated-otherEntry.js rename to test/chunking-form/samples/reexport-from-entry/_expected/es/generated-main.js diff --git a/test/chunking-form/samples/reexport-from-entry/_expected/es/main.js b/test/chunking-form/samples/reexport-from-entry/_expected/es/main.js index f3332346bba..721b41971c3 100644 --- a/test/chunking-form/samples/reexport-from-entry/_expected/es/main.js +++ b/test/chunking-form/samples/reexport-from-entry/_expected/es/main.js @@ -1 +1 @@ -export { a, c } from './generated-otherEntry.js'; +export { a, c } from './generated-main.js'; diff --git a/test/chunking-form/samples/reexport-from-entry/_expected/es/otherEntry.js b/test/chunking-form/samples/reexport-from-entry/_expected/es/otherEntry.js index 55b811935d3..d0f361a92ff 100644 --- a/test/chunking-form/samples/reexport-from-entry/_expected/es/otherEntry.js +++ b/test/chunking-form/samples/reexport-from-entry/_expected/es/otherEntry.js @@ -1 +1 @@ -export { b, c } from './generated-otherEntry.js'; +export { b, c } from './generated-main.js'; diff --git a/test/chunking-form/samples/reexport-from-entry/_expected/system/generated-otherEntry.js b/test/chunking-form/samples/reexport-from-entry/_expected/system/generated-main.js similarity index 100% rename from test/chunking-form/samples/reexport-from-entry/_expected/system/generated-otherEntry.js rename to test/chunking-form/samples/reexport-from-entry/_expected/system/generated-main.js diff --git a/test/chunking-form/samples/reexport-from-entry/_expected/system/main.js b/test/chunking-form/samples/reexport-from-entry/_expected/system/main.js index 34e0bc372f6..2536a03fad1 100644 --- a/test/chunking-form/samples/reexport-from-entry/_expected/system/main.js +++ b/test/chunking-form/samples/reexport-from-entry/_expected/system/main.js @@ -1,4 +1,4 @@ -System.register(['./generated-otherEntry.js'], (function (exports) { +System.register(['./generated-main.js'], (function (exports) { 'use strict'; return { setters: [function (module) { diff --git a/test/chunking-form/samples/reexport-from-entry/_expected/system/otherEntry.js b/test/chunking-form/samples/reexport-from-entry/_expected/system/otherEntry.js index e3d5f9996e7..fcd182493bb 100644 --- a/test/chunking-form/samples/reexport-from-entry/_expected/system/otherEntry.js +++ b/test/chunking-form/samples/reexport-from-entry/_expected/system/otherEntry.js @@ -1,4 +1,4 @@ -System.register(['./generated-otherEntry.js'], (function (exports) { +System.register(['./generated-main.js'], (function (exports) { 'use strict'; return { setters: [function (module) { diff --git a/test/chunking-form/samples/reexport-shortpaths/_expected/amd/generated-dep2.js b/test/chunking-form/samples/reexport-shortpaths/_expected/amd/generated-dep2.js deleted file mode 100644 index 251a08f1a09..00000000000 --- a/test/chunking-form/samples/reexport-shortpaths/_expected/amd/generated-dep2.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['exports'], (function (exports) { 'use strict'; - - function foo() {} - console.log('dep2'); - - exports.foo = foo; - -})); diff --git a/test/chunking-form/samples/reexport-shortpaths/_expected/amd/main1.js b/test/chunking-form/samples/reexport-shortpaths/_expected/amd/main1.js index b78d8689b0e..b3541656ea0 100644 --- a/test/chunking-form/samples/reexport-shortpaths/_expected/amd/main1.js +++ b/test/chunking-form/samples/reexport-shortpaths/_expected/amd/main1.js @@ -1,7 +1,7 @@ -define(['./generated-dep2'], (function (dep2) { 'use strict'; +define(['./main2'], (function (main2) { 'use strict'; - return dep2.foo; + return main2.foo; })); diff --git a/test/chunking-form/samples/reexport-shortpaths/_expected/amd/main2.js b/test/chunking-form/samples/reexport-shortpaths/_expected/amd/main2.js index 610e7e8956c..251a08f1a09 100644 --- a/test/chunking-form/samples/reexport-shortpaths/_expected/amd/main2.js +++ b/test/chunking-form/samples/reexport-shortpaths/_expected/amd/main2.js @@ -1,5 +1,8 @@ -define(['./generated-dep2'], (function (dep2) { 'use strict'; +define(['exports'], (function (exports) { 'use strict'; + function foo() {} + console.log('dep2'); + exports.foo = foo; })); diff --git a/test/chunking-form/samples/reexport-shortpaths/_expected/amd/main3.js b/test/chunking-form/samples/reexport-shortpaths/_expected/amd/main3.js index 610e7e8956c..70cc16bd14a 100644 --- a/test/chunking-form/samples/reexport-shortpaths/_expected/amd/main3.js +++ b/test/chunking-form/samples/reexport-shortpaths/_expected/amd/main3.js @@ -1,4 +1,4 @@ -define(['./generated-dep2'], (function (dep2) { 'use strict'; +define(['./main2'], (function (main2) { 'use strict'; diff --git a/test/chunking-form/samples/reexport-shortpaths/_expected/cjs/generated-dep2.js b/test/chunking-form/samples/reexport-shortpaths/_expected/cjs/generated-dep2.js deleted file mode 100644 index e71bc446c48..00000000000 --- a/test/chunking-form/samples/reexport-shortpaths/_expected/cjs/generated-dep2.js +++ /dev/null @@ -1,6 +0,0 @@ -'use strict'; - -function foo() {} -console.log('dep2'); - -exports.foo = foo; diff --git a/test/chunking-form/samples/reexport-shortpaths/_expected/cjs/main1.js b/test/chunking-form/samples/reexport-shortpaths/_expected/cjs/main1.js index 660ed01c2f9..7ff2e607734 100644 --- a/test/chunking-form/samples/reexport-shortpaths/_expected/cjs/main1.js +++ b/test/chunking-form/samples/reexport-shortpaths/_expected/cjs/main1.js @@ -1,7 +1,7 @@ 'use strict'; -var dep2 = require('./generated-dep2.js'); +var main2 = require('./main2.js'); -module.exports = dep2.foo; +module.exports = main2.foo; diff --git a/test/chunking-form/samples/reexport-shortpaths/_expected/cjs/main2.js b/test/chunking-form/samples/reexport-shortpaths/_expected/cjs/main2.js index 8bcaed1c530..e71bc446c48 100644 --- a/test/chunking-form/samples/reexport-shortpaths/_expected/cjs/main2.js +++ b/test/chunking-form/samples/reexport-shortpaths/_expected/cjs/main2.js @@ -1,4 +1,6 @@ 'use strict'; -require('./generated-dep2.js'); +function foo() {} +console.log('dep2'); +exports.foo = foo; diff --git a/test/chunking-form/samples/reexport-shortpaths/_expected/cjs/main3.js b/test/chunking-form/samples/reexport-shortpaths/_expected/cjs/main3.js index 8bcaed1c530..700d8990ae5 100644 --- a/test/chunking-form/samples/reexport-shortpaths/_expected/cjs/main3.js +++ b/test/chunking-form/samples/reexport-shortpaths/_expected/cjs/main3.js @@ -1,4 +1,4 @@ 'use strict'; -require('./generated-dep2.js'); +require('./main2.js'); diff --git a/test/chunking-form/samples/reexport-shortpaths/_expected/es/generated-dep2.js b/test/chunking-form/samples/reexport-shortpaths/_expected/es/generated-dep2.js deleted file mode 100644 index 5c686abbfa1..00000000000 --- a/test/chunking-form/samples/reexport-shortpaths/_expected/es/generated-dep2.js +++ /dev/null @@ -1,4 +0,0 @@ -function foo() {} -console.log('dep2'); - -export { foo as f }; diff --git a/test/chunking-form/samples/reexport-shortpaths/_expected/es/main1.js b/test/chunking-form/samples/reexport-shortpaths/_expected/es/main1.js index b79be341f29..a44697e6af4 100644 --- a/test/chunking-form/samples/reexport-shortpaths/_expected/es/main1.js +++ b/test/chunking-form/samples/reexport-shortpaths/_expected/es/main1.js @@ -1,4 +1,4 @@ -import { f as foo } from './generated-dep2.js'; +import { f as foo } from './main2.js'; diff --git a/test/chunking-form/samples/reexport-shortpaths/_expected/es/main2.js b/test/chunking-form/samples/reexport-shortpaths/_expected/es/main2.js index e38989d38f2..5c686abbfa1 100644 --- a/test/chunking-form/samples/reexport-shortpaths/_expected/es/main2.js +++ b/test/chunking-form/samples/reexport-shortpaths/_expected/es/main2.js @@ -1 +1,4 @@ -import './generated-dep2.js'; +function foo() {} +console.log('dep2'); + +export { foo as f }; diff --git a/test/chunking-form/samples/reexport-shortpaths/_expected/es/main3.js b/test/chunking-form/samples/reexport-shortpaths/_expected/es/main3.js index e38989d38f2..5c07fb3a323 100644 --- a/test/chunking-form/samples/reexport-shortpaths/_expected/es/main3.js +++ b/test/chunking-form/samples/reexport-shortpaths/_expected/es/main3.js @@ -1 +1 @@ -import './generated-dep2.js'; +import './main2.js'; diff --git a/test/chunking-form/samples/reexport-shortpaths/_expected/system/generated-dep2.js b/test/chunking-form/samples/reexport-shortpaths/_expected/system/generated-dep2.js deleted file mode 100644 index 6d9cd126bb6..00000000000 --- a/test/chunking-form/samples/reexport-shortpaths/_expected/system/generated-dep2.js +++ /dev/null @@ -1,13 +0,0 @@ -System.register([], (function (exports) { - 'use strict'; - return { - execute: (function () { - - exports('f', foo); - - function foo() {} - console.log('dep2'); - - }) - }; -})); diff --git a/test/chunking-form/samples/reexport-shortpaths/_expected/system/main1.js b/test/chunking-form/samples/reexport-shortpaths/_expected/system/main1.js index ef67c7ff36d..9a88a295bd1 100644 --- a/test/chunking-form/samples/reexport-shortpaths/_expected/system/main1.js +++ b/test/chunking-form/samples/reexport-shortpaths/_expected/system/main1.js @@ -1,4 +1,4 @@ -System.register(['./generated-dep2.js'], (function (exports) { +System.register(['./main2.js'], (function (exports) { 'use strict'; var foo; return { diff --git a/test/chunking-form/samples/reexport-shortpaths/_expected/system/main2.js b/test/chunking-form/samples/reexport-shortpaths/_expected/system/main2.js index 710c9ab7a39..6d9cd126bb6 100644 --- a/test/chunking-form/samples/reexport-shortpaths/_expected/system/main2.js +++ b/test/chunking-form/samples/reexport-shortpaths/_expected/system/main2.js @@ -1,10 +1,12 @@ -System.register(['./generated-dep2.js'], (function () { +System.register([], (function (exports) { 'use strict'; return { - setters: [null], execute: (function () { + exports('f', foo); + function foo() {} + console.log('dep2'); }) }; diff --git a/test/chunking-form/samples/reexport-shortpaths/_expected/system/main3.js b/test/chunking-form/samples/reexport-shortpaths/_expected/system/main3.js index 710c9ab7a39..e81455fc230 100644 --- a/test/chunking-form/samples/reexport-shortpaths/_expected/system/main3.js +++ b/test/chunking-form/samples/reexport-shortpaths/_expected/system/main3.js @@ -1,4 +1,4 @@ -System.register(['./generated-dep2.js'], (function () { +System.register(['./main2.js'], (function () { 'use strict'; return { setters: [null], diff --git a/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/amd/generated-lib.js b/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/amd/generated-lib.js deleted file mode 100644 index e6936857cf2..00000000000 --- a/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/amd/generated-lib.js +++ /dev/null @@ -1,7 +0,0 @@ -define(['exports'], (function (exports) { 'use strict'; - - var lib = { foo: true, bar: true, baz: true }; - - exports.lib = lib; - -})); diff --git a/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/amd/main1.js b/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/amd/main1.js index 07a94775028..77212c9788a 100644 --- a/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/amd/main1.js +++ b/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/amd/main1.js @@ -1,8 +1,8 @@ -define(['exports', './generated-lib'], (function (exports, lib) { 'use strict'; +define(['exports'], (function (exports) { 'use strict'; + var lib = { foo: true, bar: true, baz: true }; - - exports.lib = lib.lib; - exports.foo = lib.lib.foo; + exports.foo = lib.foo; + exports.lib = lib; })); diff --git a/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/amd/main2.js b/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/amd/main2.js index b5b43aaa053..6b4c741df82 100644 --- a/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/amd/main2.js +++ b/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/amd/main2.js @@ -1,5 +1,5 @@ -define(['./generated-lib'], (function (lib) { 'use strict'; +define(['./main1'], (function (main1) { 'use strict'; - console.log(lib.lib, lib.lib.foo, lib.lib.bar, lib.lib.baz); + console.log(main1.lib, main1.lib.foo, main1.lib.bar, main1.lib.baz); })); diff --git a/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/amd/main3.js b/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/amd/main3.js index be4a1a8fdf9..582504359ca 100644 --- a/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/amd/main3.js +++ b/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/amd/main3.js @@ -1,7 +1,7 @@ -define(['exports', './generated-lib'], (function (exports, lib) { 'use strict'; +define(['exports', './main1'], (function (exports, main1) { 'use strict'; - exports.foo = lib.lib.foo; + exports.foo = main1.lib.foo; })); diff --git a/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/cjs/generated-lib.js b/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/cjs/generated-lib.js deleted file mode 100644 index 8f023f26e39..00000000000 --- a/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/cjs/generated-lib.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -var lib = { foo: true, bar: true, baz: true }; - -exports.lib = lib; diff --git a/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/cjs/main1.js b/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/cjs/main1.js index 4f7923b2b8c..7a8569163e5 100644 --- a/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/cjs/main1.js +++ b/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/cjs/main1.js @@ -1,8 +1,6 @@ 'use strict'; -var lib = require('./generated-lib.js'); +var lib = { foo: true, bar: true, baz: true }; - - -exports.lib = lib.lib; -exports.foo = lib.lib.foo; +exports.foo = lib.foo; +exports.lib = lib; diff --git a/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/cjs/main2.js b/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/cjs/main2.js index 96ce48edb46..fa13db42b6f 100644 --- a/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/cjs/main2.js +++ b/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/cjs/main2.js @@ -1,5 +1,5 @@ 'use strict'; -var lib = require('./generated-lib.js'); +var main1 = require('./main1.js'); -console.log(lib.lib, lib.lib.foo, lib.lib.bar, lib.lib.baz); +console.log(main1.lib, main1.lib.foo, main1.lib.bar, main1.lib.baz); diff --git a/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/cjs/main3.js b/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/cjs/main3.js index 3f2efa8bba9..bd507bf42fa 100644 --- a/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/cjs/main3.js +++ b/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/cjs/main3.js @@ -1,7 +1,7 @@ 'use strict'; -var lib = require('./generated-lib.js'); +var main1 = require('./main1.js'); -exports.foo = lib.lib.foo; +exports.foo = main1.lib.foo; diff --git a/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/es/generated-lib.js b/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/es/generated-lib.js deleted file mode 100644 index 9196d1bda06..00000000000 --- a/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/es/generated-lib.js +++ /dev/null @@ -1,3 +0,0 @@ -var lib = { foo: true, bar: true, baz: true }; - -export { lib as l }; diff --git a/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/es/main1.js b/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/es/main1.js index 797c479bb91..3c2424265a4 100644 --- a/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/es/main1.js +++ b/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/es/main1.js @@ -1,6 +1,4 @@ -import { l as lib } from './generated-lib.js'; - - +var lib = { foo: true, bar: true, baz: true }; var foo = lib.foo; export { foo, lib }; diff --git a/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/es/main2.js b/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/es/main2.js index 84d281eca4e..c927ef6ce31 100644 --- a/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/es/main2.js +++ b/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/es/main2.js @@ -1,3 +1,3 @@ -import { l as lib } from './generated-lib.js'; +import { lib } from './main1.js'; console.log(lib, lib.foo, lib.bar, lib.baz); diff --git a/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/es/main3.js b/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/es/main3.js index 76cd1353449..e6592ff26e5 100644 --- a/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/es/main3.js +++ b/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/es/main3.js @@ -1,4 +1,4 @@ -import { l as lib } from './generated-lib.js'; +import { lib } from './main1.js'; diff --git a/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/system/generated-lib.js b/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/system/generated-lib.js deleted file mode 100644 index 5f2369a68e1..00000000000 --- a/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/system/generated-lib.js +++ /dev/null @@ -1,10 +0,0 @@ -System.register([], (function (exports) { - 'use strict'; - return { - execute: (function () { - - var lib = exports('l', { foo: true, bar: true, baz: true }); - - }) - }; -})); diff --git a/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/system/main1.js b/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/system/main1.js index 0cb68053ea6..18a2d419926 100644 --- a/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/system/main1.js +++ b/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/system/main1.js @@ -1,14 +1,9 @@ -System.register(['./generated-lib.js'], (function (exports) { +System.register([], (function (exports) { 'use strict'; - var lib; return { - setters: [function (module) { - lib = module.l; - exports('lib', module.l); - }], execute: (function () { - + var lib = exports('lib', { foo: true, bar: true, baz: true }); exports('foo', lib.foo); diff --git a/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/system/main2.js b/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/system/main2.js index 6ccd7873e05..b7d77d70bbc 100644 --- a/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/system/main2.js +++ b/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/system/main2.js @@ -1,9 +1,9 @@ -System.register(['./generated-lib.js'], (function () { +System.register(['./main1.js'], (function () { 'use strict'; var lib; return { setters: [function (module) { - lib = module.l; + lib = module.lib; }], execute: (function () { diff --git a/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/system/main3.js b/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/system/main3.js index e90653e7345..3ca992f878c 100644 --- a/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/system/main3.js +++ b/test/chunking-form/samples/synthetic-named-exports/deduplicate-synthetic-named-exports-and-default/_expected/system/main3.js @@ -1,9 +1,9 @@ -System.register(['./generated-lib.js'], (function (exports) { +System.register(['./main1.js'], (function (exports) { 'use strict'; var lib; return { setters: [function (module) { - lib = module.l; + lib = module.lib; }], execute: (function () { diff --git a/test/function/samples/chunking-duplicate-reexport/_config.js b/test/function/samples/chunking-duplicate-reexport/_config.js index aa412cadade..2dc5fbac568 100644 --- a/test/function/samples/chunking-duplicate-reexport/_config.js +++ b/test/function/samples/chunking-duplicate-reexport/_config.js @@ -3,6 +3,11 @@ const assert = require('node:assert'); module.exports = defineTest({ description: 'handles duplicate reexports when using dynamic imports', exports(exports) { - return exports.then(result => assert.deepStrictEqual(result, [{ answer: 42 }, { answer: 42 }])); + return exports.then(result => + assert.deepStrictEqual(result, [ + { __proto__: null, answer: 42 }, + { __proto__: null, answer: 42 } + ]) + ); } }); From 514717d491e0bb3ecf5d47958d96a9e54dbdcaf3 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Wed, 10 May 2023 10:20:45 +0200 Subject: [PATCH 03/13] Improve performance with BigInt --- src/utils/chunkAssignment.ts | 102 +++++++++++------------------------ 1 file changed, 32 insertions(+), 70 deletions(-) diff --git a/src/utils/chunkAssignment.ts b/src/utils/chunkAssignment.ts index 52d9da49458..d46e8d720e7 100644 --- a/src/utils/chunkAssignment.ts +++ b/src/utils/chunkAssignment.ts @@ -418,8 +418,7 @@ interface ChunkDescription { // The signatures of all side effects included in or loaded with this chunk. // This is the intersection of all dependent entry side effects. As chunks are // merged, these sets are intersected. - // TODO Lukas use BigInt - correlatedSideEffects: Set; + correlatedSideEffects: bigint; dependencies: Set; dependentChunks: Set; // The indices of the entries depending on this chunk @@ -427,8 +426,7 @@ interface ChunkDescription { modules: Module[]; pure: boolean; // These are only the sideEffects contained in that chunk - // TODO Lukas use BigInt - sideEffects: Set; + sideEffects: bigint; size: number; } @@ -557,19 +555,19 @@ function getPartitionedChunks( const smallChunks: ChunkDescription[] = []; const bigChunks: ChunkDescription[] = []; const chunkByModule = new Map(); - const sideEffectsByEntry: Set[] = []; + const sideEffectsByEntry: bigint[] = []; for (let index = 0; index < numberOfEntries; index++) { - sideEffectsByEntry.push(new Set()); + sideEffectsByEntry.push(0n); } for (const [index, { dependentEntries, modules }] of chunkModules.entries()) { const chunkDescription: ChunkDescription = { - correlatedSideEffects: new Set(), + correlatedSideEffects: 0n, dependencies: new Set(), dependentChunks: new Set(), dependentEntries, modules, pure: true, - sideEffects: new Set(), + sideEffects: 0n, size: 0 }; let size = 0; @@ -586,12 +584,13 @@ function getPartitionedChunks( chunkDescription.pure = pure; chunkDescription.size = size; if (!pure) { + const sideEffect = 1n << BigInt(index); for (const entryIndex of dependentEntries) { - sideEffectsByEntry[entryIndex].add(index); + sideEffectsByEntry[entryIndex] |= sideEffect; } // In the beginning, each chunk is only its own side effect. After // merging, additional side effects can accumulate. - chunkDescription.sideEffects.add(index); + chunkDescription.sideEffects = sideEffect; } (size <= minChunkSize ? smallChunks : bigChunks).push(chunkDescription); } @@ -613,12 +612,12 @@ function getPartitionedChunks( function sortChunksAndAddDependenciesAndEffects( chunkLists: ChunkDescription[][], chunkByModule: Map, - sideEffectsByEntry: Set[] + sideEffectsByEntry: bigint[] ) { for (const chunks of chunkLists) { chunks.sort(compareChunkSize); for (const chunk of chunks) { - const { dependencies, modules, correlatedSideEffects, dependentEntries } = chunk; + const { dependencies, modules, dependentEntries } = chunk; for (const module of modules) { for (const dependency of module.getDependenciesToBeIncluded()) { const dependencyChunk = chunkByModule.get(dependency as Module); @@ -628,22 +627,10 @@ function sortChunksAndAddDependenciesAndEffects( } } } - let firstEntry = true; - // Correlated side effects is the intersection of all entry side effects + // Correlated side effects are the intersection of all entry side effects + chunk.correlatedSideEffects = -1n; for (const entryIndex of dependentEntries) { - const entryEffects = sideEffectsByEntry[entryIndex]; - if (firstEntry) { - for (const sideEffect of entryEffects) { - correlatedSideEffects.add(sideEffect); - } - firstEntry = false; - } else { - for (const sideEffect of correlatedSideEffects) { - if (!entryEffects.has(sideEffect)) { - correlatedSideEffects.delete(sideEffect); - } - } - } + chunk.correlatedSideEffects &= sideEffectsByEntry[entryIndex]; } } } @@ -661,18 +648,18 @@ function mergeChunks(chunkPartition: ChunkPartition, minChunkSize: number) { for (const mergedChunk of chunkPartition.small) { let closestChunk: ChunkDescription | null = null; let closestChunkDistance = Infinity; - const { modules, pure, size } = mergedChunk; + const { correlatedSideEffects, modules, pure, sideEffects, size } = mergedChunk; for (const targetChunk of concatLazy([chunkPartition.small, chunkPartition.big])) { if (mergedChunk === targetChunk) continue; // If both chunks are small, we also allow for unrelated merges during // the first pass - const onlySubsetMerge = !allowArbitraryMerges && targetChunk.size >= minChunkSize; // TODO Lukas this could be the load size increase instead, take it if there is no increase (non-included are taken as 0) - const distance = getChunkEntryDistance(mergedChunk, targetChunk, onlySubsetMerge); - if ( - distance < closestChunkDistance && - isValidMerge(mergedChunk, targetChunk, onlySubsetMerge) - ) { + const distance = getChunkEntryDistance( + mergedChunk, + targetChunk, + !allowArbitraryMerges && targetChunk.size >= minChunkSize + ); + if (distance < closestChunkDistance && isValidMerge(mergedChunk, targetChunk)) { closestChunk = targetChunk; closestChunkDistance = distance; } @@ -683,24 +670,12 @@ function mergeChunks(chunkPartition: ChunkPartition, minChunkSize: number) { closestChunk.modules.push(...modules); closestChunk.size += size; closestChunk.pure &&= pure; - const { - correlatedSideEffects, - dependencies, - dependentChunks, - dependentEntries, - sideEffects - } = closestChunk; - for (const sideEffect of correlatedSideEffects) { - if (!mergedChunk.correlatedSideEffects.has(sideEffect)) { - correlatedSideEffects.delete(sideEffect); - } - } + const { dependencies, dependentChunks, dependentEntries } = closestChunk; + closestChunk.correlatedSideEffects &= correlatedSideEffects; + closestChunk.sideEffects |= sideEffects; for (const entry of mergedChunk.dependentEntries) { dependentEntries.add(entry); } - for (const sideEffect of mergedChunk.sideEffects) { - sideEffects.add(sideEffect); - } for (const dependency of mergedChunk.dependencies) { dependencies.add(dependency); dependency.dependentChunks.delete(mergedChunk); @@ -721,29 +696,20 @@ function mergeChunks(chunkPartition: ChunkPartition, minChunkSize: number) { // Merging will not produce cycles if none of the direct non-merged dependencies // of a chunk have the other chunk as a transitive dependency -function isValidMerge( - mergedChunk: ChunkDescription, - targetChunk: ChunkDescription, - onlySubsetMerge: boolean -) { +function isValidMerge(mergedChunk: ChunkDescription, targetChunk: ChunkDescription) { return !( - hasTransitiveDependencyOrNonCorrelatedSideEffect(mergedChunk, targetChunk, true) || - hasTransitiveDependencyOrNonCorrelatedSideEffect(targetChunk, mergedChunk, !onlySubsetMerge) + hasTransitiveDependencyOrNonCorrelatedSideEffect(mergedChunk, targetChunk) || + hasTransitiveDependencyOrNonCorrelatedSideEffect(targetChunk, mergedChunk) ); } function hasTransitiveDependencyOrNonCorrelatedSideEffect( dependentChunk: ChunkDescription, - dependencyChunk: ChunkDescription, - checkSideEffects: boolean + dependencyChunk: ChunkDescription ) { const { correlatedSideEffects } = dependencyChunk; - if (checkSideEffects) { - for (const sideEffect of dependentChunk.sideEffects) { - if (!correlatedSideEffects.has(sideEffect)) { - return true; - } - } + if ((correlatedSideEffects & dependentChunk.sideEffects) !== dependentChunk.sideEffects) { + return true; } const chunksToCheck = new Set(dependentChunk.dependencies); for (const { dependencies, sideEffects } of chunksToCheck) { @@ -753,12 +719,8 @@ function hasTransitiveDependencyOrNonCorrelatedSideEffect( } chunksToCheck.add(dependency); } - if (checkSideEffects) { - for (const sideEffect of sideEffects) { - if (!correlatedSideEffects.has(sideEffect)) { - return true; - } - } + if ((correlatedSideEffects & sideEffects) !== sideEffects) { + return true; } } return false; From 95640855a363103c029b2d326985cb66c3449f52 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Wed, 10 May 2023 13:31:01 +0200 Subject: [PATCH 04/13] Rename variable --- src/utils/chunkAssignment.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/utils/chunkAssignment.ts b/src/utils/chunkAssignment.ts index d46e8d720e7..d68b449ffda 100644 --- a/src/utils/chunkAssignment.ts +++ b/src/utils/chunkAssignment.ts @@ -514,20 +514,20 @@ type ChunkPartition = { // technique similar to what we do for side effects to compare the size of the // static dependencies that are not part of the correlated dependencies function getOptimizedChunks( - chunkModules: ModulesWithDependentEntries[], + initialChunks: ModulesWithDependentEntries[], numberOfEntries: number, minChunkSize: number ): { modules: Module[] }[] { timeStart('optimize chunks', 3); - const chunkPartition = getPartitionedChunks(chunkModules, numberOfEntries, minChunkSize); + const chunkPartition = getPartitionedChunks(initialChunks, numberOfEntries, minChunkSize); if (!chunkPartition) { timeEnd('optimize chunks', 3); - return chunkModules; // the actual modules + return initialChunks; // the actual modules } minChunkSize && console.log( 'Before eliminating small chunks, there were\n', - chunkModules.length, + initialChunks.length, 'chunks, of which\n', chunkPartition.small.size, 'were below minChunkSize.' @@ -548,7 +548,7 @@ function getOptimizedChunks( } function getPartitionedChunks( - chunkModules: ModulesWithDependentEntries[], + initialChunks: ModulesWithDependentEntries[], numberOfEntries: number, minChunkSize: number ): ChunkPartition | null { @@ -559,7 +559,7 @@ function getPartitionedChunks( for (let index = 0; index < numberOfEntries; index++) { sideEffectsByEntry.push(0n); } - for (const [index, { dependentEntries, modules }] of chunkModules.entries()) { + for (const [index, { dependentEntries, modules }] of initialChunks.entries()) { const chunkDescription: ChunkDescription = { correlatedSideEffects: 0n, dependencies: new Set(), From c58d3816fa1ca4544651c4677cf59ca53e834a92 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Thu, 11 May 2023 10:39:27 +0200 Subject: [PATCH 05/13] Track atoms over side effects --- src/utils/chunkAssignment.ts | 123 ++++++++++++++++++++--------------- 1 file changed, 71 insertions(+), 52 deletions(-) diff --git a/src/utils/chunkAssignment.ts b/src/utils/chunkAssignment.ts index d68b449ffda..a84d49c3323 100644 --- a/src/utils/chunkAssignment.ts +++ b/src/utils/chunkAssignment.ts @@ -415,24 +415,32 @@ function removeUnnecessaryDependentEntries( } interface ChunkDescription { - // The signatures of all side effects included in or loaded with this chunk. - // This is the intersection of all dependent entry side effects. As chunks are - // merged, these sets are intersected. - correlatedSideEffects: bigint; + /** + * These are the atoms (=initial chunks) that are contained in this chunk + */ + containedAtoms: bigint; + /** + * The signatures of all atoms that are included in or loaded with this + * chunk. This is the intersection of all dependent entry modules. As chunks + * are merged, these sets are intersected. + */ + correlatedAtoms: bigint; dependencies: Set; dependentChunks: Set; - // The indices of the entries depending on this chunk + /** + * The indices of the entries depending on this chunk + */ dependentEntries: Set; modules: Module[]; pure: boolean; - // These are only the sideEffects contained in that chunk - sideEffects: bigint; size: number; } -type ChunkPartition = { - [key in 'small' | 'big']: Set; -}; +interface ChunkPartition { + big: Set; + sideEffectAtoms: bigint; + small: Set; +} /** * This function tries to get rid of small chunks by merging them with other @@ -510,9 +518,6 @@ type ChunkPartition = { * following the rule (a), starting with the smallest chunks to look for * possible merge targets. */ -// TODO instead of picking the "closest" chunk, we could actually use a -// technique similar to what we do for side effects to compare the size of the -// static dependencies that are not part of the correlated dependencies function getOptimizedChunks( initialChunks: ModulesWithDependentEntries[], numberOfEntries: number, @@ -555,19 +560,21 @@ function getPartitionedChunks( const smallChunks: ChunkDescription[] = []; const bigChunks: ChunkDescription[] = []; const chunkByModule = new Map(); - const sideEffectsByEntry: bigint[] = []; + const atomsByEntry: bigint[] = []; for (let index = 0; index < numberOfEntries; index++) { - sideEffectsByEntry.push(0n); + atomsByEntry.push(0n); } - for (const [index, { dependentEntries, modules }] of initialChunks.entries()) { + let sideEffectAtoms = 0n; + let containedAtoms = 1n; + for (const { dependentEntries, modules } of initialChunks) { const chunkDescription: ChunkDescription = { - correlatedSideEffects: 0n, + containedAtoms, + correlatedAtoms: 0n, dependencies: new Set(), dependentChunks: new Set(), dependentEntries, modules, pure: true, - sideEffects: 0n, size: 0 }; let size = 0; @@ -584,35 +591,30 @@ function getPartitionedChunks( chunkDescription.pure = pure; chunkDescription.size = size; if (!pure) { - const sideEffect = 1n << BigInt(index); - for (const entryIndex of dependentEntries) { - sideEffectsByEntry[entryIndex] |= sideEffect; - } - // In the beginning, each chunk is only its own side effect. After - // merging, additional side effects can accumulate. - chunkDescription.sideEffects = sideEffect; + sideEffectAtoms |= containedAtoms; + } + for (const entryIndex of dependentEntries) { + atomsByEntry[entryIndex] |= containedAtoms; } (size <= minChunkSize ? smallChunks : bigChunks).push(chunkDescription); + containedAtoms <<= 1n; } // If there are no small chunks, we will not optimize if (smallChunks.length === 0) { return null; } - sortChunksAndAddDependenciesAndEffects( - [bigChunks, smallChunks], - chunkByModule, - sideEffectsByEntry - ); + sortChunksAndAddDependenciesAndAtoms([bigChunks, smallChunks], chunkByModule, atomsByEntry); return { big: new Set(bigChunks), + sideEffectAtoms, small: new Set(smallChunks) }; } -function sortChunksAndAddDependenciesAndEffects( +function sortChunksAndAddDependenciesAndAtoms( chunkLists: ChunkDescription[][], chunkByModule: Map, - sideEffectsByEntry: bigint[] + atomsByEntry: bigint[] ) { for (const chunks of chunkLists) { chunks.sort(compareChunkSize); @@ -627,10 +629,10 @@ function sortChunksAndAddDependenciesAndEffects( } } } - // Correlated side effects are the intersection of all entry side effects - chunk.correlatedSideEffects = -1n; + // Correlated atoms are the intersection of all entry atoms + chunk.correlatedAtoms = -1n; for (const entryIndex of dependentEntries) { - chunk.correlatedSideEffects &= sideEffectsByEntry[entryIndex]; + chunk.correlatedAtoms &= atomsByEntry[entryIndex]; } } } @@ -644,12 +646,13 @@ function compareChunkSize( } function mergeChunks(chunkPartition: ChunkPartition, minChunkSize: number) { + const { big, sideEffectAtoms, small } = chunkPartition; for (const allowArbitraryMerges of minChunkSize > 0 ? [false, true] : [false]) { - for (const mergedChunk of chunkPartition.small) { + for (const mergedChunk of small) { let closestChunk: ChunkDescription | null = null; let closestChunkDistance = Infinity; - const { correlatedSideEffects, modules, pure, sideEffects, size } = mergedChunk; - for (const targetChunk of concatLazy([chunkPartition.small, chunkPartition.big])) { + const { containedAtoms, correlatedAtoms, modules, pure, size } = mergedChunk; + for (const targetChunk of concatLazy([small, big])) { if (mergedChunk === targetChunk) continue; // If both chunks are small, we also allow for unrelated merges during // the first pass @@ -659,20 +662,23 @@ function mergeChunks(chunkPartition: ChunkPartition, minChunkSize: number) { targetChunk, !allowArbitraryMerges && targetChunk.size >= minChunkSize ); - if (distance < closestChunkDistance && isValidMerge(mergedChunk, targetChunk)) { + if ( + distance < closestChunkDistance && + isValidMerge(mergedChunk, targetChunk, sideEffectAtoms) + ) { closestChunk = targetChunk; closestChunkDistance = distance; } } if (closestChunk) { - chunkPartition.small.delete(mergedChunk); + small.delete(mergedChunk); getChunksInPartition(closestChunk, minChunkSize, chunkPartition).delete(closestChunk); closestChunk.modules.push(...modules); closestChunk.size += size; closestChunk.pure &&= pure; const { dependencies, dependentChunks, dependentEntries } = closestChunk; - closestChunk.correlatedSideEffects &= correlatedSideEffects; - closestChunk.sideEffects |= sideEffects; + closestChunk.correlatedAtoms &= correlatedAtoms; + closestChunk.containedAtoms |= containedAtoms; for (const entry of mergedChunk.dependentEntries) { dependentEntries.add(entry); } @@ -694,34 +700,47 @@ function mergeChunks(chunkPartition: ChunkPartition, minChunkSize: number) { } } +// function getUnnecessaryLoadIfMergeable( +// mergedChunk: ChunkDescription, +// targetChunk: ChunkDescription, +// maxUnnecessaryLoad: number +// ): number | false {} + // Merging will not produce cycles if none of the direct non-merged dependencies // of a chunk have the other chunk as a transitive dependency -function isValidMerge(mergedChunk: ChunkDescription, targetChunk: ChunkDescription) { +function isValidMerge( + mergedChunk: ChunkDescription, + targetChunk: ChunkDescription, + sideEffectAtoms: bigint +) { return !( - hasTransitiveDependencyOrNonCorrelatedSideEffect(mergedChunk, targetChunk) || - hasTransitiveDependencyOrNonCorrelatedSideEffect(targetChunk, mergedChunk) + hasTransitiveDependencyOrNonCorrelatedSideEffect(mergedChunk, targetChunk, sideEffectAtoms) || + hasTransitiveDependencyOrNonCorrelatedSideEffect(targetChunk, mergedChunk, sideEffectAtoms) ); } function hasTransitiveDependencyOrNonCorrelatedSideEffect( dependentChunk: ChunkDescription, - dependencyChunk: ChunkDescription + dependencyChunk: ChunkDescription, + sideEffectAtoms: bigint ) { - const { correlatedSideEffects } = dependencyChunk; - if ((correlatedSideEffects & dependentChunk.sideEffects) !== dependentChunk.sideEffects) { + const { correlatedAtoms } = dependencyChunk; + const dependentContainedSideEffects = dependentChunk.containedAtoms & sideEffectAtoms; + if ((correlatedAtoms & dependentContainedSideEffects) !== dependentContainedSideEffects) { return true; } const chunksToCheck = new Set(dependentChunk.dependencies); - for (const { dependencies, sideEffects } of chunksToCheck) { + for (const { dependencies, containedAtoms } of chunksToCheck) { + const containedSideEffects = containedAtoms & sideEffectAtoms; + if ((correlatedAtoms & containedSideEffects) !== containedSideEffects) { + return true; + } for (const dependency of dependencies) { if (dependency === dependencyChunk) { return true; } chunksToCheck.add(dependency); } - if ((correlatedSideEffects & sideEffects) !== sideEffects) { - return true; - } } return false; } From 3f701f5a14735238d98402cff6d038c137873336 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Fri, 12 May 2023 10:50:31 +0200 Subject: [PATCH 06/13] Ignore reexports when finding facades --- src/Chunk.ts | 7 ++++++- test/chunking-form/index.js | 4 ++-- .../facades-with-external-reexports/_config.js | 8 ++++++++ .../_expected/amd/main.js | 10 ++++++++++ .../_expected/amd/other.js | 12 ++++++++++++ .../_expected/cjs/main.js | 11 +++++++++++ .../_expected/cjs/other.js | 12 ++++++++++++ .../_expected/es/main.js | 2 ++ .../_expected/es/other.js | 5 +++++ .../_expected/system/main.js | 13 +++++++++++++ .../_expected/system/other.js | 15 +++++++++++++++ .../facades-with-external-reexports/main.js | 3 +++ .../facades-with-external-reexports/other.js | 3 +++ .../samples/facades-with-reexports/_config.js | 7 +++++++ .../facades-with-reexports/_expected/amd/main.js | 7 +++++++ .../facades-with-reexports/_expected/amd/other.js | 9 +++++++++ .../facades-with-reexports/_expected/amd/third.js | 10 ++++++++++ .../facades-with-reexports/_expected/cjs/main.js | 8 ++++++++ .../facades-with-reexports/_expected/cjs/other.js | 9 +++++++++ .../facades-with-reexports/_expected/cjs/third.js | 8 ++++++++ .../facades-with-reexports/_expected/es/main.js | 2 ++ .../facades-with-reexports/_expected/es/other.js | 5 +++++ .../facades-with-reexports/_expected/es/third.js | 5 +++++ .../_expected/system/main.js | 13 +++++++++++++ .../_expected/system/other.js | 15 +++++++++++++++ .../_expected/system/third.js | 12 ++++++++++++ .../samples/facades-with-reexports/main.js | 3 +++ .../samples/facades-with-reexports/other.js | 3 +++ .../samples/facades-with-reexports/third.js | 3 +++ 29 files changed, 221 insertions(+), 3 deletions(-) create mode 100644 test/chunking-form/samples/facades-with-external-reexports/_config.js create mode 100644 test/chunking-form/samples/facades-with-external-reexports/_expected/amd/main.js create mode 100644 test/chunking-form/samples/facades-with-external-reexports/_expected/amd/other.js create mode 100644 test/chunking-form/samples/facades-with-external-reexports/_expected/cjs/main.js create mode 100644 test/chunking-form/samples/facades-with-external-reexports/_expected/cjs/other.js create mode 100644 test/chunking-form/samples/facades-with-external-reexports/_expected/es/main.js create mode 100644 test/chunking-form/samples/facades-with-external-reexports/_expected/es/other.js create mode 100644 test/chunking-form/samples/facades-with-external-reexports/_expected/system/main.js create mode 100644 test/chunking-form/samples/facades-with-external-reexports/_expected/system/other.js create mode 100644 test/chunking-form/samples/facades-with-external-reexports/main.js create mode 100644 test/chunking-form/samples/facades-with-external-reexports/other.js create mode 100644 test/chunking-form/samples/facades-with-reexports/_config.js create mode 100644 test/chunking-form/samples/facades-with-reexports/_expected/amd/main.js create mode 100644 test/chunking-form/samples/facades-with-reexports/_expected/amd/other.js create mode 100644 test/chunking-form/samples/facades-with-reexports/_expected/amd/third.js create mode 100644 test/chunking-form/samples/facades-with-reexports/_expected/cjs/main.js create mode 100644 test/chunking-form/samples/facades-with-reexports/_expected/cjs/other.js create mode 100644 test/chunking-form/samples/facades-with-reexports/_expected/cjs/third.js create mode 100644 test/chunking-form/samples/facades-with-reexports/_expected/es/main.js create mode 100644 test/chunking-form/samples/facades-with-reexports/_expected/es/other.js create mode 100644 test/chunking-form/samples/facades-with-reexports/_expected/es/third.js create mode 100644 test/chunking-form/samples/facades-with-reexports/_expected/system/main.js create mode 100644 test/chunking-form/samples/facades-with-reexports/_expected/system/other.js create mode 100644 test/chunking-form/samples/facades-with-reexports/_expected/system/third.js create mode 100644 test/chunking-form/samples/facades-with-reexports/main.js create mode 100644 test/chunking-form/samples/facades-with-reexports/other.js create mode 100644 test/chunking-form/samples/facades-with-reexports/third.js diff --git a/src/Chunk.ts b/src/Chunk.ts index c4d60b8c2c3..c502958dd4d 100644 --- a/src/Chunk.ts +++ b/src/Chunk.ts @@ -302,11 +302,13 @@ export default class Chunk { canModuleBeFacade(module: Module, exposedVariables: ReadonlySet): boolean { const moduleExportNamesByVariable = module.getExportNamesByVariable(); + // All exports of this chunk need to be exposed by the candidate module for (const exposedVariable of this.exports) { if (!moduleExportNamesByVariable.has(exposedVariable)) { return false; } } + // Additionally, we need to expose namespaces of dynamic entries that are not the facade module and exports from other entry modules for (const exposedVariable of exposedVariables) { if ( !( @@ -387,7 +389,10 @@ export default class Chunk { for (const module of entryModules) { if (module.preserveSignature) { for (const exportedVariable of module.getExportNamesByVariable().keys()) { - exposedVariables.add(exportedVariable); + // We need to expose all entry exports from this chunk + if (this.chunkByModule.get(exportedVariable.module as Module) === this) { + exposedVariables.add(exportedVariable); + } } } } diff --git a/test/chunking-form/index.js b/test/chunking-form/index.js index f0dd86fcd40..dd372e532ef 100644 --- a/test/chunking-form/index.js +++ b/test/chunking-form/index.js @@ -1,8 +1,8 @@ const { basename, resolve } = require('node:path'); -const { chdir } = require('node:process'); /** * @type {import('../../src/rollup/types')} Rollup */ +// @ts-expect-error not included in types const { rollup } = require('../../dist/rollup'); const { runTestSuiteWithSamples, assertDirectoriesAreEqual } = require('../utils.js'); @@ -23,7 +23,7 @@ runTestSuiteWithSamples('chunking form', resolve(__dirname, 'samples'), (directo for (const format of FORMATS) { it('generates ' + format, async () => { - chdir(directory); + process.chdir(directory); bundle = bundle || (await rollup({ diff --git a/test/chunking-form/samples/facades-with-external-reexports/_config.js b/test/chunking-form/samples/facades-with-external-reexports/_config.js new file mode 100644 index 00000000000..4293de04426 --- /dev/null +++ b/test/chunking-form/samples/facades-with-external-reexports/_config.js @@ -0,0 +1,8 @@ +module.exports = defineTest({ + description: 'ignores external reexports of other entries when finding facades', + options: { + external: ['external'], + input: ['main.js', 'other.js'] + }, + expectedWarnings: ['CIRCULAR_DEPENDENCY'] +}); diff --git a/test/chunking-form/samples/facades-with-external-reexports/_expected/amd/main.js b/test/chunking-form/samples/facades-with-external-reexports/_expected/amd/main.js new file mode 100644 index 00000000000..d7e2e297cc1 --- /dev/null +++ b/test/chunking-form/samples/facades-with-external-reexports/_expected/amd/main.js @@ -0,0 +1,10 @@ +define(['exports', './other', 'external'], (function (exports, other, external) { 'use strict'; + + + + Object.defineProperty(exports, 'foo', { + enumerable: true, + get: function () { return external.foo; } + }); + +})); diff --git a/test/chunking-form/samples/facades-with-external-reexports/_expected/amd/other.js b/test/chunking-form/samples/facades-with-external-reexports/_expected/amd/other.js new file mode 100644 index 00000000000..e1a612d8e01 --- /dev/null +++ b/test/chunking-form/samples/facades-with-external-reexports/_expected/amd/other.js @@ -0,0 +1,12 @@ +define(['exports', 'external'], (function (exports, external) { 'use strict'; + + console.log('other'); + + console.log('main'); + + Object.defineProperty(exports, 'bar', { + enumerable: true, + get: function () { return external.bar; } + }); + +})); diff --git a/test/chunking-form/samples/facades-with-external-reexports/_expected/cjs/main.js b/test/chunking-form/samples/facades-with-external-reexports/_expected/cjs/main.js new file mode 100644 index 00000000000..b6104065cd0 --- /dev/null +++ b/test/chunking-form/samples/facades-with-external-reexports/_expected/cjs/main.js @@ -0,0 +1,11 @@ +'use strict'; + +require('./other.js'); +var external = require('external'); + + + +Object.defineProperty(exports, 'foo', { + enumerable: true, + get: function () { return external.foo; } +}); diff --git a/test/chunking-form/samples/facades-with-external-reexports/_expected/cjs/other.js b/test/chunking-form/samples/facades-with-external-reexports/_expected/cjs/other.js new file mode 100644 index 00000000000..bbf88d76dd5 --- /dev/null +++ b/test/chunking-form/samples/facades-with-external-reexports/_expected/cjs/other.js @@ -0,0 +1,12 @@ +'use strict'; + +var external = require('external'); + +console.log('other'); + +console.log('main'); + +Object.defineProperty(exports, 'bar', { + enumerable: true, + get: function () { return external.bar; } +}); diff --git a/test/chunking-form/samples/facades-with-external-reexports/_expected/es/main.js b/test/chunking-form/samples/facades-with-external-reexports/_expected/es/main.js new file mode 100644 index 00000000000..95e22a3dc89 --- /dev/null +++ b/test/chunking-form/samples/facades-with-external-reexports/_expected/es/main.js @@ -0,0 +1,2 @@ +import './other.js'; +export { foo } from 'external'; diff --git a/test/chunking-form/samples/facades-with-external-reexports/_expected/es/other.js b/test/chunking-form/samples/facades-with-external-reexports/_expected/es/other.js new file mode 100644 index 00000000000..e298f01b36e --- /dev/null +++ b/test/chunking-form/samples/facades-with-external-reexports/_expected/es/other.js @@ -0,0 +1,5 @@ +export { bar } from 'external'; + +console.log('other'); + +console.log('main'); diff --git a/test/chunking-form/samples/facades-with-external-reexports/_expected/system/main.js b/test/chunking-form/samples/facades-with-external-reexports/_expected/system/main.js new file mode 100644 index 00000000000..f22a8683897 --- /dev/null +++ b/test/chunking-form/samples/facades-with-external-reexports/_expected/system/main.js @@ -0,0 +1,13 @@ +System.register(['./other.js', 'external'], (function (exports) { + 'use strict'; + return { + setters: [null, function (module) { + exports('foo', module.foo); + }], + execute: (function () { + + + + }) + }; +})); diff --git a/test/chunking-form/samples/facades-with-external-reexports/_expected/system/other.js b/test/chunking-form/samples/facades-with-external-reexports/_expected/system/other.js new file mode 100644 index 00000000000..2d72d6211c1 --- /dev/null +++ b/test/chunking-form/samples/facades-with-external-reexports/_expected/system/other.js @@ -0,0 +1,15 @@ +System.register(['external'], (function (exports) { + 'use strict'; + return { + setters: [function (module) { + exports('bar', module.bar); + }], + execute: (function () { + + console.log('other'); + + console.log('main'); + + }) + }; +})); diff --git a/test/chunking-form/samples/facades-with-external-reexports/main.js b/test/chunking-form/samples/facades-with-external-reexports/main.js new file mode 100644 index 00000000000..7bd82763f1c --- /dev/null +++ b/test/chunking-form/samples/facades-with-external-reexports/main.js @@ -0,0 +1,3 @@ +import './other'; +console.log('main'); +export { foo } from 'external'; diff --git a/test/chunking-form/samples/facades-with-external-reexports/other.js b/test/chunking-form/samples/facades-with-external-reexports/other.js new file mode 100644 index 00000000000..5d3e9ea0bbf --- /dev/null +++ b/test/chunking-form/samples/facades-with-external-reexports/other.js @@ -0,0 +1,3 @@ +import './main'; +console.log('other'); +export { bar } from 'external'; diff --git a/test/chunking-form/samples/facades-with-reexports/_config.js b/test/chunking-form/samples/facades-with-reexports/_config.js new file mode 100644 index 00000000000..18a42efb9ad --- /dev/null +++ b/test/chunking-form/samples/facades-with-reexports/_config.js @@ -0,0 +1,7 @@ +module.exports = defineTest({ + description: 'ignores reexports of other entries when finding facades', + options: { + input: ['main.js', 'other.js', 'third.js'] + }, + expectedWarnings: ['CIRCULAR_DEPENDENCY'] +}); diff --git a/test/chunking-form/samples/facades-with-reexports/_expected/amd/main.js b/test/chunking-form/samples/facades-with-reexports/_expected/amd/main.js new file mode 100644 index 00000000000..e4ffeffbc4a --- /dev/null +++ b/test/chunking-form/samples/facades-with-reexports/_expected/amd/main.js @@ -0,0 +1,7 @@ +define(['exports', './other', './third'], (function (exports, other, third) { 'use strict'; + + + + exports.foo = third.foo; + +})); diff --git a/test/chunking-form/samples/facades-with-reexports/_expected/amd/other.js b/test/chunking-form/samples/facades-with-reexports/_expected/amd/other.js new file mode 100644 index 00000000000..d8eb63aec2d --- /dev/null +++ b/test/chunking-form/samples/facades-with-reexports/_expected/amd/other.js @@ -0,0 +1,9 @@ +define(['exports', './third'], (function (exports, third) { 'use strict'; + + console.log('other'); + + console.log('main'); + + exports.bar = third.bar; + +})); diff --git a/test/chunking-form/samples/facades-with-reexports/_expected/amd/third.js b/test/chunking-form/samples/facades-with-reexports/_expected/amd/third.js new file mode 100644 index 00000000000..63963eb303b --- /dev/null +++ b/test/chunking-form/samples/facades-with-reexports/_expected/amd/third.js @@ -0,0 +1,10 @@ +define(['exports'], (function (exports) { 'use strict'; + + console.log('third'); + const foo = 'foo'; + const bar = 'bar'; + + exports.bar = bar; + exports.foo = foo; + +})); diff --git a/test/chunking-form/samples/facades-with-reexports/_expected/cjs/main.js b/test/chunking-form/samples/facades-with-reexports/_expected/cjs/main.js new file mode 100644 index 00000000000..2f109781de0 --- /dev/null +++ b/test/chunking-form/samples/facades-with-reexports/_expected/cjs/main.js @@ -0,0 +1,8 @@ +'use strict'; + +require('./other.js'); +var third = require('./third.js'); + + + +exports.foo = third.foo; diff --git a/test/chunking-form/samples/facades-with-reexports/_expected/cjs/other.js b/test/chunking-form/samples/facades-with-reexports/_expected/cjs/other.js new file mode 100644 index 00000000000..ad769d264ae --- /dev/null +++ b/test/chunking-form/samples/facades-with-reexports/_expected/cjs/other.js @@ -0,0 +1,9 @@ +'use strict'; + +var third = require('./third.js'); + +console.log('other'); + +console.log('main'); + +exports.bar = third.bar; diff --git a/test/chunking-form/samples/facades-with-reexports/_expected/cjs/third.js b/test/chunking-form/samples/facades-with-reexports/_expected/cjs/third.js new file mode 100644 index 00000000000..8f0e3640b2f --- /dev/null +++ b/test/chunking-form/samples/facades-with-reexports/_expected/cjs/third.js @@ -0,0 +1,8 @@ +'use strict'; + +console.log('third'); +const foo = 'foo'; +const bar = 'bar'; + +exports.bar = bar; +exports.foo = foo; diff --git a/test/chunking-form/samples/facades-with-reexports/_expected/es/main.js b/test/chunking-form/samples/facades-with-reexports/_expected/es/main.js new file mode 100644 index 00000000000..7c4f4ccc4be --- /dev/null +++ b/test/chunking-form/samples/facades-with-reexports/_expected/es/main.js @@ -0,0 +1,2 @@ +import './other.js'; +export { foo } from './third.js'; diff --git a/test/chunking-form/samples/facades-with-reexports/_expected/es/other.js b/test/chunking-form/samples/facades-with-reexports/_expected/es/other.js new file mode 100644 index 00000000000..4b227bf9b4f --- /dev/null +++ b/test/chunking-form/samples/facades-with-reexports/_expected/es/other.js @@ -0,0 +1,5 @@ +export { bar } from './third.js'; + +console.log('other'); + +console.log('main'); diff --git a/test/chunking-form/samples/facades-with-reexports/_expected/es/third.js b/test/chunking-form/samples/facades-with-reexports/_expected/es/third.js new file mode 100644 index 00000000000..c7bb3ce0c34 --- /dev/null +++ b/test/chunking-form/samples/facades-with-reexports/_expected/es/third.js @@ -0,0 +1,5 @@ +console.log('third'); +const foo = 'foo'; +const bar = 'bar'; + +export { bar, foo }; diff --git a/test/chunking-form/samples/facades-with-reexports/_expected/system/main.js b/test/chunking-form/samples/facades-with-reexports/_expected/system/main.js new file mode 100644 index 00000000000..227acabbd0f --- /dev/null +++ b/test/chunking-form/samples/facades-with-reexports/_expected/system/main.js @@ -0,0 +1,13 @@ +System.register(['./other.js', './third.js'], (function (exports) { + 'use strict'; + return { + setters: [null, function (module) { + exports('foo', module.foo); + }], + execute: (function () { + + + + }) + }; +})); diff --git a/test/chunking-form/samples/facades-with-reexports/_expected/system/other.js b/test/chunking-form/samples/facades-with-reexports/_expected/system/other.js new file mode 100644 index 00000000000..fa28c6ea18d --- /dev/null +++ b/test/chunking-form/samples/facades-with-reexports/_expected/system/other.js @@ -0,0 +1,15 @@ +System.register(['./third.js'], (function (exports) { + 'use strict'; + return { + setters: [function (module) { + exports('bar', module.bar); + }], + execute: (function () { + + console.log('other'); + + console.log('main'); + + }) + }; +})); diff --git a/test/chunking-form/samples/facades-with-reexports/_expected/system/third.js b/test/chunking-form/samples/facades-with-reexports/_expected/system/third.js new file mode 100644 index 00000000000..f8e87b06b32 --- /dev/null +++ b/test/chunking-form/samples/facades-with-reexports/_expected/system/third.js @@ -0,0 +1,12 @@ +System.register([], (function (exports) { + 'use strict'; + return { + execute: (function () { + + console.log('third'); + const foo = exports('foo', 'foo'); + const bar = exports('bar', 'bar'); + + }) + }; +})); diff --git a/test/chunking-form/samples/facades-with-reexports/main.js b/test/chunking-form/samples/facades-with-reexports/main.js new file mode 100644 index 00000000000..7322abb42a9 --- /dev/null +++ b/test/chunking-form/samples/facades-with-reexports/main.js @@ -0,0 +1,3 @@ +import './other'; +console.log('main'); +export { foo } from './third'; diff --git a/test/chunking-form/samples/facades-with-reexports/other.js b/test/chunking-form/samples/facades-with-reexports/other.js new file mode 100644 index 00000000000..e7c70e8cfe1 --- /dev/null +++ b/test/chunking-form/samples/facades-with-reexports/other.js @@ -0,0 +1,3 @@ +import './main'; +console.log('other'); +export { bar } from './third'; diff --git a/test/chunking-form/samples/facades-with-reexports/third.js b/test/chunking-form/samples/facades-with-reexports/third.js new file mode 100644 index 00000000000..ff311c81d58 --- /dev/null +++ b/test/chunking-form/samples/facades-with-reexports/third.js @@ -0,0 +1,3 @@ +console.log('third'); +export const foo = 'foo'; +export const bar = 'bar'; From 66ec7770b890aac4abfa0c2e095f1ece4fad19b9 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Fri, 12 May 2023 13:20:11 +0200 Subject: [PATCH 07/13] Use size increase to determine best merge target --- src/utils/chunkAssignment.ts | 193 ++++++++++-------- .../samples/external-reexports/_config.js | 1 + .../_config.js | 1 + ...enerated-small3.js => generated-small2.js} | 4 +- .../_expected/amd/generated-small4.js | 4 +- .../best-merge-target/_expected/amd/main1.js | 4 +- .../best-merge-target/_expected/amd/main2.js | 4 +- .../best-merge-target/_expected/amd/main3.js | 4 +- .../best-merge-target/_expected/amd/main4.js | 4 +- .../best-merge-target/_expected/amd/main5.js | 4 +- .../best-merge-target/_expected/amd/main6.js | 4 +- .../best-merge-target/_expected/amd/main7.js | 4 +- .../best-merge-target/_expected/amd/main8.js | 4 +- ...enerated-small3.js => generated-small2.js} | 4 +- .../_expected/cjs/generated-small4.js | 4 +- .../best-merge-target/_expected/cjs/main1.js | 5 +- .../best-merge-target/_expected/cjs/main2.js | 3 +- .../best-merge-target/_expected/cjs/main3.js | 4 +- .../best-merge-target/_expected/cjs/main4.js | 4 +- .../best-merge-target/_expected/cjs/main5.js | 4 +- .../best-merge-target/_expected/cjs/main6.js | 4 +- .../best-merge-target/_expected/cjs/main7.js | 4 +- .../best-merge-target/_expected/cjs/main8.js | 4 +- .../_expected/es/generated-small2.js | 5 + .../_expected/es/generated-small3.js | 5 - .../_expected/es/generated-small4.js | 4 +- .../best-merge-target/_expected/es/main1.js | 3 +- .../best-merge-target/_expected/es/main2.js | 3 +- .../best-merge-target/_expected/es/main3.js | 4 +- .../best-merge-target/_expected/es/main4.js | 4 +- .../best-merge-target/_expected/es/main5.js | 4 +- .../best-merge-target/_expected/es/main6.js | 2 +- .../best-merge-target/_expected/es/main7.js | 2 +- .../best-merge-target/_expected/es/main8.js | 2 +- ...enerated-small3.js => generated-small2.js} | 2 +- .../_expected/system/generated-small4.js | 2 +- .../_expected/system/main1.js | 5 +- .../_expected/system/main2.js | 5 +- .../_expected/system/main3.js | 8 +- .../_expected/system/main4.js | 10 +- .../_expected/system/main5.js | 8 +- .../_expected/system/main6.js | 2 +- .../_expected/system/main7.js | 4 +- .../_expected/system/main8.js | 4 +- .../track-external-effects/_config.js | 11 + .../_expected/amd/generated-chunk.js | 8 + .../_expected/amd/generated-effect.js | 5 + .../_expected/amd/generated-small.js | 7 + .../_expected/amd/main1.js | 5 + .../_expected/amd/main2.js | 5 + .../_expected/amd/main3.js | 5 + .../_expected/amd/main4.js | 5 + .../_expected/cjs/generated-chunk.js | 8 + .../_expected/cjs/generated-effect.js | 3 + .../_expected/cjs/generated-small.js | 5 + .../_expected/cjs/main1.js | 5 + .../_expected/cjs/main2.js | 6 + .../_expected/cjs/main3.js | 5 + .../_expected/cjs/main4.js | 7 + .../_expected/es/generated-chunk.js | 6 + .../_expected/es/generated-effect.js | 1 + .../_expected/es/generated-small.js | 3 + .../_expected/es/main1.js | 3 + .../_expected/es/main2.js | 4 + .../_expected/es/main3.js | 3 + .../_expected/es/main4.js | 5 + .../_expected/system/generated-chunk.js | 12 ++ .../_expected/system/generated-effect.js | 10 + .../_expected/system/generated-small.js | 10 + .../_expected/system/main1.js | 14 ++ .../_expected/system/main2.js | 14 ++ .../_expected/system/main3.js | 11 + .../_expected/system/main4.js | 16 ++ .../track-external-effects/main1.js | 2 + .../track-external-effects/main2.js | 2 + .../track-external-effects/shared.js | 1 + 76 files changed, 404 insertions(+), 166 deletions(-) rename test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/amd/{generated-small3.js => generated-small2.js} (64%) rename test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/cjs/{generated-small3.js => generated-small2.js} (56%) create mode 100644 test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/es/generated-small2.js delete mode 100644 test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/es/generated-small3.js rename test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/system/{generated-small3.js => generated-small2.js} (77%) create mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/_config.js create mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/generated-chunk.js create mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/generated-effect.js create mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/generated-small.js create mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/main1.js create mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/main2.js create mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/main3.js create mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/main4.js create mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/generated-chunk.js create mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/generated-effect.js create mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/generated-small.js create mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/main1.js create mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/main2.js create mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/main3.js create mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/main4.js create mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/generated-chunk.js create mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/generated-effect.js create mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/generated-small.js create mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/main1.js create mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/main2.js create mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/main3.js create mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/main4.js create mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/generated-chunk.js create mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/generated-effect.js create mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/generated-small.js create mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/main1.js create mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/main2.js create mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/main3.js create mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/main4.js create mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/main1.js create mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/main2.js create mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/shared.js diff --git a/src/utils/chunkAssignment.ts b/src/utils/chunkAssignment.ts index a84d49c3323..9955dde33f1 100644 --- a/src/utils/chunkAssignment.ts +++ b/src/utils/chunkAssignment.ts @@ -439,6 +439,7 @@ interface ChunkDescription { interface ChunkPartition { big: Set; sideEffectAtoms: bigint; + sizeByAtom: number[]; small: Set; } @@ -561,6 +562,7 @@ function getPartitionedChunks( const bigChunks: ChunkDescription[] = []; const chunkByModule = new Map(); const atomsByEntry: bigint[] = []; + const sizeByAtom: number[] = []; for (let index = 0; index < numberOfEntries; index++) { atomsByEntry.push(0n); } @@ -590,6 +592,7 @@ function getPartitionedChunks( } chunkDescription.pure = pure; chunkDescription.size = size; + sizeByAtom.push(size); if (!pure) { sideEffectAtoms |= containedAtoms; } @@ -607,6 +610,7 @@ function getPartitionedChunks( return { big: new Set(bigChunks), sideEffectAtoms, + sizeByAtom, small: new Set(smallChunks) }; } @@ -620,6 +624,7 @@ function sortChunksAndAddDependenciesAndAtoms( chunks.sort(compareChunkSize); for (const chunk of chunks) { const { dependencies, modules, dependentEntries } = chunk; + // TODO Lukas can we handle external dependencies here? for (const module of modules) { for (const dependency of module.getDependenciesToBeIncluded()) { const dependencyChunk = chunkByModule.get(dependency as Module); @@ -646,103 +651,122 @@ function compareChunkSize( } function mergeChunks(chunkPartition: ChunkPartition, minChunkSize: number) { - const { big, sideEffectAtoms, small } = chunkPartition; - for (const allowArbitraryMerges of minChunkSize > 0 ? [false, true] : [false]) { - for (const mergedChunk of small) { - let closestChunk: ChunkDescription | null = null; - let closestChunkDistance = Infinity; - const { containedAtoms, correlatedAtoms, modules, pure, size } = mergedChunk; - for (const targetChunk of concatLazy([small, big])) { - if (mergedChunk === targetChunk) continue; - // If both chunks are small, we also allow for unrelated merges during - // the first pass - // TODO Lukas this could be the load size increase instead, take it if there is no increase (non-included are taken as 0) - const distance = getChunkEntryDistance( - mergedChunk, - targetChunk, - !allowArbitraryMerges && targetChunk.size >= minChunkSize - ); - if ( - distance < closestChunkDistance && - isValidMerge(mergedChunk, targetChunk, sideEffectAtoms) - ) { - closestChunk = targetChunk; - closestChunkDistance = distance; - } + const { big, sideEffectAtoms, sizeByAtom, small } = chunkPartition; + for (const mergedChunk of small) { + let bestTargetChunk: ChunkDescription | null = null; + let smallestAdditionalSize = Infinity; + const { containedAtoms, correlatedAtoms, modules, pure, size } = mergedChunk; + for (const targetChunk of concatLazy([small, big])) { + if (mergedChunk === targetChunk) continue; + const additionalSizeAfterMerge = getAdditionalSizeAfterMerge( + mergedChunk, + targetChunk, + smallestAdditionalSize - 1, + sideEffectAtoms, + sizeByAtom + ); + if (additionalSizeAfterMerge < smallestAdditionalSize) { + bestTargetChunk = targetChunk; + smallestAdditionalSize = additionalSizeAfterMerge; } - if (closestChunk) { - small.delete(mergedChunk); - getChunksInPartition(closestChunk, minChunkSize, chunkPartition).delete(closestChunk); - closestChunk.modules.push(...modules); - closestChunk.size += size; - closestChunk.pure &&= pure; - const { dependencies, dependentChunks, dependentEntries } = closestChunk; - closestChunk.correlatedAtoms &= correlatedAtoms; - closestChunk.containedAtoms |= containedAtoms; - for (const entry of mergedChunk.dependentEntries) { - dependentEntries.add(entry); - } - for (const dependency of mergedChunk.dependencies) { - dependencies.add(dependency); - dependency.dependentChunks.delete(mergedChunk); - dependency.dependentChunks.add(closestChunk); - } - for (const dependentChunk of mergedChunk.dependentChunks) { - dependentChunks.add(dependentChunk); - dependentChunk.dependencies.delete(mergedChunk); - dependentChunk.dependencies.add(closestChunk); - } - dependencies.delete(closestChunk); - dependentChunks.delete(closestChunk); - getChunksInPartition(closestChunk, minChunkSize, chunkPartition).add(closestChunk); + } + if (bestTargetChunk) { + small.delete(mergedChunk); + getChunksInPartition(bestTargetChunk, minChunkSize, chunkPartition).delete(bestTargetChunk); + bestTargetChunk.modules.push(...modules); + bestTargetChunk.size += size; + bestTargetChunk.pure &&= pure; + const { dependencies, dependentChunks, dependentEntries } = bestTargetChunk; + bestTargetChunk.correlatedAtoms &= correlatedAtoms; + bestTargetChunk.containedAtoms |= containedAtoms; + for (const entry of mergedChunk.dependentEntries) { + dependentEntries.add(entry); + } + for (const dependency of mergedChunk.dependencies) { + dependencies.add(dependency); + dependency.dependentChunks.delete(mergedChunk); + dependency.dependentChunks.add(bestTargetChunk); } + for (const dependentChunk of mergedChunk.dependentChunks) { + dependentChunks.add(dependentChunk); + dependentChunk.dependencies.delete(mergedChunk); + dependentChunk.dependencies.add(bestTargetChunk); + } + dependencies.delete(bestTargetChunk); + dependentChunks.delete(bestTargetChunk); + getChunksInPartition(bestTargetChunk, minChunkSize, chunkPartition).add(bestTargetChunk); } } } -// function getUnnecessaryLoadIfMergeable( -// mergedChunk: ChunkDescription, -// targetChunk: ChunkDescription, -// maxUnnecessaryLoad: number -// ): number | false {} - // Merging will not produce cycles if none of the direct non-merged dependencies // of a chunk have the other chunk as a transitive dependency -function isValidMerge( +/** + * Determine the additional unused code size that would be added by merging the + * two chunks. This is not an exact measurement but rather an upper bound. If + * the merge produces cycles or adds non-correlated side effects, `Infinity` + * is returned. + * Merging will not produce cycles if none of the direct non-merged dependencies + * of a chunk have the other chunk as a transitive dependency. + * @param maxAdditionalSize The maximum additional unused code size allowed to + * be added by the merge, taking dependencies into account + */ +function getAdditionalSizeAfterMerge( mergedChunk: ChunkDescription, targetChunk: ChunkDescription, - sideEffectAtoms: bigint -) { - return !( - hasTransitiveDependencyOrNonCorrelatedSideEffect(mergedChunk, targetChunk, sideEffectAtoms) || - hasTransitiveDependencyOrNonCorrelatedSideEffect(targetChunk, mergedChunk, sideEffectAtoms) + maxAdditionalSize: number, + sideEffectAtoms: bigint, + sizeByAtom: number[] +): number { + const firstSize = getAdditionalSizeIfNoTransitiveDependencyOrNonCorrelatedSideEffect( + mergedChunk, + targetChunk, + maxAdditionalSize, + sideEffectAtoms, + sizeByAtom ); + // That way, it is okay if they are equal unless both firstSize and + // maxAdditionalSize are infinite + return firstSize < maxAdditionalSize + 1 + ? firstSize + + getAdditionalSizeIfNoTransitiveDependencyOrNonCorrelatedSideEffect( + targetChunk, + mergedChunk, + maxAdditionalSize, + sideEffectAtoms, + sizeByAtom + ) + : Infinity; } -function hasTransitiveDependencyOrNonCorrelatedSideEffect( +function getAdditionalSizeIfNoTransitiveDependencyOrNonCorrelatedSideEffect( dependentChunk: ChunkDescription, dependencyChunk: ChunkDescription, - sideEffectAtoms: bigint -) { + maxUnnecessaryLoad: number, + sideEffectAtoms: bigint, + sizeByAtom: number[] +): number { const { correlatedAtoms } = dependencyChunk; - const dependentContainedSideEffects = dependentChunk.containedAtoms & sideEffectAtoms; + let dependencyAtoms = dependentChunk.containedAtoms; + const dependentContainedSideEffects = dependencyAtoms & sideEffectAtoms; if ((correlatedAtoms & dependentContainedSideEffects) !== dependentContainedSideEffects) { - return true; + return Infinity; } const chunksToCheck = new Set(dependentChunk.dependencies); for (const { dependencies, containedAtoms } of chunksToCheck) { + dependencyAtoms |= containedAtoms; const containedSideEffects = containedAtoms & sideEffectAtoms; if ((correlatedAtoms & containedSideEffects) !== containedSideEffects) { - return true; + return Infinity; } for (const dependency of dependencies) { if (dependency === dependencyChunk) { - return true; + return Infinity; } chunksToCheck.add(dependency); } } - return false; + return getAtomsSizeIfBelowLimit(dependencyAtoms, maxUnnecessaryLoad, sizeByAtom); } function getChunksInPartition( @@ -750,27 +774,26 @@ function getChunksInPartition( minChunkSize: number, chunkPartition: ChunkPartition ): Set { - return chunk.size < minChunkSize ? chunkPartition.small : chunkPartition.big; + return chunk.size <= minChunkSize ? chunkPartition.small : chunkPartition.big; } -function getChunkEntryDistance( - { dependentEntries: sourceEntries }: ChunkDescription, - { dependentEntries: targetEntries }: ChunkDescription, - enforceSubest: boolean +function getAtomsSizeIfBelowLimit( + atoms: bigint, + maxUnnecessaryLoad: number, + sizeByAtom: number[] ): number { - let distance = 0; - for (const entryIndex of targetEntries) { - if (!sourceEntries.has(entryIndex)) { - distance++; + let size = 0; + let atomIndex = 0; + let atomSignature = 1n; + const { length } = sizeByAtom; + for (; atomIndex < length; atomIndex++) { + if ((atoms & atomSignature) === atomSignature) { + size += sizeByAtom[atomIndex]; } - } - for (const entryIndex of sourceEntries) { - if (!targetEntries.has(entryIndex)) { - if (enforceSubest) { - return Infinity; - } - distance++; + atomSignature <<= 1n; + if (size > maxUnnecessaryLoad) { + return Infinity; } } - return distance; + return size; } diff --git a/test/chunking-form/samples/external-reexports/_config.js b/test/chunking-form/samples/external-reexports/_config.js index f142ecda3f3..1e2850eeb4b 100644 --- a/test/chunking-form/samples/external-reexports/_config.js +++ b/test/chunking-form/samples/external-reexports/_config.js @@ -1,4 +1,5 @@ module.exports = defineTest({ + skip: true, description: 'uses correct interop per chunk when reexporting from external modules', options: { external: module => module.includes('external'), diff --git a/test/chunking-form/samples/interop-per-reexported-default-dependency/_config.js b/test/chunking-form/samples/interop-per-reexported-default-dependency/_config.js index a780bdd05c2..29fae68a92b 100644 --- a/test/chunking-form/samples/interop-per-reexported-default-dependency/_config.js +++ b/test/chunking-form/samples/interop-per-reexported-default-dependency/_config.js @@ -1,4 +1,5 @@ module.exports = defineTest({ + skip: true, description: 'allows to configure the interop type per reexported default from an external dependency', options: { diff --git a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/amd/generated-small3.js b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/amd/generated-small2.js similarity index 64% rename from test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/amd/generated-small3.js rename to test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/amd/generated-small2.js index 49e6098bfc0..2f2c139dfb3 100644 --- a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/amd/generated-small3.js +++ b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/amd/generated-small2.js @@ -2,9 +2,9 @@ define(['exports'], (function (exports) { 'use strict'; const small1 = '12345678901234567890123456789012345678901234567890'; - const small3 = '12345678901234567890123456789012345678901234567890'; + const small2 = '12345678901234567890123456789012345678901234567890'; exports.small1 = small1; - exports.small3 = small3; + exports.small2 = small2; })); diff --git a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/amd/generated-small4.js b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/amd/generated-small4.js index daf2c213f67..464d28c8342 100644 --- a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/amd/generated-small4.js +++ b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/amd/generated-small4.js @@ -1,10 +1,10 @@ define(['exports'], (function (exports) { 'use strict'; - const small2 = '12345678901234567890123456789012345678901234567890'; + const small3 = '12345678901234567890123456789012345678901234567890'; const small4 = '12345678901234567890123456789012345678901234567890'; - exports.small2 = small2; + exports.small3 = small3; exports.small4 = small4; })); diff --git a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/amd/main1.js b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/amd/main1.js index f074a6d5def..8aeed219f97 100644 --- a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/amd/main1.js +++ b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/amd/main1.js @@ -1,5 +1,5 @@ -define(['./generated-small3'], (function (small3) { 'use strict'; +define(['./generated-small2', './generated-small4'], (function (small2, small4) { 'use strict'; - console.log(small3.small1, small3.small3); + console.log(small2.small1, small4.small3); })); diff --git a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/amd/main2.js b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/amd/main2.js index 44bef49d72c..6c9f8b5b3df 100644 --- a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/amd/main2.js +++ b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/amd/main2.js @@ -1,5 +1,5 @@ -define(['./generated-small4'], (function (small4) { 'use strict'; +define(['./generated-small2', './generated-small4'], (function (small2, small4) { 'use strict'; - console.log(small4.small2, small4.small4); + console.log(small2.small2, small4.small4); })); diff --git a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/amd/main3.js b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/amd/main3.js index 0785e712ab3..5bee3857601 100644 --- a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/amd/main3.js +++ b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/amd/main3.js @@ -1,5 +1,5 @@ -define(['./generated-small3', './generated-small4'], (function (small3, small4) { 'use strict'; +define(['./generated-small2', './generated-small4'], (function (small2, small4) { 'use strict'; - console.log(small3.small1, small4.small2, small3.small3); + console.log(small2.small1, small2.small2, small4.small3); })); diff --git a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/amd/main4.js b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/amd/main4.js index 12b20b02070..fe4c60808ad 100644 --- a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/amd/main4.js +++ b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/amd/main4.js @@ -1,5 +1,5 @@ -define(['./generated-small4', './generated-small3'], (function (small4, small3) { 'use strict'; +define(['./generated-small2', './generated-small4'], (function (small2, small4) { 'use strict'; - console.log(small4.small2, small3.small3, small4.small4); + console.log(small2.small2, small4.small3, small4.small4); })); diff --git a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/amd/main5.js b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/amd/main5.js index 1a1b040b4e1..d00402ce32c 100644 --- a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/amd/main5.js +++ b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/amd/main5.js @@ -1,5 +1,5 @@ -define(['./generated-small3', './generated-small4'], (function (small3, small4) { 'use strict'; +define(['./generated-small2', './generated-small4'], (function (small2, small4) { 'use strict'; - console.log(small3.small1, small4.small2, small3.small3, small4.small4); + console.log(small2.small1, small2.small2, small4.small3, small4.small4); })); diff --git a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/amd/main6.js b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/amd/main6.js index fc661223ef6..933e6f8fc01 100644 --- a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/amd/main6.js +++ b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/amd/main6.js @@ -1,5 +1,5 @@ -define(['./generated-small3'], (function (small3) { 'use strict'; +define(['./generated-small2'], (function (small2) { 'use strict'; - console.log(small3.small1); + console.log(small2.small1); })); diff --git a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/amd/main7.js b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/amd/main7.js index a3cb8a97dc1..f7a8bc388f2 100644 --- a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/amd/main7.js +++ b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/amd/main7.js @@ -1,5 +1,5 @@ -define(['./generated-small4'], (function (small4) { 'use strict'; +define(['./generated-small2'], (function (small2) { 'use strict'; - console.log(small4.small2); + console.log(small2.small2); })); diff --git a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/amd/main8.js b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/amd/main8.js index 3a158711344..47005228fc4 100644 --- a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/amd/main8.js +++ b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/amd/main8.js @@ -1,5 +1,5 @@ -define(['./generated-small3'], (function (small3) { 'use strict'; +define(['./generated-small4'], (function (small4) { 'use strict'; - console.log(small3.small3); + console.log(small4.small3); })); diff --git a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/cjs/generated-small3.js b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/cjs/generated-small2.js similarity index 56% rename from test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/cjs/generated-small3.js rename to test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/cjs/generated-small2.js index 18069fd3f58..2de161519be 100644 --- a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/cjs/generated-small3.js +++ b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/cjs/generated-small2.js @@ -2,7 +2,7 @@ const small1 = '12345678901234567890123456789012345678901234567890'; -const small3 = '12345678901234567890123456789012345678901234567890'; +const small2 = '12345678901234567890123456789012345678901234567890'; exports.small1 = small1; -exports.small3 = small3; +exports.small2 = small2; diff --git a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/cjs/generated-small4.js b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/cjs/generated-small4.js index 21aa5ce965e..b921b0d1dba 100644 --- a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/cjs/generated-small4.js +++ b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/cjs/generated-small4.js @@ -1,8 +1,8 @@ 'use strict'; -const small2 = '12345678901234567890123456789012345678901234567890'; +const small3 = '12345678901234567890123456789012345678901234567890'; const small4 = '12345678901234567890123456789012345678901234567890'; -exports.small2 = small2; +exports.small3 = small3; exports.small4 = small4; diff --git a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/cjs/main1.js b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/cjs/main1.js index c646be4cd02..63177e7591a 100644 --- a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/cjs/main1.js +++ b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/cjs/main1.js @@ -1,5 +1,6 @@ 'use strict'; -var small3 = require('./generated-small3.js'); +var small2 = require('./generated-small2.js'); +var small4 = require('./generated-small4.js'); -console.log(small3.small1, small3.small3); +console.log(small2.small1, small4.small3); diff --git a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/cjs/main2.js b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/cjs/main2.js index cf6c1d83230..9d6e898c9f9 100644 --- a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/cjs/main2.js +++ b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/cjs/main2.js @@ -1,5 +1,6 @@ 'use strict'; +var small2 = require('./generated-small2.js'); var small4 = require('./generated-small4.js'); -console.log(small4.small2, small4.small4); +console.log(small2.small2, small4.small4); diff --git a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/cjs/main3.js b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/cjs/main3.js index 7d7d2d0408d..f7d8b5a1c19 100644 --- a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/cjs/main3.js +++ b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/cjs/main3.js @@ -1,6 +1,6 @@ 'use strict'; -var small3 = require('./generated-small3.js'); +var small2 = require('./generated-small2.js'); var small4 = require('./generated-small4.js'); -console.log(small3.small1, small4.small2, small3.small3); +console.log(small2.small1, small2.small2, small4.small3); diff --git a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/cjs/main4.js b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/cjs/main4.js index bf856f12b5e..6f2dcaadff0 100644 --- a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/cjs/main4.js +++ b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/cjs/main4.js @@ -1,6 +1,6 @@ 'use strict'; +var small2 = require('./generated-small2.js'); var small4 = require('./generated-small4.js'); -var small3 = require('./generated-small3.js'); -console.log(small4.small2, small3.small3, small4.small4); +console.log(small2.small2, small4.small3, small4.small4); diff --git a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/cjs/main5.js b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/cjs/main5.js index 717cc3bd42c..9b3c1acfc6e 100644 --- a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/cjs/main5.js +++ b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/cjs/main5.js @@ -1,6 +1,6 @@ 'use strict'; -var small3 = require('./generated-small3.js'); +var small2 = require('./generated-small2.js'); var small4 = require('./generated-small4.js'); -console.log(small3.small1, small4.small2, small3.small3, small4.small4); +console.log(small2.small1, small2.small2, small4.small3, small4.small4); diff --git a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/cjs/main6.js b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/cjs/main6.js index 18b40850296..680aff2ffe1 100644 --- a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/cjs/main6.js +++ b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/cjs/main6.js @@ -1,5 +1,5 @@ 'use strict'; -var small3 = require('./generated-small3.js'); +var small2 = require('./generated-small2.js'); -console.log(small3.small1); +console.log(small2.small1); diff --git a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/cjs/main7.js b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/cjs/main7.js index acc70495643..cfd5e278dbd 100644 --- a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/cjs/main7.js +++ b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/cjs/main7.js @@ -1,5 +1,5 @@ 'use strict'; -var small4 = require('./generated-small4.js'); +var small2 = require('./generated-small2.js'); -console.log(small4.small2); +console.log(small2.small2); diff --git a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/cjs/main8.js b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/cjs/main8.js index 75828acc595..baa335b65b7 100644 --- a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/cjs/main8.js +++ b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/cjs/main8.js @@ -1,5 +1,5 @@ 'use strict'; -var small3 = require('./generated-small3.js'); +var small4 = require('./generated-small4.js'); -console.log(small3.small3); +console.log(small4.small3); diff --git a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/es/generated-small2.js b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/es/generated-small2.js new file mode 100644 index 00000000000..f553b8cf7b9 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/es/generated-small2.js @@ -0,0 +1,5 @@ +const small1 = '12345678901234567890123456789012345678901234567890'; + +const small2 = '12345678901234567890123456789012345678901234567890'; + +export { small2 as a, small1 as s }; diff --git a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/es/generated-small3.js b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/es/generated-small3.js deleted file mode 100644 index 36334b79679..00000000000 --- a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/es/generated-small3.js +++ /dev/null @@ -1,5 +0,0 @@ -const small1 = '12345678901234567890123456789012345678901234567890'; - -const small3 = '12345678901234567890123456789012345678901234567890'; - -export { small3 as a, small1 as s }; diff --git a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/es/generated-small4.js b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/es/generated-small4.js index 40d723d32e9..6de396475b6 100644 --- a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/es/generated-small4.js +++ b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/es/generated-small4.js @@ -1,5 +1,5 @@ -const small2 = '12345678901234567890123456789012345678901234567890'; +const small3 = '12345678901234567890123456789012345678901234567890'; const small4 = '12345678901234567890123456789012345678901234567890'; -export { small4 as a, small2 as s }; +export { small4 as a, small3 as s }; diff --git a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/es/main1.js b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/es/main1.js index 5d5b1f0dfb4..be812db83f0 100644 --- a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/es/main1.js +++ b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/es/main1.js @@ -1,3 +1,4 @@ -import { s as small1, a as small3 } from './generated-small3.js'; +import { s as small1 } from './generated-small2.js'; +import { s as small3 } from './generated-small4.js'; console.log(small1, small3); diff --git a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/es/main2.js b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/es/main2.js index 59889e86399..c7ee3b5d3b0 100644 --- a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/es/main2.js +++ b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/es/main2.js @@ -1,3 +1,4 @@ -import { s as small2, a as small4 } from './generated-small4.js'; +import { a as small2 } from './generated-small2.js'; +import { a as small4 } from './generated-small4.js'; console.log(small2, small4); diff --git a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/es/main3.js b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/es/main3.js index 62ec7ca146c..a5de45be16e 100644 --- a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/es/main3.js +++ b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/es/main3.js @@ -1,4 +1,4 @@ -import { s as small1, a as small3 } from './generated-small3.js'; -import { s as small2 } from './generated-small4.js'; +import { s as small1, a as small2 } from './generated-small2.js'; +import { s as small3 } from './generated-small4.js'; console.log(small1, small2, small3); diff --git a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/es/main4.js b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/es/main4.js index d619901318e..108fa0a0165 100644 --- a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/es/main4.js +++ b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/es/main4.js @@ -1,4 +1,4 @@ -import { s as small2, a as small4 } from './generated-small4.js'; -import { a as small3 } from './generated-small3.js'; +import { a as small2 } from './generated-small2.js'; +import { s as small3, a as small4 } from './generated-small4.js'; console.log(small2, small3, small4); diff --git a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/es/main5.js b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/es/main5.js index 3f66bbac955..1eca8b64e08 100644 --- a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/es/main5.js +++ b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/es/main5.js @@ -1,4 +1,4 @@ -import { s as small1, a as small3 } from './generated-small3.js'; -import { s as small2, a as small4 } from './generated-small4.js'; +import { s as small1, a as small2 } from './generated-small2.js'; +import { s as small3, a as small4 } from './generated-small4.js'; console.log(small1, small2, small3, small4); diff --git a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/es/main6.js b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/es/main6.js index f20d527cc99..e30e3ce1ca9 100644 --- a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/es/main6.js +++ b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/es/main6.js @@ -1,3 +1,3 @@ -import { s as small1 } from './generated-small3.js'; +import { s as small1 } from './generated-small2.js'; console.log(small1); diff --git a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/es/main7.js b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/es/main7.js index feb560c7ef1..edc8ae8b0c0 100644 --- a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/es/main7.js +++ b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/es/main7.js @@ -1,3 +1,3 @@ -import { s as small2 } from './generated-small4.js'; +import { a as small2 } from './generated-small2.js'; console.log(small2); diff --git a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/es/main8.js b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/es/main8.js index 89638c4dde1..b83d5c810f4 100644 --- a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/es/main8.js +++ b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/es/main8.js @@ -1,3 +1,3 @@ -import { a as small3 } from './generated-small3.js'; +import { s as small3 } from './generated-small4.js'; console.log(small3); diff --git a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/system/generated-small3.js b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/system/generated-small2.js similarity index 77% rename from test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/system/generated-small3.js rename to test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/system/generated-small2.js index ea38d4313cd..e873de9734e 100644 --- a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/system/generated-small3.js +++ b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/system/generated-small2.js @@ -5,7 +5,7 @@ System.register([], (function (exports) { const small1 = exports('s', '12345678901234567890123456789012345678901234567890'); - const small3 = exports('a', '12345678901234567890123456789012345678901234567890'); + const small2 = exports('a', '12345678901234567890123456789012345678901234567890'); }) }; diff --git a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/system/generated-small4.js b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/system/generated-small4.js index 2ef00acfb34..f6e07132d5e 100644 --- a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/system/generated-small4.js +++ b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/system/generated-small4.js @@ -3,7 +3,7 @@ System.register([], (function (exports) { return { execute: (function () { - const small2 = exports('s', '12345678901234567890123456789012345678901234567890'); + const small3 = exports('s', '12345678901234567890123456789012345678901234567890'); const small4 = exports('a', '12345678901234567890123456789012345678901234567890'); diff --git a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/system/main1.js b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/system/main1.js index 88018d85dec..7b539f9d37d 100644 --- a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/system/main1.js +++ b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/system/main1.js @@ -1,10 +1,11 @@ -System.register(['./generated-small3.js'], (function () { +System.register(['./generated-small2.js', './generated-small4.js'], (function () { 'use strict'; var small1, small3; return { setters: [function (module) { small1 = module.s; - small3 = module.a; + }, function (module) { + small3 = module.s; }], execute: (function () { diff --git a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/system/main2.js b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/system/main2.js index 98383c7ab5e..f3c7bf18579 100644 --- a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/system/main2.js +++ b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/system/main2.js @@ -1,9 +1,10 @@ -System.register(['./generated-small4.js'], (function () { +System.register(['./generated-small2.js', './generated-small4.js'], (function () { 'use strict'; var small2, small4; return { setters: [function (module) { - small2 = module.s; + small2 = module.a; + }, function (module) { small4 = module.a; }], execute: (function () { diff --git a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/system/main3.js b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/system/main3.js index d8f0bbb6977..fbe7a65cd87 100644 --- a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/system/main3.js +++ b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/system/main3.js @@ -1,12 +1,12 @@ -System.register(['./generated-small3.js', './generated-small4.js'], (function () { +System.register(['./generated-small2.js', './generated-small4.js'], (function () { 'use strict'; - var small1, small3, small2; + var small1, small2, small3; return { setters: [function (module) { small1 = module.s; - small3 = module.a; + small2 = module.a; }, function (module) { - small2 = module.s; + small3 = module.s; }], execute: (function () { diff --git a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/system/main4.js b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/system/main4.js index b2b5a623b50..f86d6370878 100644 --- a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/system/main4.js +++ b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/system/main4.js @@ -1,12 +1,12 @@ -System.register(['./generated-small4.js', './generated-small3.js'], (function () { +System.register(['./generated-small2.js', './generated-small4.js'], (function () { 'use strict'; - var small2, small4, small3; + var small2, small3, small4; return { setters: [function (module) { - small2 = module.s; - small4 = module.a; + small2 = module.a; }, function (module) { - small3 = module.a; + small3 = module.s; + small4 = module.a; }], execute: (function () { diff --git a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/system/main5.js b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/system/main5.js index 4a9d1ec994f..272bf31ad03 100644 --- a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/system/main5.js +++ b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/system/main5.js @@ -1,12 +1,12 @@ -System.register(['./generated-small3.js', './generated-small4.js'], (function () { +System.register(['./generated-small2.js', './generated-small4.js'], (function () { 'use strict'; - var small1, small3, small2, small4; + var small1, small2, small3, small4; return { setters: [function (module) { small1 = module.s; - small3 = module.a; + small2 = module.a; }, function (module) { - small2 = module.s; + small3 = module.s; small4 = module.a; }], execute: (function () { diff --git a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/system/main6.js b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/system/main6.js index 78f62d05c7c..a9fde34525d 100644 --- a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/system/main6.js +++ b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/system/main6.js @@ -1,4 +1,4 @@ -System.register(['./generated-small3.js'], (function () { +System.register(['./generated-small2.js'], (function () { 'use strict'; var small1; return { diff --git a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/system/main7.js b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/system/main7.js index f1fa78b8e8b..114aa710b39 100644 --- a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/system/main7.js +++ b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/system/main7.js @@ -1,9 +1,9 @@ -System.register(['./generated-small4.js'], (function () { +System.register(['./generated-small2.js'], (function () { 'use strict'; var small2; return { setters: [function (module) { - small2 = module.s; + small2 = module.a; }], execute: (function () { diff --git a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/system/main8.js b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/system/main8.js index f35ef372918..3f3ffcc0261 100644 --- a/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/system/main8.js +++ b/test/chunking-form/samples/min-chunk-size/best-merge-target/_expected/system/main8.js @@ -1,9 +1,9 @@ -System.register(['./generated-small3.js'], (function () { +System.register(['./generated-small4.js'], (function () { 'use strict'; var small3; return { setters: [function (module) { - small3 = module.a; + small3 = module.s; }], execute: (function () { diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_config.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_config.js new file mode 100644 index 00000000000..40784cbf2fd --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects/_config.js @@ -0,0 +1,11 @@ +module.exports = defineTest({ + skip: true, + description: 'tracks external imports as side effects', + options: { + input: ['main1.js', 'main2.js'], + external: ['external1', 'external2'], + output: { + experimentalMinChunkSize: 100 + } + } +}); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/generated-chunk.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/generated-chunk.js new file mode 100644 index 00000000000..806ea76e38d --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/generated-chunk.js @@ -0,0 +1,8 @@ +define(['exports', './generated-effect'], (function (exports, effect) { 'use strict'; + + const big = + '1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'; + + exports.big = big; + +})); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/generated-effect.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/generated-effect.js new file mode 100644 index 00000000000..3913c6bd594 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/generated-effect.js @@ -0,0 +1,5 @@ +define((function () { 'use strict'; + + console.log('effect 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'); + +})); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/generated-small.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/generated-small.js new file mode 100644 index 00000000000..59507568055 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/generated-small.js @@ -0,0 +1,7 @@ +define(['exports'], (function (exports) { 'use strict'; + + const small = '0'; + + exports.small = small; + +})); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/main1.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/main1.js new file mode 100644 index 00000000000..87b6a754d97 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/main1.js @@ -0,0 +1,5 @@ +define(['./generated-small'], (function (small) { 'use strict'; + + console.log(small.small); + +})); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/main2.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/main2.js new file mode 100644 index 00000000000..dd21d02d99b --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/main2.js @@ -0,0 +1,5 @@ +define(['./generated-chunk', './generated-effect'], (function (chunk, effect) { 'use strict'; + + console.log(chunk.big); + +})); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/main3.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/main3.js new file mode 100644 index 00000000000..a247bb649bb --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/main3.js @@ -0,0 +1,5 @@ +define(['./generated-effect'], (function (effect) { 'use strict'; + + console.log(); + +})); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/main4.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/main4.js new file mode 100644 index 00000000000..40f93b1a7d1 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/main4.js @@ -0,0 +1,5 @@ +define(['./generated-small', './generated-chunk', './generated-effect'], (function (small, chunk, effect) { 'use strict'; + + console.log(small.small, chunk.big); + +})); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/generated-chunk.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/generated-chunk.js new file mode 100644 index 00000000000..ff74cf0517a --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/generated-chunk.js @@ -0,0 +1,8 @@ +'use strict'; + +require('./generated-effect.js'); + +const big = + '1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'; + +exports.big = big; diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/generated-effect.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/generated-effect.js new file mode 100644 index 00000000000..bc25944b1d4 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/generated-effect.js @@ -0,0 +1,3 @@ +'use strict'; + +console.log('effect 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/generated-small.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/generated-small.js new file mode 100644 index 00000000000..c72613c4229 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/generated-small.js @@ -0,0 +1,5 @@ +'use strict'; + +const small = '0'; + +exports.small = small; diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/main1.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/main1.js new file mode 100644 index 00000000000..e9f5c811d62 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/main1.js @@ -0,0 +1,5 @@ +'use strict'; + +var small = require('./generated-small.js'); + +console.log(small.small); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/main2.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/main2.js new file mode 100644 index 00000000000..f382afa6e55 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/main2.js @@ -0,0 +1,6 @@ +'use strict'; + +var chunk = require('./generated-chunk.js'); +require('./generated-effect.js'); + +console.log(chunk.big); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/main3.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/main3.js new file mode 100644 index 00000000000..4ef9083aba8 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/main3.js @@ -0,0 +1,5 @@ +'use strict'; + +require('./generated-effect.js'); + +console.log(); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/main4.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/main4.js new file mode 100644 index 00000000000..a559c4e25b2 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/main4.js @@ -0,0 +1,7 @@ +'use strict'; + +var small = require('./generated-small.js'); +var chunk = require('./generated-chunk.js'); +require('./generated-effect.js'); + +console.log(small.small, chunk.big); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/generated-chunk.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/generated-chunk.js new file mode 100644 index 00000000000..fd5a50c0dfd --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/generated-chunk.js @@ -0,0 +1,6 @@ +import './generated-effect.js'; + +const big = + '1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'; + +export { big as b }; diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/generated-effect.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/generated-effect.js new file mode 100644 index 00000000000..419200c2133 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/generated-effect.js @@ -0,0 +1 @@ +console.log('effect 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/generated-small.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/generated-small.js new file mode 100644 index 00000000000..0b35eebd22a --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/generated-small.js @@ -0,0 +1,3 @@ +const small = '0'; + +export { small as s }; diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/main1.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/main1.js new file mode 100644 index 00000000000..3f8fefa28aa --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/main1.js @@ -0,0 +1,3 @@ +import { s as small } from './generated-small.js'; + +console.log(small); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/main2.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/main2.js new file mode 100644 index 00000000000..8747b2a4529 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/main2.js @@ -0,0 +1,4 @@ +import { b as big } from './generated-chunk.js'; +import './generated-effect.js'; + +console.log(big); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/main3.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/main3.js new file mode 100644 index 00000000000..4d870c2fbd0 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/main3.js @@ -0,0 +1,3 @@ +import './generated-effect.js'; + +console.log(); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/main4.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/main4.js new file mode 100644 index 00000000000..3cd8b45ab14 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/main4.js @@ -0,0 +1,5 @@ +import { s as small } from './generated-small.js'; +import { b as big } from './generated-chunk.js'; +import './generated-effect.js'; + +console.log(small, big); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/generated-chunk.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/generated-chunk.js new file mode 100644 index 00000000000..0aa1383a66a --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/generated-chunk.js @@ -0,0 +1,12 @@ +System.register(['./generated-effect.js'], (function (exports) { + 'use strict'; + return { + setters: [null], + execute: (function () { + + const big = + exports('b', '1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'); + + }) + }; +})); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/generated-effect.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/generated-effect.js new file mode 100644 index 00000000000..dd75e356285 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/generated-effect.js @@ -0,0 +1,10 @@ +System.register([], (function () { + 'use strict'; + return { + execute: (function () { + + console.log('effect 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'); + + }) + }; +})); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/generated-small.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/generated-small.js new file mode 100644 index 00000000000..8f2df0b2298 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/generated-small.js @@ -0,0 +1,10 @@ +System.register([], (function (exports) { + 'use strict'; + return { + execute: (function () { + + const small = exports('s', '0'); + + }) + }; +})); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/main1.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/main1.js new file mode 100644 index 00000000000..6e93391fab8 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/main1.js @@ -0,0 +1,14 @@ +System.register(['./generated-small.js'], (function () { + 'use strict'; + var small; + return { + setters: [function (module) { + small = module.s; + }], + execute: (function () { + + console.log(small); + + }) + }; +})); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/main2.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/main2.js new file mode 100644 index 00000000000..aeeaa3b8473 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/main2.js @@ -0,0 +1,14 @@ +System.register(['./generated-chunk.js', './generated-effect.js'], (function () { + 'use strict'; + var big; + return { + setters: [function (module) { + big = module.b; + }, null], + execute: (function () { + + console.log(big); + + }) + }; +})); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/main3.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/main3.js new file mode 100644 index 00000000000..711e5f70c7e --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/main3.js @@ -0,0 +1,11 @@ +System.register(['./generated-effect.js'], (function () { + 'use strict'; + return { + setters: [null], + execute: (function () { + + console.log(); + + }) + }; +})); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/main4.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/main4.js new file mode 100644 index 00000000000..f51da7fdbe0 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/main4.js @@ -0,0 +1,16 @@ +System.register(['./generated-small.js', './generated-chunk.js', './generated-effect.js'], (function () { + 'use strict'; + var small, big; + return { + setters: [function (module) { + small = module.s; + }, function (module) { + big = module.b; + }, null], + execute: (function () { + + console.log(small, big); + + }) + }; +})); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/main1.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/main1.js new file mode 100644 index 00000000000..420be1e4f25 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects/main1.js @@ -0,0 +1,2 @@ +import 'external1'; +import './shared'; diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/main2.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/main2.js new file mode 100644 index 00000000000..d0331be904d --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects/main2.js @@ -0,0 +1,2 @@ +import 'external2'; +import './shared'; diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/shared.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/shared.js new file mode 100644 index 00000000000..59b494c5580 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects/shared.js @@ -0,0 +1 @@ +console.log('shared'); From 825c3baffb31cdc996fd7afa56d56d8459cac4e0 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Fri, 12 May 2023 13:46:01 +0200 Subject: [PATCH 08/13] Move atomsByEntry to a more convenient place --- src/utils/chunkAssignment.ts | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/src/utils/chunkAssignment.ts b/src/utils/chunkAssignment.ts index 9955dde33f1..1f5e82ad07a 100644 --- a/src/utils/chunkAssignment.ts +++ b/src/utils/chunkAssignment.ts @@ -561,11 +561,7 @@ function getPartitionedChunks( const smallChunks: ChunkDescription[] = []; const bigChunks: ChunkDescription[] = []; const chunkByModule = new Map(); - const atomsByEntry: bigint[] = []; const sizeByAtom: number[] = []; - for (let index = 0; index < numberOfEntries; index++) { - atomsByEntry.push(0n); - } let sideEffectAtoms = 0n; let containedAtoms = 1n; for (const { dependentEntries, modules } of initialChunks) { @@ -596,9 +592,6 @@ function getPartitionedChunks( if (!pure) { sideEffectAtoms |= containedAtoms; } - for (const entryIndex of dependentEntries) { - atomsByEntry[entryIndex] |= containedAtoms; - } (size <= minChunkSize ? smallChunks : bigChunks).push(chunkDescription); containedAtoms <<= 1n; } @@ -606,7 +599,7 @@ function getPartitionedChunks( if (smallChunks.length === 0) { return null; } - sortChunksAndAddDependenciesAndAtoms([bigChunks, smallChunks], chunkByModule, atomsByEntry); + sortChunksAndAddDependenciesAndAtoms([bigChunks, smallChunks], chunkByModule, numberOfEntries); return { big: new Set(bigChunks), sideEffectAtoms, @@ -618,13 +611,25 @@ function getPartitionedChunks( function sortChunksAndAddDependenciesAndAtoms( chunkLists: ChunkDescription[][], chunkByModule: Map, - atomsByEntry: bigint[] + numberOfEntries: number ) { + const atomsByEntry: bigint[] = []; + for (let index = 0; index < numberOfEntries; index++) { + atomsByEntry.push(0n); + } for (const chunks of chunkLists) { chunks.sort(compareChunkSize); + for (const { containedAtoms, dependentEntries } of chunks) { + for (const entryIndex of dependentEntries) { + atomsByEntry[entryIndex] |= containedAtoms; + } + } + } + for (const chunks of chunkLists) { for (const chunk of chunks) { const { dependencies, modules, dependentEntries } = chunk; // TODO Lukas can we handle external dependencies here? + // we need to add side effects to containedAtoms and atomsByEntry before getting correlatedAtoms for (const module of modules) { for (const dependency of module.getDependenciesToBeIncluded()) { const dependencyChunk = chunkByModule.get(dependency as Module); From 4e20c8c544b923c56c53d9727bb31000749d0788 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Fri, 12 May 2023 21:08:53 +0200 Subject: [PATCH 09/13] Respect side effects of external dependencies --- src/utils/chunkAssignment.ts | 58 +++++++++++++------ .../samples/external-reexports/_config.js | 1 - .../_config.js | 1 - .../track-external-effects/_config.js | 1 - .../_expected/amd/generated-chunk.js | 8 --- .../_expected/amd/generated-effect.js | 5 -- .../_expected/amd/generated-shared.js | 5 ++ .../_expected/amd/generated-small.js | 7 --- .../_expected/amd/main1.js | 9 ++- .../_expected/amd/main2.js | 9 ++- .../_expected/amd/main3.js | 5 -- .../_expected/amd/main4.js | 5 -- .../_expected/cjs/generated-chunk.js | 8 --- .../_expected/cjs/generated-effect.js | 3 - .../_expected/cjs/generated-shared.js | 3 + .../_expected/cjs/generated-small.js | 5 -- .../_expected/cjs/main1.js | 10 +++- .../_expected/cjs/main2.js | 11 +++- .../_expected/cjs/main3.js | 5 -- .../_expected/cjs/main4.js | 7 --- .../_expected/es/generated-chunk.js | 6 -- .../_expected/es/generated-effect.js | 1 - .../_expected/es/generated-shared.js | 1 + .../_expected/es/generated-small.js | 3 - .../_expected/es/main1.js | 5 +- .../_expected/es/main2.js | 6 +- .../_expected/es/main3.js | 3 - .../_expected/es/main4.js | 5 -- .../_expected/system/generated-chunk.js | 12 ---- .../_expected/system/generated-effect.js | 10 ---- .../_expected/system/generated-shared.js | 10 ++++ .../_expected/system/generated-small.js | 10 ---- .../_expected/system/main1.js | 9 ++- .../_expected/system/main2.js | 7 +-- .../_expected/system/main3.js | 11 ---- .../_expected/system/main4.js | 16 ----- .../track-external-effects/main1.js | 2 +- .../track-external-effects/main2.js | 2 +- .../track-external-effects2/_config.js | 14 +++++ .../_expected/amd/main1.js | 10 ++++ .../_expected/amd/main2.js | 10 ++++ .../_expected/cjs/main1.js | 11 ++++ .../_expected/cjs/main2.js | 12 ++++ .../_expected/es/main1.js | 4 ++ .../_expected/es/main2.js | 3 + .../_expected/system/main1.js | 13 +++++ .../_expected/system/main2.js | 13 +++++ .../track-external-effects2/main1.js | 2 + .../track-external-effects2/main2.js | 2 + .../track-external-effects2/shared.js | 1 + 50 files changed, 198 insertions(+), 182 deletions(-) delete mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/generated-chunk.js delete mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/generated-effect.js create mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/generated-shared.js delete mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/generated-small.js delete mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/main3.js delete mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/main4.js delete mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/generated-chunk.js delete mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/generated-effect.js create mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/generated-shared.js delete mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/generated-small.js delete mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/main3.js delete mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/main4.js delete mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/generated-chunk.js delete mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/generated-effect.js create mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/generated-shared.js delete mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/generated-small.js delete mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/main3.js delete mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/main4.js delete mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/generated-chunk.js delete mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/generated-effect.js create mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/generated-shared.js delete mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/generated-small.js delete mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/main3.js delete mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/main4.js create mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects2/_config.js create mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects2/_expected/amd/main1.js create mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects2/_expected/amd/main2.js create mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects2/_expected/cjs/main1.js create mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects2/_expected/cjs/main2.js create mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects2/_expected/es/main1.js create mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects2/_expected/es/main2.js create mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects2/_expected/system/main1.js create mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects2/_expected/system/main2.js create mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects2/main1.js create mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects2/main2.js create mode 100644 test/chunking-form/samples/min-chunk-size/track-external-effects2/shared.js diff --git a/src/utils/chunkAssignment.ts b/src/utils/chunkAssignment.ts index 1f5e82ad07a..ca9483c24f6 100644 --- a/src/utils/chunkAssignment.ts +++ b/src/utils/chunkAssignment.ts @@ -599,7 +599,12 @@ function getPartitionedChunks( if (smallChunks.length === 0) { return null; } - sortChunksAndAddDependenciesAndAtoms([bigChunks, smallChunks], chunkByModule, numberOfEntries); + sideEffectAtoms |= addChunkDependenciesAndAtomsAndGetSideEffectAtoms( + [bigChunks, smallChunks], + chunkByModule, + numberOfEntries, + containedAtoms + ); return { big: new Set(bigChunks), sideEffectAtoms, @@ -608,37 +613,55 @@ function getPartitionedChunks( }; } -function sortChunksAndAddDependenciesAndAtoms( +// TODO Lukas change default for minChunkSize to 1 +// TODO Lukas improve size calculation +function addChunkDependenciesAndAtomsAndGetSideEffectAtoms( chunkLists: ChunkDescription[][], chunkByModule: Map, - numberOfEntries: number -) { + numberOfEntries: number, + nextAtomSignature: bigint +): bigint { + const signatureByExternalModule = new Map(); + let sideEffectAtoms = 0n; const atomsByEntry: bigint[] = []; for (let index = 0; index < numberOfEntries; index++) { atomsByEntry.push(0n); } for (const chunks of chunkLists) { chunks.sort(compareChunkSize); - for (const { containedAtoms, dependentEntries } of chunks) { + for (const chunk of chunks) { + const { dependencies, dependentEntries, modules } = chunk; + for (const module of modules) { + for (const dependency of module.getDependenciesToBeIncluded()) { + if (dependency instanceof ExternalModule) { + if (dependency.info.moduleSideEffects) { + chunk.containedAtoms |= getOrCreate(signatureByExternalModule, dependency, () => { + const signature = nextAtomSignature; + nextAtomSignature <<= 1n; + sideEffectAtoms |= signature; + return signature; + }); + } + } else { + const dependencyChunk = chunkByModule.get(dependency); + if (dependencyChunk && dependencyChunk !== chunk) { + dependencies.add(dependencyChunk); + dependencyChunk.dependentChunks.add(chunk); + } + } + } + } + const { containedAtoms } = chunk; for (const entryIndex of dependentEntries) { + // containedAtoms is mutated after destructuring + // eslint-disable-next-line unicorn/consistent-destructuring atomsByEntry[entryIndex] |= containedAtoms; } } } for (const chunks of chunkLists) { for (const chunk of chunks) { - const { dependencies, modules, dependentEntries } = chunk; - // TODO Lukas can we handle external dependencies here? - // we need to add side effects to containedAtoms and atomsByEntry before getting correlatedAtoms - for (const module of modules) { - for (const dependency of module.getDependenciesToBeIncluded()) { - const dependencyChunk = chunkByModule.get(dependency as Module); - if (dependencyChunk && dependencyChunk !== chunk) { - dependencies.add(dependencyChunk); - dependencyChunk.dependentChunks.add(chunk); - } - } - } + const { dependentEntries } = chunk; // Correlated atoms are the intersection of all entry atoms chunk.correlatedAtoms = -1n; for (const entryIndex of dependentEntries) { @@ -646,6 +669,7 @@ function sortChunksAndAddDependenciesAndAtoms( } } } + return sideEffectAtoms; } function compareChunkSize( diff --git a/test/chunking-form/samples/external-reexports/_config.js b/test/chunking-form/samples/external-reexports/_config.js index 1e2850eeb4b..f142ecda3f3 100644 --- a/test/chunking-form/samples/external-reexports/_config.js +++ b/test/chunking-form/samples/external-reexports/_config.js @@ -1,5 +1,4 @@ module.exports = defineTest({ - skip: true, description: 'uses correct interop per chunk when reexporting from external modules', options: { external: module => module.includes('external'), diff --git a/test/chunking-form/samples/interop-per-reexported-default-dependency/_config.js b/test/chunking-form/samples/interop-per-reexported-default-dependency/_config.js index 29fae68a92b..a780bdd05c2 100644 --- a/test/chunking-form/samples/interop-per-reexported-default-dependency/_config.js +++ b/test/chunking-form/samples/interop-per-reexported-default-dependency/_config.js @@ -1,5 +1,4 @@ module.exports = defineTest({ - skip: true, description: 'allows to configure the interop type per reexported default from an external dependency', options: { diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_config.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_config.js index 40784cbf2fd..38348470866 100644 --- a/test/chunking-form/samples/min-chunk-size/track-external-effects/_config.js +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects/_config.js @@ -1,5 +1,4 @@ module.exports = defineTest({ - skip: true, description: 'tracks external imports as side effects', options: { input: ['main1.js', 'main2.js'], diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/generated-chunk.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/generated-chunk.js deleted file mode 100644 index 806ea76e38d..00000000000 --- a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/generated-chunk.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['exports', './generated-effect'], (function (exports, effect) { 'use strict'; - - const big = - '1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'; - - exports.big = big; - -})); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/generated-effect.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/generated-effect.js deleted file mode 100644 index 3913c6bd594..00000000000 --- a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/generated-effect.js +++ /dev/null @@ -1,5 +0,0 @@ -define((function () { 'use strict'; - - console.log('effect 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'); - -})); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/generated-shared.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/generated-shared.js new file mode 100644 index 00000000000..988f9188618 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/generated-shared.js @@ -0,0 +1,5 @@ +define((function () { 'use strict'; + + console.log('shared'); + +})); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/generated-small.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/generated-small.js deleted file mode 100644 index 59507568055..00000000000 --- a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/generated-small.js +++ /dev/null @@ -1,7 +0,0 @@ -define(['exports'], (function (exports) { 'use strict'; - - const small = '0'; - - exports.small = small; - -})); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/main1.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/main1.js index 87b6a754d97..f8c75a67afc 100644 --- a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/main1.js +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/main1.js @@ -1,5 +1,10 @@ -define(['./generated-small'], (function (small) { 'use strict'; +define(['exports', 'external1', './generated-shared'], (function (exports, external1, shared) { 'use strict'; - console.log(small.small); + + + Object.defineProperty(exports, 'foo', { + enumerable: true, + get: function () { return external1.foo; } + }); })); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/main2.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/main2.js index dd21d02d99b..b0e39fecd10 100644 --- a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/main2.js +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/main2.js @@ -1,5 +1,10 @@ -define(['./generated-chunk', './generated-effect'], (function (chunk, effect) { 'use strict'; +define(['exports', 'external2', './generated-shared'], (function (exports, external2, shared) { 'use strict'; - console.log(chunk.big); + + + Object.defineProperty(exports, 'foo', { + enumerable: true, + get: function () { return external2.foo; } + }); })); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/main3.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/main3.js deleted file mode 100644 index a247bb649bb..00000000000 --- a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/main3.js +++ /dev/null @@ -1,5 +0,0 @@ -define(['./generated-effect'], (function (effect) { 'use strict'; - - console.log(); - -})); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/main4.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/main4.js deleted file mode 100644 index 40f93b1a7d1..00000000000 --- a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/amd/main4.js +++ /dev/null @@ -1,5 +0,0 @@ -define(['./generated-small', './generated-chunk', './generated-effect'], (function (small, chunk, effect) { 'use strict'; - - console.log(small.small, chunk.big); - -})); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/generated-chunk.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/generated-chunk.js deleted file mode 100644 index ff74cf0517a..00000000000 --- a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/generated-chunk.js +++ /dev/null @@ -1,8 +0,0 @@ -'use strict'; - -require('./generated-effect.js'); - -const big = - '1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'; - -exports.big = big; diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/generated-effect.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/generated-effect.js deleted file mode 100644 index bc25944b1d4..00000000000 --- a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/generated-effect.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -console.log('effect 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/generated-shared.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/generated-shared.js new file mode 100644 index 00000000000..2c23ccc927d --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/generated-shared.js @@ -0,0 +1,3 @@ +'use strict'; + +console.log('shared'); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/generated-small.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/generated-small.js deleted file mode 100644 index c72613c4229..00000000000 --- a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/generated-small.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -const small = '0'; - -exports.small = small; diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/main1.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/main1.js index e9f5c811d62..a60c5288331 100644 --- a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/main1.js +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/main1.js @@ -1,5 +1,11 @@ 'use strict'; -var small = require('./generated-small.js'); +var external1 = require('external1'); +require('./generated-shared.js'); -console.log(small.small); + + +Object.defineProperty(exports, 'foo', { + enumerable: true, + get: function () { return external1.foo; } +}); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/main2.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/main2.js index f382afa6e55..d7e2b161f22 100644 --- a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/main2.js +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/main2.js @@ -1,6 +1,11 @@ 'use strict'; -var chunk = require('./generated-chunk.js'); -require('./generated-effect.js'); +var external2 = require('external2'); +require('./generated-shared.js'); -console.log(chunk.big); + + +Object.defineProperty(exports, 'foo', { + enumerable: true, + get: function () { return external2.foo; } +}); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/main3.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/main3.js deleted file mode 100644 index 4ef9083aba8..00000000000 --- a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/main3.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -require('./generated-effect.js'); - -console.log(); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/main4.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/main4.js deleted file mode 100644 index a559c4e25b2..00000000000 --- a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/cjs/main4.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var small = require('./generated-small.js'); -var chunk = require('./generated-chunk.js'); -require('./generated-effect.js'); - -console.log(small.small, chunk.big); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/generated-chunk.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/generated-chunk.js deleted file mode 100644 index fd5a50c0dfd..00000000000 --- a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/generated-chunk.js +++ /dev/null @@ -1,6 +0,0 @@ -import './generated-effect.js'; - -const big = - '1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'; - -export { big as b }; diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/generated-effect.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/generated-effect.js deleted file mode 100644 index 419200c2133..00000000000 --- a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/generated-effect.js +++ /dev/null @@ -1 +0,0 @@ -console.log('effect 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/generated-shared.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/generated-shared.js new file mode 100644 index 00000000000..59b494c5580 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/generated-shared.js @@ -0,0 +1 @@ +console.log('shared'); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/generated-small.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/generated-small.js deleted file mode 100644 index 0b35eebd22a..00000000000 --- a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/generated-small.js +++ /dev/null @@ -1,3 +0,0 @@ -const small = '0'; - -export { small as s }; diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/main1.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/main1.js index 3f8fefa28aa..f362f513a9a 100644 --- a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/main1.js +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/main1.js @@ -1,3 +1,2 @@ -import { s as small } from './generated-small.js'; - -console.log(small); +export { foo } from 'external1'; +import './generated-shared.js'; diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/main2.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/main2.js index 8747b2a4529..ca835338451 100644 --- a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/main2.js +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/main2.js @@ -1,4 +1,2 @@ -import { b as big } from './generated-chunk.js'; -import './generated-effect.js'; - -console.log(big); +export { foo } from 'external2'; +import './generated-shared.js'; diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/main3.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/main3.js deleted file mode 100644 index 4d870c2fbd0..00000000000 --- a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/main3.js +++ /dev/null @@ -1,3 +0,0 @@ -import './generated-effect.js'; - -console.log(); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/main4.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/main4.js deleted file mode 100644 index 3cd8b45ab14..00000000000 --- a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/es/main4.js +++ /dev/null @@ -1,5 +0,0 @@ -import { s as small } from './generated-small.js'; -import { b as big } from './generated-chunk.js'; -import './generated-effect.js'; - -console.log(small, big); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/generated-chunk.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/generated-chunk.js deleted file mode 100644 index 0aa1383a66a..00000000000 --- a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/generated-chunk.js +++ /dev/null @@ -1,12 +0,0 @@ -System.register(['./generated-effect.js'], (function (exports) { - 'use strict'; - return { - setters: [null], - execute: (function () { - - const big = - exports('b', '1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'); - - }) - }; -})); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/generated-effect.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/generated-effect.js deleted file mode 100644 index dd75e356285..00000000000 --- a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/generated-effect.js +++ /dev/null @@ -1,10 +0,0 @@ -System.register([], (function () { - 'use strict'; - return { - execute: (function () { - - console.log('effect 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'); - - }) - }; -})); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/generated-shared.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/generated-shared.js new file mode 100644 index 00000000000..e2575c4b8c0 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/generated-shared.js @@ -0,0 +1,10 @@ +System.register([], (function () { + 'use strict'; + return { + execute: (function () { + + console.log('shared'); + + }) + }; +})); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/generated-small.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/generated-small.js deleted file mode 100644 index 8f2df0b2298..00000000000 --- a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/generated-small.js +++ /dev/null @@ -1,10 +0,0 @@ -System.register([], (function (exports) { - 'use strict'; - return { - execute: (function () { - - const small = exports('s', '0'); - - }) - }; -})); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/main1.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/main1.js index 6e93391fab8..1f19ad18dbc 100644 --- a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/main1.js +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/main1.js @@ -1,13 +1,12 @@ -System.register(['./generated-small.js'], (function () { +System.register(['external1', './generated-shared.js'], (function (exports) { 'use strict'; - var small; return { setters: [function (module) { - small = module.s; - }], + exports('foo', module.foo); + }, null], execute: (function () { - console.log(small); + }) }; diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/main2.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/main2.js index aeeaa3b8473..c8ad84ca05b 100644 --- a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/main2.js +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/main2.js @@ -1,13 +1,12 @@ -System.register(['./generated-chunk.js', './generated-effect.js'], (function () { +System.register(['external2', './generated-shared.js'], (function (exports) { 'use strict'; - var big; return { setters: [function (module) { - big = module.b; + exports('foo', module.foo); }, null], execute: (function () { - console.log(big); + }) }; diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/main3.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/main3.js deleted file mode 100644 index 711e5f70c7e..00000000000 --- a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/main3.js +++ /dev/null @@ -1,11 +0,0 @@ -System.register(['./generated-effect.js'], (function () { - 'use strict'; - return { - setters: [null], - execute: (function () { - - console.log(); - - }) - }; -})); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/main4.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/main4.js deleted file mode 100644 index f51da7fdbe0..00000000000 --- a/test/chunking-form/samples/min-chunk-size/track-external-effects/_expected/system/main4.js +++ /dev/null @@ -1,16 +0,0 @@ -System.register(['./generated-small.js', './generated-chunk.js', './generated-effect.js'], (function () { - 'use strict'; - var small, big; - return { - setters: [function (module) { - small = module.s; - }, function (module) { - big = module.b; - }, null], - execute: (function () { - - console.log(small, big); - - }) - }; -})); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/main1.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/main1.js index 420be1e4f25..1fd0bf2e8d4 100644 --- a/test/chunking-form/samples/min-chunk-size/track-external-effects/main1.js +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects/main1.js @@ -1,2 +1,2 @@ -import 'external1'; +export { foo } from 'external1'; import './shared'; diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects/main2.js b/test/chunking-form/samples/min-chunk-size/track-external-effects/main2.js index d0331be904d..04802c96a1b 100644 --- a/test/chunking-form/samples/min-chunk-size/track-external-effects/main2.js +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects/main2.js @@ -1,2 +1,2 @@ -import 'external2'; +export { foo } from 'external2'; import './shared'; diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects2/_config.js b/test/chunking-form/samples/min-chunk-size/track-external-effects2/_config.js new file mode 100644 index 00000000000..0df9f3c7bc2 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects2/_config.js @@ -0,0 +1,14 @@ +module.exports = defineTest({ + description: + 'does not tracks external imports as side effects if they are marked as side effect free', + options: { + input: ['main1.js', 'main2.js'], + external: ['external1', 'external2'], + treeshake: { + moduleSideEffects: 'no-external' + }, + output: { + experimentalMinChunkSize: 100 + } + } +}); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects2/_expected/amd/main1.js b/test/chunking-form/samples/min-chunk-size/track-external-effects2/_expected/amd/main1.js new file mode 100644 index 00000000000..d84bef093c7 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects2/_expected/amd/main1.js @@ -0,0 +1,10 @@ +define(['exports', 'external1', 'external2'], (function (exports, external1, external2) { 'use strict'; + + console.log('shared'); + + Object.defineProperty(exports, 'foo', { + enumerable: true, + get: function () { return external1.foo; } + }); + +})); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects2/_expected/amd/main2.js b/test/chunking-form/samples/min-chunk-size/track-external-effects2/_expected/amd/main2.js new file mode 100644 index 00000000000..92dece1d064 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects2/_expected/amd/main2.js @@ -0,0 +1,10 @@ +define(['exports', 'external2', './main1', 'external1'], (function (exports, external2, main1, external1) { 'use strict'; + + + + Object.defineProperty(exports, 'foo', { + enumerable: true, + get: function () { return external2.foo; } + }); + +})); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects2/_expected/cjs/main1.js b/test/chunking-form/samples/min-chunk-size/track-external-effects2/_expected/cjs/main1.js new file mode 100644 index 00000000000..f475fd1a4b4 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects2/_expected/cjs/main1.js @@ -0,0 +1,11 @@ +'use strict'; + +var external1 = require('external1'); +require('external2'); + +console.log('shared'); + +Object.defineProperty(exports, 'foo', { + enumerable: true, + get: function () { return external1.foo; } +}); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects2/_expected/cjs/main2.js b/test/chunking-form/samples/min-chunk-size/track-external-effects2/_expected/cjs/main2.js new file mode 100644 index 00000000000..cf524421b0d --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects2/_expected/cjs/main2.js @@ -0,0 +1,12 @@ +'use strict'; + +var external2 = require('external2'); +require('./main1.js'); +require('external1'); + + + +Object.defineProperty(exports, 'foo', { + enumerable: true, + get: function () { return external2.foo; } +}); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects2/_expected/es/main1.js b/test/chunking-form/samples/min-chunk-size/track-external-effects2/_expected/es/main1.js new file mode 100644 index 00000000000..ace55ecbb25 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects2/_expected/es/main1.js @@ -0,0 +1,4 @@ +export { foo } from 'external1'; +import 'external2'; + +console.log('shared'); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects2/_expected/es/main2.js b/test/chunking-form/samples/min-chunk-size/track-external-effects2/_expected/es/main2.js new file mode 100644 index 00000000000..15d591f7e88 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects2/_expected/es/main2.js @@ -0,0 +1,3 @@ +export { foo } from 'external2'; +import './main1.js'; +import 'external1'; diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects2/_expected/system/main1.js b/test/chunking-form/samples/min-chunk-size/track-external-effects2/_expected/system/main1.js new file mode 100644 index 00000000000..d05cd70ed81 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects2/_expected/system/main1.js @@ -0,0 +1,13 @@ +System.register(['external1', 'external2'], (function (exports) { + 'use strict'; + return { + setters: [function (module) { + exports('foo', module.foo); + }, null], + execute: (function () { + + console.log('shared'); + + }) + }; +})); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects2/_expected/system/main2.js b/test/chunking-form/samples/min-chunk-size/track-external-effects2/_expected/system/main2.js new file mode 100644 index 00000000000..bc7ec3a37a5 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects2/_expected/system/main2.js @@ -0,0 +1,13 @@ +System.register(['external2', './main1.js', 'external1'], (function (exports) { + 'use strict'; + return { + setters: [function (module) { + exports('foo', module.foo); + }, null, null], + execute: (function () { + + + + }) + }; +})); diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects2/main1.js b/test/chunking-form/samples/min-chunk-size/track-external-effects2/main1.js new file mode 100644 index 00000000000..1fd0bf2e8d4 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects2/main1.js @@ -0,0 +1,2 @@ +export { foo } from 'external1'; +import './shared'; diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects2/main2.js b/test/chunking-form/samples/min-chunk-size/track-external-effects2/main2.js new file mode 100644 index 00000000000..04802c96a1b --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects2/main2.js @@ -0,0 +1,2 @@ +export { foo } from 'external2'; +import './shared'; diff --git a/test/chunking-form/samples/min-chunk-size/track-external-effects2/shared.js b/test/chunking-form/samples/min-chunk-size/track-external-effects2/shared.js new file mode 100644 index 00000000000..59b494c5580 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/track-external-effects2/shared.js @@ -0,0 +1 @@ +console.log('shared'); From 707534b888759db1357b8a54319c530074e96c94 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Fri, 12 May 2023 21:54:08 +0200 Subject: [PATCH 10/13] Set default of experimentalMinChunkSize to 1 and fix calculations --- docs/configuration-options/index.md | 6 +-- src/utils/chunkAssignment.ts | 44 ++++++++++--------- src/utils/options/normalizeOutputOptions.ts | 2 +- .../_expected/amd/generated-other-effect.js | 5 --- ...enerated-effect.js => generated-small1.js} | 6 ++- .../_expected/amd/generated-small2.js | 3 +- .../_expected/amd/main1.js | 4 +- .../_expected/amd/main2.js | 4 +- .../_expected/amd/main3.js | 2 +- .../_expected/amd/main4.js | 2 +- .../_expected/amd/main5.js | 2 +- .../_expected/cjs/generated-other-effect.js | 3 -- ...enerated-effect.js => generated-small1.js} | 4 ++ .../_expected/cjs/generated-small2.js | 3 +- .../_expected/cjs/main1.js | 5 +-- .../_expected/cjs/main2.js | 5 +-- .../_expected/cjs/main3.js | 1 - .../_expected/cjs/main4.js | 4 +- .../_expected/cjs/main5.js | 4 +- .../_expected/es/generated-other-effect.js | 1 - ...enerated-effect.js => generated-small1.js} | 4 ++ .../_expected/es/generated-small2.js | 4 +- .../_expected/es/main1.js | 5 +-- .../_expected/es/main2.js | 3 +- .../_expected/es/main3.js | 3 +- .../_expected/es/main4.js | 4 +- .../_expected/es/main5.js | 4 +- .../system/generated-other-effect.js | 10 ----- ...enerated-effect.js => generated-small1.js} | 4 +- .../_expected/system/generated-small2.js | 4 +- .../_expected/system/main1.js | 7 +-- .../_expected/system/main2.js | 4 +- .../_expected/system/main3.js | 6 +-- .../_expected/system/main4.js | 2 +- .../_expected/system/main5.js | 2 +- 35 files changed, 84 insertions(+), 92 deletions(-) delete mode 100644 test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/amd/generated-other-effect.js rename test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/amd/{generated-effect.js => generated-small1.js} (55%) delete mode 100644 test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/cjs/generated-other-effect.js rename test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/cjs/{generated-effect.js => generated-small1.js} (74%) delete mode 100644 test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/es/generated-other-effect.js rename test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/es/{generated-effect.js => generated-small1.js} (72%) delete mode 100644 test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/system/generated-other-effect.js rename test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/system/{generated-effect.js => generated-small1.js} (70%) diff --git a/docs/configuration-options/index.md b/docs/configuration-options/index.md index c2166332f5b..958feb601b8 100755 --- a/docs/configuration-options/index.md +++ b/docs/configuration-options/index.md @@ -2339,11 +2339,11 @@ This option will only log top-level statements, though. Sometimes, e.g. in case | -------: | :---------------------------------- | | Type: | `number` | | CLI: | `--experimentalMinChunkSize ` | -| Default: | `0` | +| Default: | `1` | -Set a minimal chunk size target in Byte for code-splitting setups. When this value is greater than `0`, Rollup will try to merge any chunk that does not have side effects when executed, i.e. any chunk that only contains function definitions etc., and is below this size limit into another chunk that is likely to be loaded under similar conditions. +Set a minimal chunk size target in Byte for code-splitting setups. When this value is set to the default of `1`, Rollup will try to merge chunks that do not contain code except imports and reexports into other chunks. A merge will only be performed if it does not change what side effects are executed when any entry is loaded. For the value of `1`, only merges are permitted that do no increase the amount of code loaded for any entry. -This will mean that the generated bundle will possibly load code that is not required yet in order to reduce the number of chunks. The condition for the merged chunks to be side effect free ensures that this does not change behaviour. +Larger values will try to merge any chunk below the limit into other chunks. In that case, it is accepted that entries may load some unnecessary code. The algorithm always tries to merge in a way that minimizes the amount of unnecessary code, though. Unfortunately, due to the way chunking works, chunk size is measured before any chunk rendering plugins like minifiers ran, which means you should use a high enough limit to take this into account. diff --git a/src/utils/chunkAssignment.ts b/src/utils/chunkAssignment.ts index ca9483c24f6..19c0dd080a4 100644 --- a/src/utils/chunkAssignment.ts +++ b/src/utils/chunkAssignment.ts @@ -530,7 +530,7 @@ function getOptimizedChunks( timeEnd('optimize chunks', 3); return initialChunks; // the actual modules } - minChunkSize && + minChunkSize > 1 && console.log( 'Before eliminating small chunks, there were\n', initialChunks.length, @@ -541,7 +541,7 @@ function getOptimizedChunks( if (chunkPartition.small.size > 0) { mergeChunks(chunkPartition, minChunkSize); } - minChunkSize && + minChunkSize > 1 && console.log( 'After merging chunks,\n', chunkPartition.small.size + chunkPartition.big.size, @@ -592,7 +592,7 @@ function getPartitionedChunks( if (!pure) { sideEffectAtoms |= containedAtoms; } - (size <= minChunkSize ? smallChunks : bigChunks).push(chunkDescription); + (size < minChunkSize ? smallChunks : bigChunks).push(chunkDescription); containedAtoms <<= 1n; } // If there are no small chunks, we will not optimize @@ -613,7 +613,6 @@ function getPartitionedChunks( }; } -// TODO Lukas change default for minChunkSize to 1 // TODO Lukas improve size calculation function addChunkDependenciesAndAtomsAndGetSideEffectAtoms( chunkLists: ChunkDescription[][], @@ -683,14 +682,15 @@ function mergeChunks(chunkPartition: ChunkPartition, minChunkSize: number) { const { big, sideEffectAtoms, sizeByAtom, small } = chunkPartition; for (const mergedChunk of small) { let bestTargetChunk: ChunkDescription | null = null; - let smallestAdditionalSize = Infinity; + // In the default case, we do not accept size increases + let smallestAdditionalSize = minChunkSize <= 1 ? 1 : Infinity; const { containedAtoms, correlatedAtoms, modules, pure, size } = mergedChunk; for (const targetChunk of concatLazy([small, big])) { if (mergedChunk === targetChunk) continue; const additionalSizeAfterMerge = getAdditionalSizeAfterMerge( mergedChunk, targetChunk, - smallestAdditionalSize - 1, + smallestAdditionalSize, sideEffectAtoms, sizeByAtom ); @@ -735,33 +735,33 @@ function mergeChunks(chunkPartition: ChunkPartition, minChunkSize: number) { * two chunks. This is not an exact measurement but rather an upper bound. If * the merge produces cycles or adds non-correlated side effects, `Infinity` * is returned. - * Merging will not produce cycles if none of the direct non-merged dependencies + * Merging will not produce cycles if none of the direct non-merged + * dependencies * of a chunk have the other chunk as a transitive dependency. - * @param maxAdditionalSize The maximum additional unused code size allowed to - * be added by the merge, taking dependencies into account + * @param currentAdditionalSize The maximum additional unused code size allowed + * to be added by the merge, taking dependencies into account, needs to be + * below this number */ function getAdditionalSizeAfterMerge( mergedChunk: ChunkDescription, targetChunk: ChunkDescription, - maxAdditionalSize: number, + currentAdditionalSize: number, sideEffectAtoms: bigint, sizeByAtom: number[] ): number { const firstSize = getAdditionalSizeIfNoTransitiveDependencyOrNonCorrelatedSideEffect( mergedChunk, targetChunk, - maxAdditionalSize, + currentAdditionalSize, sideEffectAtoms, sizeByAtom ); - // That way, it is okay if they are equal unless both firstSize and - // maxAdditionalSize are infinite - return firstSize < maxAdditionalSize + 1 + return firstSize < currentAdditionalSize ? firstSize + getAdditionalSizeIfNoTransitiveDependencyOrNonCorrelatedSideEffect( targetChunk, mergedChunk, - maxAdditionalSize, + currentAdditionalSize - firstSize, sideEffectAtoms, sizeByAtom ) @@ -771,7 +771,7 @@ function getAdditionalSizeAfterMerge( function getAdditionalSizeIfNoTransitiveDependencyOrNonCorrelatedSideEffect( dependentChunk: ChunkDescription, dependencyChunk: ChunkDescription, - maxUnnecessaryLoad: number, + currentAdditionalSize: number, sideEffectAtoms: bigint, sizeByAtom: number[] ): number { @@ -795,7 +795,11 @@ function getAdditionalSizeIfNoTransitiveDependencyOrNonCorrelatedSideEffect( chunksToCheck.add(dependency); } } - return getAtomsSizeIfBelowLimit(dependencyAtoms, maxUnnecessaryLoad, sizeByAtom); + return getAtomsSizeIfBelowLimit( + dependencyAtoms & ~correlatedAtoms, + currentAdditionalSize, + sizeByAtom + ); } function getChunksInPartition( @@ -803,12 +807,12 @@ function getChunksInPartition( minChunkSize: number, chunkPartition: ChunkPartition ): Set { - return chunk.size <= minChunkSize ? chunkPartition.small : chunkPartition.big; + return chunk.size < minChunkSize ? chunkPartition.small : chunkPartition.big; } function getAtomsSizeIfBelowLimit( atoms: bigint, - maxUnnecessaryLoad: number, + currentAdditionalSize: number, sizeByAtom: number[] ): number { let size = 0; @@ -820,7 +824,7 @@ function getAtomsSizeIfBelowLimit( size += sizeByAtom[atomIndex]; } atomSignature <<= 1n; - if (size > maxUnnecessaryLoad) { + if (size >= currentAdditionalSize) { return Infinity; } } diff --git a/src/utils/options/normalizeOutputOptions.ts b/src/utils/options/normalizeOutputOptions.ts index 2fc137a4f29..b2bf1c9b06f 100644 --- a/src/utils/options/normalizeOutputOptions.ts +++ b/src/utils/options/normalizeOutputOptions.ts @@ -71,7 +71,7 @@ export async function normalizeOutputOptions( config, inputOptions ), - experimentalMinChunkSize: config.experimentalMinChunkSize || 0, + experimentalMinChunkSize: config.experimentalMinChunkSize ?? 1, exports: getExports(config, unsetOptions), extend: config.extend || false, externalImportAssertions: config.externalImportAssertions ?? true, diff --git a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/amd/generated-other-effect.js b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/amd/generated-other-effect.js deleted file mode 100644 index 50ba55101bf..00000000000 --- a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/amd/generated-other-effect.js +++ /dev/null @@ -1,5 +0,0 @@ -define((function () { 'use strict'; - - console.log('other effect 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'); - -})); diff --git a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/amd/generated-effect.js b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/amd/generated-small1.js similarity index 55% rename from test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/amd/generated-effect.js rename to test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/amd/generated-small1.js index 3913c6bd594..25cd135ccde 100644 --- a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/amd/generated-effect.js +++ b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/amd/generated-small1.js @@ -1,5 +1,9 @@ -define((function () { 'use strict'; +define(['exports'], (function (exports) { 'use strict'; console.log('effect 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'); + const small1 = '1'; + + exports.small1 = small1; + })); diff --git a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/amd/generated-small2.js b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/amd/generated-small2.js index 5ce222230ba..852f389a5d5 100644 --- a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/amd/generated-small2.js +++ b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/amd/generated-small2.js @@ -1,10 +1,9 @@ define(['exports'], (function (exports) { 'use strict'; - const small1 = '1'; + console.log('other effect 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'); const small2 = '2'; - exports.small1 = small1; exports.small2 = small2; })); diff --git a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/amd/main1.js b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/amd/main1.js index c4056c24e6d..77a2db52fd4 100644 --- a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/amd/main1.js +++ b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/amd/main1.js @@ -1,5 +1,5 @@ -define(['./generated-effect', './generated-other-effect', './generated-small2'], (function (effect, otherEffect, small2) { 'use strict'; +define(['./generated-small1', './generated-small2'], (function (small1, small2) { 'use strict'; - console.log(small2.small1, small2.small2); + console.log(small1.small1, small2.small2); })); diff --git a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/amd/main2.js b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/amd/main2.js index 6635294ed9a..9873e8c4cdb 100644 --- a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/amd/main2.js +++ b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/amd/main2.js @@ -1,5 +1,5 @@ -define(['./generated-effect', './generated-small2'], (function (effect, small2) { 'use strict'; +define(['./generated-small1'], (function (small1) { 'use strict'; - console.log(small2.small1); + console.log(small1.small1); })); diff --git a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/amd/main3.js b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/amd/main3.js index ebc7d22e38d..f7a8bc388f2 100644 --- a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/amd/main3.js +++ b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/amd/main3.js @@ -1,4 +1,4 @@ -define(['./generated-other-effect', './generated-small2'], (function (otherEffect, small2) { 'use strict'; +define(['./generated-small2'], (function (small2) { 'use strict'; console.log(small2.small2); diff --git a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/amd/main4.js b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/amd/main4.js index 0e57e7a61ec..cff4625d39d 100644 --- a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/amd/main4.js +++ b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/amd/main4.js @@ -1,4 +1,4 @@ -define(['./generated-effect', './generated-other-effect'], (function (effect, otherEffect) { 'use strict'; +define(['./generated-small1', './generated-small2'], (function (small1, small2) { 'use strict'; console.log('main 4'); diff --git a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/amd/main5.js b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/amd/main5.js index d8525cba8fa..8fd03f46cea 100644 --- a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/amd/main5.js +++ b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/amd/main5.js @@ -1,4 +1,4 @@ -define(['./generated-effect', './generated-other-effect'], (function (effect, otherEffect) { 'use strict'; +define(['./generated-small1', './generated-small2'], (function (small1, small2) { 'use strict'; console.log('main 5'); diff --git a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/cjs/generated-other-effect.js b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/cjs/generated-other-effect.js deleted file mode 100644 index bca5f22dda0..00000000000 --- a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/cjs/generated-other-effect.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -console.log('other effect 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'); diff --git a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/cjs/generated-effect.js b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/cjs/generated-small1.js similarity index 74% rename from test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/cjs/generated-effect.js rename to test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/cjs/generated-small1.js index bc25944b1d4..ca741958a36 100644 --- a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/cjs/generated-effect.js +++ b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/cjs/generated-small1.js @@ -1,3 +1,7 @@ 'use strict'; console.log('effect 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'); + +const small1 = '1'; + +exports.small1 = small1; diff --git a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/cjs/generated-small2.js b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/cjs/generated-small2.js index 058c88395ed..d3fb59432cd 100644 --- a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/cjs/generated-small2.js +++ b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/cjs/generated-small2.js @@ -1,8 +1,7 @@ 'use strict'; -const small1 = '1'; +console.log('other effect 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'); const small2 = '2'; -exports.small1 = small1; exports.small2 = small2; diff --git a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/cjs/main1.js b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/cjs/main1.js index ee569128959..cbcec9c4b43 100644 --- a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/cjs/main1.js +++ b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/cjs/main1.js @@ -1,7 +1,6 @@ 'use strict'; -require('./generated-effect.js'); -require('./generated-other-effect.js'); +var small1 = require('./generated-small1.js'); var small2 = require('./generated-small2.js'); -console.log(small2.small1, small2.small2); +console.log(small1.small1, small2.small2); diff --git a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/cjs/main2.js b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/cjs/main2.js index 3a8fd5b9732..481138de8db 100644 --- a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/cjs/main2.js +++ b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/cjs/main2.js @@ -1,6 +1,5 @@ 'use strict'; -require('./generated-effect.js'); -var small2 = require('./generated-small2.js'); +var small1 = require('./generated-small1.js'); -console.log(small2.small1); +console.log(small1.small1); diff --git a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/cjs/main3.js b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/cjs/main3.js index 1d88c375858..cfd5e278dbd 100644 --- a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/cjs/main3.js +++ b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/cjs/main3.js @@ -1,6 +1,5 @@ 'use strict'; -require('./generated-other-effect.js'); var small2 = require('./generated-small2.js'); console.log(small2.small2); diff --git a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/cjs/main4.js b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/cjs/main4.js index e76317c5d86..16ddc46d562 100644 --- a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/cjs/main4.js +++ b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/cjs/main4.js @@ -1,6 +1,6 @@ 'use strict'; -require('./generated-effect.js'); -require('./generated-other-effect.js'); +require('./generated-small1.js'); +require('./generated-small2.js'); console.log('main 4'); diff --git a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/cjs/main5.js b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/cjs/main5.js index 58d9724a217..d7f10f57f55 100644 --- a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/cjs/main5.js +++ b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/cjs/main5.js @@ -1,6 +1,6 @@ 'use strict'; -require('./generated-effect.js'); -require('./generated-other-effect.js'); +require('./generated-small1.js'); +require('./generated-small2.js'); console.log('main 5'); diff --git a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/es/generated-other-effect.js b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/es/generated-other-effect.js deleted file mode 100644 index c6763f0c208..00000000000 --- a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/es/generated-other-effect.js +++ /dev/null @@ -1 +0,0 @@ -console.log('other effect 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'); diff --git a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/es/generated-effect.js b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/es/generated-small1.js similarity index 72% rename from test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/es/generated-effect.js rename to test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/es/generated-small1.js index 419200c2133..ffcc9833c5b 100644 --- a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/es/generated-effect.js +++ b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/es/generated-small1.js @@ -1 +1,5 @@ console.log('effect 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'); + +const small1 = '1'; + +export { small1 as s }; diff --git a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/es/generated-small2.js b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/es/generated-small2.js index 2690b86d380..e7010a77bbd 100644 --- a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/es/generated-small2.js +++ b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/es/generated-small2.js @@ -1,5 +1,5 @@ -const small1 = '1'; +console.log('other effect 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'); const small2 = '2'; -export { small2 as a, small1 as s }; +export { small2 as s }; diff --git a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/es/main1.js b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/es/main1.js index b870705b543..82171309c6a 100644 --- a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/es/main1.js +++ b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/es/main1.js @@ -1,5 +1,4 @@ -import './generated-effect.js'; -import './generated-other-effect.js'; -import { s as small1, a as small2 } from './generated-small2.js'; +import { s as small1 } from './generated-small1.js'; +import { s as small2 } from './generated-small2.js'; console.log(small1, small2); diff --git a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/es/main2.js b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/es/main2.js index 610b0d90441..ebac230bc5b 100644 --- a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/es/main2.js +++ b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/es/main2.js @@ -1,4 +1,3 @@ -import './generated-effect.js'; -import { s as small1 } from './generated-small2.js'; +import { s as small1 } from './generated-small1.js'; console.log(small1); diff --git a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/es/main3.js b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/es/main3.js index 4f688224bf0..3c70cd4f78a 100644 --- a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/es/main3.js +++ b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/es/main3.js @@ -1,4 +1,3 @@ -import './generated-other-effect.js'; -import { a as small2 } from './generated-small2.js'; +import { s as small2 } from './generated-small2.js'; console.log(small2); diff --git a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/es/main4.js b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/es/main4.js index bc9a46e8dcc..080c95f1668 100644 --- a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/es/main4.js +++ b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/es/main4.js @@ -1,4 +1,4 @@ -import './generated-effect.js'; -import './generated-other-effect.js'; +import './generated-small1.js'; +import './generated-small2.js'; console.log('main 4'); diff --git a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/es/main5.js b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/es/main5.js index 0c0ba0a62ed..601cd735ba7 100644 --- a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/es/main5.js +++ b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/es/main5.js @@ -1,4 +1,4 @@ -import './generated-effect.js'; -import './generated-other-effect.js'; +import './generated-small1.js'; +import './generated-small2.js'; console.log('main 5'); diff --git a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/system/generated-other-effect.js b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/system/generated-other-effect.js deleted file mode 100644 index b859a46595b..00000000000 --- a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/system/generated-other-effect.js +++ /dev/null @@ -1,10 +0,0 @@ -System.register([], (function () { - 'use strict'; - return { - execute: (function () { - - console.log('other effect 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'); - - }) - }; -})); diff --git a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/system/generated-effect.js b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/system/generated-small1.js similarity index 70% rename from test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/system/generated-effect.js rename to test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/system/generated-small1.js index dd75e356285..b7972e8ee6b 100644 --- a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/system/generated-effect.js +++ b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/system/generated-small1.js @@ -1,10 +1,12 @@ -System.register([], (function () { +System.register([], (function (exports) { 'use strict'; return { execute: (function () { console.log('effect 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'); + const small1 = exports('s', '1'); + }) }; })); diff --git a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/system/generated-small2.js b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/system/generated-small2.js index 3d3dfc4d652..d326b3e17eb 100644 --- a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/system/generated-small2.js +++ b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/system/generated-small2.js @@ -3,9 +3,9 @@ System.register([], (function (exports) { return { execute: (function () { - const small1 = exports('s', '1'); + console.log('other effect 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'); - const small2 = exports('a', '2'); + const small2 = exports('s', '2'); }) }; diff --git a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/system/main1.js b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/system/main1.js index 886dd10f0ad..46f4276e987 100644 --- a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/system/main1.js +++ b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/system/main1.js @@ -1,10 +1,11 @@ -System.register(['./generated-effect.js', './generated-other-effect.js', './generated-small2.js'], (function () { +System.register(['./generated-small1.js', './generated-small2.js'], (function () { 'use strict'; var small1, small2; return { - setters: [null, null, function (module) { + setters: [function (module) { small1 = module.s; - small2 = module.a; + }, function (module) { + small2 = module.s; }], execute: (function () { diff --git a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/system/main2.js b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/system/main2.js index be2739da62b..a3f5c0e8eda 100644 --- a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/system/main2.js +++ b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/system/main2.js @@ -1,8 +1,8 @@ -System.register(['./generated-effect.js', './generated-small2.js'], (function () { +System.register(['./generated-small1.js'], (function () { 'use strict'; var small1; return { - setters: [null, function (module) { + setters: [function (module) { small1 = module.s; }], execute: (function () { diff --git a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/system/main3.js b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/system/main3.js index ccc6c9f4821..7eeca1a47a6 100644 --- a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/system/main3.js +++ b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/system/main3.js @@ -1,9 +1,9 @@ -System.register(['./generated-other-effect.js', './generated-small2.js'], (function () { +System.register(['./generated-small2.js'], (function () { 'use strict'; var small2; return { - setters: [null, function (module) { - small2 = module.a; + setters: [function (module) { + small2 = module.s; }], execute: (function () { diff --git a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/system/main4.js b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/system/main4.js index 4939b02f4c4..48fec908bc1 100644 --- a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/system/main4.js +++ b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/system/main4.js @@ -1,4 +1,4 @@ -System.register(['./generated-effect.js', './generated-other-effect.js'], (function () { +System.register(['./generated-small1.js', './generated-small2.js'], (function () { 'use strict'; return { setters: [null, null], diff --git a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/system/main5.js b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/system/main5.js index 4ee3f1a575c..d16e4d57209 100644 --- a/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/system/main5.js +++ b/test/chunking-form/samples/min-chunk-size/ignore-correlated-side-effects/_expected/system/main5.js @@ -1,4 +1,4 @@ -System.register(['./generated-effect.js', './generated-other-effect.js'], (function () { +System.register(['./generated-small1.js', './generated-small2.js'], (function () { 'use strict'; return { setters: [null, null], From 6e300ab6a329f0cb3754b25f4248d084f3ae05d0 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Fri, 12 May 2023 22:14:22 +0200 Subject: [PATCH 11/13] Improve size calculation --- docs/configuration-options/index.md | 2 +- src/Module.ts | 11 +++++++++++ src/utils/chunkAssignment.ts | 7 +++---- .../samples/min-chunk-size/tree-shaking/_config.js | 9 +++++++++ .../tree-shaking/_expected/amd/main1.js | 9 +++++++++ .../tree-shaking/_expected/amd/main2.js | 5 +++++ .../tree-shaking/_expected/cjs/main1.js | 7 +++++++ .../tree-shaking/_expected/cjs/main2.js | 5 +++++ .../tree-shaking/_expected/es/main1.js | 5 +++++ .../tree-shaking/_expected/es/main2.js | 3 +++ .../tree-shaking/_expected/system/main1.js | 12 ++++++++++++ .../tree-shaking/_expected/system/main2.js | 11 +++++++++++ .../samples/min-chunk-size/tree-shaking/main1.js | 4 ++++ .../samples/min-chunk-size/tree-shaking/main2.js | 2 ++ .../samples/min-chunk-size/tree-shaking/shared.js | 4 ++++ test/cli/samples/empty-chunk-multiple/_config.js | 2 +- test/cli/samples/empty-chunk-multiple/main.js | 2 -- .../samples/empty-chunk-multiple/{a.js => main1.js} | 0 .../samples/empty-chunk-multiple/{b.js => main2.js} | 0 .../samples/empty-chunk-multiple/rollup.config.js | 2 +- test/function/samples/output-options-hook/_config.js | 2 +- 21 files changed, 94 insertions(+), 10 deletions(-) create mode 100644 test/chunking-form/samples/min-chunk-size/tree-shaking/_config.js create mode 100644 test/chunking-form/samples/min-chunk-size/tree-shaking/_expected/amd/main1.js create mode 100644 test/chunking-form/samples/min-chunk-size/tree-shaking/_expected/amd/main2.js create mode 100644 test/chunking-form/samples/min-chunk-size/tree-shaking/_expected/cjs/main1.js create mode 100644 test/chunking-form/samples/min-chunk-size/tree-shaking/_expected/cjs/main2.js create mode 100644 test/chunking-form/samples/min-chunk-size/tree-shaking/_expected/es/main1.js create mode 100644 test/chunking-form/samples/min-chunk-size/tree-shaking/_expected/es/main2.js create mode 100644 test/chunking-form/samples/min-chunk-size/tree-shaking/_expected/system/main1.js create mode 100644 test/chunking-form/samples/min-chunk-size/tree-shaking/_expected/system/main2.js create mode 100644 test/chunking-form/samples/min-chunk-size/tree-shaking/main1.js create mode 100644 test/chunking-form/samples/min-chunk-size/tree-shaking/main2.js create mode 100644 test/chunking-form/samples/min-chunk-size/tree-shaking/shared.js delete mode 100644 test/cli/samples/empty-chunk-multiple/main.js rename test/cli/samples/empty-chunk-multiple/{a.js => main1.js} (100%) rename test/cli/samples/empty-chunk-multiple/{b.js => main2.js} (100%) diff --git a/docs/configuration-options/index.md b/docs/configuration-options/index.md index 958feb601b8..27be0d86e49 100755 --- a/docs/configuration-options/index.md +++ b/docs/configuration-options/index.md @@ -2345,7 +2345,7 @@ Set a minimal chunk size target in Byte for code-splitting setups. When this val Larger values will try to merge any chunk below the limit into other chunks. In that case, it is accepted that entries may load some unnecessary code. The algorithm always tries to merge in a way that minimizes the amount of unnecessary code, though. -Unfortunately, due to the way chunking works, chunk size is measured before any chunk rendering plugins like minifiers ran, which means you should use a high enough limit to take this into account. +Unfortunately, due to the way chunking works, chunk size is measured before any chunk rendering plugins like minifiers ran, which means you should use a high enough limit to take this into account. When calculating the size, it will take tree-shaking of top-level statements into account, though. ### perf diff --git a/src/Module.ts b/src/Module.ts index 55cec222fe9..d493125f40e 100644 --- a/src/Module.ts +++ b/src/Module.ts @@ -401,6 +401,17 @@ export default class Module { return error(properties); } + // sum up the length of all ast nodes that are included + estimateSize(): number { + let size = 0; + for (const node of this.ast!.body) { + if (node.included) { + size += node.end - node.start; + } + } + return size; + } + getAllExportNames(): Set { if (this.allExportNames) { return this.allExportNames; diff --git a/src/utils/chunkAssignment.ts b/src/utils/chunkAssignment.ts index 19c0dd080a4..b78aac0c698 100644 --- a/src/utils/chunkAssignment.ts +++ b/src/utils/chunkAssignment.ts @@ -583,7 +583,9 @@ function getPartitionedChunks( // rendering did not happen yet, but we can detect empty modules if (module.isIncluded()) { pure &&= !module.hasEffects(); - size += module.originalCode.length; + // we use a trivial size for the default minChunkSize to improve + // performance + size += minChunkSize > 1 ? module.estimateSize() : 1; } } chunkDescription.pure = pure; @@ -613,7 +615,6 @@ function getPartitionedChunks( }; } -// TODO Lukas improve size calculation function addChunkDependenciesAndAtomsAndGetSideEffectAtoms( chunkLists: ChunkDescription[][], chunkByModule: Map, @@ -652,8 +653,6 @@ function addChunkDependenciesAndAtomsAndGetSideEffectAtoms( } const { containedAtoms } = chunk; for (const entryIndex of dependentEntries) { - // containedAtoms is mutated after destructuring - // eslint-disable-next-line unicorn/consistent-destructuring atomsByEntry[entryIndex] |= containedAtoms; } } diff --git a/test/chunking-form/samples/min-chunk-size/tree-shaking/_config.js b/test/chunking-form/samples/min-chunk-size/tree-shaking/_config.js new file mode 100644 index 00000000000..7861df6dc6a --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/tree-shaking/_config.js @@ -0,0 +1,9 @@ +module.exports = defineTest({ + description: 'takes tree-shaking into account and ignores top-level comments', + options: { + input: ['main1.js', 'main2.js'], + output: { + experimentalMinChunkSize: 100 + } + } +}); diff --git a/test/chunking-form/samples/min-chunk-size/tree-shaking/_expected/amd/main1.js b/test/chunking-form/samples/min-chunk-size/tree-shaking/_expected/amd/main1.js new file mode 100644 index 00000000000..3af0af5846c --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/tree-shaking/_expected/amd/main1.js @@ -0,0 +1,9 @@ +define(['exports'], (function (exports) { 'use strict'; + + console.log('shared'); + + const main = 'main'; + + exports.main = main; + +})); diff --git a/test/chunking-form/samples/min-chunk-size/tree-shaking/_expected/amd/main2.js b/test/chunking-form/samples/min-chunk-size/tree-shaking/_expected/amd/main2.js new file mode 100644 index 00000000000..e0b343c64a1 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/tree-shaking/_expected/amd/main2.js @@ -0,0 +1,5 @@ +define(['./main1'], (function (main1) { 'use strict'; + + console.log('other'); + +})); diff --git a/test/chunking-form/samples/min-chunk-size/tree-shaking/_expected/cjs/main1.js b/test/chunking-form/samples/min-chunk-size/tree-shaking/_expected/cjs/main1.js new file mode 100644 index 00000000000..520db8e0dc5 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/tree-shaking/_expected/cjs/main1.js @@ -0,0 +1,7 @@ +'use strict'; + +console.log('shared'); + +const main = 'main'; + +exports.main = main; diff --git a/test/chunking-form/samples/min-chunk-size/tree-shaking/_expected/cjs/main2.js b/test/chunking-form/samples/min-chunk-size/tree-shaking/_expected/cjs/main2.js new file mode 100644 index 00000000000..25093b58f8e --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/tree-shaking/_expected/cjs/main2.js @@ -0,0 +1,5 @@ +'use strict'; + +require('./main1.js'); + +console.log('other'); diff --git a/test/chunking-form/samples/min-chunk-size/tree-shaking/_expected/es/main1.js b/test/chunking-form/samples/min-chunk-size/tree-shaking/_expected/es/main1.js new file mode 100644 index 00000000000..bc9792e7f53 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/tree-shaking/_expected/es/main1.js @@ -0,0 +1,5 @@ +console.log('shared'); + +const main = 'main'; + +export { main }; diff --git a/test/chunking-form/samples/min-chunk-size/tree-shaking/_expected/es/main2.js b/test/chunking-form/samples/min-chunk-size/tree-shaking/_expected/es/main2.js new file mode 100644 index 00000000000..20a86753f36 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/tree-shaking/_expected/es/main2.js @@ -0,0 +1,3 @@ +import './main1.js'; + +console.log('other'); diff --git a/test/chunking-form/samples/min-chunk-size/tree-shaking/_expected/system/main1.js b/test/chunking-form/samples/min-chunk-size/tree-shaking/_expected/system/main1.js new file mode 100644 index 00000000000..f7448cd3f66 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/tree-shaking/_expected/system/main1.js @@ -0,0 +1,12 @@ +System.register([], (function (exports) { + 'use strict'; + return { + execute: (function () { + + console.log('shared'); + + const main = exports('main', 'main'); + + }) + }; +})); diff --git a/test/chunking-form/samples/min-chunk-size/tree-shaking/_expected/system/main2.js b/test/chunking-form/samples/min-chunk-size/tree-shaking/_expected/system/main2.js new file mode 100644 index 00000000000..920c9d7d0eb --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/tree-shaking/_expected/system/main2.js @@ -0,0 +1,11 @@ +System.register(['./main1.js'], (function () { + 'use strict'; + return { + setters: [null], + execute: (function () { + + console.log('other'); + + }) + }; +})); diff --git a/test/chunking-form/samples/min-chunk-size/tree-shaking/main1.js b/test/chunking-form/samples/min-chunk-size/tree-shaking/main1.js new file mode 100644 index 00000000000..cfd8a9f8bc8 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/tree-shaking/main1.js @@ -0,0 +1,4 @@ +export const main = 'main'; +/* a very long comment exceeding 100 characters + -------------------------------------------- */ +import './shared'; diff --git a/test/chunking-form/samples/min-chunk-size/tree-shaking/main2.js b/test/chunking-form/samples/min-chunk-size/tree-shaking/main2.js new file mode 100644 index 00000000000..7cd409d7acd --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/tree-shaking/main2.js @@ -0,0 +1,2 @@ +import './shared'; +console.log('other'); diff --git a/test/chunking-form/samples/min-chunk-size/tree-shaking/shared.js b/test/chunking-form/samples/min-chunk-size/tree-shaking/shared.js new file mode 100644 index 00000000000..c2664921069 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/tree-shaking/shared.js @@ -0,0 +1,4 @@ +console.log('shared'); +/* a very long comment exceeding 100 characters + -------------------------------------------- */ +export const unused = 'also very long and very unused'; diff --git a/test/cli/samples/empty-chunk-multiple/_config.js b/test/cli/samples/empty-chunk-multiple/_config.js index 9a27c125145..eaf48f28373 100644 --- a/test/cli/samples/empty-chunk-multiple/_config.js +++ b/test/cli/samples/empty-chunk-multiple/_config.js @@ -4,5 +4,5 @@ module.exports = defineTest({ description: 'shows warning when multiple chunks empty', command: 'rollup -c', error: () => true, - stderr: stderr => assertIncludes(stderr, '(!) Generated empty chunks\n"a" and "b"') + stderr: stderr => assertIncludes(stderr, '(!) Generated empty chunks\n"main1" and "main2"') }); diff --git a/test/cli/samples/empty-chunk-multiple/main.js b/test/cli/samples/empty-chunk-multiple/main.js deleted file mode 100644 index f0bdb216130..00000000000 --- a/test/cli/samples/empty-chunk-multiple/main.js +++ /dev/null @@ -1,2 +0,0 @@ -import('./a.js'); -import('./b.js'); diff --git a/test/cli/samples/empty-chunk-multiple/a.js b/test/cli/samples/empty-chunk-multiple/main1.js similarity index 100% rename from test/cli/samples/empty-chunk-multiple/a.js rename to test/cli/samples/empty-chunk-multiple/main1.js diff --git a/test/cli/samples/empty-chunk-multiple/b.js b/test/cli/samples/empty-chunk-multiple/main2.js similarity index 100% rename from test/cli/samples/empty-chunk-multiple/b.js rename to test/cli/samples/empty-chunk-multiple/main2.js diff --git a/test/cli/samples/empty-chunk-multiple/rollup.config.js b/test/cli/samples/empty-chunk-multiple/rollup.config.js index d3fce68c3a7..7120b077ccf 100644 --- a/test/cli/samples/empty-chunk-multiple/rollup.config.js +++ b/test/cli/samples/empty-chunk-multiple/rollup.config.js @@ -1,5 +1,5 @@ module.exports = { - input: 'main.js', + input: ['main1.js', 'main2.js'], output: { format: 'cjs' } diff --git a/test/function/samples/output-options-hook/_config.js b/test/function/samples/output-options-hook/_config.js index b4ff287f121..e967acfc4b7 100644 --- a/test/function/samples/output-options-hook/_config.js +++ b/test/function/samples/output-options-hook/_config.js @@ -28,7 +28,7 @@ module.exports = defineTest({ entryFileNames: '[name].js', esModule: 'if-default-prop', experimentalDeepDynamicChunkOptimization: false, - experimentalMinChunkSize: 0, + experimentalMinChunkSize: 1, exports: 'auto', extend: false, externalImportAssertions: true, From f290b84b48a418195c6f38344144497032048698 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Sat, 13 May 2023 06:29:21 +0200 Subject: [PATCH 12/13] Abort search if perfect match is found --- src/utils/chunkAssignment.ts | 140 +++++++++++++++++++---------------- 1 file changed, 75 insertions(+), 65 deletions(-) diff --git a/src/utils/chunkAssignment.ts b/src/utils/chunkAssignment.ts index b78aac0c698..b8c727cea0c 100644 --- a/src/utils/chunkAssignment.ts +++ b/src/utils/chunkAssignment.ts @@ -615,6 +615,45 @@ function getPartitionedChunks( }; } +function mergeChunks(chunkPartition: ChunkPartition, minChunkSize: number) { + const { small } = chunkPartition; + for (const mergedChunk of small) { + const bestTargetChunk = findBestMergeTarget( + mergedChunk, + chunkPartition, + // In the default case, we do not accept size increases + minChunkSize <= 1 ? 1 : Infinity + ); + if (bestTargetChunk) { + const { containedAtoms, correlatedAtoms, modules, pure, size } = mergedChunk; + small.delete(mergedChunk); + getChunksInPartition(bestTargetChunk, minChunkSize, chunkPartition).delete(bestTargetChunk); + bestTargetChunk.modules.push(...modules); + bestTargetChunk.size += size; + bestTargetChunk.pure &&= pure; + const { dependencies, dependentChunks, dependentEntries } = bestTargetChunk; + bestTargetChunk.correlatedAtoms &= correlatedAtoms; + bestTargetChunk.containedAtoms |= containedAtoms; + for (const entry of mergedChunk.dependentEntries) { + dependentEntries.add(entry); + } + for (const dependency of mergedChunk.dependencies) { + dependencies.add(dependency); + dependency.dependentChunks.delete(mergedChunk); + dependency.dependentChunks.add(bestTargetChunk); + } + for (const dependentChunk of mergedChunk.dependentChunks) { + dependentChunks.add(dependentChunk); + dependentChunk.dependencies.delete(mergedChunk); + dependentChunk.dependencies.add(bestTargetChunk); + } + dependencies.delete(bestTargetChunk); + dependentChunks.delete(bestTargetChunk); + getChunksInPartition(bestTargetChunk, minChunkSize, chunkPartition).add(bestTargetChunk); + } + } +} + function addChunkDependenciesAndAtomsAndGetSideEffectAtoms( chunkLists: ChunkDescription[][], chunkByModule: Map, @@ -670,6 +709,39 @@ function addChunkDependenciesAndAtomsAndGetSideEffectAtoms( return sideEffectAtoms; } +function findBestMergeTarget( + mergedChunk: ChunkDescription, + { big, sideEffectAtoms, sizeByAtom, small }: ChunkPartition, + smallestAdditionalSize: number +): ChunkDescription | null { + let bestTargetChunk: ChunkDescription | null = null; + // In the default case, we do not accept size increases + for (const targetChunk of concatLazy([small, big])) { + if (mergedChunk === targetChunk) continue; + const additionalSizeAfterMerge = getAdditionalSizeAfterMerge( + mergedChunk, + targetChunk, + smallestAdditionalSize, + sideEffectAtoms, + sizeByAtom + ); + if (additionalSizeAfterMerge < smallestAdditionalSize) { + bestTargetChunk = targetChunk; + if (additionalSizeAfterMerge === 0) break; + smallestAdditionalSize = additionalSizeAfterMerge; + } + } + return bestTargetChunk; +} + +function getChunksInPartition( + chunk: ChunkDescription, + minChunkSize: number, + chunkPartition: ChunkPartition +): Set { + return chunk.size < minChunkSize ? chunkPartition.small : chunkPartition.big; +} + function compareChunkSize( { size: sizeA }: ChunkDescription, { size: sizeB }: ChunkDescription @@ -677,73 +749,19 @@ function compareChunkSize( return sizeA - sizeB; } -function mergeChunks(chunkPartition: ChunkPartition, minChunkSize: number) { - const { big, sideEffectAtoms, sizeByAtom, small } = chunkPartition; - for (const mergedChunk of small) { - let bestTargetChunk: ChunkDescription | null = null; - // In the default case, we do not accept size increases - let smallestAdditionalSize = minChunkSize <= 1 ? 1 : Infinity; - const { containedAtoms, correlatedAtoms, modules, pure, size } = mergedChunk; - for (const targetChunk of concatLazy([small, big])) { - if (mergedChunk === targetChunk) continue; - const additionalSizeAfterMerge = getAdditionalSizeAfterMerge( - mergedChunk, - targetChunk, - smallestAdditionalSize, - sideEffectAtoms, - sizeByAtom - ); - if (additionalSizeAfterMerge < smallestAdditionalSize) { - bestTargetChunk = targetChunk; - smallestAdditionalSize = additionalSizeAfterMerge; - } - } - if (bestTargetChunk) { - small.delete(mergedChunk); - getChunksInPartition(bestTargetChunk, minChunkSize, chunkPartition).delete(bestTargetChunk); - bestTargetChunk.modules.push(...modules); - bestTargetChunk.size += size; - bestTargetChunk.pure &&= pure; - const { dependencies, dependentChunks, dependentEntries } = bestTargetChunk; - bestTargetChunk.correlatedAtoms &= correlatedAtoms; - bestTargetChunk.containedAtoms |= containedAtoms; - for (const entry of mergedChunk.dependentEntries) { - dependentEntries.add(entry); - } - for (const dependency of mergedChunk.dependencies) { - dependencies.add(dependency); - dependency.dependentChunks.delete(mergedChunk); - dependency.dependentChunks.add(bestTargetChunk); - } - for (const dependentChunk of mergedChunk.dependentChunks) { - dependentChunks.add(dependentChunk); - dependentChunk.dependencies.delete(mergedChunk); - dependentChunk.dependencies.add(bestTargetChunk); - } - dependencies.delete(bestTargetChunk); - dependentChunks.delete(bestTargetChunk); - getChunksInPartition(bestTargetChunk, minChunkSize, chunkPartition).add(bestTargetChunk); - } - } -} - -// Merging will not produce cycles if none of the direct non-merged dependencies -// of a chunk have the other chunk as a transitive dependency /** * Determine the additional unused code size that would be added by merging the * two chunks. This is not an exact measurement but rather an upper bound. If * the merge produces cycles or adds non-correlated side effects, `Infinity` * is returned. * Merging will not produce cycles if none of the direct non-merged - * dependencies - * of a chunk have the other chunk as a transitive dependency. - * @param currentAdditionalSize The maximum additional unused code size allowed - * to be added by the merge, taking dependencies into account, needs to be - * below this number + * dependencies of a chunk have the other chunk as a transitive dependency. */ function getAdditionalSizeAfterMerge( mergedChunk: ChunkDescription, targetChunk: ChunkDescription, + // The maximum additional unused code size allowed to be added by the merge, + // taking dependencies into account, needs to be below this number currentAdditionalSize: number, sideEffectAtoms: bigint, sizeByAtom: number[] @@ -801,14 +819,6 @@ function getAdditionalSizeIfNoTransitiveDependencyOrNonCorrelatedSideEffect( ); } -function getChunksInPartition( - chunk: ChunkDescription, - minChunkSize: number, - chunkPartition: ChunkPartition -): Set { - return chunk.size < minChunkSize ? chunkPartition.small : chunkPartition.big; -} - function getAtomsSizeIfBelowLimit( atoms: bigint, currentAdditionalSize: number, From 3ac2750b6795fceef624174b63023525891fbd06 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Tue, 16 May 2023 21:30:47 +0200 Subject: [PATCH 13/13] Improve coverage --- src/utils/chunkAssignment.ts | 4 +--- .../avoid-circular-dependencies2/_config.js | 9 +++++++++ .../_expected/amd/generated-main3.js | 19 +++++++++++++++++++ .../_expected/amd/main1.js | 9 +++++++++ .../_expected/amd/main2.js | 8 ++++++++ .../_expected/amd/main3.js | 8 ++++++++ .../_expected/cjs/generated-main3.js | 17 +++++++++++++++++ .../_expected/cjs/main1.js | 9 +++++++++ .../_expected/cjs/main2.js | 8 ++++++++ .../_expected/cjs/main3.js | 8 ++++++++ .../_expected/es/generated-main3.js | 11 +++++++++++ .../_expected/es/main1.js | 1 + .../_expected/es/main2.js | 1 + .../_expected/es/main3.js | 1 + .../_expected/system/generated-main3.js | 18 ++++++++++++++++++ .../_expected/system/main1.js | 13 +++++++++++++ .../_expected/system/main2.js | 13 +++++++++++++ .../_expected/system/main3.js | 13 +++++++++++++ .../avoid-circular-dependencies2/main1.js | 3 +++ .../avoid-circular-dependencies2/main2.js | 2 ++ .../avoid-circular-dependencies2/main3.js | 2 ++ .../avoid-circular-dependencies2/second.js | 1 + .../avoid-circular-dependencies2/shared.js | 2 ++ 23 files changed, 177 insertions(+), 3 deletions(-) create mode 100644 test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_config.js create mode 100644 test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/amd/generated-main3.js create mode 100644 test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/amd/main1.js create mode 100644 test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/amd/main2.js create mode 100644 test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/amd/main3.js create mode 100644 test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/cjs/generated-main3.js create mode 100644 test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/cjs/main1.js create mode 100644 test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/cjs/main2.js create mode 100644 test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/cjs/main3.js create mode 100644 test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/es/generated-main3.js create mode 100644 test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/es/main1.js create mode 100644 test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/es/main2.js create mode 100644 test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/es/main3.js create mode 100644 test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/system/generated-main3.js create mode 100644 test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/system/main1.js create mode 100644 test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/system/main2.js create mode 100644 test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/system/main3.js create mode 100644 test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/main1.js create mode 100644 test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/main2.js create mode 100644 test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/main3.js create mode 100644 test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/second.js create mode 100644 test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/shared.js diff --git a/src/utils/chunkAssignment.ts b/src/utils/chunkAssignment.ts index b8c727cea0c..2a0a250b4d1 100644 --- a/src/utils/chunkAssignment.ts +++ b/src/utils/chunkAssignment.ts @@ -538,9 +538,7 @@ function getOptimizedChunks( chunkPartition.small.size, 'were below minChunkSize.' ); - if (chunkPartition.small.size > 0) { - mergeChunks(chunkPartition, minChunkSize); - } + mergeChunks(chunkPartition, minChunkSize); minChunkSize > 1 && console.log( 'After merging chunks,\n', diff --git a/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_config.js b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_config.js new file mode 100644 index 00000000000..801623fc162 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_config.js @@ -0,0 +1,9 @@ +module.exports = defineTest({ + description: 'avoids circular dependencies when merging chunks', + options: { + input: ['main1.js', 'main2.js', 'main3.js'], + output: { + experimentalMinChunkSize: 100 + } + } +}); diff --git a/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/amd/generated-main3.js b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/amd/generated-main3.js new file mode 100644 index 00000000000..2148994ec8b --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/amd/generated-main3.js @@ -0,0 +1,19 @@ +define(['exports'], (function (exports) { 'use strict'; + + const second = 1; + + const shared = second + 'shared'; + + const main1 = 1; + + const main2 = 2; + + const main3 = 3; + + exports.main1 = main1; + exports.main2 = main2; + exports.main3 = main3; + exports.second = second; + exports.shared = shared; + +})); diff --git a/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/amd/main1.js b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/amd/main1.js new file mode 100644 index 00000000000..0ff6502f831 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/amd/main1.js @@ -0,0 +1,9 @@ +define(['exports', './generated-main3'], (function (exports, main1) { 'use strict'; + + + + exports.main1 = main1.main1; + exports.second = main1.second; + exports.shared = main1.shared; + +})); diff --git a/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/amd/main2.js b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/amd/main2.js new file mode 100644 index 00000000000..9177dce7aed --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/amd/main2.js @@ -0,0 +1,8 @@ +define(['exports', './generated-main3'], (function (exports, main1) { 'use strict'; + + + + exports.main2 = main1.main2; + exports.shared = main1.shared; + +})); diff --git a/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/amd/main3.js b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/amd/main3.js new file mode 100644 index 00000000000..9d8af293e2a --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/amd/main3.js @@ -0,0 +1,8 @@ +define(['exports', './generated-main3'], (function (exports, main1) { 'use strict'; + + + + exports.main3 = main1.main3; + exports.second = main1.second; + +})); diff --git a/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/cjs/generated-main3.js b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/cjs/generated-main3.js new file mode 100644 index 00000000000..e2d0f24ec93 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/cjs/generated-main3.js @@ -0,0 +1,17 @@ +'use strict'; + +const second = 1; + +const shared = second + 'shared'; + +const main1 = 1; + +const main2 = 2; + +const main3 = 3; + +exports.main1 = main1; +exports.main2 = main2; +exports.main3 = main3; +exports.second = second; +exports.shared = shared; diff --git a/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/cjs/main1.js b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/cjs/main1.js new file mode 100644 index 00000000000..65fa3d1d5a4 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/cjs/main1.js @@ -0,0 +1,9 @@ +'use strict'; + +var main1 = require('./generated-main3.js'); + + + +exports.main1 = main1.main1; +exports.second = main1.second; +exports.shared = main1.shared; diff --git a/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/cjs/main2.js b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/cjs/main2.js new file mode 100644 index 00000000000..a41d0d2ccca --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/cjs/main2.js @@ -0,0 +1,8 @@ +'use strict'; + +var main1 = require('./generated-main3.js'); + + + +exports.main2 = main1.main2; +exports.shared = main1.shared; diff --git a/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/cjs/main3.js b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/cjs/main3.js new file mode 100644 index 00000000000..fe715fab704 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/cjs/main3.js @@ -0,0 +1,8 @@ +'use strict'; + +var main1 = require('./generated-main3.js'); + + + +exports.main3 = main1.main3; +exports.second = main1.second; diff --git a/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/es/generated-main3.js b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/es/generated-main3.js new file mode 100644 index 00000000000..228caf6f062 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/es/generated-main3.js @@ -0,0 +1,11 @@ +const second = 1; + +const shared = second + 'shared'; + +const main1 = 1; + +const main2 = 2; + +const main3 = 3; + +export { second as a, main2 as b, main3 as c, main1 as m, shared as s }; diff --git a/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/es/main1.js b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/es/main1.js new file mode 100644 index 00000000000..66f41b186ac --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/es/main1.js @@ -0,0 +1 @@ +export { m as main1, a as second, s as shared } from './generated-main3.js'; diff --git a/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/es/main2.js b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/es/main2.js new file mode 100644 index 00000000000..7f9d022e2bb --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/es/main2.js @@ -0,0 +1 @@ +export { b as main2, s as shared } from './generated-main3.js'; diff --git a/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/es/main3.js b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/es/main3.js new file mode 100644 index 00000000000..2c16e71ba70 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/es/main3.js @@ -0,0 +1 @@ +export { c as main3, a as second } from './generated-main3.js'; diff --git a/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/system/generated-main3.js b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/system/generated-main3.js new file mode 100644 index 00000000000..918b519a561 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/system/generated-main3.js @@ -0,0 +1,18 @@ +System.register([], (function (exports) { + 'use strict'; + return { + execute: (function () { + + const second = exports('a', 1); + + const shared = exports('s', second + 'shared'); + + const main1 = exports('m', 1); + + const main2 = exports('b', 2); + + const main3 = exports('c', 3); + + }) + }; +})); diff --git a/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/system/main1.js b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/system/main1.js new file mode 100644 index 00000000000..2971fd867f7 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/system/main1.js @@ -0,0 +1,13 @@ +System.register(['./generated-main3.js'], (function (exports) { + 'use strict'; + return { + setters: [function (module) { + exports({ main1: module.m, second: module.a, shared: module.s }); + }], + execute: (function () { + + + + }) + }; +})); diff --git a/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/system/main2.js b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/system/main2.js new file mode 100644 index 00000000000..d52b7537c89 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/system/main2.js @@ -0,0 +1,13 @@ +System.register(['./generated-main3.js'], (function (exports) { + 'use strict'; + return { + setters: [function (module) { + exports({ main2: module.b, shared: module.s }); + }], + execute: (function () { + + + + }) + }; +})); diff --git a/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/system/main3.js b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/system/main3.js new file mode 100644 index 00000000000..c70006d41c6 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/system/main3.js @@ -0,0 +1,13 @@ +System.register(['./generated-main3.js'], (function (exports) { + 'use strict'; + return { + setters: [function (module) { + exports({ main3: module.c, second: module.a }); + }], + execute: (function () { + + + + }) + }; +})); diff --git a/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/main1.js b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/main1.js new file mode 100644 index 00000000000..4c1436ba1d8 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/main1.js @@ -0,0 +1,3 @@ +export { shared } from './shared'; +export { second } from './second'; +export const main1 = 1; diff --git a/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/main2.js b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/main2.js new file mode 100644 index 00000000000..7480a1b6abf --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/main2.js @@ -0,0 +1,2 @@ +export { shared } from './shared'; +export const main2 = 2; diff --git a/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/main3.js b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/main3.js new file mode 100644 index 00000000000..f6e676e5b5d --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/main3.js @@ -0,0 +1,2 @@ +export { second } from './second'; +export const main3 = 3; diff --git a/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/second.js b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/second.js new file mode 100644 index 00000000000..aca216a37b9 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/second.js @@ -0,0 +1 @@ +export const second = 1; diff --git a/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/shared.js b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/shared.js new file mode 100644 index 00000000000..0d10caaea19 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/shared.js @@ -0,0 +1,2 @@ +import { second } from './second'; +export const shared = second + 'shared';