@atlaspack/core 2.14.1-dev.145 → 2.14.1-dev.146

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.
Files changed (63) hide show
  1. package/CHANGELOG.md +59 -0
  2. package/lib/AssetGraph.js +17 -6
  3. package/lib/Atlaspack.js +3 -1
  4. package/lib/BundleGraph.js +6 -5
  5. package/lib/Dependency.js +6 -2
  6. package/lib/Environment.js +4 -3
  7. package/lib/EnvironmentManager.js +137 -0
  8. package/lib/InternalConfig.js +3 -2
  9. package/lib/PackagerRunner.js +52 -15
  10. package/lib/RequestTracker.js +191 -89
  11. package/lib/UncommittedAsset.js +20 -2
  12. package/lib/applyRuntimes.js +2 -1
  13. package/lib/assetUtils.js +2 -1
  14. package/lib/public/Asset.js +3 -2
  15. package/lib/public/Bundle.js +2 -1
  16. package/lib/public/Config.js +98 -3
  17. package/lib/public/Dependency.js +2 -1
  18. package/lib/public/MutableBundleGraph.js +2 -1
  19. package/lib/public/Target.js +2 -1
  20. package/lib/requests/AssetGraphRequest.js +13 -1
  21. package/lib/requests/AssetRequest.js +2 -1
  22. package/lib/requests/BundleGraphRequest.js +13 -1
  23. package/lib/requests/ConfigRequest.js +27 -4
  24. package/lib/requests/TargetRequest.js +18 -16
  25. package/lib/requests/WriteBundleRequest.js +15 -3
  26. package/lib/requests/WriteBundlesRequest.js +1 -0
  27. package/lib/resolveOptions.js +4 -2
  28. package/package.json +17 -17
  29. package/src/AssetGraph.js +12 -6
  30. package/src/Atlaspack.js +5 -4
  31. package/src/BundleGraph.js +13 -8
  32. package/src/Dependency.js +13 -5
  33. package/src/Environment.js +8 -5
  34. package/src/EnvironmentManager.js +145 -0
  35. package/src/InternalConfig.js +6 -5
  36. package/src/PackagerRunner.js +72 -20
  37. package/src/RequestTracker.js +330 -146
  38. package/src/UncommittedAsset.js +23 -3
  39. package/src/applyRuntimes.js +6 -1
  40. package/src/assetUtils.js +4 -3
  41. package/src/atlaspack-v3/worker/compat/plugin-config.js +9 -5
  42. package/src/public/Asset.js +9 -2
  43. package/src/public/Bundle.js +2 -1
  44. package/src/public/Config.js +129 -14
  45. package/src/public/Dependency.js +2 -1
  46. package/src/public/MutableBundleGraph.js +2 -1
  47. package/src/public/Target.js +2 -1
  48. package/src/requests/AssetGraphRequest.js +13 -3
  49. package/src/requests/AssetRequest.js +2 -1
  50. package/src/requests/BundleGraphRequest.js +13 -3
  51. package/src/requests/ConfigRequest.js +33 -9
  52. package/src/requests/TargetRequest.js +19 -25
  53. package/src/requests/WriteBundleRequest.js +14 -8
  54. package/src/requests/WriteBundlesRequest.js +1 -0
  55. package/src/resolveOptions.js +4 -2
  56. package/src/types.js +9 -7
  57. package/test/Environment.test.js +43 -34
  58. package/test/EnvironmentManager.test.js +192 -0
  59. package/test/PublicEnvironment.test.js +10 -7
  60. package/test/RequestTracker.test.js +115 -3
  61. package/test/public/Config.test.js +108 -0
  62. package/test/requests/ConfigRequest.test.js +187 -3
  63. package/test/test-utils.js +4 -9
package/CHANGELOG.md CHANGED
@@ -1,5 +1,64 @@
1
1
  # @atlaspack/core
2
2
 
