@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.
Files changed (118) hide show
  1. package/dist/html/explorer.html +107 -107
  2. package/dist/js/new_stylesheet.js +3 -0
  3. package/dist/js/s.js.map +3 -3
  4. package/dist/jsenv_core.js +15 -17
  5. package/package.json +1 -1
  6. package/src/build/build.js +589 -587
  7. package/src/build/build_urls_generator.js +44 -44
  8. package/src/build/graph_utils.js +14 -14
  9. package/src/build/jsenv_plugin_line_break_normalization.js +6 -6
  10. package/src/build/line_break_unix.js +11 -11
  11. package/src/build/start_build_server.js +37 -37
  12. package/src/build/version_generator.js +7 -7
  13. package/src/build/version_mappings_injection.js +23 -23
  14. package/src/dev/file_service.js +136 -135
  15. package/src/dev/start_dev_server.js +56 -56
  16. package/src/dev/user_agent.js +8 -8
  17. package/src/helpers/basic_fetch.js +24 -24
  18. package/src/helpers/command/command.js +28 -28
  19. package/src/helpers/lookup_package_directory.js +19 -16
  20. package/src/helpers/ping_server.js +17 -17
  21. package/src/helpers/require_from_jsenv.js +2 -2
  22. package/src/helpers/watch_source_files.js +9 -9
  23. package/src/helpers/web_url_converter.js +10 -10
  24. package/src/helpers/worker_reload.js +27 -27
  25. package/src/kitchen/compat/features_compatibility.js +1 -1
  26. package/src/kitchen/compat/runtime_compat.js +26 -24
  27. package/src/kitchen/errors.js +75 -75
  28. package/src/kitchen/fetched_content_compliance.js +8 -8
  29. package/src/kitchen/kitchen.js +251 -250
  30. package/src/kitchen/url_graph/sort_by_dependencies.js +17 -17
  31. package/src/kitchen/url_graph/url_graph_loader.js +30 -30
  32. package/src/kitchen/url_graph/url_graph_report.js +57 -57
  33. package/src/kitchen/url_graph/url_info_transformations.js +77 -77
  34. package/src/kitchen/url_graph.js +121 -121
  35. package/src/kitchen/url_specifier_encoding.js +21 -21
  36. package/src/kitchen/web_workers.js +5 -5
  37. package/src/main.js +3 -3
  38. package/src/plugins/autoreload/client/autoreload.js +96 -96
  39. package/src/plugins/autoreload/client/reload.js +56 -56
  40. package/src/plugins/autoreload/client/url_helpers.js +13 -13
  41. package/src/plugins/autoreload/jsenv_plugin_autoreload.js +5 -5
  42. package/src/plugins/autoreload/jsenv_plugin_autoreload_client.js +9 -9
  43. package/src/plugins/autoreload/jsenv_plugin_autoreload_server.js +61 -60
  44. package/src/plugins/autoreload/jsenv_plugin_hmr.js +15 -15
  45. package/src/plugins/cache_control/jsenv_plugin_cache_control.js +5 -5
  46. package/src/plugins/commonjs_globals/jsenv_plugin_commonjs_globals.js +57 -57
  47. package/src/plugins/explorer/client/explorer.html +107 -107
  48. package/src/plugins/explorer/jsenv_plugin_explorer.js +23 -25
  49. package/src/plugins/file_urls/jsenv_plugin_file_urls.js +60 -60
  50. package/src/plugins/global_scenarios/jsenv_plugin_global_scenarios.js +5 -5
  51. package/src/plugins/http_urls/jsenv_plugin_http_urls.js +3 -3
  52. package/src/plugins/import_meta_hot/babel_plugin_metadata_import_meta_hot.js +35 -35
  53. package/src/plugins/import_meta_hot/client/import_meta_hot.js +26 -26
  54. package/src/plugins/import_meta_hot/html_hot_dependencies.js +43 -43
  55. package/src/plugins/import_meta_hot/jsenv_plugin_import_meta_hot.js +44 -40
  56. package/src/plugins/import_meta_scenarios/jsenv_plugin_import_meta_scenarios.js +35 -35
  57. package/src/plugins/import_meta_url/client/import_meta_url_browser.js +21 -21
  58. package/src/plugins/import_meta_url/client/import_meta_url_commonjs.mjs +3 -3
  59. package/src/plugins/importmap/jsenv_plugin_importmap.js +54 -54
  60. package/src/plugins/inline_content_analysis/client/inline_content.js +3 -3
  61. package/src/plugins/inline_content_analysis/jsenv_plugin_data_urls.js +26 -26
  62. package/src/plugins/inline_content_analysis/jsenv_plugin_html_inline_content_analysis.js +47 -47
  63. package/src/plugins/inline_content_analysis/jsenv_plugin_inline_content_analysis.js +9 -9
  64. package/src/plugins/inline_content_analysis/jsenv_plugin_js_inline_content_analysis.js +101 -101
  65. package/src/plugins/inlining/jsenv_plugin_inlining.js +9 -9
  66. package/src/plugins/inlining/jsenv_plugin_inlining_as_data_url.js +11 -11
  67. package/src/plugins/inlining/jsenv_plugin_inlining_into_html.js +48 -46
  68. package/src/plugins/node_runtime/jsenv_plugin_node_runtime.js +4 -4
  69. package/src/plugins/plugin_controller.js +124 -124
  70. package/src/plugins/plugins.js +30 -30
  71. package/src/plugins/ribbon/client/ribbon.js +6 -6
  72. package/src/plugins/ribbon/jsenv_plugin_ribbon.js +15 -15
  73. package/src/plugins/server_events/client/connection_manager.js +52 -52
  74. package/src/plugins/server_events/client/event_source_connection.js +36 -36
  75. package/src/plugins/server_events/client/events_manager.js +37 -37
  76. package/src/plugins/server_events/client/server_events_client.js +7 -7
  77. package/src/plugins/server_events/client/web_socket_connection.js +39 -39
  78. package/src/plugins/server_events/jsenv_plugin_server_events_client_injection.js +9 -9
  79. package/src/plugins/server_events/server_events_dispatcher.js +43 -43
  80. package/src/plugins/supervisor/client/supervisor.js +455 -450
  81. package/src/plugins/supervisor/html_supervisor_injection.js +64 -62
  82. package/src/plugins/supervisor/js_supervisor_injection.js +67 -67
  83. package/src/plugins/supervisor/jsenv_plugin_supervisor.js +54 -51
  84. package/src/plugins/transpilation/as_js_module/convert_js_classic_to_js_module.js +13 -13
  85. package/src/plugins/transpilation/as_js_module/jsenv_plugin_as_js_module.js +19 -19
  86. package/src/plugins/transpilation/babel/global_this/babel_plugin_global_this_as_jsenv_import.js +10 -10
  87. package/src/plugins/transpilation/babel/global_this/client/global_this.js +8 -8
  88. package/src/plugins/transpilation/babel/helpers/babel_plugin_babel_helpers_as_jsenv_imports.js +16 -16
  89. package/src/plugins/transpilation/babel/helpers/babel_plugin_structure.js +36 -36
  90. package/src/plugins/transpilation/babel/helpers/babel_plugins_compatibility.js +3 -3
  91. package/src/plugins/transpilation/babel/jsenv_plugin_babel.js +24 -24
  92. package/src/plugins/transpilation/babel/new_stylesheet/babel_plugin_new_stylesheet_as_jsenv_import.js +44 -44
  93. package/src/plugins/transpilation/babel/new_stylesheet/client/new_stylesheet.js +166 -166
  94. package/src/plugins/transpilation/babel/regenerator_runtime/babel_plugin_regenerator_runtime_as_jsenv_import.js +10 -10
  95. package/src/plugins/transpilation/babel/require_babel_plugin.js +6 -6
  96. package/src/plugins/transpilation/css/jsenv_plugin_css_transpilation.js +20 -20
  97. package/src/plugins/transpilation/import_assertions/jsenv_plugin_import_assertions.js +62 -62
  98. package/src/plugins/transpilation/js_module_fallback/client/s.js +214 -209
  99. package/src/plugins/transpilation/js_module_fallback/convert_js_module_to_js_classic.js +45 -45
  100. package/src/plugins/transpilation/js_module_fallback/helpers/babel_plugin_transform_import_meta_resolve.js +6 -6
  101. package/src/plugins/transpilation/js_module_fallback/helpers/babel_plugin_transform_import_meta_url.js +17 -17
  102. package/src/plugins/transpilation/js_module_fallback/helpers-string.js +1 -1
  103. package/src/plugins/transpilation/js_module_fallback/jsenv_plugin_js_module_conversion.js +32 -32
  104. package/src/plugins/transpilation/js_module_fallback/jsenv_plugin_js_module_fallback.js +17 -17
  105. package/src/plugins/transpilation/js_module_fallback/jsenv_plugin_js_module_fallback_inside_html.js +63 -63
  106. package/src/plugins/transpilation/js_module_fallback/jsenv_plugin_js_module_fallback_on_workers.js +15 -15
  107. package/src/plugins/transpilation/jsenv_plugin_import_meta_resolve.js +20 -20
  108. package/src/plugins/transpilation/jsenv_plugin_top_level_await.js +23 -23
  109. package/src/plugins/transpilation/jsenv_plugin_transpilation.js +11 -11
  110. package/src/plugins/url_analysis/css/css_urls.js +12 -12
  111. package/src/plugins/url_analysis/html/html_urls.js +85 -85
  112. package/src/plugins/url_analysis/js/js_urls.js +16 -16
  113. package/src/plugins/url_analysis/jsenv_plugin_reference_expected_types.js +16 -16
  114. package/src/plugins/url_analysis/jsenv_plugin_url_analysis.js +40 -40
  115. package/src/plugins/url_analysis/webmanifest/webmanifest_urls.js +12 -12
  116. package/src/plugins/url_resolution/jsenv_plugin_url_resolution.js +36 -36
  117. package/src/plugins/url_resolution/node_esm_resolver.js +26 -26
  118. package/src/plugins/url_version/jsenv_plugin_url_version.js +11 -11
@@ -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(reference.url)
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
+ };