@jsenv/core 24.2.1 → 24.3.3

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 (154) hide show
  1. package/dist/browser_runtime/browser_runtime-fbd309a1.js +5137 -0
  2. package/dist/browser_runtime/browser_runtime-fbd309a1.js.map +1064 -0
  3. package/dist/{jsenv_browser_system.js → browser_system/browser_system-29eda202.js} +12 -12
  4. package/dist/{jsenv_browser_system.js.map → browser_system/browser_system-29eda202.js.map} +64 -64
  5. package/dist/build_manifest.js +12 -0
  6. package/dist/compile_proxy/assets/s.js-749702e8.map +242 -0
  7. package/dist/compile_proxy/compile_proxy-405777e6.html +2074 -0
  8. package/dist/compile_proxy/compile_proxy.html__inline__20-39c0801c.js.map +385 -0
  9. package/dist/{jsenv_event_source_client.js → event_source_client/event_source_client-9f14c8b9.js} +39 -21
  10. package/dist/event_source_client/event_source_client-9f14c8b9.js.map +127 -0
  11. package/dist/redirector/assets/s.js-749702e8.map +242 -0
  12. package/dist/redirector/redirector-237cd168.html +2118 -0
  13. package/dist/redirector/redirector.html__inline__15-33acb0b9.js.map +390 -0
  14. package/dist/toolbar/assets/compilation.css-209d68b4.map +12 -0
  15. package/dist/toolbar/assets/eventsource.css-38cd0a36.map +12 -0
  16. package/dist/toolbar/assets/execution.css-0ebe522f.map +12 -0
  17. package/dist/toolbar/assets/focus.css-3f9c156d.map +12 -0
  18. package/dist/toolbar/assets/light-theme.css-78b19a80.map +12 -0
  19. package/dist/toolbar/assets/overflow-menu.css-d9688a1c.map +12 -0
  20. package/dist/toolbar/assets/s.js-749702e8.map +242 -0
  21. package/dist/toolbar/assets/settings.css-2b81b245.map +12 -0
  22. package/dist/toolbar/assets/toolbar.main.css-846920e9.map +28 -0
  23. package/dist/toolbar/assets/tooltip.css-03395ee6.map +12 -0
  24. package/dist/toolbar/toolbar-29e91dcd.html +4779 -0
  25. package/dist/toolbar/toolbar.main-53e1ab2b.js.map +795 -0
  26. package/dist/toolbar_injector/assets/jsenv-logo-188b9ca6.svg +95 -0
  27. package/dist/{jsenv_toolbar_injector.js → toolbar_injector/toolbar_injector-0af91b43.js} +87 -65
  28. package/dist/toolbar_injector/toolbar_injector-0af91b43.js.map +294 -0
  29. package/main.js +0 -1
  30. package/package.json +2 -1
  31. package/readme.md +10 -7
  32. package/src/buildProject.js +6 -2
  33. package/src/dev_server.js +26 -130
  34. package/src/execute.js +7 -10
  35. package/src/importUsingChildProcess.js +1 -1
  36. package/src/internal/{runtime/detectBrowser/detectBrowser.js → browser_detection/browser_detection.js} +0 -0
  37. package/src/internal/{runtime/detectBrowser → browser_detection}/detectAndroid.js +0 -0
  38. package/src/internal/{runtime/detectBrowser → browser_detection}/detectChrome.js +0 -0
  39. package/src/internal/{runtime/detectBrowser → browser_detection}/detectEdge.js +0 -0
  40. package/src/internal/{runtime/detectBrowser → browser_detection}/detectElectron.js +0 -0
  41. package/src/internal/{runtime/detectBrowser → browser_detection}/detectFirefox.js +0 -0
  42. package/src/internal/{runtime/detectBrowser → browser_detection}/detectIOS.js +0 -0
  43. package/src/internal/{runtime/detectBrowser → browser_detection}/detectInternetExplorer.js +0 -0
  44. package/src/internal/{runtime/detectBrowser → browser_detection}/detectOpera.js +0 -0
  45. package/src/internal/{runtime/detectBrowser → browser_detection}/detectSafari.js +0 -0
  46. package/src/internal/{runtime/detectBrowser → browser_detection}/util.js +0 -0
  47. package/src/internal/{runtime/createBrowserRuntime/scanBrowserRuntimeFeatures.js → browser_feature_detection/browser_feature_detection.js} +116 -81
  48. package/src/internal/browser_feature_detection/compile_proxy.html +27 -0
  49. package/src/internal/browser_launcher/browser_runtime_report.js +75 -0
  50. package/src/internal/{browser-launcher → browser_launcher}/createSharing.js +0 -0
  51. package/src/internal/{browser-launcher → browser_launcher}/executeHtmlFile.js +13 -16
  52. package/src/internal/{browser-launcher → browser_launcher}/trackPageToNotify.js +0 -0
  53. package/src/internal/{browser-launcher/jsenv-browser-system.js → browser_runtime/browser_runtime.js} +4 -4
  54. package/src/internal/{runtime/createBrowserRuntime/createBrowserSystem.js → browser_runtime/browser_system.js} +3 -2
  55. package/src/internal/{runtime/createBrowserRuntime → browser_runtime}/createBrowserRuntime.js +7 -5
  56. package/src/internal/{browser-launcher → browser_runtime}/displayErrorInDocument.js +0 -0
  57. package/src/internal/{browser-launcher → browser_runtime}/displayErrorNotification.js +2 -4
  58. package/src/internal/{runtime/createBrowserRuntime → browser_runtime}/evalSource.js +2 -0
  59. package/src/internal/{runtime/createBrowserRuntime → browser_runtime}/makeNamespaceTransferable.js +0 -0
  60. package/src/internal/{browser-utils → browser_utils}/fetch-browser.js +2 -0
  61. package/src/internal/{browser-utils → browser_utils}/fetchAndEvalUsingFetch.js +3 -0
  62. package/src/internal/{browser-utils → browser_utils}/fetchAndEvalUsingScript.js +2 -0
  63. package/src/internal/{browser-utils → browser_utils}/fetchJson.js +0 -0
  64. package/src/internal/{browser-utils → browser_utils}/fetchUsingXHR.js +4 -4
  65. package/src/internal/building/buildUsingRollup.js +4 -0
  66. package/src/internal/building/createJsenvRollupPlugin.js +19 -9
  67. package/src/internal/building/css/applyPostCss.js +19 -8
  68. package/src/internal/building/css/moveCssUrls.js +44 -0
  69. package/src/internal/building/css/parseCssRessource.js +67 -17
  70. package/src/internal/building/css/parseCssUrls.js +29 -23
  71. package/src/internal/building/css/postcss_plugin_url_visitor.js +11 -20
  72. package/src/internal/building/css/replaceCssUrls.js +38 -19
  73. package/src/internal/building/css_module.js +6 -10
  74. package/src/internal/building/html/parseHtmlRessource.js +37 -11
  75. package/src/internal/building/parseRessource.js +3 -0
  76. package/src/internal/building/ressource_builder.js +12 -3
  77. package/src/internal/compiling/babel_plugin_import_assertions.js +1 -2
  78. package/src/internal/compiling/html_source_file_service.js +23 -21
  79. package/src/internal/compiling/jsenvCompilerForHtml.js +15 -22
  80. package/src/internal/compiling/startCompileServer.js +37 -32
  81. package/src/internal/dev_server/event_source_client/event_source_connection.js +28 -19
  82. package/src/internal/dev_server/exploring/exploring.html +7 -2
  83. package/src/internal/dev_server/exploring/fetchExploringJson.js +4 -9
  84. package/src/internal/dev_server/redirector/redirector.html +37 -2
  85. package/src/internal/dev_server/toolbar/compilation/toolbar.compilation.js +4 -7
  86. package/src/internal/dev_server/toolbar/eventsource/toolbar.eventsource.js +2 -2
  87. package/src/internal/dev_server/toolbar/notification/toolbar.notification.js +75 -44
  88. package/src/internal/dev_server/toolbar/toolbar.html +31 -5
  89. package/src/internal/dev_server/toolbar/toolbar.injector.js +55 -36
  90. package/src/internal/dev_server/toolbar/toolbar.main.js +45 -31
  91. package/src/internal/dev_server/toolbar/util/fetching.js +1 -1
  92. package/src/internal/executing/executeConcurrently.js +5 -4
  93. package/src/internal/executing/executePlan.js +1 -2
  94. package/src/internal/generateGroupMap/one_runtime_compat.js +1 -1
  95. package/src/internal/generateGroupMap/runtime_compat_composition.js +1 -1
  96. package/src/internal/generateGroupMap/runtime_support.js +1 -1
  97. package/src/internal/jsenvInternalFiles.js +0 -26
  98. package/src/internal/jsenv_builds.js +19 -0
  99. package/src/internal/{runtime/node-feature-detect/feature-detect-dynamic-import.mjs → node_feature_detection/feature_detect_dynamic_import.mjs} +0 -0
  100. package/src/internal/{runtime/node-feature-detect/feature-detect-top-level-await.mjs → node_feature_detection/feature_detect_top_level_await.mjs} +0 -0
  101. package/src/internal/{runtime/node-feature-detect → node_feature_detection}/nodeSupportsDynamicImport.js +0 -0
  102. package/src/internal/node_feature_detection/nodeSupportsTopLevelAwait.js +16 -0
  103. package/src/internal/{runtime/createNodeRuntime/scanNodeRuntimeFeatures.js → node_feature_detection/node_feature_detection.js} +12 -13
  104. package/src/internal/{node-launcher → node_launcher}/createChildProcessOptions.js +0 -0
  105. package/src/internal/{node-launcher → node_launcher}/createControllableNodeProcess.js +9 -14
  106. package/src/internal/{node-launcher → node_launcher}/kill_process_tree.js +0 -0
  107. package/src/internal/node_launcher/node_runtime_report.js +71 -0
  108. package/src/internal/{node-launcher → node_launcher}/processOptions.js +0 -0
  109. package/src/internal/{runtime/detectNode → node_runtime}/detectNode.js +0 -0
  110. package/src/internal/{runtime/createNodeRuntime → node_runtime}/evalSource.js +1 -1
  111. package/src/internal/{runtime/createNodeRuntime → node_runtime}/fetchSource.js +1 -1
  112. package/src/internal/{node-launcher → node_runtime}/nodeControllableFile.mjs +14 -11
  113. package/src/internal/{runtime/createNodeRuntime/createNodeExecutionWithDynamicImport.js → node_runtime/node_execution_dynamic_import.js} +34 -6
  114. package/src/internal/node_runtime/node_execution_performance.js +67 -0
  115. package/src/internal/{runtime/createNodeRuntime/createNodeExecutionWithSystemJs.js → node_runtime/node_execution_systemjs.js} +38 -24
  116. package/src/internal/{runtime/createNodeRuntime/createNodeSystem.js → node_runtime/node_system.js} +4 -4
  117. package/src/internal/runtime/computeCompileIdFromGroupId.js +1 -0
  118. package/src/internal/runtime/resolveGroup.js +1 -1
  119. package/src/internal/runtime/resolveRuntimeGroup.js +2 -2
  120. package/src/internal/{semantic-versioning → semantic_versioning}/findHighestVersion.js +0 -0
  121. package/src/internal/{semantic-versioning → semantic_versioning}/findLowestVersion.js +0 -0
  122. package/src/internal/{semantic-versioning → semantic_versioning}/index.js +0 -0
  123. package/src/internal/{semantic-versioning → semantic_versioning}/valueToVersion.js +0 -0
  124. package/src/internal/{semantic-versioning → semantic_versioning}/versionCompare.js +0 -0
  125. package/src/internal/{semantic-versioning → semantic_versioning}/versionIsAbove.js +0 -0
  126. package/src/internal/{semantic-versioning → semantic_versioning}/versionIsBelow.js +0 -0
  127. package/src/internal/{semantic-versioning → semantic_versioning}/versionIsEqual.js +0 -0
  128. package/src/launchBrowser.js +12 -3
  129. package/src/launchNode.js +36 -7
  130. package/src/requireUsingChildProcess.js +1 -1
  131. package/dist/jsenv_compile_proxy.js +0 -1339
  132. package/dist/jsenv_compile_proxy.js.map +0 -378
  133. package/dist/jsenv_event_source_client.js.map +0 -126
  134. package/dist/jsenv_exploring_index.js +0 -1092
  135. package/dist/jsenv_exploring_index.js.map +0 -353
  136. package/dist/jsenv_exploring_redirector.js +0 -1386
  137. package/dist/jsenv_exploring_redirector.js.map +0 -384
  138. package/dist/jsenv_redirector.js +0 -1388
  139. package/dist/jsenv_redirector.js.map +0 -384
  140. package/dist/jsenv_toolbar.js +0 -2880
  141. package/dist/jsenv_toolbar.js.map +0 -771
  142. package/dist/jsenv_toolbar_injector.js.map +0 -301
  143. package/src/internal/browser-launcher/jsenv_compile_proxy.html +0 -13
  144. package/src/internal/browser-launcher/jsenv_compile_proxy.js +0 -5
  145. package/src/internal/dev_server/event_source_client/event_source_client_file_info.js +0 -17
  146. package/src/internal/dev_server/exploring/exploring_file_info.js +0 -21
  147. package/src/internal/dev_server/redirector/redirector.js +0 -30
  148. package/src/internal/dev_server/redirector/redirector_file_info.js +0 -24
  149. package/src/internal/dev_server/toolbar/backtolist/toolbar.backtolist.js +0 -33
  150. package/src/internal/dev_server/toolbar/toolbar_file_info.js +0 -37
  151. package/src/internal/node-launcher/node-js-file.js +0 -110
  152. package/src/internal/runtime/createNodeRuntime/createNodeRuntime.js +0 -32
  153. package/src/internal/runtime/node-feature-detect/nodeSupportsTopLevelAwait.js +0 -18
  154. package/src/nodeRuntime.js +0 -5
