@atlaspack/core 2.12.1-dev.3443 → 2.12.1-dev.3460

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 (94) hide show
  1. package/lib/AssetGraph.js +5 -1
  2. package/lib/Atlaspack.js +2 -2
  3. package/lib/Dependency.js +1 -1
  4. package/lib/PackagerRunner.js +45 -3
  5. package/lib/SymbolPropagation.js +25 -36
  6. package/lib/assetUtils.js +1 -1
  7. package/lib/atlaspack-v3/fs.js +31 -29
  8. package/lib/atlaspack-v3/index.js +2 -2
  9. package/lib/atlaspack-v3/jsCallable.js +9 -4
  10. package/lib/atlaspack-v3/worker/compat/asset-symbols.js +192 -0
  11. package/lib/atlaspack-v3/worker/compat/bitflags.js +84 -0
  12. package/lib/atlaspack-v3/worker/compat/dependency.js +44 -0
  13. package/lib/atlaspack-v3/worker/compat/environment.js +68 -0
  14. package/lib/atlaspack-v3/worker/compat/index.js +104 -0
  15. package/lib/atlaspack-v3/worker/compat/mutable-asset.js +144 -0
  16. package/lib/atlaspack-v3/worker/compat/plugin-config.js +58 -0
  17. package/lib/atlaspack-v3/worker/compat/plugin-logger.js +29 -0
  18. package/lib/atlaspack-v3/worker/compat/plugin-options.js +113 -0
  19. package/lib/atlaspack-v3/worker/compat/plugin-tracer.js +12 -0
  20. package/lib/atlaspack-v3/worker/compat/target.js +17 -0
  21. package/lib/atlaspack-v3/worker/worker.js +162 -83
  22. package/lib/projectPath.js +12 -4
  23. package/lib/requests/ConfigRequest.js +1 -1
  24. package/lib/requests/WriteBundleRequest.js +15 -15
  25. package/package.json +23 -16
  26. package/src/AssetGraph.js +15 -13
  27. package/src/Atlaspack.js +5 -6
  28. package/src/AtlaspackConfig.js +11 -9
  29. package/src/AtlaspackConfig.schema.js +1 -1
  30. package/src/BundleGraph.js +83 -79
  31. package/src/CommittedAsset.js +1 -1
  32. package/src/Dependency.js +1 -1
  33. package/src/PackagerRunner.js +56 -8
  34. package/src/ReporterRunner.js +4 -4
  35. package/src/RequestTracker.js +18 -18
  36. package/src/SymbolPropagation.js +40 -52
  37. package/src/Transformation.js +12 -12
  38. package/src/UncommittedAsset.js +2 -2
  39. package/src/Validation.js +5 -5
  40. package/src/applyRuntimes.js +2 -2
  41. package/src/assetUtils.js +1 -1
  42. package/src/atlaspack-v3/AtlaspackV3.js +1 -1
  43. package/src/atlaspack-v3/fs.js +39 -25
  44. package/src/atlaspack-v3/index.js +1 -1
  45. package/src/atlaspack-v3/jsCallable.js +11 -10
  46. package/src/atlaspack-v3/worker/compat/asset-symbols.js +225 -0
  47. package/src/atlaspack-v3/worker/compat/bitflags.js +100 -0
  48. package/src/atlaspack-v3/worker/compat/dependency.js +83 -0
  49. package/src/atlaspack-v3/worker/compat/environment.js +92 -0
  50. package/src/atlaspack-v3/worker/compat/index.js +10 -0
  51. package/src/atlaspack-v3/worker/compat/mutable-asset.js +184 -0
  52. package/src/atlaspack-v3/worker/compat/plugin-config.js +94 -0
  53. package/src/atlaspack-v3/worker/compat/plugin-logger.js +47 -0
  54. package/src/atlaspack-v3/worker/compat/plugin-options.js +137 -0
  55. package/src/atlaspack-v3/worker/compat/plugin-tracer.js +11 -0
  56. package/src/atlaspack-v3/worker/compat/target.js +27 -0
  57. package/src/atlaspack-v3/worker/worker.js +218 -113
  58. package/src/dumpGraphToGraphViz.js +1 -1
  59. package/src/loadDotEnv.js +1 -1
  60. package/src/projectPath.js +12 -4
  61. package/src/public/Asset.js +1 -1
  62. package/src/public/Bundle.js +3 -3
  63. package/src/public/BundleGraph.js +20 -20
  64. package/src/public/Config.js +1 -1
  65. package/src/public/MutableBundleGraph.js +8 -8
  66. package/src/requests/AssetGraphRequest.js +10 -10
  67. package/src/requests/AssetGraphRequestRust.js +3 -3
  68. package/src/requests/AssetRequest.js +3 -3
  69. package/src/requests/AtlaspackConfigRequest.js +5 -3
  70. package/src/requests/BundleGraphRequest.js +6 -6
  71. package/src/requests/ConfigRequest.js +5 -5
  72. package/src/requests/DevDepRequest.js +7 -7
  73. package/src/requests/EntryRequest.js +2 -2
  74. package/src/requests/TargetRequest.js +9 -8
  75. package/src/requests/ValidationRequest.js +2 -2
  76. package/src/requests/WriteBundleRequest.js +26 -20
  77. package/src/requests/WriteBundlesRequest.js +6 -6
  78. package/src/requests/asset-graph-diff.js +4 -4
  79. package/src/resolveOptions.js +3 -3
  80. package/src/serializer.js +2 -2
  81. package/src/serializerCore.browser.js +3 -2
  82. package/src/serializerCore.js +2 -2
  83. package/src/utils.js +2 -2
  84. package/test/AtlaspackConfigRequest.test.js +1 -1
  85. package/test/BundleGraph.test.js +3 -3
  86. package/test/Dependency.test.js +28 -0
  87. package/test/PublicMutableBundleGraph.test.js +2 -2
  88. package/test/RequestTracker.test.js +7 -6
  89. package/test/SymbolPropagation.test.js +9 -9
  90. package/test/requests/ConfigRequest.test.js +3 -6
  91. package/test/utils.test.js +1 -1
  92. package/lib/atlaspack-v3/worker/compat.js +0 -57
  93. package/src/atlaspack-v3/worker/compat.js +0 -82
  94. package/test/requests/WriteBundleRequest.test.js +0 -132
