@jsenv/core 28.1.3 → 28.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/dist/js/script_type_module_supervisor.js +8 -13
  2. package/dist/js/supervisor.js +690 -504
  3. package/dist/main.js +13277 -13170
  4. package/package.json +3 -3
  5. package/readme.md +3 -3
  6. package/src/build/build.js +960 -712
  7. package/src/build/inject_global_version_mappings.js +5 -20
  8. package/src/build/start_build_server.js +2 -2
  9. package/src/dev/start_dev_server.js +3 -2
  10. package/src/omega/compat/runtime_compat.js +9 -6
  11. package/src/omega/errors.js +3 -0
  12. package/src/omega/fetched_content_compliance.js +2 -2
  13. package/src/omega/kitchen.js +189 -145
  14. package/src/omega/server/file_service.js +104 -71
  15. package/src/omega/url_graph/url_graph_loader.js +77 -0
  16. package/src/omega/url_graph/url_info_transformations.js +12 -15
  17. package/src/omega/url_graph.js +115 -101
  18. package/src/plugins/autoreload/jsenv_plugin_autoreload_client.js +1 -0
  19. package/src/plugins/autoreload/jsenv_plugin_autoreload_server.js +34 -36
  20. package/src/plugins/autoreload/jsenv_plugin_hmr.js +3 -2
  21. package/src/plugins/bundling/js_module/{bundle_js_module.js → bundle_js_modules.js} +51 -14
  22. package/src/plugins/bundling/jsenv_plugin_bundling.js +2 -2
  23. package/src/plugins/import_meta_hot/jsenv_plugin_import_meta_hot.js +11 -0
  24. package/src/plugins/inline/jsenv_plugin_html_inline_content.js +73 -62
  25. package/src/plugins/node_esm_resolution/jsenv_plugin_node_esm_resolution.js +77 -89
  26. package/src/plugins/plugin_controller.js +26 -22
  27. package/src/plugins/server_events/jsenv_plugin_server_events_client_injection.js +1 -0
  28. package/src/plugins/supervisor/client/script_type_module_supervisor.js +7 -9
  29. package/src/plugins/supervisor/client/supervisor.js +99 -52
  30. package/src/plugins/supervisor/jsenv_plugin_supervisor.js +2 -4
  31. package/src/plugins/transpilation/as_js_classic/async-to-promises.js +16 -0
  32. package/src/plugins/transpilation/as_js_classic/convert_js_module_to_js_classic.js +85 -0
  33. package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic.js +48 -190
  34. package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic_conversion.js +102 -0
  35. package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic_html.js +161 -240
  36. package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic_library.js +84 -0
  37. package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic_workers.js +19 -12
  38. package/src/plugins/transpilation/babel/jsenv_plugin_babel.js +1 -24
  39. package/src/plugins/transpilation/import_assertions/jsenv_plugin_import_assertions.js +82 -52
  40. package/src/plugins/transpilation/jsenv_plugin_transpilation.js +12 -13
  41. package/src/plugins/url_analysis/html/html_urls.js +91 -34
  42. package/src/plugins/url_analysis/js/js_urls.js +5 -4
  43. package/src/plugins/url_resolution/jsenv_plugin_url_resolution.js +1 -0
  44. package/src/test/execute_plan.js +3 -8
  45. package/src/build/inject_service_worker_urls.js +0 -78
  46. package/src/build/resync_resource_hints.js +0 -112
  47. package/src/omega/url_graph/url_graph_load.js +0 -74
@@ -7,7 +7,7 @@ import {
7
7
  setUrlFilename,
8
8
  } from "@jsenv/urls"
9
9
  import { writeFileSync, ensureWindowsDriveLetter } from "@jsenv/filesystem"
10
- import { createLogger, createDetailedMessage } from "@jsenv/log"
10
+ import { createLogger, createDetailedMessage, ANSI } from "@jsenv/log"
11
11
  import { CONTENT_TYPE } from "@jsenv/utils/src/content_type/content_type.js"
