@jsenv/core 25.2.1 → 25.4.1
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/browser_runtime/asset-manifest.json +2 -2
- package/dist/browser_runtime/{browser_runtime_91c5a3b8.js → browser_runtime_0e3396a1.js} +15 -16
- package/dist/browser_runtime/{browser_runtime_91c5a3b8.js.map → browser_runtime_0e3396a1.js.map} +13 -13
- package/dist/build_manifest.js +5 -5
- package/dist/compile_proxy/asset-manifest.json +2 -2
- package/dist/compile_proxy/compile_proxy.html__inline__20_f4285042.js.map +343 -0
- package/dist/compile_proxy/{compile_proxy_8dfaee51.html → compile_proxy_ab528227.html} +358 -397
- package/dist/redirector/asset-manifest.json +2 -2
- package/dist/redirector/redirector.html__inline__12_404b8295.js.map +349 -0
- package/dist/redirector/{redirector_3e9a97b9.html → redirector_6df2620a.html} +369 -407
- package/dist/toolbar/asset-manifest.json +2 -2
- package/dist/toolbar/toolbar.main_279b3a68.js.map +764 -0
- package/dist/toolbar/{toolbar_361afb84.html → toolbar_0a91ca3b.html} +1509 -1583
- package/dist/toolbar_injector/asset-manifest.json +2 -2
- package/dist/toolbar_injector/{toolbar_injector_fac1e995.js → toolbar_injector_34f6ad8e.js} +18 -15
- package/dist/toolbar_injector/{toolbar_injector_fac1e995.js.map → toolbar_injector_34f6ad8e.js.map} +15 -15
- package/package.json +16 -12
- package/readme.md +54 -54
- package/src/buildProject.js +31 -26
- package/src/dev_server.js +111 -92
- package/src/execute.js +3 -8
- package/src/internal/browser_launcher/{browser_runtime_report.js → browser_runtime_profile.js} +21 -15
- package/src/internal/browser_launcher/executeHtmlFile.js +22 -14
- package/src/internal/browser_launcher/from_playwright.js +6 -4
- package/src/internal/browser_runtime/browser_runtime.js +12 -14
- package/src/internal/browser_runtime/createBrowserRuntime.js +7 -6
- package/src/internal/browser_utils/fetchAndEvalUsingFetch.js +1 -1
- package/src/internal/browser_utils/fetchJson.js +1 -1
- package/src/internal/browser_utils/{fetch-browser.js → fetch_browser.js} +0 -2
- package/src/internal/building/buildUsingRollup.js +41 -57
- package/src/internal/building/html/parseHtmlRessource.js +2 -1
- package/src/internal/building/rollup_plugin_jsenv.js +28 -8
- package/src/internal/compiling/babel_parse_error.js +9 -0
- package/src/internal/{babel_plugin_transform_import_meta.js → compiling/babel_plugin_transform_import_meta.js} +58 -9
- package/src/internal/compiling/compileFile.js +2 -2
- package/src/internal/compiling/compileHtml.js +1 -1
- package/src/internal/compiling/createCompiledFileService.js +25 -74
- package/src/internal/compiling/js-compilation-service/transformJs.js +153 -23
- package/src/internal/compiling/jsenvCompilerForHtml.js +29 -32
- package/src/internal/compiling/jsenvCompilerForImportmap.js +2 -2
- package/src/internal/compiling/jsenvCompilerForJavaScript.js +2 -4
- package/src/internal/compiling/jsenv_directory/comparison_utils.js +24 -0
- package/src/internal/compiling/{compile-directory/compile-asset.js → jsenv_directory/compile_asset.js} +0 -0
- package/src/internal/compiling/jsenv_directory/compile_context.js +68 -0
- package/src/internal/compiling/jsenv_directory/compile_profile.js +218 -0
- package/src/internal/compiling/{compile-directory/createLockRegistry.js → jsenv_directory/file_lock_registry.js} +0 -0
- package/src/internal/compiling/{compile-directory/createLockRegistry.test.js → jsenv_directory/file_lock_registry.test.js} +2 -1
- package/src/internal/compiling/{compile-directory → jsenv_directory}/fs-optimized-for-cache.js +0 -0
- package/src/internal/compiling/{compile-directory → jsenv_directory}/getOrGenerateCompiledFile.js +2 -2
- package/src/internal/compiling/jsenv_directory/jsenv_directory.js +174 -0
- package/src/internal/compiling/{compile-directory → jsenv_directory}/updateMeta.js +1 -1
- package/src/internal/compiling/{compile-directory → jsenv_directory}/validateCache.js +0 -0
- package/src/internal/compiling/sse_service/sse_service.js +369 -0
- package/src/internal/compiling/startCompileServer.js +157 -804
- package/src/internal/compiling/transformResultToCompilationResult.js +2 -2
- package/src/internal/dev_server/exploring/exploring.js +10 -8
- package/src/internal/dev_server/toolbar/compilation/toolbar.compilation.js +92 -78
- package/src/internal/dev_server/toolbar/settings/toolbar.settings.js +13 -0
- package/src/internal/dev_server/toolbar/toolbar.html +46 -16
- package/src/internal/dev_server/toolbar/toolbar.injector.js +17 -15
- package/src/internal/dev_server/toolbar/toolbar.main.js +12 -16
- package/src/internal/executing/executeConcurrently.js +1 -1
- package/src/internal/executing/executePlan.js +2 -3
- package/src/internal/{generateGroupMap → features}/babel_plugins_compatibility.js +8 -8
- package/src/internal/features/browser_feature_detection/browser_feature_detect_dynamic_import.js +20 -0
- package/src/internal/features/browser_feature_detection/browser_feature_detect_import_assertions_css.js +23 -0
- package/src/internal/features/browser_feature_detection/browser_feature_detect_import_assertions_json.js +25 -0
- package/src/internal/features/browser_feature_detection/browser_feature_detect_importmap.js +37 -0
- package/src/internal/features/browser_feature_detection/browser_feature_detect_new_stylesheet.js +9 -0
- package/src/internal/features/browser_feature_detection/browser_feature_detect_top_level_await.js +14 -0
- package/src/internal/features/browser_feature_detection/browser_feature_detection.js +89 -0
- package/src/internal/{browser_feature_detection → features/browser_feature_detection}/compile_proxy.html +1 -1
- package/src/internal/features/browser_feature_detection/execute_with_script_module.js +24 -0
- package/src/internal/features/features_compat_from_runtime.js +38 -0
- package/src/internal/features/features_compat_from_runtime_support.js +31 -0
- package/src/internal/{generateGroupMap → features}/features_compatibility.js +3 -3
- package/src/internal/{node_feature_detection → features/node_feature_detection}/feature_detect_dynamic_import.mjs +0 -0
- package/src/internal/{node_feature_detection → features/node_feature_detection}/feature_detect_top_level_await.mjs +0 -0
- package/src/internal/{node_feature_detection/nodeSupportsDynamicImport.js → features/node_feature_detection/node_feature_detect_dynamic_import.js} +0 -0
- package/src/internal/{node_feature_detection/nodeSupportsTopLevelAwait.js → features/node_feature_detection/node_feature_detect_top_level_await.js} +0 -0
- package/src/internal/features/node_feature_detection/node_feature_detection.js +66 -0
- package/src/internal/jsenv_remote_directory.js +1 -1
- package/src/internal/node_launcher/createControllableNodeProcess.js +4 -3
- package/src/internal/node_launcher/node_runtime_report.js +15 -9
- package/src/internal/node_runtime/fetchSource.js +2 -4
- package/src/internal/node_runtime/node_execution_systemjs.js +2 -5
- package/src/internal/redirector/redirector.html +40 -0
- package/src/internal/{generateGroupMap/jsenvRuntimeSupport.js → runtime_support/jsenv_runtime_support.js} +0 -0
- package/src/internal/{generateGroupMap → runtime_support}/runtime_support.js +0 -0
- package/src/internal/url_conversion.js +12 -17
- package/src/launchNode.js +29 -41
- package/dist/compile_proxy/compile_proxy.html__inline__20_809f35f7.js.map +0 -392
- package/dist/redirector/redirector.html__inline__15_e391410e.js.map +0 -397
- package/dist/toolbar/toolbar.main_6c1b3d82.js.map +0 -802
- package/src/internal/CONSTANTS.js +0 -11
- package/src/internal/browser_feature_detection/browser_feature_detection.js +0 -274
- package/src/internal/compiling/js-compilation-service/jsenvTransform.js +0 -242
- package/src/internal/dev_server/redirector/redirector.html +0 -48
- package/src/internal/generateGroupMap/generateGroupMap.js +0 -65
- package/src/internal/generateGroupMap/one_runtime_compat.js +0 -38
- package/src/internal/generateGroupMap/runtime_compat.js +0 -34
- package/src/internal/generateGroupMap/runtime_compat_composition.js +0 -76
- package/src/internal/generateGroupMap/shake_babel_plugin_map.js +0 -21
- package/src/internal/integrity/integrity_algorithms.js +0 -26
- package/src/internal/integrity/integrity_parsing.js +0 -50
- package/src/internal/integrity/integrity_update.js +0 -23
- package/src/internal/integrity/integrity_validation.js +0 -49
- package/src/internal/node_feature_detection/node_feature_detection.js +0 -117
- package/src/internal/node_runtime/detectNode.js +0 -3
- package/src/internal/runtime/computeCompileIdFromGroupId.js +0 -30
- package/src/internal/runtime/resolveGroup.js +0 -13
- package/src/internal/runtime/resolveRuntimeGroup.js +0 -11
|
@@ -313,7 +313,7 @@ export const collectHtmlDependenciesFromAst = (htmlAst) => {
|
|
|
313
313
|
const srcsetAttribute = getHtmlNodeAttributeByName(htmlNode, "srcset")
|
|
314
314
|
if (srcsetAttribute) {
|
|
315
315
|
const srcsetParts = parseSrcset(srcsetAttribute.value)
|
|
316
|
-
srcsetParts.
|
|
316
|
+
srcsetParts.forEach(({ specifier }) => {
|
|
317
317
|
dependencies.push({
|
|
318
318
|
htmlNode,
|
|
319
319
|
attribute: srcsetAttribute,
|
|
@@ -4,19 +4,14 @@ import {
|
|
|
4
4
|
resolveDirectoryUrl,
|
|
5
5
|
normalizeStructuredMetaMap,
|
|
6
6
|
urlToMeta,
|
|
7
|
+
urlToRelativeUrl,
|
|
7
8
|
} from "@jsenv/filesystem"
|
|
8
9
|
|
|
9
|
-
import {
|
|
10
|
-
import { shakeBabelPluginMap } from "@jsenv/core/src/internal/generateGroupMap/shake_babel_plugin_map.js"
|
|
10
|
+
import { REDIRECTOR_BUILD_URL } from "@jsenv/core/dist/build_manifest.js"
|
|
11
11
|
import { serverUrlToCompileInfo } from "@jsenv/core/src/internal/url_conversion.js"
|
|
12
|
-
|
|
13
12
|
import { setUrlExtension } from "../url_utils.js"
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
COMPILE_ID_BUILD_GLOBAL_FILES,
|
|
17
|
-
COMPILE_ID_BUILD_COMMONJS,
|
|
18
|
-
COMPILE_ID_BUILD_COMMONJS_FILES,
|
|
19
|
-
} from "../CONSTANTS.js"
|
|
13
|
+
|
|
14
|
+
import { shakeBabelPluginMap } from "./jsenv_directory/compile_profile.js"
|
|
20
15
|
import { compileFile } from "./compileFile.js"
|
|
21
16
|
import { compileHtml } from "./jsenvCompilerForHtml.js"
|
|
22
17
|
import { compileImportmap } from "./jsenvCompilerForImportmap.js"
|
|
@@ -39,20 +34,15 @@ export const createCompiledFileService = ({
|
|
|
39
34
|
|
|
40
35
|
projectDirectoryUrl,
|
|
41
36
|
jsenvDirectoryRelativeUrl,
|
|
42
|
-
|
|
37
|
+
jsenvDirectory,
|
|
43
38
|
jsenvRemoteDirectory,
|
|
44
39
|
|
|
45
|
-
runtimeSupport,
|
|
46
40
|
babelPluginMap,
|
|
47
|
-
moduleOutFormat,
|
|
48
|
-
importMetaFormat,
|
|
49
41
|
topLevelAwait,
|
|
50
42
|
prependSystemJs,
|
|
51
|
-
groupMap,
|
|
52
43
|
customCompilers,
|
|
53
44
|
workerUrls,
|
|
54
45
|
serviceWorkerUrls,
|
|
55
|
-
importMapInWebWorkers,
|
|
56
46
|
|
|
57
47
|
jsenvEventSourceClientInjection,
|
|
58
48
|
jsenvToolbarInjection,
|
|
@@ -62,17 +52,6 @@ export const createCompiledFileService = ({
|
|
|
62
52
|
sourcemapMethod,
|
|
63
53
|
sourcemapExcludeSources,
|
|
64
54
|
}) => {
|
|
65
|
-
const compileIdModuleFormats = {}
|
|
66
|
-
Object.keys(groupMap).forEach((groupName) => {
|
|
67
|
-
compileIdModuleFormats[groupName] = canAvoidSystemJs({
|
|
68
|
-
runtimeSupport: groupMap[groupName].minRuntimeVersions,
|
|
69
|
-
workerUrls,
|
|
70
|
-
importMapInWebWorkers,
|
|
71
|
-
})
|
|
72
|
-
? "esmodule"
|
|
73
|
-
: "systemjs"
|
|
74
|
-
})
|
|
75
|
-
|
|
76
55
|
Object.keys(customCompilers).forEach((key) => {
|
|
77
56
|
const value = customCompilers[key]
|
|
78
57
|
if (typeof value !== "function") {
|
|
@@ -88,27 +67,26 @@ export const createCompiledFileService = ({
|
|
|
88
67
|
},
|
|
89
68
|
projectDirectoryUrl,
|
|
90
69
|
)
|
|
91
|
-
|
|
92
70
|
const importmapInfos = {}
|
|
93
|
-
|
|
71
|
+
const redirectorRelativeUrlForProject = urlToRelativeUrl(
|
|
72
|
+
REDIRECTOR_BUILD_URL,
|
|
73
|
+
projectDirectoryUrl,
|
|
74
|
+
)
|
|
94
75
|
return async (request, { pushResponse, redirectRequest }) => {
|
|
95
76
|
const { origin, ressource } = request
|
|
96
77
|
const requestUrl = `${origin}${ressource}`
|
|
97
|
-
|
|
98
78
|
const requestCompileInfo = serverUrlToCompileInfo(requestUrl, {
|
|
99
|
-
outDirectoryRelativeUrl,
|
|
100
79
|
compileServerOrigin: origin,
|
|
80
|
+
jsenvDirectoryRelativeUrl,
|
|
101
81
|
})
|
|
102
|
-
|
|
103
82
|
// not inside compile directory -> nothing to compile
|
|
104
83
|
if (!requestCompileInfo.insideCompileDirectory) {
|
|
105
84
|
return null
|
|
106
85
|
}
|
|
107
|
-
|
|
108
86
|
const { compileId, afterCompileId } = requestCompileInfo
|
|
109
87
|
// serve files inside /.jsenv/* directly without compilation
|
|
110
88
|
// this is just to allow some files to be written inside outDirectory and read directly
|
|
111
|
-
// if asked by the client
|
|
89
|
+
// if asked by the client
|
|
112
90
|
if (!compileId) {
|
|
113
91
|
return fetchFileSystem(
|
|
114
92
|
new URL(request.ressource.slice(1), projectDirectoryUrl),
|
|
@@ -118,29 +96,27 @@ export const createCompiledFileService = ({
|
|
|
118
96
|
},
|
|
119
97
|
)
|
|
120
98
|
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
...Object.keys(groupMap),
|
|
124
|
-
COMPILE_ID_BUILD_GLOBAL,
|
|
125
|
-
COMPILE_ID_BUILD_GLOBAL_FILES,
|
|
126
|
-
COMPILE_ID_BUILD_COMMONJS,
|
|
127
|
-
COMPILE_ID_BUILD_COMMONJS_FILES,
|
|
128
|
-
]
|
|
129
|
-
if (!allowedCompileIds.includes(compileId)) {
|
|
99
|
+
const compileDirectory = jsenvDirectory.compileDirectories[compileId]
|
|
100
|
+
if (!compileDirectory) {
|
|
130
101
|
return {
|
|
131
|
-
status:
|
|
132
|
-
|
|
102
|
+
status: 307,
|
|
103
|
+
headers: {
|
|
104
|
+
location: `${
|
|
105
|
+
request.origin
|
|
106
|
+
}/${redirectorRelativeUrlForProject}?redirect=${encodeURIComponent(
|
|
107
|
+
afterCompileId,
|
|
108
|
+
)}`,
|
|
109
|
+
},
|
|
133
110
|
}
|
|
134
111
|
}
|
|
135
|
-
|
|
136
112
|
// nothing after compileId, we don't know what to compile (not supposed to happen)
|
|
137
113
|
if (afterCompileId === "") {
|
|
138
114
|
return null
|
|
139
115
|
}
|
|
140
|
-
|
|
116
|
+
const { compileProfile } = compileDirectory
|
|
141
117
|
const originalFileRelativeUrl = afterCompileId
|
|
142
118
|
const originalFileUrl = `${projectDirectoryUrl}${originalFileRelativeUrl}`
|
|
143
|
-
const compileDirectoryRelativeUrl = `${
|
|
119
|
+
const compileDirectoryRelativeUrl = `${jsenvDirectoryRelativeUrl}${compileId}/`
|
|
144
120
|
const compileDirectoryUrl = resolveDirectoryUrl(
|
|
145
121
|
compileDirectoryRelativeUrl,
|
|
146
122
|
projectDirectoryUrl,
|
|
@@ -181,24 +157,18 @@ export const createCompiledFileService = ({
|
|
|
181
157
|
jsenvRemoteDirectory,
|
|
182
158
|
compileServerOrigin: request.origin,
|
|
183
159
|
jsenvDirectoryRelativeUrl,
|
|
184
|
-
outDirectoryRelativeUrl,
|
|
185
160
|
url: originalFileUrl,
|
|
186
161
|
compiledUrl: compiledFileUrl,
|
|
187
162
|
request,
|
|
188
163
|
|
|
164
|
+
compileProfile,
|
|
189
165
|
compileId,
|
|
190
166
|
babelPluginMap: shakeBabelPluginMap({
|
|
191
167
|
babelPluginMap,
|
|
192
|
-
|
|
168
|
+
compileProfile,
|
|
193
169
|
}),
|
|
194
|
-
runtimeSupport,
|
|
195
170
|
workerUrls,
|
|
196
171
|
serviceWorkerUrls,
|
|
197
|
-
moduleOutFormat:
|
|
198
|
-
moduleOutFormat === undefined
|
|
199
|
-
? compileIdModuleFormats[compileId]
|
|
200
|
-
: moduleOutFormat,
|
|
201
|
-
importMetaFormat,
|
|
202
172
|
topLevelAwait,
|
|
203
173
|
prependSystemJs,
|
|
204
174
|
|
|
@@ -217,25 +187,6 @@ export const createCompiledFileService = ({
|
|
|
217
187
|
}
|
|
218
188
|
}
|
|
219
189
|
|
|
220
|
-
const canAvoidSystemJs = ({
|
|
221
|
-
runtimeSupport,
|
|
222
|
-
workerUrls,
|
|
223
|
-
importMapInWebWorkers,
|
|
224
|
-
}) => {
|
|
225
|
-
const runtimeCompatMap = createRuntimeCompat({
|
|
226
|
-
featureNames: [
|
|
227
|
-
"module",
|
|
228
|
-
"importmap",
|
|
229
|
-
"import_assertion_type_json",
|
|
230
|
-
"import_assertion_type_css",
|
|
231
|
-
...(workerUrls.length > 0 ? ["worker_type_module"] : []),
|
|
232
|
-
...(importMapInWebWorkers ? ["worker_importmap"] : []),
|
|
233
|
-
],
|
|
234
|
-
runtimeSupport,
|
|
235
|
-
})
|
|
236
|
-
return runtimeCompatMap.missingFeatureNames.length === 0
|
|
237
|
-
}
|
|
238
|
-
|
|
239
190
|
const getCompiler = ({ originalFileUrl, compileMeta }) => {
|
|
240
191
|
// we remove eventual query param from the url
|
|
241
192
|
// Without this a pattern like "**/*.js" would not match "file.js?t=1"
|
|
@@ -1,6 +1,20 @@
|
|
|
1
|
-
import { urlToRelativeUrl } from "@jsenv/filesystem"
|
|
1
|
+
import { urlToRelativeUrl, urlToFileSystemPath } from "@jsenv/filesystem"
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { require } from "@jsenv/core/src/internal/require.js"
|
|
4
|
+
import { createParseError } from "@jsenv/core/src/internal/compiling/babel_parse_error.js"
|
|
5
|
+
import { babelPluginTransformImportMeta } from "@jsenv/core/src/internal/compiling/babel_plugin_transform_import_meta.js"
|
|
6
|
+
import {
|
|
7
|
+
getMinimalBabelPluginMap,
|
|
8
|
+
babelPluginsFromBabelPluginMap,
|
|
9
|
+
} from "@jsenv/core/src/internal/compiling/babel_plugins.js"
|
|
10
|
+
import { babelPluginProxyExternalImports } from "@jsenv/core/src/internal/compiling/babel_plugin_proxy_external_imports.js"
|
|
11
|
+
import { babelPluginImportMetadata } from "@jsenv/core/src/internal/compiling/babel_plugin_import_metadata.js"
|
|
12
|
+
|
|
13
|
+
import { ansiToHTML } from "./ansiToHTML.js"
|
|
14
|
+
import { babelPluginRegeneratorRuntimeAsJsenvImport } from "./babel_plugin_regenerator_runtime_as_jsenv_import.js"
|
|
15
|
+
import { babelPluginBabelHelpersAsJsenvImports } from "./babel_plugin_babel_helpers_as_jsenv_imports.js"
|
|
16
|
+
import { babelPluginSystemJsPrepend } from "./babel_plugin_systemjs_prepend.js"
|
|
17
|
+
import { babelHelperNameFromUrl } from "./babelHelper.js"
|
|
4
18
|
|
|
5
19
|
export const transformJs = async ({
|
|
6
20
|
projectDirectoryUrl,
|
|
@@ -17,6 +31,7 @@ export const transformJs = async ({
|
|
|
17
31
|
sourcemapEnabled = true,
|
|
18
32
|
|
|
19
33
|
map,
|
|
34
|
+
ast,
|
|
20
35
|
code,
|
|
21
36
|
}) => {
|
|
22
37
|
if (typeof projectDirectoryUrl !== "string") {
|
|
@@ -40,29 +55,144 @@ export const transformJs = async ({
|
|
|
40
55
|
`babelHelpersInjectionAsImport can be enabled only when "moduleOutFormat" is "esmodule"`,
|
|
41
56
|
)
|
|
42
57
|
}
|
|
58
|
+
const relativeUrl = url.startsWith(projectDirectoryUrl)
|
|
59
|
+
? urlToRelativeUrl(url, projectDirectoryUrl)
|
|
60
|
+
: undefined
|
|
43
61
|
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
62
|
+
const inputPath = computeInputPath(url)
|
|
63
|
+
// https://babeljs.io/docs/en/options
|
|
64
|
+
const options = {
|
|
65
|
+
filename: inputPath,
|
|
66
|
+
filenameRelative: relativeUrl,
|
|
67
|
+
inputSourceMap: map,
|
|
68
|
+
configFile: false,
|
|
69
|
+
babelrc: false, // trust only these options, do not read any babelrc config file
|
|
70
|
+
ast: true,
|
|
71
|
+
sourceMaps: sourcemapEnabled,
|
|
72
|
+
sourceFileName: inputPath,
|
|
73
|
+
// https://babeljs.io/docs/en/options#parseropts
|
|
74
|
+
parserOpts: {
|
|
75
|
+
allowAwaitOutsideFunction:
|
|
76
|
+
topLevelAwait === undefined ||
|
|
77
|
+
topLevelAwait === "return" ||
|
|
78
|
+
topLevelAwait === "simple" ||
|
|
79
|
+
topLevelAwait === "ignore",
|
|
80
|
+
},
|
|
81
|
+
generatorOpts: {
|
|
82
|
+
compact: false,
|
|
83
|
+
},
|
|
84
|
+
}
|
|
85
|
+
const babelHelperName = babelHelperNameFromUrl(url)
|
|
86
|
+
// to prevent typeof circular dependency
|
|
87
|
+
if (babelHelperName === "typeof") {
|
|
88
|
+
const babelPluginMapWithoutTransformTypeOf = { ...babelPluginMap }
|
|
89
|
+
delete babelPluginMapWithoutTransformTypeOf["transform-typeof-symbol"]
|
|
90
|
+
babelPluginMap = babelPluginMapWithoutTransformTypeOf
|
|
91
|
+
}
|
|
92
|
+
if (transformGenerator) {
|
|
93
|
+
babelPluginMap = {
|
|
94
|
+
...babelPluginMap,
|
|
95
|
+
"regenerator-runtime-as-jsenv-import": [
|
|
96
|
+
babelPluginRegeneratorRuntimeAsJsenvImport,
|
|
97
|
+
],
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
babelPluginMap = {
|
|
101
|
+
...getMinimalBabelPluginMap(),
|
|
102
|
+
"transform-import-meta": [
|
|
103
|
+
babelPluginTransformImportMeta,
|
|
104
|
+
{
|
|
105
|
+
importMetaFormat,
|
|
106
|
+
},
|
|
107
|
+
],
|
|
108
|
+
...babelPluginMap,
|
|
109
|
+
...(babelHelpersInjectionAsImport
|
|
110
|
+
? {
|
|
111
|
+
"babel-helpers-as-jsenv-imports": [
|
|
112
|
+
babelPluginBabelHelpersAsJsenvImports,
|
|
113
|
+
],
|
|
114
|
+
}
|
|
115
|
+
: {}),
|
|
116
|
+
...(jsenvRemoteDirectory
|
|
117
|
+
? {
|
|
118
|
+
"proxy-external-imports": [
|
|
119
|
+
babelPluginProxyExternalImports,
|
|
120
|
+
{ jsenvRemoteDirectory },
|
|
121
|
+
],
|
|
122
|
+
}
|
|
123
|
+
: {}),
|
|
124
|
+
"import-metadata": [babelPluginImportMetadata],
|
|
125
|
+
}
|
|
126
|
+
if (moduleOutFormat === "systemjs") {
|
|
127
|
+
const transformModulesSystemJs = require("@babel/plugin-transform-modules-systemjs")
|
|
128
|
+
const proposalDynamicImport = require("@babel/plugin-proposal-dynamic-import")
|
|
129
|
+
babelPluginMap = {
|
|
130
|
+
...babelPluginMap,
|
|
131
|
+
"proposal-dynamic-import": [proposalDynamicImport],
|
|
132
|
+
"transform-modules-systemjs": [transformModulesSystemJs],
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
if (prependSystemJs) {
|
|
136
|
+
babelPluginMap = {
|
|
137
|
+
...babelPluginMap,
|
|
138
|
+
"systemjs-prepend": [babelPluginSystemJsPrepend],
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
const asyncToPromise = babelPluginMap["transform-async-to-promises"]
|
|
143
|
+
if (topLevelAwait && asyncToPromise) {
|
|
144
|
+
asyncToPromise.options.topLevelAwait = topLevelAwait
|
|
145
|
+
}
|
|
146
|
+
const babelTransformReturnValue = await babelTransform({
|
|
147
|
+
ast,
|
|
51
148
|
code,
|
|
52
|
-
|
|
149
|
+
options: {
|
|
150
|
+
...options,
|
|
151
|
+
plugins: babelPluginsFromBabelPluginMap(babelPluginMap),
|
|
152
|
+
},
|
|
153
|
+
})
|
|
154
|
+
code = babelTransformReturnValue.code
|
|
155
|
+
map = babelTransformReturnValue.map
|
|
156
|
+
ast = babelTransformReturnValue.ast
|
|
157
|
+
const { metadata } = babelTransformReturnValue
|
|
158
|
+
return { code, map, metadata, ast }
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
const computeInputPath = (url) => {
|
|
162
|
+
if (url.startsWith("file://")) {
|
|
163
|
+
return urlToFileSystemPath(url)
|
|
164
|
+
}
|
|
165
|
+
return url
|
|
166
|
+
}
|
|
53
167
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
importMetaFormat,
|
|
168
|
+
const babelTransform = async ({ ast, code, options }) => {
|
|
169
|
+
const { transformAsync, transformFromAstAsync } = await import("@babel/core")
|
|
57
170
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
171
|
+
try {
|
|
172
|
+
if (ast) {
|
|
173
|
+
const result = await transformFromAstAsync(ast, code, options)
|
|
174
|
+
return result
|
|
175
|
+
}
|
|
176
|
+
return await transformAsync(code, options)
|
|
177
|
+
} catch (error) {
|
|
178
|
+
if (error && error.code === "BABEL_PARSE_ERROR") {
|
|
179
|
+
const message = error.message
|
|
180
|
+
const messageWithoutAnsi = message.replace(ansiRegex, "")
|
|
181
|
+
throw createParseError({
|
|
182
|
+
cause: error,
|
|
183
|
+
message: messageWithoutAnsi,
|
|
184
|
+
messageHTML: ansiToHTML(message),
|
|
185
|
+
filename: options.filename,
|
|
186
|
+
lineNumber: error.loc.line,
|
|
187
|
+
columnNumber: error.loc.column,
|
|
188
|
+
})
|
|
189
|
+
}
|
|
190
|
+
throw error
|
|
191
|
+
}
|
|
68
192
|
}
|
|
193
|
+
|
|
194
|
+
const pattern = [
|
|
195
|
+
"[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)",
|
|
196
|
+
"(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))",
|
|
197
|
+
].join("|")
|
|
198
|
+
const ansiRegex = new RegExp(pattern, "g")
|
|
@@ -36,7 +36,7 @@ import {
|
|
|
36
36
|
visitHtmlAst,
|
|
37
37
|
addHtmlNodeAttribute,
|
|
38
38
|
} from "./compileHtml.js"
|
|
39
|
-
import { generateCompilationAssetUrl } from "./
|
|
39
|
+
import { generateCompilationAssetUrl } from "./jsenv_directory/compile_asset.js"
|
|
40
40
|
|
|
41
41
|
export const compileHtml = async ({
|
|
42
42
|
// cancellationToken,
|
|
@@ -46,12 +46,11 @@ export const compileHtml = async ({
|
|
|
46
46
|
projectDirectoryUrl,
|
|
47
47
|
jsenvRemoteDirectory,
|
|
48
48
|
compileServerOrigin,
|
|
49
|
-
|
|
49
|
+
jsenvDirectoryRelativeUrl,
|
|
50
50
|
|
|
51
|
+
compileProfile,
|
|
51
52
|
compileId,
|
|
52
53
|
babelPluginMap,
|
|
53
|
-
moduleOutFormat,
|
|
54
|
-
importMetaFormat,
|
|
55
54
|
topLevelAwait,
|
|
56
55
|
jsenvScriptInjection = true,
|
|
57
56
|
jsenvEventSourceClientInjection,
|
|
@@ -61,7 +60,7 @@ export const compileHtml = async ({
|
|
|
61
60
|
sourcemapMethod,
|
|
62
61
|
code,
|
|
63
62
|
}) => {
|
|
64
|
-
const compileDirectoryUrl = `${projectDirectoryUrl}${
|
|
63
|
+
const compileDirectoryUrl = `${projectDirectoryUrl}${jsenvDirectoryRelativeUrl}${compileId}/`
|
|
65
64
|
const browserRuntimeBuildUrlRelativeToProject = urlToRelativeUrl(
|
|
66
65
|
BROWSER_RUNTIME_BUILD_URL,
|
|
67
66
|
projectDirectoryUrl,
|
|
@@ -133,7 +132,7 @@ export const compileHtml = async ({
|
|
|
133
132
|
specifier,
|
|
134
133
|
})
|
|
135
134
|
}
|
|
136
|
-
if (moduleOutFormat !== "esmodule") {
|
|
135
|
+
if (compileProfile.moduleOutFormat !== "esmodule") {
|
|
137
136
|
const ressourceHints = collectRessourceHints(htmlAst)
|
|
138
137
|
await visitRessourceHints({
|
|
139
138
|
ressourceHints,
|
|
@@ -141,13 +140,15 @@ export const compileHtml = async ({
|
|
|
141
140
|
})
|
|
142
141
|
}
|
|
143
142
|
await visitImportmapScript({
|
|
144
|
-
htmlAst,
|
|
145
143
|
logger,
|
|
146
144
|
url,
|
|
147
145
|
compiledUrl,
|
|
148
146
|
projectDirectoryUrl,
|
|
149
147
|
compileDirectoryUrl,
|
|
150
|
-
|
|
148
|
+
|
|
149
|
+
compileProfile,
|
|
150
|
+
|
|
151
|
+
htmlAst,
|
|
151
152
|
scripts,
|
|
152
153
|
addHtmlMutation,
|
|
153
154
|
addHtmlSourceFile,
|
|
@@ -161,9 +162,8 @@ export const compileHtml = async ({
|
|
|
161
162
|
url,
|
|
162
163
|
compiledUrl,
|
|
163
164
|
|
|
165
|
+
compileProfile,
|
|
164
166
|
babelPluginMap,
|
|
165
|
-
moduleOutFormat,
|
|
166
|
-
importMetaFormat,
|
|
167
167
|
topLevelAwait,
|
|
168
168
|
sourcemapMethod,
|
|
169
169
|
|
|
@@ -246,13 +246,15 @@ const visitRessourceHints = async ({ ressourceHints, addHtmlMutation }) => {
|
|
|
246
246
|
}
|
|
247
247
|
|
|
248
248
|
const visitImportmapScript = async ({
|
|
249
|
-
htmlAst,
|
|
250
249
|
logger,
|
|
251
250
|
url,
|
|
252
251
|
compiledUrl,
|
|
253
252
|
projectDirectoryUrl,
|
|
254
253
|
compileDirectoryUrl,
|
|
255
|
-
|
|
254
|
+
|
|
255
|
+
compileProfile,
|
|
256
|
+
|
|
257
|
+
htmlAst,
|
|
256
258
|
scripts,
|
|
257
259
|
addHtmlMutation,
|
|
258
260
|
addHtmlSourceFile,
|
|
@@ -280,7 +282,7 @@ const visitImportmapScript = async ({
|
|
|
280
282
|
scriptInjections: [
|
|
281
283
|
{
|
|
282
284
|
type:
|
|
283
|
-
moduleOutFormat === "systemjs"
|
|
285
|
+
compileProfile.moduleOutFormat === "systemjs"
|
|
284
286
|
? "systemjs-importmap"
|
|
285
287
|
: "importmap",
|
|
286
288
|
text: defaultImportMapAsText,
|
|
@@ -330,7 +332,7 @@ const visitImportmapScript = async ({
|
|
|
330
332
|
addHtmlMutation(() => {
|
|
331
333
|
removeHtmlNodeAttribute(firstImportmapScript, srcAttribute)
|
|
332
334
|
setHtmlNodeText(firstImportmapScript, importmapAsText)
|
|
333
|
-
if (moduleOutFormat === "systemjs") {
|
|
335
|
+
if (compileProfile.moduleOutFormat === "systemjs") {
|
|
334
336
|
const typeAttribute = getHtmlNodeAttributeByName(
|
|
335
337
|
firstImportmapScript,
|
|
336
338
|
"type",
|
|
@@ -357,7 +359,7 @@ const visitImportmapScript = async ({
|
|
|
357
359
|
addHtmlMutation(() => {
|
|
358
360
|
removeHtmlNodeAttribute(firstImportmapScript, srcAttribute)
|
|
359
361
|
setHtmlNodeText(firstImportmapScript, importmapAsText)
|
|
360
|
-
if (moduleOutFormat === "systemjs") {
|
|
362
|
+
if (compileProfile.moduleOutFormat === "systemjs") {
|
|
361
363
|
const typeAttribute = getHtmlNodeAttributeByName(
|
|
362
364
|
firstImportmapScript,
|
|
363
365
|
"type",
|
|
@@ -371,14 +373,13 @@ const visitImportmapScript = async ({
|
|
|
371
373
|
const visitScripts = async ({
|
|
372
374
|
logger,
|
|
373
375
|
projectDirectoryUrl,
|
|
374
|
-
compileServerOrigin,
|
|
375
376
|
jsenvRemoteDirectory,
|
|
377
|
+
compileServerOrigin,
|
|
376
378
|
url,
|
|
377
379
|
compiledUrl,
|
|
378
380
|
|
|
381
|
+
compileProfile,
|
|
379
382
|
babelPluginMap,
|
|
380
|
-
moduleOutFormat,
|
|
381
|
-
importMetaFormat,
|
|
382
383
|
topLevelAwait,
|
|
383
384
|
sourcemapMethod,
|
|
384
385
|
|
|
@@ -398,7 +399,7 @@ const visitScripts = async ({
|
|
|
398
399
|
if (type === "module") {
|
|
399
400
|
if (src) {
|
|
400
401
|
addHtmlMutation(() => {
|
|
401
|
-
if (moduleOutFormat === "systemjs") {
|
|
402
|
+
if (compileProfile.moduleOutFormat === "systemjs") {
|
|
402
403
|
removeHtmlNodeAttribute(script, typeAttribute)
|
|
403
404
|
}
|
|
404
405
|
if (integrityAttribute) {
|
|
@@ -406,7 +407,7 @@ const visitScripts = async ({
|
|
|
406
407
|
}
|
|
407
408
|
removeHtmlNodeAttribute(script, srcAttribute)
|
|
408
409
|
const jsenvMethod =
|
|
409
|
-
moduleOutFormat === "systemjs"
|
|
410
|
+
compileProfile.moduleOutFormat === "systemjs"
|
|
410
411
|
? "executeFileUsingSystemJs"
|
|
411
412
|
: "executeFileUsingDynamicImport"
|
|
412
413
|
let specifier
|
|
@@ -442,9 +443,8 @@ const visitScripts = async ({
|
|
|
442
443
|
compiledUrl: scriptCompiledUrl,
|
|
443
444
|
|
|
444
445
|
type: "module",
|
|
446
|
+
compileProfile,
|
|
445
447
|
babelPluginMap,
|
|
446
|
-
moduleOutFormat,
|
|
447
|
-
importMetaFormat,
|
|
448
448
|
topLevelAwait,
|
|
449
449
|
|
|
450
450
|
sourcemapMethod,
|
|
@@ -453,12 +453,12 @@ const visitScripts = async ({
|
|
|
453
453
|
})
|
|
454
454
|
const specifier = `./${urlToRelativeUrl(scriptCompiledUrl, compiledUrl)}`
|
|
455
455
|
addHtmlMutation(() => {
|
|
456
|
-
if (moduleOutFormat === "systemjs") {
|
|
456
|
+
if (compileProfile.moduleOutFormat === "systemjs") {
|
|
457
457
|
removeHtmlNodeAttribute(script, typeAttribute)
|
|
458
458
|
}
|
|
459
459
|
removeHtmlNodeAttribute(script, srcAttribute)
|
|
460
460
|
const jsenvMethod =
|
|
461
|
-
moduleOutFormat === "systemjs"
|
|
461
|
+
compileProfile.moduleOutFormat === "systemjs"
|
|
462
462
|
? "executeFileUsingSystemJs"
|
|
463
463
|
: "executeFileUsingDynamicImport"
|
|
464
464
|
setHtmlNodeText(
|
|
@@ -531,9 +531,8 @@ const visitScripts = async ({
|
|
|
531
531
|
compiledUrl: scriptCompiledUrl,
|
|
532
532
|
|
|
533
533
|
type: "classic",
|
|
534
|
+
compileProfile,
|
|
534
535
|
babelPluginMap,
|
|
535
|
-
moduleOutFormat,
|
|
536
|
-
importMetaFormat,
|
|
537
536
|
topLevelAwait,
|
|
538
537
|
|
|
539
538
|
sourcemapMethod,
|
|
@@ -566,9 +565,8 @@ const visitScripts = async ({
|
|
|
566
565
|
compiledUrl: scriptCompiledUrl,
|
|
567
566
|
|
|
568
567
|
type: "classic",
|
|
568
|
+
compileProfile,
|
|
569
569
|
babelPluginMap,
|
|
570
|
-
moduleOutFormat,
|
|
571
|
-
importMetaFormat,
|
|
572
570
|
topLevelAwait,
|
|
573
571
|
|
|
574
572
|
code: textNode.value,
|
|
@@ -591,9 +589,8 @@ const transformHtmlScript = async ({
|
|
|
591
589
|
compiledUrl,
|
|
592
590
|
|
|
593
591
|
type,
|
|
592
|
+
compileProfile,
|
|
594
593
|
babelPluginMap,
|
|
595
|
-
moduleOutFormat,
|
|
596
|
-
importMetaFormat,
|
|
597
594
|
topLevelAwait,
|
|
598
595
|
|
|
599
596
|
code,
|
|
@@ -608,8 +605,8 @@ const transformHtmlScript = async ({
|
|
|
608
605
|
compiledUrl,
|
|
609
606
|
|
|
610
607
|
babelPluginMap,
|
|
611
|
-
moduleOutFormat:
|
|
612
|
-
|
|
608
|
+
moduleOutFormat:
|
|
609
|
+
type === "module" ? compileProfile.moduleOutFormat : "global",
|
|
613
610
|
topLevelAwait: type === "module" ? topLevelAwait : false,
|
|
614
611
|
babelHelpersInjectionAsImport: type === "module" ? undefined : false,
|
|
615
612
|
|
|
@@ -7,12 +7,12 @@ export const compileImportmap = async ({
|
|
|
7
7
|
url,
|
|
8
8
|
compiledUrl,
|
|
9
9
|
projectDirectoryUrl,
|
|
10
|
-
|
|
10
|
+
jsenvDirectoryRelativeUrl,
|
|
11
11
|
compileId,
|
|
12
12
|
}) => {
|
|
13
13
|
const jsenvImportmap = getDefaultImportmap(compiledUrl, {
|
|
14
14
|
projectDirectoryUrl,
|
|
15
|
-
compileDirectoryUrl: `${projectDirectoryUrl}${
|
|
15
|
+
compileDirectoryUrl: `${projectDirectoryUrl}${jsenvDirectoryRelativeUrl}${compileId}/`,
|
|
16
16
|
})
|
|
17
17
|
const projectImportmap = JSON.parse(code)
|
|
18
18
|
const importmap = composeTwoImportMaps(jsenvImportmap, projectImportmap)
|
|
@@ -9,11 +9,10 @@ export const compileJavascript = async ({
|
|
|
9
9
|
url,
|
|
10
10
|
compiledUrl,
|
|
11
11
|
|
|
12
|
+
compileProfile,
|
|
12
13
|
babelPluginMap,
|
|
13
14
|
workerUrls,
|
|
14
15
|
serviceWorkerUrls,
|
|
15
|
-
moduleOutFormat,
|
|
16
|
-
importMetaFormat,
|
|
17
16
|
topLevelAwait,
|
|
18
17
|
prependSystemJs,
|
|
19
18
|
|
|
@@ -33,8 +32,7 @@ export const compileJavascript = async ({
|
|
|
33
32
|
compiledUrl,
|
|
34
33
|
|
|
35
34
|
babelPluginMap,
|
|
36
|
-
moduleOutFormat,
|
|
37
|
-
importMetaFormat,
|
|
35
|
+
moduleOutFormat: compileProfile.moduleOutFormat,
|
|
38
36
|
topLevelAwait,
|
|
39
37
|
prependSystemJs,
|
|
40
38
|
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export const sameValueInTwoObjects = (object, secondObject) => {
|
|
2
|
+
const objectKeys = Object.keys(object)
|
|
3
|
+
const secondObjectKeys = Object.keys(secondObject)
|
|
4
|
+
if (!sameValuesInTwoArrays(objectKeys, secondObjectKeys)) {
|
|
5
|
+
return false
|
|
6
|
+
}
|
|
7
|
+
return objectKeys.every((key) => {
|
|
8
|
+
const objectKeyValue = object[key]
|
|
9
|
+
const secondObjectKeyValue = secondObject[key]
|
|
10
|
+
if (
|
|
11
|
+
typeof objectKeyValue === "object" &&
|
|
12
|
+
objectKeyValue !== null &&
|
|
13
|
+
typeof secondObjectKeyValue === "object" &&
|
|
14
|
+
secondObjectKeyValue !== null
|
|
15
|
+
) {
|
|
16
|
+
return sameValueInTwoObjects(objectKeyValue, secondObjectKeyValue)
|
|
17
|
+
}
|
|
18
|
+
return objectKeyValue === secondObjectKeyValue
|
|
19
|
+
})
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export const sameValuesInTwoArrays = (array, secondArray) => {
|
|
23
|
+
return array.every((value) => secondArray.includes(value))
|
|
24
|
+
}
|
|
File without changes
|