@atlaspack/runtime-js 2.15.3-typescript-bc4459c37.0 → 2.16.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 +24 -0
- package/lib/JSRuntime.js +24 -35
- package/package.json +10 -15
- package/src/{JSRuntime.ts → JSRuntime.js} +64 -73
- package/src/helpers/browser/analytics/analytics.js.flow +10 -0
- package/src/helpers/browser/preload-loader.js +2 -1
- package/test/{bundle-url.test.ts → bundle-url.test.js} +2 -1
- package/LICENSE +0 -201
- package/lib/JSRuntime.d.ts +0 -9
- package/tsconfig.json +0 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,29 @@
|
|
|
1
1
|
# @atlaspack/runtime-js
|
|
2
2
|
|
|
3
|
+
## 2.16.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#721](https://github.com/atlassian-labs/atlaspack/pull/721) [`069de47`](https://github.com/atlassian-labs/atlaspack/commit/069de478e64fb5889f6f2ce023eb510782767fbd) Thanks [@benjervis](https://github.com/benjervis)! - Add support for bundle merging based on `webpackChunkName` comments.
|
|
8
|
+
|
|
9
|
+
Adding a `webpackChunkName` comment to an import will allow the bundler to merge multiple imports into a single bundle.
|
|
10
|
+
|
|
11
|
+
e.g.:
|
|
12
|
+
|
|
13
|
+
```ts
|
|
14
|
+
import(/* webpackChunkName: "my-chunk" */ './my-module');
|
|
15
|
+
import(/* webpackChunkName: "my-chunk" */ './another-module');
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
This can be enabled with the feature flag `supportWebpackChunkName`.
|
|
19
|
+
|
|
20
|
+
### Patch Changes
|
|
21
|
+
|
|
22
|
+
- Updated dependencies [[`069de47`](https://github.com/atlassian-labs/atlaspack/commit/069de478e64fb5889f6f2ce023eb510782767fbd)]:
|
|
23
|
+
- @atlaspack/feature-flags@2.20.0
|
|
24
|
+
- @atlaspack/utils@2.17.3
|
|
25
|
+
- @atlaspack/plugin@2.14.21
|
|
26
|
+
|
|
3
27
|
## 2.15.2
|
|
4
28
|
|
|
5
29
|
### Patch Changes
|
package/lib/JSRuntime.js
CHANGED
|
@@ -76,10 +76,8 @@ const LOADERS = {
|
|
|
76
76
|
}
|
|
77
77
|
};
|
|
78
78
|
function getLoaders(ctx) {
|
|
79
|
-
// @ts-expect-error TS2322
|
|
80
79
|
if (ctx.isWorker()) return LOADERS.worker;
|
|
81
80
|
if (ctx.isBrowser()) return LOADERS.browser;
|
|
82
|
-
// @ts-expect-error TS2322
|
|
83
81
|
if (ctx.isNode()) return LOADERS.node;
|
|
84
82
|
return null;
|
|
85
83
|
}
|
|
@@ -210,8 +208,6 @@ var _default = exports.default = new (_plugin().Runtime)({
|
|
|
210
208
|
const conditions = bundleGraph.getConditionsForDependencies(conditionalDependencies, bundle);
|
|
211
209
|
for (const cond of conditions) {
|
|
212
210
|
const requireName = (0, _featureFlags().getFeatureFlag)('hmrImprovements') || bundle.env.shouldScopeHoist ? 'parcelRequire' : '__parcel__require__';
|
|
213
|
-
|
|
214
|
-
// @ts-expect-error TS7006
|
|
215
211
|
const fallbackUrls = cond => {
|
|
216
212
|
return `[${[...cond.ifTrueBundles, ...cond.ifFalseBundles].map(target => {
|
|
217
213
|
let relativePathExpr = getRelativePathExpr(bundle, target, options);
|
|
@@ -284,7 +280,9 @@ var _default = exports.default = new (_plugin().Runtime)({
|
|
|
284
280
|
}
|
|
285
281
|
|
|
286
282
|
// URL dependency or not, fall back to including a runtime that exports the url
|
|
287
|
-
assets.push(getURLRuntime(dependency, bundle, mainBundle, options,
|
|
283
|
+
assets.push(getURLRuntime(dependency, bundle, mainBundle, options,
|
|
284
|
+
// $FlowFixMe
|
|
285
|
+
config.domainSharding));
|
|
288
286
|
}
|
|
289
287
|
|
|
290
288
|
// In development, bundles can be created lazily. This means that the parent bundle may not
|
|
@@ -302,7 +300,9 @@ var _default = exports.default = new (_plugin().Runtime)({
|
|
|
302
300
|
continue;
|
|
303
301
|
}
|
|
304
302
|
let relativePathExpr = getRelativePathExpr(bundle, referencedBundle, options);
|
|
305
|
-
let loaderCode = `require(${JSON.stringify(loader)})(${getAbsoluteUrlExpr(relativePathExpr, bundle,
|
|
303
|
+
let loaderCode = `require(${JSON.stringify(loader)})(${getAbsoluteUrlExpr(relativePathExpr, bundle,
|
|
304
|
+
// $FlowFixMe
|
|
305
|
+
config.domainSharding)})`;
|
|
306
306
|
assets.push({
|
|
307
307
|
filePath: __filename,
|
|
308
308
|
code: loaderCode,
|
|
@@ -321,7 +321,9 @@ var _default = exports.default = new (_plugin().Runtime)({
|
|
|
321
321
|
env: {
|
|
322
322
|
sourceType: 'module'
|
|
323
323
|
},
|
|
324
|
-
priority: getManifestBundlePriority(bundleGraph, bundle,
|
|
324
|
+
priority: getManifestBundlePriority(bundleGraph, bundle,
|
|
325
|
+
// $FlowFixMe
|
|
326
|
+
config.splitManifestThreshold)
|
|
325
327
|
});
|
|
326
328
|
}
|
|
327
329
|
return assets;
|
|
@@ -373,10 +375,16 @@ function getLoaderRuntime({
|
|
|
373
375
|
return;
|
|
374
376
|
}
|
|
375
377
|
let externalBundles = bundleGraph.getBundlesInBundleGroup(bundleGroup);
|
|
376
|
-
let
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
}
|
|
378
|
+
let potentialMainBundle;
|
|
379
|
+
if ((0, _featureFlags().getFeatureFlag)('supportWebpackChunkName')) {
|
|
380
|
+
potentialMainBundle = externalBundles.find(bundle => bundle.getEntryAssets().some(asset => asset.id === bundleGroup.entryAssetId));
|
|
381
|
+
} else {
|
|
382
|
+
potentialMainBundle = externalBundles.find(bundle => {
|
|
383
|
+
var _bundle$getMainEntry;
|
|
384
|
+
return ((_bundle$getMainEntry = bundle.getMainEntry()) === null || _bundle$getMainEntry === void 0 ? void 0 : _bundle$getMainEntry.id) === bundleGroup.entryAssetId;
|
|
385
|
+
});
|
|
386
|
+
}
|
|
387
|
+
let mainBundle = (0, _nullthrows().default)(potentialMainBundle);
|
|
380
388
|
|
|
381
389
|
// CommonJS is a synchronous module system, so there is no need to load bundles in parallel.
|
|
382
390
|
// Importing of the other bundles will be handled by the bundle group entry.
|
|
@@ -401,7 +409,6 @@ function getLoaderRuntime({
|
|
|
401
409
|
let needsEsmLoadPrelude = false;
|
|
402
410
|
let loaderModules = [];
|
|
403
411
|
function getLoaderForBundle(bundle, to, shardingConfig) {
|
|
404
|
-
// @ts-expect-error TS18049
|
|
405
412
|
let loader = loaders[to.type];
|
|
406
413
|
if (!loader) {
|
|
407
414
|
return;
|
|
@@ -417,11 +424,7 @@ function getLoaderRuntime({
|
|
|
417
424
|
if (!needsDynamicImportPolyfill) {
|
|
418
425
|
return `__parcel__import__("./" + ${relativePathExpr})`;
|
|
419
426
|
}
|
|
420
|
-
|
|
421
|
-
// @ts-expect-error TS2322
|
|
422
|
-
loader = (0, _nullthrows().default)(
|
|
423
|
-
// @ts-expect-error TS18049
|
|
424
|
-
loaders.IMPORT_POLYFILL, `No import() polyfill available for context '${bundle.env.context}'`);
|
|
427
|
+
loader = (0, _nullthrows().default)(loaders.IMPORT_POLYFILL, `No import() polyfill available for context '${bundle.env.context}'`);
|
|
425
428
|
} else if (to.type === 'js' && to.env.outputFormat === 'commonjs') {
|
|
426
429
|
return `Promise.resolve(__parcel__require__("./" + ${relativePathExpr}))`;
|
|
427
430
|
}
|
|
@@ -455,16 +458,8 @@ function getLoaderRuntime({
|
|
|
455
458
|
const loaders = [];
|
|
456
459
|
for (const cond of conditions) {
|
|
457
460
|
// This bundle has a conditional dependency, we need to load the bundle group
|
|
458
|
-
const ifTrueLoaders = cond.ifTrueBundles.flatMap(targetBundle => getConditionalLoadersForCondition(getDependencies(targetBundle).conditionalDependencies, targetBundle)).concat(
|
|
459
|
-
|
|
460
|
-
cond.ifTrueBundles.map(targetBundle =>
|
|
461
|
-
// @ts-expect-error TS2554
|
|
462
|
-
getLoaderForBundle(sourceBundle, targetBundle)));
|
|
463
|
-
const ifFalseLoaders = cond.ifFalseBundles.flatMap(targetBundle => getConditionalLoadersForCondition(getDependencies(targetBundle).conditionalDependencies, targetBundle)).concat(
|
|
464
|
-
// @ts-expect-error TS2769
|
|
465
|
-
cond.ifFalseBundles.map(targetBundle =>
|
|
466
|
-
// @ts-expect-error TS2554
|
|
467
|
-
getLoaderForBundle(sourceBundle, targetBundle)));
|
|
461
|
+
const ifTrueLoaders = cond.ifTrueBundles.flatMap(targetBundle => getConditionalLoadersForCondition(getDependencies(targetBundle).conditionalDependencies, targetBundle)).concat(cond.ifTrueBundles.map(targetBundle => getLoaderForBundle(sourceBundle, targetBundle)));
|
|
462
|
+
const ifFalseLoaders = cond.ifFalseBundles.flatMap(targetBundle => getConditionalLoadersForCondition(getDependencies(targetBundle).conditionalDependencies, targetBundle)).concat(cond.ifFalseBundles.map(targetBundle => getLoaderForBundle(sourceBundle, targetBundle)));
|
|
468
463
|
if (ifTrueLoaders.length > 0 || ifFalseLoaders.length > 0) {
|
|
469
464
|
// Load conditional bundles with helper (and a dev mode with additional hints)
|
|
470
465
|
loaders.push(`require('./helpers/conditional-loader${options.mode === 'development' ? '-dev' : ''}')('${cond.key}', function (){return Promise.all([${ifTrueLoaders.join(',')}]);}, function (){return Promise.all([${ifFalseLoaders.join(',')}]);})`);
|
|
@@ -550,16 +545,14 @@ function getHintedBundleGroups(bundleGraph, bundle) {
|
|
|
550
545
|
var _dependency$meta;
|
|
551
546
|
let attributes = (_dependency$meta = dependency.meta) === null || _dependency$meta === void 0 ? void 0 : _dependency$meta.importAttributes;
|
|
552
547
|
if (typeof attributes === 'object' && attributes != null && (
|
|
553
|
-
//
|
|
548
|
+
// $FlowFixMe
|
|
554
549
|
attributes.preload || attributes.prefetch)) {
|
|
555
550
|
let resolved = bundleGraph.resolveAsyncDependency(dependency, bundle);
|
|
556
551
|
if ((resolved === null || resolved === void 0 ? void 0 : resolved.type) === 'bundle_group') {
|
|
557
552
|
// === true for flow
|
|
558
|
-
// @ts-expect-error TS2339
|
|
559
553
|
if (attributes.preload === true) {
|
|
560
554
|
preload.push(resolved.value);
|
|
561
555
|
}
|
|
562
|
-
// @ts-expect-error TS2339
|
|
563
556
|
if (attributes.prefetch === true) {
|
|
564
557
|
prefetch.push(resolved.value);
|
|
565
558
|
}
|
|
@@ -577,11 +570,8 @@ function getHintLoaders(bundleGraph, from, bundleGroups, loader, options) {
|
|
|
577
570
|
let bundlesToPreload = bundleGraph.getBundlesInBundleGroup(bundleGroupToPreload);
|
|
578
571
|
for (let bundleToPreload of bundlesToPreload) {
|
|
579
572
|
let relativePathExpr = getRelativePathExpr(from, bundleToPreload, options);
|
|
580
|
-
// @ts-expect-error TS7053
|
|
581
573
|
let priority = TYPE_TO_RESOURCE_PRIORITY[bundleToPreload.type];
|
|
582
|
-
hintLoaders.push(
|
|
583
|
-
// @ts-expect-error TS2554
|
|
584
|
-
`require(${JSON.stringify(loader)})(${getAbsoluteUrlExpr(relativePathExpr, from)}, ${priority ? JSON.stringify(priority) : 'null'}, ${JSON.stringify(bundleToPreload.target.env.outputFormat === 'esmodule')})`);
|
|
574
|
+
hintLoaders.push(`require(${JSON.stringify(loader)})(${getAbsoluteUrlExpr(relativePathExpr, from)}, ${priority ? JSON.stringify(priority) : 'null'}, ${JSON.stringify(bundleToPreload.target.env.outputFormat === 'esmodule')})`);
|
|
585
575
|
}
|
|
586
576
|
}
|
|
587
577
|
return hintLoaders;
|
|
@@ -625,7 +615,6 @@ function getURLRuntime(dependency, from, to, options, shardingConfig) {
|
|
|
625
615
|
};
|
|
626
616
|
}
|
|
627
617
|
function getRegisterCode(entryBundle, bundleGraph) {
|
|
628
|
-
// @ts-expect-error TS2304
|
|
629
618
|
let mappings = [];
|
|
630
619
|
bundleGraph.traverseBundles((bundle, _, actions) => {
|
|
631
620
|
if (bundle.bundleBehavior === 'inline') {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlaspack/runtime-js",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.16.0",
|
|
4
4
|
"license": "(MIT OR Apache-2.0)",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -9,23 +9,18 @@
|
|
|
9
9
|
"type": "git",
|
|
10
10
|
"url": "https://github.com/atlassian-labs/atlaspack.git"
|
|
11
11
|
},
|
|
12
|
-
"main": "
|
|
13
|
-
"source": "
|
|
14
|
-
"types": "./lib/JSRuntime.d.ts",
|
|
12
|
+
"main": "lib/JSRuntime.js",
|
|
13
|
+
"source": "src/JSRuntime.js",
|
|
15
14
|
"engines": {
|
|
16
15
|
"node": ">= 16.0.0"
|
|
17
16
|
},
|
|
18
17
|
"dependencies": {
|
|
19
|
-
"@atlaspack/diagnostic": "2.14.
|
|
20
|
-
"@atlaspack/domain-sharding": "2.14.
|
|
21
|
-
"@atlaspack/feature-flags": "2.
|
|
22
|
-
"@atlaspack/plugin": "2.14.21
|
|
23
|
-
"@atlaspack/utils": "2.17.3
|
|
18
|
+
"@atlaspack/diagnostic": "2.14.1",
|
|
19
|
+
"@atlaspack/domain-sharding": "2.14.1",
|
|
20
|
+
"@atlaspack/feature-flags": "2.20.0",
|
|
21
|
+
"@atlaspack/plugin": "2.14.21",
|
|
22
|
+
"@atlaspack/utils": "2.17.3",
|
|
24
23
|
"nullthrows": "^1.1.1"
|
|
25
24
|
},
|
|
26
|
-
"type": "commonjs"
|
|
27
|
-
|
|
28
|
-
"check-ts": "tsc --emitDeclarationOnly --rootDir src"
|
|
29
|
-
},
|
|
30
|
-
"gitHead": "bc4459c37a38ef1f74772126637e1d8841d1fcb0"
|
|
31
|
-
}
|
|
25
|
+
"type": "commonjs"
|
|
26
|
+
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
// @flow strict-local
|
|
1
2
|
import type {
|
|
2
3
|
BundleGraph,
|
|
3
4
|
BundleGroup,
|
|
@@ -12,7 +13,7 @@ import {Runtime} from '@atlaspack/plugin';
|
|
|
12
13
|
import {
|
|
13
14
|
relativeBundlePath,
|
|
14
15
|
validateSchema,
|
|
15
|
-
SchemaEntity,
|
|
16
|
+
type SchemaEntity,
|
|
16
17
|
} from '@atlaspack/utils';
|
|
17
18
|
import {encodeJSONKeyComponent} from '@atlaspack/diagnostic';
|
|
18
19
|
import path from 'path';
|
|
@@ -23,7 +24,7 @@ import {getFeatureFlag} from '@atlaspack/feature-flags';
|
|
|
23
24
|
const TYPE_TO_RESOURCE_PRIORITY = {
|
|
24
25
|
css: 'style',
|
|
25
26
|
js: 'script',
|
|
26
|
-
}
|
|
27
|
+
};
|
|
27
28
|
|
|
28
29
|
const BROWSER_PRELOAD_LOADER = './helpers/browser/preload-loader';
|
|
29
30
|
const BROWSER_PREFETCH_LOADER = './helpers/browser/prefetch-loader';
|
|
@@ -48,20 +49,13 @@ const LOADERS = {
|
|
|
48
49
|
wasm: './helpers/node/wasm-loader',
|
|
49
50
|
IMPORT_POLYFILL: null,
|
|
50
51
|
},
|
|
51
|
-
}
|
|
52
|
+
};
|
|
52
53
|
|
|
53
|
-
function getLoaders(
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
IMPORT_POLYFILL: null | false | string;
|
|
57
|
-
[key: string]: string;
|
|
58
|
-
}
|
|
59
|
-
| null
|
|
60
|
-
| undefined {
|
|
61
|
-
// @ts-expect-error TS2322
|
|
54
|
+
function getLoaders(
|
|
55
|
+
ctx: Environment,
|
|
56
|
+
): ?{[string]: string, IMPORT_POLYFILL: null | false | string, ...} {
|
|
62
57
|
if (ctx.isWorker()) return LOADERS.worker;
|
|
63
58
|
if (ctx.isBrowser()) return LOADERS.browser;
|
|
64
|
-
// @ts-expect-error TS2322
|
|
65
59
|
if (ctx.isNode()) return LOADERS.node;
|
|
66
60
|
return null;
|
|
67
61
|
}
|
|
@@ -70,19 +64,19 @@ function getLoaders(ctx: Environment):
|
|
|
70
64
|
// This can happen when we reuse the BundleGraph between subsequent builds
|
|
71
65
|
let bundleDependencies = new WeakMap<
|
|
72
66
|
NamedBundle,
|
|
73
|
-
{
|
|
74
|
-
asyncDependencies: Array<Dependency
|
|
75
|
-
conditionalDependencies: Array<Dependency
|
|
76
|
-
otherDependencies: Array<Dependency
|
|
77
|
-
}
|
|
67
|
+
{|
|
|
68
|
+
asyncDependencies: Array<Dependency>,
|
|
69
|
+
conditionalDependencies: Array<Dependency>,
|
|
70
|
+
otherDependencies: Array<Dependency>,
|
|
71
|
+
|},
|
|
78
72
|
>();
|
|
79
73
|
|
|
80
|
-
type JSRuntimeConfig = {
|
|
81
|
-
splitManifestThreshold: number
|
|
82
|
-
domainSharding?: {
|
|
83
|
-
maxShards: number
|
|
84
|
-
}
|
|
85
|
-
};
|
|
74
|
+
type JSRuntimeConfig = {|
|
|
75
|
+
splitManifestThreshold: number,
|
|
76
|
+
domainSharding?: {|
|
|
77
|
+
maxShards: number,
|
|
78
|
+
|},
|
|
79
|
+
|};
|
|
86
80
|
|
|
87
81
|
let defaultConfig: JSRuntimeConfig = {
|
|
88
82
|
splitManifestThreshold: 100000,
|
|
@@ -108,7 +102,7 @@ const CONFIG_SCHEMA: SchemaEntity = {
|
|
|
108
102
|
additionalProperties: false,
|
|
109
103
|
};
|
|
110
104
|
|
|
111
|
-
export default new Runtime({
|
|
105
|
+
export default (new Runtime({
|
|
112
106
|
async loadConfig({config, options}): Promise<JSRuntimeConfig> {
|
|
113
107
|
let packageKey = '@atlaspack/runtime-js';
|
|
114
108
|
let conf = await config.getConfig<JSRuntimeConfig>([], {
|
|
@@ -150,7 +144,7 @@ export default new Runtime({
|
|
|
150
144
|
let {asyncDependencies, conditionalDependencies, otherDependencies} =
|
|
151
145
|
getDependencies(bundle);
|
|
152
146
|
|
|
153
|
-
let assets
|
|
147
|
+
let assets = [];
|
|
154
148
|
for (let dependency of asyncDependencies) {
|
|
155
149
|
let resolved = bundleGraph.resolveAsyncDependency(dependency, bundle);
|
|
156
150
|
if (resolved == null) {
|
|
@@ -227,7 +221,6 @@ export default new Runtime({
|
|
|
227
221
|
? 'parcelRequire'
|
|
228
222
|
: '__parcel__require__';
|
|
229
223
|
|
|
230
|
-
// @ts-expect-error TS7006
|
|
231
224
|
const fallbackUrls = (cond) => {
|
|
232
225
|
return `[${[...cond.ifTrueBundles, ...cond.ifFalseBundles]
|
|
233
226
|
.map((target) => {
|
|
@@ -336,6 +329,7 @@ export default new Runtime({
|
|
|
336
329
|
bundle,
|
|
337
330
|
mainBundle,
|
|
338
331
|
options,
|
|
332
|
+
// $FlowFixMe
|
|
339
333
|
config.domainSharding,
|
|
340
334
|
),
|
|
341
335
|
);
|
|
@@ -367,6 +361,7 @@ export default new Runtime({
|
|
|
367
361
|
)})(${getAbsoluteUrlExpr(
|
|
368
362
|
relativePathExpr,
|
|
369
363
|
bundle,
|
|
364
|
+
// $FlowFixMe
|
|
370
365
|
config.domainSharding,
|
|
371
366
|
)})`;
|
|
372
367
|
assets.push({
|
|
@@ -393,6 +388,7 @@ export default new Runtime({
|
|
|
393
388
|
priority: getManifestBundlePriority(
|
|
394
389
|
bundleGraph,
|
|
395
390
|
bundle,
|
|
391
|
+
// $FlowFixMe
|
|
396
392
|
config.splitManifestThreshold,
|
|
397
393
|
),
|
|
398
394
|
});
|
|
@@ -400,21 +396,21 @@ export default new Runtime({
|
|
|
400
396
|
|
|
401
397
|
return assets;
|
|
402
398
|
},
|
|
403
|
-
})
|
|
399
|
+
}): Runtime<JSRuntimeConfig>);
|
|
404
400
|
|
|
405
|
-
function getDependencies(bundle: NamedBundle): {
|
|
406
|
-
asyncDependencies: Array<Dependency
|
|
407
|
-
conditionalDependencies: Array<Dependency
|
|
408
|
-
otherDependencies: Array<Dependency
|
|
409
|
-
} {
|
|
401
|
+
function getDependencies(bundle: NamedBundle): {|
|
|
402
|
+
asyncDependencies: Array<Dependency>,
|
|
403
|
+
conditionalDependencies: Array<Dependency>,
|
|
404
|
+
otherDependencies: Array<Dependency>,
|
|
405
|
+
|} {
|
|
410
406
|
let cachedDependencies = bundleDependencies.get(bundle);
|
|
411
407
|
|
|
412
408
|
if (cachedDependencies) {
|
|
413
409
|
return cachedDependencies;
|
|
414
410
|
} else {
|
|
415
|
-
let asyncDependencies
|
|
416
|
-
let otherDependencies
|
|
417
|
-
let conditionalDependencies
|
|
411
|
+
let asyncDependencies = [];
|
|
412
|
+
let otherDependencies = [];
|
|
413
|
+
let conditionalDependencies = [];
|
|
418
414
|
bundle.traverse((node) => {
|
|
419
415
|
if (node.type !== 'dependency') {
|
|
420
416
|
return;
|
|
@@ -448,25 +444,35 @@ function getLoaderRuntime({
|
|
|
448
444
|
bundleGraph,
|
|
449
445
|
options,
|
|
450
446
|
shardingConfig,
|
|
451
|
-
}: {
|
|
452
|
-
bundle: NamedBundle
|
|
453
|
-
dependency: Dependency
|
|
454
|
-
bundleGroup: BundleGroup
|
|
455
|
-
bundleGraph: BundleGraph<NamedBundle
|
|
456
|
-
options: PluginOptions
|
|
457
|
-
shardingConfig: JSRuntimeConfig['domainSharding']
|
|
458
|
-
}): RuntimeAsset
|
|
447
|
+
}: {|
|
|
448
|
+
bundle: NamedBundle,
|
|
449
|
+
dependency: Dependency,
|
|
450
|
+
bundleGroup: BundleGroup,
|
|
451
|
+
bundleGraph: BundleGraph<NamedBundle>,
|
|
452
|
+
options: PluginOptions,
|
|
453
|
+
shardingConfig: JSRuntimeConfig['domainSharding'],
|
|
454
|
+
|}): ?RuntimeAsset {
|
|
459
455
|
let loaders = getLoaders(bundle.env);
|
|
460
456
|
if (loaders == null) {
|
|
461
457
|
return;
|
|
462
458
|
}
|
|
463
459
|
|
|
464
460
|
let externalBundles = bundleGraph.getBundlesInBundleGroup(bundleGroup);
|
|
465
|
-
let
|
|
466
|
-
|
|
461
|
+
let potentialMainBundle;
|
|
462
|
+
|
|
463
|
+
if (getFeatureFlag('supportWebpackChunkName')) {
|
|
464
|
+
potentialMainBundle = externalBundles.find((bundle) =>
|
|
465
|
+
bundle
|
|
466
|
+
.getEntryAssets()
|
|
467
|
+
.some((asset) => asset.id === bundleGroup.entryAssetId),
|
|
468
|
+
);
|
|
469
|
+
} else {
|
|
470
|
+
potentialMainBundle = externalBundles.find(
|
|
467
471
|
(bundle) => bundle.getMainEntry()?.id === bundleGroup.entryAssetId,
|
|
468
|
-
)
|
|
469
|
-
|
|
472
|
+
);
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
let mainBundle = nullthrows(potentialMainBundle);
|
|
470
476
|
|
|
471
477
|
// CommonJS is a synchronous module system, so there is no need to load bundles in parallel.
|
|
472
478
|
// Importing of the other bundles will be handled by the bundle group entry.
|
|
@@ -497,8 +503,7 @@ function getLoaderRuntime({
|
|
|
497
503
|
bundle: NamedBundle,
|
|
498
504
|
to: NamedBundle,
|
|
499
505
|
shardingConfig: JSRuntimeConfig['domainSharding'],
|
|
500
|
-
): string |
|
|
501
|
-
// @ts-expect-error TS18049
|
|
506
|
+
): string | void {
|
|
502
507
|
let loader = loaders[to.type];
|
|
503
508
|
if (!loader) {
|
|
504
509
|
return;
|
|
@@ -522,9 +527,7 @@ function getLoaderRuntime({
|
|
|
522
527
|
return `__parcel__import__("./" + ${relativePathExpr})`;
|
|
523
528
|
}
|
|
524
529
|
|
|
525
|
-
// @ts-expect-error TS2322
|
|
526
530
|
loader = nullthrows(
|
|
527
|
-
// @ts-expect-error TS18049
|
|
528
531
|
loaders.IMPORT_POLYFILL,
|
|
529
532
|
`No import() polyfill available for context '${bundle.env.context}'`,
|
|
530
533
|
);
|
|
@@ -577,7 +580,7 @@ function getLoaderRuntime({
|
|
|
577
580
|
sourceBundle,
|
|
578
581
|
);
|
|
579
582
|
|
|
580
|
-
const loaders
|
|
583
|
+
const loaders = [];
|
|
581
584
|
for (const cond of conditions) {
|
|
582
585
|
// This bundle has a conditional dependency, we need to load the bundle group
|
|
583
586
|
const ifTrueLoaders = cond.ifTrueBundles
|
|
@@ -588,9 +591,7 @@ function getLoaderRuntime({
|
|
|
588
591
|
),
|
|
589
592
|
)
|
|
590
593
|
.concat(
|
|
591
|
-
// @ts-expect-error TS2769
|
|
592
594
|
cond.ifTrueBundles.map((targetBundle) =>
|
|
593
|
-
// @ts-expect-error TS2554
|
|
594
595
|
getLoaderForBundle(sourceBundle, targetBundle),
|
|
595
596
|
),
|
|
596
597
|
);
|
|
@@ -603,9 +604,7 @@ function getLoaderRuntime({
|
|
|
603
604
|
),
|
|
604
605
|
)
|
|
605
606
|
.concat(
|
|
606
|
-
// @ts-expect-error TS2769
|
|
607
607
|
cond.ifFalseBundles.map((targetBundle) =>
|
|
608
|
-
// @ts-expect-error TS2554
|
|
609
608
|
getLoaderForBundle(sourceBundle, targetBundle),
|
|
610
609
|
),
|
|
611
610
|
);
|
|
@@ -714,7 +713,7 @@ function getLoaderRuntime({
|
|
|
714
713
|
};
|
|
715
714
|
}
|
|
716
715
|
|
|
717
|
-
let code
|
|
716
|
+
let code = [];
|
|
718
717
|
|
|
719
718
|
if (needsEsmLoadPrelude) {
|
|
720
719
|
let preludeLoad = shardingConfig
|
|
@@ -737,29 +736,24 @@ function getLoaderRuntime({
|
|
|
737
736
|
function getHintedBundleGroups(
|
|
738
737
|
bundleGraph: BundleGraph<NamedBundle>,
|
|
739
738
|
bundle: NamedBundle,
|
|
740
|
-
): {
|
|
741
|
-
preload
|
|
742
|
-
prefetch
|
|
743
|
-
} {
|
|
744
|
-
let preload: Array<BundleGroup> = [];
|
|
745
|
-
let prefetch: Array<BundleGroup> = [];
|
|
739
|
+
): {|preload: Array<BundleGroup>, prefetch: Array<BundleGroup>|} {
|
|
740
|
+
let preload = [];
|
|
741
|
+
let prefetch = [];
|
|
746
742
|
let {asyncDependencies} = getDependencies(bundle);
|
|
747
743
|
for (let dependency of asyncDependencies) {
|
|
748
744
|
let attributes = dependency.meta?.importAttributes;
|
|
749
745
|
if (
|
|
750
746
|
typeof attributes === 'object' &&
|
|
751
747
|
attributes != null &&
|
|
752
|
-
//
|
|
748
|
+
// $FlowFixMe
|
|
753
749
|
(attributes.preload || attributes.prefetch)
|
|
754
750
|
) {
|
|
755
751
|
let resolved = bundleGraph.resolveAsyncDependency(dependency, bundle);
|
|
756
752
|
if (resolved?.type === 'bundle_group') {
|
|
757
753
|
// === true for flow
|
|
758
|
-
// @ts-expect-error TS2339
|
|
759
754
|
if (attributes.preload === true) {
|
|
760
755
|
preload.push(resolved.value);
|
|
761
756
|
}
|
|
762
|
-
// @ts-expect-error TS2339
|
|
763
757
|
if (attributes.prefetch === true) {
|
|
764
758
|
prefetch.push(resolved.value);
|
|
765
759
|
}
|
|
@@ -777,7 +771,7 @@ function getHintLoaders(
|
|
|
777
771
|
loader: string,
|
|
778
772
|
options: PluginOptions,
|
|
779
773
|
): Array<string> {
|
|
780
|
-
let hintLoaders
|
|
774
|
+
let hintLoaders = [];
|
|
781
775
|
for (let bundleGroupToPreload of bundleGroups) {
|
|
782
776
|
let bundlesToPreload =
|
|
783
777
|
bundleGraph.getBundlesInBundleGroup(bundleGroupToPreload);
|
|
@@ -788,10 +782,8 @@ function getHintLoaders(
|
|
|
788
782
|
bundleToPreload,
|
|
789
783
|
options,
|
|
790
784
|
);
|
|
791
|
-
// @ts-expect-error TS7053
|
|
792
785
|
let priority = TYPE_TO_RESOURCE_PRIORITY[bundleToPreload.type];
|
|
793
786
|
hintLoaders.push(
|
|
794
|
-
// @ts-expect-error TS2554
|
|
795
787
|
`require(${JSON.stringify(loader)})(${getAbsoluteUrlExpr(
|
|
796
788
|
relativePathExpr,
|
|
797
789
|
from,
|
|
@@ -878,8 +870,7 @@ function getRegisterCode(
|
|
|
878
870
|
entryBundle: NamedBundle,
|
|
879
871
|
bundleGraph: BundleGraph<NamedBundle>,
|
|
880
872
|
): string {
|
|
881
|
-
|
|
882
|
-
let mappings: Array<FilePath | string> = [];
|
|
873
|
+
let mappings = [];
|
|
883
874
|
bundleGraph.traverseBundles((bundle, _, actions) => {
|
|
884
875
|
if (bundle.bundleBehavior === 'inline') {
|
|
885
876
|
return;
|
|
@@ -981,7 +972,7 @@ function getManifestBundlePriority(
|
|
|
981
972
|
bundleGraph: BundleGraph<NamedBundle>,
|
|
982
973
|
bundle: NamedBundle,
|
|
983
974
|
threshold: number,
|
|
984
|
-
): RuntimeAsset
|
|
975
|
+
): $PropertyType<RuntimeAsset, 'priority'> {
|
|
985
976
|
let bundleSize = 0;
|
|
986
977
|
|
|
987
978
|
bundle.traverseAssets((asset, _, actions) => {
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
// @flow
|
|
1
2
|
import assert from 'assert';
|
|
2
3
|
|
|
3
4
|
import {getBaseURL, getBundleURL} from '../src/helpers/bundle-url';
|
|
4
5
|
|
|
5
|
-
const createErrorStack = (url
|
|
6
|
+
const createErrorStack = (url) => {
|
|
6
7
|
// This error stack is copied from a local dev, with a bunch
|
|
7
8
|
// of lines trimmed off the end so it's not unnecessarily long
|
|
8
9
|
return `
|
package/LICENSE
DELETED
|
@@ -1,201 +0,0 @@
|
|
|
1
|
-
Apache License
|
|
2
|
-
Version 2.0, January 2004
|
|
3
|
-
http://www.apache.org/licenses/
|
|
4
|
-
|
|
5
|
-
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
|
6
|
-
|
|
7
|
-
1. Definitions.
|
|
8
|
-
|
|
9
|
-
"License" shall mean the terms and conditions for use, reproduction,
|
|
10
|
-
and distribution as defined by Sections 1 through 9 of this document.
|
|
11
|
-
|
|
12
|
-
"Licensor" shall mean the copyright owner or entity authorized by
|
|
13
|
-
the copyright owner that is granting the License.
|
|
14
|
-
|
|
15
|
-
"Legal Entity" shall mean the union of the acting entity and all
|
|
16
|
-
other entities that control, are controlled by, or are under common
|
|
17
|
-
control with that entity. For the purposes of this definition,
|
|
18
|
-
"control" means (i) the power, direct or indirect, to cause the
|
|
19
|
-
direction or management of such entity, whether by contract or
|
|
20
|
-
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
|
21
|
-
outstanding shares, or (iii) beneficial ownership of such entity.
|
|
22
|
-
|
|
23
|
-
"You" (or "Your") shall mean an individual or Legal Entity
|
|
24
|
-
exercising permissions granted by this License.
|
|
25
|
-
|
|
26
|
-
"Source" form shall mean the preferred form for making modifications,
|
|
27
|
-
including but not limited to software source code, documentation
|
|
28
|
-
source, and configuration files.
|
|
29
|
-
|
|
30
|
-
"Object" form shall mean any form resulting from mechanical
|
|
31
|
-
transformation or translation of a Source form, including but
|
|
32
|
-
not limited to compiled object code, generated documentation,
|
|
33
|
-
and conversions to other media types.
|
|
34
|
-
|
|
35
|
-
"Work" shall mean the work of authorship, whether in Source or
|
|
36
|
-
Object form, made available under the License, as indicated by a
|
|
37
|
-
copyright notice that is included in or attached to the work
|
|
38
|
-
(an example is provided in the Appendix below).
|
|
39
|
-
|
|
40
|
-
"Derivative Works" shall mean any work, whether in Source or Object
|
|
41
|
-
form, that is based on (or derived from) the Work and for which the
|
|
42
|
-
editorial revisions, annotations, elaborations, or other modifications
|
|
43
|
-
represent, as a whole, an original work of authorship. For the purposes
|
|
44
|
-
of this License, Derivative Works shall not include works that remain
|
|
45
|
-
separable from, or merely link (or bind by name) to the interfaces of,
|
|
46
|
-
the Work and Derivative Works thereof.
|
|
47
|
-
|
|
48
|
-
"Contribution" shall mean any work of authorship, including
|
|
49
|
-
the original version of the Work and any modifications or additions
|
|
50
|
-
to that Work or Derivative Works thereof, that is intentionally
|
|
51
|
-
submitted to Licensor for inclusion in the Work by the copyright owner
|
|
52
|
-
or by an individual or Legal Entity authorized to submit on behalf of
|
|
53
|
-
the copyright owner. For the purposes of this definition, "submitted"
|
|
54
|
-
means any form of electronic, verbal, or written communication sent
|
|
55
|
-
to the Licensor or its representatives, including but not limited to
|
|
56
|
-
communication on electronic mailing lists, source code control systems,
|
|
57
|
-
and issue tracking systems that are managed by, or on behalf of, the
|
|
58
|
-
Licensor for the purpose of discussing and improving the Work, but
|
|
59
|
-
excluding communication that is conspicuously marked or otherwise
|
|
60
|
-
designated in writing by the copyright owner as "Not a Contribution."
|
|
61
|
-
|
|
62
|
-
"Contributor" shall mean Licensor and any individual or Legal Entity
|
|
63
|
-
on behalf of whom a Contribution has been received by Licensor and
|
|
64
|
-
subsequently incorporated within the Work.
|
|
65
|
-
|
|
66
|
-
2. Grant of Copyright License. Subject to the terms and conditions of
|
|
67
|
-
this License, each Contributor hereby grants to You a perpetual,
|
|
68
|
-
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
69
|
-
copyright license to reproduce, prepare Derivative Works of,
|
|
70
|
-
publicly display, publicly perform, sublicense, and distribute the
|
|
71
|
-
Work and such Derivative Works in Source or Object form.
|
|
72
|
-
|
|
73
|
-
3. Grant of Patent License. Subject to the terms and conditions of
|
|
74
|
-
this License, each Contributor hereby grants to You a perpetual,
|
|
75
|
-
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
76
|
-
(except as stated in this section) patent license to make, have made,
|
|
77
|
-
use, offer to sell, sell, import, and otherwise transfer the Work,
|
|
78
|
-
where such license applies only to those patent claims licensable
|
|
79
|
-
by such Contributor that are necessarily infringed by their
|
|
80
|
-
Contribution(s) alone or by combination of their Contribution(s)
|
|
81
|
-
with the Work to which such Contribution(s) was submitted. If You
|
|
82
|
-
institute patent litigation against any entity (including a
|
|
83
|
-
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
|
84
|
-
or a Contribution incorporated within the Work constitutes direct
|
|
85
|
-
or contributory patent infringement, then any patent licenses
|
|
86
|
-
granted to You under this License for that Work shall terminate
|
|
87
|
-
as of the date such litigation is filed.
|
|
88
|
-
|
|
89
|
-
4. Redistribution. You may reproduce and distribute copies of the
|
|
90
|
-
Work or Derivative Works thereof in any medium, with or without
|
|
91
|
-
modifications, and in Source or Object form, provided that You
|
|
92
|
-
meet the following conditions:
|
|
93
|
-
|
|
94
|
-
(a) You must give any other recipients of the Work or
|
|
95
|
-
Derivative Works a copy of this License; and
|
|
96
|
-
|
|
97
|
-
(b) You must cause any modified files to carry prominent notices
|
|
98
|
-
stating that You changed the files; and
|
|
99
|
-
|
|
100
|
-
(c) You must retain, in the Source form of any Derivative Works
|
|
101
|
-
that You distribute, all copyright, patent, trademark, and
|
|
102
|
-
attribution notices from the Source form of the Work,
|
|
103
|
-
excluding those notices that do not pertain to any part of
|
|
104
|
-
the Derivative Works; and
|
|
105
|
-
|
|
106
|
-
(d) If the Work includes a "NOTICE" text file as part of its
|
|
107
|
-
distribution, then any Derivative Works that You distribute must
|
|
108
|
-
include a readable copy of the attribution notices contained
|
|
109
|
-
within such NOTICE file, excluding those notices that do not
|
|
110
|
-
pertain to any part of the Derivative Works, in at least one
|
|
111
|
-
of the following places: within a NOTICE text file distributed
|
|
112
|
-
as part of the Derivative Works; within the Source form or
|
|
113
|
-
documentation, if provided along with the Derivative Works; or,
|
|
114
|
-
within a display generated by the Derivative Works, if and
|
|
115
|
-
wherever such third-party notices normally appear. The contents
|
|
116
|
-
of the NOTICE file are for informational purposes only and
|
|
117
|
-
do not modify the License. You may add Your own attribution
|
|
118
|
-
notices within Derivative Works that You distribute, alongside
|
|
119
|
-
or as an addendum to the NOTICE text from the Work, provided
|
|
120
|
-
that such additional attribution notices cannot be construed
|
|
121
|
-
as modifying the License.
|
|
122
|
-
|
|
123
|
-
You may add Your own copyright statement to Your modifications and
|
|
124
|
-
may provide additional or different license terms and conditions
|
|
125
|
-
for use, reproduction, or distribution of Your modifications, or
|
|
126
|
-
for any such Derivative Works as a whole, provided Your use,
|
|
127
|
-
reproduction, and distribution of the Work otherwise complies with
|
|
128
|
-
the conditions stated in this License.
|
|
129
|
-
|
|
130
|
-
5. Submission of Contributions. Unless You explicitly state otherwise,
|
|
131
|
-
any Contribution intentionally submitted for inclusion in the Work
|
|
132
|
-
by You to the Licensor shall be under the terms and conditions of
|
|
133
|
-
this License, without any additional terms or conditions.
|
|
134
|
-
Notwithstanding the above, nothing herein shall supersede or modify
|
|
135
|
-
the terms of any separate license agreement you may have executed
|
|
136
|
-
with Licensor regarding such Contributions.
|
|
137
|
-
|
|
138
|
-
6. Trademarks. This License does not grant permission to use the trade
|
|
139
|
-
names, trademarks, service marks, or product names of the Licensor,
|
|
140
|
-
except as required for reasonable and customary use in describing the
|
|
141
|
-
origin of the Work and reproducing the content of the NOTICE file.
|
|
142
|
-
|
|
143
|
-
7. Disclaimer of Warranty. Unless required by applicable law or
|
|
144
|
-
agreed to in writing, Licensor provides the Work (and each
|
|
145
|
-
Contributor provides its Contributions) on an "AS IS" BASIS,
|
|
146
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
147
|
-
implied, including, without limitation, any warranties or conditions
|
|
148
|
-
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
|
149
|
-
PARTICULAR PURPOSE. You are solely responsible for determining the
|
|
150
|
-
appropriateness of using or redistributing the Work and assume any
|
|
151
|
-
risks associated with Your exercise of permissions under this License.
|
|
152
|
-
|
|
153
|
-
8. Limitation of Liability. In no event and under no legal theory,
|
|
154
|
-
whether in tort (including negligence), contract, or otherwise,
|
|
155
|
-
unless required by applicable law (such as deliberate and grossly
|
|
156
|
-
negligent acts) or agreed to in writing, shall any Contributor be
|
|
157
|
-
liable to You for damages, including any direct, indirect, special,
|
|
158
|
-
incidental, or consequential damages of any character arising as a
|
|
159
|
-
result of this License or out of the use or inability to use the
|
|
160
|
-
Work (including but not limited to damages for loss of goodwill,
|
|
161
|
-
work stoppage, computer failure or malfunction, or any and all
|
|
162
|
-
other commercial damages or losses), even if such Contributor
|
|
163
|
-
has been advised of the possibility of such damages.
|
|
164
|
-
|
|
165
|
-
9. Accepting Warranty or Additional Liability. While redistributing
|
|
166
|
-
the Work or Derivative Works thereof, You may choose to offer,
|
|
167
|
-
and charge a fee for, acceptance of support, warranty, indemnity,
|
|
168
|
-
or other liability obligations and/or rights consistent with this
|
|
169
|
-
License. However, in accepting such obligations, You may act only
|
|
170
|
-
on Your own behalf and on Your sole responsibility, not on behalf
|
|
171
|
-
of any other Contributor, and only if You agree to indemnify,
|
|
172
|
-
defend, and hold each Contributor harmless for any liability
|
|
173
|
-
incurred by, or claims asserted against, such Contributor by reason
|
|
174
|
-
of your accepting any such warranty or additional liability.
|
|
175
|
-
|
|
176
|
-
END OF TERMS AND CONDITIONS
|
|
177
|
-
|
|
178
|
-
APPENDIX: How to apply the Apache License to your work.
|
|
179
|
-
|
|
180
|
-
To apply the Apache License to your work, attach the following
|
|
181
|
-
boilerplate notice, with the fields enclosed by brackets "[]"
|
|
182
|
-
replaced with your own identifying information. (Don't include
|
|
183
|
-
the brackets!) The text should be enclosed in the appropriate
|
|
184
|
-
comment syntax for the file format. We also recommend that a
|
|
185
|
-
file or class name and description of purpose be included on the
|
|
186
|
-
same "printed page" as the copyright notice for easier
|
|
187
|
-
identification within third-party archives.
|
|
188
|
-
|
|
189
|
-
Copyright (c) 2024 Atlassian US., Inc.
|
|
190
|
-
|
|
191
|
-
Licensed under the Apache License, Version 2.0 (the "License");
|
|
192
|
-
you may not use this file except in compliance with the License.
|
|
193
|
-
You may obtain a copy of the License at
|
|
194
|
-
|
|
195
|
-
http://www.apache.org/licenses/LICENSE-2.0
|
|
196
|
-
|
|
197
|
-
Unless required by applicable law or agreed to in writing, software
|
|
198
|
-
distributed under the License is distributed on an "AS IS" BASIS,
|
|
199
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
200
|
-
See the License for the specific language governing permissions and
|
|
201
|
-
limitations under the License.
|
package/lib/JSRuntime.d.ts
DELETED
package/tsconfig.json
DELETED