@@ -18,6 +18,20 @@ function napi() {
18
18
  };
19
19
  return data;
20
20
  }
21
+ function _fs() {
22
+ const data = require("@atlaspack/fs");
23
+ _fs = function () {
24
+ return data;
25
+ };
26
+ return data;
27
+ }
28
+ function _packageManager() {
29
+ const data = require("@atlaspack/package-manager");
30
+ _packageManager = function () {
31
+ return data;
32
+ };
33
+ return data;
34
+ }
21
35
  function _worker_threads() {
22
36
  const data = require("worker_threads");
23
37
  _worker_threads = function () {
@@ -40,8 +54,12 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
40
54
  const CONFIG = Symbol.for('parcel-plugin-config');
41
55
  class AtlaspackWorker {
42
56
  #resolvers;
57
+ #transformers;
58
+ #fs;
43
59
  constructor() {
44
60
  this.#resolvers = new Map();
61
+ this.#transformers = new Map();
62
+ this.#fs = new (_fs().NodeFS)();
45
63
  }
46
64
  loadPlugin = (0, _jsCallable.jsCallable)(async ({
47
65
  kind,
@@ -55,44 +73,70 @@ class AtlaspackWorker {
55
73
  let instance = undefined;
56
74
  if (resolvedModule.default && resolvedModule.default[CONFIG]) {
57
75
  instance = resolvedModule.default[CONFIG];
58
- } else if (resolvedModule.default && resolvedModule.default.default[CONFIG]) {
76
+ } else if (resolvedModule.default && resolvedModule.default.default && resolvedModule.default.default[CONFIG]) {
59
77
  instance = resolvedModule.default.default[CONFIG];
60
78
  } else {
61
79
  throw new Error(`Plugin could not be resolved\n\t${kind}\n\t${resolveFrom}\n\t${specifier}`);
62
80
  }
63
81
  switch (kind) {
64
82
  case 'resolver':
65
- this.#resolvers.set(specifier, instance);
83
+ this.#resolvers.set(specifier, {
84
+ resolver: instance
85
+ });
86
+ break;
87
+ case 'transformer':
88
+ this.#transformers.set(specifier, {
89
+ transformer: instance
90
+ });
66
91
  break;
67
92
  }
68
93
  });
69
94
  runResolverResolve = (0, _jsCallable.jsCallable)(async ({
70
95
  key,
71
- dependency,
72
- specifier
96
+ dependency: napiDependency,
97
+ specifier,
98
+ pipeline,
99
+ projectRoot
73
100
  }) => {
74
- const resolver = this.#resolvers.get(key);
75
- if (!resolver) {
101
+ const state = this.#resolvers.get(key);
102
+ if (!state) {
76
103
  throw new Error(`Resolver not found: ${key}`);
77
104
  }
78
- const result = await resolver.resolve({
105
+ let packageManager = state.packageManager;
106
+ if (!packageManager) {
107
+ packageManager = new (_packageManager().NodePackageManager)(this.#fs, projectRoot);
108
+ state.packageManager = packageManager;
109
+ }
110
+ const env = new _compat.Environment(napiDependency.env);
111
+ const dependency = new _compat.Dependency(napiDependency, env);
112
+ const defaultOptions = {
113
+ logger: new _compat.PluginLogger(),
114
+ tracer: new _compat.PluginTracer(),
115
+ options: new _compat.PluginOptions({
116
+ packageManager,
117
+ shouldAutoInstall: false,
118
+ projectRoot,
119
+ inputFS: this.#fs,
120
+ outputFS: this.#fs
121
+ })
122
+ };
123
+ if (!('config' in state)) {
124
+ var _state$resolver$loadC, _state$resolver;
125
+ state.config = await ((_state$resolver$loadC = (_state$resolver = state.resolver).loadConfig) === null || _state$resolver$loadC === void 0 ? void 0 : _state$resolver$loadC.call(_state$resolver, {
126
+ config: new _compat.PluginConfig({
127
+ env,
128
+ isSource: true,
129
+ searchPath: ''
130
+ }),
131
+ ...defaultOptions
132
+ }));
133
+ }
134
+ const result = await state.resolver.resolve({
79
135
  specifier,
80
136
  dependency,
81
- get options() {
82
- throw new Error('TODO: Resolver.resolve.options');
83
- },
84
- get logger() {
85
- throw new Error('TODO: Resolver.resolve.logger');
86
- },
87
- get tracer() {
88
- throw new Error('TODO: Resolver.resolve.tracer');
89
- },
90
- get pipeline() {
91
- throw new Error('TODO: Resolver.resolve.pipeline');
92
- },
93
- get config() {
94
- throw new Error('TODO: Resolver.resolve.config');
95
- }
137
+ pipeline,
138
+ config: state.config,
139
+ ...defaultOptions
96
140
  });
97
141
  if (!result) {
98
142
  return {
@@ -112,74 +156,109 @@ class AtlaspackWorker {
112
156
  code: result.code || undefined,
113
157
  meta: result.meta || undefined,
114
158
  pipeline: result.pipeline || undefined,
115
- priority: result.priority && PriorityMap[result.priority],
159
+ priority: _compat.dependencyPriorityMap.intoNullable(result.priority),
116
160
  query: result.query && result.query.toString()
117
161
  }
118
162
  };
119
163
  });
120
- ping() {
121
- // console.log('Hi');
122
- }
123
- async runTransformer({
124
- resolveFrom,
125
- specifier,
126
- options,
127
- asset
128
- }) {
129
- const customRequire = _module().createRequire(resolveFrom);
130
- const resolvedPath = customRequire.resolve(specifier);
131
- // $FlowFixMe
132
- const transformerModule = await import(resolvedPath);
133
- const transformer = transformerModule.default.default[CONFIG];
134
- let assetCompat = new _compat.AssetCompat(asset, options);
135
- try {
136
- if (transformer.parse) {
137
- // $FlowFixMe
138
- const ast = await transformer.parse({
139
- asset: assetCompat
140
- }); // missing "config"
141
- // $FlowFixMe
142
- assetCompat.setAST(ast);
164
+ runTransformerTransform = (0, _jsCallable.jsCallable)(async ({
165
+ key,
166
+ env: napiEnv,
167
+ projectRoot,
168
+ asset: innerAsset
169
+ }) => {
170
+ var _transformer$loadConf;
171
+ const state = this.#transformers.get(key);
172
+ if (!state) {
173
+ throw new Error(`Transformer not found: ${key}`);
174
+ }
175
+ let packageManager = state.packageManager;
176
+ if (!packageManager) {
177
+ packageManager = new (_packageManager().NodePackageManager)(this.#fs, projectRoot);
178
+ state.packageManager = packageManager;
179
+ }
180
+ const transformer = state.transformer;
181
+ const env = new _compat.Environment(napiEnv);
182
+ const mutableAsset = new _compat.MutableAsset(innerAsset, this.#fs, env);
183
+ const defaultOptions = {
184
+ logger: new _compat.PluginLogger(),
185
+ tracer: new _compat.PluginTracer(),
186
+ options: new _compat.PluginOptions({
187
+ packageManager,
188
+ shouldAutoInstall: false,
189
+ projectRoot,
190
+ inputFS: this.#fs,
191
+ outputFS: this.#fs
192
+ })
193
+ };
194
+ const config = await ((_transformer$loadConf = transformer.loadConfig) === null || _transformer$loadConf === void 0 ? void 0 : _transformer$loadConf.call(transformer, {
195
+ config: new _compat.PluginConfig({
196
+ env,
197
+ isSource: true,
198
+ searchPath: ''
199
+ }),
200
+ ...defaultOptions
201
+ }));
202
+ if (transformer.parse) {
203
+ const ast = await transformer.parse({
204
+ asset: mutableAsset,
205
+ config,
206
+ get resolve() {
207
+ throw new Error('Transformer.parse.resolve()');
208
+ },
209
+ ...defaultOptions
210
+ });
211
+ if (ast) {
212
+ mutableAsset.setAST(ast);
143
213
  }
144
-
145
- // $FlowFixMe
146
- const result = await transformer.transform({
147
- // $FlowFixMe
148
- asset: assetCompat,
149
- options,
150
- config: null
214
+ }
215
+ const result = await state.transformer.transform({
216
+ asset: mutableAsset,
217
+ config,
218
+ get resolve() {
219
+ throw new Error('Transformer.transform.resolve()');
220
+ },
221
+ ...defaultOptions
222
+ });
223
+ if (transformer.generate) {
224
+ const ast = await mutableAsset.getAST();
225
+ if (!ast) {
226
+ throw new Error('Transformer.generate.ast');
227
+ }
228
+ // $FlowFixMe "Cannot call `transformer.generate` because undefined [1] is not a function." 🤷‍♀️
229
+ const output = await transformer.generate({
230
+ asset: mutableAsset,
231
+ ast,
232
+ ...defaultOptions
151
233
  });
152
- if (transformer.generate) {
153
- // $FlowFixMe
154
- let output = await transformer.generate({
155
- // $FlowFixMe
156
- asset: assetCompat,
157
- // $FlowFixMe
158
- ast: assetCompat.getAST()
159
- });
160
- // $FlowFixMe
161
- assetCompat.setCode(output.content);
234
+ if (typeof output.content === 'string') {
235
+ mutableAsset.setCode(output.content);
236
+ } else if (output.content instanceof Buffer) {
237
+ mutableAsset.setBuffer(output.content);
238
+ } else {
239
+ mutableAsset.setStream(output.content);
162
240
  }
163
- (0, _assert().default)(result.length === 1, '[V3] Unimplemented: Multiple asset return from Node transformer');
164
- (0, _assert().default)(result[0] === assetCompat, '[V3] Unimplemented: New asset returned from Node transformer');
165
- return {
166
- asset,
167
- dependencies: assetCompat._dependencies
168
- };
169
- } catch (e) {
170
- // TODO: Improve error logging from JS plugins. Without this you currently
171
- // only see the error message, no stack trace.
172
- // eslint-disable-next-line no-console
173
- console.error(e);
174
- throw e;
175
241
  }
176
- }
242
+ (0, _assert().default)(result.length === 1, '[V3] Unimplemented: Multiple asset return from Node transformer');
243
+ (0, _assert().default)(result[0] === mutableAsset, '[V3] Unimplemented: New asset returned from Node transformer');
244
+ return {
245
+ asset: {
246
+ id: mutableAsset.id,
247
+ bundleBehavior: _compat.bundleBehaviorMap.intoNullable(mutableAsset.bundleBehavior),
248
+ filePath: mutableAsset.filePath,
249
+ type: mutableAsset.type,
250
+ code: Array.from(await mutableAsset.getBuffer()),
251
+ meta: mutableAsset.meta,
252
+ pipeline: mutableAsset.pipeline,
253
+ query: mutableAsset.query.toString(),
254
+ symbols: mutableAsset.symbols.intoNapi(),
255
+ uniqueKey: mutableAsset.uniqueKey,
256
+ sideEffects: mutableAsset.sideEffects,
257
+ isBundleSplittable: mutableAsset.isBundleSplittable,
258
+ isSource: mutableAsset.isSource
259
+ }
260
+ };
261
+ });
177
262
  }
178
263
  exports.AtlaspackWorker = AtlaspackWorker;
179
- napi().registerWorker(_worker_threads().workerData.tx_worker, new AtlaspackWorker());
180
- const PriorityMap = {
181
- sync: 0,
182
- parallel: 1,
183
- lazy: 2,
184
- conditional: 3
185
- };
264
+ napi().registerWorker(_worker_threads().workerData.tx_worker, new AtlaspackWorker());
@@ -27,14 +27,22 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
27
27
  * A path that's relative to the project root.
28
28
  */
29
29
  function toProjectPath_(projectRoot, p) {
30
+ // If the file path is not provided, then treat it as though it is already from the project root
30
31
  if (p == null) {
31
32
  return p;
32
33
  }
33
34
 
34
- // If the file is outside the project root, store an absolute path rather
35
- // than a relative one. This way if the project root is moved, the file
36
- // references still work. Accessing files outside the project root is not
37
- // portable anyway.
35
+ // If the file path is already relative and it does not begin with . then treat the path as if it
36
+ // is already from the project root. This prevents relative paths from being processed twice,
37
+ // most often within `toInternalSourceLocation` when handling loc types from symbols and asset
38
+ // dependencies.
39
+ if (p[0] !== '.' && !_path().default.isAbsolute(p)) {
40
+ return p;
41
+ }
42
+
43
+ // If the file is outside the project root, store an absolute path rather than a relative one.
44
+ // This way if the project root is moved, the file references still work. Accessing files outside
45
+ // the project root is not portable anyway.
38
46
  let relative = (0, _utils().relativePath)(projectRoot, p, false);
39
47
  if (relative.startsWith('..')) {
40
48
  return process.platform === 'win32' ? (0, _utils().normalizeSeparators)(p) : p;
@@ -15,7 +15,7 @@ function _utils() {
15
15
  };
16
16
  return data;
17
17
  }
18
- var _serializer = require("../serializer.js");
18
+ var _serializer = require("../serializer");
19
19
  function _logger() {
20
20
  const data = require("@atlaspack/logger");
21
21
  _logger = function () {
@@ -4,14 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = createWriteBundleRequest;
7
- exports.replaceStream = replaceStream;
8
- function _rust() {
9
- const data = require("@atlaspack/rust");
10
- _rust = function () {
11
- return data;
12
- };
13
- return data;
14
- }
15
7
  var _constants = require("../constants");
16
8
  function _nullthrows() {
17
9
  const data = _interopRequireDefault(require("nullthrows"));
@@ -135,8 +127,16 @@ async function run({
135
127
  let writeOptions = publicBundle.env.isBrowser() || !mainEntry ? undefined : {
136
128
  mode: (await inputFS.stat(mainEntry.filePath)).mode
137
129
  };
138
- const contents = await options.cache.getBlob(cacheKeys.content);
139
- const size = contents.byteLength;
130
+ let contentStream;
131
+ if (info.isLargeBlob) {
132
+ contentStream = options.cache.getStream(cacheKeys.content);
133
+ } else {
134
+ contentStream = (0, _utils().blobToStream)(await options.cache.getBlob(cacheKeys.content));
135
+ }
136
+ let size = 0;
137
+ contentStream = contentStream.pipe(new (_utils().TapStream)(buf => {
138
+ size += buf.length;
139
+ }));
140
140
  let configResult = (0, _nullthrows().default)(await api.runRequest((0, _AtlaspackConfigRequest.default)()));
141
141
  let config = (0, _AtlaspackConfigRequest.getCachedAtlaspackConfig)(configResult, options);
142
142
  let {
@@ -144,9 +144,9 @@ async function run({
144
144
  invalidDevDeps
145
145
  } = await (0, _DevDepRequest.getDevDepRequests)(api);
146
146
  (0, _DevDepRequest.invalidateDevDeps)(invalidDevDeps, options, config);
147
- await writeFiles(contents, info, hashRefToNameHash, options, config, outputFS, filePath, writeOptions, devDeps, api);
147
+ await writeFiles(contentStream, info, hashRefToNameHash, options, config, outputFS, filePath, writeOptions, devDeps, api);
148
148
  if (mapKey && bundle.env.sourceMap && !bundle.env.sourceMap.inline && (await options.cache.has(mapKey))) {
149
- await writeFiles(await options.cache.getBlob(mapKey), info, hashRefToNameHash, options, config, outputFS, (0, _projectPath.toProjectPathUnsafe)((0, _projectPath.fromProjectPathRelative)(filePath) + '.map'), writeOptions, devDeps, api);
149
+ await writeFiles((0, _utils().blobToStream)(await options.cache.getBlob(mapKey)), info, hashRefToNameHash, options, config, outputFS, (0, _projectPath.toProjectPathUnsafe)((0, _projectPath.fromProjectPathRelative)(filePath) + '.map'), writeOptions, devDeps, api);
150
150
  }
151
151
  let res = {
152
152
  filePath,
@@ -159,13 +159,13 @@ async function run({
159
159
  api.storeResult(res);
160
160
  return res;
161
161
  }
162
- async function writeFiles(contents, info, hashRefToNameHash, options, config, outputFS, filePath, writeOptions, devDeps, api) {
162
+ async function writeFiles(inputStream, info, hashRefToNameHash, options, config, outputFS, filePath, writeOptions, devDeps, api) {
163
163
  let compressors = await config.getCompressors((0, _projectPath.fromProjectPathRelative)(filePath));
164
164
  let fullPath = (0, _projectPath.fromProjectPath)(options.projectRoot, filePath);
165
- const stream = info.hashReferences.length ? (0, _rust().replaceHashReferences)(contents, Object.fromEntries(hashRefToNameHash.entries())) : contents;
165
+ let stream = info.hashReferences.length ? inputStream.pipe(replaceStream(hashRefToNameHash)) : inputStream;
166
166
  let promises = [];
167
167
  for (let compressor of compressors) {
168
- promises.push(runCompressor(compressor, (0, _utils().blobToStream)(stream), options, outputFS, fullPath, writeOptions, devDeps, api));
168
+ promises.push(runCompressor(compressor, cloneStream(stream), options, outputFS, fullPath, writeOptions, devDeps, api));
169
169
  }
170
170
  await Promise.all(promises);
171
171
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaspack/core",
3
- "version": "2.12.1-dev.3443+d1170cfc7",
3
+ "version": "2.12.1-dev.3460+340817991",
4
4
  "license": "(MIT OR Apache-2.0)",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -20,20 +20,20 @@
20
20
  "check-ts": "tsc --noEmit index.d.ts"
21
21
  },
22
22
  "dependencies": {
23
- "@atlaspack/cache": "2.12.1-dev.3443+d1170cfc7",
24
- "@atlaspack/diagnostic": "2.12.1-dev.3443+d1170cfc7",
25
- "@atlaspack/events": "2.12.1-dev.3443+d1170cfc7",
26
- "@atlaspack/feature-flags": "2.12.1-dev.3443+d1170cfc7",
27
- "@atlaspack/fs": "2.12.1-dev.3443+d1170cfc7",
28
- "@atlaspack/graph": "3.2.1-dev.3443+d1170cfc7",
29
- "@atlaspack/logger": "2.12.1-dev.3443+d1170cfc7",
30
- "@atlaspack/package-manager": "2.12.1-dev.3443+d1170cfc7",
31
- "@atlaspack/plugin": "2.12.1-dev.3443+d1170cfc7",
32
- "@atlaspack/profiler": "2.12.1-dev.3443+d1170cfc7",
33
- "@atlaspack/rust": "2.12.1-dev.3443+d1170cfc7",
34
- "@atlaspack/types": "2.12.1-dev.3443+d1170cfc7",
35
- "@atlaspack/utils": "2.12.1-dev.3443+d1170cfc7",
36
- "@atlaspack/workers": "2.12.1-dev.3443+d1170cfc7",
23
+ "@atlaspack/cache": "2.12.1-dev.3460+340817991",
24
+ "@atlaspack/diagnostic": "2.12.1-dev.3460+340817991",
25
+ "@atlaspack/events": "2.12.1-dev.3460+340817991",
26
+ "@atlaspack/feature-flags": "2.12.1-dev.3460+340817991",
27
+ "@atlaspack/fs": "2.12.1-dev.3460+340817991",
28
+ "@atlaspack/graph": "3.2.1-dev.3460+340817991",
29
+ "@atlaspack/logger": "2.12.1-dev.3460+340817991",
30
+ "@atlaspack/package-manager": "2.12.1-dev.3460+340817991",
31
+ "@atlaspack/plugin": "2.12.1-dev.3460+340817991",
32
+ "@atlaspack/profiler": "2.12.1-dev.3460+340817991",
33
+ "@atlaspack/rust": "2.12.1-dev.3460+340817991",
34
+ "@atlaspack/types": "2.12.1-dev.3460+340817991",
35
+ "@atlaspack/utils": "2.12.1-dev.3460+340817991",
36
+ "@atlaspack/workers": "2.12.1-dev.3460+340817991",
37
37
  "@mischnic/json-sourcemap": "^0.1.0",
38
38
  "@parcel/source-map": "^2.1.1",
39
39
  "base-x": "^3.0.8",
@@ -54,8 +54,15 @@
54
54
  "rfdc": "1",
55
55
  "tempy": "^0.2.1"
56
56
  },
57
+ "exports": {
58
+ ".": "./lib/index.js",
59
+ "./worker": {
60
+ "development": "./src/worker.js",
61
+ "default": "./lib/worker.js"
62
+ }
63
+ },
57
64
  "browser": {
58
65
  "./src/serializerCore.js": "./src/serializerCore.browser.js"
59
66
  },
60
- "gitHead": "d1170cfc79beb290b2a066f472f68f71f7d7cb23"
67
+ "gitHead": "3408179911d6c67e2bdad99e545dd7a0a9a6782c"
61
68
  }
package/src/AssetGraph.js CHANGED
@@ -168,13 +168,15 @@ export default class AssetGraph extends ContentGraph<AssetGraphNode> {
168
168
  nodes.push(node);
169
169
  }
170
170
  } else if (assetGroups) {
171
- nodes.push(
172
- ...assetGroups.map(assetGroup => nodeFromAssetGroup(assetGroup)),
173
- );
171
+ for (const assetGroup of assetGroups) {
172
+ // Adding nodes individually ensures we do not encounter a range stack size exceeded error
173
+ // when there are >100000 asset groups
174
+ nodes.push(nodeFromAssetGroup(assetGroup));
175
+ }
174
176
  }
175
177
  this.replaceNodeIdsConnectedTo(
176
178
  nullthrows(this.rootNodeId),
177
- nodes.map(node => this.addNode(node)),
179
+ nodes.map((node) => this.addNode(node)),
178
180
  );
179
181
  }
180
182
 
@@ -213,7 +215,7 @@ export default class AssetGraph extends ContentGraph<AssetGraphNode> {
213
215
 
214
216
  this.replaceNodeIdsConnectedTo(
215
217
  entrySpecifierNodeId,
216
- resolved.map(file => this.addNode(nodeFromEntryFile(file))),
218
+ resolved.map((file) => this.addNode(nodeFromEntryFile(file))),
217
219
  );
218
220
  }
219
221
 
@@ -222,7 +224,7 @@ export default class AssetGraph extends ContentGraph<AssetGraphNode> {
222
224
  targets: Array<Target>,
223
225
  correspondingRequest: string,
224
226
  ) {
225
- let depNodes = targets.map(target => {
227
+ let depNodes = targets.map((target) => {
226
228
  let node = nodeFromDep(
227
229
  // The passed project path is ignored in this case, because there is no `loc`
228
230
  createDependency('', {
@@ -254,7 +256,7 @@ export default class AssetGraph extends ContentGraph<AssetGraphNode> {
254
256
 
255
257
  this.replaceNodeIdsConnectedTo(
256
258
  entryNodeId,
257
- depNodes.map(node => this.addNode(node)),
259
+ depNodes.map((node) => this.addNode(node)),
258
260
  );
259
261
  }
260
262
 
@@ -340,7 +342,7 @@ export default class AssetGraph extends ContentGraph<AssetGraphNode> {
340
342
  let traversedNode = nullthrows(this.getNode(traversedNodeId));
341
343
  if (traversedNode.type === 'asset') {
342
344
  let hasDeferred = this.getNodeIdsConnectedFrom(traversedNodeId).some(
343
- childNodeId => {
345
+ (childNodeId) => {
344
346
  let childNode = nullthrows(this.getNode(childNodeId));
345
347
  return childNode.hasDeferred == null
346
348
  ? false
@@ -417,7 +419,7 @@ export default class AssetGraph extends ContentGraph<AssetGraphNode> {
417
419
 
418
420
  let deps = this.getIncomingDependencies(resolvedAsset);
419
421
 
420
- return deps.every(d => {
422
+ return deps.every((d) => {
421
423
  // If this dependency has already been through this process, and we
422
424
  // know it's not deferrable, then there's no need to re-check
423
425
  if (this.undeferredDependencies.has(d)) {
@@ -428,7 +430,7 @@ export default class AssetGraph extends ContentGraph<AssetGraphNode> {
428
430
  d.symbols &&
429
431
  !(d.env.isLibrary && d.isEntry) &&
430
432
  !d.symbols.has('*') &&
431
- ![...d.symbols.keys()].some(symbol => {
433
+ ![...d.symbols.keys()].some((symbol) => {
432
434
  let assetSymbol = resolvedAsset.symbols?.get(symbol)?.local;
433
435
  return assetSymbol != null && symbols.has(assetSymbol);
434
436
  });
@@ -532,7 +534,7 @@ export default class AssetGraph extends ContentGraph<AssetGraphNode> {
532
534
  };
533
535
  }
534
536
  let dependentAsset = dependentAssets.find(
535
- a => a.uniqueKey === dep.specifier,
537
+ (a) => a.uniqueKey === dep.specifier,
536
538
  );
537
539
  if (dependentAsset) {
538
540
  depNode.complete = true;
@@ -593,7 +595,7 @@ export default class AssetGraph extends ContentGraph<AssetGraphNode> {
593
595
  startNodeId: ?NodeId,
594
596
  ): ?TContext {
595
597
  return this.filteredTraverse(
596
- nodeId => {
598
+ (nodeId) => {
597
599
  let node = nullthrows(this.getNode(nodeId));
598
600
  return node.type === 'asset' ? node.value : null;
599
601
  },
@@ -631,7 +633,7 @@ export default class AssetGraph extends ContentGraph<AssetGraphNode> {
631
633
 
632
634
  let hash = new Hash();
633
635
  // TODO: sort??
634
- this.traverse(nodeId => {
636
+ this.traverse((nodeId) => {
635
637
  let node = nullthrows(this.getNode(nodeId));
636
638
  if (node.type === 'asset') {
637
639
  hash.writeString(nullthrows(node.value.outputHash));
package/src/Atlaspack.js CHANGED
@@ -1,5 +1,4 @@
1
1
  // @flow strict-local
2
-
3
2
  import type {
4
3
  Asset,
5
4
  AsyncSubscription,
@@ -58,7 +57,7 @@ import {
58
57
  } from './projectPath';
59
58
  import {tracer} from '@atlaspack/profiler';
60
59
  import {setFeatureFlags, DEFAULT_FEATURE_FLAGS} from '@atlaspack/feature-flags';
61
- import {AtlaspackV3, toFileSystemV3} from './atlaspack-v3';
60
+ import {AtlaspackV3, FileSystemV3} from './atlaspack-v3';
62
61
 
63
62
  registerCoreWithSerializer();
64
63
 
@@ -144,7 +143,7 @@ export default class Atlaspack {
144
143
  ? undefined
145
144
  : [entries],
146
145
  env: resolvedOptions.env,
147
- fs: inputFS && toFileSystemV3(inputFS),
146
+ fs: inputFS && new FileSystemV3(inputFS),
148
147
  defaultTargetOptions: {
149
148
  // $FlowFixMe projectPath is just a string
150
149
  distDir: resolvedOptions.defaultTargetOptions.distDir,
@@ -401,7 +400,7 @@ export default class Atlaspack {
401
400
  options,
402
401
  ),
403
402
  buildTime: Date.now() - startTime,
404
- requestBundle: async bundle => {
403
+ requestBundle: async (bundle) => {
405
404
  let bundleNode = bundleGraph._graph.getNodeByContentKey(bundle.id);
406
405
  invariant(bundleNode?.type === 'bundle', 'Bundle does not exist');
407
406
 
@@ -580,7 +579,7 @@ export default class Atlaspack {
580
579
  let res = await this.#requestTracker.runRequest(request, {
581
580
  force: true,
582
581
  });
583
- return res.map(asset =>
582
+ return res.map((asset) =>
584
583
  assetFromValue(asset, nullthrows(this.#resolvedOptions)),
585
584
  );
586
585
  }
@@ -648,7 +647,7 @@ export function createWorkerFarm(
648
647
  ...options,
649
648
  // $FlowFixMe
650
649
  workerPath: process.browser
651
- ? '@atlaspack/core/src/worker.js'
650
+ ? '@atlaspack/core/worker'
652
651
  : require.resolve('./worker'),
653
652
  });
654
653
  }