@jsenv/core 27.0.0-alpha.62 → 27.0.0-alpha.65

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 (169) hide show
  1. package/dist/html/explorer.html +557 -0
  2. package/dist/js/controllable_file.mjs +227 -0
  3. package/dist/{event_source_client.js → js/event_source_client.js} +19 -244
  4. package/dist/js/global_this.js +32 -0
  5. package/dist/js/html_supervisor_installer.js +522 -0
  6. package/dist/js/html_supervisor_setup.js +79 -0
  7. package/dist/{import_meta_hot.js → js/import_meta_hot.js} +1 -3
  8. package/dist/js/inline_content.js +8 -0
  9. package/dist/js/new_stylesheet.js +409 -0
  10. package/dist/js/regenerator_runtime.js +721 -0
  11. package/dist/js/s.js +429 -0
  12. package/dist/main.js +13362 -0
  13. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/AsyncGenerator/AsyncGenerator.js +95 -0
  14. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/AwaitValue/AwaitValue.js +3 -0
  15. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/applyDecoratorDescriptor/applyDecoratorDescriptor.js +29 -0
  16. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/arrayLikeToArray/arrayLikeToArray.js +9 -0
  17. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/arrayWithHoles/arrayWithHoles.js +4 -0
  18. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/arrayWithoutHoles/arrayWithoutHoles.js +5 -0
  19. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/assertThisInitialized/assertThisInitialized.js +8 -0
  20. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/asyncGeneratorDelegate/asyncGeneratorDelegate.js +52 -0
  21. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/asyncIterator/asyncIterator.js +78 -0
  22. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/asyncToGenerator/asyncToGenerator.js +39 -0
  23. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/awaitAsyncGenerator/awaitAsyncGenerator.js +4 -0
  24. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/classApplyDescriptorDestructureSet/classApplyDescriptorDestructureSet.js +24 -0
  25. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/classApplyDescriptorGet/classApplyDescriptorGet.js +7 -0
  26. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/classApplyDescriptorSet/classApplyDescriptorSet.js +14 -0
  27. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/classCallCheck/classCallCheck.js +5 -0
  28. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/classCheckPrivateStaticAccess/classCheckPrivateStaticAccess.js +5 -0
  29. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/classCheckPrivateStaticFieldDescriptor/classCheckPrivateStaticFieldDescriptor.js +6 -0
  30. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/classExtractFieldDescriptor/classExtractFieldDescriptor.js +8 -0
  31. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/classNameTDZError/classNameTDZError.js +4 -0
  32. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/classPrivateFieldDestructureSet/classPrivateFieldDestructureSet.js +6 -0
  33. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/classPrivateFieldGet/classPrivateFieldGet.js +6 -0
  34. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/classPrivateFieldLooseBase/classPrivateFieldLooseBase.js +7 -0
  35. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/classPrivateFieldLooseKey/classPrivateFieldLooseKey.js +5 -0
  36. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/classPrivateFieldSet/classPrivateFieldSet.js +7 -0
  37. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/classPrivateMethodGet/classPrivateMethodGet.js +7 -0
  38. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/classPrivateMethodSet/classPrivateMethodSet.js +3 -0
  39. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/classStaticPrivateFieldSpecGet/classStaticPrivateFieldSpecGet.js +8 -0
  40. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/classStaticPrivateFieldSpecSet/classStaticPrivateFieldSpecSet.js +9 -0
  41. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/classStaticPrivateMethodGet/classStaticPrivateMethodGet.js +5 -0
  42. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/classStaticPrivateMethodSet/classStaticPrivateMethodSet.js +3 -0
  43. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/construct/construct.js +15 -0
  44. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/createClass/createClass.js +18 -0
  45. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/createForOfIteratorHelper/createForOfIteratorHelper.js +63 -0
  46. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/createForOfIteratorHelperLoose/createForOfIteratorHelperLoose.js +22 -0
  47. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/createRawReactElement/createRawReactElement.js +50 -0
  48. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/createSuper/createSuper.js +22 -0
  49. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/decorate/decorate.js +622 -0
  50. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/defaults/defaults.js +14 -0
  51. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/defineEnumerableProperties/defineEnumerableProperties.js +26 -0
  52. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/defineProperty/defineProperty.js +19 -0
  53. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/extends/extends.js +16 -0
  54. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/get/get.js +21 -0
  55. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/getPrototypeOf/getPrototypeOf.js +2 -0
  56. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/inherits/inherits.js +21 -0
  57. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/inheritsLoose/inheritsLoose.js +6 -0
  58. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/initializerDefineProperty/initializerDefineProperty.js +10 -0
  59. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/initializerWarningHelper/initializerWarningHelper.js +3 -0
  60. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/instanceof/instanceof.js +7 -0
  61. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/interopRequireDefault/interopRequireDefault.js +5 -0
  62. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/interopRequireWildcard/interopRequireWildcard.js +49 -0
  63. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/isNativeFunction/isNativeFunction.js +4 -0
  64. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/isNativeReflectConstruct/isNativeReflectConstruct.js +21 -0
  65. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/iterableToArray/iterableToArray.js +3 -0
  66. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/iterableToArrayLimit/iterableToArrayLimit.js +38 -0
  67. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/iterableToArrayLimitLoose/iterableToArrayLimitLoose.js +13 -0
  68. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/jsx/jsx.js +49 -0
  69. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/maybeArrayLike/maybeArrayLike.js +10 -0
  70. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/newArrowCheck/newArrowCheck.js +5 -0
  71. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/nonIterableRest/nonIterableRest.js +3 -0
  72. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/nonIterableSpread/nonIterableSpread.js +3 -0
  73. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/objectDestructuringEmpty/objectDestructuringEmpty.js +3 -0
  74. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/objectSpread/objectSpread.js +22 -0
  75. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/objectSpread2/objectSpread2.js +41 -0
  76. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/objectWithoutProperties/objectWithoutProperties.js +20 -0
  77. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/objectWithoutPropertiesLoose/objectWithoutPropertiesLoose.js +15 -0
  78. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/possibleConstructorReturn/possibleConstructorReturn.js +10 -0
  79. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/readOnlyError/readOnlyError.js +4 -0
  80. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/readme.md +8 -0
  81. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/set/set.js +51 -0
  82. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/setPrototypeOf/setPrototypeOf.js +5 -0
  83. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/skipFirstGeneratorNext/skipFirstGeneratorNext.js +8 -0
  84. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/slicedToArray/slicedToArray.js +5 -0
  85. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/slicedToArrayLoose/slicedToArrayLoose.js +7 -0
  86. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/superPropBase/superPropBase.js +10 -0
  87. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/taggedTemplateLiteral/taggedTemplateLiteral.js +11 -0
  88. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/taggedTemplateLiteralLoose/taggedTemplateLiteralLoose.js +8 -0
  89. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/tdz/tdz.js +4 -0
  90. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/temporalRef/temporalRef.js +5 -0
  91. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/temporalUndefined/temporalUndefined.js +3 -0
  92. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/toArray/toArray.js +5 -0
  93. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/toConsumableArray/toConsumableArray.js +5 -0
  94. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/toPrimitive/toPrimitive.js +14 -0
  95. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/toPropertyKey/toPropertyKey.js +5 -0
  96. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/typeof/typeof.js +7 -0
  97. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/unsupportedIterableToArray/unsupportedIterableToArray.js +10 -0
  98. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/wrapAsyncGenerator/wrapAsyncGenerator.js +7 -0
  99. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/wrapNativeSuper/wrapNativeSuper.js +35 -0
  100. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/wrapRegExp/wrapRegExp.js +67 -0
  101. package/dist/node_modules/@jsenv/babel-plugins/src/babel_helpers/writeOnlyError/writeOnlyError.js +4 -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 +169 -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 +41 -30
  111. package/src/dev/plugins/explorer/client/explorer.html +1 -1
  112. package/src/dev/start_dev_server.js +21 -5
  113. package/src/execute/execute.js +3 -0
  114. package/src/execute/runtimes/browsers/from_playwright.js +10 -0
  115. package/src/execute/runtimes/node/node_process.js +8 -0
  116. package/src/omega/errors.js +10 -7
  117. package/src/omega/kitchen.js +251 -340
  118. package/src/omega/server/file_service.js +34 -17
  119. package/src/omega/url_graph/url_graph_load.js +10 -17
  120. package/src/omega/url_graph/url_graph_report.js +2 -2
  121. package/src/omega/url_graph/url_info_transformations.js +1 -4
  122. package/src/omega/url_graph.js +7 -3
  123. package/src/omega/url_specifier_encoding.js +59 -0
  124. package/src/plugins/autoreload/dev_sse/jsenv_plugin_dev_sse_client.js +5 -10
  125. package/src/plugins/autoreload/jsenv_plugin_autoreload.js +1 -3
  126. package/src/plugins/bundling/js_module/bundle_js_module.js +66 -24
  127. package/src/plugins/file_urls/jsenv_plugin_file_urls.js +171 -53
  128. package/src/plugins/html_supervisor/client/html_supervisor_installer.js +1 -1
  129. package/src/plugins/html_supervisor/jsenv_plugin_html_supervisor.js +9 -13
  130. package/src/plugins/http_urls/jsenv_plugin_http_urls.js +6 -6
  131. package/src/plugins/import_meta_hot/jsenv_plugin_import_meta_hot.js +5 -10
  132. package/src/plugins/importmap/jsenv_plugin_importmap.js +2 -4
  133. package/src/plugins/inject_globals/jsenv_plugin_inject_globals.js +51 -42
  134. package/src/plugins/inline/jsenv_plugin_data_urls.js +1 -4
  135. package/src/plugins/inline/jsenv_plugin_html_inline_content.js +3 -5
  136. package/src/plugins/inline/jsenv_plugin_inline_query_param.js +1 -4
  137. package/src/plugins/inline/jsenv_plugin_js_inline_content.js +1 -4
  138. package/src/plugins/node_esm_resolution/jsenv_plugin_node_esm_resolution.js +16 -2
  139. package/src/plugins/node_runtime/jsenv_plugin_node_runtime.js +12 -0
  140. package/src/plugins/plugin_controller.js +17 -3
  141. package/src/plugins/plugins.js +15 -15
  142. package/src/plugins/transpilation/as_js_classic/client/s.js +362 -807
  143. package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic.js +20 -10
  144. package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic_html.js +302 -0
  145. package/src/plugins/transpilation/as_js_classic/{jsenv_plugin_workers_type_module_as_classic.js → jsenv_plugin_as_js_classic_workers.js} +2 -2
  146. package/src/plugins/transpilation/babel/jsenv_plugin_babel.js +5 -2
  147. package/src/plugins/transpilation/import_assertions/jsenv_plugin_import_assertions.js +1 -2
  148. package/src/plugins/transpilation/jsenv_plugin_transpilation.js +2 -0
  149. package/src/plugins/url_analysis/html/html_urls.js +3 -0
  150. package/src/plugins/url_analysis/js/js_urls.js +2 -1
  151. package/src/plugins/url_analysis/jsenv_plugin_url_analysis.js +87 -1
  152. package/src/plugins/url_analysis/webmanifest/webmanifest_urls.js +3 -0
  153. package/src/plugins/url_resolution/jsenv_plugin_url_resolution.js +0 -3
  154. package/src/test/execute_plan.js +34 -13
  155. package/src/test/execute_test_plan.js +2 -0
  156. package/src/test/logs_file_execution.js +47 -38
  157. package/dist/event_source_client.js.map +0 -188
  158. package/dist/html_supervisor_installer.js +0 -1236
  159. package/dist/html_supervisor_installer.js.map +0 -337
  160. package/dist/html_supervisor_setup.js +0 -95
  161. package/dist/html_supervisor_setup.js.map +0 -57
  162. package/dist/import_meta_hot.js.map +0 -42
  163. package/src/jsenv_root_directory_url.js +0 -1
  164. package/src/omega/compat/default_runtime_compat.js +0 -11
  165. package/src/plugins/filesystem_magic/jsenv_plugin_filesystem_magic.js +0 -61
  166. package/src/plugins/transpilation/as_js_classic/client/s.js.md +0 -1
  167. package/src/plugins/transpilation/as_js_classic/jsenv_plugin_script_type_module_as_classic.js +0 -270
  168. package/src/plugins/transpilation/babel/new_stylesheet/client/.eslintrc.cjs +0 -24
  169. package/src/plugins/transpilation/fetch_original_url_info.js +0 -30