3
+ ## 2.18.1
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [[`1b52b99`](https://github.com/atlassian-labs/atlaspack/commit/1b52b99db4298b04c1a6eb0f97994d75a2d436f9)]:
8
+ - @atlaspack/graph@3.5.0
9
+
10
+ ## 2.18.0
11
+
12
+ ### Minor Changes
13
+
14
+ - [#601](https://github.com/atlassian-labs/atlaspack/pull/601) [`1e32d4e`](https://github.com/atlassian-labs/atlaspack/commit/1e32d4eae6b3af3968e8a0ef97d35b4347fd4196) Thanks [@yamadapc](https://github.com/yamadapc)! - Improve granular configuration file invalidations
15
+
16
+ - [#599](https://github.com/atlassian-labs/atlaspack/pull/599) [`0b2f6f5`](https://github.com/atlassian-labs/atlaspack/commit/0b2f6f55794d3ff6e2f5a41f963e7e5dd8ad9f8d) Thanks [@pancaspe87](https://github.com/pancaspe87)! - load and write env to cache - change is feature flagged
17
+
18
+ ### Patch Changes
19
+
20
+ - [#595](https://github.com/atlassian-labs/atlaspack/pull/595) [`51aba5f`](https://github.com/atlassian-labs/atlaspack/commit/51aba5fc0e49235ee06bbc3c376f48c3e7da5c4b) Thanks [@yamadapc](https://github.com/yamadapc)! - Add bundleId to write bundle request results
21
+
22
+ - [#572](https://github.com/atlassian-labs/atlaspack/pull/572) [`6dd4ccb`](https://github.com/atlassian-labs/atlaspack/commit/6dd4ccb753541de32322d881f973d571dd57e4ca) Thanks [@yamadapc](https://github.com/yamadapc)! - Add feature-flagged change which removes all environment duplication around objects
23
+
24
+ - Updated dependencies [[`0999fb7`](https://github.com/atlassian-labs/atlaspack/commit/0999fb78da519a6c7582d212883e515fcf6c1252), [`51aba5f`](https://github.com/atlassian-labs/atlaspack/commit/51aba5fc0e49235ee06bbc3c376f48c3e7da5c4b), [`1e32d4e`](https://github.com/atlassian-labs/atlaspack/commit/1e32d4eae6b3af3968e8a0ef97d35b4347fd4196), [`35fdd4b`](https://github.com/atlassian-labs/atlaspack/commit/35fdd4b52da0af20f74667f7b8adfb2f90279b7c), [`6dd4ccb`](https://github.com/atlassian-labs/atlaspack/commit/6dd4ccb753541de32322d881f973d571dd57e4ca)]:
25
+ - @atlaspack/fs@2.15.5
26
+ - @atlaspack/types@2.15.0
27
+ - @atlaspack/rust@3.3.5
28
+ - @atlaspack/cache@3.2.5
29
+ - @atlaspack/package-manager@2.14.10
30
+ - @atlaspack/profiler@2.14.8
31
+ - @atlaspack/workers@2.14.10
32
+ - @atlaspack/plugin@2.14.10
33
+ - @atlaspack/logger@2.14.10
34
+ - @atlaspack/utils@2.14.10
35
+
36
+ ## 2.17.4
37
+
38
+ ### Patch Changes
39
+
40
+ - [#588](https://github.com/atlassian-labs/atlaspack/pull/588) [`1940859`](https://github.com/atlassian-labs/atlaspack/commit/194085942f0e86532e9d039fc3f8039badce4594) Thanks [@yamadapc](https://github.com/yamadapc)! - Do not invalidate all javascript files when tsconfig files change
41
+
42
+ - [#592](https://github.com/atlassian-labs/atlaspack/pull/592) [`15b6155`](https://github.com/atlassian-labs/atlaspack/commit/15b61556e9114203ebbc9de94b864118ca764598) Thanks [@yamadapc](https://github.com/yamadapc)! - Report large file invalidations
43
+
44
+ - [#503](https://github.com/atlassian-labs/atlaspack/pull/503) [`209692f`](https://github.com/atlassian-labs/atlaspack/commit/209692ffb11eae103a0d65c5e1118a5aa1625818) Thanks [@JakeLane](https://github.com/JakeLane)! - Fix conditional bundling reporter when condition is reused
45
+
46
+ - [#562](https://github.com/atlassian-labs/atlaspack/pull/562) [`d04de26`](https://github.com/atlassian-labs/atlaspack/commit/d04de26af684d7abfba5091fbe3df16a12cd0ebc) Thanks [@yamadapc](https://github.com/yamadapc)! - Update with feature-flagged change to write packages into files rather than LMDB
47
+
48
+ - 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)]:
49
+ - @atlaspack/cache@3.2.4
50
+ - @atlaspack/rust@3.3.4
51
+ - @atlaspack/fs@2.15.4
52
+ - @atlaspack/feature-flags@2.16.0
53
+ - @atlaspack/logger@2.14.9
54
+ - @atlaspack/utils@2.14.9
55
+ - @atlaspack/package-manager@2.14.9
56
+ - @atlaspack/graph@3.4.7
57
+ - @atlaspack/workers@2.14.9
58
+ - @atlaspack/profiler@2.14.7
59
+ - @atlaspack/types@2.14.9
60
+ - @atlaspack/plugin@2.14.9
61
+
3
62
  ## 2.17.3
4
63
 
5
64
  ### Patch Changes
package/lib/AssetGraph.js CHANGED
@@ -46,6 +46,14 @@ function _graph() {
46
46
  }
47
47
  var _Dependency = require("./Dependency");
48
48
  var _projectPath = require("./projectPath");
49
+ var _EnvironmentManager = require("./EnvironmentManager");
50
+ function _featureFlags() {
51
+ const data = require("@atlaspack/feature-flags");
52
+ _featureFlags = function () {
53
+ return data;
54
+ };
55
+ return data;
56
+ }
49
57
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
50
58
  function nodeFromDep(dep) {
51
59
  return {
@@ -63,7 +71,7 @@ function nodeFromDep(dep) {
63
71
  }
64
72
  function nodeFromAssetGroup(assetGroup) {
65
73
  return {
66
- id: (0, _rust().hashString)((0, _projectPath.fromProjectPathRelative)(assetGroup.filePath) + assetGroup.env.id + String(assetGroup.isSource) + String(assetGroup.sideEffects) + (assetGroup.code ?? '') + ':' + (assetGroup.pipeline ?? '') + ':' + (assetGroup.query ?? '')),
74
+ id: (0, _rust().hashString)((0, _projectPath.fromProjectPathRelative)(assetGroup.filePath) + (0, _EnvironmentManager.toEnvironmentId)(assetGroup.env) + String(assetGroup.isSource) + String(assetGroup.sideEffects) + (assetGroup.code ?? '') + ':' + (assetGroup.pipeline ?? '') + ':' + (assetGroup.query ?? '')),
67
75
  type: 'asset_group',
68
76
  value: assetGroup,
69
77
  usedSymbolsDownDirty: true
@@ -130,16 +138,19 @@ class AssetGraph extends _graph().ContentGraph {
130
138
 
131
139
  // Deduplicates Environments by making them referentially equal
132
140
  normalizeEnvironment(input) {
141
+ if ((0, _featureFlags().getFeatureFlag)('environmentDeduplication')) {
142
+ return;
143
+ }
133
144
  let {
134
145
  id,
135
146
  context
136
- } = input.env;
147
+ } = (0, _EnvironmentManager.fromEnvironmentId)(input.env);
137
148
  let idAndContext = `${id}-${context}`;
138
149
  let env = this.envCache.get(idAndContext);
139
150
  if (env) {
140
151
  input.env = env;
141
152
  } else {
142
- this.envCache.set(idAndContext, input.env);
153
+ this.envCache.set(idAndContext, (0, _EnvironmentManager.fromEnvironmentId)(input.env));
143
154
  }
144
155
  }
145
156
  setRootConnections({
@@ -199,13 +210,13 @@ class AssetGraph extends _graph().ContentGraph {
199
210
  env: target.env,
200
211
  isEntry: true,
201
212
  needsStableName: true,
202
- symbols: target.env.isLibrary ? new Map([['*', {
213
+ symbols: (0, _EnvironmentManager.fromEnvironmentId)(target.env).isLibrary ? new Map([['*', {
203
214
  local: '*',
204
215
  isWeak: true,
205
216
  loc: null
206
217
  }]]) : undefined
207
218
  }));
208
- if (node.value.env.isLibrary) {
219
+ if ((0, _EnvironmentManager.fromEnvironmentId)(node.value.env).isLibrary) {
209
220
  // in library mode, all of the entry's symbols are "used"
210
221
  node.usedSymbolsDown.add('*');
211
222
  node.usedSymbolsUp.set('*', undefined);
@@ -348,7 +359,7 @@ class AssetGraph extends _graph().ContentGraph {
348
359
  if (this.undeferredDependencies.has(d)) {
349
360
  return false;
350
361
  }
351
- let depIsDeferrable = d.symbols && !(d.env.isLibrary && d.isEntry) && !d.symbols.has('*') && ![...d.symbols.keys()].some(symbol => {
362
+ let depIsDeferrable = d.symbols && !((0, _EnvironmentManager.fromEnvironmentId)(d.env).isLibrary && d.isEntry) && !d.symbols.has('*') && ![...d.symbols.keys()].some(symbol => {
352
363
  var _resolvedAsset$symbol;
353
364
  let assetSymbol = (_resolvedAsset$symbol = resolvedAsset.symbols) === null || _resolvedAsset$symbol === void 0 || (_resolvedAsset$symbol = _resolvedAsset$symbol.get(symbol)) === null || _resolvedAsset$symbol === void 0 ? void 0 : _resolvedAsset$symbol.local;
354
365
  return assetSymbol != null && symbols.has(assetSymbol);
package/lib/Atlaspack.js CHANGED
@@ -509,7 +509,9 @@ class Atlaspack {
509
509
  if (this.rustAtlaspack) {
510
510
  nativeInvalid = await this.rustAtlaspack.respondToFsEvents(events);
511
511
  }
512
- let isInvalid = await this.#requestTracker.respondToFSEvents(events, Number.POSITIVE_INFINITY);
512
+ let {
513
+ didInvalidate: isInvalid
514
+ } = await this.#requestTracker.respondToFSEvents(events, Number.POSITIVE_INFINITY);
513
515
  if ((nativeInvalid || isInvalid) && this.#watchQueue.getNumWaiting() === 0) {
514
516
  if (this.#watchAbortController) {
515
517
  this.#watchAbortController.abort();
@@ -51,6 +51,7 @@ function _featureFlags() {
51
51
  };
52
52
  return data;
53
53
  }
54
+ var _EnvironmentManager = require("./EnvironmentManager");
54
55
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
55
56
  const bundleGraphEdgeTypes = exports.bundleGraphEdgeTypes = {
56
57
  // A lack of an edge type indicates to follow the edge while traversing
@@ -207,7 +208,7 @@ class BundleGraph {
207
208
  }
208
209
  }
209
210
  }
210
- if (node.type === 'dependency' && node.value.symbols != null && node.value.env.shouldScopeHoist &&
211
+ if (node.type === 'dependency' && node.value.symbols != null && (0, _EnvironmentManager.fromEnvironmentId)(node.value.env).shouldScopeHoist &&
211
212
  // Disable in dev mode because this feature is at odds with safeToIncrementallyBundle
212
213
  isProduction) {
213
214
  let nodeValueSymbols = node.value.symbols;
@@ -862,7 +863,7 @@ class BundleGraph {
862
863
  return;
863
864
  }
864
865
  visitedBundles.add(descendant);
865
- if (descendant.type !== bundle.type || descendant.env.context !== bundle.env.context) {
866
+ if (descendant.type !== bundle.type || (0, _EnvironmentManager.fromEnvironmentId)(descendant.env).context !== (0, _EnvironmentManager.fromEnvironmentId)(bundle.env).context) {
866
867
  actions.skipChildren();
867
868
  return;
868
869
  }
@@ -890,7 +891,7 @@ class BundleGraph {
890
891
  isAssetReachableFromBundle(asset, bundle) {
891
892
  // If a bundle's environment is isolated, it can't access assets present
892
893
  // in any ancestor bundles. Don't consider any assets reachable.
893
- if (_Environment.ISOLATED_ENVS.has(bundle.env.context) || !bundle.isSplittable || bundle.bundleBehavior === _types.BundleBehavior.isolated || bundle.bundleBehavior === _types.BundleBehavior.inline) {
894
+ if (_Environment.ISOLATED_ENVS.has((0, _EnvironmentManager.fromEnvironmentId)(bundle.env).context) || !bundle.isSplittable || bundle.bundleBehavior === _types.BundleBehavior.isolated || bundle.bundleBehavior === _types.BundleBehavior.inline) {
894
895
  return false;
895
896
  }
896
897
 
@@ -918,7 +919,7 @@ class BundleGraph {
918
919
  let node = (0, _nullthrows().default)(this._graph.getNode(nodeId));
919
920
  // If we've reached the root or a context change without
920
921
  // finding this asset in the ancestry, it is not reachable.
921
- if (node.type === 'root' || node.type === 'bundle' && (node.value.id === bundle.id || node.value.env.context !== bundle.env.context)) {
922
+ if (node.type === 'root' || node.type === 'bundle' && (node.value.id === bundle.id || (0, _EnvironmentManager.fromEnvironmentId)(node.value.env).context !== (0, _EnvironmentManager.fromEnvironmentId)(bundle.env).context)) {
922
923
  isReachable = false;
923
924
  actions.stop();
924
925
  return;
@@ -1413,7 +1414,7 @@ class BundleGraph {
1413
1414
  for (let referencedBundle of this.getReferencedBundles(bundle)) {
1414
1415
  hash.writeString(referencedBundle.id);
1415
1416
  }
1416
- hash.writeString(JSON.stringify((0, _utils().objectSortedEntriesDeep)(bundle.env)));
1417
+ hash.writeString(JSON.stringify((0, _utils().objectSortedEntriesDeep)((0, _EnvironmentManager.fromEnvironmentId)(bundle.env))));
1417
1418
  return hash.finish();
1418
1419
  }
1419
1420
  getBundleGraphHash() {
package/lib/Dependency.js CHANGED
@@ -24,6 +24,7 @@ function _assert() {
24
24
  return data;
25
25
  }
26
26
  var _IdentifierRegistry = require("./IdentifierRegistry");
27
+ var _EnvironmentManager = require("./EnvironmentManager");
27
28
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
28
29
  function createDependencyId({
29
30
  sourceAssetId,
@@ -41,8 +42,11 @@ function createDependencyId({
41
42
  const params = {
42
43
  sourceAssetId,
43
44
  specifier,
44
- environmentId: env.id,
45
- target,
45
+ environmentId: (0, _EnvironmentManager.toEnvironmentId)(env),
46
+ target: target != null ? {
47
+ ...target,
48
+ env: (0, _EnvironmentManager.fromEnvironmentId)(target.env)
49
+ } : null,
46
50
  pipeline,
47
51
  specifierType: _types.SpecifierType[specifierType],
48
52
  bundleBehavior,
@@ -15,6 +15,7 @@ function _rust() {
15
15
  var _utils = require("./utils");
16
16
  var _Environment = _interopRequireWildcard(require("./public/Environment"));
17
17
  var _IdentifierRegistry = require("./IdentifierRegistry");
18
+ var _EnvironmentManager = require("./EnvironmentManager");
18
19
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
19
20
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
20
21
  const DEFAULT_ENGINES = {
@@ -108,15 +109,15 @@ function createEnvironment({
108
109
  loc
109
110
  };
110
111
  res.id = getEnvironmentHash(res);
111
- return Object.freeze(res);
112
+ return (0, _EnvironmentManager.toEnvironmentRef)(Object.freeze(res));
112
113
  }
113
114
  function mergeEnvironments(projectRoot, a, b) {
114
115
  // If merging the same object, avoid copying.
115
116
  if (a === b || !b) {
116
- return a;
117
+ return (0, _EnvironmentManager.toEnvironmentRef)(a);
117
118
  }
118
119
  if (b instanceof _Environment.default) {
119
- return (0, _Environment.environmentToInternalEnvironment)(b);
120
+ return (0, _EnvironmentManager.toEnvironmentRef)((0, _Environment.environmentToInternalEnvironment)(b));
120
121
  }
121
122
 
122
123
  // $FlowFixMe - ignore the `id` that is already on a
@@ -0,0 +1,137 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.fromEnvironmentId = fromEnvironmentId;
7
+ exports.loadEnvironmentsFromCache = loadEnvironmentsFromCache;
8
+ exports.toEnvironmentId = toEnvironmentId;
9
+ exports.toEnvironmentRef = toEnvironmentRef;
10
+ exports.writeEnvironmentsToCache = writeEnvironmentsToCache;
11
+ function _rust() {
12
+ const data = require("@atlaspack/rust");
13
+ _rust = function () {
14
+ return data;
15
+ };
16
+ return data;
17
+ }
18
+ function _featureFlags() {
19
+ const data = require("@atlaspack/feature-flags");
20
+ _featureFlags = function () {
21
+ return data;
22
+ };
23
+ return data;
24
+ }
25
+ function _logger() {
26
+ const data = require("@atlaspack/logger");
27
+ _logger = function () {
28
+ return data;
29
+ };
30
+ return data;
31
+ }
32
+ var _constants = require("./constants");
33
+ /*!
34
+ * At the moment we're doing this change for `CoreEnvironment`,
35
+ * but the same change must be made for `TypesEnvironment` in @atlaspack/types.
36
+ */
37
+ const localEnvironmentCache = new Map();
38
+
39
+ /**
40
+ * When deduplication is cleaned-up this will always be a string.
41
+ */
42
+
43
+ /**
44
+ * Convert environment to a ref.
45
+ * This is what we should be using to store environments.
46
+ */
47
+ function toEnvironmentRef(env) {
48
+ if (!(0, _featureFlags().getFeatureFlag)('environmentDeduplication')) {
49
+ return env;
50
+ }
51
+ const id = toEnvironmentId(env);
52
+ return id;
53
+ }
54
+
55
+ /**
56
+ * Convert environment to a string ID
57
+ */
58
+ function toEnvironmentId(
59
+ /**
60
+ * Redundant type during roll-out
61
+ */
62
+ env) {
63
+ if (!(0, _featureFlags().getFeatureFlag)('environmentDeduplication')) {
64
+ return typeof env === 'string' ? env : env.id;
65
+ }
66
+ if (typeof env === 'string') {
67
+ return env;
68
+ }
69
+ (0, _rust().addEnvironment)(env);
70
+ return env.id;
71
+ }
72
+ function fromEnvironmentId(id) {
73
+ if (!(0, _featureFlags().getFeatureFlag)('environmentDeduplication')) {
74
+ if (typeof id === 'string') {
75
+ throw new Error('This should never happen when environmentDeduplication feature-flag is off');
76
+ } else {
77
+ return id;
78
+ }
79
+ }
80
+ if (typeof id !== 'string') {
81
+ return id;
82
+ }
83
+ const localEnv = localEnvironmentCache.get(id);
84
+ if (localEnv) {
85
+ return localEnv;
86
+ }
87
+ const env = Object.freeze((0, _rust().getEnvironment)(id));
88
+ localEnvironmentCache.set(id, env);
89
+ return env;
90
+ }
91
+
92
+ /**
93
+ * Writes all environments and their IDs to the cache
94
+ * @param {Cache} cache
95
+ * @returns {Promise<void>}
96
+ */
97
+ async function writeEnvironmentsToCache(cache) {
98
+ const environments = (0, _rust().getAllEnvironments)();
99
+ const environmentIds = new Set();
100
+
101
+ // Store each environment individually
102
+ for (const env of environments) {
103
+ environmentIds.add(env.id);
104
+ const envKey = `Environment/${_constants.ATLASPACK_VERSION}/${env.id}`;
105
+ await (0, _logger().instrument)(`RequestTracker::writeToCache::cache.put(${envKey})`, async () => {
106
+ await cache.set(envKey, env);
107
+ });
108
+ }
109
+
110
+ // Store the list of environment IDs
111
+ await (0, _logger().instrument)(`RequestTracker::writeToCache::cache.put(${`EnvironmentManager/${_constants.ATLASPACK_VERSION}`})`, async () => {
112
+ await cache.set(`EnvironmentManager/${_constants.ATLASPACK_VERSION}`, Array.from(environmentIds));
113
+ });
114
+ }
115
+
116
+ /**
117
+ * Loads all environments and their IDs from the cache
118
+ * @param {Cache} cache
119
+ * @returns {Promise<void>}
120
+ */
121
+ async function loadEnvironmentsFromCache(cache) {
122
+ const cachedEnvIds = await cache.get(`EnvironmentManager/${_constants.ATLASPACK_VERSION}`);
123
+ if (cachedEnvIds == null) {
124
+ return;
125
+ }
126
+ const environments = [];
127
+ for (const envId of cachedEnvIds) {
128
+ const envKey = `Environment/${_constants.ATLASPACK_VERSION}/${envId}`;
129
+ const cachedEnv = await cache.get(envKey);
130
+ if (cachedEnv != null) {
131
+ environments.push(cachedEnv);
132
+ }
133
+ }
134
+ if (environments.length > 0) {
135
+ (0, _rust().setAllEnvironments)(environments);
136
+ }
137
+ }
@@ -14,6 +14,7 @@ function _rust() {
14
14
  return data;
15
15
  }
16
16
  var _IdentifierRegistry = require("./IdentifierRegistry");
17
+ var _EnvironmentManager = require("./EnvironmentManager");
17
18
  function createConfig({
18
19
  plugin,
19
20
  isSource,
@@ -30,11 +31,11 @@ function createConfig({
30
31
  invalidateOnBuild
31
32
  }) {
32
33
  let environment = env ?? (0, _Environment.createEnvironment)();
33
- const configId = (0, _rust().hashString)(plugin + (0, _projectPath.fromProjectPathRelative)(searchPath) + environment.id + String(isSource));
34
+ const configId = (0, _rust().hashString)(plugin + (0, _projectPath.fromProjectPathRelative)(searchPath) + (0, _EnvironmentManager.toEnvironmentId)(environment) + String(isSource));
34
35
  _IdentifierRegistry.identifierRegistry.addIdentifier('config_request', configId, {
35
36
  plugin,
36
37
  searchPath,
37
- environmentId: environment.id,
38
+ environmentId: (0, _EnvironmentManager.toEnvironmentId)(environment),
38
39
  isSource
39
40
  });
40
41
  return {
@@ -92,6 +92,14 @@ function _profiler() {
92
92
  };
93
93
  return data;
94
94
  }
95
+ var _EnvironmentManager = require("./EnvironmentManager");
96
+ function _featureFlags() {
97
+ const data = require("@atlaspack/feature-flags");
98
+ _featureFlags = function () {
99
+ return data;
100
+ };
101
+ return data;
102
+ }
95
103
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
96
104
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
97
105
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -390,15 +398,17 @@ class PackagerRunner {
390
398
  let fullPath = (0, _projectPath.fromProjectPath)(this.options.projectRoot, filePath);
391
399
  let sourceRoot = _path().default.relative(_path().default.dirname(fullPath), this.options.projectRoot);
392
400
  let inlineSources = false;
401
+ const bundleEnv = (0, _EnvironmentManager.fromEnvironmentId)(bundle.env);
393
402
  if (bundle.target) {
394
- if (bundle.env.sourceMap && bundle.env.sourceMap.sourceRoot !== undefined) {
395
- sourceRoot = bundle.env.sourceMap.sourceRoot;
396
- } else if (this.options.serveOptions && bundle.target.env.context === 'browser') {
403
+ const bundleTargetEnv = (0, _EnvironmentManager.fromEnvironmentId)(bundle.target.env);
404
+ if (bundleEnv.sourceMap && bundleEnv.sourceMap.sourceRoot !== undefined) {
405
+ sourceRoot = bundleEnv.sourceMap.sourceRoot;
406
+ } else if (this.options.serveOptions && bundleTargetEnv.context === 'browser') {
397
407
  sourceRoot = '/__parcel_source_root';
398
408
  }
399
- if (bundle.env.sourceMap && bundle.env.sourceMap.inlineSources !== undefined) {
400
- inlineSources = bundle.env.sourceMap.inlineSources;
401
- } else if (bundle.target.env.context !== 'node') {
409
+ if (bundleEnv.sourceMap && bundleEnv.sourceMap.inlineSources !== undefined) {
410
+ inlineSources = bundleEnv.sourceMap.inlineSources;
411
+ } else if (bundleTargetEnv.context !== 'node') {
402
412
  // inlining should only happen in production for browser targets by default
403
413
  inlineSources = this.options.mode === 'production';
404
414
  }
@@ -407,7 +417,7 @@ class PackagerRunner {
407
417
  // Set source root to 'atlaspack' so stack traces are clean in Sentry
408
418
  sourceRoot = 'atlaspack';
409
419
  }
410
- let isInlineMap = bundle.env.sourceMap && bundle.env.sourceMap.inline;
420
+ let isInlineMap = bundleEnv.sourceMap && bundleEnv.sourceMap.inline;
411
421
  let stringified = await map.stringify({
412
422
  file: _path().default.basename(fullPath + '.map'),
413
423
  // $FlowFixMe
@@ -438,6 +448,10 @@ class PackagerRunner {
438
448
  devDepHashes += await this.getDevDepHashes(inlineBundle);
439
449
  }
440
450
  let invalidationHash = await (0, _assetUtils.getInvalidationHash)(invalidations, this.options);
451
+ if ((0, _featureFlags().getFeatureFlag)('cachePerformanceImprovements')) {
452
+ const hash = (0, _rust().hashString)(_constants.ATLASPACK_VERSION + devDepHashes + invalidationHash + bundle.target.publicUrl + bundleGraph.getHash(bundle) + JSON.stringify(configResults) + JSON.stringify(globalInfoResults) + this.options.mode + (this.options.shouldBuildLazily ? 'lazy' : 'eager'));
453
+ return _path().default.join(bundle.displayName ?? bundle.name ?? bundle.id, hash);
454
+ }
441
455
  return (0, _rust().hashString)(_constants.ATLASPACK_VERSION + devDepHashes + invalidationHash + bundle.target.publicUrl + bundleGraph.getHash(bundle) + JSON.stringify(configResults) + JSON.stringify(globalInfoResults) + this.options.mode + (this.options.shouldBuildLazily ? 'lazy' : 'eager'));
442
456
  }
443
457
  async getDevDepHashes(bundle) {
@@ -461,25 +475,27 @@ class PackagerRunner {
461
475
  let contentKey = PackagerRunner.getContentKey(cacheKey);
462
476
  let mapKey = PackagerRunner.getMapKey(cacheKey);
463
477
  let isLargeBlob = await this.options.cache.hasLargeBlob(contentKey);
464
- let contentExists = isLargeBlob || (await this.options.cache.has(contentKey));
478
+ let contentExists = (0, _featureFlags().getFeatureFlag)('cachePerformanceImprovements') ? isLargeBlob : isLargeBlob || (await this.options.cache.has(contentKey));
465
479
  if (!contentExists) {
466
480
  return null;
467
481
  }
468
- let mapExists = await this.options.cache.has(mapKey);
482
+ let mapExists = (0, _featureFlags().getFeatureFlag)('cachePerformanceImprovements') ? await this.options.cache.hasLargeBlob(mapKey) : await this.options.cache.has(mapKey);
469
483
  return {
470
484
  contents: isLargeBlob ? this.options.cache.getStream(contentKey) : (0, _utils().blobToStream)(await this.options.cache.getBlob(contentKey)),
471
- map: mapExists ? (0, _utils().blobToStream)(await this.options.cache.getBlob(mapKey)) : null
485
+ map: mapExists ? (0, _utils().blobToStream)((0, _featureFlags().getFeatureFlag)('cachePerformanceImprovements') ? await this.options.cache.getLargeBlob(mapKey) : await this.options.cache.getBlob(mapKey)) : null
472
486
  };
473
487
  }
474
488
  async writeToCache(cacheKeys, type, contents, map) {
475
489
  let size = 0;
476
490
  let hash;
477
491
  let hashReferences = [];
478
- let isLargeBlob = false;
492
+ let isLargeBlob = (0, _featureFlags().getFeatureFlag)('cachePerformanceImprovements');
479
493
 
480
494
  // TODO: don't replace hash references in binary files??
481
495
  if (contents instanceof _stream().Readable) {
482
- isLargeBlob = true;
496
+ if (!(0, _featureFlags().getFeatureFlag)('cachePerformanceImprovements')) {
497
+ isLargeBlob = true;
498
+ }
483
499
  let boundaryStr = '';
484
500
  let h = new (_rust().Hash)();
485
501
  await this.options.cache.setStream(cacheKeys.content, (0, _utils().blobToStream)(contents).pipe(new (_utils().TapStream)(buf => {
@@ -495,15 +511,27 @@ class PackagerRunner {
495
511
  size = buffer.byteLength;
496
512
  hash = (0, _rust().hashBuffer)(buffer);
497
513
  hashReferences = contents.match(_constants.HASH_REF_REGEX) ?? [];
498
- await this.options.cache.setBlob(cacheKeys.content, buffer);
514
+ if ((0, _featureFlags().getFeatureFlag)('cachePerformanceImprovements')) {
515
+ await this.options.cache.setLargeBlob(cacheKeys.content, buffer);
516
+ } else {
517
+ await this.options.cache.setBlob(cacheKeys.content, buffer);
518
+ }
499
519
  } else {
500
520
  size = contents.length;
501
521
  hash = (0, _rust().hashBuffer)(contents);
502
522
  hashReferences = contents.toString().match(_constants.HASH_REF_REGEX) ?? [];
503
- await this.options.cache.setBlob(cacheKeys.content, contents);
523
+ if ((0, _featureFlags().getFeatureFlag)('cachePerformanceImprovements')) {
524
+ await this.options.cache.setLargeBlob(cacheKeys.content, contents);
525
+ } else {
526
+ await this.options.cache.setBlob(cacheKeys.content, contents);
527
+ }
504
528
  }
505
529
  if (map != null) {
506
- await this.options.cache.setBlob(cacheKeys.map, map);
530
+ if ((0, _featureFlags().getFeatureFlag)('cachePerformanceImprovements')) {
531
+ await this.options.cache.setLargeBlob(cacheKeys.map, map);
532
+ } else {
533
+ await this.options.cache.setBlob(cacheKeys.map, map);
534
+ }
507
535
  }
508
536
  let info = {
509
537
  type,
@@ -517,12 +545,21 @@ class PackagerRunner {
517
545
  return info;
518
546
  }
519
547
  static getContentKey(cacheKey) {
548
+ if ((0, _featureFlags().getFeatureFlag)('cachePerformanceImprovements')) {
549
+ return `PackagerRunner/${_constants.ATLASPACK_VERSION}/${cacheKey}/content`;
550
+ }
520
551
  return (0, _rust().hashString)(`${cacheKey}:content`);
521
552
  }
522
553
  static getMapKey(cacheKey) {
554
+ if ((0, _featureFlags().getFeatureFlag)('cachePerformanceImprovements')) {
555
+ return `PackagerRunner/${_constants.ATLASPACK_VERSION}/${cacheKey}/map`;
556
+ }
523
557
  return (0, _rust().hashString)(`${cacheKey}:map`);
524
558
  }
525
559
  static getInfoKey(cacheKey) {
560
+ if ((0, _featureFlags().getFeatureFlag)('cachePerformanceImprovements')) {
561
+ return `PackagerRunner/${_constants.ATLASPACK_VERSION}/${cacheKey}/info`;
562
+ }
526
563
  return (0, _rust().hashString)(`${cacheKey}:info`);
527
564
  }
528
565
  }