@@ -2,10 +2,33 @@ import { resolveUrl } from "@jsenv/filesystem"
2
2
 
3
3
  import { unevalException } from "@jsenv/core/src/internal/unevalException.js"
4
4
  import { measureAsyncFnPerf } from "@jsenv/core/src/internal/perf_node.js"
5
+ import { startObservingPerformances } from "./node_execution_performance.js"
5
6
 
6
- export const createNodeExecutionWithDynamicImport = ({
7
+ export const execute = async ({
7
8
  projectDirectoryUrl,
9
+ fileRelativeUrl,
10
+ // do not log in the console
11
+ // because error handling becomes responsability
12
+ // of node code launching node process
13
+ // it avoids seeing error in runtime logs during testing
14
+ errorExposureInConsole = false,
15
+ collectCoverage,
16
+ measurePerformance,
17
+ collectPerformance,
8
18
  }) => {
19
+ let finalizeExecutionResult = (result) => result
20
+
21
+ if (collectPerformance) {
22
+ const getPerformance = startObservingPerformances()
23
+ finalizeExecutionResult = async (executionResult) => {
24
+ const performance = await getPerformance()
25
+ return {
26
+ ...executionResult,
27
+ performance,
28
+ }
29
+ }
30
+ }
31
+
9
32
  const executeFile = async (
10
33
  specifier,
11
34
  { measurePerformance, errorExposureInConsole = false } = {},
@@ -13,7 +36,6 @@ export const createNodeExecutionWithDynamicImport = ({
13
36
  // we can't dynamically import from compileServerOrigin I guess
14
37
  // we have to use the filesystem
15
38
  const fileUrl = resolveUrl(specifier, projectDirectoryUrl)
16
-
17
39
  const importWithDynamicImport = async () => {
18
40
  try {
19
41
  const status = "completed"
@@ -33,14 +55,20 @@ export const createNodeExecutionWithDynamicImport = ({
33
55
  }
34
56
  }
35
57
  }
36
-
37
58
  if (measurePerformance) {
38
59
  return measureAsyncFnPerf(importWithDynamicImport, "jsenv_file_import")
39
60
  }
40
61
  return importWithDynamicImport()
41
62
  }
42
63
 
43
- return {
44
- executeFile,
45
- }
64
+ const executionResult = await executeFile(fileRelativeUrl, {
65
+ errorExposureInConsole,
66
+ measurePerformance,
67
+ collectCoverage,
68
+ })
69
+
70
+ return finalizeExecutionResult({
71
+ ...executionResult,
72
+ indirectCoverage: global.__indirectCoverage__,
73
+ })
46
74
  }
@@ -0,0 +1,67 @@
1
+ import { PerformanceObserver, performance } from "node:perf_hooks"
2
+
3
+ export const startObservingPerformances = () => {
4
+ const measureEntries = []
5
+ // https://nodejs.org/dist/latest-v16.x/docs/api/perf_hooks.html
6
+ const perfObserver = new PerformanceObserver(
7
+ (
8
+ // https://nodejs.org/dist/latest-v16.x/docs/api/perf_hooks.html#perf_hooks_class_performanceobserverentrylist
9
+ list,
10
+ ) => {
11
+ const perfMeasureEntries = list.getEntriesByType("measure")
12
+ measureEntries.push(...perfMeasureEntries)
13
+ },
14
+ )
15
+ perfObserver.observe({
16
+ entryTypes: ["measure"],
17
+ })
18
+ return async () => {
19
+ // wait for node to call the performance observer
20
+ await new Promise((resolve) => {
21
+ setTimeout(resolve)
22
+ })
23
+ performance.clearMarks()
24
+ perfObserver.disconnect()
25
+ return {
26
+ ...readNodePerformance(),
27
+ measures: measuresFromMeasureEntries(measureEntries),
28
+ }
29
+ }
30
+ }
31
+
32
+ const readNodePerformance = () => {
33
+ const nodePerformance = {
34
+ nodeTiming: asPlainObject(performance.nodeTiming),
35
+ timeOrigin: performance.timeOrigin,
36
+ eventLoopUtilization: performance.eventLoopUtilization(),
37
+ }
38
+ return nodePerformance
39
+ }
40
+
41
+ // remove getters that cannot be stringified
42
+ const asPlainObject = (objectWithGetters) => {
43
+ const objectWithoutGetters = {}
44
+ Object.keys(objectWithGetters).forEach((key) => {
45
+ objectWithoutGetters[key] = objectWithGetters[key]
46
+ })
47
+ return objectWithoutGetters
48
+ }
49
+
50
+ const measuresFromMeasureEntries = (measureEntries) => {
51
+ const measures = {}
52
+ // Sort to ensure measures order is predictable
53
+ // It seems to be already predictable on Node 16+ but
54
+ // it's not the case on Node 14.
55
+ measureEntries.sort((a, b) => {
56
+ return a.startTime - b.startTime
57
+ })
58
+ measureEntries.forEach(
59
+ (
60
+ // https://nodejs.org/dist/latest-v16.x/docs/api/perf_hooks.html#perf_hooks_class_performanceentry
61
+ perfMeasureEntry,
62
+ ) => {
63
+ measures[perfMeasureEntry.name] = perfMeasureEntry.duration
64
+ },
65
+ )
66
+ return measures
67
+ }
@@ -1,38 +1,48 @@
1
1
  import { resolveUrl } from "@jsenv/filesystem"
2
2
 
3
3
  import { measureAsyncFnPerf } from "@jsenv/core/src/internal/perf_node.js"
4
+ import { startObservingPerformances } from "./node_execution_performance.js"
4
5
  import { unevalException } from "@jsenv/core/src/internal/unevalException.js"
5
- import { memoize } from "../../memoize.js"
6
- import { installNodeErrorStackRemapping } from "../../error-stack-remapping/installNodeErrorStackRemapping.js"
7
- import { fetchSource } from "./fetchSource.js"
8
- import { createNodeSystem } from "./createNodeSystem.js"
9
6
 
10
- const memoizedCreateNodeSystem = memoize(createNodeSystem)
7
+ import { installNodeErrorStackRemapping } from "@jsenv/core/src/internal/error-stack-remapping/installNodeErrorStackRemapping.js"
8
+ import { fetchSource } from "@jsenv/core/src/internal/node_runtime/fetchSource.js"
9
+ import { createNodeSystem } from "@jsenv/core/src/internal/node_runtime/node_system.js"
11
10
 
12
- export const createNodeExecutionWithSystemJs = ({
11
+ export const execute = async ({
13
12
  projectDirectoryUrl,
14
13
  compileServerOrigin,
14
+ fileRelativeUrl,
15
15
  outDirectoryRelativeUrl,
16
16
  compileId,
17
17
  importDefaultExtension,
18
+ // do not log in the console
19
+ // because error handling becomes responsability
20
+ // of node code launching node process
21
+ // it avoids seeing error in runtime logs during testing
22
+ errorExposureInConsole = false,
23
+ collectCoverage,
24
+ measurePerformance,
25
+ collectPerformance,
18
26
  }) => {
27
+ let finalizeExecutionResult = (result) => result
28
+
29
+ if (collectPerformance) {
30
+ const getPerformance = startObservingPerformances()
31
+ finalizeExecutionResult = async (executionResult) => {
32
+ const performance = await getPerformance()
33
+ return {
34
+ ...executionResult,
35
+ performance,
36
+ }
37
+ }
38
+ }
39
+
19
40
  const { getErrorOriginalStackString } = installNodeErrorStackRemapping({
20
41
  projectDirectoryUrl,
21
42
  })
22
43
 
23
44
  const compileDirectoryRelativeUrl = `${outDirectoryRelativeUrl}${compileId}/`
24
45
 
25
- const importFile = async (specifier) => {
26
- const nodeSystem = await memoizedCreateNodeSystem({
27
- projectDirectoryUrl,
28
- compileServerOrigin,
29
- compileDirectoryRelativeUrl,
30
- fetchSource,
31
- importDefaultExtension,
32
- })
33
- return makePromiseKeepNodeProcessAlive(nodeSystem.import(specifier))
34
- }
35
-
36
46
  const errorTransformer = async (error) => {
37
47
  // code can throw something else than an error
38
48
  // in that case return it unchanged
@@ -52,7 +62,7 @@ export const createNodeExecutionWithSystemJs = ({
52
62
  `${compileServerOrigin}/${compileDirectoryRelativeUrl}`,
53
63
  )
54
64
 
55
- const nodeSystem = await memoizedCreateNodeSystem({
65
+ const nodeSystem = await createNodeSystem({
56
66
  projectDirectoryUrl,
57
67
  compileServerOrigin,
58
68
  compileDirectoryRelativeUrl,
@@ -88,18 +98,22 @@ export const createNodeExecutionWithSystemJs = ({
88
98
  }
89
99
  }
90
100
  }
91
-
92
101
  if (measurePerformance) {
93
102
  return measureAsyncFnPerf(importWithSystemJs, "jsenv_file_import")
94
103
  }
95
104
  return importWithSystemJs()
96
105
  }
97
106
 
98
- return {
99
- compileDirectoryRelativeUrl,
100
- importFile,
101
- executeFile,
102
- }
107
+ const executionResult = await executeFile(fileRelativeUrl, {
108
+ errorExposureInConsole,
109
+ measurePerformance,
110
+ collectCoverage,
111
+ })
112
+
113
+ return finalizeExecutionResult({
114
+ ...executionResult,
115
+ indirectCoverage: global.__indirectCoverage__,
116
+ })
103
117
  }
104
118
 
105
119
  const makePromiseKeepNodeProcessAlive = async (promise) => {
@@ -8,14 +8,14 @@ import { urlToFileSystemPath, resolveUrl } from "@jsenv/filesystem"
8
8
  import { isSpecifierForNodeCoreModule } from "@jsenv/importmap/src/isSpecifierForNodeCoreModule.js"
9
9
 
10
10
  import { createImportResolverForNode } from "@jsenv/core/src/internal/import-resolution/import-resolver-node.js"
11
- import { require } from "../../require.js"
12
- import "../s.js"
11
+ import { require } from "../require.js"
12
+ import "../runtime/s.js"
13
13
  import {
14
14
  fromFunctionReturningNamespace,
15
15
  getJavaScriptModuleResponseError,
16
16
  fromFunctionReturningRegisteredModule,
17
- } from "../module-registration.js"
18
- import { valueInstall } from "../valueInstall.js"
17
+ } from "../runtime/module-registration.js"
18
+ import { valueInstall } from "../runtime/valueInstall.js"
19
19
  import { evalSource } from "./evalSource.js"
20
20
 
21
21
  export const createNodeSystem = async ({
@@ -1,4 +1,5 @@
1
1
  import { createDetailedMessage } from "@jsenv/logger"
2
+
2
3
  import { COMPILE_ID_OTHERWISE } from "../CONSTANTS.js"
3
4
 
4
5
  export const computeCompileIdFromGroupId = ({ groupId, groupMap }) => {
@@ -1,4 +1,4 @@
1
- import { findHighestVersion } from "../semantic-versioning/index.js"
1
+ import { findHighestVersion } from "../semantic_versioning/index.js"
2
2
 
3
3
  export const resolveGroup = ({ name, version }, groupMap) => {
4
4
  return Object.keys(groupMap).find((compileIdCandidate) => {
@@ -1,6 +1,6 @@
1
1
  /* eslint-env browser, node */
2
- import { detectBrowser } from "./detectBrowser/detectBrowser.js"
3
- import { detectNode } from "./detectNode/detectNode.js"
2
+ import { detectBrowser } from "../browser_detection/browser_detection.js"
3
+ import { detectNode } from "../node_runtime/detectNode.js"
4
4
  import { resolveGroup } from "./resolveGroup.js"
5
5
 
6
6
  export const resolveRuntimeGroup = (groupMap) => {
@@ -11,9 +11,9 @@ import { memoize } from "@jsenv/filesystem"
11
11
 
12
12
  import { fetchUrl } from "./internal/fetchUrl.js"
13
13
  import { validateResponse } from "./internal/response_validation.js"
14
- import { trackPageToNotify } from "./internal/browser-launcher/trackPageToNotify.js"
15
- import { createSharing } from "./internal/browser-launcher/createSharing.js"
16
- import { executeHtmlFile } from "./internal/browser-launcher/executeHtmlFile.js"
14
+ import { trackPageToNotify } from "./internal/browser_launcher/trackPageToNotify.js"
15
+ import { createSharing } from "./internal/browser_launcher/createSharing.js"
16
+ import { executeHtmlFile } from "./internal/browser_launcher/executeHtmlFile.js"
17
17
  import {
18
18
  PLAYWRIGHT_CHROMIUM_VERSION,
19
19
  PLAYWRIGHT_FIREFOX_VERSION,
@@ -32,6 +32,7 @@ chromiumRuntime.launch = async ({
32
32
 
33
33
  projectDirectoryUrl,
34
34
  compileServerOrigin,
35
+ compileServerId,
35
36
  outDirectoryRelativeUrl,
36
37
 
37
38
  collectPerformance,
@@ -106,10 +107,12 @@ chromiumRuntime.launch = async ({
106
107
  }
107
108
 
108
109
  const browserHooks = browserToRuntimeHooks(browser, {
110
+ runtime: chromiumRuntime,
109
111
  browserServerLogLevel,
110
112
 
111
113
  projectDirectoryUrl,
112
114
  compileServerOrigin,
115
+ compileServerId,
113
116
  outDirectoryRelativeUrl,
114
117
 
115
118
  collectPerformance,
@@ -184,6 +187,7 @@ firefoxRuntime.launch = async ({
184
187
  const browser = await browserPromise
185
188
 
186
189
  const browserHooks = browserToRuntimeHooks(browser, {
190
+ runtime: firefoxRuntime,
187
191
  launchBrowserOperation,
188
192
  browserServerLogLevel,
189
193
 
@@ -262,6 +266,7 @@ webkitRuntime.launch = async ({
262
266
  const browser = await browserPromise
263
267
 
264
268
  const browserHooks = browserToRuntimeHooks(browser, {
269
+ runtime: webkitRuntime,
265
270
  launchBrowserOperation,
266
271
  browserServerLogLevel,
267
272
 
@@ -391,8 +396,10 @@ const stopBrowser = async (browser) => {
391
396
  const browserToRuntimeHooks = (
392
397
  browser,
393
398
  {
399
+ runtime,
394
400
  projectDirectoryUrl,
395
401
  compileServerOrigin,
402
+ compileServerId,
396
403
  outDirectoryRelativeUrl,
397
404
 
398
405
  collectPerformance,
@@ -461,10 +468,12 @@ const browserToRuntimeHooks = (
461
468
  stoppedCallbackList.add(stopTrackingToNotify)
462
469
 
463
470
  const result = await executeHtmlFile(fileRelativeUrl, {
471
+ runtime,
464
472
  executeOperation,
465
473
 
466
474
  projectDirectoryUrl,
467
475
  compileServerOrigin,
476
+ compileServerId,
468
477
  outDirectoryRelativeUrl,
469
478
 
470
479
  page,
package/src/launchNode.js CHANGED
@@ -3,7 +3,8 @@ import { loggerToLogLevel } from "@jsenv/logger"
3
3
 
4
4
  import { jsenvCoreDirectoryUrl } from "@jsenv/core/src/internal/jsenvCoreDirectoryUrl.js"
5
5
  import { escapeRegexpSpecialCharacters } from "./internal/escapeRegexpSpecialCharacters.js"
6
- import { createControllableNodeProcess } from "./internal/node-launcher/createControllableNodeProcess.js"
6
+ import { createControllableNodeProcess } from "./internal/node_launcher/createControllableNodeProcess.js"
7
+ import { getNodeRuntimeReport } from "./internal/node_launcher/node_runtime_report.js"
7
8
 
8
9
  export const nodeRuntime = {
9
10
  name: "node",
@@ -15,6 +16,7 @@ nodeRuntime.launch = async ({
15
16
  logProcessCommand,
16
17
 
17
18
  projectDirectoryUrl,
19
+ compileServerId,
18
20
  compileServerOrigin,
19
21
  outDirectoryRelativeUrl,
20
22
 
@@ -34,7 +36,7 @@ nodeRuntime.launch = async ({
34
36
  stdout,
35
37
  stderr,
36
38
  stopAfterExecute,
37
- canUseNativeModuleSystem,
39
+ forceSystemJs,
38
40
 
39
41
  remap = true,
40
42
  }) => {
@@ -103,7 +105,6 @@ nodeRuntime.launch = async ({
103
105
 
104
106
  fileRelativeUrl,
105
107
  executionId,
106
- canUseNativeModuleSystem,
107
108
  exitAfterAction: stopAfterExecute,
108
109
 
109
110
  measurePerformance,
@@ -114,11 +115,39 @@ nodeRuntime.launch = async ({
114
115
  remap,
115
116
  }
116
117
 
117
- let executionResult = await requestActionOnChildProcess({
118
- signal,
119
- actionType: "execute-using-dynamic-import-fallback-on-systemjs",
120
- actionParams: executeParams,
118
+ // the computation of runtime features can be cached
119
+ const nodeFeatures = await getNodeRuntimeReport({
120
+ runtime: nodeRuntime,
121
+ compileServerId,
122
+ compileServerOrigin,
123
+ outDirectoryRelativeUrl,
124
+ // https://nodejs.org/docs/latest-v15.x/api/cli.html#cli_node_v8_coverage_dir
125
+ // instrumentation CAN be handed by process.env.NODE_V8_COVERAGE
126
+ // "transform-instrument" becomes non mandatory
127
+ coverageHandledFromOutside:
128
+ !coverageForceIstanbul && process.env.NODE_V8_COVERAGE,
121
129
  })
130
+ const { canAvoidCompilation, compileId, importDefaultExtension } =
131
+ nodeFeatures
132
+
133
+ let executionResult
134
+ if (canAvoidCompilation && !forceSystemJs) {
135
+ executionResult = await requestActionOnChildProcess({
136
+ signal,
137
+ actionType: "execute-using-dynamic-import",
138
+ actionParams: executeParams,
139
+ })
140
+ } else {
141
+ executionResult = await requestActionOnChildProcess({
142
+ signal,
143
+ actionType: "execute-using-systemjs",
144
+ actionParams: {
145
+ compileId,
146
+ importDefaultExtension,
147
+ ...executeParams,
148
+ },
149
+ })
150
+ }
122
151
 
123
152
  executionResult = transformExecutionResult(executionResult, {
124
153
  compileServerOrigin,
@@ -1,5 +1,5 @@
1
1
  import { launchAndExecute } from "./internal/executing/launchAndExecute.js"
2
- import { createControllableNodeProcess } from "./internal/node-launcher/createControllableNodeProcess.js"
2
+ import { createControllableNodeProcess } from "./internal/node_launcher/createControllableNodeProcess.js"
3
3
 
4
4
  export const requireUsingChildProcess = async (
5
5
  fileUrl,