@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.
- package/dist/js/script_type_module_supervisor.js +8 -13
- package/dist/js/supervisor.js +690 -504
- package/dist/main.js +13277 -13170
- package/package.json +3 -3
- package/readme.md +3 -3
- package/src/build/build.js +960 -712
- package/src/build/inject_global_version_mappings.js +5 -20
- package/src/build/start_build_server.js +2 -2
- package/src/dev/start_dev_server.js +3 -2
- package/src/omega/compat/runtime_compat.js +9 -6
- package/src/omega/errors.js +3 -0
- package/src/omega/fetched_content_compliance.js +2 -2
- package/src/omega/kitchen.js +189 -145
- package/src/omega/server/file_service.js +104 -71
- package/src/omega/url_graph/url_graph_loader.js +77 -0
- package/src/omega/url_graph/url_info_transformations.js +12 -15
- package/src/omega/url_graph.js +115 -101
- package/src/plugins/autoreload/jsenv_plugin_autoreload_client.js +1 -0
- package/src/plugins/autoreload/jsenv_plugin_autoreload_server.js +34 -36
- package/src/plugins/autoreload/jsenv_plugin_hmr.js +3 -2
- package/src/plugins/bundling/js_module/{bundle_js_module.js → bundle_js_modules.js} +51 -14
- package/src/plugins/bundling/jsenv_plugin_bundling.js +2 -2
- package/src/plugins/import_meta_hot/jsenv_plugin_import_meta_hot.js +11 -0
- package/src/plugins/inline/jsenv_plugin_html_inline_content.js +73 -62
- package/src/plugins/node_esm_resolution/jsenv_plugin_node_esm_resolution.js +77 -89
- package/src/plugins/plugin_controller.js +26 -22
- package/src/plugins/server_events/jsenv_plugin_server_events_client_injection.js +1 -0
- package/src/plugins/supervisor/client/script_type_module_supervisor.js +7 -9
- package/src/plugins/supervisor/client/supervisor.js +99 -52
- package/src/plugins/supervisor/jsenv_plugin_supervisor.js +2 -4
- package/src/plugins/transpilation/as_js_classic/async-to-promises.js +16 -0
- package/src/plugins/transpilation/as_js_classic/convert_js_module_to_js_classic.js +85 -0
- package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic.js +48 -190
- package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic_conversion.js +102 -0
- package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic_html.js +161 -240
- package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic_library.js +84 -0
- package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic_workers.js +19 -12
- package/src/plugins/transpilation/babel/jsenv_plugin_babel.js +1 -24
- package/src/plugins/transpilation/import_assertions/jsenv_plugin_import_assertions.js +82 -52
- package/src/plugins/transpilation/jsenv_plugin_transpilation.js +12 -13
- package/src/plugins/url_analysis/html/html_urls.js +91 -34
- package/src/plugins/url_analysis/js/js_urls.js +5 -4
- package/src/plugins/url_resolution/jsenv_plugin_url_resolution.js +1 -0
- package/src/test/execute_plan.js +3 -8
- package/src/build/inject_service_worker_urls.js +0 -78
- package/src/build/resync_resource_hints.js +0 -112
- package/src/omega/url_graph/url_graph_load.js +0 -74
package/src/omega/kitchen.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
154
|
+
const updateReference = (reference, newReference) => {
|
|
141
155
|
reference.next = newReference
|
|
142
|
-
newReference.prev = reference
|
|
143
156
|
newReference.original = reference.original || reference
|
|
144
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 (
|
|
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
|
-
|
|
233
|
+
referenceContext,
|
|
193
234
|
(returnValue) => {
|
|
194
235
|
Object.keys(returnValue).forEach((key) => {
|
|
195
|
-
|
|
236
|
+
searchParams.set(key, returnValue[key])
|
|
196
237
|
})
|
|
197
|
-
reference.generatedUrl = normalizeUrl(
|
|
238
|
+
reference.generatedUrl = normalizeUrl(referencedUrlObject.href)
|
|
198
239
|
},
|
|
199
240
|
)
|
|
200
241
|
const returnValue = pluginController.callHooksUntil(
|
|
201
242
|
"formatUrl",
|
|
202
243
|
reference,
|
|
203
|
-
|
|
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 =
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
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 =
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
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 (
|
|
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
|
-
|
|
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,
|
|
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, {
|
|
421
|
+
return fetchUrlContent(urlInfo, {
|
|
422
|
+
reference,
|
|
423
|
+
contextDuringFetch: context,
|
|
424
|
+
})
|
|
375
425
|
}
|
|
376
426
|
|
|
377
427
|
if (urlInfo.shouldHandle) {
|
|
378
|
-
//
|
|
379
|
-
await fetchUrlContent(urlInfo, { reference: context.reference, context })
|
|
380
|
-
|
|
381
|
-
// parsing
|
|
428
|
+
// references
|
|
382
429
|
const references = []
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
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
|
|
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
|
|
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
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
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 [
|
|
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
|
|
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 || !
|
|
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
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
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
|
-
|
|
645
|
-
const urlInfo = resolveReference(ref)
|
|
646
|
-
return [ref, urlInfo]
|
|
688
|
+
return resolveReference(createReference(params))
|
|
647
689
|
}
|
|
690
|
+
kitchenContext.injectReference = injectReference
|
|
648
691
|
|
|
649
|
-
const
|
|
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
|
|
662
|
-
const
|
|
663
|
-
...
|
|
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
|
-
|
|
667
|
-
|
|
668
|
-
originalReference.url,
|
|
718
|
+
const urlInfoWithoutSearchParam = context.urlGraph.reuseOrCreateUrlInfo(
|
|
719
|
+
referenceWithoutSearchParam.url,
|
|
669
720
|
)
|
|
670
|
-
if (
|
|
721
|
+
if (urlInfoWithoutSearchParam.originalUrl === undefined) {
|
|
671
722
|
applyReferenceEffectsOnUrlInfo(
|
|
672
|
-
|
|
673
|
-
|
|
723
|
+
referenceWithoutSearchParam,
|
|
724
|
+
urlInfoWithoutSearchParam,
|
|
674
725
|
context,
|
|
675
726
|
)
|
|
676
727
|
}
|
|
677
|
-
|
|
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.
|
|
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
|
-
|
|
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.
|
|
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 }) => {
|