@@ -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,
@@ -57,7 +59,9 @@ export const startBuildServer = async ({
57
59
  // - inside a forked child process
58
60
  // - inside a worker thread
59
61
  // (because node cluster won't work)
60
- buildServerAutoreload = typeof process.send !== "function" && !parentPort,
62
+ buildServerAutoreload = typeof process.send !== "function" &&
63
+ !parentPort &&
64
+ !process.debugPort,
61
65
  cooldownBetweenFileEvents,
62
66
  }) => {
63
67
  const logger = createLogger({ logLevel })
@@ -144,10 +148,7 @@ export const startBuildServer = async ({
144
148
  accessControlAllowRequestOrigin: true,
145
149
  accessControlAllowRequestMethod: true,
146
150
  accessControlAllowRequestHeaders: true,
147
- accessControlAllowedRequestHeaders: [
148
- ...jsenvAccessControlAllowedHeaders,
149
- "x-jsenv-execution-id",
150
- ],
151
+ accessControlAllowedRequestHeaders: jsenvAccessControlAllowedHeaders,
151
152
  accessControlAllowCredentials: true,
152
153
  }),
153
154
  ...pluginServerTiming(),
@@ -156,31 +157,13 @@ export const startBuildServer = async ({
156
157
  }),
157
158
  },
