@jsenv/core 27.0.0-alpha.64 → 27.0.0-alpha.67

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 (151) hide show
  1. package/dist/babel_helpers/AsyncGenerator/AsyncGenerator.js +95 -0
  2. package/dist/babel_helpers/AwaitValue/AwaitValue.js +3 -0
  3. package/dist/babel_helpers/applyDecoratorDescriptor/applyDecoratorDescriptor.js +29 -0
  4. package/dist/babel_helpers/arrayLikeToArray/arrayLikeToArray.js +9 -0
  5. package/dist/babel_helpers/arrayWithHoles/arrayWithHoles.js +4 -0
  6. package/dist/babel_helpers/arrayWithoutHoles/arrayWithoutHoles.js +5 -0
  7. package/dist/babel_helpers/assertThisInitialized/assertThisInitialized.js +8 -0
  8. package/dist/babel_helpers/asyncGeneratorDelegate/asyncGeneratorDelegate.js +52 -0
  9. package/dist/babel_helpers/asyncIterator/asyncIterator.js +78 -0
  10. package/dist/babel_helpers/asyncToGenerator/asyncToGenerator.js +39 -0
  11. package/dist/babel_helpers/awaitAsyncGenerator/awaitAsyncGenerator.js +4 -0
  12. package/dist/babel_helpers/classApplyDescriptorDestructureSet/classApplyDescriptorDestructureSet.js +24 -0
  13. package/dist/babel_helpers/classApplyDescriptorGet/classApplyDescriptorGet.js +7 -0
  14. package/dist/babel_helpers/classApplyDescriptorSet/classApplyDescriptorSet.js +14 -0
  15. package/dist/babel_helpers/classCallCheck/classCallCheck.js +5 -0
  16. package/dist/babel_helpers/classCheckPrivateStaticAccess/classCheckPrivateStaticAccess.js +5 -0
  17. package/dist/babel_helpers/classCheckPrivateStaticFieldDescriptor/classCheckPrivateStaticFieldDescriptor.js +6 -0
  18. package/dist/babel_helpers/classExtractFieldDescriptor/classExtractFieldDescriptor.js +8 -0
  19. package/dist/babel_helpers/classNameTDZError/classNameTDZError.js +4 -0
  20. package/dist/babel_helpers/classPrivateFieldDestructureSet/classPrivateFieldDestructureSet.js +6 -0
  21. package/dist/babel_helpers/classPrivateFieldGet/classPrivateFieldGet.js +6 -0
  22. package/dist/babel_helpers/classPrivateFieldLooseBase/classPrivateFieldLooseBase.js +7 -0
  23. package/dist/babel_helpers/classPrivateFieldLooseKey/classPrivateFieldLooseKey.js +5 -0
  24. package/dist/babel_helpers/classPrivateFieldSet/classPrivateFieldSet.js +7 -0
  25. package/dist/babel_helpers/classPrivateMethodGet/classPrivateMethodGet.js +7 -0
  26. package/dist/babel_helpers/classPrivateMethodSet/classPrivateMethodSet.js +3 -0
  27. package/dist/babel_helpers/classStaticPrivateFieldSpecGet/classStaticPrivateFieldSpecGet.js +8 -0
  28. package/dist/babel_helpers/classStaticPrivateFieldSpecSet/classStaticPrivateFieldSpecSet.js +9 -0
  29. package/dist/babel_helpers/classStaticPrivateMethodGet/classStaticPrivateMethodGet.js +5 -0
  30. package/dist/babel_helpers/classStaticPrivateMethodSet/classStaticPrivateMethodSet.js +3 -0
  31. package/dist/babel_helpers/construct/construct.js +15 -0
  32. package/dist/babel_helpers/createClass/createClass.js +18 -0
  33. package/dist/babel_helpers/createForOfIteratorHelper/createForOfIteratorHelper.js +63 -0
  34. package/dist/babel_helpers/createForOfIteratorHelperLoose/createForOfIteratorHelperLoose.js +22 -0
  35. package/dist/babel_helpers/createRawReactElement/createRawReactElement.js +50 -0
  36. package/dist/babel_helpers/createSuper/createSuper.js +22 -0
  37. package/dist/babel_helpers/decorate/decorate.js +622 -0
  38. package/dist/babel_helpers/defaults/defaults.js +14 -0
  39. package/dist/babel_helpers/defineEnumerableProperties/defineEnumerableProperties.js +26 -0
  40. package/dist/babel_helpers/defineProperty/defineProperty.js +19 -0
  41. package/dist/babel_helpers/extends/extends.js +16 -0
  42. package/dist/babel_helpers/get/get.js +21 -0
  43. package/dist/babel_helpers/getPrototypeOf/getPrototypeOf.js +2 -0
  44. package/dist/babel_helpers/inherits/inherits.js +21 -0
  45. package/dist/babel_helpers/inheritsLoose/inheritsLoose.js +6 -0
  46. package/dist/babel_helpers/initializerDefineProperty/initializerDefineProperty.js +10 -0
  47. package/dist/babel_helpers/initializerWarningHelper/initializerWarningHelper.js +3 -0
  48. package/dist/babel_helpers/instanceof/instanceof.js +7 -0
  49. package/dist/babel_helpers/interopRequireDefault/interopRequireDefault.js +5 -0
  50. package/dist/babel_helpers/interopRequireWildcard/interopRequireWildcard.js +49 -0
  51. package/dist/babel_helpers/isNativeFunction/isNativeFunction.js +4 -0
  52. package/dist/babel_helpers/isNativeReflectConstruct/isNativeReflectConstruct.js +21 -0
  53. package/dist/babel_helpers/iterableToArray/iterableToArray.js +3 -0
  54. package/dist/babel_helpers/iterableToArrayLimit/iterableToArrayLimit.js +38 -0
  55. package/dist/babel_helpers/iterableToArrayLimitLoose/iterableToArrayLimitLoose.js +13 -0
  56. package/dist/babel_helpers/jsx/jsx.js +49 -0
  57. package/dist/babel_helpers/maybeArrayLike/maybeArrayLike.js +10 -0
  58. package/dist/babel_helpers/newArrowCheck/newArrowCheck.js +5 -0
  59. package/dist/babel_helpers/nonIterableRest/nonIterableRest.js +3 -0
  60. package/dist/babel_helpers/nonIterableSpread/nonIterableSpread.js +3 -0
  61. package/dist/babel_helpers/objectDestructuringEmpty/objectDestructuringEmpty.js +3 -0
  62. package/dist/babel_helpers/objectSpread/objectSpread.js +22 -0
  63. package/dist/babel_helpers/objectSpread2/objectSpread2.js +41 -0
  64. package/dist/babel_helpers/objectWithoutProperties/objectWithoutProperties.js +20 -0
  65. package/dist/babel_helpers/objectWithoutPropertiesLoose/objectWithoutPropertiesLoose.js +15 -0
  66. package/dist/babel_helpers/possibleConstructorReturn/possibleConstructorReturn.js +10 -0
  67. package/dist/babel_helpers/readOnlyError/readOnlyError.js +4 -0
  68. package/dist/babel_helpers/readme.md +8 -0
  69. package/dist/babel_helpers/set/set.js +51 -0
  70. package/dist/babel_helpers/setPrototypeOf/setPrototypeOf.js +5 -0
  71. package/dist/babel_helpers/skipFirstGeneratorNext/skipFirstGeneratorNext.js +8 -0
  72. package/dist/babel_helpers/slicedToArray/slicedToArray.js +5 -0
  73. package/dist/babel_helpers/slicedToArrayLoose/slicedToArrayLoose.js +7 -0
  74. package/dist/babel_helpers/superPropBase/superPropBase.js +10 -0
  75. package/dist/babel_helpers/taggedTemplateLiteral/taggedTemplateLiteral.js +11 -0
  76. package/dist/babel_helpers/taggedTemplateLiteralLoose/taggedTemplateLiteralLoose.js +8 -0
  77. package/dist/babel_helpers/tdz/tdz.js +4 -0
  78. package/dist/babel_helpers/temporalRef/temporalRef.js +5 -0
  79. package/dist/babel_helpers/temporalUndefined/temporalUndefined.js +3 -0
  80. package/dist/babel_helpers/toArray/toArray.js +5 -0
  81. package/dist/babel_helpers/toConsumableArray/toConsumableArray.js +5 -0
  82. package/dist/babel_helpers/toPrimitive/toPrimitive.js +14 -0
  83. package/dist/babel_helpers/toPropertyKey/toPropertyKey.js +5 -0
  84. package/dist/babel_helpers/typeof/typeof.js +7 -0
  85. package/dist/babel_helpers/unsupportedIterableToArray/unsupportedIterableToArray.js +10 -0
  86. package/dist/babel_helpers/wrapAsyncGenerator/wrapAsyncGenerator.js +7 -0
  87. package/dist/babel_helpers/wrapNativeSuper/wrapNativeSuper.js +35 -0
  88. package/dist/babel_helpers/wrapRegExp/wrapRegExp.js +67 -0
  89. package/dist/babel_helpers/writeOnlyError/writeOnlyError.js +4 -0
  90. package/dist/html/explorer.html +557 -0
  91. package/dist/js/controllable_file.mjs +227 -0
  92. package/dist/{event_source_client.js → js/event_source_client.js} +19 -244
  93. package/dist/js/global_this.js +32 -0
  94. package/dist/js/html_supervisor_installer.js +522 -0
  95. package/dist/js/html_supervisor_setup.js +79 -0
  96. package/dist/{import_meta_hot.js → js/import_meta_hot.js} +1 -3
  97. package/dist/js/inline_content.js +8 -0
  98. package/dist/js/new_stylesheet.js +409 -0
  99. package/dist/js/regenerator_runtime.js +721 -0
  100. package/dist/js/s.js +429 -0
  101. package/dist/main.js +13450 -0
  102. package/dist/other/jsenv.png +0 -0
  103. package/dist/s.js.map +59 -62
  104. package/package.json +16 -12
  105. package/src/build/build.js +169 -68
  106. package/src/build/build_urls_generator.js +18 -2
  107. package/src/build/inject_service_worker_urls.js +1 -1
  108. package/src/build/resync_ressource_hints.js +56 -9
  109. package/src/dev/plugins/explorer/client/explorer.html +1 -1
  110. package/src/dev/plugins/explorer/jsenv_plugin_explorer.js +1 -1
  111. package/src/dev/start_dev_server.js +17 -3
  112. package/src/execute/execute.js +3 -0
  113. package/src/omega/errors.js +12 -9
  114. package/src/omega/kitchen.js +252 -217
  115. package/src/omega/server/file_service.js +1 -1
  116. package/src/omega/url_graph/url_graph_report.js +2 -2
  117. package/src/omega/url_graph/url_info_transformations.js +10 -5
  118. package/src/omega/url_graph.js +3 -2
  119. package/src/plugins/autoreload/dev_sse/jsenv_plugin_dev_sse_client.js +5 -10
  120. package/src/plugins/autoreload/jsenv_plugin_autoreload.js +1 -3
  121. package/src/plugins/bundling/js_module/bundle_js_module.js +66 -24
  122. package/src/plugins/file_urls/jsenv_plugin_file_urls.js +185 -53
  123. package/src/plugins/html_supervisor/jsenv_plugin_html_supervisor.js +9 -13
  124. package/src/plugins/http_urls/jsenv_plugin_http_urls.js +6 -6
  125. package/src/plugins/import_meta_hot/jsenv_plugin_import_meta_hot.js +5 -10
  126. package/src/plugins/inline/jsenv_plugin_js_inline_content.js +2 -2
  127. package/src/plugins/node_esm_resolution/jsenv_plugin_node_esm_resolution.js +12 -2
  128. package/src/plugins/node_runtime/jsenv_plugin_node_runtime.js +12 -0
  129. package/src/plugins/plugin_controller.js +17 -3
  130. package/src/plugins/plugins.js +16 -19
  131. package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic.js +17 -19
  132. package/src/plugins/transpilation/as_js_classic/{jsenv_plugin_script_type_module_as_classic.js → jsenv_plugin_as_js_classic_html.js} +0 -0
  133. package/src/plugins/transpilation/import_assertions/jsenv_plugin_import_assertions.js +9 -4
  134. package/src/plugins/transpilation/jsenv_plugin_transpilation.js +1 -2
  135. package/src/plugins/url_analysis/css/css_urls.js +1 -1
  136. package/src/plugins/url_analysis/html/html_urls.js +4 -1
  137. package/src/plugins/url_analysis/js/js_urls.js +3 -2
  138. package/src/plugins/url_analysis/jsenv_plugin_url_analysis.js +94 -1
  139. package/src/plugins/url_analysis/webmanifest/webmanifest_urls.js +3 -0
  140. package/src/plugins/url_resolution/jsenv_plugin_url_resolution.js +0 -3
  141. package/src/test/execute_plan.js +3 -1
  142. package/dist/event_source_client.js.map +0 -188
  143. package/dist/html_supervisor_installer.js +0 -1236
  144. package/dist/html_supervisor_installer.js.map +0 -337
  145. package/dist/html_supervisor_setup.js +0 -95
  146. package/dist/html_supervisor_setup.js.map +0 -57
  147. package/dist/import_meta_hot.js.map +0 -42
  148. package/src/jsenv_root_directory_url.js +0 -1
  149. package/src/omega/compat/default_runtime_compat.js +0 -11
  150. package/src/plugins/filesystem_magic/jsenv_plugin_filesystem_magic.js +0 -61
  151. package/src/plugins/transpilation/babel/new_stylesheet/client/.eslintrc.cjs +0 -24
