@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.
Files changed (112) hide show
  1. package/dist/browser_runtime/asset-manifest.json +2 -2
  2. package/dist/browser_runtime/{browser_runtime_91c5a3b8.js → browser_runtime_0e3396a1.js} +15 -16
  3. package/dist/browser_runtime/{browser_runtime_91c5a3b8.js.map → browser_runtime_0e3396a1.js.map} +13 -13
  4. package/dist/build_manifest.js +5 -5
  5. package/dist/compile_proxy/asset-manifest.json +2 -2
  6. package/dist/compile_proxy/compile_proxy.html__inline__20_f4285042.js.map +343 -0
  7. package/dist/compile_proxy/{compile_proxy_8dfaee51.html → compile_proxy_ab528227.html} +358 -397
  8. package/dist/redirector/asset-manifest.json +2 -2
  9. package/dist/redirector/redirector.html__inline__12_404b8295.js.map +349 -0
  10. package/dist/redirector/{redirector_3e9a97b9.html → redirector_6df2620a.html} +369 -407
  11. package/dist/toolbar/asset-manifest.json +2 -2
  12. package/dist/toolbar/toolbar.main_279b3a68.js.map +764 -0
  13. package/dist/toolbar/{toolbar_361afb84.html → toolbar_0a91ca3b.html} +1509 -1583
  14. package/dist/toolbar_injector/asset-manifest.json +2 -2
  15. package/dist/toolbar_injector/{toolbar_injector_fac1e995.js → toolbar_injector_34f6ad8e.js} +18 -15
  16. package/dist/toolbar_injector/{toolbar_injector_fac1e995.js.map → toolbar_injector_34f6ad8e.js.map} +15 -15
  17. package/package.json +16 -12
  18. package/readme.md +54 -54
  19. package/src/buildProject.js +31 -26
  20. package/src/dev_server.js +111 -92
  21. package/src/execute.js +3 -8
  22. package/src/internal/browser_launcher/{browser_runtime_report.js → browser_runtime_profile.js} +21 -15
  23. package/src/internal/browser_launcher/executeHtmlFile.js +22 -14
  24. package/src/internal/browser_launcher/from_playwright.js +6 -4
  25. package/src/internal/browser_runtime/browser_runtime.js +12 -14
  26. package/src/internal/browser_runtime/createBrowserRuntime.js +7 -6
  27. package/src/internal/browser_utils/fetchAndEvalUsingFetch.js +1 -1
  28. package/src/internal/browser_utils/fetchJson.js +1 -1
  29. package/src/internal/browser_utils/{fetch-browser.js → fetch_browser.js} +0 -2
  30. package/src/internal/building/buildUsingRollup.js +41 -57
  31. package/src/internal/building/html/parseHtmlRessource.js +2 -1
  32. package/src/internal/building/rollup_plugin_jsenv.js +28 -8
  33. package/src/internal/compiling/babel_parse_error.js +9 -0
  34. package/src/internal/{babel_plugin_transform_import_meta.js → compiling/babel_plugin_transform_import_meta.js} +58 -9
  35. package/src/internal/compiling/compileFile.js +2 -2
  36. package/src/internal/compiling/compileHtml.js +1 -1
  37. package/src/internal/compiling/createCompiledFileService.js +25 -74
  38. package/src/internal/compiling/js-compilation-service/transformJs.js +153 -23
  39. package/src/internal/compiling/jsenvCompilerForHtml.js +29 -32
  40. package/src/internal/compiling/jsenvCompilerForImportmap.js +2 -2
  41. package/src/internal/compiling/jsenvCompilerForJavaScript.js +2 -4
  42. package/src/internal/compiling/jsenv_directory/comparison_utils.js +24 -0
  43. package/src/internal/compiling/{compile-directory/compile-asset.js → jsenv_directory/compile_asset.js} +0 -0
  44. package/src/internal/compiling/jsenv_directory/compile_context.js +68 -0
  45. package/src/internal/compiling/jsenv_directory/compile_profile.js +218 -0
  46. package/src/internal/compiling/{compile-directory/createLockRegistry.js → jsenv_directory/file_lock_registry.js} +0 -0
  47. package/src/internal/compiling/{compile-directory/createLockRegistry.test.js → jsenv_directory/file_lock_registry.test.js} +2 -1
  48. package/src/internal/compiling/{compile-directory → jsenv_directory}/fs-optimized-for-cache.js +0 -0
  49. package/src/internal/compiling/{compile-directory → jsenv_directory}/getOrGenerateCompiledFile.js +2 -2
  50. package/src/internal/compiling/jsenv_directory/jsenv_directory.js +174 -0
  51. package/src/internal/compiling/{compile-directory → jsenv_directory}/updateMeta.js +1 -1
  52. package/src/internal/compiling/{compile-directory → jsenv_directory}/validateCache.js +0 -0
  53. package/src/internal/compiling/sse_service/sse_service.js +369 -0
  54. package/src/internal/compiling/startCompileServer.js +157 -804
  55. package/src/internal/compiling/transformResultToCompilationResult.js +2 -2
  56. package/src/internal/dev_server/exploring/exploring.js +10 -8
  57. package/src/internal/dev_server/toolbar/compilation/toolbar.compilation.js +92 -78
  58. package/src/internal/dev_server/toolbar/settings/toolbar.settings.js +13 -0
  59. package/src/internal/dev_server/toolbar/toolbar.html +46 -16
  60. package/src/internal/dev_server/toolbar/toolbar.injector.js +17 -15
  61. package/src/internal/dev_server/toolbar/toolbar.main.js +12 -16
  62. package/src/internal/executing/executeConcurrently.js +1 -1
  63. package/src/internal/executing/executePlan.js +2 -3
  64. package/src/internal/{generateGroupMap → features}/babel_plugins_compatibility.js +8 -8
  65. package/src/internal/features/browser_feature_detection/browser_feature_detect_dynamic_import.js +20 -0
  66. package/src/internal/features/browser_feature_detection/browser_feature_detect_import_assertions_css.js +23 -0
  67. package/src/internal/features/browser_feature_detection/browser_feature_detect_import_assertions_json.js +25 -0
  68. package/src/internal/features/browser_feature_detection/browser_feature_detect_importmap.js +37 -0
  69. package/src/internal/features/browser_feature_detection/browser_feature_detect_new_stylesheet.js +9 -0
  70. package/src/internal/features/browser_feature_detection/browser_feature_detect_top_level_await.js +14 -0
  71. package/src/internal/features/browser_feature_detection/browser_feature_detection.js +89 -0
  72. package/src/internal/{browser_feature_detection → features/browser_feature_detection}/compile_proxy.html +1 -1
  73. package/src/internal/features/browser_feature_detection/execute_with_script_module.js +24 -0
  74. package/src/internal/features/features_compat_from_runtime.js +38 -0
  75. package/src/internal/features/features_compat_from_runtime_support.js +31 -0
  76. package/src/internal/{generateGroupMap → features}/features_compatibility.js +3 -3
  77. package/src/internal/{node_feature_detection → features/node_feature_detection}/feature_detect_dynamic_import.mjs +0 -0
  78. package/src/internal/{node_feature_detection → features/node_feature_detection}/feature_detect_top_level_await.mjs +0 -0
  79. package/src/internal/{node_feature_detection/nodeSupportsDynamicImport.js → features/node_feature_detection/node_feature_detect_dynamic_import.js} +0 -0
  80. package/src/internal/{node_feature_detection/nodeSupportsTopLevelAwait.js → features/node_feature_detection/node_feature_detect_top_level_await.js} +0 -0
  81. package/src/internal/features/node_feature_detection/node_feature_detection.js +66 -0
  82. package/src/internal/jsenv_remote_directory.js +1 -1
  83. package/src/internal/node_launcher/createControllableNodeProcess.js +4 -3
  84. package/src/internal/node_launcher/node_runtime_report.js +15 -9
  85. package/src/internal/node_runtime/fetchSource.js +2 -4
  86. package/src/internal/node_runtime/node_execution_systemjs.js +2 -5
  87. package/src/internal/redirector/redirector.html +40 -0
  88. package/src/internal/{generateGroupMap/jsenvRuntimeSupport.js → runtime_support/jsenv_runtime_support.js} +0 -0
  89. package/src/internal/{generateGroupMap → runtime_support}/runtime_support.js +0 -0
  90. package/src/internal/url_conversion.js +12 -17
  91. package/src/launchNode.js +29 -41
  92. package/dist/compile_proxy/compile_proxy.html__inline__20_809f35f7.js.map +0 -392
  93. package/dist/redirector/redirector.html__inline__15_e391410e.js.map +0 -397
  94. package/dist/toolbar/toolbar.main_6c1b3d82.js.map +0 -802
  95. package/src/internal/CONSTANTS.js +0 -11
  96. package/src/internal/browser_feature_detection/browser_feature_detection.js +0 -274
  97. package/src/internal/compiling/js-compilation-service/jsenvTransform.js +0 -242
  98. package/src/internal/dev_server/redirector/redirector.html +0 -48
  99. package/src/internal/generateGroupMap/generateGroupMap.js +0 -65
  100. package/src/internal/generateGroupMap/one_runtime_compat.js +0 -38
  101. package/src/internal/generateGroupMap/runtime_compat.js +0 -34
  102. package/src/internal/generateGroupMap/runtime_compat_composition.js +0 -76
  103. package/src/internal/generateGroupMap/shake_babel_plugin_map.js +0 -21
  104. package/src/internal/integrity/integrity_algorithms.js +0 -26
  105. package/src/internal/integrity/integrity_parsing.js +0 -50
  106. package/src/internal/integrity/integrity_update.js +0 -23
  107. package/src/internal/integrity/integrity_validation.js +0 -49
  108. package/src/internal/node_feature_detection/node_feature_detection.js +0 -117
  109. package/src/internal/node_runtime/detectNode.js +0 -3
  110. package/src/internal/runtime/computeCompileIdFromGroupId.js +0 -30
  111. package/src/internal/runtime/resolveGroup.js +0 -13
  112. 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.forEeach(({ specifier }) => {
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 { createRuntimeCompat } from "@jsenv/core/src/internal/generateGroupMap/runtime_compat.js"
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
- import {
15
- COMPILE_ID_BUILD_GLOBAL,
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
- outDirectoryRelativeUrl,
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 (such __compile_server_meta__.json)
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
- const allowedCompileIds = [
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: 400,
132
- statusText: `compileId must be one of ${allowedCompileIds}, received ${compileId}`,
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 = `${outDirectoryRelativeUrl}${compileId}/`
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
- missingFeatureNames: groupMap[compileId].missingFeatureNames,
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 { jsenvTransform } from "./jsenvTransform.js"
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 transformResult = await jsenvTransform({
45
- url,
46
- relativeUrl: url.startsWith(projectDirectoryUrl)
47
- ? urlToRelativeUrl(url, projectDirectoryUrl)
48
- : undefined,
49
- projectDirectoryUrl,
50
- jsenvRemoteDirectory,
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
- map,
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
- babelPluginMap,
55
- moduleOutFormat,
56
- importMetaFormat,
168
+ const babelTransform = async ({ ast, code, options }) => {
169
+ const { transformAsync, transformFromAstAsync } = await import("@babel/core")
57
170
 
58
- babelHelpersInjectionAsImport,
59
- prependSystemJs,
60
- topLevelAwait,
61
- transformGenerator,
62
- sourcemapEnabled,
63
- })
64
- code = transformResult.code
65
- map = transformResult.map
66
- const { metadata } = transformResult
67
- return { code, map, metadata }
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 "./compile-directory/compile-asset.js"
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
- outDirectoryRelativeUrl,
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}${outDirectoryRelativeUrl}${compileId}/`
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
- moduleOutFormat,
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
- moduleOutFormat,
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: type === "module" ? moduleOutFormat : "global",
612
- importMetaFormat,
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
- outDirectoryRelativeUrl,
10
+ jsenvDirectoryRelativeUrl,
11
11
  compileId,
12
12
  }) => {
13
13
  const jsenvImportmap = getDefaultImportmap(compiledUrl, {
14
14
  projectDirectoryUrl,
15
- compileDirectoryUrl: `${projectDirectoryUrl}${outDirectoryRelativeUrl}${compileId}/`,
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
+ }