158
159
  sendErrorDetails: true,
159
- requestToResponse: (request) => {
160
- const urlIsVersioned = new URL(
161
- request.ressource,
162
- request.origin,
163
- ).searchParams.has("v")
164
- if (mainBuildFileUrl && request.ressource === "/") {
165
- request = {
166
- ...request,
167
- ressource: mainBuildFileUrl,
168
- }
169
- }
170
- return fetchFileSystem(
171
- new URL(request.ressource.slice(1), buildDirectoryUrl),
172
- {
173
- headers: request.headers,
174
- cacheControl: urlIsVersioned
175
- ? `private,max-age=${SECONDS_IN_30_DAYS},immutable`
176
- : "private,max-age=0,must-revalidate",
177
- etagEnabled: true,
178
- compressionEnabled: !request.pathname.endsWith(".mp4"),
179
- rootDirectoryUrl: buildDirectoryUrl,
180
- canReadDirectory: true,
181
- },
182
- )
183
- },
160
+ requestToResponse: composeServices({
161
+ ...services,
162
+ build_files_service: createBuildFilesService({
163
+ buildDirectoryUrl,
164
+ mainBuildFileUrl,
165
+ }),
166
+ }),
184
167
  })
185
168
  startBuildServerTask.done()
186
169
  logger.info(``)
