@jsenv/core 35.0.2 → 35.0.4
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/html/explorer.html +107 -107
- package/dist/js/new_stylesheet.js +3 -0
- package/dist/js/s.js.map +3 -3
- package/dist/jsenv_core.js +15 -17
- package/package.json +1 -1
- package/src/build/build.js +589 -587
- package/src/build/build_urls_generator.js +44 -44
- package/src/build/graph_utils.js +14 -14
- package/src/build/jsenv_plugin_line_break_normalization.js +6 -6
- package/src/build/line_break_unix.js +11 -11
- package/src/build/start_build_server.js +37 -37
- package/src/build/version_generator.js +7 -7
- package/src/build/version_mappings_injection.js +23 -23
- package/src/dev/file_service.js +136 -135
- package/src/dev/start_dev_server.js +56 -56
- package/src/dev/user_agent.js +8 -8
- package/src/helpers/basic_fetch.js +24 -24
- package/src/helpers/command/command.js +28 -28
- package/src/helpers/lookup_package_directory.js +19 -16
- package/src/helpers/ping_server.js +17 -17
- package/src/helpers/require_from_jsenv.js +2 -2
- package/src/helpers/watch_source_files.js +9 -9
- package/src/helpers/web_url_converter.js +10 -10
- package/src/helpers/worker_reload.js +27 -27
- package/src/kitchen/compat/features_compatibility.js +1 -1
- package/src/kitchen/compat/runtime_compat.js +26 -24
- package/src/kitchen/errors.js +75 -75
- package/src/kitchen/fetched_content_compliance.js +8 -8
- package/src/kitchen/kitchen.js +251 -250
- package/src/kitchen/url_graph/sort_by_dependencies.js +17 -17
- package/src/kitchen/url_graph/url_graph_loader.js +30 -30
- package/src/kitchen/url_graph/url_graph_report.js +57 -57
- package/src/kitchen/url_graph/url_info_transformations.js +77 -77
- package/src/kitchen/url_graph.js +121 -121
- package/src/kitchen/url_specifier_encoding.js +21 -21
- package/src/kitchen/web_workers.js +5 -5
- package/src/main.js +3 -3
- package/src/plugins/autoreload/client/autoreload.js +96 -96
- package/src/plugins/autoreload/client/reload.js +56 -56
- package/src/plugins/autoreload/client/url_helpers.js +13 -13
- package/src/plugins/autoreload/jsenv_plugin_autoreload.js +5 -5
- package/src/plugins/autoreload/jsenv_plugin_autoreload_client.js +9 -9
- package/src/plugins/autoreload/jsenv_plugin_autoreload_server.js +61 -60
- package/src/plugins/autoreload/jsenv_plugin_hmr.js +15 -15
- package/src/plugins/cache_control/jsenv_plugin_cache_control.js +5 -5
- package/src/plugins/commonjs_globals/jsenv_plugin_commonjs_globals.js +57 -57
- package/src/plugins/explorer/client/explorer.html +107 -107
- package/src/plugins/explorer/jsenv_plugin_explorer.js +23 -25
- package/src/plugins/file_urls/jsenv_plugin_file_urls.js +60 -60
- package/src/plugins/global_scenarios/jsenv_plugin_global_scenarios.js +5 -5
- package/src/plugins/http_urls/jsenv_plugin_http_urls.js +3 -3
- package/src/plugins/import_meta_hot/babel_plugin_metadata_import_meta_hot.js +35 -35
- package/src/plugins/import_meta_hot/client/import_meta_hot.js +26 -26
- package/src/plugins/import_meta_hot/html_hot_dependencies.js +43 -43
- package/src/plugins/import_meta_hot/jsenv_plugin_import_meta_hot.js +44 -40
- package/src/plugins/import_meta_scenarios/jsenv_plugin_import_meta_scenarios.js +35 -35
- package/src/plugins/import_meta_url/client/import_meta_url_browser.js +21 -21
- package/src/plugins/import_meta_url/client/import_meta_url_commonjs.mjs +3 -3
- package/src/plugins/importmap/jsenv_plugin_importmap.js +54 -54
- package/src/plugins/inline_content_analysis/client/inline_content.js +3 -3
- package/src/plugins/inline_content_analysis/jsenv_plugin_data_urls.js +26 -26
- package/src/plugins/inline_content_analysis/jsenv_plugin_html_inline_content_analysis.js +47 -47
- package/src/plugins/inline_content_analysis/jsenv_plugin_inline_content_analysis.js +9 -9
- package/src/plugins/inline_content_analysis/jsenv_plugin_js_inline_content_analysis.js +101 -101
- package/src/plugins/inlining/jsenv_plugin_inlining.js +9 -9
- package/src/plugins/inlining/jsenv_plugin_inlining_as_data_url.js +11 -11
- package/src/plugins/inlining/jsenv_plugin_inlining_into_html.js +48 -46
- package/src/plugins/node_runtime/jsenv_plugin_node_runtime.js +4 -4
- package/src/plugins/plugin_controller.js +124 -124
- package/src/plugins/plugins.js +30 -30
- package/src/plugins/ribbon/client/ribbon.js +6 -6
- package/src/plugins/ribbon/jsenv_plugin_ribbon.js +15 -15
- package/src/plugins/server_events/client/connection_manager.js +52 -52
- package/src/plugins/server_events/client/event_source_connection.js +36 -36
- package/src/plugins/server_events/client/events_manager.js +37 -37
- package/src/plugins/server_events/client/server_events_client.js +7 -7
- package/src/plugins/server_events/client/web_socket_connection.js +39 -39
- package/src/plugins/server_events/jsenv_plugin_server_events_client_injection.js +9 -9
- package/src/plugins/server_events/server_events_dispatcher.js +43 -43
- package/src/plugins/supervisor/client/supervisor.js +455 -450
- package/src/plugins/supervisor/html_supervisor_injection.js +64 -62
- package/src/plugins/supervisor/js_supervisor_injection.js +67 -67
- package/src/plugins/supervisor/jsenv_plugin_supervisor.js +54 -51
- package/src/plugins/transpilation/as_js_module/convert_js_classic_to_js_module.js +13 -13
- package/src/plugins/transpilation/as_js_module/jsenv_plugin_as_js_module.js +19 -19
- package/src/plugins/transpilation/babel/global_this/babel_plugin_global_this_as_jsenv_import.js +10 -10
- package/src/plugins/transpilation/babel/global_this/client/global_this.js +8 -8
- package/src/plugins/transpilation/babel/helpers/babel_plugin_babel_helpers_as_jsenv_imports.js +16 -16
- package/src/plugins/transpilation/babel/helpers/babel_plugin_structure.js +36 -36
- package/src/plugins/transpilation/babel/helpers/babel_plugins_compatibility.js +3 -3
- package/src/plugins/transpilation/babel/jsenv_plugin_babel.js +24 -24
- package/src/plugins/transpilation/babel/new_stylesheet/babel_plugin_new_stylesheet_as_jsenv_import.js +44 -44
- package/src/plugins/transpilation/babel/new_stylesheet/client/new_stylesheet.js +166 -166
- package/src/plugins/transpilation/babel/regenerator_runtime/babel_plugin_regenerator_runtime_as_jsenv_import.js +10 -10
- package/src/plugins/transpilation/babel/require_babel_plugin.js +6 -6
- package/src/plugins/transpilation/css/jsenv_plugin_css_transpilation.js +20 -20
- package/src/plugins/transpilation/import_assertions/jsenv_plugin_import_assertions.js +62 -62
- package/src/plugins/transpilation/js_module_fallback/client/s.js +214 -209
- package/src/plugins/transpilation/js_module_fallback/convert_js_module_to_js_classic.js +45 -45
- package/src/plugins/transpilation/js_module_fallback/helpers/babel_plugin_transform_import_meta_resolve.js +6 -6
- package/src/plugins/transpilation/js_module_fallback/helpers/babel_plugin_transform_import_meta_url.js +17 -17
- package/src/plugins/transpilation/js_module_fallback/helpers-string.js +1 -1
- package/src/plugins/transpilation/js_module_fallback/jsenv_plugin_js_module_conversion.js +32 -32
- package/src/plugins/transpilation/js_module_fallback/jsenv_plugin_js_module_fallback.js +17 -17
- package/src/plugins/transpilation/js_module_fallback/jsenv_plugin_js_module_fallback_inside_html.js +63 -63
- package/src/plugins/transpilation/js_module_fallback/jsenv_plugin_js_module_fallback_on_workers.js +15 -15
- package/src/plugins/transpilation/jsenv_plugin_import_meta_resolve.js +20 -20
- package/src/plugins/transpilation/jsenv_plugin_top_level_await.js +23 -23
- package/src/plugins/transpilation/jsenv_plugin_transpilation.js +11 -11
- package/src/plugins/url_analysis/css/css_urls.js +12 -12
- package/src/plugins/url_analysis/html/html_urls.js +85 -85
- package/src/plugins/url_analysis/js/js_urls.js +16 -16
- package/src/plugins/url_analysis/jsenv_plugin_reference_expected_types.js +16 -16
- package/src/plugins/url_analysis/jsenv_plugin_url_analysis.js +40 -40
- package/src/plugins/url_analysis/webmanifest/webmanifest_urls.js +12 -12
- package/src/plugins/url_resolution/jsenv_plugin_url_resolution.js +36 -36
- package/src/plugins/url_resolution/node_esm_resolver.js +26 -26
- package/src/plugins/url_version/jsenv_plugin_url_version.js +11 -11
package/src/build/build.js
CHANGED
|
@@ -26,21 +26,21 @@ import {
|
|
|
26
26
|
urlToBasename,
|
|
27
27
|
urlToExtension,
|
|
28
28
|
urlToRelativeUrl,
|
|
29
|
-
} from "@jsenv/urls"
|
|
29
|
+
} from "@jsenv/urls";
|
|
30
30
|
import {
|
|
31
31
|
assertAndNormalizeDirectoryUrl,
|
|
32
32
|
ensureEmptyDirectory,
|
|
33
33
|
writeFileSync,
|
|
34
34
|
comparePathnames,
|
|
35
|
-
} from "@jsenv/filesystem"
|
|
36
|
-
import { Abort, raceProcessTeardownEvents } from "@jsenv/abort"
|
|
35
|
+
} from "@jsenv/filesystem";
|
|
36
|
+
import { Abort, raceProcessTeardownEvents } from "@jsenv/abort";
|
|
37
37
|
import {
|
|
38
38
|
createLogger,
|
|
39
39
|
createTaskLog,
|
|
40
40
|
ANSI,
|
|
41
41
|
createDetailedMessage,
|
|
42
|
-
} from "@jsenv/log"
|
|
43
|
-
import { createMagicSource, generateSourcemapFileUrl } from "@jsenv/sourcemap"
|
|
42
|
+
} from "@jsenv/log";
|
|
43
|
+
import { createMagicSource, generateSourcemapFileUrl } from "@jsenv/sourcemap";
|
|
44
44
|
import {
|
|
45
45
|
parseHtmlString,
|
|
46
46
|
stringifyHtmlAst,
|
|
@@ -51,33 +51,33 @@ import {
|
|
|
51
51
|
createHtmlNode,
|
|
52
52
|
insertHtmlNodeAfter,
|
|
53
53
|
findHtmlNode,
|
|
54
|
-
} from "@jsenv/ast"
|
|
54
|
+
} from "@jsenv/ast";
|
|
55
55
|
|
|
56
|
-
import { lookupPackageDirectory } from "../helpers/lookup_package_directory.js"
|
|
57
|
-
import { watchSourceFiles } from "../helpers/watch_source_files.js"
|
|
58
|
-
import { createUrlGraph } from "../kitchen/url_graph.js"
|
|
59
|
-
import { createKitchen } from "../kitchen/kitchen.js"
|
|
60
|
-
import { RUNTIME_COMPAT } from "../kitchen/compat/runtime_compat.js"
|
|
61
|
-
import { createUrlGraphLoader } from "../kitchen/url_graph/url_graph_loader.js"
|
|
62
|
-
import { createUrlGraphSummary } from "../kitchen/url_graph/url_graph_report.js"
|
|
56
|
+
import { lookupPackageDirectory } from "../helpers/lookup_package_directory.js";
|
|
57
|
+
import { watchSourceFiles } from "../helpers/watch_source_files.js";
|
|
58
|
+
import { createUrlGraph } from "../kitchen/url_graph.js";
|
|
59
|
+
import { createKitchen } from "../kitchen/kitchen.js";
|
|
60
|
+
import { RUNTIME_COMPAT } from "../kitchen/compat/runtime_compat.js";
|
|
61
|
+
import { createUrlGraphLoader } from "../kitchen/url_graph/url_graph_loader.js";
|
|
62
|
+
import { createUrlGraphSummary } from "../kitchen/url_graph/url_graph_report.js";
|
|
63
63
|
import {
|
|
64
64
|
isWebWorkerEntryPointReference,
|
|
65
65
|
isWebWorkerUrlInfo,
|
|
66
|
-
} from "../kitchen/web_workers.js"
|
|
67
|
-
import { jsenvPluginUrlAnalysis } from "../plugins/url_analysis/jsenv_plugin_url_analysis.js"
|
|
68
|
-
import { jsenvPluginInlining } from "../plugins/inlining/jsenv_plugin_inlining.js"
|
|
69
|
-
import { jsenvPluginInlineContentAnalysis } from "../plugins/inline_content_analysis/jsenv_plugin_inline_content_analysis.js"
|
|
70
|
-
import { jsenvPluginJsModuleFallback } from "../plugins/transpilation/js_module_fallback/jsenv_plugin_js_module_fallback.js"
|
|
71
|
-
import { getCorePlugins } from "../plugins/plugins.js"
|
|
72
|
-
import { jsenvPluginLineBreakNormalization } from "./jsenv_plugin_line_break_normalization.js"
|
|
66
|
+
} from "../kitchen/web_workers.js";
|
|
67
|
+
import { jsenvPluginUrlAnalysis } from "../plugins/url_analysis/jsenv_plugin_url_analysis.js";
|
|
68
|
+
import { jsenvPluginInlining } from "../plugins/inlining/jsenv_plugin_inlining.js";
|
|
69
|
+
import { jsenvPluginInlineContentAnalysis } from "../plugins/inline_content_analysis/jsenv_plugin_inline_content_analysis.js";
|
|
70
|
+
import { jsenvPluginJsModuleFallback } from "../plugins/transpilation/js_module_fallback/jsenv_plugin_js_module_fallback.js";
|
|
71
|
+
import { getCorePlugins } from "../plugins/plugins.js";
|
|
72
|
+
import { jsenvPluginLineBreakNormalization } from "./jsenv_plugin_line_break_normalization.js";
|
|
73
73
|
|
|
74
|
-
import { GRAPH } from "./graph_utils.js"
|
|
75
|
-
import { createBuildUrlsGenerator } from "./build_urls_generator.js"
|
|
74
|
+
import { GRAPH } from "./graph_utils.js";
|
|
75
|
+
import { createBuildUrlsGenerator } from "./build_urls_generator.js";
|
|
76
76
|
import {
|
|
77
77
|
injectVersionMappingsAsGlobal,
|
|
78
78
|
injectVersionMappingsAsImportmap,
|
|
79
|
-
} from "./version_mappings_injection.js"
|
|
80
|
-
import { createVersionGenerator } from "./version_generator.js"
|
|
79
|
+
} from "./version_mappings_injection.js";
|
|
80
|
+
import { createVersionGenerator } from "./version_generator.js";
|
|
81
81
|
|
|
82
82
|
// default runtimeCompat corresponds to
|
|
83
83
|
// "we can keep <script type="module"> intact":
|
|
@@ -91,7 +91,7 @@ export const defaultRuntimeCompat = {
|
|
|
91
91
|
opera: "51",
|
|
92
92
|
safari: "11.3",
|
|
93
93
|
samsung: "9.2",
|
|
94
|
-
}
|
|
94
|
+
};
|
|
95
95
|
|
|
96
96
|
/**
|
|
97
97
|
* Generate an optimized version of source files into a directory
|
|
@@ -161,65 +161,65 @@ export const build = async ({
|
|
|
161
161
|
}) => {
|
|
162
162
|
// param validation
|
|
163
163
|
{
|
|
164
|
-
const unexpectedParamNames = Object.keys(rest)
|
|
164
|
+
const unexpectedParamNames = Object.keys(rest);
|
|
165
165
|
if (unexpectedParamNames.length > 0) {
|
|
166
166
|
throw new TypeError(
|
|
167
167
|
`${unexpectedParamNames.join(",")}: there is no such param`,
|
|
168
|
-
)
|
|
168
|
+
);
|
|
169
169
|
}
|
|
170
170
|
sourceDirectoryUrl = assertAndNormalizeDirectoryUrl(
|
|
171
171
|
sourceDirectoryUrl,
|
|
172
172
|
"sourceDirectoryUrl",
|
|
173
|
-
)
|
|
173
|
+
);
|
|
174
174
|
buildDirectoryUrl = assertAndNormalizeDirectoryUrl(
|
|
175
175
|
buildDirectoryUrl,
|
|
176
176
|
"buildDirectoryUrl",
|
|
177
|
-
)
|
|
177
|
+
);
|
|
178
178
|
if (outDirectoryUrl === undefined) {
|
|
179
179
|
if (!process.env.CI) {
|
|
180
|
-
const packageDirectoryUrl = lookupPackageDirectory(sourceDirectoryUrl)
|
|
180
|
+
const packageDirectoryUrl = lookupPackageDirectory(sourceDirectoryUrl);
|
|
181
181
|
if (packageDirectoryUrl) {
|
|
182
|
-
outDirectoryUrl = `${packageDirectoryUrl}.jsenv
|
|
182
|
+
outDirectoryUrl = `${packageDirectoryUrl}.jsenv/`;
|
|
183
183
|
}
|
|
184
184
|
}
|
|
185
185
|
} else if (outDirectoryUrl !== null && outDirectoryUrl !== false) {
|
|
186
186
|
outDirectoryUrl = assertAndNormalizeDirectoryUrl(
|
|
187
187
|
outDirectoryUrl,
|
|
188
188
|
"outDirectoryUrl",
|
|
189
|
-
)
|
|
189
|
+
);
|
|
190
190
|
}
|
|
191
191
|
|
|
192
192
|
if (typeof entryPoints !== "object" || entryPoints === null) {
|
|
193
|
-
throw new TypeError(`entryPoints must be an object, got ${entryPoints}`)
|
|
193
|
+
throw new TypeError(`entryPoints must be an object, got ${entryPoints}`);
|
|
194
194
|
}
|
|
195
|
-
const keys = Object.keys(entryPoints)
|
|
195
|
+
const keys = Object.keys(entryPoints);
|
|
196
196
|
keys.forEach((key) => {
|
|
197
197
|
if (!key.startsWith("./")) {
|
|
198
198
|
throw new TypeError(
|
|
199
199
|
`entryPoints keys must start with "./", found ${key}`,
|
|
200
|
-
)
|
|
200
|
+
);
|
|
201
201
|
}
|
|
202
|
-
const value = entryPoints[key]
|
|
202
|
+
const value = entryPoints[key];
|
|
203
203
|
if (typeof value !== "string") {
|
|
204
204
|
throw new TypeError(
|
|
205
205
|
`entryPoints values must be strings, found "${value}" on key "${key}"`,
|
|
206
|
-
)
|
|
206
|
+
);
|
|
207
207
|
}
|
|
208
208
|
if (value.includes("/")) {
|
|
209
209
|
throw new TypeError(
|
|
210
210
|
`entryPoints values must be plain strings (no "/"), found "${value}" on key "${key}"`,
|
|
211
|
-
)
|
|
211
|
+
);
|
|
212
212
|
}
|
|
213
|
-
})
|
|
213
|
+
});
|
|
214
214
|
if (!["filename", "search_param"].includes(versioningMethod)) {
|
|
215
215
|
throw new TypeError(
|
|
216
216
|
`versioningMethod must be "filename" or "search_param", got ${versioning}`,
|
|
217
|
-
)
|
|
217
|
+
);
|
|
218
218
|
}
|
|
219
219
|
}
|
|
220
220
|
|
|
221
|
-
const operation = Abort.startOperation()
|
|
222
|
-
operation.addAbortSignal(signal)
|
|
221
|
+
const operation = Abort.startOperation();
|
|
222
|
+
operation.addAbortSignal(signal);
|
|
223
223
|
if (handleSIGINT) {
|
|
224
224
|
operation.addAbortSource((abort) => {
|
|
225
225
|
return raceProcessTeardownEvents(
|
|
@@ -227,18 +227,18 @@ export const build = async ({
|
|
|
227
227
|
SIGINT: true,
|
|
228
228
|
},
|
|
229
229
|
abort,
|
|
230
|
-
)
|
|
231
|
-
})
|
|
230
|
+
);
|
|
231
|
+
});
|
|
232
232
|
}
|
|
233
233
|
|
|
234
234
|
if (assetsDirectory && assetsDirectory[assetsDirectory.length - 1] !== "/") {
|
|
235
|
-
assetsDirectory = `${assetsDirectory}
|
|
235
|
+
assetsDirectory = `${assetsDirectory}/`;
|
|
236
236
|
}
|
|
237
237
|
if (directoryToClean === undefined) {
|
|
238
238
|
if (assetsDirectory === undefined) {
|
|
239
|
-
directoryToClean = buildDirectoryUrl
|
|
239
|
+
directoryToClean = buildDirectoryUrl;
|
|
240
240
|
} else {
|
|
241
|
-
directoryToClean = new URL(assetsDirectory, buildDirectoryUrl).href
|
|
241
|
+
directoryToClean = new URL(assetsDirectory, buildDirectoryUrl).href;
|
|
242
242
|
}
|
|
243
243
|
}
|
|
244
244
|
|
|
@@ -249,64 +249,64 @@ export const build = async ({
|
|
|
249
249
|
reference.parentUrl === sourceDirectoryUrl
|
|
250
250
|
? buildDirectoryUrl
|
|
251
251
|
: reference.parentUrl,
|
|
252
|
-
)
|
|
252
|
+
);
|
|
253
253
|
if (urlRelativeToParent[0] !== ".") {
|
|
254
254
|
// ensure "./" on relative url (otherwise it could be a "bare specifier")
|
|
255
|
-
return `./${urlRelativeToParent}
|
|
255
|
+
return `./${urlRelativeToParent}`;
|
|
256
256
|
}
|
|
257
|
-
return urlRelativeToParent
|
|
257
|
+
return urlRelativeToParent;
|
|
258
258
|
}
|
|
259
259
|
const urlRelativeToBuildDirectory = urlToRelativeUrl(
|
|
260
260
|
generatedUrl,
|
|
261
261
|
buildDirectoryUrl,
|
|
262
|
-
)
|
|
263
|
-
return `${base}${urlRelativeToBuildDirectory}
|
|
264
|
-
}
|
|
262
|
+
);
|
|
263
|
+
return `${base}${urlRelativeToBuildDirectory}`;
|
|
264
|
+
};
|
|
265
265
|
|
|
266
266
|
const runBuild = async ({ signal, logLevel }) => {
|
|
267
|
-
const logger = createLogger({ logLevel })
|
|
268
|
-
const buildOperation = Abort.startOperation()
|
|
269
|
-
buildOperation.addAbortSignal(signal)
|
|
270
|
-
const entryPointKeys = Object.keys(entryPoints)
|
|
267
|
+
const logger = createLogger({ logLevel });
|
|
268
|
+
const buildOperation = Abort.startOperation();
|
|
269
|
+
buildOperation.addAbortSignal(signal);
|
|
270
|
+
const entryPointKeys = Object.keys(entryPoints);
|
|
271
271
|
if (entryPointKeys.length === 1) {
|
|
272
272
|
logger.info(`
|
|
273
|
-
build "${entryPointKeys[0]}"`)
|
|
273
|
+
build "${entryPointKeys[0]}"`);
|
|
274
274
|
} else {
|
|
275
275
|
logger.info(`
|
|
276
|
-
build ${entryPointKeys.length} entry points`)
|
|
276
|
+
build ${entryPointKeys.length} entry points`);
|
|
277
277
|
}
|
|
278
278
|
const explicitJsModuleFallback = entryPointKeys.some((key) =>
|
|
279
279
|
entryPoints[key].includes("?js_module_fallback"),
|
|
280
|
-
)
|
|
281
|
-
const rawRedirections = new Map()
|
|
282
|
-
const bundleRedirections = new Map()
|
|
283
|
-
const bundleInternalRedirections = new Map()
|
|
284
|
-
const finalRedirections = new Map()
|
|
285
|
-
const versioningRedirections = new Map()
|
|
286
|
-
const entryUrls = []
|
|
287
|
-
const rawGraph = createUrlGraph()
|
|
280
|
+
);
|
|
281
|
+
const rawRedirections = new Map();
|
|
282
|
+
const bundleRedirections = new Map();
|
|
283
|
+
const bundleInternalRedirections = new Map();
|
|
284
|
+
const finalRedirections = new Map();
|
|
285
|
+
const versioningRedirections = new Map();
|
|
286
|
+
const entryUrls = [];
|
|
287
|
+
const rawGraph = createUrlGraph();
|
|
288
288
|
const contextSharedDuringBuild = {
|
|
289
289
|
systemJsTranspilation: (() => {
|
|
290
|
-
const nodeRuntimeEnabled = Object.keys(runtimeCompat).includes("node")
|
|
291
|
-
if (nodeRuntimeEnabled) return false
|
|
290
|
+
const nodeRuntimeEnabled = Object.keys(runtimeCompat).includes("node");
|
|
291
|
+
if (nodeRuntimeEnabled) return false;
|
|
292
292
|
if (!RUNTIME_COMPAT.isSupported(runtimeCompat, "script_type_module"))
|
|
293
|
-
return true
|
|
293
|
+
return true;
|
|
294
294
|
if (!RUNTIME_COMPAT.isSupported(runtimeCompat, "import_dynamic"))
|
|
295
|
-
return true
|
|
295
|
+
return true;
|
|
296
296
|
if (!RUNTIME_COMPAT.isSupported(runtimeCompat, "import_meta"))
|
|
297
|
-
return true
|
|
297
|
+
return true;
|
|
298
298
|
if (
|
|
299
299
|
versioning &&
|
|
300
300
|
versioningViaImportmap &&
|
|
301
301
|
!RUNTIME_COMPAT.isSupported(runtimeCompat, "importmap")
|
|
302
302
|
)
|
|
303
|
-
return true
|
|
304
|
-
return false
|
|
303
|
+
return true;
|
|
304
|
+
return false;
|
|
305
305
|
})(),
|
|
306
306
|
minification: plugins.some(
|
|
307
307
|
(plugin) => plugin.name === "jsenv:minification",
|
|
308
308
|
),
|
|
309
|
-
}
|
|
309
|
+
};
|
|
310
310
|
const rawGraphKitchen = createKitchen({
|
|
311
311
|
signal,
|
|
312
312
|
logLevel,
|
|
@@ -324,14 +324,14 @@ build ${entryPointKeys.length} entry points`)
|
|
|
324
324
|
rawRedirections.set(
|
|
325
325
|
context.reference.original.url,
|
|
326
326
|
context.reference.url,
|
|
327
|
-
)
|
|
327
|
+
);
|
|
328
328
|
}
|
|
329
329
|
},
|
|
330
330
|
formatUrl: (reference) => {
|
|
331
331
|
if (!reference.shouldHandle) {
|
|
332
|
-
return `ignore:${reference.specifier}
|
|
332
|
+
return `ignore:${reference.specifier}`;
|
|
333
333
|
}
|
|
334
|
-
return null
|
|
334
|
+
return null;
|
|
335
335
|
},
|
|
336
336
|
},
|
|
337
337
|
...getCorePlugins({
|
|
@@ -357,32 +357,32 @@ build ${entryPointKeys.length} entry points`)
|
|
|
357
357
|
outDirectoryUrl: outDirectoryUrl
|
|
358
358
|
? new URL("build/", outDirectoryUrl)
|
|
359
359
|
: undefined,
|
|
360
|
-
})
|
|
360
|
+
});
|
|
361
361
|
|
|
362
362
|
const buildUrlsGenerator = createBuildUrlsGenerator({
|
|
363
363
|
buildDirectoryUrl,
|
|
364
364
|
assetsDirectory,
|
|
365
|
-
})
|
|
366
|
-
const buildDirectoryRedirections = new Map()
|
|
365
|
+
});
|
|
366
|
+
const buildDirectoryRedirections = new Map();
|
|
367
367
|
|
|
368
368
|
const associateBuildUrlAndRawUrl = (buildUrl, rawUrl, reason) => {
|
|
369
369
|
if (urlIsInsideOf(rawUrl, buildDirectoryUrl)) {
|
|
370
|
-
throw new Error(`raw url must be inside rawGraph, got ${rawUrl}`)
|
|
370
|
+
throw new Error(`raw url must be inside rawGraph, got ${rawUrl}`);
|
|
371
371
|
}
|
|
372
372
|
logger.debug(`build url generated (${reason})
|
|
373
373
|
${ANSI.color(rawUrl, ANSI.GREY)} ->
|
|
374
374
|
${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
375
|
-
`)
|
|
376
|
-
buildDirectoryRedirections.set(buildUrl, rawUrl)
|
|
377
|
-
}
|
|
378
|
-
const buildUrls = new Map()
|
|
379
|
-
const bundleUrlInfos = {}
|
|
380
|
-
const bundlers = {}
|
|
381
|
-
const finalGraph = createUrlGraph()
|
|
375
|
+
`);
|
|
376
|
+
buildDirectoryRedirections.set(buildUrl, rawUrl);
|
|
377
|
+
};
|
|
378
|
+
const buildUrls = new Map();
|
|
379
|
+
const bundleUrlInfos = {};
|
|
380
|
+
const bundlers = {};
|
|
381
|
+
const finalGraph = createUrlGraph();
|
|
382
382
|
const urlAnalysisPlugin = jsenvPluginUrlAnalysis({
|
|
383
383
|
rootDirectoryUrl: sourceDirectoryUrl,
|
|
384
384
|
...urlAnalysis,
|
|
385
|
-
})
|
|
385
|
+
});
|
|
386
386
|
const finalGraphKitchen = createKitchen({
|
|
387
387
|
logLevel,
|
|
388
388
|
rootDirectoryUrl: buildDirectoryUrl,
|
|
@@ -410,89 +410,89 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
410
410
|
if (reference.type === "filesystem") {
|
|
411
411
|
const parentRawUrl = buildDirectoryRedirections.get(
|
|
412
412
|
reference.parentUrl,
|
|
413
|
-
)
|
|
414
|
-
const parentUrl = ensurePathnameTrailingSlash(parentRawUrl)
|
|
415
|
-
return new URL(reference.specifier, parentUrl).href
|
|
413
|
+
);
|
|
414
|
+
const parentUrl = ensurePathnameTrailingSlash(parentRawUrl);
|
|
415
|
+
return new URL(reference.specifier, parentUrl).href;
|
|
416
416
|
}
|
|
417
417
|
if (reference.specifier[0] === "/") {
|
|
418
418
|
return new URL(reference.specifier.slice(1), buildDirectoryUrl)
|
|
419
|
-
.href
|
|
419
|
+
.href;
|
|
420
420
|
}
|
|
421
421
|
return new URL(
|
|
422
422
|
reference.specifier,
|
|
423
423
|
reference.baseUrl || reference.parentUrl,
|
|
424
|
-
).href
|
|
425
|
-
}
|
|
426
|
-
let url = getUrl()
|
|
424
|
+
).href;
|
|
425
|
+
};
|
|
426
|
+
let url = getUrl();
|
|
427
427
|
// url = rawRedirections.get(url) || url
|
|
428
|
-
url = bundleRedirections.get(url) || url
|
|
429
|
-
url = bundleInternalRedirections.get(url) || url
|
|
430
|
-
return url
|
|
428
|
+
url = bundleRedirections.get(url) || url;
|
|
429
|
+
url = bundleInternalRedirections.get(url) || url;
|
|
430
|
+
return url;
|
|
431
431
|
},
|
|
432
432
|
// redirecting urls into the build directory
|
|
433
433
|
redirectUrl: (reference) => {
|
|
434
434
|
if (!reference.url.startsWith("file:")) {
|
|
435
|
-
return null
|
|
435
|
+
return null;
|
|
436
436
|
}
|
|
437
437
|
// referenced by resource hint
|
|
438
438
|
// -> keep it untouched, it will be handled by "resync_resource_hints"
|
|
439
439
|
if (reference.isResourceHint) {
|
|
440
|
-
return reference.original ? reference.original.url : null
|
|
440
|
+
return reference.original ? reference.original.url : null;
|
|
441
441
|
}
|
|
442
442
|
// already a build url
|
|
443
|
-
const rawUrl = buildDirectoryRedirections.get(reference.url)
|
|
443
|
+
const rawUrl = buildDirectoryRedirections.get(reference.url);
|
|
444
444
|
if (rawUrl) {
|
|
445
|
-
return reference.url
|
|
445
|
+
return reference.url;
|
|
446
446
|
}
|
|
447
447
|
if (reference.isInline) {
|
|
448
|
-
const parentUrlInfo = finalGraph.getUrlInfo(reference.parentUrl)
|
|
449
|
-
const parentRawUrl = parentUrlInfo.originalUrl
|
|
448
|
+
const parentUrlInfo = finalGraph.getUrlInfo(reference.parentUrl);
|
|
449
|
+
const parentRawUrl = parentUrlInfo.originalUrl;
|
|
450
450
|
const rawUrlInfo = GRAPH.find(rawGraph, (rawUrlInfo) => {
|
|
451
|
-
const { inlineUrlSite } = rawUrlInfo
|
|
451
|
+
const { inlineUrlSite } = rawUrlInfo;
|
|
452
452
|
// not inline
|
|
453
|
-
if (!inlineUrlSite) return false
|
|
453
|
+
if (!inlineUrlSite) return false;
|
|
454
454
|
if (
|
|
455
455
|
inlineUrlSite.url === parentRawUrl &&
|
|
456
456
|
inlineUrlSite.line === reference.specifierLine &&
|
|
457
457
|
inlineUrlSite.column === reference.specifierColumn
|
|
458
458
|
) {
|
|
459
|
-
return true
|
|
459
|
+
return true;
|
|
460
460
|
}
|
|
461
461
|
if (rawUrlInfo.content === reference.content) {
|
|
462
|
-
return true
|
|
462
|
+
return true;
|
|
463
463
|
}
|
|
464
464
|
if (rawUrlInfo.originalContent === reference.content) {
|
|
465
|
-
return true
|
|
465
|
+
return true;
|
|
466
466
|
}
|
|
467
|
-
return false
|
|
468
|
-
})
|
|
467
|
+
return false;
|
|
468
|
+
});
|
|
469
469
|
|
|
470
470
|
if (!rawUrlInfo) {
|
|
471
471
|
// generated during final graph
|
|
472
472
|
// (happens for JSON.parse injected for import assertions for instance)
|
|
473
473
|
// throw new Error(`cannot find raw url for "${reference.url}"`)
|
|
474
|
-
return reference.url
|
|
474
|
+
return reference.url;
|
|
475
475
|
}
|
|
476
476
|
const buildUrl = buildUrlsGenerator.generate(reference.url, {
|
|
477
477
|
urlInfo: rawUrlInfo,
|
|
478
478
|
parentUrlInfo,
|
|
479
|
-
})
|
|
479
|
+
});
|
|
480
480
|
associateBuildUrlAndRawUrl(
|
|
481
481
|
buildUrl,
|
|
482
482
|
rawUrlInfo.url,
|
|
483
483
|
"inline content",
|
|
484
|
-
)
|
|
485
|
-
return buildUrl
|
|
484
|
+
);
|
|
485
|
+
return buildUrl;
|
|
486
486
|
}
|
|
487
487
|
// from "js_module_fallback":
|
|
488
488
|
// - injecting "?js_module_fallback" for the first time
|
|
489
489
|
// - injecting "?js_module_fallback" because the parentUrl has it
|
|
490
490
|
if (reference.original) {
|
|
491
|
-
const urlBeforeRedirect = reference.original.url
|
|
492
|
-
const urlAfterRedirect = reference.url
|
|
491
|
+
const urlBeforeRedirect = reference.original.url;
|
|
492
|
+
const urlAfterRedirect = reference.url;
|
|
493
493
|
const isEntryPoint =
|
|
494
494
|
reference.isEntryPoint ||
|
|
495
|
-
isWebWorkerEntryPointReference(reference)
|
|
495
|
+
isWebWorkerEntryPointReference(reference);
|
|
496
496
|
// the url info do not exists yet (it will be created after this "redirectUrl" hook)
|
|
497
497
|
// And the content will be generated when url is cooked by url graph loader.
|
|
498
498
|
// Here we just want to reserve an url for that file
|
|
@@ -502,27 +502,27 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
502
502
|
type: reference.expectedType,
|
|
503
503
|
subtype: reference.expectedSubtype,
|
|
504
504
|
filename: reference.filename,
|
|
505
|
-
}
|
|
505
|
+
};
|
|
506
506
|
if (urlIsInsideOf(urlBeforeRedirect, buildDirectoryUrl)) {
|
|
507
507
|
// the redirection happened on a build url, happens due to:
|
|
508
508
|
// 1. bundling
|
|
509
509
|
const buildUrl = buildUrlsGenerator.generate(urlAfterRedirect, {
|
|
510
510
|
urlInfo,
|
|
511
|
-
})
|
|
512
|
-
finalRedirections.set(urlBeforeRedirect, buildUrl)
|
|
513
|
-
return buildUrl
|
|
511
|
+
});
|
|
512
|
+
finalRedirections.set(urlBeforeRedirect, buildUrl);
|
|
513
|
+
return buildUrl;
|
|
514
514
|
}
|
|
515
|
-
const rawUrl = urlAfterRedirect
|
|
515
|
+
const rawUrl = urlAfterRedirect;
|
|
516
516
|
const buildUrl = buildUrlsGenerator.generate(rawUrl, {
|
|
517
517
|
urlInfo,
|
|
518
|
-
})
|
|
519
|
-
finalRedirections.set(urlBeforeRedirect, buildUrl)
|
|
518
|
+
});
|
|
519
|
+
finalRedirections.set(urlBeforeRedirect, buildUrl);
|
|
520
520
|
associateBuildUrlAndRawUrl(
|
|
521
521
|
buildUrl,
|
|
522
522
|
rawUrl,
|
|
523
523
|
"redirected during postbuild",
|
|
524
|
-
)
|
|
525
|
-
return buildUrl
|
|
524
|
+
);
|
|
525
|
+
return buildUrl;
|
|
526
526
|
}
|
|
527
527
|
// from "js_module_fallback":
|
|
528
528
|
// - to inject "s.js"
|
|
@@ -532,41 +532,41 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
532
532
|
data: {},
|
|
533
533
|
type: "js_classic",
|
|
534
534
|
},
|
|
535
|
-
})
|
|
535
|
+
});
|
|
536
536
|
associateBuildUrlAndRawUrl(
|
|
537
537
|
buildUrl,
|
|
538
538
|
reference.url,
|
|
539
539
|
"injected during postbuild",
|
|
540
|
-
)
|
|
541
|
-
finalRedirections.set(buildUrl, buildUrl)
|
|
542
|
-
return buildUrl
|
|
540
|
+
);
|
|
541
|
+
finalRedirections.set(buildUrl, buildUrl);
|
|
542
|
+
return buildUrl;
|
|
543
543
|
}
|
|
544
|
-
const rawUrlInfo = rawGraph.getUrlInfo(reference.url)
|
|
545
|
-
const parentUrlInfo = finalGraph.getUrlInfo(reference.parentUrl)
|
|
544
|
+
const rawUrlInfo = rawGraph.getUrlInfo(reference.url);
|
|
545
|
+
const parentUrlInfo = finalGraph.getUrlInfo(reference.parentUrl);
|
|
546
546
|
// files from root directory but not given to rollup nor postcss
|
|
547
547
|
if (rawUrlInfo) {
|
|
548
|
-
const referencedUrlObject = new URL(reference.url)
|
|
549
|
-
referencedUrlObject.searchParams.delete("as_js_classic")
|
|
548
|
+
const referencedUrlObject = new URL(reference.url);
|
|
549
|
+
referencedUrlObject.searchParams.delete("as_js_classic");
|
|
550
550
|
const buildUrl = buildUrlsGenerator.generate(
|
|
551
551
|
referencedUrlObject.href,
|
|
552
552
|
{
|
|
553
553
|
urlInfo: rawUrlInfo,
|
|
554
554
|
parentUrlInfo,
|
|
555
555
|
},
|
|
556
|
-
)
|
|
557
|
-
associateBuildUrlAndRawUrl(buildUrl, rawUrlInfo.url, "raw file")
|
|
556
|
+
);
|
|
557
|
+
associateBuildUrlAndRawUrl(buildUrl, rawUrlInfo.url, "raw file");
|
|
558
558
|
if (buildUrl.includes("?")) {
|
|
559
559
|
associateBuildUrlAndRawUrl(
|
|
560
560
|
asUrlWithoutSearch(buildUrl),
|
|
561
561
|
rawUrlInfo.url,
|
|
562
562
|
"raw file",
|
|
563
|
-
)
|
|
563
|
+
);
|
|
564
564
|
}
|
|
565
|
-
return buildUrl
|
|
565
|
+
return buildUrl;
|
|
566
566
|
}
|
|
567
567
|
if (reference.type === "sourcemap_comment") {
|
|
568
568
|
// inherit parent build url
|
|
569
|
-
return generateSourcemapFileUrl(reference.parentUrl)
|
|
569
|
+
return generateSourcemapFileUrl(reference.parentUrl);
|
|
570
570
|
}
|
|
571
571
|
// files generated during the final graph:
|
|
572
572
|
// - sourcemaps
|
|
@@ -576,48 +576,48 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
576
576
|
data: {},
|
|
577
577
|
type: "asset",
|
|
578
578
|
},
|
|
579
|
-
})
|
|
580
|
-
return buildUrl
|
|
579
|
+
});
|
|
580
|
+
return buildUrl;
|
|
581
581
|
},
|
|
582
582
|
formatUrl: (reference) => {
|
|
583
583
|
if (!reference.generatedUrl.startsWith("file:")) {
|
|
584
584
|
if (!versioning && reference.generatedUrl.startsWith("ignore:")) {
|
|
585
|
-
return reference.generatedUrl.slice("ignore:".length)
|
|
585
|
+
return reference.generatedUrl.slice("ignore:".length);
|
|
586
586
|
}
|
|
587
|
-
return null
|
|
587
|
+
return null;
|
|
588
588
|
}
|
|
589
589
|
if (reference.isResourceHint) {
|
|
590
|
-
return null
|
|
590
|
+
return null;
|
|
591
591
|
}
|
|
592
592
|
if (!urlIsInsideOf(reference.generatedUrl, buildDirectoryUrl)) {
|
|
593
593
|
throw new Error(
|
|
594
594
|
`urls should be inside build directory at this stage, found "${reference.url}"`,
|
|
595
|
-
)
|
|
595
|
+
);
|
|
596
596
|
}
|
|
597
|
-
const generatedUrlObject = new URL(reference.generatedUrl)
|
|
598
|
-
generatedUrlObject.searchParams.delete("js_classic")
|
|
599
|
-
generatedUrlObject.searchParams.delete("js_module")
|
|
600
|
-
generatedUrlObject.searchParams.delete("js_module_fallback")
|
|
601
|
-
generatedUrlObject.searchParams.delete("as_js_classic")
|
|
602
|
-
generatedUrlObject.searchParams.delete("as_js_module")
|
|
603
|
-
generatedUrlObject.searchParams.delete("as_json_module")
|
|
604
|
-
generatedUrlObject.searchParams.delete("as_css_module")
|
|
605
|
-
generatedUrlObject.searchParams.delete("as_text_module")
|
|
606
|
-
generatedUrlObject.hash = ""
|
|
607
|
-
const generatedUrl = generatedUrlObject.href
|
|
608
|
-
const specifier = asFormattedBuildUrl(generatedUrl, reference)
|
|
609
|
-
buildUrls.set(specifier, reference.generatedUrl)
|
|
610
|
-
return specifier
|
|
597
|
+
const generatedUrlObject = new URL(reference.generatedUrl);
|
|
598
|
+
generatedUrlObject.searchParams.delete("js_classic");
|
|
599
|
+
generatedUrlObject.searchParams.delete("js_module");
|
|
600
|
+
generatedUrlObject.searchParams.delete("js_module_fallback");
|
|
601
|
+
generatedUrlObject.searchParams.delete("as_js_classic");
|
|
602
|
+
generatedUrlObject.searchParams.delete("as_js_module");
|
|
603
|
+
generatedUrlObject.searchParams.delete("as_json_module");
|
|
604
|
+
generatedUrlObject.searchParams.delete("as_css_module");
|
|
605
|
+
generatedUrlObject.searchParams.delete("as_text_module");
|
|
606
|
+
generatedUrlObject.hash = "";
|
|
607
|
+
const generatedUrl = generatedUrlObject.href;
|
|
608
|
+
const specifier = asFormattedBuildUrl(generatedUrl, reference);
|
|
609
|
+
buildUrls.set(specifier, reference.generatedUrl);
|
|
610
|
+
return specifier;
|
|
611
611
|
},
|
|
612
612
|
fetchUrlContent: async (finalUrlInfo, context) => {
|
|
613
613
|
const fromBundleOrRawGraph = (url) => {
|
|
614
|
-
const bundleUrlInfo = bundleUrlInfos[url]
|
|
614
|
+
const bundleUrlInfo = bundleUrlInfos[url];
|
|
615
615
|
if (bundleUrlInfo) {
|
|
616
616
|
// logger.debug(`fetching from bundle ${url}`)
|
|
617
|
-
return bundleUrlInfo
|
|
617
|
+
return bundleUrlInfo;
|
|
618
618
|
}
|
|
619
|
-
const rawUrl = buildDirectoryRedirections.get(url) || url
|
|
620
|
-
const rawUrlInfo = rawGraph.getUrlInfo(rawUrl)
|
|
619
|
+
const rawUrl = buildDirectoryRedirections.get(url) || url;
|
|
620
|
+
const rawUrlInfo = rawGraph.getUrlInfo(rawUrl);
|
|
621
621
|
if (!rawUrlInfo) {
|
|
622
622
|
throw new Error(
|
|
623
623
|
createDetailedMessage(`Cannot find url`, {
|
|
@@ -625,7 +625,7 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
625
625
|
"raw urls": Array.from(buildDirectoryRedirections.values()),
|
|
626
626
|
"build urls": Array.from(buildDirectoryRedirections.keys()),
|
|
627
627
|
}),
|
|
628
|
-
)
|
|
628
|
+
);
|
|
629
629
|
}
|
|
630
630
|
// logger.debug(`fetching from raw graph ${url}`)
|
|
631
631
|
if (rawUrlInfo.isInline) {
|
|
@@ -637,39 +637,39 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
637
637
|
// - would be a bit slower
|
|
638
638
|
// - So instead of reading the inline content directly, we search into raw graph
|
|
639
639
|
// to get "originalContent" and "sourcemap"
|
|
640
|
-
finalUrlInfo.type = rawUrlInfo.type
|
|
641
|
-
finalUrlInfo.subtype = rawUrlInfo.subtype
|
|
642
|
-
return rawUrlInfo
|
|
640
|
+
finalUrlInfo.type = rawUrlInfo.type;
|
|
641
|
+
finalUrlInfo.subtype = rawUrlInfo.subtype;
|
|
642
|
+
return rawUrlInfo;
|
|
643
643
|
}
|
|
644
|
-
return rawUrlInfo
|
|
645
|
-
}
|
|
646
|
-
const { reference } = context
|
|
644
|
+
return rawUrlInfo;
|
|
645
|
+
};
|
|
646
|
+
const { reference } = context;
|
|
647
647
|
// reference injected during "postbuild":
|
|
648
648
|
// - happens for "js_module_fallback" injecting "s.js"
|
|
649
649
|
if (reference.injected) {
|
|
650
650
|
const [ref, rawUrlInfo] = rawGraphKitchen.injectReference({
|
|
651
651
|
...reference,
|
|
652
652
|
parentUrl: buildDirectoryRedirections.get(reference.parentUrl),
|
|
653
|
-
})
|
|
654
|
-
await rawGraphKitchen.cook(rawUrlInfo, { reference: ref })
|
|
655
|
-
return rawUrlInfo
|
|
653
|
+
});
|
|
654
|
+
await rawGraphKitchen.cook(rawUrlInfo, { reference: ref });
|
|
655
|
+
return rawUrlInfo;
|
|
656
656
|
}
|
|
657
657
|
if (reference.isInline) {
|
|
658
658
|
if (reference.prev && !reference.prev.isInline) {
|
|
659
659
|
const urlBeforeRedirect = findKey(
|
|
660
660
|
finalRedirections,
|
|
661
661
|
reference.prev.url,
|
|
662
|
-
)
|
|
663
|
-
return fromBundleOrRawGraph(urlBeforeRedirect)
|
|
662
|
+
);
|
|
663
|
+
return fromBundleOrRawGraph(urlBeforeRedirect);
|
|
664
664
|
}
|
|
665
|
-
return fromBundleOrRawGraph(reference.url)
|
|
665
|
+
return fromBundleOrRawGraph(reference.url);
|
|
666
666
|
}
|
|
667
667
|
// reference updated during "postbuild":
|
|
668
668
|
// - happens for "js_module_fallback"
|
|
669
669
|
if (reference.original) {
|
|
670
|
-
return fromBundleOrRawGraph(reference.original.url)
|
|
670
|
+
return fromBundleOrRawGraph(reference.original.url);
|
|
671
671
|
}
|
|
672
|
-
return fromBundleOrRawGraph(finalUrlInfo.url)
|
|
672
|
+
return fromBundleOrRawGraph(finalUrlInfo.url);
|
|
673
673
|
},
|
|
674
674
|
},
|
|
675
675
|
{
|
|
@@ -684,9 +684,9 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
684
684
|
await finalGraphKitchen.urlInfoTransformer.applyFinalTransformations(
|
|
685
685
|
urlInfo,
|
|
686
686
|
optimizeReturnValue,
|
|
687
|
-
)
|
|
687
|
+
);
|
|
688
688
|
},
|
|
689
|
-
)
|
|
689
|
+
);
|
|
690
690
|
},
|
|
691
691
|
},
|
|
692
692
|
],
|
|
@@ -696,20 +696,20 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
696
696
|
outDirectoryUrl: outDirectoryUrl
|
|
697
697
|
? new URL("postbuild/", outDirectoryUrl)
|
|
698
698
|
: undefined,
|
|
699
|
-
})
|
|
700
|
-
const finalEntryUrls = []
|
|
699
|
+
});
|
|
700
|
+
const finalEntryUrls = [];
|
|
701
701
|
|
|
702
702
|
craft: {
|
|
703
703
|
const generateSourceGraph = createTaskLog("generate source graph", {
|
|
704
704
|
disabled: logger.levels.debug || !logger.levels.info,
|
|
705
|
-
})
|
|
705
|
+
});
|
|
706
706
|
try {
|
|
707
707
|
if (outDirectoryUrl) {
|
|
708
|
-
await ensureEmptyDirectory(new URL(`build/`, outDirectoryUrl))
|
|
708
|
+
await ensureEmptyDirectory(new URL(`build/`, outDirectoryUrl));
|
|
709
709
|
}
|
|
710
710
|
const rawUrlGraphLoader = createUrlGraphLoader(
|
|
711
711
|
rawGraphKitchen.kitchenContext,
|
|
712
|
-
)
|
|
712
|
+
);
|
|
713
713
|
Object.keys(entryPoints).forEach((key) => {
|
|
714
714
|
const [entryReference, entryUrlInfo] =
|
|
715
715
|
rawGraphKitchen.kitchenContext.prepareEntryPoint({
|
|
@@ -717,70 +717,70 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
717
717
|
parentUrl: sourceDirectoryUrl,
|
|
718
718
|
type: "entry_point",
|
|
719
719
|
specifier: key,
|
|
720
|
-
})
|
|
721
|
-
entryUrls.push(entryUrlInfo.url)
|
|
722
|
-
entryUrlInfo.filename = entryPoints[key]
|
|
723
|
-
entryUrlInfo.isEntryPoint = true
|
|
724
|
-
rawUrlGraphLoader.load(entryUrlInfo, { reference: entryReference })
|
|
725
|
-
})
|
|
726
|
-
await rawUrlGraphLoader.getAllLoadDonePromise(buildOperation)
|
|
720
|
+
});
|
|
721
|
+
entryUrls.push(entryUrlInfo.url);
|
|
722
|
+
entryUrlInfo.filename = entryPoints[key];
|
|
723
|
+
entryUrlInfo.isEntryPoint = true;
|
|
724
|
+
rawUrlGraphLoader.load(entryUrlInfo, { reference: entryReference });
|
|
725
|
+
});
|
|
726
|
+
await rawUrlGraphLoader.getAllLoadDonePromise(buildOperation);
|
|
727
727
|
} catch (e) {
|
|
728
|
-
generateSourceGraph.fail()
|
|
729
|
-
throw e
|
|
728
|
+
generateSourceGraph.fail();
|
|
729
|
+
throw e;
|
|
730
730
|
}
|
|
731
|
-
generateSourceGraph.done()
|
|
731
|
+
generateSourceGraph.done();
|
|
732
732
|
}
|
|
733
733
|
|
|
734
734
|
shape: {
|
|
735
735
|
bundle: {
|
|
736
736
|
rawGraphKitchen.pluginController.plugins.forEach((plugin) => {
|
|
737
|
-
const bundle = plugin.bundle
|
|
737
|
+
const bundle = plugin.bundle;
|
|
738
738
|
if (!bundle) {
|
|
739
|
-
return
|
|
739
|
+
return;
|
|
740
740
|
}
|
|
741
741
|
if (typeof bundle !== "object") {
|
|
742
742
|
throw new Error(
|
|
743
743
|
`bundle must be an object, found "${bundle}" on plugin named "${plugin.name}"`,
|
|
744
|
-
)
|
|
744
|
+
);
|
|
745
745
|
}
|
|
746
746
|
Object.keys(bundle).forEach((type) => {
|
|
747
|
-
const bundleFunction = bundle[type]
|
|
747
|
+
const bundleFunction = bundle[type];
|
|
748
748
|
if (!bundleFunction) {
|
|
749
|
-
return
|
|
749
|
+
return;
|
|
750
750
|
}
|
|
751
|
-
const bundlerForThatType = bundlers[type]
|
|
751
|
+
const bundlerForThatType = bundlers[type];
|
|
752
752
|
if (bundlerForThatType) {
|
|
753
753
|
// first plugin to define a bundle hook wins
|
|
754
|
-
return
|
|
754
|
+
return;
|
|
755
755
|
}
|
|
756
756
|
bundlers[type] = {
|
|
757
757
|
plugin,
|
|
758
758
|
bundleFunction: bundle[type],
|
|
759
759
|
urlInfos: [],
|
|
760
|
-
}
|
|
761
|
-
})
|
|
762
|
-
})
|
|
760
|
+
};
|
|
761
|
+
});
|
|
762
|
+
});
|
|
763
763
|
const addToBundlerIfAny = (rawUrlInfo) => {
|
|
764
|
-
const bundler = bundlers[rawUrlInfo.type]
|
|
764
|
+
const bundler = bundlers[rawUrlInfo.type];
|
|
765
765
|
if (bundler) {
|
|
766
|
-
bundler.urlInfos.push(rawUrlInfo)
|
|
766
|
+
bundler.urlInfos.push(rawUrlInfo);
|
|
767
767
|
}
|
|
768
|
-
}
|
|
768
|
+
};
|
|
769
769
|
GRAPH.forEach(rawGraph, (rawUrlInfo) => {
|
|
770
770
|
// cleanup unused urls (avoid bundling things that are not actually used)
|
|
771
771
|
// happens for:
|
|
772
772
|
// - js import assertions
|
|
773
773
|
// - as_js_classic
|
|
774
774
|
if (!isUsed(rawUrlInfo)) {
|
|
775
|
-
rawGraph.deleteUrlInfo(rawUrlInfo.url)
|
|
776
|
-
return
|
|
775
|
+
rawGraph.deleteUrlInfo(rawUrlInfo.url);
|
|
776
|
+
return;
|
|
777
777
|
}
|
|
778
778
|
if (rawUrlInfo.isEntryPoint) {
|
|
779
|
-
addToBundlerIfAny(rawUrlInfo)
|
|
779
|
+
addToBundlerIfAny(rawUrlInfo);
|
|
780
780
|
}
|
|
781
781
|
if (rawUrlInfo.type === "html") {
|
|
782
782
|
rawUrlInfo.dependencies.forEach((dependencyUrl) => {
|
|
783
|
-
const dependencyUrlInfo = rawGraph.getUrlInfo(dependencyUrl)
|
|
783
|
+
const dependencyUrlInfo = rawGraph.getUrlInfo(dependencyUrl);
|
|
784
784
|
if (dependencyUrlInfo.isInline) {
|
|
785
785
|
if (dependencyUrlInfo.type === "js_module") {
|
|
786
786
|
// bundle inline script type module deps
|
|
@@ -788,32 +788,32 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
788
788
|
if (inlineScriptRef.type === "js_import") {
|
|
789
789
|
const inlineUrlInfo = rawGraph.getUrlInfo(
|
|
790
790
|
inlineScriptRef.url,
|
|
791
|
-
)
|
|
792
|
-
addToBundlerIfAny(inlineUrlInfo)
|
|
791
|
+
);
|
|
792
|
+
addToBundlerIfAny(inlineUrlInfo);
|
|
793
793
|
}
|
|
794
|
-
})
|
|
794
|
+
});
|
|
795
795
|
}
|
|
796
796
|
// inline content cannot be bundled
|
|
797
|
-
return
|
|
797
|
+
return;
|
|
798
798
|
}
|
|
799
|
-
addToBundlerIfAny(dependencyUrlInfo)
|
|
800
|
-
})
|
|
799
|
+
addToBundlerIfAny(dependencyUrlInfo);
|
|
800
|
+
});
|
|
801
801
|
rawUrlInfo.references.forEach((reference) => {
|
|
802
802
|
if (
|
|
803
803
|
reference.isResourceHint &&
|
|
804
804
|
reference.expectedType === "js_module"
|
|
805
805
|
) {
|
|
806
|
-
const referencedUrlInfo = rawGraph.getUrlInfo(reference.url)
|
|
806
|
+
const referencedUrlInfo = rawGraph.getUrlInfo(reference.url);
|
|
807
807
|
if (
|
|
808
808
|
referencedUrlInfo &&
|
|
809
809
|
// something else than the resource hint is using this url
|
|
810
810
|
referencedUrlInfo.dependents.size > 0
|
|
811
811
|
) {
|
|
812
|
-
addToBundlerIfAny(referencedUrlInfo)
|
|
812
|
+
addToBundlerIfAny(referencedUrlInfo);
|
|
813
813
|
}
|
|
814
814
|
}
|
|
815
|
-
})
|
|
816
|
-
return
|
|
815
|
+
});
|
|
816
|
+
return;
|
|
817
817
|
}
|
|
818
818
|
// File referenced with new URL('./file.js', import.meta.url)
|
|
819
819
|
// are entry points that should be bundled
|
|
@@ -821,41 +821,41 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
821
821
|
if (rawUrlInfo.type === "js_module") {
|
|
822
822
|
rawUrlInfo.references.forEach((reference) => {
|
|
823
823
|
if (reference.type !== "js_url") {
|
|
824
|
-
return
|
|
824
|
+
return;
|
|
825
825
|
}
|
|
826
|
-
const referencedUrlInfo = rawGraph.getUrlInfo(reference.url)
|
|
827
|
-
const bundler = bundlers[referencedUrlInfo.type]
|
|
826
|
+
const referencedUrlInfo = rawGraph.getUrlInfo(reference.url);
|
|
827
|
+
const bundler = bundlers[referencedUrlInfo.type];
|
|
828
828
|
if (!bundler) {
|
|
829
|
-
return
|
|
829
|
+
return;
|
|
830
830
|
}
|
|
831
831
|
|
|
832
|
-
let willAlreadyBeBundled = true
|
|
832
|
+
let willAlreadyBeBundled = true;
|
|
833
833
|
for (const dependent of referencedUrlInfo.dependents) {
|
|
834
|
-
const dependentUrlInfo = rawGraph.getUrlInfo(dependent)
|
|
834
|
+
const dependentUrlInfo = rawGraph.getUrlInfo(dependent);
|
|
835
835
|
for (const reference of dependentUrlInfo.references) {
|
|
836
836
|
if (reference.url === referencedUrlInfo.url) {
|
|
837
837
|
willAlreadyBeBundled =
|
|
838
838
|
reference.subtype === "import_dynamic" ||
|
|
839
|
-
reference.type === "script"
|
|
839
|
+
reference.type === "script";
|
|
840
840
|
}
|
|
841
841
|
}
|
|
842
842
|
}
|
|
843
843
|
if (!willAlreadyBeBundled) {
|
|
844
|
-
bundler.urlInfos.push(referencedUrlInfo)
|
|
844
|
+
bundler.urlInfos.push(referencedUrlInfo);
|
|
845
845
|
}
|
|
846
|
-
})
|
|
846
|
+
});
|
|
847
847
|
}
|
|
848
|
-
})
|
|
848
|
+
});
|
|
849
849
|
await Object.keys(bundlers).reduce(async (previous, type) => {
|
|
850
|
-
await previous
|
|
851
|
-
const bundler = bundlers[type]
|
|
852
|
-
const urlInfosToBundle = bundler.urlInfos
|
|
850
|
+
await previous;
|
|
851
|
+
const bundler = bundlers[type];
|
|
852
|
+
const urlInfosToBundle = bundler.urlInfos;
|
|
853
853
|
if (urlInfosToBundle.length === 0) {
|
|
854
|
-
return
|
|
854
|
+
return;
|
|
855
855
|
}
|
|
856
856
|
const bundleTask = createTaskLog(`bundle "${type}"`, {
|
|
857
857
|
disabled: logger.levels.debug || !logger.levels.info,
|
|
858
|
-
})
|
|
858
|
+
});
|
|
859
859
|
try {
|
|
860
860
|
const bundlerGeneratedUrlInfos =
|
|
861
861
|
await rawGraphKitchen.pluginController.callAsyncHook(
|
|
@@ -870,10 +870,10 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
870
870
|
buildDirectoryUrl,
|
|
871
871
|
assetsDirectory,
|
|
872
872
|
},
|
|
873
|
-
)
|
|
873
|
+
);
|
|
874
874
|
Object.keys(bundlerGeneratedUrlInfos).forEach((url) => {
|
|
875
|
-
const rawUrlInfo = rawGraph.getUrlInfo(url)
|
|
876
|
-
const bundlerGeneratedUrlInfo = bundlerGeneratedUrlInfos[url]
|
|
875
|
+
const rawUrlInfo = rawGraph.getUrlInfo(url);
|
|
876
|
+
const bundlerGeneratedUrlInfo = bundlerGeneratedUrlInfos[url];
|
|
877
877
|
const bundleUrlInfo = {
|
|
878
878
|
type,
|
|
879
879
|
subtype: rawUrlInfo ? rawUrlInfo.subtype : undefined,
|
|
@@ -889,72 +889,72 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
889
889
|
...bundlerGeneratedUrlInfo.data,
|
|
890
890
|
fromBundle: true,
|
|
891
891
|
},
|
|
892
|
-
}
|
|
892
|
+
};
|
|
893
893
|
if (bundlerGeneratedUrlInfo.sourceUrls) {
|
|
894
894
|
bundlerGeneratedUrlInfo.sourceUrls.forEach((sourceUrl) => {
|
|
895
|
-
const sourceRawUrlInfo = rawGraph.getUrlInfo(sourceUrl)
|
|
895
|
+
const sourceRawUrlInfo = rawGraph.getUrlInfo(sourceUrl);
|
|
896
896
|
if (sourceRawUrlInfo) {
|
|
897
|
-
sourceRawUrlInfo.data.bundled = true
|
|
897
|
+
sourceRawUrlInfo.data.bundled = true;
|
|
898
898
|
}
|
|
899
|
-
})
|
|
899
|
+
});
|
|
900
900
|
}
|
|
901
901
|
const buildUrl = buildUrlsGenerator.generate(url, {
|
|
902
902
|
urlInfo: bundleUrlInfo,
|
|
903
|
-
})
|
|
904
|
-
bundleRedirections.set(url, buildUrl)
|
|
903
|
+
});
|
|
904
|
+
bundleRedirections.set(url, buildUrl);
|
|
905
905
|
if (urlIsInsideOf(url, buildDirectoryUrl)) {
|
|
906
906
|
if (bundlerGeneratedUrlInfo.data.isDynamicEntry) {
|
|
907
907
|
const rawUrlInfo = rawGraph.getUrlInfo(
|
|
908
908
|
bundlerGeneratedUrlInfo.originalUrl,
|
|
909
|
-
)
|
|
910
|
-
rawUrlInfo.data.bundled = false
|
|
909
|
+
);
|
|
910
|
+
rawUrlInfo.data.bundled = false;
|
|
911
911
|
bundleRedirections.set(
|
|
912
912
|
bundlerGeneratedUrlInfo.originalUrl,
|
|
913
913
|
buildUrl,
|
|
914
|
-
)
|
|
914
|
+
);
|
|
915
915
|
associateBuildUrlAndRawUrl(
|
|
916
916
|
buildUrl,
|
|
917
917
|
bundlerGeneratedUrlInfo.originalUrl,
|
|
918
918
|
"bundle",
|
|
919
|
-
)
|
|
919
|
+
);
|
|
920
920
|
} else {
|
|
921
|
-
bundleUrlInfo.data.generatedToShareCode = true
|
|
921
|
+
bundleUrlInfo.data.generatedToShareCode = true;
|
|
922
922
|
}
|
|
923
923
|
} else {
|
|
924
|
-
associateBuildUrlAndRawUrl(buildUrl, url, "bundle")
|
|
924
|
+
associateBuildUrlAndRawUrl(buildUrl, url, "bundle");
|
|
925
925
|
}
|
|
926
|
-
bundleUrlInfos[buildUrl] = bundleUrlInfo
|
|
926
|
+
bundleUrlInfos[buildUrl] = bundleUrlInfo;
|
|
927
927
|
if (buildUrl.includes("?")) {
|
|
928
|
-
bundleUrlInfos[asUrlWithoutSearch(buildUrl)] = bundleUrlInfo
|
|
928
|
+
bundleUrlInfos[asUrlWithoutSearch(buildUrl)] = bundleUrlInfo;
|
|
929
929
|
}
|
|
930
930
|
if (bundlerGeneratedUrlInfo.data.bundleRelativeUrl) {
|
|
931
931
|
const urlForBundler = new URL(
|
|
932
932
|
bundlerGeneratedUrlInfo.data.bundleRelativeUrl,
|
|
933
933
|
buildDirectoryUrl,
|
|
934
|
-
).href
|
|
934
|
+
).href;
|
|
935
935
|
if (urlForBundler !== buildUrl) {
|
|
936
|
-
bundleInternalRedirections.set(urlForBundler, buildUrl)
|
|
936
|
+
bundleInternalRedirections.set(urlForBundler, buildUrl);
|
|
937
937
|
}
|
|
938
938
|
}
|
|
939
|
-
})
|
|
939
|
+
});
|
|
940
940
|
} catch (e) {
|
|
941
|
-
bundleTask.fail()
|
|
942
|
-
throw e
|
|
941
|
+
bundleTask.fail();
|
|
942
|
+
throw e;
|
|
943
943
|
}
|
|
944
|
-
bundleTask.done()
|
|
945
|
-
}, Promise.resolve())
|
|
944
|
+
bundleTask.done();
|
|
945
|
+
}, Promise.resolve());
|
|
946
946
|
}
|
|
947
947
|
reload_in_build_directory: {
|
|
948
948
|
const generateBuildGraph = createTaskLog("generate build graph", {
|
|
949
949
|
disabled: logger.levels.debug || !logger.levels.info,
|
|
950
|
-
})
|
|
950
|
+
});
|
|
951
951
|
try {
|
|
952
952
|
if (outDirectoryUrl) {
|
|
953
|
-
await ensureEmptyDirectory(new URL(`postbuild/`, outDirectoryUrl))
|
|
953
|
+
await ensureEmptyDirectory(new URL(`postbuild/`, outDirectoryUrl));
|
|
954
954
|
}
|
|
955
955
|
const finalUrlGraphLoader = createUrlGraphLoader(
|
|
956
956
|
finalGraphKitchen.kitchenContext,
|
|
957
|
-
)
|
|
957
|
+
);
|
|
958
958
|
entryUrls.forEach((entryUrl) => {
|
|
959
959
|
const [finalEntryReference, finalEntryUrlInfo] =
|
|
960
960
|
finalGraphKitchen.kitchenContext.prepareEntryPoint({
|
|
@@ -962,87 +962,87 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
962
962
|
parentUrl: sourceDirectoryUrl,
|
|
963
963
|
type: "entry_point",
|
|
964
964
|
specifier: entryUrl,
|
|
965
|
-
})
|
|
966
|
-
finalEntryUrls.push(finalEntryUrlInfo.url)
|
|
965
|
+
});
|
|
966
|
+
finalEntryUrls.push(finalEntryUrlInfo.url);
|
|
967
967
|
finalUrlGraphLoader.load(finalEntryUrlInfo, {
|
|
968
968
|
reference: finalEntryReference,
|
|
969
|
-
})
|
|
970
|
-
})
|
|
971
|
-
await finalUrlGraphLoader.getAllLoadDonePromise(buildOperation)
|
|
969
|
+
});
|
|
970
|
+
});
|
|
971
|
+
await finalUrlGraphLoader.getAllLoadDonePromise(buildOperation);
|
|
972
972
|
} catch (e) {
|
|
973
|
-
generateBuildGraph.fail()
|
|
974
|
-
throw e
|
|
973
|
+
generateBuildGraph.fail();
|
|
974
|
+
throw e;
|
|
975
975
|
}
|
|
976
|
-
generateBuildGraph.done()
|
|
976
|
+
generateBuildGraph.done();
|
|
977
977
|
}
|
|
978
978
|
}
|
|
979
979
|
|
|
980
|
-
const versionMap = new Map()
|
|
981
|
-
const versionedUrlMap = new Map()
|
|
980
|
+
const versionMap = new Map();
|
|
981
|
+
const versionedUrlMap = new Map();
|
|
982
982
|
refine: {
|
|
983
983
|
inject_version_in_urls: {
|
|
984
984
|
if (!versioning) {
|
|
985
|
-
break inject_version_in_urls
|
|
985
|
+
break inject_version_in_urls;
|
|
986
986
|
}
|
|
987
987
|
const versioningTask = createTaskLog("inject version in urls", {
|
|
988
988
|
disabled: logger.levels.debug || !logger.levels.info,
|
|
989
|
-
})
|
|
989
|
+
});
|
|
990
990
|
try {
|
|
991
991
|
const canUseImportmap =
|
|
992
992
|
versioningViaImportmap &&
|
|
993
993
|
finalEntryUrls.every((finalEntryUrl) => {
|
|
994
|
-
const finalEntryUrlInfo = finalGraph.getUrlInfo(finalEntryUrl)
|
|
995
|
-
return finalEntryUrlInfo.type === "html"
|
|
994
|
+
const finalEntryUrlInfo = finalGraph.getUrlInfo(finalEntryUrl);
|
|
995
|
+
return finalEntryUrlInfo.type === "html";
|
|
996
996
|
}) &&
|
|
997
997
|
finalGraphKitchen.kitchenContext.isSupportedOnCurrentClients(
|
|
998
998
|
"importmap",
|
|
999
|
-
)
|
|
1000
|
-
const workerReferenceSet = new Set()
|
|
999
|
+
);
|
|
1000
|
+
const workerReferenceSet = new Set();
|
|
1001
1001
|
const isReferencedByWorker = (reference, graph) => {
|
|
1002
1002
|
if (workerReferenceSet.has(reference)) {
|
|
1003
|
-
return true
|
|
1003
|
+
return true;
|
|
1004
1004
|
}
|
|
1005
|
-
const urlInfo = graph.getUrlInfo(reference.url)
|
|
1005
|
+
const urlInfo = graph.getUrlInfo(reference.url);
|
|
1006
1006
|
const dependentWorker = graph.findDependent(
|
|
1007
1007
|
urlInfo,
|
|
1008
1008
|
(dependentUrlInfo) => {
|
|
1009
|
-
return isWebWorkerUrlInfo(dependentUrlInfo)
|
|
1009
|
+
return isWebWorkerUrlInfo(dependentUrlInfo);
|
|
1010
1010
|
},
|
|
1011
|
-
)
|
|
1011
|
+
);
|
|
1012
1012
|
if (dependentWorker) {
|
|
1013
|
-
workerReferenceSet.add(reference)
|
|
1014
|
-
return true
|
|
1013
|
+
workerReferenceSet.add(reference);
|
|
1014
|
+
return true;
|
|
1015
1015
|
}
|
|
1016
|
-
return Boolean(dependentWorker)
|
|
1017
|
-
}
|
|
1016
|
+
return Boolean(dependentWorker);
|
|
1017
|
+
};
|
|
1018
1018
|
const preferWithoutVersioning = (reference) => {
|
|
1019
|
-
const parentUrlInfo = finalGraph.getUrlInfo(reference.parentUrl)
|
|
1019
|
+
const parentUrlInfo = finalGraph.getUrlInfo(reference.parentUrl);
|
|
1020
1020
|
if (parentUrlInfo.jsQuote) {
|
|
1021
1021
|
return {
|
|
1022
1022
|
type: "global",
|
|
1023
1023
|
source: `${parentUrlInfo.jsQuote}+__v__(${JSON.stringify(
|
|
1024
1024
|
reference.specifier,
|
|
1025
1025
|
)})+${parentUrlInfo.jsQuote}`,
|
|
1026
|
-
}
|
|
1026
|
+
};
|
|
1027
1027
|
}
|
|
1028
1028
|
if (reference.type === "js_url") {
|
|
1029
1029
|
return {
|
|
1030
1030
|
type: "global",
|
|
1031
1031
|
source: `__v__(${JSON.stringify(reference.specifier)})`,
|
|
1032
|
-
}
|
|
1032
|
+
};
|
|
1033
1033
|
}
|
|
1034
1034
|
if (reference.type === "js_import") {
|
|
1035
1035
|
if (reference.subtype === "import_dynamic") {
|
|
1036
1036
|
return {
|
|
1037
1037
|
type: "global",
|
|
1038
1038
|
source: `__v__(${JSON.stringify(reference.specifier)})`,
|
|
1039
|
-
}
|
|
1039
|
+
};
|
|
1040
1040
|
}
|
|
1041
1041
|
if (reference.subtype === "import_meta_resolve") {
|
|
1042
1042
|
return {
|
|
1043
1043
|
type: "global",
|
|
1044
1044
|
source: `__v__(${JSON.stringify(reference.specifier)})`,
|
|
1045
|
-
}
|
|
1045
|
+
};
|
|
1046
1046
|
}
|
|
1047
1047
|
if (
|
|
1048
1048
|
canUseImportmap &&
|
|
@@ -1051,21 +1051,21 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
1051
1051
|
return {
|
|
1052
1052
|
type: "importmap",
|
|
1053
1053
|
source: JSON.stringify(reference.specifier),
|
|
1054
|
-
}
|
|
1054
|
+
};
|
|
1055
1055
|
}
|
|
1056
1056
|
}
|
|
1057
|
-
return null
|
|
1058
|
-
}
|
|
1057
|
+
return null;
|
|
1058
|
+
};
|
|
1059
1059
|
|
|
1060
1060
|
// see also https://github.com/rollup/rollup/pull/4543
|
|
1061
|
-
const contentVersionMap = new Map()
|
|
1062
|
-
const hashCallbacks = []
|
|
1061
|
+
const contentVersionMap = new Map();
|
|
1062
|
+
const hashCallbacks = [];
|
|
1063
1063
|
GRAPH.forEach(finalGraph, (urlInfo) => {
|
|
1064
1064
|
if (urlInfo.url.startsWith("data:")) {
|
|
1065
|
-
return
|
|
1065
|
+
return;
|
|
1066
1066
|
}
|
|
1067
1067
|
if (urlInfo.type === "sourcemap") {
|
|
1068
|
-
return
|
|
1068
|
+
return;
|
|
1069
1069
|
}
|
|
1070
1070
|
// ignore:
|
|
1071
1071
|
// - inline files:
|
|
@@ -1078,13 +1078,13 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
1078
1078
|
// There is no need to version them and we could not because the file have been ignored
|
|
1079
1079
|
// so their content is unknown
|
|
1080
1080
|
if (urlInfo.isInline) {
|
|
1081
|
-
return
|
|
1081
|
+
return;
|
|
1082
1082
|
}
|
|
1083
1083
|
if (!urlInfo.shouldHandle) {
|
|
1084
|
-
return
|
|
1084
|
+
return;
|
|
1085
1085
|
}
|
|
1086
1086
|
if (urlInfo.dependents.size === 0 && !urlInfo.isEntryPoint) {
|
|
1087
|
-
return
|
|
1087
|
+
return;
|
|
1088
1088
|
}
|
|
1089
1089
|
const urlContent =
|
|
1090
1090
|
urlInfo.type === "html"
|
|
@@ -1094,68 +1094,68 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
1094
1094
|
}),
|
|
1095
1095
|
{ cleanupJsenvAttributes: true },
|
|
1096
1096
|
)
|
|
1097
|
-
: urlInfo.content
|
|
1098
|
-
const contentVersionGenerator = createVersionGenerator()
|
|
1099
|
-
contentVersionGenerator.augmentWithContent(urlContent)
|
|
1100
|
-
const contentVersion = contentVersionGenerator.generate()
|
|
1101
|
-
contentVersionMap.set(urlInfo.url, contentVersion)
|
|
1102
|
-
const versionMutations = []
|
|
1103
|
-
const seen = new Set()
|
|
1097
|
+
: urlInfo.content;
|
|
1098
|
+
const contentVersionGenerator = createVersionGenerator();
|
|
1099
|
+
contentVersionGenerator.augmentWithContent(urlContent);
|
|
1100
|
+
const contentVersion = contentVersionGenerator.generate();
|
|
1101
|
+
contentVersionMap.set(urlInfo.url, contentVersion);
|
|
1102
|
+
const versionMutations = [];
|
|
1103
|
+
const seen = new Set();
|
|
1104
1104
|
const visitReferences = (urlInfo) => {
|
|
1105
1105
|
urlInfo.references.forEach((reference) => {
|
|
1106
|
-
if (seen.has(reference)) return
|
|
1107
|
-
seen.add(reference)
|
|
1108
|
-
const referencedUrlInfo = finalGraph.getUrlInfo(reference.url)
|
|
1106
|
+
if (seen.has(reference)) return;
|
|
1107
|
+
seen.add(reference);
|
|
1108
|
+
const referencedUrlInfo = finalGraph.getUrlInfo(reference.url);
|
|
1109
1109
|
versionMutations.push(() => {
|
|
1110
1110
|
const dependencyContentVersion = contentVersionMap.get(
|
|
1111
1111
|
reference.url,
|
|
1112
|
-
)
|
|
1112
|
+
);
|
|
1113
1113
|
if (!dependencyContentVersion) {
|
|
1114
1114
|
// no content generated for this dependency
|
|
1115
1115
|
// (inline, data:, sourcemap, shouldHandle is false, ...)
|
|
1116
|
-
return null
|
|
1116
|
+
return null;
|
|
1117
1117
|
}
|
|
1118
1118
|
if (preferWithoutVersioning(reference)) {
|
|
1119
1119
|
// when versioning is dynamic no need to take into account
|
|
1120
1120
|
// happens for:
|
|
1121
1121
|
// - specifier mapped by window.__v__()
|
|
1122
1122
|
// - specifier mapped by importmap
|
|
1123
|
-
return null
|
|
1123
|
+
return null;
|
|
1124
1124
|
}
|
|
1125
|
-
return dependencyContentVersion
|
|
1126
|
-
})
|
|
1127
|
-
visitReferences(referencedUrlInfo)
|
|
1128
|
-
})
|
|
1129
|
-
}
|
|
1130
|
-
visitReferences(urlInfo)
|
|
1125
|
+
return dependencyContentVersion;
|
|
1126
|
+
});
|
|
1127
|
+
visitReferences(referencedUrlInfo);
|
|
1128
|
+
});
|
|
1129
|
+
};
|
|
1130
|
+
visitReferences(urlInfo);
|
|
1131
1131
|
|
|
1132
1132
|
hashCallbacks.push(() => {
|
|
1133
|
-
let version
|
|
1133
|
+
let version;
|
|
1134
1134
|
if (versionMutations.length === 0) {
|
|
1135
|
-
version = contentVersion
|
|
1135
|
+
version = contentVersion;
|
|
1136
1136
|
} else {
|
|
1137
|
-
const versionGenerator = createVersionGenerator()
|
|
1138
|
-
versionGenerator.augment(contentVersion)
|
|
1137
|
+
const versionGenerator = createVersionGenerator();
|
|
1138
|
+
versionGenerator.augment(contentVersion);
|
|
1139
1139
|
versionMutations.forEach((versionMutation) => {
|
|
1140
|
-
const value = versionMutation()
|
|
1140
|
+
const value = versionMutation();
|
|
1141
1141
|
if (value) {
|
|
1142
|
-
versionGenerator.augment(value)
|
|
1142
|
+
versionGenerator.augment(value);
|
|
1143
1143
|
}
|
|
1144
|
-
})
|
|
1145
|
-
version = versionGenerator.generate()
|
|
1144
|
+
});
|
|
1145
|
+
version = versionGenerator.generate();
|
|
1146
1146
|
}
|
|
1147
|
-
versionMap.set(urlInfo.url, version)
|
|
1148
|
-
const buildUrlObject = new URL(urlInfo.url)
|
|
1147
|
+
versionMap.set(urlInfo.url, version);
|
|
1148
|
+
const buildUrlObject = new URL(urlInfo.url);
|
|
1149
1149
|
// remove ?js_module_fallback
|
|
1150
1150
|
// this information is already hold into ".nomodule"
|
|
1151
|
-
buildUrlObject.searchParams.delete("js_module_fallback")
|
|
1152
|
-
buildUrlObject.searchParams.delete("as_js_classic")
|
|
1153
|
-
buildUrlObject.searchParams.delete("as_js_module")
|
|
1154
|
-
buildUrlObject.searchParams.delete("as_json_module")
|
|
1155
|
-
buildUrlObject.searchParams.delete("as_css_module")
|
|
1156
|
-
buildUrlObject.searchParams.delete("as_text_module")
|
|
1157
|
-
const buildUrl = buildUrlObject.href
|
|
1158
|
-
finalRedirections.set(urlInfo.url, buildUrl)
|
|
1151
|
+
buildUrlObject.searchParams.delete("js_module_fallback");
|
|
1152
|
+
buildUrlObject.searchParams.delete("as_js_classic");
|
|
1153
|
+
buildUrlObject.searchParams.delete("as_js_module");
|
|
1154
|
+
buildUrlObject.searchParams.delete("as_json_module");
|
|
1155
|
+
buildUrlObject.searchParams.delete("as_css_module");
|
|
1156
|
+
buildUrlObject.searchParams.delete("as_text_module");
|
|
1157
|
+
const buildUrl = buildUrlObject.href;
|
|
1158
|
+
finalRedirections.set(urlInfo.url, buildUrl);
|
|
1159
1159
|
versionedUrlMap.set(
|
|
1160
1160
|
urlInfo.url,
|
|
1161
1161
|
normalizeUrl(
|
|
@@ -1165,16 +1165,16 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
1165
1165
|
versioningMethod,
|
|
1166
1166
|
}),
|
|
1167
1167
|
),
|
|
1168
|
-
)
|
|
1169
|
-
})
|
|
1170
|
-
})
|
|
1168
|
+
);
|
|
1169
|
+
});
|
|
1170
|
+
});
|
|
1171
1171
|
hashCallbacks.forEach((callback) => {
|
|
1172
|
-
callback()
|
|
1173
|
-
})
|
|
1172
|
+
callback();
|
|
1173
|
+
});
|
|
1174
1174
|
|
|
1175
|
-
const versionMappings = {}
|
|
1176
|
-
const versionMappingsOnGlobalMap = new Set()
|
|
1177
|
-
const versionMappingsOnImportmap = new Set()
|
|
1175
|
+
const versionMappings = {};
|
|
1176
|
+
const versionMappingsOnGlobalMap = new Set();
|
|
1177
|
+
const versionMappingsOnImportmap = new Set();
|
|
1178
1178
|
const versioningKitchen = createKitchen({
|
|
1179
1179
|
logLevel: logger.level,
|
|
1180
1180
|
rootDirectoryUrl: buildDirectoryUrl,
|
|
@@ -1193,15 +1193,15 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
1193
1193
|
name: "jsenv:versioning",
|
|
1194
1194
|
appliesDuring: "build",
|
|
1195
1195
|
resolveUrl: (reference) => {
|
|
1196
|
-
const buildUrl = buildUrls.get(reference.specifier)
|
|
1196
|
+
const buildUrl = buildUrls.get(reference.specifier);
|
|
1197
1197
|
if (buildUrl) {
|
|
1198
|
-
return buildUrl
|
|
1198
|
+
return buildUrl;
|
|
1199
1199
|
}
|
|
1200
1200
|
const urlObject = new URL(
|
|
1201
1201
|
reference.specifier,
|
|
1202
1202
|
reference.baseUrl || reference.parentUrl,
|
|
1203
|
-
)
|
|
1204
|
-
const url = urlObject.href
|
|
1203
|
+
);
|
|
1204
|
+
const url = urlObject.href;
|
|
1205
1205
|
// during versioning we revisit the deps
|
|
1206
1206
|
// but the code used to enforce trailing slash on directories
|
|
1207
1207
|
// is not applied because "jsenv:file_url_resolution" is not used
|
|
@@ -1210,71 +1210,73 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
1210
1210
|
reference.type === "filesystem" &&
|
|
1211
1211
|
!urlObject.pathname.endsWith("/")
|
|
1212
1212
|
) {
|
|
1213
|
-
const urlWithTrailingSlash = `${url}
|
|
1214
|
-
const specifier = findKey(buildUrls, urlWithTrailingSlash)
|
|
1213
|
+
const urlWithTrailingSlash = `${url}/`;
|
|
1214
|
+
const specifier = findKey(buildUrls, urlWithTrailingSlash);
|
|
1215
1215
|
if (specifier) {
|
|
1216
|
-
return urlWithTrailingSlash
|
|
1216
|
+
return urlWithTrailingSlash;
|
|
1217
1217
|
}
|
|
1218
1218
|
}
|
|
1219
|
-
return url
|
|
1219
|
+
return url;
|
|
1220
1220
|
},
|
|
1221
1221
|
formatUrl: (reference) => {
|
|
1222
1222
|
if (!reference.shouldHandle) {
|
|
1223
1223
|
if (reference.generatedUrl.startsWith("ignore:")) {
|
|
1224
|
-
return reference.generatedUrl.slice("ignore:".length)
|
|
1224
|
+
return reference.generatedUrl.slice("ignore:".length);
|
|
1225
1225
|
}
|
|
1226
|
-
return null
|
|
1226
|
+
return null;
|
|
1227
1227
|
}
|
|
1228
1228
|
if (reference.isInline || reference.url.startsWith("data:")) {
|
|
1229
|
-
return null
|
|
1229
|
+
return null;
|
|
1230
1230
|
}
|
|
1231
1231
|
if (reference.isResourceHint) {
|
|
1232
|
-
return null
|
|
1232
|
+
return null;
|
|
1233
1233
|
}
|
|
1234
1234
|
// specifier comes from "normalize" hook done a bit earlier in this file
|
|
1235
1235
|
// we want to get back their build url to access their infos
|
|
1236
|
-
const referencedUrlInfo = finalGraph.getUrlInfo(
|
|
1236
|
+
const referencedUrlInfo = finalGraph.getUrlInfo(
|
|
1237
|
+
reference.url,
|
|
1238
|
+
);
|
|
1237
1239
|
if (!canUseVersionedUrl(referencedUrlInfo)) {
|
|
1238
|
-
return reference.specifier
|
|
1240
|
+
return reference.specifier;
|
|
1239
1241
|
}
|
|
1240
1242
|
if (!referencedUrlInfo.shouldHandle) {
|
|
1241
|
-
return null
|
|
1243
|
+
return null;
|
|
1242
1244
|
}
|
|
1243
|
-
const versionedUrl = versionedUrlMap.get(reference.url)
|
|
1245
|
+
const versionedUrl = versionedUrlMap.get(reference.url);
|
|
1244
1246
|
if (!versionedUrl) {
|
|
1245
1247
|
// happens for sourcemap
|
|
1246
1248
|
return urlToRelativeUrl(
|
|
1247
1249
|
referencedUrlInfo.url,
|
|
1248
1250
|
reference.parentUrl,
|
|
1249
|
-
)
|
|
1251
|
+
);
|
|
1250
1252
|
}
|
|
1251
1253
|
const versionedSpecifier = asFormattedBuildUrl(
|
|
1252
1254
|
versionedUrl,
|
|
1253
1255
|
reference,
|
|
1254
|
-
)
|
|
1255
|
-
versionMappings[reference.specifier] = versionedSpecifier
|
|
1256
|
-
versioningRedirections.set(reference.url, versionedUrl)
|
|
1257
|
-
buildUrls.set(versionedSpecifier, versionedUrl)
|
|
1256
|
+
);
|
|
1257
|
+
versionMappings[reference.specifier] = versionedSpecifier;
|
|
1258
|
+
versioningRedirections.set(reference.url, versionedUrl);
|
|
1259
|
+
buildUrls.set(versionedSpecifier, versionedUrl);
|
|
1258
1260
|
|
|
1259
|
-
const withoutVersioning = preferWithoutVersioning(reference)
|
|
1261
|
+
const withoutVersioning = preferWithoutVersioning(reference);
|
|
1260
1262
|
if (withoutVersioning) {
|
|
1261
1263
|
if (withoutVersioning.type === "importmap") {
|
|
1262
|
-
versionMappingsOnImportmap.add(reference.specifier)
|
|
1264
|
+
versionMappingsOnImportmap.add(reference.specifier);
|
|
1263
1265
|
} else {
|
|
1264
|
-
versionMappingsOnGlobalMap.add(reference.specifier)
|
|
1266
|
+
versionMappingsOnGlobalMap.add(reference.specifier);
|
|
1265
1267
|
}
|
|
1266
|
-
return () => withoutVersioning.source
|
|
1268
|
+
return () => withoutVersioning.source;
|
|
1267
1269
|
}
|
|
1268
|
-
return versionedSpecifier
|
|
1270
|
+
return versionedSpecifier;
|
|
1269
1271
|
},
|
|
1270
1272
|
fetchUrlContent: (versionedUrlInfo) => {
|
|
1271
1273
|
if (versionedUrlInfo.isInline) {
|
|
1272
1274
|
const rawUrlInfo = rawGraph.getUrlInfo(
|
|
1273
1275
|
buildDirectoryRedirections.get(versionedUrlInfo.url),
|
|
1274
|
-
)
|
|
1276
|
+
);
|
|
1275
1277
|
const finalUrlInfo = finalGraph.getUrlInfo(
|
|
1276
1278
|
versionedUrlInfo.url,
|
|
1277
|
-
)
|
|
1279
|
+
);
|
|
1278
1280
|
return {
|
|
1279
1281
|
content: versionedUrlInfo.content,
|
|
1280
1282
|
contentType: versionedUrlInfo.contentType,
|
|
@@ -1284,9 +1286,9 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
1284
1286
|
sourcemap: finalUrlInfo
|
|
1285
1287
|
? finalUrlInfo.sourcemap
|
|
1286
1288
|
: undefined,
|
|
1287
|
-
}
|
|
1289
|
+
};
|
|
1288
1290
|
}
|
|
1289
|
-
return versionedUrlInfo
|
|
1291
|
+
return versionedUrlInfo;
|
|
1290
1292
|
},
|
|
1291
1293
|
},
|
|
1292
1294
|
],
|
|
@@ -1296,10 +1298,10 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
1296
1298
|
outDirectoryUrl: outDirectoryUrl
|
|
1297
1299
|
? new URL("postbuild/", outDirectoryUrl)
|
|
1298
1300
|
: undefined,
|
|
1299
|
-
})
|
|
1301
|
+
});
|
|
1300
1302
|
const versioningUrlGraphLoader = createUrlGraphLoader(
|
|
1301
1303
|
versioningKitchen.kitchenContext,
|
|
1302
|
-
)
|
|
1304
|
+
);
|
|
1303
1305
|
finalEntryUrls.forEach((finalEntryUrl) => {
|
|
1304
1306
|
const [finalEntryReference, finalEntryUrlInfo] =
|
|
1305
1307
|
finalGraphKitchen.kitchenContext.prepareEntryPoint({
|
|
@@ -1307,20 +1309,20 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
1307
1309
|
parentUrl: buildDirectoryUrl,
|
|
1308
1310
|
type: "entry_point",
|
|
1309
1311
|
specifier: finalEntryUrl,
|
|
1310
|
-
})
|
|
1312
|
+
});
|
|
1311
1313
|
versioningUrlGraphLoader.load(finalEntryUrlInfo, {
|
|
1312
1314
|
reference: finalEntryReference,
|
|
1313
|
-
})
|
|
1314
|
-
})
|
|
1315
|
-
await versioningUrlGraphLoader.getAllLoadDonePromise(buildOperation)
|
|
1316
|
-
workerReferenceSet.clear()
|
|
1317
|
-
const actions = []
|
|
1318
|
-
const visitors = []
|
|
1315
|
+
});
|
|
1316
|
+
});
|
|
1317
|
+
await versioningUrlGraphLoader.getAllLoadDonePromise(buildOperation);
|
|
1318
|
+
workerReferenceSet.clear();
|
|
1319
|
+
const actions = [];
|
|
1320
|
+
const visitors = [];
|
|
1319
1321
|
if (versionMappingsOnImportmap.size) {
|
|
1320
|
-
const versionMappingsNeeded = {}
|
|
1322
|
+
const versionMappingsNeeded = {};
|
|
1321
1323
|
versionMappingsOnImportmap.forEach((specifier) => {
|
|
1322
|
-
versionMappingsNeeded[specifier] = versionMappings[specifier]
|
|
1323
|
-
})
|
|
1324
|
+
versionMappingsNeeded[specifier] = versionMappings[specifier];
|
|
1325
|
+
});
|
|
1324
1326
|
visitors.push((urlInfo) => {
|
|
1325
1327
|
if (urlInfo.type === "html" && urlInfo.isEntryPoint) {
|
|
1326
1328
|
actions.push(async () => {
|
|
@@ -1328,16 +1330,16 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
1328
1330
|
urlInfo,
|
|
1329
1331
|
kitchen: finalGraphKitchen,
|
|
1330
1332
|
versionMappings: versionMappingsNeeded,
|
|
1331
|
-
})
|
|
1332
|
-
})
|
|
1333
|
+
});
|
|
1334
|
+
});
|
|
1333
1335
|
}
|
|
1334
|
-
})
|
|
1336
|
+
});
|
|
1335
1337
|
}
|
|
1336
1338
|
if (versionMappingsOnGlobalMap.size) {
|
|
1337
|
-
const versionMappingsNeeded = {}
|
|
1339
|
+
const versionMappingsNeeded = {};
|
|
1338
1340
|
versionMappingsOnGlobalMap.forEach((specifier) => {
|
|
1339
|
-
versionMappingsNeeded[specifier] = versionMappings[specifier]
|
|
1340
|
-
})
|
|
1341
|
+
versionMappingsNeeded[specifier] = versionMappings[specifier];
|
|
1342
|
+
});
|
|
1341
1343
|
visitors.push((urlInfo) => {
|
|
1342
1344
|
if (urlInfo.isEntryPoint) {
|
|
1343
1345
|
actions.push(async () => {
|
|
@@ -1345,42 +1347,42 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
1345
1347
|
urlInfo,
|
|
1346
1348
|
kitchen: finalGraphKitchen,
|
|
1347
1349
|
versionMappings: versionMappingsNeeded,
|
|
1348
|
-
})
|
|
1349
|
-
})
|
|
1350
|
+
});
|
|
1351
|
+
});
|
|
1350
1352
|
}
|
|
1351
|
-
})
|
|
1353
|
+
});
|
|
1352
1354
|
}
|
|
1353
1355
|
if (visitors.length) {
|
|
1354
1356
|
GRAPH.forEach(finalGraph, (urlInfo) => {
|
|
1355
|
-
visitors.forEach((visitor) => visitor(urlInfo))
|
|
1356
|
-
})
|
|
1357
|
+
visitors.forEach((visitor) => visitor(urlInfo));
|
|
1358
|
+
});
|
|
1357
1359
|
if (actions.length) {
|
|
1358
|
-
await Promise.all(actions.map((action) => action()))
|
|
1360
|
+
await Promise.all(actions.map((action) => action()));
|
|
1359
1361
|
}
|
|
1360
1362
|
}
|
|
1361
1363
|
} catch (e) {
|
|
1362
|
-
versioningTask.fail()
|
|
1363
|
-
throw e
|
|
1364
|
+
versioningTask.fail();
|
|
1365
|
+
throw e;
|
|
1364
1366
|
}
|
|
1365
|
-
versioningTask.done()
|
|
1367
|
+
versioningTask.done();
|
|
1366
1368
|
}
|
|
1367
1369
|
cleanup_jsenv_attributes_from_html: {
|
|
1368
1370
|
GRAPH.forEach(finalGraph, (urlInfo) => {
|
|
1369
1371
|
if (!urlInfo.shouldHandle) {
|
|
1370
|
-
return
|
|
1372
|
+
return;
|
|
1371
1373
|
}
|
|
1372
1374
|
if (!urlInfo.url.startsWith("file:")) {
|
|
1373
|
-
return
|
|
1375
|
+
return;
|
|
1374
1376
|
}
|
|
1375
1377
|
if (urlInfo.type === "html") {
|
|
1376
1378
|
const htmlAst = parseHtmlString(urlInfo.content, {
|
|
1377
1379
|
storeOriginalPositions: false,
|
|
1378
|
-
})
|
|
1380
|
+
});
|
|
1379
1381
|
urlInfo.content = stringifyHtmlAst(htmlAst, {
|
|
1380
1382
|
cleanupJsenvAttributes: true,
|
|
1381
|
-
})
|
|
1383
|
+
});
|
|
1382
1384
|
}
|
|
1383
|
-
})
|
|
1385
|
+
});
|
|
1384
1386
|
}
|
|
1385
1387
|
/*
|
|
1386
1388
|
* Update <link rel="preload"> and friends after build (once we know everything)
|
|
@@ -1389,114 +1391,114 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
1389
1391
|
* - because of import assertions transpilation (file is inlined into JS)
|
|
1390
1392
|
*/
|
|
1391
1393
|
resync_resource_hints: {
|
|
1392
|
-
const actions = []
|
|
1394
|
+
const actions = [];
|
|
1393
1395
|
GRAPH.forEach(finalGraph, (urlInfo) => {
|
|
1394
1396
|
if (urlInfo.type !== "html") {
|
|
1395
|
-
return
|
|
1397
|
+
return;
|
|
1396
1398
|
}
|
|
1397
1399
|
actions.push(async () => {
|
|
1398
1400
|
const htmlAst = parseHtmlString(urlInfo.content, {
|
|
1399
1401
|
storeOriginalPositions: false,
|
|
1400
|
-
})
|
|
1401
|
-
const mutations = []
|
|
1402
|
-
const hintsToInject = {}
|
|
1402
|
+
});
|
|
1403
|
+
const mutations = [];
|
|
1404
|
+
const hintsToInject = {};
|
|
1403
1405
|
visitHtmlNodes(htmlAst, {
|
|
1404
1406
|
link: (node) => {
|
|
1405
|
-
const href = getHtmlNodeAttribute(node, "href")
|
|
1407
|
+
const href = getHtmlNodeAttribute(node, "href");
|
|
1406
1408
|
if (href === undefined || href.startsWith("data:")) {
|
|
1407
|
-
return
|
|
1409
|
+
return;
|
|
1408
1410
|
}
|
|
1409
|
-
const rel = getHtmlNodeAttribute(node, "rel")
|
|
1411
|
+
const rel = getHtmlNodeAttribute(node, "rel");
|
|
1410
1412
|
const isResourceHint = [
|
|
1411
1413
|
"preconnect",
|
|
1412
1414
|
"dns-prefetch",
|
|
1413
1415
|
"prefetch",
|
|
1414
1416
|
"preload",
|
|
1415
1417
|
"modulepreload",
|
|
1416
|
-
].includes(rel)
|
|
1418
|
+
].includes(rel);
|
|
1417
1419
|
if (!isResourceHint) {
|
|
1418
|
-
return
|
|
1420
|
+
return;
|
|
1419
1421
|
}
|
|
1420
1422
|
const onBuildUrl = (buildUrl) => {
|
|
1421
1423
|
const buildUrlInfo = buildUrl
|
|
1422
1424
|
? finalGraph.getUrlInfo(buildUrl)
|
|
1423
|
-
: null
|
|
1425
|
+
: null;
|
|
1424
1426
|
if (!buildUrlInfo) {
|
|
1425
1427
|
logger.warn(
|
|
1426
1428
|
`remove resource hint because cannot find "${href}" in the graph`,
|
|
1427
|
-
)
|
|
1429
|
+
);
|
|
1428
1430
|
mutations.push(() => {
|
|
1429
|
-
removeHtmlNode(node)
|
|
1430
|
-
})
|
|
1431
|
-
return
|
|
1431
|
+
removeHtmlNode(node);
|
|
1432
|
+
});
|
|
1433
|
+
return;
|
|
1432
1434
|
}
|
|
1433
1435
|
if (buildUrlInfo.dependents.size === 0) {
|
|
1434
1436
|
logger.warn(
|
|
1435
1437
|
`remove resource hint because "${href}" not used anymore`,
|
|
1436
|
-
)
|
|
1438
|
+
);
|
|
1437
1439
|
mutations.push(() => {
|
|
1438
|
-
removeHtmlNode(node)
|
|
1439
|
-
})
|
|
1440
|
-
return
|
|
1440
|
+
removeHtmlNode(node);
|
|
1441
|
+
});
|
|
1442
|
+
return;
|
|
1441
1443
|
}
|
|
1442
1444
|
const buildUrlFormatted =
|
|
1443
1445
|
versioningRedirections.get(buildUrlInfo.url) ||
|
|
1444
|
-
buildUrlInfo.url
|
|
1446
|
+
buildUrlInfo.url;
|
|
1445
1447
|
const buildSpecifierBeforeRedirect = findKey(
|
|
1446
1448
|
buildUrls,
|
|
1447
1449
|
buildUrlFormatted,
|
|
1448
|
-
)
|
|
1450
|
+
);
|
|
1449
1451
|
mutations.push(() => {
|
|
1450
1452
|
setHtmlNodeAttributes(node, {
|
|
1451
1453
|
href: buildSpecifierBeforeRedirect,
|
|
1452
1454
|
...(buildUrlInfo.type === "js_classic"
|
|
1453
1455
|
? { crossorigin: undefined }
|
|
1454
1456
|
: {}),
|
|
1455
|
-
})
|
|
1456
|
-
})
|
|
1457
|
+
});
|
|
1458
|
+
});
|
|
1457
1459
|
for (const dependencyUrl of buildUrlInfo.dependencies) {
|
|
1458
1460
|
const dependencyUrlInfo =
|
|
1459
|
-
finalGraph.urlInfoMap.get(dependencyUrl)
|
|
1461
|
+
finalGraph.urlInfoMap.get(dependencyUrl);
|
|
1460
1462
|
if (dependencyUrlInfo.data.generatedToShareCode) {
|
|
1461
|
-
hintsToInject[dependencyUrl] = node
|
|
1463
|
+
hintsToInject[dependencyUrl] = node;
|
|
1462
1464
|
}
|
|
1463
1465
|
}
|
|
1464
|
-
}
|
|
1466
|
+
};
|
|
1465
1467
|
if (href.startsWith("file:")) {
|
|
1466
|
-
let url = href
|
|
1467
|
-
url = rawRedirections.get(url) || url
|
|
1468
|
-
const rawUrlInfo = rawGraph.getUrlInfo(url)
|
|
1468
|
+
let url = href;
|
|
1469
|
+
url = rawRedirections.get(url) || url;
|
|
1470
|
+
const rawUrlInfo = rawGraph.getUrlInfo(url);
|
|
1469
1471
|
if (rawUrlInfo && rawUrlInfo.data.bundled) {
|
|
1470
1472
|
logger.warn(
|
|
1471
1473
|
`remove resource hint on "${href}" because it was bundled`,
|
|
1472
|
-
)
|
|
1474
|
+
);
|
|
1473
1475
|
mutations.push(() => {
|
|
1474
|
-
removeHtmlNode(node)
|
|
1475
|
-
})
|
|
1476
|
+
removeHtmlNode(node);
|
|
1477
|
+
});
|
|
1476
1478
|
} else {
|
|
1477
|
-
url = bundleRedirections.get(url) || url
|
|
1478
|
-
url = bundleInternalRedirections.get(url) || url
|
|
1479
|
-
url = finalRedirections.get(url) || url
|
|
1480
|
-
url = findKey(buildDirectoryRedirections, url) || url
|
|
1481
|
-
onBuildUrl(url)
|
|
1479
|
+
url = bundleRedirections.get(url) || url;
|
|
1480
|
+
url = bundleInternalRedirections.get(url) || url;
|
|
1481
|
+
url = finalRedirections.get(url) || url;
|
|
1482
|
+
url = findKey(buildDirectoryRedirections, url) || url;
|
|
1483
|
+
onBuildUrl(url);
|
|
1482
1484
|
}
|
|
1483
1485
|
} else {
|
|
1484
|
-
onBuildUrl(null)
|
|
1486
|
+
onBuildUrl(null);
|
|
1485
1487
|
}
|
|
1486
1488
|
},
|
|
1487
|
-
})
|
|
1489
|
+
});
|
|
1488
1490
|
Object.keys(hintsToInject).forEach((urlToHint) => {
|
|
1489
|
-
const hintNode = hintsToInject[urlToHint]
|
|
1491
|
+
const hintNode = hintsToInject[urlToHint];
|
|
1490
1492
|
const urlFormatted =
|
|
1491
|
-
versioningRedirections.get(urlToHint) || urlToHint
|
|
1492
|
-
const specifierBeforeRedirect = findKey(buildUrls, urlFormatted)
|
|
1493
|
+
versioningRedirections.get(urlToHint) || urlToHint;
|
|
1494
|
+
const specifierBeforeRedirect = findKey(buildUrls, urlFormatted);
|
|
1493
1495
|
const found = findHtmlNode(htmlAst, (htmlNode) => {
|
|
1494
1496
|
return (
|
|
1495
1497
|
htmlNode.nodeName === "link" &&
|
|
1496
1498
|
getHtmlNodeAttribute(htmlNode, "href") ===
|
|
1497
1499
|
specifierBeforeRedirect
|
|
1498
|
-
)
|
|
1499
|
-
})
|
|
1500
|
+
);
|
|
1501
|
+
});
|
|
1500
1502
|
if (!found) {
|
|
1501
1503
|
mutations.push(() => {
|
|
1502
1504
|
const nodeToInsert = createHtmlNode({
|
|
@@ -1506,37 +1508,37 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
1506
1508
|
as: getHtmlNodeAttribute(hintNode, "as"),
|
|
1507
1509
|
type: getHtmlNodeAttribute(hintNode, "type"),
|
|
1508
1510
|
crossorigin: getHtmlNodeAttribute(hintNode, "crossorigin"),
|
|
1509
|
-
})
|
|
1510
|
-
insertHtmlNodeAfter(nodeToInsert, hintNode)
|
|
1511
|
-
})
|
|
1511
|
+
});
|
|
1512
|
+
insertHtmlNodeAfter(nodeToInsert, hintNode);
|
|
1513
|
+
});
|
|
1512
1514
|
}
|
|
1513
|
-
})
|
|
1515
|
+
});
|
|
1514
1516
|
if (mutations.length > 0) {
|
|
1515
|
-
mutations.forEach((mutation) => mutation())
|
|
1517
|
+
mutations.forEach((mutation) => mutation());
|
|
1516
1518
|
await finalGraphKitchen.urlInfoTransformer.applyFinalTransformations(
|
|
1517
1519
|
urlInfo,
|
|
1518
1520
|
{
|
|
1519
1521
|
content: stringifyHtmlAst(htmlAst),
|
|
1520
1522
|
},
|
|
1521
|
-
)
|
|
1523
|
+
);
|
|
1522
1524
|
}
|
|
1523
|
-
})
|
|
1524
|
-
})
|
|
1525
|
+
});
|
|
1526
|
+
});
|
|
1525
1527
|
await Promise.all(
|
|
1526
1528
|
actions.map((resourceHintAction) => resourceHintAction()),
|
|
1527
|
-
)
|
|
1528
|
-
buildOperation.throwIfAborted()
|
|
1529
|
+
);
|
|
1530
|
+
buildOperation.throwIfAborted();
|
|
1529
1531
|
}
|
|
1530
1532
|
delete_unused_urls: {
|
|
1531
|
-
const actions = []
|
|
1533
|
+
const actions = [];
|
|
1532
1534
|
GRAPH.forEach(finalGraph, (urlInfo) => {
|
|
1533
1535
|
if (!isUsed(urlInfo)) {
|
|
1534
1536
|
actions.push(() => {
|
|
1535
|
-
finalGraph.deleteUrlInfo(urlInfo.url)
|
|
1536
|
-
})
|
|
1537
|
+
finalGraph.deleteUrlInfo(urlInfo.url);
|
|
1538
|
+
});
|
|
1537
1539
|
}
|
|
1538
|
-
})
|
|
1539
|
-
actions.forEach((action) => action())
|
|
1540
|
+
});
|
|
1541
|
+
actions.forEach((action) => action());
|
|
1540
1542
|
}
|
|
1541
1543
|
inject_urls_in_service_workers: {
|
|
1542
1544
|
const serviceWorkerEntryUrlInfos = GRAPH.filter(
|
|
@@ -1545,264 +1547,264 @@ ${ANSI.color(buildUrl, ANSI.MAGENTA)}
|
|
|
1545
1547
|
return (
|
|
1546
1548
|
finalUrlInfo.subtype === "service_worker" &&
|
|
1547
1549
|
finalUrlInfo.isEntryPoint
|
|
1548
|
-
)
|
|
1550
|
+
);
|
|
1549
1551
|
},
|
|
1550
|
-
)
|
|
1552
|
+
);
|
|
1551
1553
|
if (serviceWorkerEntryUrlInfos.length > 0) {
|
|
1552
|
-
const serviceWorkerResources = {}
|
|
1554
|
+
const serviceWorkerResources = {};
|
|
1553
1555
|
GRAPH.forEach(finalGraph, (urlInfo) => {
|
|
1554
1556
|
if (urlInfo.isInline || !urlInfo.shouldHandle) {
|
|
1555
|
-
return
|
|
1557
|
+
return;
|
|
1556
1558
|
}
|
|
1557
1559
|
if (!urlInfo.url.startsWith("file:")) {
|
|
1558
|
-
return
|
|
1560
|
+
return;
|
|
1559
1561
|
}
|
|
1560
1562
|
if (!canUseVersionedUrl(urlInfo)) {
|
|
1561
1563
|
// when url is not versioned we compute a "version" for that url anyway
|
|
1562
1564
|
// so that service worker source still changes and navigator
|
|
1563
1565
|
// detect there is a change
|
|
1564
|
-
const specifier = findKey(buildUrls, urlInfo.url)
|
|
1566
|
+
const specifier = findKey(buildUrls, urlInfo.url);
|
|
1565
1567
|
serviceWorkerResources[specifier] = {
|
|
1566
1568
|
version: versionMap.get(urlInfo.url),
|
|
1567
|
-
}
|
|
1568
|
-
return
|
|
1569
|
+
};
|
|
1570
|
+
return;
|
|
1569
1571
|
}
|
|
1570
|
-
const specifier = findKey(buildUrls, urlInfo.url)
|
|
1571
|
-
const versionedUrl = versionedUrlMap.get(urlInfo.url)
|
|
1572
|
-
const versionedSpecifier = findKey(buildUrls, versionedUrl)
|
|
1572
|
+
const specifier = findKey(buildUrls, urlInfo.url);
|
|
1573
|
+
const versionedUrl = versionedUrlMap.get(urlInfo.url);
|
|
1574
|
+
const versionedSpecifier = findKey(buildUrls, versionedUrl);
|
|
1573
1575
|
serviceWorkerResources[specifier] = {
|
|
1574
1576
|
version: versionMap.get(urlInfo.url),
|
|
1575
1577
|
versionedUrl: versionedSpecifier,
|
|
1576
|
-
}
|
|
1577
|
-
})
|
|
1578
|
+
};
|
|
1579
|
+
});
|
|
1578
1580
|
serviceWorkerEntryUrlInfos.forEach((serviceWorkerEntryUrlInfo) => {
|
|
1579
1581
|
const magicSource = createMagicSource(
|
|
1580
1582
|
serviceWorkerEntryUrlInfo.content,
|
|
1581
|
-
)
|
|
1583
|
+
);
|
|
1582
1584
|
const serviceWorkerResourcesWithoutSwScriptItSelf = {
|
|
1583
1585
|
...serviceWorkerResources,
|
|
1584
|
-
}
|
|
1586
|
+
};
|
|
1585
1587
|
const serviceWorkerSpecifier = findKey(
|
|
1586
1588
|
buildUrls,
|
|
1587
1589
|
serviceWorkerEntryUrlInfo.url,
|
|
1588
|
-
)
|
|
1590
|
+
);
|
|
1589
1591
|
delete serviceWorkerResourcesWithoutSwScriptItSelf[
|
|
1590
1592
|
serviceWorkerSpecifier
|
|
1591
|
-
]
|
|
1593
|
+
];
|
|
1592
1594
|
magicSource.prepend(
|
|
1593
1595
|
`\nself.resourcesFromJsenvBuild = ${JSON.stringify(
|
|
1594
1596
|
serviceWorkerResourcesWithoutSwScriptItSelf,
|
|
1595
1597
|
null,
|
|
1596
1598
|
" ",
|
|
1597
1599
|
)};\n`,
|
|
1598
|
-
)
|
|
1599
|
-
const { content, sourcemap } = magicSource.toContentAndSourcemap()
|
|
1600
|
+
);
|
|
1601
|
+
const { content, sourcemap } = magicSource.toContentAndSourcemap();
|
|
1600
1602
|
finalGraphKitchen.urlInfoTransformer.applyFinalTransformations(
|
|
1601
1603
|
serviceWorkerEntryUrlInfo,
|
|
1602
1604
|
{
|
|
1603
1605
|
content,
|
|
1604
1606
|
sourcemap,
|
|
1605
1607
|
},
|
|
1606
|
-
)
|
|
1607
|
-
})
|
|
1608
|
+
);
|
|
1609
|
+
});
|
|
1608
1610
|
}
|
|
1609
|
-
buildOperation.throwIfAborted()
|
|
1611
|
+
buildOperation.throwIfAborted();
|
|
1610
1612
|
}
|
|
1611
1613
|
}
|
|
1612
1614
|
|
|
1613
|
-
const buildManifest = {}
|
|
1614
|
-
const buildContents = {}
|
|
1615
|
-
const buildInlineRelativeUrls = []
|
|
1615
|
+
const buildManifest = {};
|
|
1616
|
+
const buildContents = {};
|
|
1617
|
+
const buildInlineRelativeUrls = [];
|
|
1616
1618
|
const getBuildRelativeUrl = (url) => {
|
|
1617
|
-
const urlObject = new URL(url)
|
|
1618
|
-
urlObject.searchParams.delete("js_module_fallback")
|
|
1619
|
-
urlObject.searchParams.delete("as_css_module")
|
|
1620
|
-
urlObject.searchParams.delete("as_json_module")
|
|
1621
|
-
urlObject.searchParams.delete("as_text_module")
|
|
1622
|
-
url = urlObject.href
|
|
1623
|
-
const buildRelativeUrl = urlToRelativeUrl(url, buildDirectoryUrl)
|
|
1624
|
-
return buildRelativeUrl
|
|
1625
|
-
}
|
|
1619
|
+
const urlObject = new URL(url);
|
|
1620
|
+
urlObject.searchParams.delete("js_module_fallback");
|
|
1621
|
+
urlObject.searchParams.delete("as_css_module");
|
|
1622
|
+
urlObject.searchParams.delete("as_json_module");
|
|
1623
|
+
urlObject.searchParams.delete("as_text_module");
|
|
1624
|
+
url = urlObject.href;
|
|
1625
|
+
const buildRelativeUrl = urlToRelativeUrl(url, buildDirectoryUrl);
|
|
1626
|
+
return buildRelativeUrl;
|
|
1627
|
+
};
|
|
1626
1628
|
GRAPH.forEach(finalGraph, (urlInfo) => {
|
|
1627
1629
|
if (!urlInfo.shouldHandle) {
|
|
1628
|
-
return
|
|
1630
|
+
return;
|
|
1629
1631
|
}
|
|
1630
1632
|
if (!urlInfo.url.startsWith("file:")) {
|
|
1631
|
-
return
|
|
1633
|
+
return;
|
|
1632
1634
|
}
|
|
1633
1635
|
if (urlInfo.type === "directory") {
|
|
1634
|
-
return
|
|
1636
|
+
return;
|
|
1635
1637
|
}
|
|
1636
1638
|
if (urlInfo.isInline) {
|
|
1637
|
-
const buildRelativeUrl = getBuildRelativeUrl(urlInfo.url)
|
|
1638
|
-
buildContents[buildRelativeUrl] = urlInfo.content
|
|
1639
|
-
buildInlineRelativeUrls.push(buildRelativeUrl)
|
|
1639
|
+
const buildRelativeUrl = getBuildRelativeUrl(urlInfo.url);
|
|
1640
|
+
buildContents[buildRelativeUrl] = urlInfo.content;
|
|
1641
|
+
buildInlineRelativeUrls.push(buildRelativeUrl);
|
|
1640
1642
|
} else {
|
|
1641
|
-
const versionedUrl = versionedUrlMap.get(urlInfo.url)
|
|
1643
|
+
const versionedUrl = versionedUrlMap.get(urlInfo.url);
|
|
1642
1644
|
if (versionedUrl && canUseVersionedUrl(urlInfo)) {
|
|
1643
|
-
const buildRelativeUrl = getBuildRelativeUrl(urlInfo.url)
|
|
1644
|
-
const versionedBuildRelativeUrl = getBuildRelativeUrl(versionedUrl)
|
|
1645
|
+
const buildRelativeUrl = getBuildRelativeUrl(urlInfo.url);
|
|
1646
|
+
const versionedBuildRelativeUrl = getBuildRelativeUrl(versionedUrl);
|
|
1645
1647
|
if (versioningMethod === "search_param") {
|
|
1646
|
-
buildContents[buildRelativeUrl] = urlInfo.content
|
|
1648
|
+
buildContents[buildRelativeUrl] = urlInfo.content;
|
|
1647
1649
|
} else {
|
|
1648
|
-
buildContents[versionedBuildRelativeUrl] = urlInfo.content
|
|
1650
|
+
buildContents[versionedBuildRelativeUrl] = urlInfo.content;
|
|
1649
1651
|
}
|
|
1650
|
-
buildManifest[buildRelativeUrl] = versionedBuildRelativeUrl
|
|
1652
|
+
buildManifest[buildRelativeUrl] = versionedBuildRelativeUrl;
|
|
1651
1653
|
} else {
|
|
1652
|
-
const buildRelativeUrl = getBuildRelativeUrl(urlInfo.url)
|
|
1653
|
-
buildContents[buildRelativeUrl] = urlInfo.content
|
|
1654
|
+
const buildRelativeUrl = getBuildRelativeUrl(urlInfo.url);
|
|
1655
|
+
buildContents[buildRelativeUrl] = urlInfo.content;
|
|
1654
1656
|
}
|
|
1655
1657
|
}
|
|
1656
|
-
})
|
|
1657
|
-
const buildFileContents = {}
|
|
1658
|
-
const buildInlineContents = {}
|
|
1658
|
+
});
|
|
1659
|
+
const buildFileContents = {};
|
|
1660
|
+
const buildInlineContents = {};
|
|
1659
1661
|
Object.keys(buildContents)
|
|
1660
1662
|
.sort((a, b) => comparePathnames(a, b))
|
|
1661
1663
|
.forEach((buildRelativeUrl) => {
|
|
1662
1664
|
if (buildInlineRelativeUrls.includes(buildRelativeUrl)) {
|
|
1663
1665
|
buildInlineContents[buildRelativeUrl] =
|
|
1664
|
-
buildContents[buildRelativeUrl]
|
|
1666
|
+
buildContents[buildRelativeUrl];
|
|
1665
1667
|
} else {
|
|
1666
|
-
buildFileContents[buildRelativeUrl] = buildContents[buildRelativeUrl]
|
|
1668
|
+
buildFileContents[buildRelativeUrl] = buildContents[buildRelativeUrl];
|
|
1667
1669
|
}
|
|
1668
|
-
})
|
|
1670
|
+
});
|
|
1669
1671
|
|
|
1670
1672
|
if (writeOnFileSystem) {
|
|
1671
1673
|
if (directoryToClean) {
|
|
1672
|
-
await ensureEmptyDirectory(directoryToClean)
|
|
1674
|
+
await ensureEmptyDirectory(directoryToClean);
|
|
1673
1675
|
}
|
|
1674
|
-
const buildRelativeUrls = Object.keys(buildFileContents)
|
|
1676
|
+
const buildRelativeUrls = Object.keys(buildFileContents);
|
|
1675
1677
|
buildRelativeUrls.forEach((buildRelativeUrl) => {
|
|
1676
1678
|
writeFileSync(
|
|
1677
1679
|
new URL(buildRelativeUrl, buildDirectoryUrl),
|
|
1678
1680
|
buildFileContents[buildRelativeUrl],
|
|
1679
|
-
)
|
|
1680
|
-
})
|
|
1681
|
+
);
|
|
1682
|
+
});
|
|
1681
1683
|
if (versioning && assetManifest && Object.keys(buildManifest).length) {
|
|
1682
1684
|
writeFileSync(
|
|
1683
1685
|
new URL(assetManifestFileRelativeUrl, buildDirectoryUrl),
|
|
1684
1686
|
JSON.stringify(buildManifest, null, " "),
|
|
1685
|
-
)
|
|
1687
|
+
);
|
|
1686
1688
|
}
|
|
1687
1689
|
}
|
|
1688
|
-
logger.info(createUrlGraphSummary(finalGraph, { title: "build files" }))
|
|
1690
|
+
logger.info(createUrlGraphSummary(finalGraph, { title: "build files" }));
|
|
1689
1691
|
return {
|
|
1690
1692
|
buildFileContents,
|
|
1691
1693
|
buildInlineContents,
|
|
1692
1694
|
buildManifest,
|
|
1693
|
-
}
|
|
1694
|
-
}
|
|
1695
|
+
};
|
|
1696
|
+
};
|
|
1695
1697
|
|
|
1696
1698
|
if (!watch) {
|
|
1697
|
-
return runBuild({ signal: operation.signal, logLevel })
|
|
1699
|
+
return runBuild({ signal: operation.signal, logLevel });
|
|
1698
1700
|
}
|
|
1699
1701
|
|
|
1700
|
-
let resolveFirstBuild
|
|
1701
|
-
let rejectFirstBuild
|
|
1702
|
+
let resolveFirstBuild;
|
|
1703
|
+
let rejectFirstBuild;
|
|
1702
1704
|
const firstBuildPromise = new Promise((resolve, reject) => {
|
|
1703
|
-
resolveFirstBuild = resolve
|
|
1704
|
-
rejectFirstBuild = reject
|
|
1705
|
-
})
|
|
1706
|
-
let buildAbortController
|
|
1707
|
-
let watchFilesTask
|
|
1705
|
+
resolveFirstBuild = resolve;
|
|
1706
|
+
rejectFirstBuild = reject;
|
|
1707
|
+
});
|
|
1708
|
+
let buildAbortController;
|
|
1709
|
+
let watchFilesTask;
|
|
1708
1710
|
const startBuild = async () => {
|
|
1709
|
-
const buildTask = createTaskLog("build")
|
|
1710
|
-
buildAbortController = new AbortController()
|
|
1711
|
+
const buildTask = createTaskLog("build");
|
|
1712
|
+
buildAbortController = new AbortController();
|
|
1711
1713
|
try {
|
|
1712
1714
|
const result = await runBuild({
|
|
1713
1715
|
signal: buildAbortController.signal,
|
|
1714
1716
|
logLevel: "warn",
|
|
1715
|
-
})
|
|
1716
|
-
buildTask.done()
|
|
1717
|
-
resolveFirstBuild(result)
|
|
1718
|
-
watchFilesTask = createTaskLog("watch files")
|
|
1717
|
+
});
|
|
1718
|
+
buildTask.done();
|
|
1719
|
+
resolveFirstBuild(result);
|
|
1720
|
+
watchFilesTask = createTaskLog("watch files");
|
|
1719
1721
|
} catch (e) {
|
|
1720
1722
|
if (Abort.isAbortError(e)) {
|
|
1721
|
-
buildTask.fail(`build aborted`)
|
|
1723
|
+
buildTask.fail(`build aborted`);
|
|
1722
1724
|
} else if (e.code === "PARSE_ERROR") {
|
|
1723
|
-
buildTask.fail()
|
|
1724
|
-
console.error(e.stack)
|
|
1725
|
-
watchFilesTask = createTaskLog("watch files")
|
|
1725
|
+
buildTask.fail();
|
|
1726
|
+
console.error(e.stack);
|
|
1727
|
+
watchFilesTask = createTaskLog("watch files");
|
|
1726
1728
|
} else {
|
|
1727
|
-
buildTask.fail()
|
|
1728
|
-
rejectFirstBuild(e)
|
|
1729
|
-
throw e
|
|
1729
|
+
buildTask.fail();
|
|
1730
|
+
rejectFirstBuild(e);
|
|
1731
|
+
throw e;
|
|
1730
1732
|
}
|
|
1731
1733
|
}
|
|
1732
|
-
}
|
|
1734
|
+
};
|
|
1733
1735
|
|
|
1734
|
-
startBuild()
|
|
1735
|
-
let startTimeout
|
|
1736
|
+
startBuild();
|
|
1737
|
+
let startTimeout;
|
|
1736
1738
|
const stopWatchingSourceFiles = watchSourceFiles(
|
|
1737
1739
|
sourceDirectoryUrl,
|
|
1738
1740
|
({ url, event }) => {
|
|
1739
1741
|
if (watchFilesTask) {
|
|
1740
1742
|
watchFilesTask.happen(
|
|
1741
1743
|
`${url.slice(sourceDirectoryUrl.length)} ${event}`,
|
|
1742
|
-
)
|
|
1743
|
-
watchFilesTask = null
|
|
1744
|
+
);
|
|
1745
|
+
watchFilesTask = null;
|
|
1744
1746
|
}
|
|
1745
|
-
buildAbortController.abort()
|
|
1747
|
+
buildAbortController.abort();
|
|
1746
1748
|
// setTimeout is to ensure the abortController.abort() above
|
|
1747
1749
|
// is properly taken into account so that logs about abort comes first
|
|
1748
1750
|
// then logs about re-running the build happens
|
|
1749
|
-
clearTimeout(startTimeout)
|
|
1750
|
-
startTimeout = setTimeout(startBuild, 20)
|
|
1751
|
+
clearTimeout(startTimeout);
|
|
1752
|
+
startTimeout = setTimeout(startBuild, 20);
|
|
1751
1753
|
},
|
|
1752
1754
|
{
|
|
1753
1755
|
sourceFilesConfig,
|
|
1754
1756
|
keepProcessAlive: true,
|
|
1755
1757
|
cooldownBetweenFileEvents,
|
|
1756
1758
|
},
|
|
1757
|
-
)
|
|
1759
|
+
);
|
|
1758
1760
|
operation.addAbortCallback(() => {
|
|
1759
|
-
stopWatchingSourceFiles()
|
|
1760
|
-
})
|
|
1761
|
-
await firstBuildPromise
|
|
1762
|
-
return stopWatchingSourceFiles
|
|
1763
|
-
}
|
|
1761
|
+
stopWatchingSourceFiles();
|
|
1762
|
+
});
|
|
1763
|
+
await firstBuildPromise;
|
|
1764
|
+
return stopWatchingSourceFiles;
|
|
1765
|
+
};
|
|
1764
1766
|
|
|
1765
1767
|
const findKey = (map, value) => {
|
|
1766
1768
|
for (const [keyCandidate, valueCandidate] of map) {
|
|
1767
1769
|
if (valueCandidate === value) {
|
|
1768
|
-
return keyCandidate
|
|
1770
|
+
return keyCandidate;
|
|
1769
1771
|
}
|
|
1770
1772
|
}
|
|
1771
|
-
return undefined
|
|
1772
|
-
}
|
|
1773
|
+
return undefined;
|
|
1774
|
+
};
|
|
1773
1775
|
|
|
1774
1776
|
const injectVersionIntoBuildUrl = ({ buildUrl, version, versioningMethod }) => {
|
|
1775
1777
|
if (versioningMethod === "search_param") {
|
|
1776
1778
|
return injectQueryParams(buildUrl, {
|
|
1777
1779
|
v: version,
|
|
1778
|
-
})
|
|
1780
|
+
});
|
|
1779
1781
|
}
|
|
1780
|
-
const basename = urlToBasename(buildUrl)
|
|
1781
|
-
const extension = urlToExtension(buildUrl)
|
|
1782
|
-
const versionedFilename = `${basename}-${version}${extension}
|
|
1783
|
-
const versionedUrl = setUrlFilename(buildUrl, versionedFilename)
|
|
1784
|
-
return versionedUrl
|
|
1785
|
-
}
|
|
1782
|
+
const basename = urlToBasename(buildUrl);
|
|
1783
|
+
const extension = urlToExtension(buildUrl);
|
|
1784
|
+
const versionedFilename = `${basename}-${version}${extension}`;
|
|
1785
|
+
const versionedUrl = setUrlFilename(buildUrl, versionedFilename);
|
|
1786
|
+
return versionedUrl;
|
|
1787
|
+
};
|
|
1786
1788
|
|
|
1787
1789
|
const isUsed = (urlInfo) => {
|
|
1788
1790
|
// nothing uses this url anymore
|
|
1789
1791
|
// - versioning update inline content
|
|
1790
1792
|
// - file converted for import assertion or js_classic conversion
|
|
1791
1793
|
if (urlInfo.isEntryPoint) {
|
|
1792
|
-
return true
|
|
1794
|
+
return true;
|
|
1793
1795
|
}
|
|
1794
1796
|
if (urlInfo.type === "sourcemap") {
|
|
1795
|
-
return true
|
|
1797
|
+
return true;
|
|
1796
1798
|
}
|
|
1797
1799
|
if (urlInfo.injected) {
|
|
1798
|
-
return true
|
|
1800
|
+
return true;
|
|
1799
1801
|
}
|
|
1800
|
-
return urlInfo.dependents.size > 0
|
|
1801
|
-
}
|
|
1802
|
+
return urlInfo.dependents.size > 0;
|
|
1803
|
+
};
|
|
1802
1804
|
|
|
1803
1805
|
const canUseVersionedUrl = (urlInfo) => {
|
|
1804
1806
|
if (urlInfo.isEntryPoint) {
|
|
1805
|
-
return false
|
|
1807
|
+
return false;
|
|
1806
1808
|
}
|
|
1807
|
-
return urlInfo.type !== "webmanifest"
|
|
1808
|
-
}
|
|
1809
|
+
return urlInfo.type !== "webmanifest";
|
|
1810
|
+
};
|