@@ -15,7 +15,6 @@ import { createPluginController } from "../plugins/plugin_controller.js"
15
15
  import { urlSpecifierEncoding } from "./url_specifier_encoding.js"
16
16
  import { createUrlInfoTransformer } from "./url_graph/url_info_transformations.js"
17
17
  import { RUNTIME_COMPAT } from "./compat/runtime_compat.js"
18
- import { defaultRuntimeCompat } from "./compat/default_runtime_compat.js"
19
18
  import {
20
19
  createResolveUrlError,
21
20
  createFetchUrlContentError,
@@ -46,7 +45,7 @@ export const createKitchen = ({
46
45
  build: true,
47
46
  }[scenario],
48
47
  sourcemapsRelativeSources,
49
- runtimeCompat = defaultRuntimeCompat,
48
+ runtimeCompat,
50
49
  writeGeneratedFiles,
51
50
  }) => {
52
51
  const pluginController = createPluginController({
@@ -86,7 +85,7 @@ export const createKitchen = ({
86
85
  specifierColumn,
87
86
  baseUrl,
88
87
  isOriginalPosition,
89
- external = false,
88
+ shouldHandle,
90
89
  isInline = false,
91
90
  injected = false,
92
91
  isRessourceHint = false,
@@ -122,7 +121,7 @@ export const createKitchen = ({
122
121
  specifierColumn,
123
122
  baseUrl,
124
123
  isOriginalPosition,
125
- external,
124
+ shouldHandle,
126
125
  isInline,
127
126
  injected,
128
127
  isRessourceHint,
@@ -152,11 +151,6 @@ export const createKitchen = ({
152
151
  }
153
152
  resolvedUrl = normalizeUrl(resolvedUrl)
154
153
  reference.url = resolvedUrl
155
- if (reference.external) {
156
- reference.generatedUrl = resolvedUrl
157
- reference.generatedSpecifier = reference.specifier
158
- return urlGraph.reuseOrCreateUrlInfo(reference.url)
159
- }
160
154
  pluginController.callHooks(
161
155
  "redirectUrl",
162
156
  reference,
@@ -259,10 +253,6 @@ export const createKitchen = ({
259
253
  })
260
254
 
261
255
  const fetchUrlContent = async (urlInfo, { reference, context }) => {
262
- if (reference.external) {
263
- urlInfo.external = true
264
- return
265
- }
266
256
  try {
267
257
  const fetchUrlContentReturnValue =
268
258
  await pluginController.callAsyncHooksUntil(
@@ -273,18 +263,13 @@ export const createKitchen = ({
273
263
  if (!fetchUrlContentReturnValue) {
274
264
  logger.warn(
275
265
  createDetailedMessage(
276
- `no plugin has handled the url during "fetchUrlContent" hook -> consider url as external (ignore it)`,
266
+ `no plugin has handled url during "fetchUrlContent" hook -> url will be ignored`,
277
267
  {
278
268
  "url": urlInfo.url,
279
269
  "url reference trace": reference.trace,
280
270
  },
281
271
  ),
282
272
  )
283
- urlInfo.external = true
284
- return
285
- }
286
- if (fetchUrlContentReturnValue.external) {
287
- urlInfo.external = true
288
273
  return
289
274
  }
290
275
  const {
@@ -292,6 +277,7 @@ export const createKitchen = ({
292
277
  type,
293
278
  subtype,
294
279
  contentType = "application/octet-stream",
280
+ originalUrl,
295
281
  originalContent,
296
282
  content,
297
283
  sourcemap,
@@ -313,7 +299,8 @@ export const createKitchen = ({
313
299
  subtype: urlInfo.subtype,
314
300
  })
315
301
  urlInfo.contentType = contentType
316
- // during build urls info are reused and load returns originalContent
302
+ // during build urls info are reused and load returns originalUrl/originalContent
303
+ urlInfo.originalUrl = originalUrl || urlInfo.originalUrl
317
304
  urlInfo.originalContent =
318
305
  originalContent === undefined ? content : originalContent
319
306
  urlInfo.content = content
@@ -367,206 +354,207 @@ export const createKitchen = ({
367
354
  return fetchUrlContent(urlInfo, { reference, context })
368
355
  }
369
356
 
370
- // "fetchUrlContent" hook
371
- await fetchUrlContent(urlInfo, { reference: context.reference, context })
372
- if (urlInfo.external) {
373
- return
374
- }
357
+ if (urlInfo.shouldHandle) {
358
+ // "fetchUrlContent" hook
359
+ await fetchUrlContent(urlInfo, { reference: context.reference, context })
375
360
 
376
- // parsing
377
- const references = []
378
- const addReference = (props) => {
379
- const reference = createReference({
380
- parentUrl: urlInfo.url,
381
- ...props,
382
- })
383
- references.push(reference)
384
- const referencedUrlInfo = resolveReference(reference)
385
- return [reference, referencedUrlInfo]
386
- }
387
- const referenceUtils = {
388
- readGeneratedSpecifier: async (reference) => {
389
- // "formatReferencedUrl" can be async BUT this is an exception
390
- // for most cases it will be sync. We want to favor the sync signature to keep things simpler
391
- // The only case where it needs to be async is when
392
- // the specifier is a `data:*` url
393
- // in this case we'll wait for the promise returned by
394
- // "formatReferencedUrl"
395
- if (reference.generatedSpecifier.then) {
396
- return reference.generatedSpecifier.then((value) => {
397
- reference.generatedSpecifier = value
398
- return value
399
- })
400
- }
401
- return reference.generatedSpecifier
402
- },
403
- found: ({ specifierLine, specifierColumn, ...rest }) => {
404
- const trace = stringifyUrlSite(
405
- adjustUrlSite(urlInfo, {
406
- urlGraph,
407
- url: urlInfo.url,
408
- line: specifierLine,
409
- column: specifierColumn,
410
- }),
411
- )
412
- // console.log(trace)
413
- return addReference({
414
- trace,
415
- specifierLine,
416
- specifierColumn,
417
- ...rest,
361
+ // parsing
362
+ const references = []
363
+ const addReference = (props) => {
364
+ const reference = createReference({
365
+ parentUrl: urlInfo.url,
366
+ ...props,
418
367
  })
419
- },
420
- foundInline: ({ isOriginalPosition, line, column, ...rest }) => {
421
- const parentUrl = isOriginalPosition
422
- ? urlInfo.url
423
- : urlInfo.generatedUrl
424
- const parentContent = isOriginalPosition
425
- ? urlInfo.originalContent
426
- : urlInfo.content
427
- return addReference({
428
- trace: stringifyUrlSite({
429
- url: parentUrl,
430
- content: parentContent,
431
- line,
432
- column,
433
- }),
434
- isOriginalPosition,
435
- line,
436
- column,
437
- isInline: true,
438
- ...rest,
439
- })
440
- },
441
- update: (currentReference, newReferenceParams) => {
442
- const index = references.indexOf(currentReference)
443
- if (index === -1) {
444
- throw new Error(`reference do not exists`)
445
- }
446
- const previousReference = currentReference
447
- const nextReference = createReference({
448
- ...previousReference,
449
- ...newReferenceParams,
450
- })
451
- references[index] = nextReference
452
- mutateReference(previousReference, nextReference)
453
- const newUrlInfo = resolveReference(nextReference)
454
- const currentUrlInfo = context.urlGraph.getUrlInfo(currentReference.url)
455
- if (
456
- currentUrlInfo &&
457
- currentUrlInfo !== newUrlInfo &&
458
- currentUrlInfo.dependents.size === 0
459
- ) {
460
- context.urlGraph.deleteUrlInfo(currentReference.url)
461
- }
462
- return [nextReference, newUrlInfo]
463
- },
464
- becomesInline: (
465
- reference,
466
- {
467
- isOriginalPosition,
468
- specifier,
469
- specifierLine,
470
- specifierColumn,
471
- contentType,
472
- content,
368
+ references.push(reference)
369
+ const referencedUrlInfo = resolveReference(reference)
370
+ return [reference, referencedUrlInfo]
371
+ }
372
+ const referenceUtils = {
373
+ readGeneratedSpecifier: async (reference) => {
374
+ // "formatReferencedUrl" can be async BUT this is an exception
375
+ // for most cases it will be sync. We want to favor the sync signature to keep things simpler
376
+ // The only case where it needs to be async is when
377
+ // the specifier is a `data:*` url
378
+ // in this case we'll wait for the promise returned by
379
+ // "formatReferencedUrl"
380
+ if (reference.generatedSpecifier.then) {
381
+ return reference.generatedSpecifier.then((value) => {
382
+ reference.generatedSpecifier = value
383
+ return value
384
+ })
385
+ }
386
+ return reference.generatedSpecifier
473
387
  },
474
- ) => {
475
- const parentUrl = isOriginalPosition
476
- ? urlInfo.url
477
- : urlInfo.generatedUrl
478
- const parentContent = isOriginalPosition
479
- ? urlInfo.originalContent
480
- : urlInfo.content
481
- return referenceUtils.update(reference, {
482
- trace: stringifyUrlSite({
483
- url: parentUrl,
484
- content: parentContent,
485
- line: specifierLine,
486
- column: specifierColumn,
487
- }),
488
- isOriginalPosition,
489
- isInline: true,
490
- specifier,
491
- specifierLine,
492
- specifierColumn,
493
- contentType,
494
- content,
495
- })
496
- },
497
- inject: ({ trace, ...rest }) => {
498
- if (trace === undefined) {
499
- const { url, line, column } = getCallerPosition()
500
- trace = stringifyUrlSite({
501
- url,
388
+ found: ({ trace, ...rest }) => {
389
+ if (trace === undefined) {
390
+ trace = stringifyUrlSite(
391
+ adjustUrlSite(urlInfo, {
392
+ urlGraph,
393
+ url: urlInfo.url,
394
+ line: rest.specifierLine,
395
+ column: rest.specifierColumn,
396
+ }),
397
+ )
398
+ }
399
+ // console.log(trace)
400
+ return addReference({
401
+ trace,
402
+ ...rest,
403
+ })
404
+ },
405
+ foundInline: ({ isOriginalPosition, line, column, ...rest }) => {
406
+ const parentUrl = isOriginalPosition
407
+ ? urlInfo.url
408
+ : urlInfo.generatedUrl
409
+ const parentContent = isOriginalPosition
410
+ ? urlInfo.originalContent
411
+ : urlInfo.content
412
+ return addReference({
413
+ trace: stringifyUrlSite({
414
+ url: parentUrl,
415
+ content: parentContent,
416
+ line,
417
+ column,
418
+ }),
419
+ isOriginalPosition,
502
420
  line,
503
421
  column,
422
+ isInline: true,
423
+ ...rest,
504
424
  })
505
- }
506
- return addReference({
507
- trace,
508
- injected: true,
509
- ...rest,
510
- })
511
- },
512
- findByGeneratedSpecifier: (generatedSpecifier) => {
513
- const reference = references.find(
514
- (ref) => ref.generatedSpecifier === generatedSpecifier,
515
- )
516
- if (!reference) {
517
- throw new Error(
518
- `No reference found using the following generatedSpecifier: "${generatedSpecifier}"`,
425
+ },
426
+ update: (currentReference, newReferenceParams) => {
427
+ const index = references.indexOf(currentReference)
428
+ if (index === -1) {
429
+ throw new Error(`reference do not exists`)
430
+ }
431
+ const previousReference = currentReference
432
+ const nextReference = createReference({
433
+ ...previousReference,
434
+ ...newReferenceParams,
435
+ })
436
+ references[index] = nextReference
437
+ mutateReference(previousReference, nextReference)
438
+ const newUrlInfo = resolveReference(nextReference)
439
+ const currentUrlInfo = context.urlGraph.getUrlInfo(
440
+ currentReference.url,
519
441
  )
520
- }
521
- return reference
522
- },
523
- }
524
-
525
- // "transform" hook
526
- urlInfo.references = references
527
- context.referenceUtils = referenceUtils
528
- try {
529
- await pluginController.callAsyncHooks(
530
- "transformUrlContent",
531
- urlInfo,
532
- context,
533
- async (transformReturnValue) => {
534
- await urlInfoTransformer.applyIntermediateTransformations(
535
- urlInfo,
536
- transformReturnValue,
442
+ if (
443
+ currentUrlInfo &&
444
+ currentUrlInfo !== newUrlInfo &&
445
+ currentUrlInfo.dependents.size === 0
446
+ ) {
447
+ context.urlGraph.deleteUrlInfo(currentReference.url)
448
+ }
449
+ return [nextReference, newUrlInfo]
450
+ },
451
+ becomesInline: (
452
+ reference,
453
+ {
454
+ isOriginalPosition,
455
+ specifier,
456
+ specifierLine,
457
+ specifierColumn,
458
+ contentType,
459
+ content,
460
+ },
461
+ ) => {
462
+ const parentUrl = isOriginalPosition
463
+ ? urlInfo.url
464
+ : urlInfo.generatedUrl
465
+ const parentContent = isOriginalPosition
466
+ ? urlInfo.originalContent
467
+ : urlInfo.content
468
+ return referenceUtils.update(reference, {
469
+ trace: stringifyUrlSite({
470
+ url: parentUrl,
471
+ content: parentContent,
472
+ line: specifierLine,
473
+ column: specifierColumn,
474
+ }),
475
+ isOriginalPosition,
476
+ isInline: true,
477
+ specifier,
478
+ specifierLine,
479
+ specifierColumn,
480
+ contentType,
481
+ content,
482
+ })
483
+ },
484
+ inject: ({ trace, ...rest }) => {
485
+ if (trace === undefined) {
486
+ const { url, line, column } = getCallerPosition()
487
+ trace = stringifyUrlSite({
488
+ url,
489
+ line,
490
+ column,
491
+ })
492
+ }
493
+ return addReference({
494
+ trace,
495
+ injected: true,
496
+ ...rest,
497
+ })
498
+ },
499
+ findByGeneratedSpecifier: (generatedSpecifier) => {
500
+ const reference = references.find(
501
+ (ref) => ref.generatedSpecifier === generatedSpecifier,
537
502
  )
503
+ if (!reference) {
504
+ throw new Error(
505
+ `No reference found using the following generatedSpecifier: "${generatedSpecifier}"`,
506
+ )
507
+ }
508
+ return reference
538
509
  },
539
- )
540
- } catch (error) {
541
- throw createTransformUrlContentError({
542
- pluginController,
543
- reference: context.reference,
544
- urlInfo,
545
- error,
546
- })
547
- }
548
- // after "transform" all references from originalContent
549
- // and the one injected by plugin are known
550
- urlGraph.updateReferences(urlInfo, references)
510
+ }
551
511
 
552
- // "finalize" hook
553
- try {
554
- const finalizeReturnValue = await pluginController.callAsyncHooksUntil(
555
- "finalizeUrlContent",
556
- urlInfo,
557
- context,
558
- )
559
- await urlInfoTransformer.applyFinalTransformations(
560
- urlInfo,
561
- finalizeReturnValue,
562
- )
563
- } catch (error) {
564
- throw createFinalizeUrlContentError({
565
- pluginController,
566
- reference: context.reference,
567
- urlInfo,
568
- error,
569
- })
512
+ // "transform" hook
513
+ urlInfo.references = references
514
+ context.referenceUtils = referenceUtils
515
+ try {
516
+ await pluginController.callAsyncHooks(
517
+ "transformUrlContent",
518
+ urlInfo,
519
+ context,
520
+ async (transformReturnValue) => {
521
+ await urlInfoTransformer.applyIntermediateTransformations(
522
+ urlInfo,
523
+ transformReturnValue,
524
+ )
525
+ },
526
+ )
527
+ } catch (error) {
528
+ throw createTransformUrlContentError({
529
+ pluginController,
530
+ reference: context.reference,
531
+ urlInfo,
532
+ error,
533
+ })
534
+ }
535
+ // after "transform" all references from originalContent
536
+ // and the one injected by plugin are known
537
+ urlGraph.updateReferences(urlInfo, references)
538
+
539
+ // "finalize" hook
540
+ try {
541
+ const finalizeReturnValue = await pluginController.callAsyncHooksUntil(
542
+ "finalizeUrlContent",
543
+ urlInfo,
544
+ context,
545
+ )
546
+ await urlInfoTransformer.applyFinalTransformations(
547
+ urlInfo,
548
+ finalizeReturnValue,
549
+ )
550
+ } catch (error) {
551
+ throw createFinalizeUrlContentError({
552
+ pluginController,
553
+ reference: context.reference,
554
+ urlInfo,
555
+ error,
556
+ })
557
+ }
570
558
  }
571
559
 
572
560
  // "cooked" hook
@@ -602,13 +590,17 @@ export const createKitchen = ({
602
590
  } finally {
603
591
  const { generatedUrl } = urlInfo
604
592
  if (generatedUrl && generatedUrl.startsWith("file:")) {
605
- writeFileSync(new URL(generatedUrl), urlInfo.content)
606
- const { sourcemapGeneratedUrl, sourcemap } = urlInfo
607
- if (sourcemapGeneratedUrl && sourcemap) {
608
- writeFileSync(
609
- new URL(sourcemapGeneratedUrl),
610
- JSON.stringify(sourcemap, null, " "),
611
- )
593
+ if (urlInfo.type === "directory") {
594
+ // no need to write the directory
595
+ } else {
596
+ writeFileSync(new URL(generatedUrl), urlInfo.content)
597
+ const { sourcemapGeneratedUrl, sourcemap } = urlInfo
598
+ if (sourcemapGeneratedUrl && sourcemap) {
599
+ writeFileSync(
600
+ new URL(sourcemapGeneratedUrl),
601
+ JSON.stringify(sourcemap, null, " "),
602
+ )
603
+ }
612
604
  }
613
605
  }
614
606
  }
@@ -628,6 +620,44 @@ export const createKitchen = ({
628
620
  return [ref, urlInfo]
629
621
  }
630
622
 
623
+ const fetchOriginalUrlInfo = async ({
624
+ urlInfo,
625
+ context,
626
+ searchParam,
627
+ expectedType,
628
+ }) => {
629
+ const urlObject = new URL(urlInfo.url)
630
+ const { searchParams } = urlObject
631
+ if (!searchParams.has(searchParam)) {
632
+ return null
633
+ }
634
+ searchParams.delete(searchParam)
635
+ const originalUrl = urlObject.href
636
+ const originalReference = {
637
+ ...(context.reference.original || context.reference),
638
+ expectedType,
639
+ }
640
+ originalReference.url = originalUrl
641
+ const originalUrlInfo = context.urlGraph.reuseOrCreateUrlInfo(
642
+ originalReference.url,
643
+ )
644
+ if (originalUrlInfo.originalUrl === undefined) {
645
+ applyReferenceEffectsOnUrlInfo(
646
+ originalReference,
647
+ originalUrlInfo,
648
+ context,
649
+ )
650
+ }
651
+ await context.fetchUrlContent(originalUrlInfo, {
652
+ reference: originalReference,
653
+ })
654
+ if (originalUrlInfo.dependents.size === 0) {
655
+ context.urlGraph.deleteUrlInfo(originalUrlInfo.url)
656
+ }
657
+ return originalUrlInfo
658
+ }
659
+ kitchenContext.fetchOriginalUrlInfo = fetchOriginalUrlInfo
660
+
631
661
  return {
632
662
  pluginController,
633
663
  urlInfoTransformer,
@@ -671,6 +701,11 @@ const memoizeCook = (cook) => {
671
701
  }
672
702
 
673
703
  const applyReferenceEffectsOnUrlInfo = (reference, urlInfo, context) => {
704
+ if (reference.shouldHandle) {
705
+ urlInfo.shouldHandle = true
706
+ }
707
+ urlInfo.originalUrl = urlInfo.originalUrl || reference.url
708
+
674
709
  Object.assign(urlInfo.data, reference.data)
675
710
  Object.assign(urlInfo.timing, reference.timing)
676
711
  if (reference.injected) {
@@ -143,7 +143,7 @@ export const createFileService = ({
143
143
  body: urlInfo.content,
144
144
  }
145
145
  }
146
- if (code === "EISDIR") {
146
+ if (code === "DIRECTORY_REFERENCE_NOT_ALLOWED") {
147
147
  return serveDirectory(reference.url, {
148
148
  headers: {
149
149
  accept: "text/html",
@@ -37,8 +37,8 @@ const createUrlGraphReport = (urlGraph) => {
37
37
  const urlInfo = urlInfos[url]
38
38
  // ignore:
39
39
  // - inline files: they are already taken into account in the file where they appear
40
- // - external files: we don't know their content
41
- if (urlInfo.isInline || urlInfo.external) {
40
+ // - ignored files: we don't know their content
41
+ if (urlInfo.isInline || !urlInfo.shouldHandle) {
42
42
  return
43
43
  }
44
44
  // file loaded via import assertion are already inside the graph
@@ -34,14 +34,14 @@ export const createUrlInfoTransformer = ({
34
34
  ))
35
35
  if (sourcemap.sources && sourcemap.sources.length > 1) {
36
36
  sourcemap.sources = sourcemap.sources.map(
37
- (source) => new URL(source, urlInfo.data.rawUrl || urlInfo.url).href,
37
+ (source) => new URL(source, urlInfo.originalUrl).href,
38
38
  )
39
39
  if (!wantSourcesContent) {
40
40
  sourcemap.sourcesContent = undefined
41
41
  }
42
42
  return sourcemap
43
43
  }
44
- sourcemap.sources = [urlInfo.data.rawUrl || urlInfo.url]
44
+ sourcemap.sources = [urlInfo.originalUrl]
45
45
  sourcemap.sourcesContent = [urlInfo.originalContent]
46
46
  if (!wantSourcesContent) {
47
47
  sourcemap.sourcesContent = undefined
@@ -74,6 +74,7 @@ export const createUrlInfoTransformer = ({
74
74
 
75
75
  // already loaded during "load" hook (happens during build)
76
76
  if (urlInfo.sourcemap) {
77
+ urlInfo.sourcemap = normalizeSourcemap(urlInfo, urlInfo.sourcemap)
77
78
  return
78
79
  }
79
80
  // check for existing sourcemap for this content
@@ -92,8 +93,9 @@ export const createUrlInfoTransformer = ({
92
93
  })
93
94
  try {
94
95
  await context.cook(sourcemapUrlInfo, { reference: sourcemapReference })
95
- const sourcemap = JSON.parse(sourcemapUrlInfo.content)
96
- urlInfo.sourcemap = normalizeSourcemap(urlInfo, sourcemap)
96
+ const sourcemapRaw = JSON.parse(sourcemapUrlInfo.content)
97
+ const sourcemap = normalizeSourcemap(urlInfo, sourcemapRaw)
98
+ urlInfo.sourcemap = sourcemap
97
99
  } catch (e) {
98
100
  logger.error(`Error while handling existing sourcemap: ${e.message}`)
99
101
  return
@@ -146,7 +148,7 @@ export const createUrlInfoTransformer = ({
146
148
  if (sourcemapsRelativeSources) {
147
149
  sourcemap.sources = sourcemap.sources.map((source) => {
148
150
  const sourceRelative = urlToRelativeUrl(source, urlInfo.url)
149
- return sourceRelative
151
+ return sourceRelative || "."
150
152
  })
151
153
  }
152
154
  sourcemapUrlInfo.content = JSON.stringify(sourcemap, null, " ")
@@ -163,6 +165,9 @@ export const createUrlInfoTransformer = ({
163
165
  : sourcemapReference.generatedSpecifier,
164
166
  })
165
167
  }
168
+ } else if (urlInfo.sourcemapReference) {
169
+ // in the end we don't use the sourcemap placeholder
170
+ urlGraph.deleteUrlInfo(urlInfo.sourcemapReference.url)
166
171
  }
167
172
  urlInfo.contentEtag = bufferToEtag(Buffer.from(urlInfo.content))
168
173
  }
@@ -184,11 +184,12 @@ const createUrlInfo = (url) => {
184
184
  subtype: undefined, // "worker", "service_worker", "shared_worker" for js, otherwise undefined
185
185
  contentType: "", // "text/html", "text/css", "text/javascript", "application/json", ...
186
186
  url,
187
- filename: "",
187
+ originalUrl: undefined,
188
188
  generatedUrl: null,
189
+ filename: "",
189
190
  isInline: false,
190
191
  inlineUrlSite: null,
191
- external: false,
192
+ shouldHandle: undefined,
192
193
  originalContent: undefined,
193
194
  content: undefined,
194
195
  contentEtag: null,