@@ -197,4 +180,32 @@ export const startBuildServer = async ({
197
180
  }
198
181
  }
199
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
+
200
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="./jsenv.png" />
8
8
  <style>
9
9
  button:focus,
10
10
  a:focus,
@@ -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,
@@ -40,7 +40,9 @@ export const startDevServer = async ({
40
40
  // - inside a forked child process
41
41
  // - inside a worker thread
42
42
  // (because node cluster won't work)
43
- devServerAutoreload = typeof process.send !== "function" && !parentPort,
43
+ devServerAutoreload = typeof process.send !== "function" &&
44
+ !parentPort &&
45
+ !process.debugPort,
44
46
  clientFiles = {
45
47
  "./**": true,
46
48
  "./**/.*/": false, // any folder starting with a dot is ignored (includes .git,.jsenv for instance)
@@ -51,7 +53,18 @@ export const startDevServer = async ({
51
53
  clientAutoreload = true,
52
54
 
53
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
+ },
54
66
  plugins = [],
67
+ urlAnalysis = {},
55
68
  htmlSupervisor = true,
56
69
  injectedGlobals,
57
70
  nodeEsmResolution,
@@ -66,7 +79,7 @@ export const startDevServer = async ({
66
79
  "./test/**/*.test.html": true,
67
80
  },
68
81
  },
69
- toolbar = false,
82
+ // toolbar = false,
70
83
  writeGeneratedFiles = true,
71
84
  }) => {
72
85
  const logger = createLogger({ logLevel })
@@ -162,6 +175,7 @@ export const startDevServer = async ({
162
175
  rootDirectoryUrl,
163
176
  urlGraph,
164
177
  scenario: "dev",
178
+ runtimeCompat,
165
179
  sourcemaps,
166
180
  writeGeneratedFiles,
167
181
  plugins: [
@@ -170,7 +184,9 @@ export const startDevServer = async ({
170
184
  rootDirectoryUrl,
171
185
  urlGraph,
172
186
  scenario: "dev",
187
+ runtimeCompat,
173
188
 
189
+ urlAnalysis,
174
190
  htmlSupervisor,
175
191
  injectedGlobals,
176
192
  nodeEsmResolution,
@@ -183,7 +199,7 @@ export const startDevServer = async ({
183
199
  jsenvPluginExplorer({
184
200
  groups: explorerGroups,
185
201
  }),
186
- ...(toolbar ? [jsenvPluginToolbar(toolbar)] : []),
202
+ // ...(toolbar ? [jsenvPluginToolbar(toolbar)] : []),
187
203
  ],
188
204
  })
189
205
  const server = await startOmegaServer({
@@ -208,7 +224,7 @@ export const startDevServer = async ({
208
224
  logger.info(``)
209
225
  server.addEffect(() => {
210
226
  return () => {
211
- kitchen.pluginController.callHooks("destroy")
227
+ kitchen.pluginController.callHooks("destroy", {})
212
228
  }
213
229
  })
214
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