12
12
 
13
13
  import { createPluginController } from "../plugins/plugin_controller.js"
@@ -40,13 +40,13 @@ export const createKitchen = ({
40
40
  sourcemapsSourcesContent,
41
41
  sourcemapsRelativeSources,
42
42
  writeGeneratedFiles,
43
+ outDirectoryUrl,
43
44
  }) => {
44
45
  const logger = createLogger({ logLevel })
45
46
  const pluginController = createPluginController({
46
47
  plugins,
47
48
  scenarios,
48
49
  })
49
- const jsenvDirectoryUrl = new URL(".jsenv/", rootDirectoryUrl).href
50
50
  const kitchenContext = {
51
51
  signal,
52
52
  logger,
@@ -62,6 +62,7 @@ export const createKitchen = ({
62
62
  return RUNTIME_COMPAT.isSupported(runtimeCompat, feature)
63
63
  },
64
64
  sourcemaps,
65
+ outDirectoryUrl,
65
66
  }
66
67
  pluginController.callHooks("init", kitchenContext)
67
68
  const createReference = ({
@@ -86,20 +87,22 @@ export const createKitchen = ({
86
87
  isOriginalPosition,
87
88
  shouldHandle,
88
89
  isEntryPoint = false,
89
- isInline = false,
90
- injected = false,
91
90
  isResourceHint = false,
92
- dependsOnPackageJson,
91
+ isImplicit = false,
92
+ hasVersioningEffect = false,
93
+ injected = false,
94
+ isInline = false,
93
95
  content,
94
96
  contentType,
95
97
  assert,
96
98
  assertNode,
97
99
  typePropertyNode,
100
+ debug = false,
98
101
  }) => {
99
102
  if (typeof specifier !== "string") {
100
103
  throw new TypeError(`"specifier" must be a string, got ${specifier}`)
101
104
  }
102
- return {
105
+ const reference = {
103
106
  original: null,
104
107
  prev: null,
105
108
  next: null,
@@ -107,6 +110,10 @@ export const createKitchen = ({
107
110
  node,
108
111
  trace,
109
112
  parentUrl,
113
+ url: null,
114
+ searchParams: null,
115
+ generatedUrl: null,
116
+ generatedSpecifier: null,
110
117
  type,
111
118
  subtype,
112
119
  expectedContentType,
@@ -120,60 +127,94 @@ export const createKitchen = ({
120
127
  specifierEnd,
121
128
  specifierLine,
122
129
  specifierColumn,
123
- baseUrl,
124
130
  isOriginalPosition,
131
+ baseUrl,
125
132
  shouldHandle,
126
133
  isEntryPoint,
127
- isInline,
128
- injected,
129
134
  isResourceHint,
130
- dependsOnPackageJson,
135
+ isImplicit,
136
+ hasVersioningEffect,
137
+ injected,
138
+ timing: {},
131
139
  // for inline resources the reference contains the content
140
+ isInline,
132
141
  content,
133
142
  contentType,
134
- timing: {},
143
+ escape: null,
144
+ // import assertions (maybe move to data?)
135
145
  assert,
136
146
  assertNode,
137
147
  typePropertyNode,
148
+ mutation: null,
149
+ debug,
138
150
  }
151
+ // Object.preventExtensions(reference) // useful to ensure all properties are declared here
152
+ return reference
139
153
  }
140
- const mutateReference = (reference, newReference) => {
154
+ const updateReference = (reference, newReference) => {
141
155
  reference.next = newReference
142
- newReference.prev = reference
143
156
  newReference.original = reference.original || reference
144
- // newReference.isEntryPoint = reference.isEntryPoint
157
+
158
+ newReference.prev = reference
145
159
  }
146
160
  const resolveReference = (reference, context = kitchenContext) => {
161
+ const referenceContext = {
162
+ ...context,
163
+ resolveReference: (reference, context = referenceContext) =>
164
+ resolveReference(reference, context),
165
+ }
147
166
  try {
148
167
  let resolvedUrl = pluginController.callHooksUntil(
149
168
  "resolveUrl",
150
169
  reference,
151
- context,
170
+ referenceContext,
152
171
  )
153
172
  if (!resolvedUrl) {
154
173
  throw new Error(`NO_RESOLVE`)
155
174
  }
175
+ if (resolvedUrl.includes("?debug")) {
176
+ reference.debug = true
177
+ }
156
178
  resolvedUrl = normalizeUrl(resolvedUrl)
179
+ let referencedUrlObject = new URL(resolvedUrl)
180
+ let searchParams = referencedUrlObject.searchParams
157
181
  reference.url = resolvedUrl
182
+ reference.searchParams = searchParams
183
+ if (reference.debug) {
184
+ logger.debug(`url resolved by "${
185
+ pluginController.getLastPluginUsed().name
186
+ }"
187
+ ${ANSI.color(reference.specifier, ANSI.GREY)} ->
188
+ ${ANSI.color(reference.url, ANSI.YELLOW)}
189
+ `)
190
+ }
158
191
  pluginController.callHooks(
159
192
  "redirectUrl",
160
193
  reference,
161
- context,
162
- (returnValue) => {
194
+ referenceContext,
195
+ (returnValue, plugin) => {
163
196
  const normalizedReturnValue = normalizeUrl(returnValue)
164
197
  if (normalizedReturnValue === reference.url) {
165
198
  return
166
199
  }
167
- const previousReference = { ...reference }
200
+ if (reference.debug) {
201
+ logger.debug(
202
+ `url redirected by "${plugin.name}"
203
+ ${ANSI.color(reference.url, ANSI.GREY)} ->
204
+ ${ANSI.color(normalizedReturnValue, ANSI.YELLOW)}
205
+ `,
206
+ )
207
+ }
208
+ const prevReference = { ...reference }
209
+ updateReference(prevReference, reference)
210
+ referencedUrlObject = new URL(normalizedReturnValue)
211
+ searchParams = referencedUrlObject.searchParams
168
212
  reference.url = normalizedReturnValue
169
- mutateReference(previousReference, reference)
213
+ reference.searchParams = searchParams
170
214
  },
171
215
  )
172
-
173
- const referenceUrlObject = new URL(reference.url)
174
- reference.searchParams = referenceUrlObject.searchParams
175
216
  reference.generatedUrl = reference.url
176
- if (reference.searchParams.has("entry_point")) {
217
+ if (searchParams.has("entry_point")) {
177
218
  reference.isEntryPoint = true
178
219
  }
179
220
 
@@ -189,22 +230,22 @@ export const createKitchen = ({
189
230
  pluginController.callHooks(
190
231
  "transformUrlSearchParams",
191
232
  reference,
192
- context,
233
+ referenceContext,
193
234
  (returnValue) => {
194
235
  Object.keys(returnValue).forEach((key) => {
195
- referenceUrlObject.searchParams.set(key, returnValue[key])
236
+ searchParams.set(key, returnValue[key])
196
237
  })
197
- reference.generatedUrl = normalizeUrl(referenceUrlObject.href)
238
+ reference.generatedUrl = normalizeUrl(referencedUrlObject.href)
198
239
  },
199
240
  )
200
241
  const returnValue = pluginController.callHooksUntil(
201
242
  "formatUrl",
202
243
  reference,
203
- context,
244
+ referenceContext,
204
245
  )
205
246
  reference.generatedSpecifier = returnValue || reference.generatedUrl
206
247
  reference.generatedSpecifier = urlSpecifierEncoding.encode(reference)
207
- return urlInfo
248
+ return [reference, urlInfo]
208
249
  } catch (error) {
209
250
  throw createResolveUrlError({
210
251
  pluginController,
@@ -224,17 +265,18 @@ export const createKitchen = ({
224
265
  sourcemapsRelativeSources,
225
266
  clientRuntimeCompat,
226
267
  injectSourcemapPlaceholder: ({ urlInfo, specifier }) => {
227
- const sourcemapReference = createReference({
228
- trace: {
229
- message: `sourcemap comment placeholder`,
230
- url: urlInfo.url,
231
- },
232
- type: "sourcemap_comment",
233
- subtype: urlInfo.contentType === "text/javascript" ? "js" : "css",
234
- parentUrl: urlInfo.url,
235
- specifier,
236
- })
237
- const sourcemapUrlInfo = resolveReference(sourcemapReference)
268
+ const [sourcemapReference, sourcemapUrlInfo] = resolveReference(
269
+ createReference({
270
+ trace: {
271
+ message: `sourcemap comment placeholder`,
272
+ url: urlInfo.url,
273
+ },
274
+ type: "sourcemap_comment",
275
+ subtype: urlInfo.contentType === "text/javascript" ? "js" : "css",
276
+ parentUrl: urlInfo.url,
277
+ specifier,
278
+ }),
279
+ )
238
280
  sourcemapUrlInfo.type = "sourcemap"
239
281
  return [sourcemapReference, sourcemapUrlInfo]
240
282
  },
@@ -251,27 +293,31 @@ export const createKitchen = ({
251
293
  line: specifierLine,
252
294
  column: specifierColumn,
253
295
  })
254
- const sourcemapReference = createReference({
255
- trace: traceFromUrlSite(sourcemapUrlSite),
256
- type,
257
- parentUrl: urlInfo.url,
258
- specifier,
259
- specifierLine,
260
- specifierColumn,
261
- })
262
- const sourcemapUrlInfo = resolveReference(sourcemapReference)
296
+ const [sourcemapReference, sourcemapUrlInfo] = resolveReference(
297
+ createReference({
298
+ trace: traceFromUrlSite(sourcemapUrlSite),
299
+ type,
300
+ parentUrl: urlInfo.url,
301
+ specifier,
302
+ specifierLine,
303
+ specifierColumn,
304
+ }),
305
+ )
263
306
  sourcemapUrlInfo.type = "sourcemap"
264
307
  return [sourcemapReference, sourcemapUrlInfo]
265
308
  },
266
309
  })
267
310
 
268
- const fetchUrlContent = async (urlInfo, { reference, context }) => {
311
+ const fetchUrlContent = async (
312
+ urlInfo,
313
+ { reference, contextDuringFetch },
314
+ ) => {
269
315
  try {
270
316
  const fetchUrlContentReturnValue =
271
317
  await pluginController.callAsyncHooksUntil(
272
318
  "fetchUrlContent",
273
319
  urlInfo,
274
- context,
320
+ contextDuringFetch,
275
321
  )
276
322
  if (!fetchUrlContentReturnValue) {
277
323
  logger.warn(
@@ -353,10 +399,11 @@ export const createKitchen = ({
353
399
  }
354
400
  urlInfo.generatedUrl = determineFileUrlForOutDirectory({
355
401
  urlInfo,
356
- context,
402
+ context: contextDuringFetch,
357
403
  })
358
- await urlInfoTransformer.initTransformations(urlInfo, context)
404
+ await urlInfoTransformer.initTransformations(urlInfo, contextDuringFetch)
359
405
  }
406
+ kitchenContext.fetchUrlContent = fetchUrlContent
360
407
 
361
408
  const _cook = async (urlInfo, dishContext) => {
362
409
  const context = {
@@ -371,40 +418,30 @@ export const createKitchen = ({
371
418
  })
372
419
  }
373
420
  context.fetchUrlContent = (urlInfo, { reference }) => {
374
- return fetchUrlContent(urlInfo, { reference, context })
421
+ return fetchUrlContent(urlInfo, {
422
+ reference,
423
+ contextDuringFetch: context,
424
+ })
375
425
  }
376
426
 
377
427
  if (urlInfo.shouldHandle) {
378
- // "fetchUrlContent" hook
379
- await fetchUrlContent(urlInfo, { reference: context.reference, context })
380
-
381
- // parsing
428
+ // references
382
429
  const references = []
383
- const addReference = (props) => {
384
- const reference = createReference({
385
- parentUrl: urlInfo.url,
386
- ...props,
387
- })
388
- references.push(reference)
389
- const referencedUrlInfo = resolveReference(reference, context)
390
- return [reference, referencedUrlInfo]
391
- }
392
- const referenceUtils = {
393
- readGeneratedSpecifier: async (reference) => {
394
- // "formatReferencedUrl" can be async BUT this is an exception
395
- // for most cases it will be sync. We want to favor the sync signature to keep things simpler
396
- // The only case where it needs to be async is when
397
- // the specifier is a `data:*` url
398
- // in this case we'll wait for the promise returned by
399
- // "formatReferencedUrl"
400
- if (reference.generatedSpecifier.then) {
401
- return reference.generatedSpecifier.then((value) => {
402
- reference.generatedSpecifier = value
403
- return value
404
- })
405
- }
406
- return reference.generatedSpecifier
430
+ context.referenceUtils = {
431
+ _references: references,
432
+ add: (props) => {
433
+ const [reference, referencedUrlInfo] = resolveReference(
434
+ createReference({
435
+ parentUrl: urlInfo.url,
436
+ ...props,
437
+ }),
438
+ context,
439
+ )
440
+ references.push(reference)
441
+ return [reference, referencedUrlInfo]
407
442
  },
443
+ find: (predicate) => references.find(predicate),
444
+ readGeneratedSpecifier,
408
445
  found: ({ trace, ...rest }) => {
409
446
  if (trace === undefined) {
410
447
  trace = traceFromUrlSite(
@@ -416,8 +453,8 @@ export const createKitchen = ({
416
453
  }),
417
454
  )
418
455
  }
419
- // console.log(trace)
420
- return addReference({
456
+ // console.log(trace.message)
457
+ return context.referenceUtils.add({
421
458
  trace,
422
459
  ...rest,
423
460
  })
@@ -434,7 +471,7 @@ export const createKitchen = ({
434
471
  const parentContent = isOriginalPosition
435
472
  ? urlInfo.originalContent
436
473
  : urlInfo.content
437
- return addReference({
474
+ return context.referenceUtils.add({
438
475
  trace: traceFromUrlSite({
439
476
  url: parentUrl,
440
477
  content: parentContent,
@@ -453,14 +490,15 @@ export const createKitchen = ({
453
490
  if (index === -1) {
454
491
  throw new Error(`reference do not exists`)
455
492
  }
456
- const previousReference = currentReference
457
- const nextReference = createReference({
458
- ...previousReference,
459
- ...newReferenceParams,
460
- })
461
- references[index] = nextReference
462
- mutateReference(previousReference, nextReference)
463
- const newUrlInfo = resolveReference(nextReference, context)
493
+ const [newReference, newUrlInfo] = resolveReference(
494
+ createReference({
495
+ ...currentReference,
496
+ ...newReferenceParams,
497
+ }),
498
+ context,
499
+ )
500
+ updateReference(currentReference, newReference)
501
+ references[index] = newReference
464
502
  const currentUrlInfo = context.urlGraph.getUrlInfo(
465
503
  currentReference.url,
466
504
  )
@@ -471,7 +509,7 @@ export const createKitchen = ({
471
509
  ) {
472
510
  context.urlGraph.deleteUrlInfo(currentReference.url)
473
511
  }
474
- return [nextReference, newUrlInfo]
512
+ return [newReference, newUrlInfo]
475
513
  },
476
514
  becomesInline: (
477
515
  reference,
@@ -490,7 +528,7 @@ export const createKitchen = ({
490
528
  const parentContent = isOriginalPosition
491
529
  ? urlInfo.originalContent
492
530
  : urlInfo.content
493
- return referenceUtils.update(reference, {
531
+ return context.referenceUtils.update(reference, {
494
532
  trace: traceFromUrlSite({
495
533
  url: parentUrl,
496
534
  content: parentContent,
@@ -515,7 +553,7 @@ export const createKitchen = ({
515
553
  column,
516
554
  })
517
555
  }
518
- return addReference({
556
+ return context.referenceUtils.add({
519
557
  trace,
520
558
  injected: true,
521
559
  ...rest,
@@ -534,9 +572,13 @@ export const createKitchen = ({
534
572
  },
535
573
  }
536
574
 
575
+ // "fetchUrlContent" hook
576
+ await fetchUrlContent(urlInfo, {
577
+ reference: context.reference,
578
+ contextDuringFetch: context,
579
+ })
580
+
537
581
  // "transform" hook
538
- urlInfo.references = references
539
- context.referenceUtils = referenceUtils
540
582
  try {
541
583
  await pluginController.callAsyncHooks(
542
584
  "transformUrlContent",
@@ -605,7 +647,7 @@ export const createKitchen = ({
605
647
  )
606
648
  }
607
649
  const cook = memoizeCook(async (urlInfo, context) => {
608
- if (!writeGeneratedFiles || !context.outDirectoryUrl) {
650
+ if (!writeGeneratedFiles || !outDirectoryUrl) {
609
651
  await _cook(urlInfo, context)
610
652
  return
611
653
  }
@@ -630,23 +672,24 @@ export const createKitchen = ({
630
672
  }
631
673
  }
632
674
  })
633
- kitchenContext.fetchUrlContent = fetchUrlContent
634
675
  kitchenContext.cook = cook
635
676
 
636
677
  const prepareEntryPoint = (params) => {
637
- const entryReference = createReference(params)
638
- entryReference.isEntryPoint = true
639
- const entryUrlInfo = resolveReference(entryReference)
640
- return [entryReference, entryUrlInfo]
678
+ return resolveReference(
679
+ createReference({
680
+ ...params,
681
+ isEntryPoint: true,
682
+ }),
683
+ )
641
684
  }
685
+ kitchenContext.prepareEntryPoint = prepareEntryPoint
642
686
 
643
687
  const injectReference = (params) => {
644
- const ref = createReference(params)
645
- const urlInfo = resolveReference(ref)
646
- return [ref, urlInfo]
688
+ return resolveReference(createReference(params))
647
689
  }
690
+ kitchenContext.injectReference = injectReference
648
691
 
649
- const fetchOriginalUrlInfo = async ({
692
+ const getWithoutSearchParam = ({
650
693
  urlInfo,
651
694
  context,
652
695
  searchParam,
@@ -655,50 +698,65 @@ export const createKitchen = ({
655
698
  const urlObject = new URL(urlInfo.url)
656
699
  const { searchParams } = urlObject
657
700
  if (!searchParams.has(searchParam)) {
658
- return null
701
+ return [null, null]
659
702
  }
660
703
  searchParams.delete(searchParam)
661
- const originalUrl = urlObject.href
662
- const originalReference = {
663
- ...(context.reference.original || context.reference),
704
+ const originalRef = context.reference.original || context.reference
705
+ const referenceWithoutSearchParam = {
706
+ ...originalRef,
707
+ original: originalRef,
708
+ searchParams,
709
+ data: { ...originalRef.data },
664
710
  expectedType,
711
+ specifier: context.reference.specifier
712
+ .replace(`?${searchParam}`, "")
713
+ .replace(`&${searchParam}`, ""),
714
+ url: urlObject.href,
715
+ generatedSpecifier: null,
716
+ generatedUrl: null,
665
717
  }
666
- originalReference.url = originalUrl
667
- const originalUrlInfo = context.urlGraph.reuseOrCreateUrlInfo(
668
- originalReference.url,
718
+ const urlInfoWithoutSearchParam = context.urlGraph.reuseOrCreateUrlInfo(
719
+ referenceWithoutSearchParam.url,
669
720
  )
670
- if (originalUrlInfo.originalUrl === undefined) {
721
+ if (urlInfoWithoutSearchParam.originalUrl === undefined) {
671
722
  applyReferenceEffectsOnUrlInfo(
672
- originalReference,
673
- originalUrlInfo,
723
+ referenceWithoutSearchParam,
724
+ urlInfoWithoutSearchParam,
674
725
  context,
675
726
  )
676
727
  }
677
- await context.fetchUrlContent(originalUrlInfo, {
678
- reference: originalReference,
679
- })
680
- if (
681
- originalUrlInfo.dependents.size === 0
682
- // && context.scenarios.build
683
- ) {
684
- context.urlGraph.deleteUrlInfo(originalUrlInfo.url)
685
- }
686
- return originalUrlInfo
728
+ return [referenceWithoutSearchParam, urlInfoWithoutSearchParam]
687
729
  }
688
- kitchenContext.fetchOriginalUrlInfo = fetchOriginalUrlInfo
730
+ kitchenContext.getWithoutSearchParam = getWithoutSearchParam
689
731
 
690
732
  return {
691
733
  pluginController,
692
734
  urlInfoTransformer,
693
735
  rootDirectoryUrl,
694
- jsenvDirectoryUrl,
695
736
  kitchenContext,
696
737
  cook,
697
- prepareEntryPoint,
738
+ createReference,
698
739
  injectReference,
699
740
  }
700
741
  }
701
742
 
743
+ // "formatReferencedUrl" can be async BUT this is an exception
744
+ // for most cases it will be sync. We want to favor the sync signature to keep things simpler
745
+ // The only case where it needs to be async is when
746
+ // the specifier is a `data:*` url
747
+ // in this case we'll wait for the promise returned by
748
+ // "formatReferencedUrl"
749
+
750
+ const readGeneratedSpecifier = (reference) => {
751
+ if (reference.generatedSpecifier.then) {
752
+ return reference.generatedSpecifier.then((value) => {
753
+ reference.generatedSpecifier = value
754
+ return value
755
+ })
756
+ }
757
+ return reference.generatedSpecifier
758
+ }
759
+
702
760
  const memoizeCook = (cook) => {
703
761
  const pendingDishes = new Map()
704
762
  return async (urlInfo, context) => {
@@ -753,7 +811,7 @@ const applyReferenceEffectsOnUrlInfo = (reference, urlInfo, context) => {
753
811
  Object.assign(urlInfo.data, reference.data)
754
812
  Object.assign(urlInfo.timing, reference.timing)
755
813
  if (reference.injected) {
756
- urlInfo.data.injected = true
814
+ urlInfo.injected = true
757
815
  }
758
816
  if (reference.filename) {
759
817
  urlInfo.filename = reference.filename
@@ -777,20 +835,6 @@ const applyReferenceEffectsOnUrlInfo = (reference, urlInfo, context) => {
777
835
  : reference.content
778
836
  urlInfo.content = reference.content
779
837
  }
780
-
781
- const { dependsOnPackageJson } = reference
782
- urlInfo.dependsOnPackageJson = dependsOnPackageJson
783
- const relatedUrlInfos = context.urlGraph.getRelatedUrlInfos(
784
- reference.parentUrl,
785
- )
786
- relatedUrlInfos.forEach((relatedUrlInfo) => {
787
- if (relatedUrlInfo.dependsOnPackageJson) {
788
- // the url may depend due to an other reference
789
- // in that case keep dependsOnPackageJson to true
790
- return
791
- }
792
- relatedUrlInfo.dependsOnPackageJson = dependsOnPackageJson
793
- })
794
838
  }
795
839
 
796
840
  const adjustUrlSite = (urlInfo, { urlGraph, url, line, column }) => {