@atlaspack/bundler-default 2.14.5-canary.17 → 2.14.5-canary.170

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,375 @@
1
1
  # @atlaspack/bundler-default
2
2
 
3
+ ## 3.3.4
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [[`3cfb7cf`](https://github.com/atlassian-labs/atlaspack/commit/3cfb7cfd90b78a5c48ce717e779ff789769825a3)]:
8
+ - @atlaspack/feature-flags@2.23.2
9
+ - @atlaspack/rust@3.6.2
10
+ - @atlaspack/graph@3.5.16
11
+ - @atlaspack/types-internal@2.19.3
12
+ - @atlaspack/utils@2.18.4
13
+ - @atlaspack/plugin@2.14.27
14
+
15
+ ## 3.3.3
16
+
17
+ ### Patch Changes
18
+
19
+ - [#742](https://github.com/atlassian-labs/atlaspack/pull/742) [`ee040bb`](https://github.com/atlassian-labs/atlaspack/commit/ee040bb6428f29b57d892ddd8107e29077d08ffd) Thanks [@yamadapc](https://github.com/yamadapc)! - Internal changes and bug fixes to environmentDeduplication flag
20
+
21
+ - Updated dependencies [[`ee040bb`](https://github.com/atlassian-labs/atlaspack/commit/ee040bb6428f29b57d892ddd8107e29077d08ffd), [`889c65c`](https://github.com/atlassian-labs/atlaspack/commit/889c65cd25b811045e26a117e7404f694dde77a2)]:
22
+ - @atlaspack/types-internal@2.19.2
23
+ - @atlaspack/feature-flags@2.23.1
24
+ - @atlaspack/diagnostic@2.14.3
25
+ - @atlaspack/plugin@2.14.26
26
+ - @atlaspack/graph@3.5.15
27
+ - @atlaspack/utils@2.18.3
28
+ - @atlaspack/rust@3.6.1
29
+
30
+ ## 3.3.2
31
+
32
+ ### Patch Changes
33
+
34
+ - Updated dependencies [[`f6b3f22`](https://github.com/atlassian-labs/atlaspack/commit/f6b3f2276c7e417580b49c4879563aab51f156b1)]:
35
+ - @atlaspack/feature-flags@2.23.0
36
+ - @atlaspack/graph@3.5.14
37
+ - @atlaspack/types-internal@2.19.1
38
+ - @atlaspack/utils@2.18.2
39
+ - @atlaspack/plugin@2.14.25
40
+
41
+ ## 3.3.1
42
+
43
+ ### Patch Changes
44
+
45
+ - Updated dependencies [[`ad26146`](https://github.com/atlassian-labs/atlaspack/commit/ad26146f13b4c1cc65d4a0f9c67060b90ef14ff3), [`f1b48e7`](https://github.com/atlassian-labs/atlaspack/commit/f1b48e7a04e005cef0f36a3e692087a9ecdb6f7a), [`7f5841c`](https://github.com/atlassian-labs/atlaspack/commit/7f5841c39df049f9546cccbeea2a7337e0337b45), [`73dd7ba`](https://github.com/atlassian-labs/atlaspack/commit/73dd7baab69456ef2f6e4a0cc7dbb04f407eb148)]:
46
+ - @atlaspack/rust@3.6.0
47
+ - @atlaspack/types-internal@2.19.0
48
+ - @atlaspack/feature-flags@2.22.0
49
+ - @atlaspack/utils@2.18.1
50
+ - @atlaspack/graph@3.5.13
51
+ - @atlaspack/plugin@2.14.24
52
+
53
+ ## 3.3.0
54
+
55
+ ### Minor Changes
56
+
57
+ - [#731](https://github.com/atlassian-labs/atlaspack/pull/731) [`23d561e`](https://github.com/atlassian-labs/atlaspack/commit/23d561e51e68b0c38fd1ff4e4fb173e5e7b01cf2) Thanks [@marcins](https://github.com/marcins)! - Implement "inline isolated" scripts
58
+
59
+ ### Patch Changes
60
+
61
+ - Updated dependencies [[`23d561e`](https://github.com/atlassian-labs/atlaspack/commit/23d561e51e68b0c38fd1ff4e4fb173e5e7b01cf2)]:
62
+ - @atlaspack/feature-flags@2.21.0
63
+ - @atlaspack/utils@2.18.0
64
+ - @atlaspack/rust@3.5.0
65
+ - @atlaspack/graph@3.5.12
66
+ - @atlaspack/plugin@2.14.23
67
+
68
+ ## 3.2.1
69
+
70
+ ### Patch Changes
71
+
72
+ - [#720](https://github.com/atlassian-labs/atlaspack/pull/720) [`d2fd849`](https://github.com/atlassian-labs/atlaspack/commit/d2fd849770fe6305e9c694bd97b1bd905abd9d94) Thanks [@alshdavid](https://github.com/alshdavid)! - Migrate to TypeScript
73
+
74
+ - Updated dependencies [[`d2fd849`](https://github.com/atlassian-labs/atlaspack/commit/d2fd849770fe6305e9c694bd97b1bd905abd9d94), [`12bee0e`](https://github.com/atlassian-labs/atlaspack/commit/12bee0e23f0464d7f6bd3e24fbe0d19c126d587d)]:
75
+ - @atlaspack/feature-flags@2.20.1
76
+ - @atlaspack/diagnostic@2.14.2
77
+ - @atlaspack/plugin@2.14.22
78
+ - @atlaspack/graph@3.5.11
79
+ - @atlaspack/utils@2.17.4
80
+ - @atlaspack/rust@3.4.2
81
+
82
+ ## 3.2.0
83
+
84
+ ### Minor Changes
85
+
86
+ - [#721](https://github.com/atlassian-labs/atlaspack/pull/721) [`069de47`](https://github.com/atlassian-labs/atlaspack/commit/069de478e64fb5889f6f2ce023eb510782767fbd) Thanks [@benjervis](https://github.com/benjervis)! - Add support for bundle merging based on `webpackChunkName` comments.
87
+
88
+ Adding a `webpackChunkName` comment to an import will allow the bundler to merge multiple imports into a single bundle.
89
+
90
+ e.g.:
91
+
92
+ ```ts
93
+ import(/* webpackChunkName: "my-chunk" */ './my-module');
94
+ import(/* webpackChunkName: "my-chunk" */ './another-module');
95
+ ```
96
+
97
+ This can be enabled with the feature flag `supportWebpackChunkName`.
98
+
99
+ ### Patch Changes
100
+
101
+ - Updated dependencies [[`069de47`](https://github.com/atlassian-labs/atlaspack/commit/069de478e64fb5889f6f2ce023eb510782767fbd)]:
102
+ - @atlaspack/feature-flags@2.20.0
103
+ - @atlaspack/graph@3.5.10
104
+ - @atlaspack/utils@2.17.3
105
+ - @atlaspack/plugin@2.14.21
106
+
107
+ ## 3.1.2
108
+
109
+ ### Patch Changes
110
+
111
+ - [#702](https://github.com/atlassian-labs/atlaspack/pull/702) [`daaa768`](https://github.com/atlassian-labs/atlaspack/commit/daaa7688786772d7e3713b71c5bba6b89ec704aa) Thanks [@alshdavid](https://github.com/alshdavid)! - Fixes to Flow types
112
+
113
+ - Updated dependencies [[`daaa768`](https://github.com/atlassian-labs/atlaspack/commit/daaa7688786772d7e3713b71c5bba6b89ec704aa), [`1c7865a`](https://github.com/atlassian-labs/atlaspack/commit/1c7865a64451116d94015e248302435839d347c0), [`a0b959f`](https://github.com/atlassian-labs/atlaspack/commit/a0b959fbf61fc3f820ff03c7e8988945fe40a91a)]:
114
+ - @atlaspack/plugin@2.14.20
115
+ - @atlaspack/feature-flags@2.19.2
116
+ - @atlaspack/graph@3.5.9
117
+ - @atlaspack/utils@2.17.2
118
+
119
+ ## 3.1.1
120
+
121
+ ### Patch Changes
122
+
123
+ - Updated dependencies [[`13aef17`](https://github.com/atlassian-labs/atlaspack/commit/13aef177eea289a6e40d2113b5ec1ac9be18a33d)]:
124
+ - @atlaspack/feature-flags@2.19.1
125
+ - @atlaspack/graph@3.5.8
126
+ - @atlaspack/utils@2.17.1
127
+ - @atlaspack/plugin@2.14.19
128
+
129
+ ## 3.1.0
130
+
131
+ ### Minor Changes
132
+
133
+ - [#640](https://github.com/atlassian-labs/atlaspack/pull/640) [`dbb4072`](https://github.com/atlassian-labs/atlaspack/commit/dbb40721ebeb45990a14ba04e6b44e7f836fb32d) Thanks [@JakeLane](https://github.com/JakeLane)! - Clean up conditional bundling feature flags
134
+
135
+ ### Patch Changes
136
+
137
+ - Updated dependencies [[`dbb4072`](https://github.com/atlassian-labs/atlaspack/commit/dbb40721ebeb45990a14ba04e6b44e7f836fb32d), [`becf977`](https://github.com/atlassian-labs/atlaspack/commit/becf977f625d5ee46dae3d4c679f173bf5f40cc0), [`becf977`](https://github.com/atlassian-labs/atlaspack/commit/becf977f625d5ee46dae3d4c679f173bf5f40cc0), [`c4415a4`](https://github.com/atlassian-labs/atlaspack/commit/c4415a455543d984ca28452c2cb87a794d22497c), [`f0f7c71`](https://github.com/atlassian-labs/atlaspack/commit/f0f7c7168a1d3d18c6f30d2daed611275692b7c5), [`de23e0c`](https://github.com/atlassian-labs/atlaspack/commit/de23e0ce49d5504fe3947ac26640a3d951087da3), [`18a57cf`](https://github.com/atlassian-labs/atlaspack/commit/18a57cf8a4789b2de5ad8e2676f317a26cc91417), [`a5ed1b4`](https://github.com/atlassian-labs/atlaspack/commit/a5ed1b414498560f393ff491af4da25b6e8dde56)]:
138
+ - @atlaspack/feature-flags@2.19.0
139
+ - @atlaspack/utils@2.17.0
140
+ - @atlaspack/rust@3.4.1
141
+ - @atlaspack/graph@3.5.7
142
+ - @atlaspack/plugin@2.14.18
143
+
144
+ ## 3.0.8
145
+
146
+ ### Patch Changes
147
+
148
+ - Updated dependencies [[`c75bf55`](https://github.com/atlassian-labs/atlaspack/commit/c75bf553fff4decc285b5fd499a275853b18f8f2)]:
149
+ - @atlaspack/rust@3.4.0
150
+ - @atlaspack/utils@2.16.1
151
+ - @atlaspack/plugin@2.14.17
152
+
153
+ ## 3.0.7
154
+
155
+ ### Patch Changes
156
+
157
+ - Updated dependencies [[`e8a60ff`](https://github.com/atlassian-labs/atlaspack/commit/e8a60ffbea41caef265786bbf73349771760081c), [`30ee2cf`](https://github.com/atlassian-labs/atlaspack/commit/30ee2cfcd34cf2646ded0eda13fdb80a2a5de529)]:
158
+ - @atlaspack/feature-flags@2.18.4
159
+ - @atlaspack/utils@2.16.0
160
+ - @atlaspack/graph@3.5.6
161
+ - @atlaspack/plugin@2.14.16
162
+
163
+ ## 3.0.6
164
+
165
+ ### Patch Changes
166
+
167
+ - Updated dependencies [[`5ded263`](https://github.com/atlassian-labs/atlaspack/commit/5ded263c7f11b866e8885b81c73e20dd060b25be)]:
168
+ - @atlaspack/feature-flags@2.18.3
169
+ - @atlaspack/graph@3.5.5
170
+ - @atlaspack/utils@2.15.3
171
+ - @atlaspack/plugin@2.14.15
172
+
173
+ ## 3.0.5
174
+
175
+ ### Patch Changes
176
+
177
+ - Updated dependencies [[`644b157`](https://github.com/atlassian-labs/atlaspack/commit/644b157dee72a871acc2d0facf0b87b8eea51956)]:
178
+ - @atlaspack/feature-flags@2.18.2
179
+ - @atlaspack/graph@3.5.4
180
+ - @atlaspack/utils@2.15.2
181
+ - @atlaspack/plugin@2.14.14
182
+
183
+ ## 3.0.4
184
+
185
+ ### Patch Changes
186
+
187
+ - Updated dependencies [[`26aa9c5`](https://github.com/atlassian-labs/atlaspack/commit/26aa9c599d2be45ce1438a74c5fa22f39b9b554b), [`0501255`](https://github.com/atlassian-labs/atlaspack/commit/05012550da35b05ce7d356a8cc29311e7f9afdca)]:
188
+ - @atlaspack/feature-flags@2.18.1
189
+ - @atlaspack/utils@2.15.1
190
+ - @atlaspack/graph@3.5.3
191
+ - @atlaspack/plugin@2.14.13
192
+
193
+ ## 3.0.3
194
+
195
+ ### Patch Changes
196
+
197
+ - [#622](https://github.com/atlassian-labs/atlaspack/pull/622) [`e39c6cf`](https://github.com/atlassian-labs/atlaspack/commit/e39c6cf05f7e95ce5420dbcea66f401b1cbd397c) Thanks [@benjervis](https://github.com/benjervis)! - Change the overlap calculation system in findMergeCandidates to improve performance
198
+
199
+ - Updated dependencies [[`10fbcfb`](https://github.com/atlassian-labs/atlaspack/commit/10fbcfbfa49c7a83da5d7c40983e36e87f524a75), [`85c52d3`](https://github.com/atlassian-labs/atlaspack/commit/85c52d3f7717b3c84a118d18ab98cfbfd71dcbd2), [`e39c6cf`](https://github.com/atlassian-labs/atlaspack/commit/e39c6cf05f7e95ce5420dbcea66f401b1cbd397c)]:
200
+ - @atlaspack/feature-flags@2.18.0
201
+ - @atlaspack/utils@2.15.0
202
+ - @atlaspack/graph@3.5.2
203
+ - @atlaspack/plugin@2.14.12
204
+
205
+ ## 3.0.2
206
+
207
+ ### Patch Changes
208
+
209
+ - [#613](https://github.com/atlassian-labs/atlaspack/pull/613) [`4ca19d8`](https://github.com/atlassian-labs/atlaspack/commit/4ca19d8060dfcd279183e4039f2ecb43334ac44c) Thanks [@marcins](https://github.com/marcins)! - Ensure that constant modules are correctly included in MSBs even if they wouldn't otherwise be.
210
+
211
+ - Updated dependencies [[`73ea3c4`](https://github.com/atlassian-labs/atlaspack/commit/73ea3c4d85d4401fdd15abcbf988237e890e7ad3), [`b1b3693`](https://github.com/atlassian-labs/atlaspack/commit/b1b369317c66f8a431c170df2ebba4fa5b2e38ef)]:
212
+ - @atlaspack/feature-flags@2.17.0
213
+ - @atlaspack/graph@3.5.1
214
+ - @atlaspack/utils@2.14.11
215
+ - @atlaspack/plugin@2.14.11
216
+
217
+ ## 3.0.1
218
+
219
+ ### Patch Changes
220
+
221
+ - [#608](https://github.com/atlassian-labs/atlaspack/pull/608) [`471b99e`](https://github.com/atlassian-labs/atlaspack/commit/471b99e41b4d97328c88f65e90bea284372cb1b0) Thanks [@mattcompiles](https://github.com/mattcompiles)! - Fix require of ES Module error
222
+
223
+ ## 3.0.0
224
+
225
+ ### Major Changes
226
+
227
+ - [#600](https://github.com/atlassian-labs/atlaspack/pull/600) [`1b52b99`](https://github.com/atlassian-labs/atlaspack/commit/1b52b99db4298b04c1a6eb0f97994d75a2d436f9) Thanks [@mattcompiles](https://github.com/mattcompiles)! - ### Breaking change
228
+
229
+ This new config replaces the previously released `sharedBundleMergeThreshold`.
230
+
231
+ The following options are available for each merge group.
232
+
233
+ ### Options
234
+
235
+ #### overlapThreshold
236
+
237
+ > The same as `sharedBundleMergeThreshold` from #535
238
+
239
+ Merge bundles share a percentage of source bundles
240
+
241
+ ```json
242
+ "@atlaspack/bundler-default": {
243
+ "sharedBundleMerge": [{
244
+ "overlapThreshold": 0.75
245
+ }]
246
+ }
247
+ ```
248
+
249
+ #### maxBundleSize
250
+
251
+ Merge bundles that are smaller than a configured amount of bytes.
252
+
253
+ > Keep in mind these bytes are pre-optimisation
254
+
255
+ ```json
256
+ "@atlaspack/bundler-default": {
257
+ "sharedBundleMerge": [{
258
+ "maxBundleSize": 20000
259
+ }]
260
+ }
261
+ ```
262
+
263
+ #### sourceBundles
264
+
265
+ Merge bundles that share a set of source bundles. The matching is relative to the project root, like how manual shared bundle roots work.
266
+
267
+ ```json
268
+ "@atlaspack/bundler-default": {
269
+ "sharedBundleMerge": [{
270
+ "sourceBundles": ["src/important-route", "src/important-route-2"]
271
+ }]
272
+ }
273
+ ```
274
+
275
+ #### minBundlesInGroup
276
+
277
+ Merge bundles that belong to a bundle group that's larger than a set amount. This is useful for targetting bundles that would be deleted by the `maxParallelRequests` option.
278
+
279
+ ```json
280
+ "@atlaspack/bundler-default": {
281
+ "maxParallelRequests": 30,
282
+ "sharedBundleMerge": [{
283
+ "minBundlesInGroup": 30
284
+ }]
285
+ }
286
+ ```
287
+
288
+ ## Combining options
289
+
290
+ When multiple options are provided, all must be true for a merge to be relevant.
291
+
292
+ For example, merge bundles that are smaller than 20kb and share at least 50% of the same source bundles.
293
+
294
+ ```json
295
+ "@atlaspack/bundler-default": {
296
+ "sharedBundleMerge": [{
297
+ "overlapThreshold": 0.5,
298
+ "maxBundleSize": 20000
299
+ }]
300
+ }
301
+ ```
302
+
303
+ ## Multiple merges
304
+
305
+ You can also have multiple merge configs.
306
+
307
+ ```json
308
+ "@atlaspack/bundler-default": {
309
+ "sharedBundleMerge": [
310
+ {
311
+ "overlapThreshold": 0.75,
312
+ "maxBundleSize": 20000
313
+ },
314
+ {
315
+ "minBundlesInGroup": 30
316
+ "sourceBundles": ["src/important-route", "src/important-route-2"]
317
+ }
318
+ ]
319
+ }
320
+ ```
321
+
322
+ ### Patch Changes
323
+
324
+ - Updated dependencies [[`1b52b99`](https://github.com/atlassian-labs/atlaspack/commit/1b52b99db4298b04c1a6eb0f97994d75a2d436f9)]:
325
+ - @atlaspack/graph@3.5.0
326
+
327
+ ## 2.16.3
328
+
329
+ ### Patch Changes
330
+
331
+ - Updated dependencies [[`35fdd4b`](https://github.com/atlassian-labs/atlaspack/commit/35fdd4b52da0af20f74667f7b8adfb2f90279b7c), [`6dd4ccb`](https://github.com/atlassian-labs/atlaspack/commit/6dd4ccb753541de32322d881f973d571dd57e4ca)]:
332
+ - @atlaspack/rust@3.3.5
333
+ - @atlaspack/plugin@2.14.10
334
+ - @atlaspack/utils@2.14.10
335
+
336
+ ## 2.16.2
337
+
338
+ ### Patch Changes
339
+
340
+ - Updated dependencies [[`124b7ff`](https://github.com/atlassian-labs/atlaspack/commit/124b7fff44f71aac9fbad289a9a9509b3dfc9aaa), [`e052521`](https://github.com/atlassian-labs/atlaspack/commit/e0525210850ed1606146eb86991049cf567c5dec), [`15c6d70`](https://github.com/atlassian-labs/atlaspack/commit/15c6d7000bd89da876bc590aa75b17a619a41896), [`e4d966c`](https://github.com/atlassian-labs/atlaspack/commit/e4d966c3c9c4292c5013372ae65b10d19d4bacc6), [`209692f`](https://github.com/atlassian-labs/atlaspack/commit/209692ffb11eae103a0d65c5e1118a5aa1625818), [`42a775d`](https://github.com/atlassian-labs/atlaspack/commit/42a775de8eec638ad188f3271964170d8c04d84b), [`29c2f10`](https://github.com/atlassian-labs/atlaspack/commit/29c2f106de9679adfb5afa04e1910471dc65a427), [`f4da1e1`](https://github.com/atlassian-labs/atlaspack/commit/f4da1e120e73eeb5e8b8927f05e88f04d6148c7b), [`1ef91fc`](https://github.com/atlassian-labs/atlaspack/commit/1ef91fcc863fdd2831511937083dbbc1263b3d9d)]:
341
+ - @atlaspack/rust@3.3.4
342
+ - @atlaspack/feature-flags@2.16.0
343
+ - @atlaspack/utils@2.14.9
344
+ - @atlaspack/graph@3.4.7
345
+ - @atlaspack/plugin@2.14.9
346
+
347
+ ## 2.16.1
348
+
349
+ ### Patch Changes
350
+
351
+ - Updated dependencies [[`30f6017`](https://github.com/atlassian-labs/atlaspack/commit/30f60175ba4d272c5fc193973c63bc298584775b), [`1ab0a27`](https://github.com/atlassian-labs/atlaspack/commit/1ab0a275aeca40350415e2b03e7440d1dddc6228), [`b8a4ae8`](https://github.com/atlassian-labs/atlaspack/commit/b8a4ae8f83dc0a83d8b145c5f729936ce52080a3)]:
352
+ - @atlaspack/feature-flags@2.15.1
353
+ - @atlaspack/rust@3.3.3
354
+ - @atlaspack/graph@3.4.6
355
+ - @atlaspack/utils@2.14.8
356
+ - @atlaspack/plugin@2.14.8
357
+
358
+ ## 2.16.0
359
+
360
+ ### Minor Changes
361
+
362
+ - [#547](https://github.com/atlassian-labs/atlaspack/pull/547) [`a1773d2`](https://github.com/atlassian-labs/atlaspack/commit/a1773d2a62d0ef7805ac7524621dcabcc1afe929) Thanks [@benjervis](https://github.com/benjervis)! - Add a feature flag for resolving the configuration for `@atlaspack/bundler-default` from CWD, rather than exclusively from the project root.
363
+
364
+ ### Patch Changes
365
+
366
+ - Updated dependencies [[`a1773d2`](https://github.com/atlassian-labs/atlaspack/commit/a1773d2a62d0ef7805ac7524621dcabcc1afe929), [`556d6ab`](https://github.com/atlassian-labs/atlaspack/commit/556d6ab8ede759fa7f37fcd3f4da336ef1c55e8f)]:
367
+ - @atlaspack/feature-flags@2.15.0
368
+ - @atlaspack/rust@3.3.2
369
+ - @atlaspack/graph@3.4.5
370
+ - @atlaspack/utils@2.14.7
371
+ - @atlaspack/plugin@2.14.7
372
+
3
373
  ## 2.15.1
4
374
 
5
375
  ### Patch Changes
@@ -59,6 +59,7 @@ var _default = exports.default = new (_plugin().Bundler)({
59
59
  logger
60
60
  }) {
61
61
  let targetMap = getEntryByTarget(bundleGraph); // Organize entries by target output folder/ distDir
62
+ // @ts-expect-error TS2304
62
63
  let graphs = [];
63
64
  for (let entries of targetMap.values()) {
64
65
  let singleFileEntries = new Map();
@@ -94,7 +95,11 @@ function getEntryByTarget(bundleGraph) {
94
95
  // Find entries from assetGraph per target
95
96
  let targets = new (_utils().DefaultMap)(() => new Map());
96
97
  bundleGraph.traverse({
97
- enter(node, context, actions) {
98
+ enter(
99
+ // @ts-expect-error TS2304
100
+ node, context,
101
+ // @ts-expect-error TS2304
102
+ actions) {
98
103
  if (node.type !== 'asset') {
99
104
  return node;
100
105
  }
@@ -38,8 +38,8 @@ function addJSMonolithBundle(bundleGraph, entryAsset, entryDep) {
38
38
  }
39
39
  let assets = bundleGraph.getDependencyAssets(dependency);
40
40
  for (const asset of assets) {
41
- if (asset.bundleBehavior === 'isolated') {
42
- throw new Error('Isolated assets are not supported for single file output builds');
41
+ if (asset.bundleBehavior === 'isolated' || asset.bundleBehavior === 'inlineIsolated') {
42
+ throw new Error(`${asset.bundleBehavior === 'isolated' ? 'Isolated' : 'Inline isolated'} assets are not supported for single file output builds`);
43
43
  }
44
44
 
45
45
  // For assets marked as inline, we create new bundles and let other
@@ -25,67 +25,136 @@ function _graph() {
25
25
  };
26
26
  return data;
27
27
  }
28
+ function _utils() {
29
+ const data = require("@atlaspack/utils");
30
+ _utils = function () {
31
+ return data;
32
+ };
33
+ return data;
34
+ }
35
+ var _memoize = require("./memoize");
28
36
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
37
+ function getBundlesForBundleGroup(bundleGraph, bundleGroupId) {
38
+ let count = 0;
39
+ bundleGraph.traverse(nodeId => {
40
+ const node = bundleGraph.getNode(nodeId);
41
+ if (node && (node === 'root' || node.bundleBehavior !== 'inline' && node.bundleBehavior !== 'inlineIsolated')) {
42
+ count++;
43
+ }
44
+ }, bundleGroupId);
45
+ return count;
46
+ }
47
+ let getBundleOverlap = (sourceBundlesA, sourceBundlesB) => {
48
+ let allSourceBundles = (0, _utils().setUnion)(sourceBundlesA, sourceBundlesB);
49
+ let sharedSourceBundles = (0, _utils().setIntersectStatic)(sourceBundlesA, sourceBundlesB);
50
+ return sharedSourceBundles.size / allSourceBundles.size;
51
+ };
52
+
29
53
  // Returns a decimal showing the proportion source bundles are common to
30
54
  // both bundles versus the total number of source bundles.
31
- function scoreBundleMerge(bundleA, bundleB) {
32
- let sharedSourceBundles = 0;
33
- let allSourceBundles = new Set([...bundleA.sourceBundles, ...bundleB.sourceBundles]);
34
- for (let bundle of bundleB.sourceBundles) {
35
- if (bundleA.sourceBundles.has(bundle)) {
36
- sharedSourceBundles++;
55
+ function checkBundleThreshold(bundleA, bundleB, threshold) {
56
+ return getBundleOverlap(bundleA.bundle.sourceBundles, bundleB.bundle.sourceBundles) >= threshold;
57
+ }
58
+ let checkSharedSourceBundles = (0, _memoize.memoize)((bundle, importantAncestorBundles) => {
59
+ return importantAncestorBundles.every(ancestorId => bundle.sourceBundles.has(ancestorId));
60
+ });
61
+ let hasSuitableBundleGroup = (0, _memoize.memoize)((bundleGraph, bundle, minBundlesInGroup) => {
62
+ for (let sourceBundle of bundle.sourceBundles) {
63
+ let bundlesInGroup = getBundlesForBundleGroup(bundleGraph, sourceBundle);
64
+ if (bundlesInGroup >= minBundlesInGroup) {
65
+ return true;
66
+ }
67
+ }
68
+ return false;
69
+ });
70
+ function validMerge(bundleGraph, config, bundleA, bundleB) {
71
+ if (config.maxBundleSize != null) {
72
+ if (bundleA.bundle.size > config.maxBundleSize || bundleB.bundle.size > config.maxBundleSize) {
73
+ return false;
74
+ }
75
+ }
76
+ if (config.overlapThreshold != null) {
77
+ if (!checkBundleThreshold(bundleA, bundleB, config.overlapThreshold)) {
78
+ return false;
79
+ }
80
+ }
81
+ if (config.sourceBundles != null) {
82
+ if (!checkSharedSourceBundles(bundleA.bundle, config.sourceBundles) || !checkSharedSourceBundles(bundleB.bundle, config.sourceBundles)) {
83
+ return false;
84
+ }
85
+ }
86
+ if (config.minBundlesInGroup != null) {
87
+ if (!hasSuitableBundleGroup(bundleGraph, bundleA.bundle, config.minBundlesInGroup) || !hasSuitableBundleGroup(bundleGraph, bundleB.bundle, config.minBundlesInGroup)) {
88
+ return false;
37
89
  }
38
90
  }
39
- return sharedSourceBundles / allSourceBundles.size;
91
+ return true;
40
92
  }
41
93
  function getMergeClusters(graph, candidates) {
42
94
  let clusters = [];
43
- for (let candidate of candidates) {
95
+ for (let [candidate, edgeType] of candidates.entries()) {
44
96
  let cluster = [];
45
97
  graph.traverse(nodeId => {
46
98
  cluster.push((0, _nullthrows().default)(graph.getNode(nodeId)));
47
99
  // Remove node from candidates as it has already been processed
48
100
  candidates.delete(nodeId);
49
- }, candidate);
101
+ }, candidate, edgeType);
50
102
  clusters.push(cluster);
51
103
  }
52
104
  return clusters;
53
105
  }
54
- function findMergeCandidates(bundleGraph, bundles, threshold) {
106
+ function getPossibleMergeCandidates(bundleGraph, bundles) {
107
+ let mergeCandidates = bundles.map(bundleId => {
108
+ let bundle = bundleGraph.getNode(bundleId);
109
+ (0, _assert().default)(bundle && bundle !== 'root', 'Bundle should exist');
110
+ return {
111
+ id: bundleId,
112
+ bundle,
113
+ contentKey: bundleId.toString()
114
+ };
115
+ });
116
+ const uniquePairs = [];
117
+ for (let i = 0; i < mergeCandidates.length; i++) {
118
+ for (let j = i + 1; j < mergeCandidates.length; j++) {
119
+ let a = mergeCandidates[i];
120
+ let b = mergeCandidates[j];
121
+
122
+ // @ts-expect-error TS18048
123
+ if (a.bundle.internalizedAssets.equals(b.bundle.internalizedAssets)) {
124
+ uniquePairs.push([a, b]);
125
+ }
126
+ }
127
+ }
128
+ return uniquePairs;
129
+ }
130
+ function findMergeCandidates(bundleGraph, bundles, config) {
55
131
  let graph = new (_graph().ContentGraph)();
56
- let seen = new Set();
57
- let candidates = new Set();
132
+ let candidates = new Map();
133
+ let allPossibleMergeCandidates = getPossibleMergeCandidates(bundleGraph, bundles);
58
134
 
59
135
  // Build graph of clustered merge candidates
60
- for (let bundleId of bundles) {
61
- let bundle = bundleGraph.getNode(bundleId);
62
- (0, _assert().default)(bundle && bundle !== 'root');
63
- if (bundle.type !== 'js') {
64
- continue;
65
- }
66
- for (let otherBundleId of bundles) {
67
- if (bundleId === otherBundleId) {
136
+ for (let i = 0; i < config.length; i++) {
137
+ // Ensure edge type coresponds to config index
138
+ let edgeType = i + 1;
139
+ for (let group of allPossibleMergeCandidates) {
140
+ let candidateA = group[0];
141
+ let candidateB = group[1];
142
+ if (!validMerge(bundleGraph, config[i], candidateA, candidateB)) {
68
143
  continue;
69
144
  }
70
- let key = [bundleId, otherBundleId].sort().join(':');
71
- if (seen.has(key)) {
72
- continue;
73
- }
74
- seen.add(key);
75
- let otherBundle = bundleGraph.getNode(otherBundleId);
76
- (0, _assert().default)(otherBundle && otherBundle !== 'root');
77
- let score = scoreBundleMerge(bundle, otherBundle);
78
- if (score >= threshold) {
79
- let bundleNode = graph.addNodeByContentKeyIfNeeded(bundleId.toString(), bundleId);
80
- let otherBundleNode = graph.addNodeByContentKeyIfNeeded(otherBundleId.toString(), otherBundleId);
145
+ let bundleNode = graph.addNodeByContentKeyIfNeeded(candidateA.contentKey, candidateA.id);
146
+ let otherBundleNode = graph.addNodeByContentKeyIfNeeded(candidateB.contentKey, candidateB.id);
81
147
 
82
- // Add edge in both directions
83
- graph.addEdge(bundleNode, otherBundleNode);
84
- graph.addEdge(otherBundleNode, bundleNode);
85
- candidates.add(bundleNode);
86
- candidates.add(otherBundleNode);
87
- }
148
+ // Add edge in both directions
149
+ graph.addEdge(bundleNode, otherBundleNode, edgeType);
150
+ graph.addEdge(otherBundleNode, bundleNode, edgeType);
151
+ candidates.set(bundleNode, edgeType);
152
+ candidates.set(otherBundleNode, edgeType);
88
153
  }
154
+
155
+ // Remove bundles that have been allocated to a higher priority merge
156
+ allPossibleMergeCandidates = allPossibleMergeCandidates.filter(group => !graph.hasContentKey(group[0].contentKey) && !graph.hasContentKey(group[1].contentKey));
89
157
  }
158
+ (0, _memoize.clearCaches)();
90
159
  return getMergeClusters(graph, candidates);
91
160
  }
@@ -39,14 +39,13 @@ function resolveModeConfig(config, mode) {
39
39
  for (const key of Object.keys(config)) {
40
40
  if (key === 'development' || key === 'production') {
41
41
  if (key === mode) {
42
+ // @ts-expect-error TS2322
42
43
  modeConfig = config[key];
43
44
  }
44
45
  } else {
45
46
  generalConfig[key] = config[key];
46
47
  }
47
48
  }
48
-
49
- // $FlowFixMe Not sure how to convince flow here...
50
49
  return {
51
50
  ...generalConfig,
52
51
  ...modeConfig
@@ -61,7 +60,7 @@ const HTTP_OPTIONS = {
61
60
  minBundleSize: 30000,
62
61
  maxParallelRequests: 6,
63
62
  disableSharedBundles: false,
64
- sharedBundleMergeThreshold: 1
63
+ sharedBundleMerge: []
65
64
  },
66
65
  '2': {
67
66
  minBundles: 1,
@@ -69,7 +68,7 @@ const HTTP_OPTIONS = {
69
68
  minBundleSize: 20000,
70
69
  maxParallelRequests: 25,
71
70
  disableSharedBundles: false,
72
- sharedBundleMergeThreshold: 1
71
+ sharedBundleMerge: []
73
72
  }
74
73
  };
75
74
  const CONFIG_SCHEMA = {
@@ -110,6 +109,30 @@ const CONFIG_SCHEMA = {
110
109
  additionalProperties: false
111
110
  }
112
111
  },
112
+ sharedBundleMerge: {
113
+ type: 'array',
114
+ items: {
115
+ type: 'object',
116
+ properties: {
117
+ overlapThreshold: {
118
+ type: 'number'
119
+ },
120
+ maxBundleSize: {
121
+ type: 'number'
122
+ },
123
+ sourceBundles: {
124
+ type: 'array',
125
+ items: {
126
+ type: 'string'
127
+ }
128
+ },
129
+ minBundlesInGroup: {
130
+ type: 'number'
131
+ }
132
+ },
133
+ additionalProperties: false
134
+ }
135
+ },
113
136
  minBundles: {
114
137
  type: 'number'
115
138
  },
@@ -148,6 +171,7 @@ async function loadBundlerConfig(config, options, logger) {
148
171
  ...HTTP_OPTIONS['2'],
149
172
  projectRoot: options.projectRoot
150
173
  };
174
+ // @ts-expect-error TS2322
151
175
  return modDefault;
152
176
  }
153
177
  (0, _assert().default)(((_conf = conf) === null || _conf === void 0 ? void 0 : _conf.contents) != null);
@@ -188,11 +212,12 @@ async function loadBundlerConfig(config, options, logger) {
188
212
  prependKey: `/${(0, _diagnostic().encodeJSONKeyComponent)('@atlaspack/bundler-default')}`
189
213
  }, '@atlaspack/bundler-default', 'Invalid config for @atlaspack/bundler-default');
190
214
  let http = modeConfig.http ?? 2;
215
+ // @ts-expect-error TS7053
191
216
  let defaults = HTTP_OPTIONS[http];
192
217
  return {
193
218
  minBundles: modeConfig.minBundles ?? defaults.minBundles,
194
219
  minBundleSize: modeConfig.minBundleSize ?? defaults.minBundleSize,
195
- sharedBundleMergeThreshold: modeConfig.sharedBundleMergeThreshold ?? defaults.sharedBundleMergeThreshold,
220
+ sharedBundleMerge: modeConfig.sharedBundleMerge ?? defaults.sharedBundleMerge,
196
221
  maxParallelRequests: modeConfig.maxParallelRequests ?? defaults.maxParallelRequests,
197
222
  projectRoot: options.projectRoot,
198
223
  disableSharedBundles: modeConfig.disableSharedBundles ?? defaults.disableSharedBundles,