@jsenv/core 27.0.0-alpha.63 → 27.0.0-alpha.66

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