@atlaspack/core 2.26.0 → 2.26.1
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 +31 -0
- package/dist/SymbolPropagation.js +20 -17
- package/dist/atlaspack-v3/worker/worker.js +6 -1
- package/dist/requests/AssetGraphRequestRust.js +3 -49
- package/dist/requests/AtlaspackConfigRequest.js +21 -7
- package/lib/SymbolPropagation.js +20 -15
- package/lib/atlaspack-v3/worker/worker.js +9 -1
- package/lib/requests/AssetGraphRequestRust.js +4 -18
- package/lib/requests/AtlaspackConfigRequest.js +27 -7
- package/lib/types/atlaspack-v3/worker/worker.d.ts +2 -0
- package/package.json +13 -13
- package/src/SymbolPropagation.ts +28 -18
- package/src/atlaspack-v3/worker/worker.ts +8 -1
- package/src/requests/AssetGraphRequestRust.ts +4 -19
- package/src/requests/AtlaspackConfigRequest.ts +24 -7
- package/test/AtlaspackConfigRequest.test.ts +72 -0
- package/test/fixtures/config-with-reporters/.parcelrc +7 -0
- package/tsconfig.tsbuildinfo +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,36 @@
|
|
|
1
1
|
# @atlaspack/core
|
|
2
2
|
|
|
3
|
+
## 2.26.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#847](https://github.com/atlassian-labs/atlaspack/pull/847) [`9cd9521`](https://github.com/atlassian-labs/atlaspack/commit/9cd9521978f783046e2ae4ce78f2de7aeb07d073) Thanks [@marcins](https://github.com/marcins)! - Ensure feature flags are set in V3 workers
|
|
8
|
+
|
|
9
|
+
- [#844](https://github.com/atlassian-labs/atlaspack/pull/844) [`d0c7bea`](https://github.com/atlassian-labs/atlaspack/commit/d0c7bea04458255b4c5d4299600e734b5f919fe1) Thanks [@vykimnguyen](https://github.com/vykimnguyen)! - deduplicate reporters from config
|
|
10
|
+
|
|
11
|
+
- [#851](https://github.com/atlassian-labs/atlaspack/pull/851) [`1086c6a`](https://github.com/atlassian-labs/atlaspack/commit/1086c6a2c59271b63b3fb78e6acdb9d3a0dbf354) Thanks [@benjervis](https://github.com/benjervis)! - Remove asset groups from V3.
|
|
12
|
+
|
|
13
|
+
Asset groups were initially created to address the problem of a single asset being transformed into multiple assets (e.g. css modules).
|
|
14
|
+
|
|
15
|
+
This did the job, but means that an asset group is created for every single asset, and most groups only have a single asset inside.
|
|
16
|
+
This is a lot of unnecessary nodes, and we don't need to carry that over to the native rewrite.
|
|
17
|
+
|
|
18
|
+
This PR deletes the step that used to create them, and updates things like symbol prop to handle there potentially being no asset groups.
|
|
19
|
+
|
|
20
|
+
- Updated dependencies [[`02f6aa1`](https://github.com/atlassian-labs/atlaspack/commit/02f6aa1906953fc184d2b49c905c2ef815cb878d), [`58527ee`](https://github.com/atlassian-labs/atlaspack/commit/58527eec15c1aebaaadbeb63586f3082c16beae3), [`525898e`](https://github.com/atlassian-labs/atlaspack/commit/525898e33cc229a4bc938ae853732be36d20c01a), [`cfb39a0`](https://github.com/atlassian-labs/atlaspack/commit/cfb39a0d729eb620cf2ca1611750a2bf7a080d08), [`d0c7bea`](https://github.com/atlassian-labs/atlaspack/commit/d0c7bea04458255b4c5d4299600e734b5f919fe1), [`1086c6a`](https://github.com/atlassian-labs/atlaspack/commit/1086c6a2c59271b63b3fb78e6acdb9d3a0dbf354), [`9cd9521`](https://github.com/atlassian-labs/atlaspack/commit/9cd9521978f783046e2ae4ce78f2de7aeb07d073), [`5776be2`](https://github.com/atlassian-labs/atlaspack/commit/5776be21f70a3f2b9471ba33da3ba1a883f21f1a)]:
|
|
21
|
+
- @atlaspack/rust@3.9.0
|
|
22
|
+
- @atlaspack/feature-flags@2.26.0
|
|
23
|
+
- @atlaspack/utils@3.1.0
|
|
24
|
+
- @atlaspack/cache@3.2.31
|
|
25
|
+
- @atlaspack/fs@2.15.31
|
|
26
|
+
- @atlaspack/logger@2.14.28
|
|
27
|
+
- @atlaspack/graph@3.5.25
|
|
28
|
+
- @atlaspack/package-manager@2.14.36
|
|
29
|
+
- @atlaspack/workers@2.14.36
|
|
30
|
+
- @atlaspack/plugin@2.14.36
|
|
31
|
+
- @atlaspack/profiler@2.14.33
|
|
32
|
+
- @atlaspack/types@2.15.26
|
|
33
|
+
|
|
3
34
|
## 2.26.0
|
|
4
35
|
|
|
5
36
|
### Minor Changes
|
|
@@ -345,17 +345,16 @@ function propagateSymbols({ options, assetGraph, changedAssetsPropagation, asset
|
|
|
345
345
|
incomingDep.excluded = false;
|
|
346
346
|
if (incomingDep.value.symbols != null &&
|
|
347
347
|
incomingDep.usedSymbolsUp.size === 0) {
|
|
348
|
-
let
|
|
349
|
-
|
|
350
|
-
let
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
(0, assert_1.default)(assetGroups.length === 0);
|
|
348
|
+
let connectedNodeIds = assetGraph.getNodeIdsConnectedFrom(assetGraph.getNodeIdByContentKey(incomingDep.id));
|
|
349
|
+
let sideEffectFree = connectedNodeIds.every((nodeId) => {
|
|
350
|
+
let connectedNode = (0, nullthrows_1.default)(assetGraph.getNode(nodeId));
|
|
351
|
+
// Dependencies should only connect to asset_groups or assets
|
|
352
|
+
(0, assert_1.default)(connectedNode.type === 'asset' ||
|
|
353
|
+
connectedNode.type === 'asset_group');
|
|
354
|
+
return connectedNode.value.sideEffects === false;
|
|
355
|
+
});
|
|
356
|
+
if (sideEffectFree) {
|
|
357
|
+
incomingDep.excluded = true;
|
|
359
358
|
}
|
|
360
359
|
}
|
|
361
360
|
}
|
|
@@ -566,18 +565,22 @@ function propagateSymbolsUp(assetGraph, changedAssets, changedDepsUsedSymbolsUpD
|
|
|
566
565
|
function getDependencyResolution(graph, depId) {
|
|
567
566
|
let depNodeId = graph.getNodeIdByContentKey(depId);
|
|
568
567
|
let connected = graph.getNodeIdsConnectedFrom(depNodeId);
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
568
|
+
let resolvedNodeIds = [];
|
|
569
|
+
// If any of the resolved nodes is an asset_group, we need to resolve its
|
|
570
|
+
// assets here.
|
|
571
|
+
for (let child of connected) {
|
|
572
|
+
if (!child) {
|
|
573
|
+
continue;
|
|
574
|
+
}
|
|
572
575
|
let childNode = (0, nullthrows_1.default)(graph.getNode(child));
|
|
573
576
|
if (childNode.type === 'asset_group') {
|
|
574
|
-
|
|
577
|
+
resolvedNodeIds.push(...graph.getNodeIdsConnectedFrom(child));
|
|
575
578
|
}
|
|
576
579
|
else {
|
|
577
|
-
|
|
580
|
+
resolvedNodeIds.push(child);
|
|
578
581
|
}
|
|
579
582
|
}
|
|
580
|
-
return
|
|
583
|
+
return resolvedNodeIds;
|
|
581
584
|
}
|
|
582
585
|
function equalMap(a, b) {
|
|
583
586
|
if (a.size !== b.size)
|
|
@@ -63,7 +63,7 @@ class AtlaspackWorker {
|
|
|
63
63
|
_AtlaspackWorker_resolvers.set(this, void 0);
|
|
64
64
|
_AtlaspackWorker_transformers.set(this, void 0);
|
|
65
65
|
_AtlaspackWorker_fs.set(this, void 0);
|
|
66
|
-
this.loadPlugin = (0, jsCallable_1.jsCallable)(async ({ kind, specifier, resolveFrom }) => {
|
|
66
|
+
this.loadPlugin = (0, jsCallable_1.jsCallable)(async ({ kind, specifier, resolveFrom, featureFlags }) => {
|
|
67
67
|
let customRequire = module.createRequire(resolveFrom);
|
|
68
68
|
let resolvedPath = customRequire.resolve(specifier);
|
|
69
69
|
let resolvedModule = await import(resolvedPath);
|
|
@@ -79,6 +79,11 @@ class AtlaspackWorker {
|
|
|
79
79
|
else {
|
|
80
80
|
throw new Error(`Plugin could not be resolved\n\t${kind}\n\t${resolveFrom}\n\t${specifier}`);
|
|
81
81
|
}
|
|
82
|
+
// Set feature flags in the worker process
|
|
83
|
+
if (featureFlags) {
|
|
84
|
+
const { setFeatureFlags } = await import('@atlaspack/feature-flags');
|
|
85
|
+
setFeatureFlags(featureFlags);
|
|
86
|
+
}
|
|
82
87
|
switch (kind) {
|
|
83
88
|
case 'resolver':
|
|
84
89
|
__classPrivateFieldGet(this, _AtlaspackWorker_resolvers, "f").set(specifier, { resolver: instance });
|
|
@@ -1,37 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
4
|
};
|
|
@@ -42,7 +9,7 @@ const assert_1 = __importDefault(require("assert"));
|
|
|
42
9
|
const diagnostic_1 = __importDefault(require("@atlaspack/diagnostic"));
|
|
43
10
|
const logger_1 = require("@atlaspack/logger");
|
|
44
11
|
const feature_flags_1 = require("@atlaspack/feature-flags");
|
|
45
|
-
const AssetGraph_1 =
|
|
12
|
+
const AssetGraph_1 = __importDefault(require("../AssetGraph"));
|
|
46
13
|
const RequestTracker_1 = require("../RequestTracker");
|
|
47
14
|
const SymbolPropagation_1 = require("../SymbolPropagation");
|
|
48
15
|
const EnvironmentManager_1 = require("../EnvironmentManager");
|
|
@@ -219,24 +186,11 @@ function getAssetGraph(serializedGraph) {
|
|
|
219
186
|
let toNode = graph.getNode(to);
|
|
220
187
|
if (fromNode?.type === 'dependency') {
|
|
221
188
|
(0, assert_1.default)(toNode?.type === 'asset');
|
|
222
|
-
// For backwards compatibility, create asset group node if needed.
|
|
223
|
-
let assetGroupNode = (0, AssetGraph_1.nodeFromAssetGroup)({
|
|
224
|
-
filePath: toNode.value.filePath,
|
|
225
|
-
env: fromNode.value.env,
|
|
226
|
-
pipeline: toNode.value.pipeline,
|
|
227
|
-
sideEffects: Boolean(toNode.value.sideEffects),
|
|
228
|
-
});
|
|
229
|
-
let index = graph.addNodeByContentKeyIfNeeded(assetGroupNode.id, assetGroupNode);
|
|
230
|
-
graph.addEdge(from, index);
|
|
231
|
-
graph.addEdge(index, to);
|
|
232
189
|
}
|
|
233
|
-
|
|
190
|
+
if (fromNode?.type === 'asset' && toNode?.type === 'dependency') {
|
|
234
191
|
fromNode.value.dependencies.set(toNode.value.id, toNode.value);
|
|
235
|
-
graph.addEdge(from, to);
|
|
236
|
-
}
|
|
237
|
-
else {
|
|
238
|
-
graph.addEdge(from, to);
|
|
239
192
|
}
|
|
193
|
+
graph.addEdge(from, to);
|
|
240
194
|
}
|
|
241
195
|
return {
|
|
242
196
|
assetGraph: graph,
|
|
@@ -141,13 +141,27 @@ async function resolveAtlaspackConfig(options) {
|
|
|
141
141
|
}
|
|
142
142
|
let { config, extendedFiles } = await parseAndProcessConfig(configPath, contents, options);
|
|
143
143
|
if (options.additionalReporters.length > 0) {
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
resolveFrom
|
|
148
|
-
})
|
|
149
|
-
|
|
150
|
-
|
|
144
|
+
if (options.featureFlags.deduplicateReporters) {
|
|
145
|
+
const reporterMap = new Map();
|
|
146
|
+
options.additionalReporters.forEach(({ packageName, resolveFrom }) => {
|
|
147
|
+
reporterMap.set(packageName, { packageName, resolveFrom });
|
|
148
|
+
});
|
|
149
|
+
config.reporters?.forEach((reporter) => {
|
|
150
|
+
if (!reporterMap.has(reporter.packageName)) {
|
|
151
|
+
reporterMap.set(reporter.packageName, reporter);
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
config.reporters = Array.from(reporterMap.values());
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
config.reporters = [
|
|
158
|
+
...options.additionalReporters.map(({ packageName, resolveFrom }) => ({
|
|
159
|
+
packageName,
|
|
160
|
+
resolveFrom,
|
|
161
|
+
})),
|
|
162
|
+
...(config.reporters ?? []),
|
|
163
|
+
];
|
|
164
|
+
}
|
|
151
165
|
}
|
|
152
166
|
return { config, extendedFiles, usedDefault };
|
|
153
167
|
}
|
package/lib/SymbolPropagation.js
CHANGED
|
@@ -383,15 +383,15 @@ function propagateSymbols({
|
|
|
383
383
|
}
|
|
384
384
|
incomingDep.excluded = false;
|
|
385
385
|
if (incomingDep.value.symbols != null && incomingDep.usedSymbolsUp.size === 0) {
|
|
386
|
-
let
|
|
387
|
-
|
|
388
|
-
let
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
386
|
+
let connectedNodeIds = assetGraph.getNodeIdsConnectedFrom(assetGraph.getNodeIdByContentKey(incomingDep.id));
|
|
387
|
+
let sideEffectFree = connectedNodeIds.every(nodeId => {
|
|
388
|
+
let connectedNode = (0, _nullthrows().default)(assetGraph.getNode(nodeId));
|
|
389
|
+
// Dependencies should only connect to asset_groups or assets
|
|
390
|
+
(0, _assert().default)(connectedNode.type === 'asset' || connectedNode.type === 'asset_group');
|
|
391
|
+
return connectedNode.value.sideEffects === false;
|
|
392
|
+
});
|
|
393
|
+
if (sideEffectFree) {
|
|
394
|
+
incomingDep.excluded = true;
|
|
395
395
|
}
|
|
396
396
|
}
|
|
397
397
|
}
|
|
@@ -590,17 +590,22 @@ function propagateSymbolsUp(assetGraph, changedAssets, changedDepsUsedSymbolsUpD
|
|
|
590
590
|
function getDependencyResolution(graph, depId) {
|
|
591
591
|
let depNodeId = graph.getNodeIdByContentKey(depId);
|
|
592
592
|
let connected = graph.getNodeIdsConnectedFrom(depNodeId);
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
593
|
+
let resolvedNodeIds = [];
|
|
594
|
+
|
|
595
|
+
// If any of the resolved nodes is an asset_group, we need to resolve its
|
|
596
|
+
// assets here.
|
|
597
|
+
for (let child of connected) {
|
|
598
|
+
if (!child) {
|
|
599
|
+
continue;
|
|
600
|
+
}
|
|
596
601
|
let childNode = (0, _nullthrows().default)(graph.getNode(child));
|
|
597
602
|
if (childNode.type === 'asset_group') {
|
|
598
|
-
|
|
603
|
+
resolvedNodeIds.push(...graph.getNodeIdsConnectedFrom(child));
|
|
599
604
|
} else {
|
|
600
|
-
|
|
605
|
+
resolvedNodeIds.push(child);
|
|
601
606
|
}
|
|
602
607
|
}
|
|
603
|
-
return
|
|
608
|
+
return resolvedNodeIds;
|
|
604
609
|
}
|
|
605
610
|
function equalMap(a, b) {
|
|
606
611
|
if (a.size !== b.size) return false;
|
|
@@ -66,7 +66,8 @@ class AtlaspackWorker {
|
|
|
66
66
|
loadPlugin = (0, _jsCallable.jsCallable)(async ({
|
|
67
67
|
kind,
|
|
68
68
|
specifier,
|
|
69
|
-
resolveFrom
|
|
69
|
+
resolveFrom,
|
|
70
|
+
featureFlags
|
|
70
71
|
}) => {
|
|
71
72
|
let customRequire = _module().createRequire(resolveFrom);
|
|
72
73
|
let resolvedPath = customRequire.resolve(specifier);
|
|
@@ -79,6 +80,13 @@ class AtlaspackWorker {
|
|
|
79
80
|
} else {
|
|
80
81
|
throw new Error(`Plugin could not be resolved\n\t${kind}\n\t${resolveFrom}\n\t${specifier}`);
|
|
81
82
|
}
|
|
83
|
+
// Set feature flags in the worker process
|
|
84
|
+
if (featureFlags) {
|
|
85
|
+
const {
|
|
86
|
+
setFeatureFlags
|
|
87
|
+
} = await import('@atlaspack/feature-flags');
|
|
88
|
+
setFeatureFlags(featureFlags);
|
|
89
|
+
}
|
|
82
90
|
switch (kind) {
|
|
83
91
|
case 'resolver':
|
|
84
92
|
this.#resolvers.set(specifier, {
|
|
@@ -33,13 +33,11 @@ function _featureFlags() {
|
|
|
33
33
|
};
|
|
34
34
|
return data;
|
|
35
35
|
}
|
|
36
|
-
var _AssetGraph =
|
|
36
|
+
var _AssetGraph = _interopRequireDefault(require("../AssetGraph"));
|
|
37
37
|
var _RequestTracker = require("../RequestTracker");
|
|
38
38
|
var _SymbolPropagation = require("../SymbolPropagation");
|
|
39
39
|
var _EnvironmentManager = require("../EnvironmentManager");
|
|
40
40
|
var _Environment = require("../Environment");
|
|
41
|
-
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); }
|
|
42
|
-
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; }
|
|
43
41
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
44
42
|
function createAssetGraphRequestRust(rustAtlaspack) {
|
|
45
43
|
return input => ({
|
|
@@ -212,23 +210,11 @@ function getAssetGraph(serializedGraph) {
|
|
|
212
210
|
let toNode = graph.getNode(to);
|
|
213
211
|
if ((fromNode === null || fromNode === void 0 ? void 0 : fromNode.type) === 'dependency') {
|
|
214
212
|
(0, _assert().default)((toNode === null || toNode === void 0 ? void 0 : toNode.type) === 'asset');
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
let assetGroupNode = (0, _AssetGraph.nodeFromAssetGroup)({
|
|
218
|
-
filePath: toNode.value.filePath,
|
|
219
|
-
env: fromNode.value.env,
|
|
220
|
-
pipeline: toNode.value.pipeline,
|
|
221
|
-
sideEffects: Boolean(toNode.value.sideEffects)
|
|
222
|
-
});
|
|
223
|
-
let index = graph.addNodeByContentKeyIfNeeded(assetGroupNode.id, assetGroupNode);
|
|
224
|
-
graph.addEdge(from, index);
|
|
225
|
-
graph.addEdge(index, to);
|
|
226
|
-
} else if ((fromNode === null || fromNode === void 0 ? void 0 : fromNode.type) === 'asset' && (toNode === null || toNode === void 0 ? void 0 : toNode.type) === 'dependency') {
|
|
213
|
+
}
|
|
214
|
+
if ((fromNode === null || fromNode === void 0 ? void 0 : fromNode.type) === 'asset' && (toNode === null || toNode === void 0 ? void 0 : toNode.type) === 'dependency') {
|
|
227
215
|
fromNode.value.dependencies.set(toNode.value.id, toNode.value);
|
|
228
|
-
graph.addEdge(from, to);
|
|
229
|
-
} else {
|
|
230
|
-
graph.addEdge(from, to);
|
|
231
216
|
}
|
|
217
|
+
graph.addEdge(from, to);
|
|
232
218
|
}
|
|
233
219
|
return {
|
|
234
220
|
assetGraph: graph,
|
|
@@ -161,13 +161,33 @@ async function resolveAtlaspackConfig(options) {
|
|
|
161
161
|
extendedFiles
|
|
162
162
|
} = await parseAndProcessConfig(configPath, contents, options);
|
|
163
163
|
if (options.additionalReporters.length > 0) {
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
164
|
+
if (options.featureFlags.deduplicateReporters) {
|
|
165
|
+
var _config$reporters;
|
|
166
|
+
const reporterMap = new Map();
|
|
167
|
+
options.additionalReporters.forEach(({
|
|
168
|
+
packageName,
|
|
169
|
+
resolveFrom
|
|
170
|
+
}) => {
|
|
171
|
+
reporterMap.set(packageName, {
|
|
172
|
+
packageName,
|
|
173
|
+
resolveFrom
|
|
174
|
+
});
|
|
175
|
+
});
|
|
176
|
+
(_config$reporters = config.reporters) === null || _config$reporters === void 0 || _config$reporters.forEach(reporter => {
|
|
177
|
+
if (!reporterMap.has(reporter.packageName)) {
|
|
178
|
+
reporterMap.set(reporter.packageName, reporter);
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
config.reporters = Array.from(reporterMap.values());
|
|
182
|
+
} else {
|
|
183
|
+
config.reporters = [...options.additionalReporters.map(({
|
|
184
|
+
packageName,
|
|
185
|
+
resolveFrom
|
|
186
|
+
}) => ({
|
|
187
|
+
packageName,
|
|
188
|
+
resolveFrom
|
|
189
|
+
})), ...(config.reporters ?? [])];
|
|
190
|
+
}
|
|
171
191
|
}
|
|
172
192
|
return {
|
|
173
193
|
config,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as napi from '@atlaspack/rust';
|
|
2
2
|
import type { JsCallable } from '@atlaspack/rust';
|
|
3
3
|
import type { FilePath } from '@atlaspack/types';
|
|
4
|
+
import { FeatureFlags } from '@atlaspack/feature-flags';
|
|
4
5
|
export declare class AtlaspackWorker {
|
|
5
6
|
#private;
|
|
6
7
|
constructor();
|
|
@@ -18,6 +19,7 @@ type LoadPluginOptions = {
|
|
|
18
19
|
kind: 'resolver' | 'transformer';
|
|
19
20
|
specifier: string;
|
|
20
21
|
resolveFrom: string;
|
|
22
|
+
featureFlags?: FeatureFlags;
|
|
21
23
|
};
|
|
22
24
|
type RpcPluginOptions = {
|
|
23
25
|
projectRoot: string;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlaspack/core",
|
|
3
|
-
"version": "2.26.
|
|
3
|
+
"version": "2.26.1",
|
|
4
4
|
"license": "(MIT OR Apache-2.0)",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -24,20 +24,20 @@
|
|
|
24
24
|
"dependencies": {
|
|
25
25
|
"@mischnic/json-sourcemap": "^0.1.0",
|
|
26
26
|
"@atlaspack/build-cache": "2.13.6",
|
|
27
|
-
"@atlaspack/cache": "3.2.
|
|
27
|
+
"@atlaspack/cache": "3.2.31",
|
|
28
28
|
"@atlaspack/diagnostic": "2.14.4",
|
|
29
29
|
"@atlaspack/events": "2.14.4",
|
|
30
|
-
"@atlaspack/feature-flags": "2.
|
|
31
|
-
"@atlaspack/fs": "2.15.
|
|
32
|
-
"@atlaspack/graph": "3.5.
|
|
33
|
-
"@atlaspack/logger": "2.14.
|
|
34
|
-
"@atlaspack/package-manager": "2.14.
|
|
35
|
-
"@atlaspack/plugin": "2.14.
|
|
36
|
-
"@atlaspack/profiler": "2.14.
|
|
37
|
-
"@atlaspack/rust": "3.
|
|
38
|
-
"@atlaspack/types": "2.15.
|
|
39
|
-
"@atlaspack/utils": "3.0
|
|
40
|
-
"@atlaspack/workers": "2.14.
|
|
30
|
+
"@atlaspack/feature-flags": "2.26.0",
|
|
31
|
+
"@atlaspack/fs": "2.15.31",
|
|
32
|
+
"@atlaspack/graph": "3.5.25",
|
|
33
|
+
"@atlaspack/logger": "2.14.28",
|
|
34
|
+
"@atlaspack/package-manager": "2.14.36",
|
|
35
|
+
"@atlaspack/plugin": "2.14.36",
|
|
36
|
+
"@atlaspack/profiler": "2.14.33",
|
|
37
|
+
"@atlaspack/rust": "3.9.0",
|
|
38
|
+
"@atlaspack/types": "2.15.26",
|
|
39
|
+
"@atlaspack/utils": "3.1.0",
|
|
40
|
+
"@atlaspack/workers": "2.14.36",
|
|
41
41
|
"@parcel/source-map": "^2.1.1",
|
|
42
42
|
"base-x": "^3.0.8",
|
|
43
43
|
"browserslist": "^4.6.6",
|
package/src/SymbolPropagation.ts
CHANGED
|
@@ -533,20 +533,22 @@ export function propagateSymbols({
|
|
|
533
533
|
incomingDep.value.symbols != null &&
|
|
534
534
|
incomingDep.usedSymbolsUp.size === 0
|
|
535
535
|
) {
|
|
536
|
-
let
|
|
536
|
+
let connectedNodeIds = assetGraph.getNodeIdsConnectedFrom(
|
|
537
537
|
assetGraph.getNodeIdByContentKey(incomingDep.id),
|
|
538
538
|
);
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
let
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
}
|
|
549
|
-
|
|
539
|
+
|
|
540
|
+
let sideEffectFree = connectedNodeIds.every((nodeId) => {
|
|
541
|
+
let connectedNode = nullthrows(assetGraph.getNode(nodeId));
|
|
542
|
+
// Dependencies should only connect to asset_groups or assets
|
|
543
|
+
invariant(
|
|
544
|
+
connectedNode.type === 'asset' ||
|
|
545
|
+
connectedNode.type === 'asset_group',
|
|
546
|
+
);
|
|
547
|
+
return connectedNode.value.sideEffects === false;
|
|
548
|
+
});
|
|
549
|
+
|
|
550
|
+
if (sideEffectFree) {
|
|
551
|
+
incomingDep.excluded = true;
|
|
550
552
|
}
|
|
551
553
|
}
|
|
552
554
|
}
|
|
@@ -807,17 +809,25 @@ function getDependencyResolution(
|
|
|
807
809
|
): Array<NodeId> {
|
|
808
810
|
let depNodeId = graph.getNodeIdByContentKey(depId);
|
|
809
811
|
let connected = graph.getNodeIdsConnectedFrom(depNodeId);
|
|
810
|
-
|
|
811
|
-
let
|
|
812
|
-
|
|
812
|
+
|
|
813
|
+
let resolvedNodeIds: Array<NodeId> = [];
|
|
814
|
+
|
|
815
|
+
// If any of the resolved nodes is an asset_group, we need to resolve its
|
|
816
|
+
// assets here.
|
|
817
|
+
for (let child of connected) {
|
|
818
|
+
if (!child) {
|
|
819
|
+
continue;
|
|
820
|
+
}
|
|
821
|
+
|
|
813
822
|
let childNode = nullthrows(graph.getNode(child));
|
|
814
823
|
if (childNode.type === 'asset_group') {
|
|
815
|
-
|
|
824
|
+
resolvedNodeIds.push(...graph.getNodeIdsConnectedFrom(child));
|
|
816
825
|
} else {
|
|
817
|
-
|
|
826
|
+
resolvedNodeIds.push(child);
|
|
818
827
|
}
|
|
819
828
|
}
|
|
820
|
-
|
|
829
|
+
|
|
830
|
+
return resolvedNodeIds;
|
|
821
831
|
}
|
|
822
832
|
|
|
823
833
|
function equalMap<K>(
|
|
@@ -25,6 +25,7 @@ import {
|
|
|
25
25
|
bundleBehaviorMap,
|
|
26
26
|
dependencyPriorityMap,
|
|
27
27
|
} from './compat';
|
|
28
|
+
import {FeatureFlags} from '@atlaspack/feature-flags';
|
|
28
29
|
|
|
29
30
|
const CONFIG = Symbol.for('parcel-plugin-config');
|
|
30
31
|
|
|
@@ -40,7 +41,7 @@ export class AtlaspackWorker {
|
|
|
40
41
|
}
|
|
41
42
|
|
|
42
43
|
loadPlugin: JsCallable<[LoadPluginOptions], Promise<undefined>> = jsCallable(
|
|
43
|
-
async ({kind, specifier, resolveFrom}) => {
|
|
44
|
+
async ({kind, specifier, resolveFrom, featureFlags}) => {
|
|
44
45
|
let customRequire = module.createRequire(resolveFrom);
|
|
45
46
|
let resolvedPath = customRequire.resolve(specifier);
|
|
46
47
|
let resolvedModule = await import(resolvedPath);
|
|
@@ -59,6 +60,11 @@ export class AtlaspackWorker {
|
|
|
59
60
|
`Plugin could not be resolved\n\t${kind}\n\t${resolveFrom}\n\t${specifier}`,
|
|
60
61
|
);
|
|
61
62
|
}
|
|
63
|
+
// Set feature flags in the worker process
|
|
64
|
+
if (featureFlags) {
|
|
65
|
+
const {setFeatureFlags} = await import('@atlaspack/feature-flags');
|
|
66
|
+
setFeatureFlags(featureFlags);
|
|
67
|
+
}
|
|
62
68
|
|
|
63
69
|
switch (kind) {
|
|
64
70
|
case 'resolver':
|
|
@@ -340,6 +346,7 @@ type LoadPluginOptions = {
|
|
|
340
346
|
kind: 'resolver' | 'transformer';
|
|
341
347
|
specifier: string;
|
|
342
348
|
resolveFrom: string;
|
|
349
|
+
featureFlags?: FeatureFlags;
|
|
343
350
|
};
|
|
344
351
|
|
|
345
352
|
type RpcPluginOptions = {
|
|
@@ -238,28 +238,13 @@ export function getAssetGraph(serializedGraph: any): {
|
|
|
238
238
|
|
|
239
239
|
if (fromNode?.type === 'dependency') {
|
|
240
240
|
invariant(toNode?.type === 'asset');
|
|
241
|
+
}
|
|
241
242
|
|
|
242
|
-
|
|
243
|
-
let assetGroupNode = nodeFromAssetGroup({
|
|
244
|
-
filePath: toNode.value.filePath,
|
|
245
|
-
env: fromNode.value.env,
|
|
246
|
-
pipeline: toNode.value.pipeline,
|
|
247
|
-
sideEffects: Boolean(toNode.value.sideEffects),
|
|
248
|
-
});
|
|
249
|
-
|
|
250
|
-
let index = graph.addNodeByContentKeyIfNeeded(
|
|
251
|
-
assetGroupNode.id,
|
|
252
|
-
assetGroupNode,
|
|
253
|
-
);
|
|
254
|
-
|
|
255
|
-
graph.addEdge(from, index);
|
|
256
|
-
graph.addEdge(index, to);
|
|
257
|
-
} else if (fromNode?.type === 'asset' && toNode?.type === 'dependency') {
|
|
243
|
+
if (fromNode?.type === 'asset' && toNode?.type === 'dependency') {
|
|
258
244
|
fromNode.value.dependencies.set(toNode.value.id, toNode.value);
|
|
259
|
-
graph.addEdge(from, to);
|
|
260
|
-
} else {
|
|
261
|
-
graph.addEdge(from, to);
|
|
262
245
|
}
|
|
246
|
+
|
|
247
|
+
graph.addEdge(from, to);
|
|
263
248
|
}
|
|
264
249
|
|
|
265
250
|
return {
|
|
@@ -12,6 +12,7 @@ import type {
|
|
|
12
12
|
PureAtlaspackConfigPipeline,
|
|
13
13
|
AtlaspackOptions,
|
|
14
14
|
ProcessedAtlaspackConfig,
|
|
15
|
+
AtlaspackPluginNode,
|
|
15
16
|
} from '../types';
|
|
16
17
|
|
|
17
18
|
import {createBuildCache} from '@atlaspack/build-cache';
|
|
@@ -197,13 +198,29 @@ export async function resolveAtlaspackConfig(
|
|
|
197
198
|
await parseAndProcessConfig(configPath, contents, options);
|
|
198
199
|
|
|
199
200
|
if (options.additionalReporters.length > 0) {
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
201
|
+
if (options.featureFlags.deduplicateReporters) {
|
|
202
|
+
const reporterMap = new Map<PackageName, AtlaspackPluginNode>();
|
|
203
|
+
|
|
204
|
+
options.additionalReporters.forEach(({packageName, resolveFrom}) => {
|
|
205
|
+
reporterMap.set(packageName, {packageName, resolveFrom});
|
|
206
|
+
});
|
|
207
|
+
|
|
208
|
+
config.reporters?.forEach((reporter) => {
|
|
209
|
+
if (!reporterMap.has(reporter.packageName)) {
|
|
210
|
+
reporterMap.set(reporter.packageName, reporter);
|
|
211
|
+
}
|
|
212
|
+
});
|
|
213
|
+
|
|
214
|
+
config.reporters = Array.from(reporterMap.values());
|
|
215
|
+
} else {
|
|
216
|
+
config.reporters = [
|
|
217
|
+
...options.additionalReporters.map(({packageName, resolveFrom}) => ({
|
|
218
|
+
packageName,
|
|
219
|
+
resolveFrom,
|
|
220
|
+
})),
|
|
221
|
+
...(config.reporters ?? []),
|
|
222
|
+
];
|
|
223
|
+
}
|
|
207
224
|
}
|
|
208
225
|
|
|
209
226
|
return {config, extendedFiles, usedDefault};
|