@jsenv/core 36.2.0 → 36.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/babel_helpers/AsyncGenerator/AsyncGenerator.js +45 -35
- package/dist/babel_helpers/AwaitValue/AwaitValue.js +3 -3
- package/dist/babel_helpers/applyDecoratedDescriptor/applyDecoratedDescriptor.js +13 -13
- package/dist/babel_helpers/applyDecs/applyDecs.js +227 -42
- package/dist/babel_helpers/applyDecs2203/applyDecs2203.js +559 -418
- package/dist/babel_helpers/applyDecs2203R/applyDecs2203R.js +235 -87
- package/dist/babel_helpers/applyDecs2301/applyDecs2301.js +591 -456
- package/dist/babel_helpers/applyDecs2305/applyDecs2305.js +681 -0
- package/dist/babel_helpers/arrayLikeToArray/arrayLikeToArray.js +5 -5
- package/dist/babel_helpers/arrayWithHoles/arrayWithHoles.js +3 -3
- package/dist/babel_helpers/arrayWithoutHoles/arrayWithoutHoles.js +4 -4
- package/dist/babel_helpers/assertThisInitialized/assertThisInitialized.js +4 -4
- package/dist/babel_helpers/asyncGeneratorDelegate/asyncGeneratorDelegate.js +12 -4
- package/dist/babel_helpers/asyncIterator/asyncIterator.js +13 -11
- package/dist/babel_helpers/asyncToGenerator/asyncToGenerator.js +18 -17
- package/dist/babel_helpers/awaitAsyncGenerator/awaitAsyncGenerator.js +2 -1
- package/dist/babel_helpers/checkInRHS/checkInRHS.js +8 -5
- package/dist/babel_helpers/classApplyDescriptorDestructureSet/classApplyDescriptorDestructureSet.js +7 -7
- package/dist/babel_helpers/classApplyDescriptorGet/classApplyDescriptorGet.js +3 -3
- package/dist/babel_helpers/classApplyDescriptorSet/classApplyDescriptorSet.js +4 -4
- package/dist/babel_helpers/classCallCheck/classCallCheck.js +2 -2
- package/dist/babel_helpers/classCheckPrivateStaticAccess/classCheckPrivateStaticAccess.js +2 -2
- package/dist/babel_helpers/classCheckPrivateStaticFieldDescriptor/classCheckPrivateStaticFieldDescriptor.js +2 -2
- package/dist/babel_helpers/classExtractFieldDescriptor/classExtractFieldDescriptor.js +3 -3
- package/dist/babel_helpers/classNameTDZError/classNameTDZError.js +2 -2
- package/dist/babel_helpers/classPrivateFieldDestructureSet/classPrivateFieldDestructureSet.js +6 -5
- package/dist/babel_helpers/classPrivateFieldGet/classPrivateFieldGet.js +6 -5
- package/dist/babel_helpers/classPrivateFieldLooseBase/classPrivateFieldLooseBase.js +3 -3
- package/dist/babel_helpers/classPrivateFieldLooseKey/classPrivateFieldLooseKey.js +3 -3
- package/dist/babel_helpers/classPrivateFieldSet/classPrivateFieldSet.js +7 -6
- package/dist/babel_helpers/classPrivateMethodGet/classPrivateMethodGet.js +3 -3
- package/dist/babel_helpers/classPrivateMethodSet/classPrivateMethodSet.js +2 -2
- package/dist/babel_helpers/classStaticPrivateFieldSpecGet/classStaticPrivateFieldSpecGet.js +8 -7
- package/dist/babel_helpers/classStaticPrivateFieldSpecSet/classStaticPrivateFieldSpecSet.js +15 -9
- package/dist/babel_helpers/classStaticPrivateMethodGet/classStaticPrivateMethodGet.js +5 -4
- package/dist/babel_helpers/classStaticPrivateMethodSet/classStaticPrivateMethodSet.js +2 -2
- package/dist/babel_helpers/construct/construct.js +10 -9
- package/dist/babel_helpers/createClass/createClass.js +2 -3
- package/dist/babel_helpers/createForOfIteratorHelper/createForOfIteratorHelper.js +30 -29
- package/dist/babel_helpers/createForOfIteratorHelperLoose/createForOfIteratorHelperLoose.js +18 -16
- package/dist/babel_helpers/createRawReactElement/createRawReactElement.js +23 -17
- package/dist/babel_helpers/createSuper/createSuper.js +14 -12
- package/dist/babel_helpers/decorate/decorate.js +242 -210
- package/dist/babel_helpers/defaults/defaults.js +6 -6
- package/dist/babel_helpers/defineAccessor/defineAccessor.js +1 -4
- package/dist/babel_helpers/defineEnumerableProperties/defineEnumerableProperties.js +12 -12
- package/dist/babel_helpers/defineProperty/defineProperty.js +7 -6
- package/dist/babel_helpers/extends/extends.js +5 -4
- package/dist/babel_helpers/get/get.js +2 -1
- package/dist/babel_helpers/getPrototypeOf/getPrototypeOf.js +4 -3
- package/dist/babel_helpers/inherits/inherits.js +3 -4
- package/dist/babel_helpers/inheritsLoose/inheritsLoose.js +6 -5
- package/dist/babel_helpers/initializerDefineProperty/initializerDefineProperty.js +4 -4
- package/dist/babel_helpers/initializerWarningHelper/initializerWarningHelper.js +5 -2
- package/dist/babel_helpers/instanceof/instanceof.js +3 -3
- package/dist/babel_helpers/interopRequireDefault/interopRequireDefault.js +2 -4
- package/dist/babel_helpers/interopRequireWildcard/interopRequireWildcard.js +19 -21
- package/dist/babel_helpers/isNativeFunction/isNativeFunction.js +2 -2
- package/dist/babel_helpers/isNativeReflectConstruct/isNativeReflectConstruct.js +7 -7
- package/dist/babel_helpers/iterableToArray/iterableToArray.js +6 -2
- package/dist/babel_helpers/iterableToArrayLimit/iterableToArrayLimit.js +6 -1
- package/dist/babel_helpers/iterableToArrayLimitLoose/iterableToArrayLimitLoose.js +6 -2
- package/dist/babel_helpers/jsx/jsx.js +14 -7
- package/dist/babel_helpers/maybeArrayLike/maybeArrayLike.js +6 -5
- package/dist/babel_helpers/newArrowCheck/newArrowCheck.js +2 -2
- package/dist/babel_helpers/nonIterableRest/nonIterableRest.js +5 -3
- package/dist/babel_helpers/nonIterableSpread/nonIterableSpread.js +5 -3
- package/dist/babel_helpers/objectDestructuringEmpty/objectDestructuringEmpty.js +2 -2
- package/dist/babel_helpers/objectSpread/objectSpread.js +15 -12
- package/dist/babel_helpers/objectSpread2/objectSpread2.js +7 -2
- package/dist/babel_helpers/objectWithoutProperties/objectWithoutProperties.js +15 -13
- package/dist/babel_helpers/objectWithoutPropertiesLoose/objectWithoutPropertiesLoose.js +11 -11
- package/dist/babel_helpers/possibleConstructorReturn/possibleConstructorReturn.js +7 -6
- package/dist/babel_helpers/readOnlyError/readOnlyError.js +2 -2
- package/dist/babel_helpers/regeneratorRuntime/regeneratorRuntime.js +124 -73
- package/dist/babel_helpers/set/set.js +23 -20
- package/dist/babel_helpers/setPrototypeOf/setPrototypeOf.js +6 -5
- package/dist/babel_helpers/skipFirstGeneratorNext/skipFirstGeneratorNext.js +5 -5
- package/dist/babel_helpers/slicedToArray/slicedToArray.js +10 -5
- package/dist/babel_helpers/slicedToArrayLoose/slicedToArrayLoose.js +12 -6
- package/dist/babel_helpers/superPropBase/superPropBase.js +6 -5
- package/dist/babel_helpers/taggedTemplateLiteral/taggedTemplateLiteral.js +7 -7
- package/dist/babel_helpers/taggedTemplateLiteralLoose/taggedTemplateLiteralLoose.js +4 -4
- package/dist/babel_helpers/tdz/tdz.js +2 -2
- package/dist/babel_helpers/temporalRef/temporalRef.js +5 -4
- package/dist/babel_helpers/temporalUndefined/temporalUndefined.js +1 -1
- package/dist/babel_helpers/toArray/toArray.js +10 -5
- package/dist/babel_helpers/toConsumableArray/toConsumableArray.js +10 -5
- package/dist/babel_helpers/toPrimitive/toPrimitive.js +7 -7
- package/dist/babel_helpers/toPropertyKey/toPropertyKey.js +5 -4
- package/dist/babel_helpers/typeof/typeof.js +14 -5
- package/dist/babel_helpers/unsupportedIterableToArray/unsupportedIterableToArray.js +10 -8
- package/dist/babel_helpers/wrapAsyncGenerator/wrapAsyncGenerator.js +5 -4
- package/dist/babel_helpers/wrapNativeSuper/wrapNativeSuper.js +17 -15
- package/dist/babel_helpers/wrapRegExp/wrapRegExp.js +19 -8
- package/dist/babel_helpers/writeOnlyError/writeOnlyError.js +2 -2
- package/dist/js/autoreload.js +148 -133
- package/dist/js/import_meta_hot.js +19 -13
- package/dist/js/inline_content.js +1 -3
- package/dist/js/new_stylesheet.js +119 -60
- package/dist/js/regenerator_runtime.js +204 -102
- package/dist/js/ribbon.js +11 -6
- package/dist/js/server_events_client.js +122 -98
- package/dist/js/ws.js +968 -265
- package/dist/jsenv_core.js +8513 -6162
- package/package.json +9 -9
- package/src/build/build.js +497 -486
- package/src/build/version_mappings_injection.js +21 -44
- package/src/kitchen/errors.js +2 -2
- package/src/kitchen/fetched_content_compliance.js +6 -2
- package/src/kitchen/kitchen.js +285 -80
- package/src/kitchen/prepend_content.js +135 -0
- package/src/kitchen/url_graph/url_graph_visitor.js +99 -0
- package/src/kitchen/url_graph/url_info_transformations.js +140 -21
- package/src/kitchen/url_graph.js +59 -29
- package/src/plugins/autoreload/jsenv_plugin_hmr.js +1 -2
- package/src/plugins/import_meta_hot/jsenv_plugin_import_meta_hot.js +2 -2
- package/src/plugins/importmap/jsenv_plugin_importmap.js +2 -2
- package/src/plugins/inlining/jsenv_plugin_inlining_as_data_url.js +1 -1
- package/src/plugins/reference_analysis/html/jsenv_plugin_html_reference_analysis.js +44 -23
- package/src/plugins/reference_analysis/js/jsenv_plugin_js_reference_analysis.js +2 -1
- package/dist/js/global_this_js_classic.js +0 -24
- package/dist/js/global_this_js_module.js +0 -20
- package/src/build/graph_utils.js +0 -34
package/src/build/build.js
CHANGED
|
@@ -57,6 +57,7 @@ import { jsenvPluginJsModuleFallback } from "@jsenv/plugin-transpilation";
|
|
|
57
57
|
|
|
58
58
|
import { lookupPackageDirectory } from "../helpers/lookup_package_directory.js";
|
|
59
59
|
import { watchSourceFiles } from "../helpers/watch_source_files.js";
|
|
60
|
+
import { GRAPH_VISITOR } from "../kitchen/url_graph/url_graph_visitor.js";
|
|
60
61
|
import { createUrlGraph } from "../kitchen/url_graph.js";
|
|
61
62
|
import { createKitchen } from "../kitchen/kitchen.js";
|
|
62
63
|
import { createUrlGraphLoader } from "../kitchen/url_graph/url_graph_loader.js";
|
|
@@ -70,7 +71,6 @@ import { jsenvPluginReferenceAnalysis } from "../plugins/reference_analysis/jsen
|
|
|
70
71
|
import { jsenvPluginInlining } from "../plugins/inlining/jsenv_plugin_inlining.js";
|
|
71
72
|
import { jsenvPluginLineBreakNormalization } from "./jsenv_plugin_line_break_normalization.js";
|
|
72
73
|
|
|
73
|
-
import { GRAPH } from "./graph_utils.js";
|
|
74
74
|
import { createBuildUrlsGenerator } from "./build_urls_generator.js";
|
|
75
75
|
import {
|
|
76
76
|
injectVersionMappingsAsGlobal,
|
|
@@ -266,6 +266,13 @@ export const build = async ({
|
|
|
266
266
|
|
|
267
267
|
const runBuild = async ({ signal, logLevel }) => {
|
|
268
268
|
const logger = createLogger({ logLevel });
|
|
269
|
+
const createBuildTask = (label) => {
|
|
270
|
+
return createTaskLog(label, {
|
|
271
|
+
disabled: !logger.levels.debug && !logger.levels.info,
|
|
272
|
+
animated: !logger.levels.debug,
|
|
273
|
+
});
|
|
274
|
+
};
|
|
275
|
+
|
|
269
276
|
const buildOperation = Abort.startOperation();
|
|
270
277
|
buildOperation.addAbortSignal(signal);
|
|
271
278
|
const entryPointKeys = Object.keys(entryPoints);
|
|
@@ -379,331 +386,11 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
379
386
|
const bundleUrlInfos = {};
|
|
380
387
|
const bundlers = {};
|
|
381
388
|
const finalGraph = createUrlGraph();
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
rootDirectoryUrl: buildDirectoryUrl,
|
|
385
|
-
// here most plugins are not there
|
|
386
|
-
// - no external plugin
|
|
387
|
-
// - no plugin putting reference.mustIgnore on https urls
|
|
388
|
-
// At this stage it's only about redirecting urls to the build directory
|
|
389
|
-
// consequently only a subset or urls are supported
|
|
390
|
-
supportedProtocols: ["file:", "data:", "virtual:", "ignore:"],
|
|
391
|
-
ignore,
|
|
392
|
-
ignoreProtocol: versioning ? "keep" : "remove",
|
|
393
|
-
urlGraph: finalGraph,
|
|
394
|
-
build: true,
|
|
395
|
-
runtimeCompat,
|
|
396
|
-
...contextSharedDuringBuild,
|
|
397
|
-
plugins: [
|
|
398
|
-
jsenvPluginReferenceAnalysis({
|
|
399
|
-
...referenceAnalysis,
|
|
400
|
-
fetchInlineUrls: false,
|
|
401
|
-
}),
|
|
402
|
-
...(lineBreakNormalization
|
|
403
|
-
? [jsenvPluginLineBreakNormalization()]
|
|
404
|
-
: []),
|
|
405
|
-
jsenvPluginJsModuleFallback({
|
|
406
|
-
systemJsInjection: true,
|
|
407
|
-
}),
|
|
408
|
-
jsenvPluginInlining(),
|
|
409
|
-
{
|
|
410
|
-
name: "jsenv:build_shape",
|
|
411
|
-
appliesDuring: "build",
|
|
412
|
-
resolveReference: (reference) => {
|
|
413
|
-
const getUrl = () => {
|
|
414
|
-
if (reference.type === "filesystem") {
|
|
415
|
-
const parentRawUrl = buildDirectoryRedirections.get(
|
|
416
|
-
reference.parentUrl,
|
|
417
|
-
);
|
|
418
|
-
const parentUrl = ensurePathnameTrailingSlash(parentRawUrl);
|
|
419
|
-
return new URL(reference.specifier, parentUrl).href;
|
|
420
|
-
}
|
|
421
|
-
if (reference.specifier[0] === "/") {
|
|
422
|
-
return new URL(reference.specifier.slice(1), buildDirectoryUrl)
|
|
423
|
-
.href;
|
|
424
|
-
}
|
|
425
|
-
return new URL(
|
|
426
|
-
reference.specifier,
|
|
427
|
-
reference.baseUrl || reference.parentUrl,
|
|
428
|
-
).href;
|
|
429
|
-
};
|
|
430
|
-
let url = getUrl();
|
|
431
|
-
// url = rawRedirections.get(url) || url
|
|
432
|
-
url = bundleRedirections.get(url) || url;
|
|
433
|
-
url = bundleInternalRedirections.get(url) || url;
|
|
434
|
-
return url;
|
|
435
|
-
},
|
|
436
|
-
// redirecting references into the build directory
|
|
437
|
-
redirectReference: (reference) => {
|
|
438
|
-
if (!reference.url.startsWith("file:")) {
|
|
439
|
-
return null;
|
|
440
|
-
}
|
|
441
|
-
// referenced by resource hint
|
|
442
|
-
// -> keep it untouched, it will be handled by "resync_resource_hints"
|
|
443
|
-
if (reference.isResourceHint) {
|
|
444
|
-
return reference.original ? reference.original.url : null;
|
|
445
|
-
}
|
|
446
|
-
// already a build url
|
|
447
|
-
const rawUrl = buildDirectoryRedirections.get(reference.url);
|
|
448
|
-
if (rawUrl) {
|
|
449
|
-
return reference.url;
|
|
450
|
-
}
|
|
451
|
-
if (reference.isInline) {
|
|
452
|
-
const parentUrlInfo = finalGraph.getUrlInfo(reference.parentUrl);
|
|
453
|
-
const parentRawUrl = parentUrlInfo.originalUrl;
|
|
454
|
-
const rawUrlInfo = GRAPH.find(rawGraph, (rawUrlInfo) => {
|
|
455
|
-
const { inlineUrlSite } = rawUrlInfo;
|
|
456
|
-
// not inline
|
|
457
|
-
if (!inlineUrlSite) return false;
|
|
458
|
-
if (
|
|
459
|
-
inlineUrlSite.url === parentRawUrl &&
|
|
460
|
-
inlineUrlSite.line === reference.specifierLine &&
|
|
461
|
-
inlineUrlSite.column === reference.specifierColumn
|
|
462
|
-
) {
|
|
463
|
-
return true;
|
|
464
|
-
}
|
|
465
|
-
if (rawUrlInfo.content === reference.content) {
|
|
466
|
-
return true;
|
|
467
|
-
}
|
|
468
|
-
if (rawUrlInfo.originalContent === reference.content) {
|
|
469
|
-
return true;
|
|
470
|
-
}
|
|
471
|
-
return false;
|
|
472
|
-
});
|
|
473
|
-
|
|
474
|
-
if (!rawUrlInfo) {
|
|
475
|
-
// generated during final graph
|
|
476
|
-
// (happens for JSON.parse injected for import assertions for instance)
|
|
477
|
-
// throw new Error(`cannot find raw url for "${reference.url}"`)
|
|
478
|
-
return reference.url;
|
|
479
|
-
}
|
|
480
|
-
const buildUrl = buildUrlsGenerator.generate(reference.url, {
|
|
481
|
-
urlInfo: rawUrlInfo,
|
|
482
|
-
parentUrlInfo,
|
|
483
|
-
});
|
|
484
|
-
associateBuildUrlAndRawUrl(
|
|
485
|
-
buildUrl,
|
|
486
|
-
rawUrlInfo.url,
|
|
487
|
-
"inline content",
|
|
488
|
-
);
|
|
489
|
-
return buildUrl;
|
|
490
|
-
}
|
|
491
|
-
// from "js_module_fallback":
|
|
492
|
-
// - injecting "?js_module_fallback" for the first time
|
|
493
|
-
// - injecting "?js_module_fallback" because the parentUrl has it
|
|
494
|
-
if (reference.original) {
|
|
495
|
-
const urlBeforeRedirect = reference.original.url;
|
|
496
|
-
const urlAfterRedirect = reference.url;
|
|
497
|
-
const isEntryPoint =
|
|
498
|
-
reference.isEntryPoint ||
|
|
499
|
-
isWebWorkerEntryPointReference(reference);
|
|
500
|
-
// the url info do not exists yet (it will be created after this "redirectReference" hook)
|
|
501
|
-
// And the content will be generated when url is cooked by url graph loader.
|
|
502
|
-
// Here we just want to reserve an url for that file
|
|
503
|
-
const urlInfo = {
|
|
504
|
-
data: reference.data,
|
|
505
|
-
isEntryPoint,
|
|
506
|
-
type: reference.expectedType,
|
|
507
|
-
subtype: reference.expectedSubtype,
|
|
508
|
-
filename: reference.filename,
|
|
509
|
-
};
|
|
510
|
-
if (urlIsInsideOf(urlBeforeRedirect, buildDirectoryUrl)) {
|
|
511
|
-
// the redirection happened on a build url, happens due to:
|
|
512
|
-
// 1. bundling
|
|
513
|
-
const buildUrl = buildUrlsGenerator.generate(urlAfterRedirect, {
|
|
514
|
-
urlInfo,
|
|
515
|
-
});
|
|
516
|
-
finalRedirections.set(urlBeforeRedirect, buildUrl);
|
|
517
|
-
return buildUrl;
|
|
518
|
-
}
|
|
519
|
-
const rawUrl = urlAfterRedirect;
|
|
520
|
-
const buildUrl = buildUrlsGenerator.generate(rawUrl, {
|
|
521
|
-
urlInfo,
|
|
522
|
-
});
|
|
523
|
-
finalRedirections.set(urlBeforeRedirect, buildUrl);
|
|
524
|
-
associateBuildUrlAndRawUrl(
|
|
525
|
-
buildUrl,
|
|
526
|
-
rawUrl,
|
|
527
|
-
"redirected during postbuild",
|
|
528
|
-
);
|
|
529
|
-
return buildUrl;
|
|
530
|
-
}
|
|
531
|
-
// from "js_module_fallback":
|
|
532
|
-
// - to inject "s.js"
|
|
533
|
-
if (reference.injected) {
|
|
534
|
-
const buildUrl = buildUrlsGenerator.generate(reference.url, {
|
|
535
|
-
urlInfo: {
|
|
536
|
-
data: {},
|
|
537
|
-
type: "js_classic",
|
|
538
|
-
},
|
|
539
|
-
});
|
|
540
|
-
associateBuildUrlAndRawUrl(
|
|
541
|
-
buildUrl,
|
|
542
|
-
reference.url,
|
|
543
|
-
"injected during postbuild",
|
|
544
|
-
);
|
|
545
|
-
finalRedirections.set(buildUrl, buildUrl);
|
|
546
|
-
return buildUrl;
|
|
547
|
-
}
|
|
548
|
-
const rawUrlInfo = rawGraph.getUrlInfo(reference.url);
|
|
549
|
-
const parentUrlInfo = finalGraph.getUrlInfo(reference.parentUrl);
|
|
550
|
-
// files from root directory but not given to rollup nor postcss
|
|
551
|
-
if (rawUrlInfo) {
|
|
552
|
-
const referencedUrlObject = new URL(reference.url);
|
|
553
|
-
referencedUrlObject.searchParams.delete("as_js_classic");
|
|
554
|
-
const buildUrl = buildUrlsGenerator.generate(
|
|
555
|
-
referencedUrlObject.href,
|
|
556
|
-
{
|
|
557
|
-
urlInfo: rawUrlInfo,
|
|
558
|
-
parentUrlInfo,
|
|
559
|
-
},
|
|
560
|
-
);
|
|
561
|
-
associateBuildUrlAndRawUrl(buildUrl, rawUrlInfo.url, "raw file");
|
|
562
|
-
if (buildUrl.includes("?")) {
|
|
563
|
-
associateBuildUrlAndRawUrl(
|
|
564
|
-
asUrlWithoutSearch(buildUrl),
|
|
565
|
-
rawUrlInfo.url,
|
|
566
|
-
"raw file",
|
|
567
|
-
);
|
|
568
|
-
}
|
|
569
|
-
return buildUrl;
|
|
570
|
-
}
|
|
571
|
-
if (reference.type === "sourcemap_comment") {
|
|
572
|
-
// inherit parent build url
|
|
573
|
-
return generateSourcemapFileUrl(reference.parentUrl);
|
|
574
|
-
}
|
|
575
|
-
// files generated during the final graph:
|
|
576
|
-
// - sourcemaps
|
|
577
|
-
// const finalUrlInfo = finalGraph.getUrlInfo(url)
|
|
578
|
-
const buildUrl = buildUrlsGenerator.generate(reference.url, {
|
|
579
|
-
urlInfo: {
|
|
580
|
-
data: {},
|
|
581
|
-
type: "asset",
|
|
582
|
-
},
|
|
583
|
-
});
|
|
584
|
-
return buildUrl;
|
|
585
|
-
},
|
|
586
|
-
formatReference: (reference) => {
|
|
587
|
-
if (!reference.generatedUrl.startsWith("file:")) {
|
|
588
|
-
return null;
|
|
589
|
-
}
|
|
590
|
-
if (reference.isResourceHint) {
|
|
591
|
-
return null;
|
|
592
|
-
}
|
|
593
|
-
if (!urlIsInsideOf(reference.generatedUrl, buildDirectoryUrl)) {
|
|
594
|
-
throw new Error(
|
|
595
|
-
`urls should be inside build directory at this stage, found "${reference.url}"`,
|
|
596
|
-
);
|
|
597
|
-
}
|
|
598
|
-
const generatedUrlObject = new URL(reference.generatedUrl);
|
|
599
|
-
generatedUrlObject.searchParams.delete("js_classic");
|
|
600
|
-
generatedUrlObject.searchParams.delete("js_module");
|
|
601
|
-
generatedUrlObject.searchParams.delete("js_module_fallback");
|
|
602
|
-
generatedUrlObject.searchParams.delete("as_js_classic");
|
|
603
|
-
generatedUrlObject.searchParams.delete("as_js_module");
|
|
604
|
-
generatedUrlObject.searchParams.delete("as_json_module");
|
|
605
|
-
generatedUrlObject.searchParams.delete("as_css_module");
|
|
606
|
-
generatedUrlObject.searchParams.delete("as_text_module");
|
|
607
|
-
generatedUrlObject.hash = "";
|
|
608
|
-
const generatedUrl = generatedUrlObject.href;
|
|
609
|
-
const specifier = asFormattedBuildUrl(generatedUrl, reference);
|
|
610
|
-
buildUrls.set(specifier, reference.generatedUrl);
|
|
611
|
-
return specifier;
|
|
612
|
-
},
|
|
613
|
-
fetchUrlContent: async (finalUrlInfo, context) => {
|
|
614
|
-
const fromBundleOrRawGraph = (url) => {
|
|
615
|
-
const bundleUrlInfo = bundleUrlInfos[url];
|
|
616
|
-
if (bundleUrlInfo) {
|
|
617
|
-
// logger.debug(`fetching from bundle ${url}`)
|
|
618
|
-
return bundleUrlInfo;
|
|
619
|
-
}
|
|
620
|
-
const rawUrl = buildDirectoryRedirections.get(url) || url;
|
|
621
|
-
const rawUrlInfo = rawGraph.getUrlInfo(rawUrl);
|
|
622
|
-
if (!rawUrlInfo) {
|
|
623
|
-
throw new Error(
|
|
624
|
-
createDetailedMessage(`Cannot find url`, {
|
|
625
|
-
url,
|
|
626
|
-
"raw urls": Array.from(buildDirectoryRedirections.values()),
|
|
627
|
-
"build urls": Array.from(buildDirectoryRedirections.keys()),
|
|
628
|
-
}),
|
|
629
|
-
);
|
|
630
|
-
}
|
|
631
|
-
// logger.debug(`fetching from raw graph ${url}`)
|
|
632
|
-
if (rawUrlInfo.isInline) {
|
|
633
|
-
// Inline content, such as <script> inside html, is transformed during the previous phase.
|
|
634
|
-
// If we read the inline content it would be considered as the original content.
|
|
635
|
-
// - It could be "fixed" by taking into account sourcemap and consider sourcemap sources
|
|
636
|
-
// as the original content.
|
|
637
|
-
// - But it would not work when sourcemap are not generated
|
|
638
|
-
// - would be a bit slower
|
|
639
|
-
// - So instead of reading the inline content directly, we search into raw graph
|
|
640
|
-
// to get "originalContent" and "sourcemap"
|
|
641
|
-
finalUrlInfo.type = rawUrlInfo.type;
|
|
642
|
-
finalUrlInfo.subtype = rawUrlInfo.subtype;
|
|
643
|
-
return rawUrlInfo;
|
|
644
|
-
}
|
|
645
|
-
return rawUrlInfo;
|
|
646
|
-
};
|
|
647
|
-
const { reference } = context;
|
|
648
|
-
// reference injected during "postbuild":
|
|
649
|
-
// - happens for "js_module_fallback" injecting "s.js"
|
|
650
|
-
if (reference.injected) {
|
|
651
|
-
const [ref, rawUrlInfo] = rawGraphKitchen.injectReference({
|
|
652
|
-
...reference,
|
|
653
|
-
parentUrl: buildDirectoryRedirections.get(reference.parentUrl),
|
|
654
|
-
});
|
|
655
|
-
await rawGraphKitchen.cook(rawUrlInfo, { reference: ref });
|
|
656
|
-
return rawUrlInfo;
|
|
657
|
-
}
|
|
658
|
-
if (reference.isInline) {
|
|
659
|
-
if (reference.prev && !reference.prev.isInline) {
|
|
660
|
-
const urlBeforeRedirect = findKey(
|
|
661
|
-
finalRedirections,
|
|
662
|
-
reference.prev.url,
|
|
663
|
-
);
|
|
664
|
-
return fromBundleOrRawGraph(urlBeforeRedirect);
|
|
665
|
-
}
|
|
666
|
-
return fromBundleOrRawGraph(reference.url);
|
|
667
|
-
}
|
|
668
|
-
// reference updated during "postbuild":
|
|
669
|
-
// - happens for "js_module_fallback"
|
|
670
|
-
if (reference.original) {
|
|
671
|
-
return fromBundleOrRawGraph(reference.original.url);
|
|
672
|
-
}
|
|
673
|
-
return fromBundleOrRawGraph(finalUrlInfo.url);
|
|
674
|
-
},
|
|
675
|
-
},
|
|
676
|
-
{
|
|
677
|
-
name: "jsenv:optimize",
|
|
678
|
-
appliesDuring: "build",
|
|
679
|
-
transformUrlContent: async (urlInfo, context) => {
|
|
680
|
-
await rawGraphKitchen.pluginController.callAsyncHooks(
|
|
681
|
-
"optimizeUrlContent",
|
|
682
|
-
urlInfo,
|
|
683
|
-
context,
|
|
684
|
-
async (optimizeReturnValue) => {
|
|
685
|
-
await finalGraphKitchen.urlInfoTransformer.applyFinalTransformations(
|
|
686
|
-
urlInfo,
|
|
687
|
-
optimizeReturnValue,
|
|
688
|
-
);
|
|
689
|
-
},
|
|
690
|
-
);
|
|
691
|
-
},
|
|
692
|
-
},
|
|
693
|
-
],
|
|
694
|
-
sourcemaps,
|
|
695
|
-
sourcemapsSourcesContent,
|
|
696
|
-
sourcemapsSourcesRelative: !versioning,
|
|
697
|
-
outDirectoryUrl: outDirectoryUrl
|
|
698
|
-
? new URL("postbuild/", outDirectoryUrl)
|
|
699
|
-
: undefined,
|
|
700
|
-
});
|
|
701
|
-
const finalEntryUrls = [];
|
|
389
|
+
let finalGraphKitchen;
|
|
390
|
+
let finalEntryUrls = [];
|
|
702
391
|
|
|
703
392
|
craft: {
|
|
704
|
-
const generateSourceGraph =
|
|
705
|
-
disabled: logger.levels.debug || !logger.levels.info,
|
|
706
|
-
});
|
|
393
|
+
const generateSourceGraph = createBuildTask("generate source graph");
|
|
707
394
|
try {
|
|
708
395
|
if (outDirectoryUrl) {
|
|
709
396
|
await ensureEmptyDirectory(new URL(`build/`, outDirectoryUrl));
|
|
@@ -725,6 +412,7 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
725
412
|
rawUrlGraphLoader.load(entryUrlInfo, { reference: entryReference });
|
|
726
413
|
});
|
|
727
414
|
await rawUrlGraphLoader.getAllLoadDonePromise(buildOperation);
|
|
415
|
+
await rawGraphKitchen.injectForwardedSideEffectFiles();
|
|
728
416
|
} catch (e) {
|
|
729
417
|
generateSourceGraph.fail();
|
|
730
418
|
throw e;
|
|
@@ -733,6 +421,341 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
733
421
|
}
|
|
734
422
|
|
|
735
423
|
shape: {
|
|
424
|
+
finalGraphKitchen = createKitchen({
|
|
425
|
+
logLevel,
|
|
426
|
+
rootDirectoryUrl: buildDirectoryUrl,
|
|
427
|
+
// here most plugins are not there
|
|
428
|
+
// - no external plugin
|
|
429
|
+
// - no plugin putting reference.mustIgnore on https urls
|
|
430
|
+
// At this stage it's only about redirecting urls to the build directory
|
|
431
|
+
// consequently only a subset or urls are supported
|
|
432
|
+
supportedProtocols: ["file:", "data:", "virtual:", "ignore:"],
|
|
433
|
+
ignore,
|
|
434
|
+
ignoreProtocol: versioning ? "keep" : "remove",
|
|
435
|
+
urlGraph: finalGraph,
|
|
436
|
+
build: true,
|
|
437
|
+
runtimeCompat,
|
|
438
|
+
...contextSharedDuringBuild,
|
|
439
|
+
plugins: [
|
|
440
|
+
jsenvPluginReferenceAnalysis({
|
|
441
|
+
...referenceAnalysis,
|
|
442
|
+
fetchInlineUrls: false,
|
|
443
|
+
}),
|
|
444
|
+
...(lineBreakNormalization
|
|
445
|
+
? [jsenvPluginLineBreakNormalization()]
|
|
446
|
+
: []),
|
|
447
|
+
jsenvPluginJsModuleFallback(),
|
|
448
|
+
jsenvPluginInlining(),
|
|
449
|
+
{
|
|
450
|
+
name: "jsenv:build_shape",
|
|
451
|
+
appliesDuring: "build",
|
|
452
|
+
resolveReference: (reference) => {
|
|
453
|
+
const getUrl = () => {
|
|
454
|
+
if (reference.type === "filesystem") {
|
|
455
|
+
const parentRawUrl = buildDirectoryRedirections.get(
|
|
456
|
+
reference.parentUrl,
|
|
457
|
+
);
|
|
458
|
+
const parentUrl = ensurePathnameTrailingSlash(parentRawUrl);
|
|
459
|
+
return new URL(reference.specifier, parentUrl).href;
|
|
460
|
+
}
|
|
461
|
+
if (reference.specifier[0] === "/") {
|
|
462
|
+
return new URL(
|
|
463
|
+
reference.specifier.slice(1),
|
|
464
|
+
buildDirectoryUrl,
|
|
465
|
+
).href;
|
|
466
|
+
}
|
|
467
|
+
return new URL(
|
|
468
|
+
reference.specifier,
|
|
469
|
+
reference.baseUrl || reference.parentUrl,
|
|
470
|
+
).href;
|
|
471
|
+
};
|
|
472
|
+
let url = getUrl();
|
|
473
|
+
// url = rawRedirections.get(url) || url
|
|
474
|
+
url = bundleRedirections.get(url) || url;
|
|
475
|
+
url = bundleInternalRedirections.get(url) || url;
|
|
476
|
+
return url;
|
|
477
|
+
},
|
|
478
|
+
// redirecting references into the build directory
|
|
479
|
+
redirectReference: (reference) => {
|
|
480
|
+
if (!reference.url.startsWith("file:")) {
|
|
481
|
+
return null;
|
|
482
|
+
}
|
|
483
|
+
// referenced by resource hint
|
|
484
|
+
// -> keep it untouched, it will be handled by "resync_resource_hints"
|
|
485
|
+
if (reference.isResourceHint) {
|
|
486
|
+
return reference.original ? reference.original.url : null;
|
|
487
|
+
}
|
|
488
|
+
// already a build url
|
|
489
|
+
const rawUrl = buildDirectoryRedirections.get(reference.url);
|
|
490
|
+
if (rawUrl) {
|
|
491
|
+
return reference.url;
|
|
492
|
+
}
|
|
493
|
+
if (reference.isInline) {
|
|
494
|
+
const parentUrlInfo = finalGraph.getUrlInfo(
|
|
495
|
+
reference.parentUrl,
|
|
496
|
+
);
|
|
497
|
+
const parentRawUrl = parentUrlInfo.originalUrl;
|
|
498
|
+
const rawUrlInfo = GRAPH_VISITOR.find(
|
|
499
|
+
rawGraph,
|
|
500
|
+
(rawUrlInfo) => {
|
|
501
|
+
const { inlineUrlSite } = rawUrlInfo;
|
|
502
|
+
// not inline
|
|
503
|
+
if (!inlineUrlSite) return false;
|
|
504
|
+
if (
|
|
505
|
+
inlineUrlSite.url === parentRawUrl &&
|
|
506
|
+
inlineUrlSite.line === reference.specifierLine &&
|
|
507
|
+
inlineUrlSite.column === reference.specifierColumn
|
|
508
|
+
) {
|
|
509
|
+
return true;
|
|
510
|
+
}
|
|
511
|
+
if (rawUrlInfo.content === reference.content) {
|
|
512
|
+
return true;
|
|
513
|
+
}
|
|
514
|
+
if (rawUrlInfo.originalContent === reference.content) {
|
|
515
|
+
return true;
|
|
516
|
+
}
|
|
517
|
+
return false;
|
|
518
|
+
},
|
|
519
|
+
);
|
|
520
|
+
|
|
521
|
+
if (!rawUrlInfo) {
|
|
522
|
+
// generated during final graph
|
|
523
|
+
// (happens for JSON.parse injected for import assertions for instance)
|
|
524
|
+
// throw new Error(`cannot find raw url for "${reference.url}"`)
|
|
525
|
+
return reference.url;
|
|
526
|
+
}
|
|
527
|
+
const buildUrl = buildUrlsGenerator.generate(reference.url, {
|
|
528
|
+
urlInfo: rawUrlInfo,
|
|
529
|
+
parentUrlInfo,
|
|
530
|
+
});
|
|
531
|
+
associateBuildUrlAndRawUrl(
|
|
532
|
+
buildUrl,
|
|
533
|
+
rawUrlInfo.url,
|
|
534
|
+
"inline content",
|
|
535
|
+
);
|
|
536
|
+
return buildUrl;
|
|
537
|
+
}
|
|
538
|
+
// from "js_module_fallback":
|
|
539
|
+
// - injecting "?js_module_fallback" for the first time
|
|
540
|
+
// - injecting "?js_module_fallback" because the parentUrl has it
|
|
541
|
+
if (reference.original) {
|
|
542
|
+
const urlBeforeRedirect = reference.original.url;
|
|
543
|
+
const urlAfterRedirect = reference.url;
|
|
544
|
+
const isEntryPoint =
|
|
545
|
+
reference.isEntryPoint ||
|
|
546
|
+
isWebWorkerEntryPointReference(reference);
|
|
547
|
+
// the url info do not exists yet (it will be created after this "redirectReference" hook)
|
|
548
|
+
// And the content will be generated when url is cooked by url graph loader.
|
|
549
|
+
// Here we just want to reserve an url for that file
|
|
550
|
+
const urlInfo = {
|
|
551
|
+
data: reference.data,
|
|
552
|
+
isEntryPoint,
|
|
553
|
+
type: reference.expectedType,
|
|
554
|
+
subtype: reference.expectedSubtype,
|
|
555
|
+
filename: reference.filename,
|
|
556
|
+
};
|
|
557
|
+
if (urlIsInsideOf(urlBeforeRedirect, buildDirectoryUrl)) {
|
|
558
|
+
// the redirection happened on a build url, happens due to:
|
|
559
|
+
// 1. bundling
|
|
560
|
+
const buildUrl = buildUrlsGenerator.generate(
|
|
561
|
+
urlAfterRedirect,
|
|
562
|
+
{
|
|
563
|
+
urlInfo,
|
|
564
|
+
},
|
|
565
|
+
);
|
|
566
|
+
finalRedirections.set(urlBeforeRedirect, buildUrl);
|
|
567
|
+
return buildUrl;
|
|
568
|
+
}
|
|
569
|
+
const rawUrl = urlAfterRedirect;
|
|
570
|
+
const buildUrl = buildUrlsGenerator.generate(rawUrl, {
|
|
571
|
+
urlInfo,
|
|
572
|
+
});
|
|
573
|
+
finalRedirections.set(urlBeforeRedirect, buildUrl);
|
|
574
|
+
associateBuildUrlAndRawUrl(
|
|
575
|
+
buildUrl,
|
|
576
|
+
rawUrl,
|
|
577
|
+
"redirected during postbuild",
|
|
578
|
+
);
|
|
579
|
+
return buildUrl;
|
|
580
|
+
}
|
|
581
|
+
// from "js_module_fallback":
|
|
582
|
+
// - to inject "s.js"
|
|
583
|
+
if (reference.injected) {
|
|
584
|
+
const buildUrl = buildUrlsGenerator.generate(reference.url, {
|
|
585
|
+
urlInfo: {
|
|
586
|
+
data: {},
|
|
587
|
+
type: "js_classic",
|
|
588
|
+
},
|
|
589
|
+
});
|
|
590
|
+
associateBuildUrlAndRawUrl(
|
|
591
|
+
buildUrl,
|
|
592
|
+
reference.url,
|
|
593
|
+
"injected during postbuild",
|
|
594
|
+
);
|
|
595
|
+
finalRedirections.set(buildUrl, buildUrl);
|
|
596
|
+
return buildUrl;
|
|
597
|
+
}
|
|
598
|
+
const rawUrlInfo = rawGraph.getUrlInfo(reference.url);
|
|
599
|
+
const parentUrlInfo = finalGraph.getUrlInfo(reference.parentUrl);
|
|
600
|
+
// files from root directory but not given to rollup nor postcss
|
|
601
|
+
if (rawUrlInfo) {
|
|
602
|
+
const referencedUrlObject = new URL(reference.url);
|
|
603
|
+
referencedUrlObject.searchParams.delete("as_js_classic");
|
|
604
|
+
const buildUrl = buildUrlsGenerator.generate(
|
|
605
|
+
referencedUrlObject.href,
|
|
606
|
+
{
|
|
607
|
+
urlInfo: rawUrlInfo,
|
|
608
|
+
parentUrlInfo,
|
|
609
|
+
},
|
|
610
|
+
);
|
|
611
|
+
associateBuildUrlAndRawUrl(
|
|
612
|
+
buildUrl,
|
|
613
|
+
rawUrlInfo.url,
|
|
614
|
+
"raw file",
|
|
615
|
+
);
|
|
616
|
+
if (buildUrl.includes("?")) {
|
|
617
|
+
associateBuildUrlAndRawUrl(
|
|
618
|
+
asUrlWithoutSearch(buildUrl),
|
|
619
|
+
rawUrlInfo.url,
|
|
620
|
+
"raw file",
|
|
621
|
+
);
|
|
622
|
+
}
|
|
623
|
+
return buildUrl;
|
|
624
|
+
}
|
|
625
|
+
if (reference.type === "sourcemap_comment") {
|
|
626
|
+
// inherit parent build url
|
|
627
|
+
return generateSourcemapFileUrl(reference.parentUrl);
|
|
628
|
+
}
|
|
629
|
+
// files generated during the final graph:
|
|
630
|
+
// - sourcemaps
|
|
631
|
+
// const finalUrlInfo = finalGraph.getUrlInfo(url)
|
|
632
|
+
const buildUrl = buildUrlsGenerator.generate(reference.url, {
|
|
633
|
+
urlInfo: {
|
|
634
|
+
data: {},
|
|
635
|
+
type: "asset",
|
|
636
|
+
},
|
|
637
|
+
});
|
|
638
|
+
return buildUrl;
|
|
639
|
+
},
|
|
640
|
+
formatReference: (reference) => {
|
|
641
|
+
if (!reference.generatedUrl.startsWith("file:")) {
|
|
642
|
+
return null;
|
|
643
|
+
}
|
|
644
|
+
if (reference.isResourceHint) {
|
|
645
|
+
return null;
|
|
646
|
+
}
|
|
647
|
+
if (!urlIsInsideOf(reference.generatedUrl, buildDirectoryUrl)) {
|
|
648
|
+
throw new Error(
|
|
649
|
+
`urls should be inside build directory at this stage, found "${reference.url}"`,
|
|
650
|
+
);
|
|
651
|
+
}
|
|
652
|
+
const generatedUrlObject = new URL(reference.generatedUrl);
|
|
653
|
+
generatedUrlObject.searchParams.delete("js_classic");
|
|
654
|
+
generatedUrlObject.searchParams.delete("js_module");
|
|
655
|
+
generatedUrlObject.searchParams.delete("js_module_fallback");
|
|
656
|
+
generatedUrlObject.searchParams.delete("as_js_classic");
|
|
657
|
+
generatedUrlObject.searchParams.delete("as_js_module");
|
|
658
|
+
generatedUrlObject.searchParams.delete("as_json_module");
|
|
659
|
+
generatedUrlObject.searchParams.delete("as_css_module");
|
|
660
|
+
generatedUrlObject.searchParams.delete("as_text_module");
|
|
661
|
+
generatedUrlObject.hash = "";
|
|
662
|
+
const generatedUrl = generatedUrlObject.href;
|
|
663
|
+
const specifier = asFormattedBuildUrl(generatedUrl, reference);
|
|
664
|
+
buildUrls.set(specifier, reference.generatedUrl);
|
|
665
|
+
return specifier;
|
|
666
|
+
},
|
|
667
|
+
fetchUrlContent: async (finalUrlInfo, context) => {
|
|
668
|
+
const fromBundleOrRawGraph = (url) => {
|
|
669
|
+
const bundleUrlInfo = bundleUrlInfos[url];
|
|
670
|
+
if (bundleUrlInfo) {
|
|
671
|
+
return bundleUrlInfo;
|
|
672
|
+
}
|
|
673
|
+
const rawUrl = buildDirectoryRedirections.get(url) || url;
|
|
674
|
+
const rawUrlInfo = rawGraph.getUrlInfo(rawUrl);
|
|
675
|
+
if (!rawUrlInfo) {
|
|
676
|
+
throw new Error(
|
|
677
|
+
createDetailedMessage(`Cannot find url`, {
|
|
678
|
+
url,
|
|
679
|
+
"raw urls": Array.from(
|
|
680
|
+
buildDirectoryRedirections.values(),
|
|
681
|
+
),
|
|
682
|
+
"build urls": Array.from(
|
|
683
|
+
buildDirectoryRedirections.keys(),
|
|
684
|
+
),
|
|
685
|
+
}),
|
|
686
|
+
);
|
|
687
|
+
}
|
|
688
|
+
// logger.debug(`fetching from raw graph ${url}`)
|
|
689
|
+
if (rawUrlInfo.isInline) {
|
|
690
|
+
// Inline content, such as <script> inside html, is transformed during the previous phase.
|
|
691
|
+
// If we read the inline content it would be considered as the original content.
|
|
692
|
+
// - It could be "fixed" by taking into account sourcemap and consider sourcemap sources
|
|
693
|
+
// as the original content.
|
|
694
|
+
// - But it would not work when sourcemap are not generated
|
|
695
|
+
// - would be a bit slower
|
|
696
|
+
// - So instead of reading the inline content directly, we search into raw graph
|
|
697
|
+
// to get "originalContent" and "sourcemap"
|
|
698
|
+
finalUrlInfo.type = rawUrlInfo.type;
|
|
699
|
+
finalUrlInfo.subtype = rawUrlInfo.subtype;
|
|
700
|
+
return rawUrlInfo;
|
|
701
|
+
}
|
|
702
|
+
return rawUrlInfo;
|
|
703
|
+
};
|
|
704
|
+
const { reference } = context;
|
|
705
|
+
// reference injected during "postbuild":
|
|
706
|
+
// - happens for "js_module_fallback" injecting "s.js"
|
|
707
|
+
if (reference.injected) {
|
|
708
|
+
const [ref, rawUrlInfo] = rawGraphKitchen.injectReference({
|
|
709
|
+
...reference,
|
|
710
|
+
parentUrl: buildDirectoryRedirections.get(
|
|
711
|
+
reference.parentUrl,
|
|
712
|
+
),
|
|
713
|
+
});
|
|
714
|
+
await rawGraphKitchen.cook(rawUrlInfo, { reference: ref });
|
|
715
|
+
return rawUrlInfo;
|
|
716
|
+
}
|
|
717
|
+
if (reference.isInline) {
|
|
718
|
+
if (reference.prev && !reference.prev.isInline) {
|
|
719
|
+
const urlBeforeRedirect =
|
|
720
|
+
findKey(finalRedirections, reference.prev.url) ||
|
|
721
|
+
reference.prev.url;
|
|
722
|
+
return fromBundleOrRawGraph(urlBeforeRedirect);
|
|
723
|
+
}
|
|
724
|
+
return fromBundleOrRawGraph(reference.url);
|
|
725
|
+
}
|
|
726
|
+
// reference updated during "postbuild":
|
|
727
|
+
// - happens for "js_module_fallback"
|
|
728
|
+
if (reference.original) {
|
|
729
|
+
return fromBundleOrRawGraph(reference.original.url);
|
|
730
|
+
}
|
|
731
|
+
return fromBundleOrRawGraph(finalUrlInfo.url);
|
|
732
|
+
},
|
|
733
|
+
},
|
|
734
|
+
{
|
|
735
|
+
name: "jsenv:optimize",
|
|
736
|
+
appliesDuring: "build",
|
|
737
|
+
transformUrlContent: async (urlInfo, context) => {
|
|
738
|
+
await rawGraphKitchen.pluginController.callAsyncHooks(
|
|
739
|
+
"optimizeUrlContent",
|
|
740
|
+
urlInfo,
|
|
741
|
+
context,
|
|
742
|
+
(optimizeReturnValue) => {
|
|
743
|
+
finalGraphKitchen.urlInfoTransformer.applyTransformations(
|
|
744
|
+
urlInfo,
|
|
745
|
+
optimizeReturnValue,
|
|
746
|
+
);
|
|
747
|
+
},
|
|
748
|
+
);
|
|
749
|
+
},
|
|
750
|
+
},
|
|
751
|
+
],
|
|
752
|
+
sourcemaps,
|
|
753
|
+
sourcemapsSourcesContent,
|
|
754
|
+
sourcemapsSourcesRelative: !versioning,
|
|
755
|
+
outDirectoryUrl: outDirectoryUrl
|
|
756
|
+
? new URL("postbuild/", outDirectoryUrl)
|
|
757
|
+
: undefined,
|
|
758
|
+
});
|
|
736
759
|
bundle: {
|
|
737
760
|
rawGraphKitchen.pluginController.plugins.forEach((plugin) => {
|
|
738
761
|
const bundle = plugin.bundle;
|
|
@@ -767,12 +790,12 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
767
790
|
bundler.urlInfos.push(rawUrlInfo);
|
|
768
791
|
}
|
|
769
792
|
};
|
|
770
|
-
|
|
793
|
+
GRAPH_VISITOR.forEach(rawGraph, (rawUrlInfo) => {
|
|
771
794
|
// cleanup unused urls (avoid bundling things that are not actually used)
|
|
772
795
|
// happens for:
|
|
773
796
|
// - js import assertions
|
|
774
|
-
// - as_js_classic
|
|
775
|
-
if (!isUsed(rawUrlInfo)) {
|
|
797
|
+
// - conversion to js classic using ?as_js_classic or ?js_module_fallback
|
|
798
|
+
if (!rawGraph.isUsed(rawUrlInfo)) {
|
|
776
799
|
rawGraph.deleteUrlInfo(rawUrlInfo.url);
|
|
777
800
|
return;
|
|
778
801
|
}
|
|
@@ -854,9 +877,7 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
854
877
|
if (urlInfosToBundle.length === 0) {
|
|
855
878
|
return;
|
|
856
879
|
}
|
|
857
|
-
const bundleTask =
|
|
858
|
-
disabled: logger.levels.debug || !logger.levels.info,
|
|
859
|
-
});
|
|
880
|
+
const bundleTask = createBuildTask(`bundle "${type}"`);
|
|
860
881
|
try {
|
|
861
882
|
const bundlerGeneratedUrlInfos =
|
|
862
883
|
await rawGraphKitchen.pluginController.callAsyncHook(
|
|
@@ -946,9 +967,7 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
946
967
|
}, Promise.resolve());
|
|
947
968
|
}
|
|
948
969
|
reload_in_build_directory: {
|
|
949
|
-
const generateBuildGraph =
|
|
950
|
-
disabled: logger.levels.debug || !logger.levels.info,
|
|
951
|
-
});
|
|
970
|
+
const generateBuildGraph = createBuildTask("generate build graph");
|
|
952
971
|
try {
|
|
953
972
|
if (outDirectoryUrl) {
|
|
954
973
|
await ensureEmptyDirectory(new URL(`postbuild/`, outDirectoryUrl));
|
|
@@ -970,6 +989,7 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
970
989
|
});
|
|
971
990
|
});
|
|
972
991
|
await finalUrlGraphLoader.getAllLoadDonePromise(buildOperation);
|
|
992
|
+
await finalGraphKitchen.injectForwardedSideEffectFiles();
|
|
973
993
|
} catch (e) {
|
|
974
994
|
generateBuildGraph.fail();
|
|
975
995
|
throw e;
|
|
@@ -985,10 +1005,7 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
985
1005
|
if (!versioning) {
|
|
986
1006
|
break inject_version_in_urls;
|
|
987
1007
|
}
|
|
988
|
-
|
|
989
|
-
const versioningTask = createTaskLog("inject version in urls", {
|
|
990
|
-
disabled: logger.levels.debug || !logger.levels.info,
|
|
991
|
-
});
|
|
1008
|
+
const versioningTask = createBuildTask("inject version in urls");
|
|
992
1009
|
try {
|
|
993
1010
|
const canUseImportmap =
|
|
994
1011
|
versioningViaImportmap &&
|
|
@@ -1005,7 +1022,8 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
1005
1022
|
return true;
|
|
1006
1023
|
}
|
|
1007
1024
|
const urlInfo = graph.getUrlInfo(reference.url);
|
|
1008
|
-
const dependentWorker =
|
|
1025
|
+
const dependentWorker = GRAPH_VISITOR.findDependent(
|
|
1026
|
+
graph,
|
|
1009
1027
|
urlInfo,
|
|
1010
1028
|
(dependentUrlInfo) => {
|
|
1011
1029
|
return isWebWorkerUrlInfo(dependentUrlInfo);
|
|
@@ -1062,7 +1080,7 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
1062
1080
|
// see also https://github.com/rollup/rollup/pull/4543
|
|
1063
1081
|
const contentVersionMap = new Map();
|
|
1064
1082
|
const hashCallbacks = [];
|
|
1065
|
-
|
|
1083
|
+
GRAPH_VISITOR.forEach(finalGraph, (urlInfo) => {
|
|
1066
1084
|
if (urlInfo.type === "sourcemap") {
|
|
1067
1085
|
return;
|
|
1068
1086
|
}
|
|
@@ -1079,6 +1097,7 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
1079
1097
|
if (urlInfo.isInline) {
|
|
1080
1098
|
return;
|
|
1081
1099
|
}
|
|
1100
|
+
// urlInfo became inline and is not referenced by something else
|
|
1082
1101
|
if (urlInfo.url.startsWith("data:")) {
|
|
1083
1102
|
return;
|
|
1084
1103
|
}
|
|
@@ -1096,6 +1115,7 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
1096
1115
|
}),
|
|
1097
1116
|
{
|
|
1098
1117
|
cleanupJsenvAttributes: true,
|
|
1118
|
+
cleanupPositionAttributes: true,
|
|
1099
1119
|
},
|
|
1100
1120
|
)
|
|
1101
1121
|
: urlInfo.content;
|
|
@@ -1255,7 +1275,7 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
1255
1275
|
}
|
|
1256
1276
|
const versionedUrl = versionedUrlMap.get(reference.url);
|
|
1257
1277
|
if (!versionedUrl) {
|
|
1258
|
-
// happens for
|
|
1278
|
+
// happens for inline content and sourcemaps
|
|
1259
1279
|
return urlToRelativeUrl(
|
|
1260
1280
|
referencedUrlInfo.url,
|
|
1261
1281
|
reference.parentUrl,
|
|
@@ -1282,12 +1302,10 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
1282
1302
|
},
|
|
1283
1303
|
fetchUrlContent: (versionedUrlInfo) => {
|
|
1284
1304
|
if (versionedUrlInfo.isInline) {
|
|
1285
|
-
const
|
|
1286
|
-
|
|
1287
|
-
);
|
|
1288
|
-
const finalUrlInfo = finalGraph.getUrlInfo(
|
|
1289
|
-
versionedUrlInfo.url,
|
|
1290
|
-
);
|
|
1305
|
+
const versionedUrl = versionedUrlInfo.url;
|
|
1306
|
+
const rawUrl = buildDirectoryRedirections.get(versionedUrl);
|
|
1307
|
+
const rawUrlInfo = rawGraph.getUrlInfo(rawUrl);
|
|
1308
|
+
const finalUrlInfo = finalGraph.getUrlInfo(versionedUrl);
|
|
1291
1309
|
return {
|
|
1292
1310
|
content: versionedUrlInfo.content,
|
|
1293
1311
|
contentType: versionedUrlInfo.contentType,
|
|
@@ -1338,8 +1356,8 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
1338
1356
|
if (urlInfo.type === "html" && urlInfo.isEntryPoint) {
|
|
1339
1357
|
actions.push(async () => {
|
|
1340
1358
|
await injectVersionMappingsAsImportmap({
|
|
1341
|
-
urlInfo,
|
|
1342
1359
|
kitchen: finalGraphKitchen,
|
|
1360
|
+
urlInfo,
|
|
1343
1361
|
versionMappings: versionMappingsNeeded,
|
|
1344
1362
|
});
|
|
1345
1363
|
});
|
|
@@ -1355,8 +1373,8 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
1355
1373
|
if (urlInfo.isEntryPoint) {
|
|
1356
1374
|
actions.push(async () => {
|
|
1357
1375
|
await injectVersionMappingsAsGlobal({
|
|
1358
|
-
urlInfo,
|
|
1359
1376
|
kitchen: finalGraphKitchen,
|
|
1377
|
+
urlInfo,
|
|
1360
1378
|
versionMappings: versionMappingsNeeded,
|
|
1361
1379
|
});
|
|
1362
1380
|
});
|
|
@@ -1364,7 +1382,7 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
1364
1382
|
});
|
|
1365
1383
|
}
|
|
1366
1384
|
if (visitors.length) {
|
|
1367
|
-
|
|
1385
|
+
GRAPH_VISITOR.forEach(finalGraph, (urlInfo) => {
|
|
1368
1386
|
visitors.forEach((visitor) => visitor(urlInfo));
|
|
1369
1387
|
});
|
|
1370
1388
|
if (actions.length) {
|
|
@@ -1378,7 +1396,7 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
1378
1396
|
versioningTask.done();
|
|
1379
1397
|
}
|
|
1380
1398
|
cleanup_jsenv_attributes_from_html: {
|
|
1381
|
-
|
|
1399
|
+
GRAPH_VISITOR.forEach(finalGraph, (urlInfo) => {
|
|
1382
1400
|
if (!urlInfo.url.startsWith("file:")) {
|
|
1383
1401
|
return;
|
|
1384
1402
|
}
|
|
@@ -1388,6 +1406,7 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
1388
1406
|
});
|
|
1389
1407
|
urlInfo.content = stringifyHtmlAst(htmlAst, {
|
|
1390
1408
|
cleanupJsenvAttributes: true,
|
|
1409
|
+
cleanupPositionAttributes: true,
|
|
1391
1410
|
});
|
|
1392
1411
|
}
|
|
1393
1412
|
});
|
|
@@ -1400,147 +1419,149 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
1400
1419
|
*/
|
|
1401
1420
|
resync_resource_hints: {
|
|
1402
1421
|
const actions = [];
|
|
1403
|
-
|
|
1422
|
+
GRAPH_VISITOR.forEach(finalGraph, (urlInfo) => {
|
|
1404
1423
|
if (urlInfo.type !== "html") {
|
|
1405
1424
|
return;
|
|
1406
1425
|
}
|
|
1407
|
-
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
|
|
1417
|
-
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
|
|
1421
|
-
|
|
1422
|
-
|
|
1423
|
-
|
|
1424
|
-
|
|
1425
|
-
|
|
1426
|
-
|
|
1427
|
-
|
|
1426
|
+
const htmlAst = parseHtmlString(urlInfo.content, {
|
|
1427
|
+
storeOriginalPositions: false,
|
|
1428
|
+
});
|
|
1429
|
+
const mutations = [];
|
|
1430
|
+
const hintsToInject = {};
|
|
1431
|
+
visitHtmlNodes(htmlAst, {
|
|
1432
|
+
link: (node) => {
|
|
1433
|
+
const href = getHtmlNodeAttribute(node, "href");
|
|
1434
|
+
if (href === undefined || href.startsWith("data:")) {
|
|
1435
|
+
return;
|
|
1436
|
+
}
|
|
1437
|
+
const rel = getHtmlNodeAttribute(node, "rel");
|
|
1438
|
+
const isResourceHint = [
|
|
1439
|
+
"preconnect",
|
|
1440
|
+
"dns-prefetch",
|
|
1441
|
+
"prefetch",
|
|
1442
|
+
"preload",
|
|
1443
|
+
"modulepreload",
|
|
1444
|
+
].includes(rel);
|
|
1445
|
+
if (!isResourceHint) {
|
|
1446
|
+
return;
|
|
1447
|
+
}
|
|
1448
|
+
const onBuildUrl = (buildUrl) => {
|
|
1449
|
+
const buildUrlInfo = buildUrl
|
|
1450
|
+
? finalGraph.getUrlInfo(buildUrl)
|
|
1451
|
+
: null;
|
|
1452
|
+
if (!buildUrlInfo) {
|
|
1453
|
+
logger.warn(
|
|
1454
|
+
`remove resource hint because cannot find "${href}" in the graph`,
|
|
1455
|
+
);
|
|
1456
|
+
mutations.push(() => {
|
|
1457
|
+
removeHtmlNode(node);
|
|
1458
|
+
});
|
|
1428
1459
|
return;
|
|
1429
1460
|
}
|
|
1430
|
-
|
|
1431
|
-
|
|
1432
|
-
|
|
1433
|
-
: null;
|
|
1434
|
-
if (!buildUrlInfo) {
|
|
1435
|
-
logger.warn(
|
|
1436
|
-
`remove resource hint because cannot find "${href}" in the graph`,
|
|
1437
|
-
);
|
|
1438
|
-
mutations.push(() => {
|
|
1439
|
-
removeHtmlNode(node);
|
|
1440
|
-
});
|
|
1441
|
-
return;
|
|
1442
|
-
}
|
|
1443
|
-
if (buildUrlInfo.dependents.size === 0) {
|
|
1444
|
-
logger.warn(
|
|
1445
|
-
`remove resource hint because "${href}" not used anymore`,
|
|
1446
|
-
);
|
|
1447
|
-
mutations.push(() => {
|
|
1448
|
-
removeHtmlNode(node);
|
|
1449
|
-
});
|
|
1450
|
-
return;
|
|
1451
|
-
}
|
|
1452
|
-
const buildUrlFormatted =
|
|
1453
|
-
versioningRedirections.get(buildUrlInfo.url) ||
|
|
1454
|
-
buildUrlInfo.url;
|
|
1455
|
-
const buildSpecifierBeforeRedirect = findKey(
|
|
1456
|
-
buildUrls,
|
|
1457
|
-
buildUrlFormatted,
|
|
1461
|
+
if (buildUrlInfo.dependents.size === 0) {
|
|
1462
|
+
logger.warn(
|
|
1463
|
+
`remove resource hint because "${href}" not used anymore`,
|
|
1458
1464
|
);
|
|
1459
1465
|
mutations.push(() => {
|
|
1460
|
-
|
|
1461
|
-
href: buildSpecifierBeforeRedirect,
|
|
1462
|
-
...(buildUrlInfo.type === "js_classic"
|
|
1463
|
-
? { crossorigin: undefined }
|
|
1464
|
-
: {}),
|
|
1465
|
-
});
|
|
1466
|
+
removeHtmlNode(node);
|
|
1466
1467
|
});
|
|
1467
|
-
|
|
1468
|
-
const dependencyUrlInfo =
|
|
1469
|
-
finalGraph.urlInfoMap.get(dependencyUrl);
|
|
1470
|
-
if (dependencyUrlInfo.data.generatedToShareCode) {
|
|
1471
|
-
hintsToInject[dependencyUrl] = node;
|
|
1472
|
-
}
|
|
1473
|
-
}
|
|
1474
|
-
};
|
|
1475
|
-
if (href.startsWith("file:")) {
|
|
1476
|
-
let url = href;
|
|
1477
|
-
url = rawRedirections.get(url) || url;
|
|
1478
|
-
const rawUrlInfo = rawGraph.getUrlInfo(url);
|
|
1479
|
-
if (rawUrlInfo && rawUrlInfo.data.bundled) {
|
|
1480
|
-
logger.warn(
|
|
1481
|
-
`remove resource hint on "${href}" because it was bundled`,
|
|
1482
|
-
);
|
|
1483
|
-
mutations.push(() => {
|
|
1484
|
-
removeHtmlNode(node);
|
|
1485
|
-
});
|
|
1486
|
-
} else {
|
|
1487
|
-
url = bundleRedirections.get(url) || url;
|
|
1488
|
-
url = bundleInternalRedirections.get(url) || url;
|
|
1489
|
-
url = finalRedirections.get(url) || url;
|
|
1490
|
-
url = findKey(buildDirectoryRedirections, url) || url;
|
|
1491
|
-
onBuildUrl(url);
|
|
1492
|
-
}
|
|
1493
|
-
} else {
|
|
1494
|
-
onBuildUrl(null);
|
|
1468
|
+
return;
|
|
1495
1469
|
}
|
|
1496
|
-
|
|
1497
|
-
|
|
1498
|
-
|
|
1499
|
-
|
|
1500
|
-
|
|
1501
|
-
|
|
1502
|
-
const specifierBeforeRedirect = findKey(buildUrls, urlFormatted);
|
|
1503
|
-
const found = findHtmlNode(htmlAst, (htmlNode) => {
|
|
1504
|
-
return (
|
|
1505
|
-
htmlNode.nodeName === "link" &&
|
|
1506
|
-
getHtmlNodeAttribute(htmlNode, "href") ===
|
|
1507
|
-
specifierBeforeRedirect
|
|
1470
|
+
const buildUrlFormatted =
|
|
1471
|
+
versioningRedirections.get(buildUrlInfo.url) ||
|
|
1472
|
+
buildUrlInfo.url;
|
|
1473
|
+
const buildSpecifierBeforeRedirect = findKey(
|
|
1474
|
+
buildUrls,
|
|
1475
|
+
buildUrlFormatted,
|
|
1508
1476
|
);
|
|
1509
|
-
});
|
|
1510
|
-
if (!found) {
|
|
1511
1477
|
mutations.push(() => {
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
|
|
1517
|
-
type: getHtmlNodeAttribute(hintNode, "type"),
|
|
1518
|
-
crossorigin: getHtmlNodeAttribute(hintNode, "crossorigin"),
|
|
1478
|
+
setHtmlNodeAttributes(node, {
|
|
1479
|
+
href: buildSpecifierBeforeRedirect,
|
|
1480
|
+
...(buildUrlInfo.type === "js_classic"
|
|
1481
|
+
? { crossorigin: undefined }
|
|
1482
|
+
: {}),
|
|
1519
1483
|
});
|
|
1520
|
-
insertHtmlNodeAfter(nodeToInsert, hintNode);
|
|
1521
1484
|
});
|
|
1485
|
+
for (const dependencyUrl of buildUrlInfo.dependencies) {
|
|
1486
|
+
const dependencyUrlInfo =
|
|
1487
|
+
finalGraph.urlInfoMap.get(dependencyUrl);
|
|
1488
|
+
if (dependencyUrlInfo.data.generatedToShareCode) {
|
|
1489
|
+
hintsToInject[dependencyUrl] = node;
|
|
1490
|
+
}
|
|
1491
|
+
}
|
|
1492
|
+
};
|
|
1493
|
+
if (href.startsWith("file:")) {
|
|
1494
|
+
let url = href;
|
|
1495
|
+
url = rawRedirections.get(url) || url;
|
|
1496
|
+
const rawUrlInfo = rawGraph.getUrlInfo(url);
|
|
1497
|
+
if (rawUrlInfo && rawUrlInfo.data.bundled) {
|
|
1498
|
+
logger.warn(
|
|
1499
|
+
`remove resource hint on "${href}" because it was bundled`,
|
|
1500
|
+
);
|
|
1501
|
+
mutations.push(() => {
|
|
1502
|
+
removeHtmlNode(node);
|
|
1503
|
+
});
|
|
1504
|
+
} else {
|
|
1505
|
+
url = bundleRedirections.get(url) || url;
|
|
1506
|
+
url = bundleInternalRedirections.get(url) || url;
|
|
1507
|
+
url = finalRedirections.get(url) || url;
|
|
1508
|
+
url = findKey(buildDirectoryRedirections, url) || url;
|
|
1509
|
+
onBuildUrl(url);
|
|
1510
|
+
}
|
|
1511
|
+
} else {
|
|
1512
|
+
onBuildUrl(null);
|
|
1522
1513
|
}
|
|
1514
|
+
},
|
|
1515
|
+
});
|
|
1516
|
+
Object.keys(hintsToInject).forEach((urlToHint) => {
|
|
1517
|
+
const hintNode = hintsToInject[urlToHint];
|
|
1518
|
+
const urlFormatted =
|
|
1519
|
+
versioningRedirections.get(urlToHint) || urlToHint;
|
|
1520
|
+
const specifierBeforeRedirect = findKey(buildUrls, urlFormatted);
|
|
1521
|
+
const found = findHtmlNode(htmlAst, (htmlNode) => {
|
|
1522
|
+
return (
|
|
1523
|
+
htmlNode.nodeName === "link" &&
|
|
1524
|
+
getHtmlNodeAttribute(htmlNode, "href") ===
|
|
1525
|
+
specifierBeforeRedirect
|
|
1526
|
+
);
|
|
1523
1527
|
});
|
|
1524
|
-
if (
|
|
1528
|
+
if (!found) {
|
|
1529
|
+
mutations.push(() => {
|
|
1530
|
+
const nodeToInsert = createHtmlNode({
|
|
1531
|
+
tagName: "link",
|
|
1532
|
+
href: specifierBeforeRedirect,
|
|
1533
|
+
rel: getHtmlNodeAttribute(hintNode, "rel"),
|
|
1534
|
+
as: getHtmlNodeAttribute(hintNode, "as"),
|
|
1535
|
+
type: getHtmlNodeAttribute(hintNode, "type"),
|
|
1536
|
+
crossorigin: getHtmlNodeAttribute(hintNode, "crossorigin"),
|
|
1537
|
+
});
|
|
1538
|
+
insertHtmlNodeAfter(nodeToInsert, hintNode);
|
|
1539
|
+
});
|
|
1540
|
+
}
|
|
1541
|
+
});
|
|
1542
|
+
if (mutations.length > 0) {
|
|
1543
|
+
actions.push(() => {
|
|
1525
1544
|
mutations.forEach((mutation) => mutation());
|
|
1526
|
-
|
|
1545
|
+
finalGraphKitchen.urlInfoTransformer.applyTransformations(
|
|
1527
1546
|
urlInfo,
|
|
1528
1547
|
{
|
|
1529
1548
|
content: stringifyHtmlAst(htmlAst),
|
|
1530
1549
|
},
|
|
1531
1550
|
);
|
|
1532
|
-
}
|
|
1533
|
-
}
|
|
1551
|
+
});
|
|
1552
|
+
}
|
|
1534
1553
|
});
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
|
|
1538
|
-
|
|
1554
|
+
if (actions.length > 0) {
|
|
1555
|
+
const resyncTask = createBuildTask("resync resource hints");
|
|
1556
|
+
actions.map((resourceHintAction) => resourceHintAction());
|
|
1557
|
+
buildOperation.throwIfAborted();
|
|
1558
|
+
resyncTask.done();
|
|
1559
|
+
}
|
|
1539
1560
|
}
|
|
1540
1561
|
delete_unused_urls: {
|
|
1541
1562
|
const actions = [];
|
|
1542
|
-
|
|
1543
|
-
if (!isUsed(urlInfo)) {
|
|
1563
|
+
GRAPH_VISITOR.forEach(finalGraph, (urlInfo) => {
|
|
1564
|
+
if (!finalGraph.isUsed(urlInfo)) {
|
|
1544
1565
|
actions.push(() => {
|
|
1545
1566
|
finalGraph.deleteUrlInfo(urlInfo.url);
|
|
1546
1567
|
});
|
|
@@ -1549,7 +1570,7 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
1549
1570
|
actions.forEach((action) => action());
|
|
1550
1571
|
}
|
|
1551
1572
|
inject_urls_in_service_workers: {
|
|
1552
|
-
const serviceWorkerEntryUrlInfos =
|
|
1573
|
+
const serviceWorkerEntryUrlInfos = GRAPH_VISITOR.filter(
|
|
1553
1574
|
finalGraph,
|
|
1554
1575
|
(finalUrlInfo) => {
|
|
1555
1576
|
return (
|
|
@@ -1559,8 +1580,11 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
1559
1580
|
},
|
|
1560
1581
|
);
|
|
1561
1582
|
if (serviceWorkerEntryUrlInfos.length > 0) {
|
|
1583
|
+
const urlsInjectionInSw = createBuildTask(
|
|
1584
|
+
"inject urls in service worker",
|
|
1585
|
+
);
|
|
1562
1586
|
const serviceWorkerResources = {};
|
|
1563
|
-
|
|
1587
|
+
GRAPH_VISITOR.forEach(finalGraph, (urlInfo) => {
|
|
1564
1588
|
if (!urlInfo.url.startsWith("file:")) {
|
|
1565
1589
|
return;
|
|
1566
1590
|
}
|
|
@@ -1607,7 +1631,7 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
1607
1631
|
)};\n`,
|
|
1608
1632
|
);
|
|
1609
1633
|
const { content, sourcemap } = magicSource.toContentAndSourcemap();
|
|
1610
|
-
finalGraphKitchen.urlInfoTransformer.
|
|
1634
|
+
finalGraphKitchen.urlInfoTransformer.applyTransformations(
|
|
1611
1635
|
serviceWorkerEntryUrlInfo,
|
|
1612
1636
|
{
|
|
1613
1637
|
content,
|
|
@@ -1615,6 +1639,7 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
1615
1639
|
},
|
|
1616
1640
|
);
|
|
1617
1641
|
});
|
|
1642
|
+
urlsInjectionInSw.done();
|
|
1618
1643
|
}
|
|
1619
1644
|
buildOperation.throwIfAborted();
|
|
1620
1645
|
}
|
|
@@ -1633,7 +1658,7 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
1633
1658
|
const buildRelativeUrl = urlToRelativeUrl(url, buildDirectoryUrl);
|
|
1634
1659
|
return buildRelativeUrl;
|
|
1635
1660
|
};
|
|
1636
|
-
|
|
1661
|
+
GRAPH_VISITOR.forEach(finalGraph, (urlInfo) => {
|
|
1637
1662
|
if (!urlInfo.url.startsWith("file:")) {
|
|
1638
1663
|
return;
|
|
1639
1664
|
}
|
|
@@ -1675,6 +1700,7 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
1675
1700
|
});
|
|
1676
1701
|
|
|
1677
1702
|
if (writeOnFileSystem) {
|
|
1703
|
+
const writingFiles = createBuildTask("write files in build directory");
|
|
1678
1704
|
if (directoryToClean) {
|
|
1679
1705
|
await ensureEmptyDirectory(directoryToClean);
|
|
1680
1706
|
}
|
|
@@ -1691,6 +1717,7 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
1691
1717
|
JSON.stringify(buildManifest, null, " "),
|
|
1692
1718
|
);
|
|
1693
1719
|
}
|
|
1720
|
+
writingFiles.done();
|
|
1694
1721
|
}
|
|
1695
1722
|
logger.info(createUrlGraphSummary(finalGraph, { title: "build files" }));
|
|
1696
1723
|
return {
|
|
@@ -1791,22 +1818,6 @@ const injectVersionIntoBuildUrl = ({ buildUrl, version, versioningMethod }) => {
|
|
|
1791
1818
|
return versionedUrl;
|
|
1792
1819
|
};
|
|
1793
1820
|
|
|
1794
|
-
const isUsed = (urlInfo) => {
|
|
1795
|
-
// nothing uses this url anymore
|
|
1796
|
-
// - versioning update inline content
|
|
1797
|
-
// - file converted for import assertion or js_classic conversion
|
|
1798
|
-
if (urlInfo.isEntryPoint) {
|
|
1799
|
-
return true;
|
|
1800
|
-
}
|
|
1801
|
-
if (urlInfo.type === "sourcemap") {
|
|
1802
|
-
return true;
|
|
1803
|
-
}
|
|
1804
|
-
if (urlInfo.injected) {
|
|
1805
|
-
return true;
|
|
1806
|
-
}
|
|
1807
|
-
return urlInfo.dependents.size > 0;
|
|
1808
|
-
};
|
|
1809
|
-
|
|
1810
1821
|
const canUseVersionedUrl = (urlInfo) => {
|
|
1811
1822
|
if (urlInfo.isEntryPoint) {
|
|
1812
1823
|
return false;
|