@jsenv/core 27.0.0-alpha.63 → 27.0.0-alpha.66
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/babel_helpers/AsyncGenerator/AsyncGenerator.js +95 -0
- package/dist/babel_helpers/AwaitValue/AwaitValue.js +3 -0
- package/dist/babel_helpers/applyDecoratorDescriptor/applyDecoratorDescriptor.js +29 -0
- package/dist/babel_helpers/arrayLikeToArray/arrayLikeToArray.js +9 -0
- package/dist/babel_helpers/arrayWithHoles/arrayWithHoles.js +4 -0
- package/dist/babel_helpers/arrayWithoutHoles/arrayWithoutHoles.js +5 -0
- package/dist/babel_helpers/assertThisInitialized/assertThisInitialized.js +8 -0
- package/dist/babel_helpers/asyncGeneratorDelegate/asyncGeneratorDelegate.js +52 -0
- package/dist/babel_helpers/asyncIterator/asyncIterator.js +78 -0
- package/dist/babel_helpers/asyncToGenerator/asyncToGenerator.js +39 -0
- package/dist/babel_helpers/awaitAsyncGenerator/awaitAsyncGenerator.js +4 -0
- package/dist/babel_helpers/classApplyDescriptorDestructureSet/classApplyDescriptorDestructureSet.js +24 -0
- package/dist/babel_helpers/classApplyDescriptorGet/classApplyDescriptorGet.js +7 -0
- package/dist/babel_helpers/classApplyDescriptorSet/classApplyDescriptorSet.js +14 -0
- package/dist/babel_helpers/classCallCheck/classCallCheck.js +5 -0
- package/dist/babel_helpers/classCheckPrivateStaticAccess/classCheckPrivateStaticAccess.js +5 -0
- package/dist/babel_helpers/classCheckPrivateStaticFieldDescriptor/classCheckPrivateStaticFieldDescriptor.js +6 -0
- package/dist/babel_helpers/classExtractFieldDescriptor/classExtractFieldDescriptor.js +8 -0
- package/dist/babel_helpers/classNameTDZError/classNameTDZError.js +4 -0
- package/dist/babel_helpers/classPrivateFieldDestructureSet/classPrivateFieldDestructureSet.js +6 -0
- package/dist/babel_helpers/classPrivateFieldGet/classPrivateFieldGet.js +6 -0
- package/dist/babel_helpers/classPrivateFieldLooseBase/classPrivateFieldLooseBase.js +7 -0
- package/dist/babel_helpers/classPrivateFieldLooseKey/classPrivateFieldLooseKey.js +5 -0
- package/dist/babel_helpers/classPrivateFieldSet/classPrivateFieldSet.js +7 -0
- package/dist/babel_helpers/classPrivateMethodGet/classPrivateMethodGet.js +7 -0
- package/dist/babel_helpers/classPrivateMethodSet/classPrivateMethodSet.js +3 -0
- package/dist/babel_helpers/classStaticPrivateFieldSpecGet/classStaticPrivateFieldSpecGet.js +8 -0
- package/dist/babel_helpers/classStaticPrivateFieldSpecSet/classStaticPrivateFieldSpecSet.js +9 -0
- package/dist/babel_helpers/classStaticPrivateMethodGet/classStaticPrivateMethodGet.js +5 -0
- package/dist/babel_helpers/classStaticPrivateMethodSet/classStaticPrivateMethodSet.js +3 -0
- package/dist/babel_helpers/construct/construct.js +15 -0
- package/dist/babel_helpers/createClass/createClass.js +18 -0
- package/dist/babel_helpers/createForOfIteratorHelper/createForOfIteratorHelper.js +63 -0
- package/dist/babel_helpers/createForOfIteratorHelperLoose/createForOfIteratorHelperLoose.js +22 -0
- package/dist/babel_helpers/createRawReactElement/createRawReactElement.js +50 -0
- package/dist/babel_helpers/createSuper/createSuper.js +22 -0
- package/dist/babel_helpers/decorate/decorate.js +622 -0
- package/dist/babel_helpers/defaults/defaults.js +14 -0
- package/dist/babel_helpers/defineEnumerableProperties/defineEnumerableProperties.js +26 -0
- package/dist/babel_helpers/defineProperty/defineProperty.js +19 -0
- package/dist/babel_helpers/extends/extends.js +16 -0
- package/dist/babel_helpers/get/get.js +21 -0
- package/dist/babel_helpers/getPrototypeOf/getPrototypeOf.js +2 -0
- package/dist/babel_helpers/inherits/inherits.js +21 -0
- package/dist/babel_helpers/inheritsLoose/inheritsLoose.js +6 -0
- package/dist/babel_helpers/initializerDefineProperty/initializerDefineProperty.js +10 -0
- package/dist/babel_helpers/initializerWarningHelper/initializerWarningHelper.js +3 -0
- package/dist/babel_helpers/instanceof/instanceof.js +7 -0
- package/dist/babel_helpers/interopRequireDefault/interopRequireDefault.js +5 -0
- package/dist/babel_helpers/interopRequireWildcard/interopRequireWildcard.js +49 -0
- package/dist/babel_helpers/isNativeFunction/isNativeFunction.js +4 -0
- package/dist/babel_helpers/isNativeReflectConstruct/isNativeReflectConstruct.js +21 -0
- package/dist/babel_helpers/iterableToArray/iterableToArray.js +3 -0
- package/dist/babel_helpers/iterableToArrayLimit/iterableToArrayLimit.js +38 -0
- package/dist/babel_helpers/iterableToArrayLimitLoose/iterableToArrayLimitLoose.js +13 -0
- package/dist/babel_helpers/jsx/jsx.js +49 -0
- package/dist/babel_helpers/maybeArrayLike/maybeArrayLike.js +10 -0
- package/dist/babel_helpers/newArrowCheck/newArrowCheck.js +5 -0
- package/dist/babel_helpers/nonIterableRest/nonIterableRest.js +3 -0
- package/dist/babel_helpers/nonIterableSpread/nonIterableSpread.js +3 -0
- package/dist/babel_helpers/objectDestructuringEmpty/objectDestructuringEmpty.js +3 -0
- package/dist/babel_helpers/objectSpread/objectSpread.js +22 -0
- package/dist/babel_helpers/objectSpread2/objectSpread2.js +41 -0
- package/dist/babel_helpers/objectWithoutProperties/objectWithoutProperties.js +20 -0
- package/dist/babel_helpers/objectWithoutPropertiesLoose/objectWithoutPropertiesLoose.js +15 -0
- package/dist/babel_helpers/possibleConstructorReturn/possibleConstructorReturn.js +10 -0
- package/dist/babel_helpers/readOnlyError/readOnlyError.js +4 -0
- package/dist/babel_helpers/readme.md +8 -0
- package/dist/babel_helpers/set/set.js +51 -0
- package/dist/babel_helpers/setPrototypeOf/setPrototypeOf.js +5 -0
- package/dist/babel_helpers/skipFirstGeneratorNext/skipFirstGeneratorNext.js +8 -0
- package/dist/babel_helpers/slicedToArray/slicedToArray.js +5 -0
- package/dist/babel_helpers/slicedToArrayLoose/slicedToArrayLoose.js +7 -0
- package/dist/babel_helpers/superPropBase/superPropBase.js +10 -0
- package/dist/babel_helpers/taggedTemplateLiteral/taggedTemplateLiteral.js +11 -0
- package/dist/babel_helpers/taggedTemplateLiteralLoose/taggedTemplateLiteralLoose.js +8 -0
- package/dist/babel_helpers/tdz/tdz.js +4 -0
- package/dist/babel_helpers/temporalRef/temporalRef.js +5 -0
- package/dist/babel_helpers/temporalUndefined/temporalUndefined.js +3 -0
- package/dist/babel_helpers/toArray/toArray.js +5 -0
- package/dist/babel_helpers/toConsumableArray/toConsumableArray.js +5 -0
- package/dist/babel_helpers/toPrimitive/toPrimitive.js +14 -0
- package/dist/babel_helpers/toPropertyKey/toPropertyKey.js +5 -0
- package/dist/babel_helpers/typeof/typeof.js +7 -0
- package/dist/babel_helpers/unsupportedIterableToArray/unsupportedIterableToArray.js +10 -0
- package/dist/babel_helpers/wrapAsyncGenerator/wrapAsyncGenerator.js +7 -0
- package/dist/babel_helpers/wrapNativeSuper/wrapNativeSuper.js +35 -0
- package/dist/babel_helpers/wrapRegExp/wrapRegExp.js +67 -0
- package/dist/babel_helpers/writeOnlyError/writeOnlyError.js +4 -0
- package/dist/html/explorer.html +557 -0
- package/dist/js/controllable_file.mjs +227 -0
- package/dist/{event_source_client.js → js/event_source_client.js} +19 -244
- package/dist/js/global_this.js +32 -0
- package/dist/js/html_supervisor_installer.js +522 -0
- package/dist/js/html_supervisor_setup.js +79 -0
- package/dist/{import_meta_hot.js → js/import_meta_hot.js} +1 -3
- package/dist/js/inline_content.js +8 -0
- package/dist/js/new_stylesheet.js +409 -0
- package/dist/js/regenerator_runtime.js +721 -0
- package/dist/js/s.js +429 -0
- package/dist/main.js +13383 -0
- package/dist/other/jsenv.png +0 -0
- package/main.js +1 -0
- package/package.json +18 -14
- package/src/build/build.js +175 -69
- package/src/build/build_urls_generator.js +18 -2
- package/src/build/inject_global_version_mappings.js +18 -5
- package/src/build/inject_service_worker_urls.js +1 -1
- package/src/build/resync_ressource_hints.js +56 -9
- package/src/build/start_build_server.js +38 -29
- package/src/dev/plugins/explorer/client/explorer.html +1 -1
- package/src/dev/plugins/explorer/jsenv_plugin_explorer.js +1 -1
- package/src/dev/start_dev_server.js +18 -4
- package/src/execute/execute.js +3 -0
- package/src/execute/runtimes/browsers/from_playwright.js +10 -0
- package/src/execute/runtimes/node/node_process.js +8 -0
- package/src/omega/errors.js +10 -7
- package/src/omega/kitchen.js +251 -340
- package/src/omega/server/file_service.js +34 -17
- package/src/omega/url_graph/url_graph_load.js +10 -17
- package/src/omega/url_graph/url_graph_report.js +2 -2
- package/src/omega/url_graph/url_info_transformations.js +1 -4
- package/src/omega/url_graph.js +7 -3
- package/src/omega/url_specifier_encoding.js +59 -0
- package/src/plugins/autoreload/dev_sse/jsenv_plugin_dev_sse_client.js +5 -10
- package/src/plugins/autoreload/jsenv_plugin_autoreload.js +1 -3
- package/src/plugins/bundling/js_module/bundle_js_module.js +66 -24
- package/src/plugins/file_urls/jsenv_plugin_file_urls.js +178 -53
- package/src/plugins/html_supervisor/client/html_supervisor_installer.js +1 -1
- package/src/plugins/html_supervisor/jsenv_plugin_html_supervisor.js +9 -13
- package/src/plugins/http_urls/jsenv_plugin_http_urls.js +6 -6
- package/src/plugins/import_meta_hot/jsenv_plugin_import_meta_hot.js +5 -10
- package/src/plugins/importmap/jsenv_plugin_importmap.js +2 -4
- package/src/plugins/inject_globals/jsenv_plugin_inject_globals.js +51 -42
- package/src/plugins/inline/jsenv_plugin_data_urls.js +1 -4
- package/src/plugins/inline/jsenv_plugin_html_inline_content.js +3 -5
- package/src/plugins/inline/jsenv_plugin_inline_query_param.js +1 -4
- package/src/plugins/inline/jsenv_plugin_js_inline_content.js +1 -4
- package/src/plugins/node_esm_resolution/jsenv_plugin_node_esm_resolution.js +16 -2
- package/src/plugins/node_runtime/jsenv_plugin_node_runtime.js +12 -0
- package/src/plugins/plugin_controller.js +17 -3
- package/src/plugins/plugins.js +15 -15
- package/src/plugins/transpilation/as_js_classic/client/s.js +362 -807
- package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic.js +20 -10
- package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic_html.js +302 -0
- package/src/plugins/transpilation/as_js_classic/{jsenv_plugin_workers_type_module_as_classic.js → jsenv_plugin_as_js_classic_workers.js} +2 -2
- package/src/plugins/transpilation/babel/jsenv_plugin_babel.js +5 -2
- package/src/plugins/transpilation/import_assertions/jsenv_plugin_import_assertions.js +1 -2
- package/src/plugins/transpilation/jsenv_plugin_transpilation.js +2 -0
- package/src/plugins/url_analysis/html/html_urls.js +3 -0
- package/src/plugins/url_analysis/js/js_urls.js +2 -1
- package/src/plugins/url_analysis/jsenv_plugin_url_analysis.js +94 -1
- package/src/plugins/url_analysis/webmanifest/webmanifest_urls.js +3 -0
- package/src/plugins/url_resolution/jsenv_plugin_url_resolution.js +0 -3
- package/src/test/execute_plan.js +34 -13
- package/src/test/execute_test_plan.js +2 -0
- package/src/test/logs_file_execution.js +47 -38
- package/dist/event_source_client.js.map +0 -188
- package/dist/html_supervisor_installer.js +0 -1236
- package/dist/html_supervisor_installer.js.map +0 -337
- package/dist/html_supervisor_setup.js +0 -95
- package/dist/html_supervisor_setup.js.map +0 -57
- package/dist/import_meta_hot.js.map +0 -42
- package/src/jsenv_root_directory_url.js +0 -1
- package/src/omega/compat/default_runtime_compat.js +0 -11
- package/src/plugins/filesystem_magic/jsenv_plugin_filesystem_magic.js +0 -61
- package/src/plugins/transpilation/as_js_classic/client/s.js.md +0 -1
- package/src/plugins/transpilation/as_js_classic/jsenv_plugin_script_type_module_as_classic.js +0 -270
- package/src/plugins/transpilation/babel/new_stylesheet/client/.eslintrc.cjs +0 -24
- package/src/plugins/transpilation/fetch_original_url_info.js +0 -30
|
@@ -41,7 +41,11 @@ const injectVersionMappings = async ({ urlInfo, kitchen, versionMappings }) => {
|
|
|
41
41
|
|
|
42
42
|
const jsInjector = (urlInfo, { versionMappings }) => {
|
|
43
43
|
const magicSource = createMagicSource(urlInfo.content)
|
|
44
|
-
magicSource.prepend(
|
|
44
|
+
magicSource.prepend(
|
|
45
|
+
generateClientCodeForVersionMappings(versionMappings, {
|
|
46
|
+
globalName: urlInfo.data.isWebWorkerEntryPoint ? "self" : "window",
|
|
47
|
+
}),
|
|
48
|
+
)
|
|
45
49
|
return magicSource.toContentAndSourcemap()
|
|
46
50
|
}
|
|
47
51
|
|
|
@@ -57,7 +61,9 @@ const injectors = {
|
|
|
57
61
|
htmlAst,
|
|
58
62
|
createHtmlNode({
|
|
59
63
|
"tagName": "script",
|
|
60
|
-
"textContent": generateClientCodeForVersionMappings(versionMappings
|
|
64
|
+
"textContent": generateClientCodeForVersionMappings(versionMappings, {
|
|
65
|
+
globalName: "window",
|
|
66
|
+
}),
|
|
61
67
|
"injected-by": "jsenv:versioning",
|
|
62
68
|
}),
|
|
63
69
|
)
|
|
@@ -69,12 +75,19 @@ const injectors = {
|
|
|
69
75
|
js_module: jsInjector,
|
|
70
76
|
}
|
|
71
77
|
|
|
72
|
-
const generateClientCodeForVersionMappings = (
|
|
78
|
+
const generateClientCodeForVersionMappings = (
|
|
79
|
+
versionMappings,
|
|
80
|
+
{ globalName },
|
|
81
|
+
) => {
|
|
73
82
|
return `
|
|
83
|
+
;(function() {
|
|
84
|
+
|
|
74
85
|
var __versionMappings__ = ${JSON.stringify(versionMappings, null, " ")};
|
|
75
|
-
|
|
76
|
-
__envGlobal__.__v__ = function (specifier) {
|
|
86
|
+
${globalName}.__v__ = function (specifier) {
|
|
77
87
|
return __versionMappings__[specifier] || specifier
|
|
78
88
|
};
|
|
89
|
+
|
|
90
|
+
})();
|
|
91
|
+
|
|
79
92
|
`
|
|
80
93
|
}
|
|
@@ -22,7 +22,7 @@ export const injectServiceWorkerUrls = async ({
|
|
|
22
22
|
}
|
|
23
23
|
const serviceWorkerUrls = {}
|
|
24
24
|
GRAPH.forEach(finalGraph, (urlInfo) => {
|
|
25
|
-
if (urlInfo.isInline || urlInfo.
|
|
25
|
+
if (urlInfo.isInline || !urlInfo.shouldHandle) {
|
|
26
26
|
return
|
|
27
27
|
}
|
|
28
28
|
if (!urlInfo.url.startsWith("file:")) {
|
|
@@ -16,9 +16,11 @@ import {
|
|
|
16
16
|
import { GRAPH } from "./graph_utils.js"
|
|
17
17
|
|
|
18
18
|
export const resyncRessourceHints = async ({
|
|
19
|
+
logger,
|
|
19
20
|
finalGraphKitchen,
|
|
20
21
|
finalGraph,
|
|
21
|
-
|
|
22
|
+
rawUrls,
|
|
23
|
+
postBuildRedirections,
|
|
22
24
|
}) => {
|
|
23
25
|
const ressourceHintActions = []
|
|
24
26
|
GRAPH.forEach(finalGraph, (urlInfo) => {
|
|
@@ -29,20 +31,62 @@ export const resyncRessourceHints = async ({
|
|
|
29
31
|
const htmlAst = parseHtmlString(urlInfo.content, {
|
|
30
32
|
storeOriginalPositions: false,
|
|
31
33
|
})
|
|
34
|
+
const actions = []
|
|
32
35
|
const visitLinkWithHref = (linkNode, hrefAttribute) => {
|
|
33
36
|
const href = hrefAttribute.value
|
|
34
37
|
if (!href || href.startsWith("data:")) {
|
|
35
38
|
return
|
|
36
39
|
}
|
|
37
|
-
const
|
|
40
|
+
const relAttribute = getHtmlNodeAttributeByName(linkNode, "rel")
|
|
41
|
+
const rel = relAttribute ? relAttribute.value : undefined
|
|
42
|
+
const isRessourceHint = [
|
|
43
|
+
"preconnect",
|
|
44
|
+
"dns-prefetch",
|
|
45
|
+
"prefetch",
|
|
46
|
+
"preload",
|
|
47
|
+
"modulepreload",
|
|
48
|
+
].includes(rel)
|
|
49
|
+
if (!isRessourceHint) {
|
|
50
|
+
return
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
let buildUrl
|
|
54
|
+
for (const key of Object.keys(rawUrls)) {
|
|
55
|
+
if (rawUrls[key] === href) {
|
|
56
|
+
buildUrl = key
|
|
57
|
+
break
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
if (!buildUrl) {
|
|
61
|
+
logger.warn(`remove ressource hint because cannot find "${href}"`)
|
|
62
|
+
actions.push(() => {
|
|
63
|
+
removeHtmlNode(linkNode)
|
|
64
|
+
})
|
|
65
|
+
return
|
|
66
|
+
}
|
|
67
|
+
buildUrl = postBuildRedirections[buildUrl] || buildUrl
|
|
38
68
|
const urlInfo = finalGraph.getUrlInfo(buildUrl)
|
|
39
69
|
if (!urlInfo) {
|
|
70
|
+
logger.warn(
|
|
71
|
+
`remove ressource hint because cannot find "${buildUrl}" in the graph`,
|
|
72
|
+
)
|
|
73
|
+
actions.push(() => {
|
|
74
|
+
removeHtmlNode(linkNode)
|
|
75
|
+
})
|
|
40
76
|
return
|
|
41
77
|
}
|
|
42
78
|
if (urlInfo.dependents.size === 0) {
|
|
43
|
-
|
|
79
|
+
logger.warn(
|
|
80
|
+
`remove ressource hint because "${href}" not used anymore`,
|
|
81
|
+
)
|
|
82
|
+
actions.push(() => {
|
|
83
|
+
removeHtmlNode(linkNode)
|
|
84
|
+
})
|
|
44
85
|
return
|
|
45
86
|
}
|
|
87
|
+
actions.push(() => {
|
|
88
|
+
hrefAttribute.value = urlInfo.data.buildUrlSpecifier
|
|
89
|
+
})
|
|
46
90
|
}
|
|
47
91
|
visitHtmlAst(htmlAst, (node) => {
|
|
48
92
|
if (node.nodeName !== "link") {
|
|
@@ -54,12 +98,15 @@ export const resyncRessourceHints = async ({
|
|
|
54
98
|
}
|
|
55
99
|
visitLinkWithHref(node, hrefAttribute)
|
|
56
100
|
})
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
101
|
+
if (actions.length) {
|
|
102
|
+
actions.forEach((action) => action())
|
|
103
|
+
await finalGraphKitchen.urlInfoTransformer.applyFinalTransformations(
|
|
104
|
+
urlInfo,
|
|
105
|
+
{
|
|
106
|
+
content: stringifyHtmlAst(htmlAst),
|
|
107
|
+
},
|
|
108
|
+
)
|
|
109
|
+
}
|
|
63
110
|
})
|
|
64
111
|
})
|
|
65
112
|
await Promise.all(
|
|
@@ -21,6 +21,7 @@ import {
|
|
|
21
21
|
pluginRequestWaitingCheck,
|
|
22
22
|
pluginCORS,
|
|
23
23
|
fetchFileSystem,
|
|
24
|
+
composeServices,
|
|
24
25
|
} from "@jsenv/server"
|
|
25
26
|
import {
|
|
26
27
|
assertAndNormalizeDirectoryUrl,
|
|
@@ -44,6 +45,7 @@ export const startBuildServer = async ({
|
|
|
44
45
|
listenAnyIp,
|
|
45
46
|
ip,
|
|
46
47
|
port = 9779,
|
|
48
|
+
services = {},
|
|
47
49
|
|
|
48
50
|
rootDirectoryUrl,
|
|
49
51
|
buildDirectoryUrl,
|
|
@@ -146,10 +148,7 @@ export const startBuildServer = async ({
|
|
|
146
148
|
accessControlAllowRequestOrigin: true,
|
|
147
149
|
accessControlAllowRequestMethod: true,
|
|
148
150
|
accessControlAllowRequestHeaders: true,
|
|
149
|
-
accessControlAllowedRequestHeaders:
|
|
150
|
-
...jsenvAccessControlAllowedHeaders,
|
|
151
|
-
"x-jsenv-execution-id",
|
|
152
|
-
],
|
|
151
|
+
accessControlAllowedRequestHeaders: jsenvAccessControlAllowedHeaders,
|
|
153
152
|
accessControlAllowCredentials: true,
|
|
154
153
|
}),
|
|
155
154
|
...pluginServerTiming(),
|
|
@@ -158,31 +157,13 @@ export const startBuildServer = async ({
|
|
|
158
157
|
}),
|
|
159
158
|
},
|
|
160
159
|
sendErrorDetails: true,
|
|
161
|
-
requestToResponse: (
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
...request,
|
|
169
|
-
ressource: mainBuildFileUrl,
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
return fetchFileSystem(
|
|
173
|
-
new URL(request.ressource.slice(1), buildDirectoryUrl),
|
|
174
|
-
{
|
|
175
|
-
headers: request.headers,
|
|
176
|
-
cacheControl: urlIsVersioned
|
|
177
|
-
? `private,max-age=${SECONDS_IN_30_DAYS},immutable`
|
|
178
|
-
: "private,max-age=0,must-revalidate",
|
|
179
|
-
etagEnabled: true,
|
|
180
|
-
compressionEnabled: !request.pathname.endsWith(".mp4"),
|
|
181
|
-
rootDirectoryUrl: buildDirectoryUrl,
|
|
182
|
-
canReadDirectory: true,
|
|
183
|
-
},
|
|
184
|
-
)
|
|
185
|
-
},
|
|
160
|
+
requestToResponse: composeServices({
|
|
161
|
+
...services,
|
|
162
|
+
build_files_service: createBuildFilesService({
|
|
163
|
+
buildDirectoryUrl,
|
|
164
|
+
mainBuildFileUrl,
|
|
165
|
+
}),
|
|
166
|
+
}),
|
|
186
167
|
})
|
|
187
168
|
startBuildServerTask.done()
|
|
188
169
|
logger.info(``)
|
|
@@ -199,4 +180,32 @@ export const startBuildServer = async ({
|
|
|
199
180
|
}
|
|
200
181
|
}
|
|
201
182
|
|
|
183
|
+
const createBuildFilesService = ({ buildDirectoryUrl, mainBuildFileUrl }) => {
|
|
184
|
+
return (request) => {
|
|
185
|
+
const urlIsVersioned = new URL(
|
|
186
|
+
request.ressource,
|
|
187
|
+
request.origin,
|
|
188
|
+
).searchParams.has("v")
|
|
189
|
+
if (mainBuildFileUrl && request.ressource === "/") {
|
|
190
|
+
request = {
|
|
191
|
+
...request,
|
|
192
|
+
ressource: mainBuildFileUrl,
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
return fetchFileSystem(
|
|
196
|
+
new URL(request.ressource.slice(1), buildDirectoryUrl),
|
|
197
|
+
{
|
|
198
|
+
headers: request.headers,
|
|
199
|
+
cacheControl: urlIsVersioned
|
|
200
|
+
? `private,max-age=${SECONDS_IN_30_DAYS},immutable`
|
|
201
|
+
: "private,max-age=0,must-revalidate",
|
|
202
|
+
etagEnabled: true,
|
|
203
|
+
compressionEnabled: !request.pathname.endsWith(".mp4"),
|
|
204
|
+
rootDirectoryUrl: buildDirectoryUrl,
|
|
205
|
+
canReadDirectory: true,
|
|
206
|
+
},
|
|
207
|
+
)
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
|
|
202
211
|
const SECONDS_IN_30_DAYS = 60 * 60 * 24 * 30
|
|
@@ -41,7 +41,7 @@ export const jsenvPluginExplorer = ({ groups }) => {
|
|
|
41
41
|
}))
|
|
42
42
|
let html = String(readFileSync(new URL(htmlClientFileUrl)))
|
|
43
43
|
html = html.replace(
|
|
44
|
-
"FAVICON_HREF",
|
|
44
|
+
"virtual:FAVICON_HREF",
|
|
45
45
|
DataUrl.stringify({
|
|
46
46
|
contentType: CONTENT_TYPE.fromUrlExtension(faviconClientFileUrl),
|
|
47
47
|
base64Flag: true,
|
|
@@ -14,7 +14,7 @@ import { createKitchen } from "@jsenv/core/src/omega/kitchen.js"
|
|
|
14
14
|
import { startOmegaServer } from "@jsenv/core/src/omega/omega_server.js"
|
|
15
15
|
|
|
16
16
|
import { jsenvPluginExplorer } from "./plugins/explorer/jsenv_plugin_explorer.js"
|
|
17
|
-
import { jsenvPluginToolbar } from "./plugins/toolbar/jsenv_plugin_toolbar.js"
|
|
17
|
+
// import { jsenvPluginToolbar } from "./plugins/toolbar/jsenv_plugin_toolbar.js"
|
|
18
18
|
|
|
19
19
|
export const startDevServer = async ({
|
|
20
20
|
signal = new AbortController().signal,
|
|
@@ -53,7 +53,18 @@ export const startDevServer = async ({
|
|
|
53
53
|
clientAutoreload = true,
|
|
54
54
|
|
|
55
55
|
sourcemaps = "inline",
|
|
56
|
+
// default runtimeCompat assume dev server will be request by recent browsers
|
|
57
|
+
// Used by "jsenv_plugin_node_runtime.js" to deactivate itself
|
|
58
|
+
// If dev server can be requested by Node.js to exec files
|
|
59
|
+
// we would add "node" to the potential runtimes. For now it's out of the scope of the dev server
|
|
60
|
+
// and "jsenv_plugin_node_runtime.js" applies only during build made for node.js
|
|
61
|
+
runtimeCompat = {
|
|
62
|
+
chrome: "100",
|
|
63
|
+
firefox: "100",
|
|
64
|
+
safari: "15.5",
|
|
65
|
+
},
|
|
56
66
|
plugins = [],
|
|
67
|
+
urlAnalysis = {},
|
|
57
68
|
htmlSupervisor = true,
|
|
58
69
|
injectedGlobals,
|
|
59
70
|
nodeEsmResolution,
|
|
@@ -68,7 +79,7 @@ export const startDevServer = async ({
|
|
|
68
79
|
"./test/**/*.test.html": true,
|
|
69
80
|
},
|
|
70
81
|
},
|
|
71
|
-
toolbar = false,
|
|
82
|
+
// toolbar = false,
|
|
72
83
|
writeGeneratedFiles = true,
|
|
73
84
|
}) => {
|
|
74
85
|
const logger = createLogger({ logLevel })
|
|
@@ -164,6 +175,7 @@ export const startDevServer = async ({
|
|
|
164
175
|
rootDirectoryUrl,
|
|
165
176
|
urlGraph,
|
|
166
177
|
scenario: "dev",
|
|
178
|
+
runtimeCompat,
|
|
167
179
|
sourcemaps,
|
|
168
180
|
writeGeneratedFiles,
|
|
169
181
|
plugins: [
|
|
@@ -172,7 +184,9 @@ export const startDevServer = async ({
|
|
|
172
184
|
rootDirectoryUrl,
|
|
173
185
|
urlGraph,
|
|
174
186
|
scenario: "dev",
|
|
187
|
+
runtimeCompat,
|
|
175
188
|
|
|
189
|
+
urlAnalysis,
|
|
176
190
|
htmlSupervisor,
|
|
177
191
|
injectedGlobals,
|
|
178
192
|
nodeEsmResolution,
|
|
@@ -185,7 +199,7 @@ export const startDevServer = async ({
|
|
|
185
199
|
jsenvPluginExplorer({
|
|
186
200
|
groups: explorerGroups,
|
|
187
201
|
}),
|
|
188
|
-
...(toolbar ? [jsenvPluginToolbar(toolbar)] : []),
|
|
202
|
+
// ...(toolbar ? [jsenvPluginToolbar(toolbar)] : []),
|
|
189
203
|
],
|
|
190
204
|
})
|
|
191
205
|
const server = await startOmegaServer({
|
|
@@ -210,7 +224,7 @@ export const startDevServer = async ({
|
|
|
210
224
|
logger.info(``)
|
|
211
225
|
server.addEffect(() => {
|
|
212
226
|
return () => {
|
|
213
|
-
kitchen.pluginController.callHooks("destroy")
|
|
227
|
+
kitchen.pluginController.callHooks("destroy", {})
|
|
214
228
|
}
|
|
215
229
|
})
|
|
216
230
|
return {
|
package/src/execute/execute.js
CHANGED
|
@@ -68,6 +68,7 @@ export const execute = async ({
|
|
|
68
68
|
}
|
|
69
69
|
if (runtime.needsServer) {
|
|
70
70
|
const urlGraph = createUrlGraph()
|
|
71
|
+
const runtimeCompat = { [runtime.name]: runtime.version }
|
|
71
72
|
const kitchen = createKitchen({
|
|
72
73
|
signal,
|
|
73
74
|
logger,
|
|
@@ -75,6 +76,7 @@ export const execute = async ({
|
|
|
75
76
|
urlGraph,
|
|
76
77
|
scenario,
|
|
77
78
|
sourcemaps,
|
|
79
|
+
runtimeCompat,
|
|
78
80
|
writeGeneratedFiles,
|
|
79
81
|
plugins: [
|
|
80
82
|
...plugins,
|
|
@@ -82,6 +84,7 @@ export const execute = async ({
|
|
|
82
84
|
rootDirectoryUrl,
|
|
83
85
|
urlGraph,
|
|
84
86
|
scenario,
|
|
87
|
+
runtimeCompat,
|
|
85
88
|
|
|
86
89
|
htmlSupervisor,
|
|
87
90
|
injectedGlobals,
|
|
@@ -216,9 +216,14 @@ export const createRuntimeFromPlaywright = ({
|
|
|
216
216
|
},
|
|
217
217
|
})
|
|
218
218
|
cleanupCallbackList.add(removeConsoleListener)
|
|
219
|
+
const actionOperation = Abort.startOperation()
|
|
220
|
+
actionOperation.addAbortSignal(signal)
|
|
219
221
|
const winnerPromise = new Promise((resolve, reject) => {
|
|
220
222
|
raceCallbacks(
|
|
221
223
|
{
|
|
224
|
+
aborted: (cb) => {
|
|
225
|
+
return actionOperation.addAbortCallback(cb)
|
|
226
|
+
},
|
|
222
227
|
// https://github.com/GoogleChrome/puppeteer/blob/v1.4.0/docs/api.md#event-error
|
|
223
228
|
error: (cb) => {
|
|
224
229
|
return registerEvent({
|
|
@@ -317,6 +322,11 @@ export const createRuntimeFromPlaywright = ({
|
|
|
317
322
|
|
|
318
323
|
const getResult = async () => {
|
|
319
324
|
const winner = await winnerPromise
|
|
325
|
+
if (winner.name === "aborted") {
|
|
326
|
+
return {
|
|
327
|
+
status: "aborted",
|
|
328
|
+
}
|
|
329
|
+
}
|
|
320
330
|
if (winner.name === "error" || winner.name === "pageerror") {
|
|
321
331
|
const error = winner.data
|
|
322
332
|
return {
|
|
@@ -162,6 +162,9 @@ nodeProcess.run = async ({
|
|
|
162
162
|
const winnerPromise = new Promise((resolve) => {
|
|
163
163
|
raceCallbacks(
|
|
164
164
|
{
|
|
165
|
+
aborted: (cb) => {
|
|
166
|
+
return actionOperation.addAbortCallback(cb)
|
|
167
|
+
},
|
|
165
168
|
// https://nodejs.org/api/child_process.html#child_process_event_disconnect
|
|
166
169
|
// disconnect: (cb) => {
|
|
167
170
|
// return onceProcessEvent(childProcess, "disconnect", cb)
|
|
@@ -194,6 +197,11 @@ nodeProcess.run = async ({
|
|
|
194
197
|
},
|
|
195
198
|
})
|
|
196
199
|
const winner = await winnerPromise
|
|
200
|
+
if (winner.name === "aborted") {
|
|
201
|
+
return {
|
|
202
|
+
status: "aborted",
|
|
203
|
+
}
|
|
204
|
+
}
|
|
197
205
|
if (winner.name === "error") {
|
|
198
206
|
const error = winner.data
|
|
199
207
|
removeOutputListener()
|
package/src/omega/errors.js
CHANGED
|
@@ -97,13 +97,16 @@ export const createTransformUrlContentError = ({
|
|
|
97
97
|
...details
|
|
98
98
|
}) => {
|
|
99
99
|
const transformError = new Error(
|
|
100
|
-
createDetailedMessage(
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
100
|
+
createDetailedMessage(
|
|
101
|
+
`Failed to transform url content of "${urlInfo.type}"`,
|
|
102
|
+
{
|
|
103
|
+
reason,
|
|
104
|
+
...details,
|
|
105
|
+
"url": urlInfo.url,
|
|
106
|
+
"url reference trace": reference.trace,
|
|
107
|
+
...detailsFromPluginController(pluginController),
|
|
108
|
+
},
|
|
109
|
+
),
|
|
107
110
|
)
|
|
108
111
|
transformError.name = "TRANSFORM_URL_CONTENT_ERROR"
|
|
109
112
|
transformError.code = code
|