@atlaspack/bundler-default 3.2.1 → 3.3.0

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,20 @@
1
1
  # @atlaspack/bundler-default
2
2
 
3
+ ## 3.3.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#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
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies [[`23d561e`](https://github.com/atlassian-labs/atlaspack/commit/23d561e51e68b0c38fd1ff4e4fb173e5e7b01cf2)]:
12
+ - @atlaspack/feature-flags@2.21.0
13
+ - @atlaspack/utils@2.18.0
14
+ - @atlaspack/rust@3.5.0
15
+ - @atlaspack/graph@3.5.12
16
+ - @atlaspack/plugin@2.14.23
17
+
3
18
  ## 3.2.1
4
19
 
5
20
  ### Patch Changes
@@ -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
@@ -37,9 +37,8 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
37
37
  function getBundlesForBundleGroup(bundleGraph, bundleGroupId) {
38
38
  let count = 0;
39
39
  bundleGraph.traverse(nodeId => {
40
- var _bundleGraph$getNode;
41
- // @ts-expect-error TS2339
42
- if (((_bundleGraph$getNode = bundleGraph.getNode(nodeId)) === null || _bundleGraph$getNode === void 0 ? void 0 : _bundleGraph$getNode.bundleBehavior) !== 'inline') {
40
+ const node = bundleGraph.getNode(nodeId);
41
+ if (node && (node === 'root' || node.bundleBehavior !== 'inline' && node.bundleBehavior !== 'inlineIsolated')) {
43
42
  count++;
44
43
  }
45
44
  }, bundleGroupId);
package/lib/idealGraph.js CHANGED
@@ -250,15 +250,16 @@ function createIdealGraph(assetGraph, config, entries, logger) {
250
250
  manualSharedBundleKey != null && manualSharedMap.has(manualSharedBundleKey)) {
251
251
  bundleId = (0, _nullthrows().default)(manualSharedMap.get(manualSharedBundleKey));
252
252
  }
253
- if (dependency.priority === 'lazy' || (0, _featureFlags().getFeatureFlag)('conditionalBundlingApi') && node.value.priority === 'conditional' || childAsset.bundleBehavior === 'isolated' // An isolated Dependency, or Bundle must contain all assets it needs to load.
254
- ) {
253
+ if (dependency.priority === 'lazy' || (0, _featureFlags().getFeatureFlag)('conditionalBundlingApi') && node.value.priority === 'conditional' || childAsset.bundleBehavior === 'isolated' ||
254
+ // An isolated Dependency, or Bundle must contain all assets it needs to load.
255
+ childAsset.bundleBehavior === 'inlineIsolated') {
255
256
  if (bundleId == null) {
256
257
  let firstBundleGroup = (0, _nullthrows().default)(bundleGraph.getNode(stack[0][1]));
257
258
  (0, _assert().default)(firstBundleGroup !== 'root');
258
259
  bundle = createBundle({
259
260
  asset: childAsset,
260
261
  bundleBehavior: dependency.bundleBehavior ?? childAsset.bundleBehavior,
261
- needsStableName: dependency.bundleBehavior === 'inline' || childAsset.bundleBehavior === 'inline' ? false : dependency.isEntry || dependency.needsStableName,
262
+ needsStableName: dependency.bundleBehavior === 'inline' || childAsset.bundleBehavior === 'inline' || dependency.bundleBehavior === 'inlineIsolated' || childAsset.bundleBehavior === 'inlineIsolated' ? false : dependency.isEntry || dependency.needsStableName,
262
263
  target: firstBundleGroup.target
263
264
  });
264
265
  bundleId = bundleGraph.addNode(bundle);
@@ -282,7 +283,7 @@ function createIdealGraph(assetGraph, config, entries, logger) {
282
283
  if (
283
284
  // If this dependency requests isolated, but the bundle is not,
284
285
  // make the bundle isolated for all uses.
285
- dependency.bundleBehavior === 'isolated' && bundle.bundleBehavior == null) {
286
+ (dependency.bundleBehavior === 'isolated' || dependency.bundleBehavior === 'inlineIsolated') && bundle.bundleBehavior == null) {
286
287
  bundle.bundleBehavior = dependency.bundleBehavior;
287
288
  }
288
289
  }
@@ -323,7 +324,7 @@ function createIdealGraph(assetGraph, config, entries, logger) {
323
324
  env: childAsset.env,
324
325
  bundleBehavior: dependency.bundleBehavior ?? childAsset.bundleBehavior,
325
326
  target: referencingBundle.target,
326
- needsStableName: childAsset.bundleBehavior === 'inline' || dependency.bundleBehavior === 'inline' || dependency.priority === 'parallel' && !dependency.needsStableName ? false : referencingBundle.needsStableName
327
+ needsStableName: childAsset.bundleBehavior === 'inline' || dependency.bundleBehavior === 'inline' || dependency.bundleBehavior === 'inlineIsolated' || dependency.priority === 'parallel' && !dependency.needsStableName ? false : referencingBundle.needsStableName
327
328
  });
328
329
  bundleId = bundleGraph.addNode(bundle);
329
330
  } else {
@@ -332,7 +333,7 @@ function createIdealGraph(assetGraph, config, entries, logger) {
332
333
  if (
333
334
  // If this dependency requests isolated, but the bundle is not,
334
335
  // make the bundle isolated for all uses.
335
- dependency.bundleBehavior === 'isolated' && bundle.bundleBehavior == null) {
336
+ (dependency.bundleBehavior === 'isolated' || dependency.bundleBehavior === 'inlineIsolated') && bundle.bundleBehavior == null) {
336
337
  bundle.bundleBehavior = dependency.bundleBehavior;
337
338
  }
338
339
  }
@@ -522,7 +523,7 @@ function createIdealGraph(assetGraph, config, entries, logger) {
522
523
  // not true that a bundle's available assets = all assets of all the bundleGroups
523
524
  // it belongs to. It's the intersection of those sets.
524
525
  let available;
525
- if (bundleRoot.bundleBehavior === 'isolated') {
526
+ if (bundleRoot.bundleBehavior === 'isolated' || bundleRoot.bundleBehavior === 'inlineIsolated') {
526
527
  available = new (_graph().BitSet)(assets.length);
527
528
  } else {
528
529
  available = (0, _nullthrows().default)(ancestorAssets[nodeId]).clone();
@@ -585,7 +586,7 @@ function createIdealGraph(assetGraph, config, entries, logger) {
585
586
  continue;
586
587
  }
587
588
  let parentRoots = bundleRootGraph.getNodeIdsConnectedTo(id, _graph().ALL_EDGE_TYPES);
588
- let canDelete = getBundleFromBundleRoot(bundleRoot).bundleBehavior !== 'isolated';
589
+ let canDelete = getBundleFromBundleRoot(bundleRoot).bundleBehavior !== 'isolated' && getBundleFromBundleRoot(bundleRoot).bundleBehavior !== 'inlineIsolated';
589
590
  if (parentRoots.length === 0) continue;
590
591
  for (let parentId of parentRoots) {
591
592
  var _ancestorAssets$paren;
@@ -653,7 +654,7 @@ function createIdealGraph(assetGraph, config, entries, logger) {
653
654
  let assetId = bundleRootGraph.getNode(nodeId);
654
655
  if (assetId == null) return; // deleted
655
656
  let a = assets[assetId];
656
- if (entries.has(a) || !a.isBundleSplittable || bundleRoots.get(a) && (getBundleFromBundleRoot(a).needsStableName || getBundleFromBundleRoot(a).bundleBehavior === 'isolated')) {
657
+ if (entries.has(a) || !a.isBundleSplittable || bundleRoots.get(a) && (getBundleFromBundleRoot(a).needsStableName || getBundleFromBundleRoot(a).bundleBehavior === 'isolated' || getBundleFromBundleRoot(a).bundleBehavior === 'inlineIsolated')) {
657
658
  // Add asset to non-splittable bundles.
658
659
  addAssetToBundleRoot(asset, a);
659
660
  } else if (!((_ancestorAssets$nodeI = ancestorAssets[nodeId]) !== null && _ancestorAssets$nodeI !== void 0 && _ancestorAssets$nodeI.has(i))) {
@@ -970,8 +971,7 @@ function createIdealGraph(assetGraph, config, entries, logger) {
970
971
  let numBundlesContributingToPRL = bundleIdsInGroup.reduce((count, b) => {
971
972
  let bundle = (0, _nullthrows().default)(bundleGraph.getNode(b));
972
973
  (0, _assert().default)(bundle !== 'root');
973
- // @ts-expect-error TS2365
974
- return count + (bundle.bundleBehavior !== 'inline');
974
+ return count + Number(bundle.bundleBehavior !== 'inline' && bundle.bundleBehavior !== 'inlineIsolated');
975
975
  }, 0);
976
976
  if (numBundlesContributingToPRL > config.maxParallelRequests) {
977
977
  let sharedBundleIdsInBundleGroup = bundleIdsInGroup.filter(b => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaspack/bundler-default",
3
- "version": "3.2.1",
3
+ "version": "3.3.0",
4
4
  "license": "(MIT OR Apache-2.0)",
5
5
  "type": "commonjs",
6
6
  "publishConfig": {
@@ -18,11 +18,11 @@
18
18
  },
19
19
  "dependencies": {
20
20
  "@atlaspack/diagnostic": "2.14.2",
21
- "@atlaspack/feature-flags": "2.20.1",
22
- "@atlaspack/graph": "3.5.11",
23
- "@atlaspack/plugin": "2.14.22",
24
- "@atlaspack/rust": "3.4.2",
25
- "@atlaspack/utils": "2.17.4",
21
+ "@atlaspack/feature-flags": "2.21.0",
22
+ "@atlaspack/graph": "3.5.12",
23
+ "@atlaspack/plugin": "2.14.23",
24
+ "@atlaspack/rust": "3.5.0",
25
+ "@atlaspack/utils": "2.18.0",
26
26
  "nullthrows": "^1.1.1",
27
27
  "many-keys-map": "^1.0.3"
28
28
  },
@@ -38,9 +38,12 @@ export function addJSMonolithBundle(
38
38
  let assets = bundleGraph.getDependencyAssets(dependency);
39
39
 
40
40
  for (const asset of assets) {
41
- if (asset.bundleBehavior === 'isolated') {
41
+ if (
42
+ asset.bundleBehavior === 'isolated' ||
43
+ asset.bundleBehavior === 'inlineIsolated'
44
+ ) {
42
45
  throw new Error(
43
- 'Isolated assets are not supported for single file output builds',
46
+ `${asset.bundleBehavior === 'isolated' ? 'Isolated' : 'Inline isolated'} assets are not supported for single file output builds`,
44
47
  );
45
48
  }
46
49
 
@@ -12,8 +12,13 @@ function getBundlesForBundleGroup(
12
12
  ): number {
13
13
  let count = 0;
14
14
  bundleGraph.traverse((nodeId) => {
15
- // @ts-expect-error TS2339
16
- if (bundleGraph.getNode(nodeId)?.bundleBehavior !== 'inline') {
15
+ const node = bundleGraph.getNode(nodeId);
16
+ if (
17
+ node &&
18
+ (node === 'root' ||
19
+ (node.bundleBehavior !== 'inline' &&
20
+ node.bundleBehavior !== 'inlineIsolated'))
21
+ ) {
17
22
  count++;
18
23
  }
19
24
  }, bundleGroupId);
package/src/idealGraph.ts CHANGED
@@ -353,7 +353,8 @@ export function createIdealGraph(
353
353
  dependency.priority === 'lazy' ||
354
354
  (getFeatureFlag('conditionalBundlingApi') &&
355
355
  node.value.priority === 'conditional') ||
356
- childAsset.bundleBehavior === 'isolated' // An isolated Dependency, or Bundle must contain all assets it needs to load.
356
+ childAsset.bundleBehavior === 'isolated' || // An isolated Dependency, or Bundle must contain all assets it needs to load.
357
+ childAsset.bundleBehavior === 'inlineIsolated'
357
358
  ) {
358
359
  if (bundleId == null) {
359
360
  let firstBundleGroup = nullthrows(
@@ -366,7 +367,9 @@ export function createIdealGraph(
366
367
  dependency.bundleBehavior ?? childAsset.bundleBehavior,
367
368
  needsStableName:
368
369
  dependency.bundleBehavior === 'inline' ||
369
- childAsset.bundleBehavior === 'inline'
370
+ childAsset.bundleBehavior === 'inline' ||
371
+ dependency.bundleBehavior === 'inlineIsolated' ||
372
+ childAsset.bundleBehavior === 'inlineIsolated'
370
373
  ? false
371
374
  : dependency.isEntry || dependency.needsStableName,
372
375
  target: firstBundleGroup.target,
@@ -398,7 +401,8 @@ export function createIdealGraph(
398
401
  if (
399
402
  // If this dependency requests isolated, but the bundle is not,
400
403
  // make the bundle isolated for all uses.
401
- dependency.bundleBehavior === 'isolated' &&
404
+ (dependency.bundleBehavior === 'isolated' ||
405
+ dependency.bundleBehavior === 'inlineIsolated') &&
402
406
  bundle.bundleBehavior == null
403
407
  ) {
404
408
  bundle.bundleBehavior = dependency.bundleBehavior;
@@ -482,6 +486,7 @@ export function createIdealGraph(
482
486
  needsStableName:
483
487
  childAsset.bundleBehavior === 'inline' ||
484
488
  dependency.bundleBehavior === 'inline' ||
489
+ dependency.bundleBehavior === 'inlineIsolated' ||
485
490
  (dependency.priority === 'parallel' &&
486
491
  !dependency.needsStableName)
487
492
  ? false
@@ -495,7 +500,8 @@ export function createIdealGraph(
495
500
  if (
496
501
  // If this dependency requests isolated, but the bundle is not,
497
502
  // make the bundle isolated for all uses.
498
- dependency.bundleBehavior === 'isolated' &&
503
+ (dependency.bundleBehavior === 'isolated' ||
504
+ dependency.bundleBehavior === 'inlineIsolated') &&
499
505
  bundle.bundleBehavior == null
500
506
  ) {
501
507
  bundle.bundleBehavior = dependency.bundleBehavior;
@@ -741,7 +747,10 @@ export function createIdealGraph(
741
747
  // not true that a bundle's available assets = all assets of all the bundleGroups
742
748
  // it belongs to. It's the intersection of those sets.
743
749
  let available;
744
- if (bundleRoot.bundleBehavior === 'isolated') {
750
+ if (
751
+ bundleRoot.bundleBehavior === 'isolated' ||
752
+ bundleRoot.bundleBehavior === 'inlineIsolated'
753
+ ) {
745
754
  available = new BitSet(assets.length);
746
755
  } else {
747
756
  available = nullthrows(ancestorAssets[nodeId]).clone();
@@ -825,7 +834,8 @@ export function createIdealGraph(
825
834
 
826
835
  let parentRoots = bundleRootGraph.getNodeIdsConnectedTo(id, ALL_EDGE_TYPES);
827
836
  let canDelete =
828
- getBundleFromBundleRoot(bundleRoot).bundleBehavior !== 'isolated';
837
+ getBundleFromBundleRoot(bundleRoot).bundleBehavior !== 'isolated' &&
838
+ getBundleFromBundleRoot(bundleRoot).bundleBehavior !== 'inlineIsolated';
829
839
  if (parentRoots.length === 0) continue;
830
840
  for (let parentId of parentRoots) {
831
841
  if (parentId === rootNodeId) {
@@ -905,7 +915,8 @@ export function createIdealGraph(
905
915
  !a.isBundleSplittable ||
906
916
  (bundleRoots.get(a) &&
907
917
  (getBundleFromBundleRoot(a).needsStableName ||
908
- getBundleFromBundleRoot(a).bundleBehavior === 'isolated'))
918
+ getBundleFromBundleRoot(a).bundleBehavior === 'isolated' ||
919
+ getBundleFromBundleRoot(a).bundleBehavior === 'inlineIsolated'))
909
920
  ) {
910
921
  // Add asset to non-splittable bundles.
911
922
  addAssetToBundleRoot(asset, a);
@@ -1302,8 +1313,13 @@ export function createIdealGraph(
1302
1313
  let numBundlesContributingToPRL = bundleIdsInGroup.reduce((count, b) => {
1303
1314
  let bundle = nullthrows(bundleGraph.getNode(b));
1304
1315
  invariant(bundle !== 'root');
1305
- // @ts-expect-error TS2365
1306
- return count + (bundle.bundleBehavior !== 'inline');
1316
+ return (
1317
+ count +
1318
+ Number(
1319
+ bundle.bundleBehavior !== 'inline' &&
1320
+ bundle.bundleBehavior !== 'inlineIsolated',
1321
+ )
1322
+ );
1307
1323
  }, 0);
1308
1324
 
1309
1325
  if (numBundlesContributingToPRL > config.maxParallelRequests) {