@jsenv/core 27.0.0-alpha.75 → 27.0.0-alpha.78
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/main.js +67 -62
- package/package.json +6 -7
- package/src/build/build.js +3 -5
- package/src/build/start_build_server.js +2 -3
- package/src/dev/start_dev_server.js +2 -3
- package/src/execute/execute.js +1 -2
- package/src/execute/runtimes/browsers/from_playwright.js +2 -2
- package/src/execute/runtimes/node/child_exec_options.js +1 -1
- package/src/execute/runtimes/node/node_process.js +2 -2
- package/src/omega/errors.js +1 -1
- package/src/omega/kitchen.js +21 -13
- package/src/omega/server/file_service.js +7 -8
- package/src/omega/url_graph.js +1 -1
- package/src/plugins/bundling/js_module/bundle_js_module.js +2 -2
- package/src/plugins/file_urls/jsenv_plugin_file_urls.js +3 -7
- package/src/plugins/inline/jsenv_plugin_data_urls.js +2 -2
- package/src/plugins/inline/jsenv_plugin_inline.js +1 -1
- package/src/plugins/node_esm_resolution/jsenv_plugin_node_esm_resolution.js +2 -0
- package/src/plugins/plugin_controller.js +2 -2
- package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic.js +3 -3
- package/src/plugins/transpilation/import_assertions/jsenv_plugin_import_assertions.js +12 -12
- package/src/test/execute_plan.js +7 -2
- package/src/test/execute_test_plan.js +1 -1
- package/src/test/execution_steps.js +1 -1
package/dist/main.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { parentPort } from "node:worker_threads";
|
|
2
2
|
import { registerFileLifecycle, readFileSync as readFileSync$1, bufferToEtag, writeFileSync, ensureWindowsDriveLetter, collectFiles, assertAndNormalizeDirectoryUrl, registerDirectoryLifecycle, writeFile, ensureEmptyDirectory, writeDirectory } from "@jsenv/filesystem";
|
|
3
|
-
import { createDetailedMessage, createLogger, loggerToLevels } from "@jsenv/
|
|
4
|
-
import { createTaskLog, ANSI, msAsDuration, msAsEllapsedTime, byteAsMemoryUsage, UNICODE, createLog, startSpinner, distributePercentages, byteAsFileSize } from "@jsenv/log";
|
|
3
|
+
import { createDetailedMessage, createLogger, createTaskLog, loggerToLevels, ANSI, msAsDuration, msAsEllapsedTime, byteAsMemoryUsage, UNICODE, createLog, startSpinner, distributePercentages, byteAsFileSize } from "@jsenv/log";
|
|
5
4
|
import { urlToRelativeUrl, generateInlineContentUrl, ensurePathnameTrailingSlash, urlIsInsideOf, urlToFilename, urlToExtension, DATA_URL, injectQueryParams, injectQueryParamsIntoSpecifier, fileSystemPathToUrl, urlToFileSystemPath, isFileSystemPath, normalizeUrl, stringifyUrlSite, setUrlFilename, moveUrl, getCallerPosition, resolveUrl, resolveDirectoryUrl, asUrlWithoutSearch, asUrlUntilPathname, urlToBasename } from "@jsenv/urls";
|
|
6
5
|
import { initReloadableProcess } from "@jsenv/utils/process_reload/process_reload.js";
|
|
7
6
|
import { URL_META } from "@jsenv/url-meta";
|
|
@@ -969,7 +968,9 @@ const jsenvPluginNodeEsmResolver = ({
|
|
|
969
968
|
fetchUrlContent: urlInfo => {
|
|
970
969
|
if (urlInfo.url.startsWith("file:///@ignore/")) {
|
|
971
970
|
return {
|
|
972
|
-
content: "export default {}"
|
|
971
|
+
content: "export default {}",
|
|
972
|
+
contentType: "text/javascript",
|
|
973
|
+
type: "js_module"
|
|
973
974
|
};
|
|
974
975
|
}
|
|
975
976
|
|
|
@@ -1232,17 +1233,9 @@ const jsenvPluginFileUrls = ({
|
|
|
1232
1233
|
|
|
1233
1234
|
const fileBuffer = readFileSync(urlObject);
|
|
1234
1235
|
const contentType = CONTENT_TYPE.fromUrlExtension(urlInfo.url);
|
|
1235
|
-
|
|
1236
|
-
if (CONTENT_TYPE.isTextual(contentType)) {
|
|
1237
|
-
return {
|
|
1238
|
-
contentType,
|
|
1239
|
-
content: String(fileBuffer)
|
|
1240
|
-
};
|
|
1241
|
-
}
|
|
1242
|
-
|
|
1243
1236
|
return {
|
|
1244
|
-
contentType,
|
|
1245
|
-
|
|
1237
|
+
content: CONTENT_TYPE.isTextual(contentType) ? String(fileBuffer) : fileBuffer,
|
|
1238
|
+
contentType
|
|
1246
1239
|
};
|
|
1247
1240
|
}
|
|
1248
1241
|
}];
|
|
@@ -1791,12 +1784,12 @@ const jsenvPluginDataUrls = () => {
|
|
|
1791
1784
|
} = DATA_URL.parse(urlInfo.url);
|
|
1792
1785
|
urlInfo.data.base64Flag = base64Flag;
|
|
1793
1786
|
return {
|
|
1794
|
-
contentType,
|
|
1795
1787
|
content: contentFromUrlData({
|
|
1796
1788
|
contentType,
|
|
1797
1789
|
base64Flag,
|
|
1798
1790
|
urlData
|
|
1799
|
-
})
|
|
1791
|
+
}),
|
|
1792
|
+
contentType
|
|
1800
1793
|
};
|
|
1801
1794
|
},
|
|
1802
1795
|
formatUrl: (reference, context) => {
|
|
@@ -1819,7 +1812,7 @@ const jsenvPluginDataUrls = () => {
|
|
|
1819
1812
|
}
|
|
1820
1813
|
|
|
1821
1814
|
const specifier = DATA_URL.stringify({
|
|
1822
|
-
contentType: urlInfo.
|
|
1815
|
+
contentType: urlInfo.headers["content-type"],
|
|
1823
1816
|
base64Flag: urlInfo.data.base64Flag,
|
|
1824
1817
|
data: urlInfo.data.base64Flag ? dataToBase64(urlInfo.content) : String(urlInfo.content)
|
|
1825
1818
|
});
|
|
@@ -1918,10 +1911,10 @@ const jsenvPluginInlineUrls = () => {
|
|
|
1918
1911
|
}
|
|
1919
1912
|
|
|
1920
1913
|
return {
|
|
1921
|
-
contentType: urlInfo.contentType,
|
|
1922
1914
|
// we want to fetch the original content otherwise we might re-cook
|
|
1923
1915
|
// content already cooked
|
|
1924
|
-
content: urlInfo.originalContent
|
|
1916
|
+
content: urlInfo.originalContent,
|
|
1917
|
+
contentType: urlInfo.contentType
|
|
1925
1918
|
};
|
|
1926
1919
|
}
|
|
1927
1920
|
};
|
|
@@ -2571,14 +2564,14 @@ const jsenvPluginAsModules = () => {
|
|
|
2571
2564
|
|
|
2572
2565
|
const jsonText = JSON.stringify(originalUrlInfo.content.trim());
|
|
2573
2566
|
return {
|
|
2574
|
-
originalUrl: originalUrlInfo.originalUrl,
|
|
2575
|
-
originalContent: originalUrlInfo.originalContent,
|
|
2576
|
-
type: "js_module",
|
|
2577
|
-
contentType: "text/javascript",
|
|
2578
2567
|
// here we could `export default ${jsonText}`:
|
|
2579
2568
|
// but js engine are optimized to recognize JSON.parse
|
|
2580
2569
|
// and use a faster parsing strategy
|
|
2581
|
-
content: `export default JSON.parse(${jsonText})
|
|
2570
|
+
content: `export default JSON.parse(${jsonText})`,
|
|
2571
|
+
contentType: "text/javascript",
|
|
2572
|
+
type: "js_module",
|
|
2573
|
+
originalUrl: originalUrlInfo.originalUrl,
|
|
2574
|
+
originalContent: originalUrlInfo.originalContent
|
|
2582
2575
|
};
|
|
2583
2576
|
}
|
|
2584
2577
|
};
|
|
@@ -2604,16 +2597,16 @@ const jsenvPluginAsModules = () => {
|
|
|
2604
2597
|
canUseTemplateString: true
|
|
2605
2598
|
});
|
|
2606
2599
|
return {
|
|
2607
|
-
originalUrl: originalUrlInfo.originalUrl,
|
|
2608
|
-
originalContent: originalUrlInfo.originalContent,
|
|
2609
|
-
type: "js_module",
|
|
2610
|
-
contentType: "text/javascript",
|
|
2611
2600
|
content: `import { InlineContent } from ${JSON.stringify(inlineContentClientFileUrl)}
|
|
2612
2601
|
|
|
2613
2602
|
const inlineContent = new InlineContent(${cssText}, { type: "text/css" })
|
|
2614
2603
|
const stylesheet = new CSSStyleSheet()
|
|
2615
2604
|
stylesheet.replaceSync(inlineContent.text)
|
|
2616
|
-
export default stylesheet
|
|
2605
|
+
export default stylesheet`,
|
|
2606
|
+
contentType: "text/javascript",
|
|
2607
|
+
type: "js_module",
|
|
2608
|
+
originalUrl: originalUrlInfo.originalUrl,
|
|
2609
|
+
originalContent: originalUrlInfo.originalContent
|
|
2617
2610
|
};
|
|
2618
2611
|
}
|
|
2619
2612
|
};
|
|
@@ -2639,14 +2632,14 @@ const jsenvPluginAsModules = () => {
|
|
|
2639
2632
|
canUseTemplateString: true
|
|
2640
2633
|
});
|
|
2641
2634
|
return {
|
|
2642
|
-
originalUrl: originalUrlInfo.originalUrl,
|
|
2643
|
-
originalContent: originalUrlInfo.originalContent,
|
|
2644
|
-
type: "js_module",
|
|
2645
|
-
contentType: "text/javascript",
|
|
2646
2635
|
content: `import { InlineContent } from ${JSON.stringify(inlineContentClientFileUrl)}
|
|
2647
2636
|
|
|
2648
2637
|
const inlineContent = new InlineContent(${textPlain}, { type: "text/plain" })
|
|
2649
|
-
export default inlineContent.text
|
|
2638
|
+
export default inlineContent.text`,
|
|
2639
|
+
contentType: "text/javascript",
|
|
2640
|
+
type: "js_module",
|
|
2641
|
+
originalUrl: originalUrlInfo.originalUrl,
|
|
2642
|
+
originalContent: originalUrlInfo.originalContent
|
|
2650
2643
|
};
|
|
2651
2644
|
}
|
|
2652
2645
|
};
|
|
@@ -3130,11 +3123,11 @@ const jsenvPluginAsJsClassicConversion = ({
|
|
|
3130
3123
|
});
|
|
3131
3124
|
urlInfo.data.jsClassicFormat = jsClassicFormat;
|
|
3132
3125
|
return {
|
|
3126
|
+
content,
|
|
3127
|
+
contentType: "text/javascript",
|
|
3128
|
+
type: "js_classic",
|
|
3133
3129
|
originalUrl: originalUrlInfo.originalUrl,
|
|
3134
3130
|
originalContent: originalUrlInfo.originalContent,
|
|
3135
|
-
type: "js_classic",
|
|
3136
|
-
contentType: "text/javascript",
|
|
3137
|
-
content,
|
|
3138
3131
|
sourcemap
|
|
3139
3132
|
};
|
|
3140
3133
|
}
|
|
@@ -6295,7 +6288,7 @@ const createUrlInfo = url => {
|
|
|
6295
6288
|
sourcemap: null,
|
|
6296
6289
|
sourcemapReference: null,
|
|
6297
6290
|
timing: {},
|
|
6298
|
-
|
|
6291
|
+
headers: {}
|
|
6299
6292
|
};
|
|
6300
6293
|
};
|
|
6301
6294
|
|
|
@@ -6593,14 +6586,15 @@ const returnValueAssertions = [{
|
|
|
6593
6586
|
if (typeof valueReturned === "object") {
|
|
6594
6587
|
const {
|
|
6595
6588
|
shouldHandle,
|
|
6596
|
-
content
|
|
6589
|
+
content,
|
|
6590
|
+
body
|
|
6597
6591
|
} = valueReturned;
|
|
6598
6592
|
|
|
6599
6593
|
if (shouldHandle === false) {
|
|
6600
6594
|
return undefined;
|
|
6601
6595
|
}
|
|
6602
6596
|
|
|
6603
|
-
if (typeof content !== "string" && !Buffer.isBuffer(content)) {
|
|
6597
|
+
if (typeof content !== "string" && !Buffer.isBuffer(content) && !body) {
|
|
6604
6598
|
throw new Error(`Unexpected "content" returned by plugin: it must be a string or a buffer; got ${content}`);
|
|
6605
6599
|
}
|
|
6606
6600
|
|
|
@@ -7224,17 +7218,35 @@ const createKitchen = ({
|
|
|
7224
7218
|
return;
|
|
7225
7219
|
}
|
|
7226
7220
|
|
|
7227
|
-
|
|
7221
|
+
let {
|
|
7222
|
+
content,
|
|
7223
|
+
contentType,
|
|
7228
7224
|
data,
|
|
7229
7225
|
type,
|
|
7230
7226
|
subtype,
|
|
7231
|
-
contentType = "application/octet-stream",
|
|
7232
7227
|
originalUrl,
|
|
7233
7228
|
originalContent,
|
|
7234
|
-
content,
|
|
7235
7229
|
sourcemap,
|
|
7236
|
-
filename
|
|
7230
|
+
filename,
|
|
7231
|
+
status = 200,
|
|
7232
|
+
headers = {},
|
|
7233
|
+
body
|
|
7237
7234
|
} = fetchUrlContentReturnValue;
|
|
7235
|
+
|
|
7236
|
+
if (status !== 200) {
|
|
7237
|
+
throw new Error(`unexpected status, ${status}`);
|
|
7238
|
+
}
|
|
7239
|
+
|
|
7240
|
+
if (content === undefined) {
|
|
7241
|
+
content = body;
|
|
7242
|
+
}
|
|
7243
|
+
|
|
7244
|
+
if (contentType === undefined) {
|
|
7245
|
+
contentType = headers["content-type"] || "application/octet-stream";
|
|
7246
|
+
}
|
|
7247
|
+
|
|
7248
|
+
urlInfo.contentType = contentType;
|
|
7249
|
+
urlInfo.headers = headers;
|
|
7238
7250
|
urlInfo.type = type || reference.expectedType || inferUrlInfoType({
|
|
7239
7251
|
url: urlInfo.url,
|
|
7240
7252
|
contentType
|
|
@@ -7243,8 +7255,7 @@ const createKitchen = ({
|
|
|
7243
7255
|
url: urlInfo.url,
|
|
7244
7256
|
type: urlInfo.type,
|
|
7245
7257
|
subtype: urlInfo.subtype
|
|
7246
|
-
});
|
|
7247
|
-
urlInfo.contentType = contentType; // during build urls info are reused and load returns originalUrl/originalContent
|
|
7258
|
+
}); // during build urls info are reused and load returns originalUrl/originalContent
|
|
7248
7259
|
|
|
7249
7260
|
urlInfo.originalUrl = originalUrl || urlInfo.originalUrl;
|
|
7250
7261
|
urlInfo.originalContent = originalContent === undefined ? content : originalContent;
|
|
@@ -7299,9 +7310,7 @@ const createKitchen = ({
|
|
|
7299
7310
|
} = dishContext;
|
|
7300
7311
|
|
|
7301
7312
|
context.cook = (urlInfo, nestedDishContext) => {
|
|
7302
|
-
return cookDuringCook(urlInfo, {
|
|
7303
|
-
outDirectoryUrl: dishContext.outDirectoryUrl,
|
|
7304
|
-
clientRuntimeCompat: dishContext.clientRuntimeCompat,
|
|
7313
|
+
return cookDuringCook(urlInfo, { ...dishContext,
|
|
7305
7314
|
...nestedDishContext
|
|
7306
7315
|
});
|
|
7307
7316
|
};
|
|
@@ -7969,7 +7978,7 @@ const createFileService = ({
|
|
|
7969
7978
|
status: 304,
|
|
7970
7979
|
headers: {
|
|
7971
7980
|
"cache-control": `private,max-age=0,must-revalidate`,
|
|
7972
|
-
...urlInfo.
|
|
7981
|
+
...urlInfo.headers
|
|
7973
7982
|
}
|
|
7974
7983
|
};
|
|
7975
7984
|
}
|
|
@@ -7984,7 +7993,6 @@ const createFileService = ({
|
|
|
7984
7993
|
urlInfo.type = null;
|
|
7985
7994
|
urlInfo.subtype = null;
|
|
7986
7995
|
urlInfo.timing = {};
|
|
7987
|
-
urlInfo.responseHeaders = {};
|
|
7988
7996
|
}
|
|
7989
7997
|
|
|
7990
7998
|
const {
|
|
@@ -8000,10 +8008,7 @@ const createFileService = ({
|
|
|
8000
8008
|
outDirectoryUrl: scenario === "dev" ? `${rootDirectoryUrl}.jsenv/${runtimeName}@${runtimeVersion}/` : `${rootDirectoryUrl}.jsenv/${scenario}/${runtimeName}@${runtimeVersion}/`
|
|
8001
8009
|
});
|
|
8002
8010
|
let {
|
|
8003
|
-
response
|
|
8004
|
-
contentType,
|
|
8005
|
-
content,
|
|
8006
|
-
contentEtag
|
|
8011
|
+
response
|
|
8007
8012
|
} = urlInfo;
|
|
8008
8013
|
|
|
8009
8014
|
if (response) {
|
|
@@ -8014,13 +8019,13 @@ const createFileService = ({
|
|
|
8014
8019
|
url: reference.url,
|
|
8015
8020
|
status: 200,
|
|
8016
8021
|
headers: {
|
|
8017
|
-
"content-
|
|
8018
|
-
"content-length": Buffer.byteLength(content),
|
|
8022
|
+
"content-length": Buffer.byteLength(urlInfo.content),
|
|
8019
8023
|
"cache-control": `private,max-age=0,must-revalidate`,
|
|
8020
|
-
"eTag": contentEtag,
|
|
8021
|
-
...urlInfo.
|
|
8024
|
+
"eTag": urlInfo.contentEtag,
|
|
8025
|
+
...urlInfo.headers,
|
|
8026
|
+
"content-type": urlInfo.contentType
|
|
8022
8027
|
},
|
|
8023
|
-
body: content,
|
|
8028
|
+
body: urlInfo.content,
|
|
8024
8029
|
timing: urlInfo.timing
|
|
8025
8030
|
};
|
|
8026
8031
|
kitchen.pluginController.callHooks("augmentResponse", {
|
|
@@ -12902,10 +12907,10 @@ const applyUrlVersioning = async ({
|
|
|
12902
12907
|
const rawUrlInfo = rawGraph.getUrlInfo(rawUrls[versionedUrlInfo.url]);
|
|
12903
12908
|
const finalUrlInfo = finalGraph.getUrlInfo(versionedUrlInfo.url);
|
|
12904
12909
|
return {
|
|
12905
|
-
|
|
12906
|
-
sourcemap: finalUrlInfo ? finalUrlInfo.sourcemap : undefined,
|
|
12910
|
+
content: versionedUrlInfo.content,
|
|
12907
12911
|
contentType: versionedUrlInfo.contentType,
|
|
12908
|
-
|
|
12912
|
+
originalContent: rawUrlInfo ? rawUrlInfo.originalContent : undefined,
|
|
12913
|
+
sourcemap: finalUrlInfo ? finalUrlInfo.sourcemap : undefined
|
|
12909
12914
|
};
|
|
12910
12915
|
}
|
|
12911
12916
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jsenv/core",
|
|
3
|
-
"version": "27.0.0-alpha.
|
|
3
|
+
"version": "27.0.0-alpha.78",
|
|
4
4
|
"description": "Tool to develop, test and build js projects",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": {
|
|
@@ -66,19 +66,18 @@
|
|
|
66
66
|
"@babel/plugin-transform-modules-umd": "7.16.7",
|
|
67
67
|
"@c88/v8-coverage": "0.1.1",
|
|
68
68
|
"@financial-times/polyfill-useragent-normaliser": "2.0.1",
|
|
69
|
-
"@jsenv/abort": "4.
|
|
69
|
+
"@jsenv/abort": "4.2.2",
|
|
70
70
|
"@jsenv/babel-plugins": "1.0.3",
|
|
71
|
-
"@jsenv/filesystem": "4.0.
|
|
71
|
+
"@jsenv/filesystem": "4.0.8",
|
|
72
72
|
"@jsenv/importmap": "1.2.0",
|
|
73
73
|
"@jsenv/integrity": "0.0.1",
|
|
74
|
-
"@jsenv/log": "
|
|
75
|
-
"@jsenv/logger": "4.1.1",
|
|
74
|
+
"@jsenv/log": "2.0.0",
|
|
76
75
|
"@jsenv/node-esm-resolution": "0.0.10",
|
|
77
76
|
"@jsenv/server": "12.6.3",
|
|
78
77
|
"@jsenv/uneval": "1.6.0",
|
|
79
|
-
"@jsenv/utils": "1.8.
|
|
78
|
+
"@jsenv/utils": "1.8.11",
|
|
80
79
|
"@jsenv/url-meta": "7.0.0",
|
|
81
|
-
"@jsenv/urls": "1.2.
|
|
80
|
+
"@jsenv/urls": "1.2.4",
|
|
82
81
|
"construct-style-sheets-polyfill": "3.1.0",
|
|
83
82
|
"cssnano": "5.1.7",
|
|
84
83
|
"cssnano-preset-default": "5.2.7",
|
package/src/build/build.js
CHANGED
|
@@ -25,9 +25,7 @@ import {
|
|
|
25
25
|
registerDirectoryLifecycle,
|
|
26
26
|
} from "@jsenv/filesystem"
|
|
27
27
|
import { Abort, raceProcessTeardownEvents } from "@jsenv/abort"
|
|
28
|
-
import { createLogger, loggerToLevels } from "@jsenv/
|
|
29
|
-
|
|
30
|
-
import { createTaskLog } from "@jsenv/log"
|
|
28
|
+
import { createLogger, loggerToLevels, createTaskLog } from "@jsenv/log"
|
|
31
29
|
import { createVersionGenerator } from "@jsenv/utils/versioning/version_generator.js"
|
|
32
30
|
import { generateSourcemapUrl } from "@jsenv/utils/sourcemap/sourcemap_utils.js"
|
|
33
31
|
import {
|
|
@@ -1184,12 +1182,12 @@ const applyUrlVersioning = async ({
|
|
|
1184
1182
|
)
|
|
1185
1183
|
const finalUrlInfo = finalGraph.getUrlInfo(versionedUrlInfo.url)
|
|
1186
1184
|
return {
|
|
1185
|
+
content: versionedUrlInfo.content,
|
|
1186
|
+
contentType: versionedUrlInfo.contentType,
|
|
1187
1187
|
originalContent: rawUrlInfo
|
|
1188
1188
|
? rawUrlInfo.originalContent
|
|
1189
1189
|
: undefined,
|
|
1190
1190
|
sourcemap: finalUrlInfo ? finalUrlInfo.sourcemap : undefined,
|
|
1191
|
-
contentType: versionedUrlInfo.contentType,
|
|
1192
|
-
content: versionedUrlInfo.content,
|
|
1193
1191
|
}
|
|
1194
1192
|
}
|
|
1195
1193
|
return versionedUrlInfo
|
|
@@ -23,13 +23,12 @@ import {
|
|
|
23
23
|
fetchFileSystem,
|
|
24
24
|
composeServices,
|
|
25
25
|
} from "@jsenv/server"
|
|
26
|
+
|
|
26
27
|
import {
|
|
27
28
|
assertAndNormalizeDirectoryUrl,
|
|
28
29
|
registerDirectoryLifecycle,
|
|
29
30
|
} from "@jsenv/filesystem"
|
|
30
|
-
import { createLogger, loggerToLevels } from "@jsenv/
|
|
31
|
-
|
|
32
|
-
import { createTaskLog } from "@jsenv/log"
|
|
31
|
+
import { createLogger, loggerToLevels, createTaskLog } from "@jsenv/log"
|
|
33
32
|
import { getCallerPosition } from "@jsenv/urls"
|
|
34
33
|
import { initReloadableProcess } from "@jsenv/utils/process_reload/process_reload.js"
|
|
35
34
|
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { parentPort } from "node:worker_threads"
|
|
2
|
+
|
|
2
3
|
import {
|
|
3
4
|
assertAndNormalizeDirectoryUrl,
|
|
4
5
|
registerDirectoryLifecycle,
|
|
5
6
|
} from "@jsenv/filesystem"
|
|
6
|
-
import { createLogger, loggerToLevels } from "@jsenv/
|
|
7
|
-
|
|
8
|
-
import { createTaskLog } from "@jsenv/log"
|
|
7
|
+
import { createLogger, loggerToLevels, createTaskLog } from "@jsenv/log"
|
|
9
8
|
import { getCallerPosition } from "@jsenv/urls"
|
|
10
9
|
import { initReloadableProcess } from "@jsenv/utils/process_reload/process_reload.js"
|
|
11
10
|
import { getCorePlugins } from "@jsenv/core/src/plugins/plugins.js"
|
package/src/execute/execute.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { Abort, raceProcessTeardownEvents } from "@jsenv/abort"
|
|
2
2
|
|
|
3
3
|
import { assertAndNormalizeDirectoryUrl } from "@jsenv/filesystem"
|
|
4
|
-
import { createLogger } from "@jsenv/
|
|
5
|
-
|
|
4
|
+
import { createLogger } from "@jsenv/log"
|
|
6
5
|
import { getCorePlugins } from "@jsenv/core/src/plugins/plugins.js"
|
|
7
6
|
import { createUrlGraph } from "@jsenv/core/src/omega/url_graph.js"
|
|
8
7
|
import { createKitchen } from "@jsenv/core/src/omega/kitchen.js"
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Script } from "node:vm"
|
|
2
|
-
|
|
2
|
+
|
|
3
|
+
import { createDetailedMessage } from "@jsenv/log"
|
|
3
4
|
import {
|
|
4
5
|
Abort,
|
|
5
6
|
createCallbackListNotifiedOnce,
|
|
@@ -7,7 +8,6 @@ import {
|
|
|
7
8
|
raceCallbacks,
|
|
8
9
|
} from "@jsenv/abort"
|
|
9
10
|
import { moveUrl } from "@jsenv/urls"
|
|
10
|
-
|
|
11
11
|
import { memoize } from "@jsenv/utils/memoize/memoize.js"
|
|
12
12
|
import { filterV8Coverage } from "@jsenv/utils/coverage/v8_coverage_from_directory.js"
|
|
13
13
|
import { composeTwoFileByFileIstanbulCoverages } from "@jsenv/utils/coverage/istanbul_coverage_composition.js"
|
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
import { fork } from "node:child_process"
|
|
2
|
-
import { urlToFileSystemPath } from "@jsenv/urls"
|
|
3
|
-
import { createDetailedMessage } from "@jsenv/logger"
|
|
4
2
|
import {
|
|
5
3
|
Abort,
|
|
6
4
|
raceCallbacks,
|
|
@@ -8,6 +6,8 @@ import {
|
|
|
8
6
|
} from "@jsenv/abort"
|
|
9
7
|
import { uneval } from "@jsenv/uneval"
|
|
10
8
|
|
|
9
|
+
import { urlToFileSystemPath } from "@jsenv/urls"
|
|
10
|
+
import { createDetailedMessage } from "@jsenv/log"
|
|
11
11
|
import { memoize } from "@jsenv/utils/memoize/memoize.js"
|
|
12
12
|
import { createChildExecOptions } from "./child_exec_options.js"
|
|
13
13
|
import { ExecOptions } from "./exec_options.js"
|
package/src/omega/errors.js
CHANGED
package/src/omega/kitchen.js
CHANGED
|
@@ -7,10 +7,8 @@ import {
|
|
|
7
7
|
setUrlFilename,
|
|
8
8
|
} from "@jsenv/urls"
|
|
9
9
|
import { writeFileSync, ensureWindowsDriveLetter } from "@jsenv/filesystem"
|
|
10
|
-
import { createDetailedMessage } from "@jsenv/
|
|
11
|
-
|
|
10
|
+
import { createDetailedMessage } from "@jsenv/log"
|
|
12
11
|
import { CONTENT_TYPE } from "@jsenv/utils/content_type/content_type.js"
|
|
13
|
-
|
|
14
12
|
import { createPluginController } from "../plugins/plugin_controller.js"
|
|
15
13
|
import { urlSpecifierEncoding } from "./url_specifier_encoding.js"
|
|
16
14
|
import { createUrlInfoTransformer } from "./url_graph/url_info_transformations.js"
|
|
@@ -272,24 +270,36 @@ export const createKitchen = ({
|
|
|
272
270
|
)
|
|
273
271
|
return
|
|
274
272
|
}
|
|
275
|
-
|
|
273
|
+
let {
|
|
274
|
+
content,
|
|
275
|
+
contentType,
|
|
276
276
|
data,
|
|
277
277
|
type,
|
|
278
278
|
subtype,
|
|
279
|
-
contentType = "application/octet-stream",
|
|
280
279
|
originalUrl,
|
|
281
280
|
originalContent,
|
|
282
|
-
content,
|
|
283
281
|
sourcemap,
|
|
284
282
|
filename,
|
|
283
|
+
|
|
284
|
+
status = 200,
|
|
285
|
+
headers = {},
|
|
286
|
+
body,
|
|
285
287
|
} = fetchUrlContentReturnValue
|
|
288
|
+
if (status !== 200) {
|
|
289
|
+
throw new Error(`unexpected status, ${status}`)
|
|
290
|
+
}
|
|
291
|
+
if (content === undefined) {
|
|
292
|
+
content = body
|
|
293
|
+
}
|
|
294
|
+
if (contentType === undefined) {
|
|
295
|
+
contentType = headers["content-type"] || "application/octet-stream"
|
|
296
|
+
}
|
|
297
|
+
urlInfo.contentType = contentType
|
|
298
|
+
urlInfo.headers = headers
|
|
286
299
|
urlInfo.type =
|
|
287
300
|
type ||
|
|
288
301
|
reference.expectedType ||
|
|
289
|
-
inferUrlInfoType({
|
|
290
|
-
url: urlInfo.url,
|
|
291
|
-
contentType,
|
|
292
|
-
})
|
|
302
|
+
inferUrlInfoType({ url: urlInfo.url, contentType })
|
|
293
303
|
urlInfo.subtype =
|
|
294
304
|
subtype ||
|
|
295
305
|
reference.expectedSubtype ||
|
|
@@ -298,7 +308,6 @@ export const createKitchen = ({
|
|
|
298
308
|
type: urlInfo.type,
|
|
299
309
|
subtype: urlInfo.subtype,
|
|
300
310
|
})
|
|
301
|
-
urlInfo.contentType = contentType
|
|
302
311
|
// during build urls info are reused and load returns originalUrl/originalContent
|
|
303
312
|
urlInfo.originalUrl = originalUrl || urlInfo.originalUrl
|
|
304
313
|
urlInfo.originalContent =
|
|
@@ -345,8 +354,7 @@ export const createKitchen = ({
|
|
|
345
354
|
const { cookDuringCook = cook } = dishContext
|
|
346
355
|
context.cook = (urlInfo, nestedDishContext) => {
|
|
347
356
|
return cookDuringCook(urlInfo, {
|
|
348
|
-
|
|
349
|
-
clientRuntimeCompat: dishContext.clientRuntimeCompat,
|
|
357
|
+
...dishContext,
|
|
350
358
|
...nestedDishContext,
|
|
351
359
|
})
|
|
352
360
|
}
|
|
@@ -66,7 +66,7 @@ export const createFileService = ({
|
|
|
66
66
|
status: 304,
|
|
67
67
|
headers: {
|
|
68
68
|
"cache-control": `private,max-age=0,must-revalidate`,
|
|
69
|
-
...urlInfo.
|
|
69
|
+
...urlInfo.headers,
|
|
70
70
|
},
|
|
71
71
|
}
|
|
72
72
|
}
|
|
@@ -84,7 +84,6 @@ export const createFileService = ({
|
|
|
84
84
|
urlInfo.type = null
|
|
85
85
|
urlInfo.subtype = null
|
|
86
86
|
urlInfo.timing = {}
|
|
87
|
-
urlInfo.responseHeaders = {}
|
|
88
87
|
}
|
|
89
88
|
const { runtimeName, runtimeVersion } = parseUserAgentHeader(
|
|
90
89
|
request.headers["user-agent"],
|
|
@@ -100,7 +99,7 @@ export const createFileService = ({
|
|
|
100
99
|
? `${rootDirectoryUrl}.jsenv/${runtimeName}@${runtimeVersion}/`
|
|
101
100
|
: `${rootDirectoryUrl}.jsenv/${scenario}/${runtimeName}@${runtimeVersion}/`,
|
|
102
101
|
})
|
|
103
|
-
let { response
|
|
102
|
+
let { response } = urlInfo
|
|
104
103
|
if (response) {
|
|
105
104
|
return response
|
|
106
105
|
}
|
|
@@ -108,13 +107,13 @@ export const createFileService = ({
|
|
|
108
107
|
url: reference.url,
|
|
109
108
|
status: 200,
|
|
110
109
|
headers: {
|
|
111
|
-
"content-
|
|
112
|
-
"content-length": Buffer.byteLength(content),
|
|
110
|
+
"content-length": Buffer.byteLength(urlInfo.content),
|
|
113
111
|
"cache-control": `private,max-age=0,must-revalidate`,
|
|
114
|
-
"eTag": contentEtag,
|
|
115
|
-
...urlInfo.
|
|
112
|
+
"eTag": urlInfo.contentEtag,
|
|
113
|
+
...urlInfo.headers,
|
|
114
|
+
"content-type": urlInfo.contentType,
|
|
116
115
|
},
|
|
117
|
-
body: content,
|
|
116
|
+
body: urlInfo.content,
|
|
118
117
|
timing: urlInfo.timing,
|
|
119
118
|
}
|
|
120
119
|
kitchen.pluginController.callHooks(
|
package/src/omega/url_graph.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { pathToFileURL } from "node:url"
|
|
2
|
+
|
|
2
3
|
import { URL_META } from "@jsenv/url-meta"
|
|
3
4
|
import { isFileSystemPath } from "@jsenv/urls"
|
|
4
|
-
import { createDetailedMessage } from "@jsenv/
|
|
5
|
-
|
|
5
|
+
import { createDetailedMessage } from "@jsenv/log"
|
|
6
6
|
import { babelHelperNameFromUrl } from "@jsenv/babel-plugins"
|
|
7
7
|
import { applyRollupPlugins } from "@jsenv/utils/js_ast/apply_rollup_plugins.js"
|
|
8
8
|
import { sourcemapConverter } from "@jsenv/utils/sourcemap/sourcemap_converter.js"
|
|
@@ -178,15 +178,11 @@ export const jsenvPluginFileUrls = ({
|
|
|
178
178
|
}
|
|
179
179
|
const fileBuffer = readFileSync(urlObject)
|
|
180
180
|
const contentType = CONTENT_TYPE.fromUrlExtension(urlInfo.url)
|
|
181
|
-
if (CONTENT_TYPE.isTextual(contentType)) {
|
|
182
|
-
return {
|
|
183
|
-
contentType,
|
|
184
|
-
content: String(fileBuffer),
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
181
|
return {
|
|
182
|
+
content: CONTENT_TYPE.isTextual(contentType)
|
|
183
|
+
? String(fileBuffer)
|
|
184
|
+
: fileBuffer,
|
|
188
185
|
contentType,
|
|
189
|
-
content: fileBuffer,
|
|
190
186
|
}
|
|
191
187
|
},
|
|
192
188
|
},
|
|
@@ -22,8 +22,8 @@ export const jsenvPluginDataUrls = () => {
|
|
|
22
22
|
} = DATA_URL.parse(urlInfo.url)
|
|
23
23
|
urlInfo.data.base64Flag = base64Flag
|
|
24
24
|
return {
|
|
25
|
-
contentType,
|
|
26
25
|
content: contentFromUrlData({ contentType, base64Flag, urlData }),
|
|
26
|
+
contentType,
|
|
27
27
|
}
|
|
28
28
|
},
|
|
29
29
|
formatUrl: (reference, context) => {
|
|
@@ -40,7 +40,7 @@ export const jsenvPluginDataUrls = () => {
|
|
|
40
40
|
return reference.generatedUrl
|
|
41
41
|
}
|
|
42
42
|
const specifier = DATA_URL.stringify({
|
|
43
|
-
contentType: urlInfo.
|
|
43
|
+
contentType: urlInfo.headers["content-type"],
|
|
44
44
|
base64Flag: urlInfo.data.base64Flag,
|
|
45
45
|
data: urlInfo.data.base64Flag
|
|
46
46
|
? dataToBase64(urlInfo.content)
|
|
@@ -26,10 +26,10 @@ const jsenvPluginInlineUrls = () => {
|
|
|
26
26
|
return null
|
|
27
27
|
}
|
|
28
28
|
return {
|
|
29
|
-
contentType: urlInfo.contentType,
|
|
30
29
|
// we want to fetch the original content otherwise we might re-cook
|
|
31
30
|
// content already cooked
|
|
32
31
|
content: urlInfo.originalContent,
|
|
32
|
+
contentType: urlInfo.contentType,
|
|
33
33
|
}
|
|
34
34
|
},
|
|
35
35
|
}
|
|
@@ -266,11 +266,11 @@ const returnValueAssertions = [
|
|
|
266
266
|
return { content: valueReturned }
|
|
267
267
|
}
|
|
268
268
|
if (typeof valueReturned === "object") {
|
|
269
|
-
const { shouldHandle, content } = valueReturned
|
|
269
|
+
const { shouldHandle, content, body } = valueReturned
|
|
270
270
|
if (shouldHandle === false) {
|
|
271
271
|
return undefined
|
|
272
272
|
}
|
|
273
|
-
if (typeof content !== "string" && !Buffer.isBuffer(content)) {
|
|
273
|
+
if (typeof content !== "string" && !Buffer.isBuffer(content) && !body) {
|
|
274
274
|
throw new Error(
|
|
275
275
|
`Unexpected "content" returned by plugin: it must be a string or a buffer; got ${content}`,
|
|
276
276
|
)
|
|
@@ -123,11 +123,11 @@ const jsenvPluginAsJsClassicConversion = ({
|
|
|
123
123
|
})
|
|
124
124
|
urlInfo.data.jsClassicFormat = jsClassicFormat
|
|
125
125
|
return {
|
|
126
|
+
content,
|
|
127
|
+
contentType: "text/javascript",
|
|
128
|
+
type: "js_classic",
|
|
126
129
|
originalUrl: originalUrlInfo.originalUrl,
|
|
127
130
|
originalContent: originalUrlInfo.originalContent,
|
|
128
|
-
type: "js_classic",
|
|
129
|
-
contentType: "text/javascript",
|
|
130
|
-
content,
|
|
131
131
|
sourcemap,
|
|
132
132
|
}
|
|
133
133
|
},
|
|
@@ -98,14 +98,14 @@ const jsenvPluginAsModules = () => {
|
|
|
98
98
|
}
|
|
99
99
|
const jsonText = JSON.stringify(originalUrlInfo.content.trim())
|
|
100
100
|
return {
|
|
101
|
-
originalUrl: originalUrlInfo.originalUrl,
|
|
102
|
-
originalContent: originalUrlInfo.originalContent,
|
|
103
|
-
type: "js_module",
|
|
104
|
-
contentType: "text/javascript",
|
|
105
101
|
// here we could `export default ${jsonText}`:
|
|
106
102
|
// but js engine are optimized to recognize JSON.parse
|
|
107
103
|
// and use a faster parsing strategy
|
|
108
104
|
content: `export default JSON.parse(${jsonText})`,
|
|
105
|
+
contentType: "text/javascript",
|
|
106
|
+
type: "js_module",
|
|
107
|
+
originalUrl: originalUrlInfo.originalUrl,
|
|
108
|
+
originalContent: originalUrlInfo.originalContent,
|
|
109
109
|
}
|
|
110
110
|
},
|
|
111
111
|
}
|
|
@@ -130,10 +130,6 @@ const jsenvPluginAsModules = () => {
|
|
|
130
130
|
canUseTemplateString: true,
|
|
131
131
|
})
|
|
132
132
|
return {
|
|
133
|
-
originalUrl: originalUrlInfo.originalUrl,
|
|
134
|
-
originalContent: originalUrlInfo.originalContent,
|
|
135
|
-
type: "js_module",
|
|
136
|
-
contentType: "text/javascript",
|
|
137
133
|
content: `import { InlineContent } from ${JSON.stringify(
|
|
138
134
|
inlineContentClientFileUrl,
|
|
139
135
|
)}
|
|
@@ -142,6 +138,10 @@ const jsenvPluginAsModules = () => {
|
|
|
142
138
|
const stylesheet = new CSSStyleSheet()
|
|
143
139
|
stylesheet.replaceSync(inlineContent.text)
|
|
144
140
|
export default stylesheet`,
|
|
141
|
+
contentType: "text/javascript",
|
|
142
|
+
type: "js_module",
|
|
143
|
+
originalUrl: originalUrlInfo.originalUrl,
|
|
144
|
+
originalContent: originalUrlInfo.originalContent,
|
|
145
145
|
}
|
|
146
146
|
},
|
|
147
147
|
}
|
|
@@ -166,16 +166,16 @@ const jsenvPluginAsModules = () => {
|
|
|
166
166
|
canUseTemplateString: true,
|
|
167
167
|
})
|
|
168
168
|
return {
|
|
169
|
-
originalUrl: originalUrlInfo.originalUrl,
|
|
170
|
-
originalContent: originalUrlInfo.originalContent,
|
|
171
|
-
type: "js_module",
|
|
172
|
-
contentType: "text/javascript",
|
|
173
169
|
content: `import { InlineContent } from ${JSON.stringify(
|
|
174
170
|
inlineContentClientFileUrl,
|
|
175
171
|
)}
|
|
176
172
|
|
|
177
173
|
const inlineContent = new InlineContent(${textPlain}, { type: "text/plain" })
|
|
178
174
|
export default inlineContent.text`,
|
|
175
|
+
contentType: "text/javascript",
|
|
176
|
+
type: "js_module",
|
|
177
|
+
originalUrl: originalUrlInfo.originalUrl,
|
|
178
|
+
originalContent: originalUrlInfo.originalContent,
|
|
179
179
|
}
|
|
180
180
|
},
|
|
181
181
|
}
|
package/src/test/execute_plan.js
CHANGED
|
@@ -3,10 +3,15 @@ import { memoryUsage } from "node:process"
|
|
|
3
3
|
import wrapAnsi from "wrap-ansi"
|
|
4
4
|
import stripAnsi from "strip-ansi"
|
|
5
5
|
import cuid from "cuid"
|
|
6
|
+
|
|
6
7
|
import { URL_META } from "@jsenv/url-meta"
|
|
7
8
|
import { urlToFileSystemPath } from "@jsenv/urls"
|
|
8
|
-
import {
|
|
9
|
-
|
|
9
|
+
import {
|
|
10
|
+
createDetailedMessage,
|
|
11
|
+
loggerToLevels,
|
|
12
|
+
createLog,
|
|
13
|
+
startSpinner,
|
|
14
|
+
} from "@jsenv/log"
|
|
10
15
|
import { Abort, raceProcessTeardownEvents } from "@jsenv/abort"
|
|
11
16
|
import {
|
|
12
17
|
writeDirectory,
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
ensureEmptyDirectory,
|
|
5
5
|
assertAndNormalizeDirectoryUrl,
|
|
6
6
|
} from "@jsenv/filesystem"
|
|
7
|
-
import { createLogger, createDetailedMessage } from "@jsenv/
|
|
7
|
+
import { createLogger, createDetailedMessage } from "@jsenv/log"
|
|
8
8
|
|
|
9
9
|
import { generateCoverageJsonFile } from "@jsenv/utils/coverage/coverage_reporter_json_file.js"
|
|
10
10
|
import { generateCoverageHtmlDirectory } from "@jsenv/utils/coverage/coverage_reporter_html_directory.js"
|