@jsenv/core 27.0.0-alpha.7 → 27.0.0-alpha.70

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 (247) 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/js/event_source_client.js +324 -0
  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/js/import_meta_hot.js +84 -0
  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 +13452 -0
  102. package/dist/other/jsenv.png +0 -0
  103. package/dist/s.js +626 -0
  104. package/dist/s.js.map +204 -0
  105. package/main.js +9 -1
  106. package/package.json +44 -32
  107. package/readme.md +6 -14
  108. package/src/build/build.js +1080 -562
  109. package/src/build/build_urls_generator.js +65 -24
  110. package/src/build/graph_utils.js +31 -0
  111. package/src/build/{inject_version_mappings.js → inject_global_version_mappings.js} +49 -18
  112. package/src/build/inject_service_worker_urls.js +79 -0
  113. package/src/build/resync_ressource_hints.js +115 -0
  114. package/src/build/start_build_server.js +211 -0
  115. package/src/dev/plugins/explorer/client/explorer.html +1 -1
  116. package/src/dev/plugins/explorer/jsenv_plugin_explorer.js +8 -12
  117. package/src/dev/plugins/toolbar/jsenv_plugin_toolbar.js +3 -1
  118. package/src/dev/start_dev_server.js +170 -38
  119. package/src/execute/execute.js +36 -6
  120. package/src/execute/run.js +21 -57
  121. package/src/execute/runtimes/browsers/from_playwright.js +218 -148
  122. package/src/execute/runtimes/node/controllable_file.mjs +26 -10
  123. package/src/execute/runtimes/node/node_execution_performance.js +67 -0
  124. package/src/execute/runtimes/node/node_process.js +288 -39
  125. package/src/omega/{runtime_support/features_compatibility.js → compat/features_compats.js} +30 -7
  126. package/src/omega/{runtime_support/runtime_support.js → compat/runtime_compat.js} +14 -16
  127. package/src/omega/errors.js +62 -66
  128. package/src/omega/fetched_content_compliance.js +24 -0
  129. package/src/omega/file_url_converter.js +9 -51
  130. package/src/omega/kitchen.js +593 -463
  131. package/src/omega/omega_server.js +2 -3
  132. package/src/omega/server/file_service.js +86 -38
  133. package/src/omega/server/user_agent.js +4 -2
  134. package/src/omega/url_graph/url_graph_load.js +31 -23
  135. package/src/omega/url_graph/url_graph_report.js +94 -51
  136. package/src/omega/url_graph/url_info_transformations.js +37 -17
  137. package/src/omega/url_graph.js +88 -19
  138. package/src/omega/url_specifier_encoding.js +59 -0
  139. package/src/omega/web_workers.js +42 -0
  140. package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/autoreload_preference.js +0 -0
  141. package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/event_source_client.js +19 -12
  142. package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/reload.js +0 -0
  143. package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/url_helpers.js +0 -0
  144. package/src/plugins/autoreload/dev_sse/jsenv_plugin_dev_sse_client.js +41 -0
  145. package/src/plugins/autoreload/dev_sse/jsenv_plugin_dev_sse_server.js +204 -0
  146. package/src/plugins/autoreload/jsenv_plugin_autoreload.js +25 -0
  147. package/src/plugins/autoreload/jsenv_plugin_hmr.js +35 -0
  148. package/src/plugins/bundling/css/bundle_css.js +140 -0
  149. package/src/plugins/bundling/js_classic_workers/bundle_js_classic_workers.js +13 -0
  150. package/src/plugins/bundling/js_module/bundle_js_module.js +342 -0
  151. package/src/plugins/bundling/jsenv_plugin_bundling.js +54 -0
  152. package/src/plugins/cache_control/jsenv_plugin_cache_control.js +34 -0
  153. package/src/{omega/core_plugins → plugins}/commonjs_globals/jsenv_plugin_commonjs_globals.js +54 -41
  154. package/src/plugins/file_urls/jsenv_plugin_file_urls.js +198 -0
  155. package/src/{omega/core_plugins → plugins}/html_supervisor/client/error_in_document.js +0 -0
  156. package/src/{omega/core_plugins → plugins}/html_supervisor/client/error_in_notification.js +0 -0
  157. package/src/plugins/html_supervisor/client/html_supervisor_installer.js +254 -0
  158. package/src/plugins/html_supervisor/client/html_supervisor_setup.js +79 -0
  159. package/src/{omega/core_plugins → plugins}/html_supervisor/client/perf_browser.js +0 -0
  160. package/src/{omega/core_plugins → plugins}/html_supervisor/client/uneval_exception.js +0 -0
  161. package/src/{omega/core_plugins → plugins}/html_supervisor/jsenv_plugin_html_supervisor.js +73 -55
  162. package/src/plugins/http_urls/jsenv_plugin_http_urls.js +12 -0
  163. package/src/{dev/plugins/autoreload → plugins/import_meta_hot}/babel_plugin_metadata_import_meta_hot.js +4 -5
  164. package/src/{dev/plugins/autoreload → plugins/import_meta_hot}/client/import_meta_hot.js +3 -1
  165. package/src/{dev/plugins/autoreload → plugins/import_meta_hot}/html_hot_dependencies.js +7 -4
  166. package/src/plugins/import_meta_hot/jsenv_plugin_import_meta_hot.js +100 -0
  167. package/src/{omega/core_plugins → plugins}/import_meta_scenarios/jsenv_plugin_import_meta_scenarios.js +33 -8
  168. package/src/plugins/import_meta_url/client/import_meta_url_browser.js +52 -0
  169. package/src/plugins/import_meta_url/client/import_meta_url_commonjs.mjs +9 -0
  170. package/src/{omega/core_plugins → plugins}/importmap/jsenv_plugin_importmap.js +40 -36
  171. package/src/plugins/inject_globals/jsenv_plugin_inject_globals.js +76 -0
  172. package/src/{omega/core_plugins → plugins}/inline/client/inline_content.js +0 -0
  173. package/src/{omega/core_plugins → plugins}/inline/jsenv_plugin_data_urls.js +19 -18
  174. package/src/plugins/inline/jsenv_plugin_html_inline_content.js +161 -0
  175. package/src/plugins/inline/jsenv_plugin_inline.js +36 -0
  176. package/src/{omega/core_plugins → plugins}/inline/jsenv_plugin_inline_query_param.js +7 -10
  177. package/src/plugins/inline/jsenv_plugin_js_inline_content.js +294 -0
  178. package/src/plugins/leading_slash/jsenv_plugin_leading_slash.js +13 -0
  179. package/src/plugins/minification/css/minify_css.js +9 -0
  180. package/src/plugins/minification/html/minify_html.js +15 -0
  181. package/src/{build/plugins/minify_js/jsenv_plugin_minify_js.js → plugins/minification/js/minify_js.js} +6 -22
  182. package/src/plugins/minification/jsenv_plugin_minification.js +78 -0
  183. package/src/plugins/minification/json/minify_json.js +8 -0
  184. package/src/plugins/node_esm_resolution/jsenv_plugin_node_esm_resolution.js +160 -0
  185. package/src/plugins/node_runtime/jsenv_plugin_node_runtime.js +12 -0
  186. package/src/{omega → plugins}/plugin_controller.js +56 -11
  187. package/src/plugins/plugins.js +92 -0
  188. package/src/plugins/transpilation/as_js_classic/client/s.js +429 -0
  189. package/src/plugins/transpilation/as_js_classic/helpers/babel_plugin_transform_import_meta_url.js +47 -0
  190. package/src/plugins/transpilation/as_js_classic/helpers/systemjs_old.js +43 -0
  191. package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic.js +213 -0
  192. package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic_html.js +304 -0
  193. package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic_workers.js +55 -0
  194. package/src/{omega/core_plugins → plugins/transpilation}/babel/global_this/babel_plugin_global_this_as_jsenv_import.js +0 -0
  195. package/src/{omega/core_plugins → plugins/transpilation}/babel/global_this/client/global_this.js +0 -0
  196. package/src/{omega/core_plugins → plugins/transpilation}/babel/helpers/babel_plugin_babel_helpers_as_jsenv_imports.js +0 -0
  197. package/src/{omega/core_plugins → plugins/transpilation}/babel/helpers/babel_plugin_structure.js +12 -16
  198. package/src/{omega/core_plugins → plugins/transpilation}/babel/helpers/babel_plugins_compatibility.js +0 -0
  199. package/src/{omega/core_plugins → plugins/transpilation}/babel/jsenv_plugin_babel.js +39 -32
  200. package/src/{omega/core_plugins → plugins/transpilation}/babel/new_stylesheet/babel_plugin_new_stylesheet_as_jsenv_import.js +30 -6
  201. package/src/{omega/core_plugins → plugins/transpilation}/babel/new_stylesheet/client/new_stylesheet.js +0 -0
  202. package/src/{omega/core_plugins → plugins/transpilation}/babel/regenerator_runtime/babel_plugin_regenerator_runtime_as_jsenv_import.js +0 -0
  203. package/src/{omega/core_plugins → plugins/transpilation}/babel/regenerator_runtime/client/regenerator_runtime.js +0 -0
  204. package/src/plugins/transpilation/css_parcel/jsenv_plugin_css_parcel.js +18 -0
  205. package/src/plugins/transpilation/import_assertions/jsenv_plugin_import_assertions.js +184 -0
  206. package/src/plugins/transpilation/jsenv_plugin_top_level_await.js +80 -0
  207. package/src/plugins/transpilation/jsenv_plugin_transpilation.js +46 -0
  208. package/src/plugins/url_analysis/css/css_urls.js +49 -0
  209. package/src/plugins/url_analysis/html/html_urls.js +272 -0
  210. package/src/plugins/url_analysis/js/js_urls.js +68 -0
  211. package/src/plugins/url_analysis/jsenv_plugin_url_analysis.js +102 -0
  212. package/src/plugins/url_analysis/webmanifest/webmanifest_urls.js +20 -0
  213. package/src/{omega/core_plugins → plugins}/url_resolution/jsenv_plugin_url_resolution.js +9 -5
  214. package/src/plugins/url_version/jsenv_plugin_url_version.js +28 -0
  215. package/src/test/execute_plan.js +81 -44
  216. package/src/test/execute_test_plan.js +37 -24
  217. package/src/test/execution_steps.js +1 -4
  218. package/src/test/logs_file_execution.js +56 -49
  219. package/src/build/plugins/bundle_js_module/jsenv_plugin_bundle_js_module.js +0 -225
  220. package/src/build/plugins/minify_html/jsenv_plugin_minify_html.js +0 -30
  221. package/src/dev/plugins/autoreload/client/event_source_connection.js +0 -195
  222. package/src/dev/plugins/autoreload/jsenv_plugin_autoreload.js +0 -374
  223. package/src/dev/plugins/autoreload/sse_service.js +0 -149
  224. package/src/execute/runtimes/node/controlled_process.js +0 -316
  225. package/src/omega/core_plugins/babel/new_stylesheet/client/.eslintrc.cjs +0 -24
  226. package/src/omega/core_plugins/file_urls/jsenv_plugin_file_urls.js +0 -67
  227. package/src/omega/core_plugins/filesystem_magic/jsenv_plugin_filesystem_magic.js +0 -58
  228. package/src/omega/core_plugins/html_supervisor/client/html_supervisor_installer.js +0 -168
  229. package/src/omega/core_plugins/html_supervisor/client/html_supervisor_setup.js +0 -77
  230. package/src/omega/core_plugins/import_assertions/helpers/babel_plugin_metadata_import_assertions.js +0 -98
  231. package/src/omega/core_plugins/import_assertions/helpers/json_module.js +0 -12
  232. package/src/omega/core_plugins/import_assertions/helpers/text_module.js +0 -6
  233. package/src/omega/core_plugins/import_assertions/jsenv_plugin_import_assertions.js +0 -211
  234. package/src/omega/core_plugins/inline/jsenv_plugin_inline.js +0 -13
  235. package/src/omega/core_plugins/inline/jsenv_plugin_js_and_css_inside_html.js +0 -142
  236. package/src/omega/core_plugins/inline/jsenv_plugin_new_inline_content.js +0 -207
  237. package/src/omega/core_plugins/leading_slash/jsenv_plugin_leading_slash.js +0 -12
  238. package/src/omega/core_plugins/node_esm_resolution/jsenv_plugin_node_esm_resolution.js +0 -77
  239. package/src/omega/core_plugins/url_version/jsenv_plugin_url_version.js +0 -50
  240. package/src/omega/core_plugins.js +0 -39
  241. package/src/omega/runtime_support/default_runtime_support.js +0 -13
  242. package/src/omega/url_graph/url_graph_sort.js +0 -29
  243. package/src/omega/url_mentions/css_url_mentions.js +0 -63
  244. package/src/omega/url_mentions/html_url_mentions.js +0 -185
  245. package/src/omega/url_mentions/js_module_url_mentions.js +0 -91
  246. package/src/omega/url_mentions/parse_url_mentions.js +0 -37
  247. package/src/omega/url_mentions/worker_classic_url_mentions.js +0 -37
@@ -1,8 +1,8 @@
1
1
  import { readFileSync } from "node:fs"
2
- import { urlToContentType } from "@jsenv/server"
3
- import { collectFiles, normalizeStructuredMetaMap } from "@jsenv/filesystem"
2
+ import { DataUrl } from "@jsenv/urls"
3
+ import { collectFiles } from "@jsenv/filesystem"
4
4
 
5
- import { DataUrl } from "@jsenv/utils/urls/data_url.js"
5
+ import { CONTENT_TYPE } from "@jsenv/utils/content_type/content_type.js"
6
6
 
7
7
  export const jsenvPluginExplorer = ({ groups }) => {
8
8
  const htmlClientFileUrl = new URL("./client/explorer.html", import.meta.url)
@@ -17,21 +17,17 @@ export const jsenvPluginExplorer = ({ groups }) => {
17
17
  if (request.ressource !== "/") {
18
18
  return null
19
19
  }
20
- const structuredMetaMapRelativeForExplorable = {}
20
+ const associationsForExplorable = {}
21
21
  Object.keys(groups).forEach((groupName) => {
22
22
  const groupConfig = groups[groupName]
23
- structuredMetaMapRelativeForExplorable[groupName] = {
23
+ associationsForExplorable[groupName] = {
24
24
  "**/.jsenv/": false, // avoid visting .jsenv directory in jsenv itself
25
25
  ...groupConfig,
26
26
  }
27
27
  })
28
- const structuredMetaMapForExplorable = normalizeStructuredMetaMap(
29
- structuredMetaMapRelativeForExplorable,
30
- rootDirectoryUrl,
31
- )
32
28
  const matchingFileResultArray = await collectFiles({
33
29
  directoryUrl: rootDirectoryUrl,
34
- structuredMetaMap: structuredMetaMapForExplorable,
30
+ associations: associationsForExplorable,
35
31
  predicate: (meta) =>
36
32
  Object.keys(meta).some((group) => Boolean(meta[group])),
37
33
  })
@@ -41,9 +37,9 @@ export const jsenvPluginExplorer = ({ groups }) => {
41
37
  }))
42
38
  let html = String(readFileSync(new URL(htmlClientFileUrl)))
43
39
  html = html.replace(
44
- "FAVICON_HREF",
40
+ "virtual:FAVICON_HREF",
45
41
  DataUrl.stringify({
46
- contentType: urlToContentType(faviconClientFileUrl),
42
+ contentType: CONTENT_TYPE.fromUrlExtension(faviconClientFileUrl),
47
43
  base64Flag: true,
48
44
  data: readFileSync(new URL(faviconClientFileUrl)).toString("base64"),
49
45
  }),
@@ -20,7 +20,7 @@ export const jsenvPluginToolbar = ({ logs = false } = {}) => {
20
20
  appliesDuring: {
21
21
  dev: true,
22
22
  },
23
- transform: {
23
+ transformUrlContent: {
24
24
  html: ({ url, content }, { referenceUtils }) => {
25
25
  if (url === toolbarHtmlClientFileUrl) {
26
26
  return null
@@ -28,10 +28,12 @@ export const jsenvPluginToolbar = ({ logs = false } = {}) => {
28
28
  const htmlAst = parseHtmlString(content)
29
29
  const [toolbarInjectorReference] = referenceUtils.inject({
30
30
  type: "js_import_export",
31
+ expectedType: "js_module",
31
32
  specifier: toolbarInjectorClientFileUrl,
32
33
  })
33
34
  const [toolbarClientFileReference] = referenceUtils.inject({
34
35
  type: "iframe_src",
36
+ expectedType: "html",
35
37
  specifier: toolbarHtmlClientFileUrl,
36
38
  })
37
39
  injectScriptAsEarlyAsPossible(
@@ -1,21 +1,28 @@
1
- import { assertAndNormalizeDirectoryUrl } from "@jsenv/filesystem"
2
- import { createLogger } from "@jsenv/logger"
1
+ import { parentPort } from "node:worker_threads"
2
+ import {
3
+ assertAndNormalizeDirectoryUrl,
4
+ registerDirectoryLifecycle,
5
+ } from "@jsenv/filesystem"
6
+ import { createLogger, loggerToLevels } from "@jsenv/logger"
3
7
 
4
- import { createTaskLog } from "@jsenv/utils/logs/task_log.js"
8
+ import { createTaskLog } from "@jsenv/log"
9
+ import { getCallerPosition } from "@jsenv/urls"
10
+ import { initReloadableProcess } from "@jsenv/utils/process_reload/process_reload.js"
11
+ import { getCorePlugins } from "@jsenv/core/src/plugins/plugins.js"
5
12
  import { createUrlGraph } from "@jsenv/core/src/omega/url_graph.js"
6
- import { getCorePlugins } from "@jsenv/core/src/omega/core_plugins.js"
7
13
  import { createKitchen } from "@jsenv/core/src/omega/kitchen.js"
8
14
  import { startOmegaServer } from "@jsenv/core/src/omega/omega_server.js"
9
15
 
10
- import { jsenvPluginAutoreload } from "./plugins/autoreload/jsenv_plugin_autoreload.js"
11
16
  import { jsenvPluginExplorer } from "./plugins/explorer/jsenv_plugin_explorer.js"
12
- import { jsenvPluginToolbar } from "./plugins/toolbar/jsenv_plugin_toolbar.js"
17
+ // import { jsenvPluginToolbar } from "./plugins/toolbar/jsenv_plugin_toolbar.js"
13
18
 
14
19
  export const startDevServer = async ({
15
20
  signal = new AbortController().signal,
16
- logLevel,
17
- port,
18
- protocol,
21
+ handleSIGINT,
22
+ logLevel = "info",
23
+ omegaServerLogLevel = "warn",
24
+ port = 3456,
25
+ protocol = "http",
19
26
  listenAnyIp,
20
27
  // it's better to use http1 by default because it allows to get statusText in devtools
21
28
  // which gives valuable information when there is errors
@@ -23,18 +30,46 @@ export const startDevServer = async ({
23
30
  certificate,
24
31
  privateKey,
25
32
  keepProcessAlive = true,
26
-
27
33
  rootDirectoryUrl,
28
- plugins = [],
29
-
30
- sourcemaps = "inline",
31
- autoreload = true,
32
- autoreloadPatterns = {
34
+ devServerFiles = {
35
+ "./package.json": true,
36
+ "./jsenv.config.mjs": true,
37
+ },
38
+ devServerMainFile = getCallerPosition().url,
39
+ // force disable server autoreload when this code is executed:
40
+ // - inside a forked child process
41
+ // - inside a worker thread
42
+ // (because node cluster won't work)
43
+ devServerAutoreload = typeof process.send !== "function" &&
44
+ !parentPort &&
45
+ !process.env.VSCODE_INSPECTOR_OPTIONS,
46
+ clientFiles = {
33
47
  "./**": true,
34
- "./**/.*/": false, // any folder starting with a dot is ignored (includes .git for instance)
35
- "./dist/": false,
48
+ "./**/.*/": false, // any folder starting with a dot is ignored (includes .git,.jsenv for instance)
49
+ "./**/dist/": false,
36
50
  "./**/node_modules/": false,
37
51
  },
52
+ cooldownBetweenFileEvents,
53
+ clientAutoreload = true,
54
+
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
+ },
66
+ plugins = [],
67
+ urlAnalysis = {},
68
+ htmlSupervisor = true,
69
+ injectedGlobals,
70
+ nodeEsmResolution,
71
+ fileSystemMagicResolution,
72
+ transpilation,
38
73
  explorerGroups = {
39
74
  source: {
40
75
  "./*.html": true,
@@ -44,40 +79,131 @@ export const startDevServer = async ({
44
79
  "./test/**/*.test.html": true,
45
80
  },
46
81
  },
47
- toolbar = false,
82
+ // toolbar = false,
83
+ writeGeneratedFiles = true,
48
84
  }) => {
49
85
  const logger = createLogger({ logLevel })
50
- const startServerTask = createTaskLog(logger, "start server")
51
-
52
86
  rootDirectoryUrl = assertAndNormalizeDirectoryUrl(rootDirectoryUrl)
53
- const urlGraph = createUrlGraph()
87
+ const reloadableProcess = await initReloadableProcess({
88
+ signal,
89
+ handleSIGINT,
90
+ ...(devServerAutoreload
91
+ ? {
92
+ enabled: true,
93
+ logLevel: "warn",
94
+ fileToRestart: devServerMainFile,
95
+ }
96
+ : {
97
+ enabled: false,
98
+ }),
99
+ })
100
+ if (reloadableProcess.isPrimary) {
101
+ const devServerFileChangeCallback = ({ relativeUrl, event }) => {
102
+ const url = new URL(relativeUrl, rootDirectoryUrl).href
103
+ if (devServerAutoreload) {
104
+ logger.info(`file ${event} ${url} -> restarting server...`)
105
+ reloadableProcess.reload()
106
+ }
107
+ }
108
+ const unregisterDevServerFilesWatcher = registerDirectoryLifecycle(
109
+ rootDirectoryUrl,
110
+ {
111
+ watchPatterns: {
112
+ [devServerMainFile]: true,
113
+ ...devServerFiles,
114
+ },
115
+ cooldownBetweenFileEvents,
116
+ keepProcessAlive: false,
117
+ recursive: true,
118
+ added: ({ relativeUrl }) => {
119
+ devServerFileChangeCallback({ relativeUrl, event: "added" })
120
+ },
121
+ updated: ({ relativeUrl }) => {
122
+ devServerFileChangeCallback({ relativeUrl, event: "modified" })
123
+ },
124
+ removed: ({ relativeUrl }) => {
125
+ devServerFileChangeCallback({ relativeUrl, event: "removed" })
126
+ },
127
+ },
128
+ )
129
+ signal.addEventListener("abort", () => {
130
+ unregisterDevServerFilesWatcher()
131
+ })
132
+ return {
133
+ origin: `${protocol}://127.0.0.1:${port}`,
134
+ stop: () => {
135
+ unregisterDevServerFilesWatcher()
136
+ reloadableProcess.stop()
137
+ },
138
+ }
139
+ }
140
+
141
+ const startDevServerTask = createTaskLog("start dev server", {
142
+ disabled: !loggerToLevels(logger).info,
143
+ })
144
+
145
+ const clientFileChangeCallbackList = []
146
+ const clientFilesPruneCallbackList = []
147
+ const clientFileChangeCallback = ({ relativeUrl, event }) => {
148
+ const url = new URL(relativeUrl, rootDirectoryUrl).href
149
+ clientFileChangeCallbackList.forEach((callback) => {
150
+ callback({ url, event })
151
+ })
152
+ }
153
+ const stopWatchingClientFiles = registerDirectoryLifecycle(rootDirectoryUrl, {
154
+ watchPatterns: clientFiles,
155
+ cooldownBetweenFileEvents,
156
+ keepProcessAlive: false,
157
+ recursive: true,
158
+ added: ({ relativeUrl }) => {
159
+ clientFileChangeCallback({ event: "added", relativeUrl })
160
+ },
161
+ updated: ({ relativeUrl }) => {
162
+ clientFileChangeCallback({ event: "modified", relativeUrl })
163
+ },
164
+ removed: ({ relativeUrl }) => {
165
+ clientFileChangeCallback({ event: "removed", relativeUrl })
166
+ },
167
+ })
168
+ const urlGraph = createUrlGraph({
169
+ clientFileChangeCallbackList,
170
+ clientFilesPruneCallbackList,
171
+ })
54
172
  const kitchen = createKitchen({
55
173
  signal,
56
174
  logger,
57
175
  rootDirectoryUrl,
58
176
  urlGraph,
177
+ scenario: "dev",
178
+ runtimeCompat,
179
+ sourcemaps,
180
+ writeGeneratedFiles,
59
181
  plugins: [
60
182
  ...plugins,
61
- ...getCorePlugins(),
62
- ...(autoreload
63
- ? [
64
- jsenvPluginAutoreload({
65
- rootDirectoryUrl,
66
- urlGraph,
67
- autoreloadPatterns,
68
- }),
69
- ]
70
- : []),
183
+ ...getCorePlugins({
184
+ rootDirectoryUrl,
185
+ urlGraph,
186
+ scenario: "dev",
187
+ runtimeCompat,
188
+
189
+ urlAnalysis,
190
+ htmlSupervisor,
191
+ injectedGlobals,
192
+ nodeEsmResolution,
193
+ fileSystemMagicResolution,
194
+ transpilation,
195
+ clientAutoreload,
196
+ clientFileChangeCallbackList,
197
+ clientFilesPruneCallbackList,
198
+ }),
71
199
  jsenvPluginExplorer({
72
200
  groups: explorerGroups,
73
201
  }),
74
- ...(toolbar ? [jsenvPluginToolbar(toolbar)] : []),
202
+ // ...(toolbar ? [jsenvPluginToolbar(toolbar)] : []),
75
203
  ],
76
- scenario: "dev",
77
- sourcemaps,
78
204
  })
79
205
  const server = await startOmegaServer({
80
- logger,
206
+ logLevel: omegaServerLogLevel,
81
207
  keepProcessAlive,
82
208
  listenAnyIp,
83
209
  port,
@@ -90,7 +216,7 @@ export const startDevServer = async ({
90
216
  kitchen,
91
217
  scenario: "dev",
92
218
  })
93
- startServerTask.done()
219
+ startDevServerTask.done()
94
220
  logger.info(``)
95
221
  Object.keys(server.origins).forEach((key) => {
96
222
  logger.info(`- ${server.origins[key]}`)
@@ -98,8 +224,14 @@ export const startDevServer = async ({
98
224
  logger.info(``)
99
225
  server.addEffect(() => {
100
226
  return () => {
101
- kitchen.pluginController.callHooks("destroy")
227
+ kitchen.pluginController.callHooks("destroy", {})
102
228
  }
103
229
  })
104
- return server
230
+ return {
231
+ origin: server.origin,
232
+ stop: () => {
233
+ stopWatchingClientFiles()
234
+ server.stop()
235
+ },
236
+ }
105
237
  }
@@ -3,8 +3,8 @@ import { Abort, raceProcessTeardownEvents } from "@jsenv/abort"
3
3
  import { assertAndNormalizeDirectoryUrl } from "@jsenv/filesystem"
4
4
  import { createLogger } from "@jsenv/logger"
5
5
 
6
+ import { getCorePlugins } from "@jsenv/core/src/plugins/plugins.js"
6
7
  import { createUrlGraph } from "@jsenv/core/src/omega/url_graph.js"
7
- import { getCorePlugins } from "@jsenv/core/src/omega/core_plugins.js"
8
8
  import { createKitchen } from "@jsenv/core/src/omega/kitchen.js"
9
9
  import { startOmegaServer } from "@jsenv/core/src/omega/omega_server.js"
10
10
 
@@ -23,12 +23,19 @@ export const execute = async ({
23
23
  collectConsole,
24
24
  collectCoverage,
25
25
  coverageTempDirectoryUrl,
26
+ collectPerformance = false,
26
27
  runtime,
27
28
  runtimeParams,
28
29
 
29
- plugins = [],
30
30
  scenario = "dev",
31
31
  sourcemaps = "inline",
32
+ plugins = [],
33
+ nodeEsmResolution,
34
+ fileSystemMagicResolution,
35
+ injectedGlobals,
36
+ transpilation,
37
+ htmlSupervisor = true,
38
+ writeGeneratedFiles = false,
32
39
 
33
40
  port,
34
41
  protocol,
@@ -53,6 +60,7 @@ export const execute = async ({
53
60
  })
54
61
  }
55
62
 
63
+ let resultTransformer = (result) => result
56
64
  runtimeParams = {
57
65
  rootDirectoryUrl,
58
66
  fileRelativeUrl,
@@ -60,19 +68,35 @@ export const execute = async ({
60
68
  }
61
69
  if (runtime.needsServer) {
62
70
  const urlGraph = createUrlGraph()
71
+ const runtimeCompat = { [runtime.name]: runtime.version }
63
72
  const kitchen = createKitchen({
64
73
  signal,
65
74
  logger,
66
75
  rootDirectoryUrl,
67
76
  urlGraph,
68
- plugins: [...plugins, ...getCorePlugins()],
69
77
  scenario,
70
78
  sourcemaps,
79
+ runtimeCompat,
80
+ writeGeneratedFiles,
81
+ plugins: [
82
+ ...plugins,
83
+ ...getCorePlugins({
84
+ rootDirectoryUrl,
85
+ urlGraph,
86
+ scenario,
87
+ runtimeCompat,
88
+
89
+ htmlSupervisor,
90
+ injectedGlobals,
91
+ nodeEsmResolution,
92
+ fileSystemMagicResolution,
93
+ transpilation,
94
+ }),
95
+ ],
71
96
  })
72
- const serverLogger = createLogger({ logLevel: "warn" })
73
97
  const server = await startOmegaServer({
74
98
  signal: executeOperation.signal,
75
- logger: serverLogger,
99
+ logLevel: "warn",
76
100
  rootDirectoryUrl,
77
101
  urlGraph,
78
102
  kitchen,
@@ -91,9 +115,13 @@ export const execute = async ({
91
115
  ...runtimeParams,
92
116
  server,
93
117
  }
118
+ resultTransformer = (result) => {
119
+ result.server = server
120
+ return result
121
+ }
94
122
  }
95
123
 
96
- const result = await run({
124
+ let result = await run({
97
125
  signal: executeOperation.signal,
98
126
  logger,
99
127
  allocatedMs,
@@ -102,9 +130,11 @@ export const execute = async ({
102
130
  collectConsole,
103
131
  collectCoverage,
104
132
  coverageTempDirectoryUrl,
133
+ collectPerformance,
105
134
  runtime,
106
135
  runtimeParams,
107
136
  })
137
+ result = resultTransformer(result)
108
138
 
109
139
  try {
110
140
  if (result.status === "errored") {
@@ -1,7 +1,7 @@
1
1
  import cuid from "cuid"
2
2
  import { Abort, raceCallbacks } from "@jsenv/abort"
3
- import { resolveUrl, writeFile } from "@jsenv/filesystem"
4
- import { createDetailedMessage } from "@jsenv/logger"
3
+ import { resolveUrl } from "@jsenv/urls"
4
+ import { writeFile } from "@jsenv/filesystem"
5
5
 
6
6
  export const run = async ({
7
7
  signal = new AbortController().signal,
@@ -12,15 +12,12 @@ export const run = async ({
12
12
  collectConsole = false,
13
13
  collectCoverage = false,
14
14
  coverageTempDirectoryUrl,
15
- // measurePerformance,
16
- // collectPerformance = false,
15
+ collectPerformance = false,
17
16
 
18
17
  runtime,
19
18
  runtimeParams,
20
19
  }) => {
21
- const onErrorRef = { current: () => {} }
22
20
  const onConsoleRef = { current: () => {} }
23
- const onStopRef = { current: () => {} }
24
21
  const stopSignal = { notify: () => {} }
25
22
 
26
23
  let resultTransformer = (result) => result
@@ -105,7 +102,7 @@ export const run = async ({
105
102
  try {
106
103
  logger.debug(`run() ${runtimeLabel}`)
107
104
  runOperation.throwIfAborted()
108
- const winnerPromise = new Promise((resolve, reject) => {
105
+ const winnerPromise = new Promise((resolve) => {
109
106
  raceCallbacks(
110
107
  {
111
108
  aborted: (cb) => {
@@ -114,35 +111,23 @@ export const run = async ({
114
111
  runOperation.signal.removeEventListener("abort", cb)
115
112
  }
116
113
  },
117
- errored: (cb) => {
118
- onErrorRef.current = (error) => {
119
- logger.debug(
120
- createDetailedMessage(`error during execution`, {
121
- ["error stack"]: error.stack,
122
- ["runtime"]: runtimeLabel,
123
- }),
124
- )
125
- cb(error)
126
- }
127
- },
128
- stopped: (cb) => {
129
- onStopRef.current = cb
130
- },
131
114
  runned: async (cb) => {
132
115
  try {
133
- await runtime.run({
134
- signal,
116
+ const result = await runtime.run({
117
+ signal: runOperation.signal,
135
118
  logger,
136
119
  ...runtimeParams,
120
+ collectPerformance,
137
121
  keepRunning,
138
122
  stopSignal,
139
- onStop: (stopInfo) => onStopRef.current(stopInfo),
140
- onError: (error) => onErrorRef.current(error),
141
123
  onConsole: (log) => onConsoleRef.current(log),
142
- onResult: cb,
143
124
  })
125
+ cb(result)
144
126
  } catch (e) {
145
- reject(e)
127
+ cb({
128
+ status: "errored",
129
+ error: e,
130
+ })
146
131
  }
147
132
  },
148
133
  },
@@ -153,31 +138,16 @@ export const run = async ({
153
138
  if (winner.name === "aborted") {
154
139
  runOperation.throwIfAborted()
155
140
  }
156
- if (winner.name === "errored") {
157
- return await resultTransformer(
158
- createErroredExecutionResult({
159
- error: winner.data,
160
- }),
161
- )
162
- }
163
- if (winner.name === "stopped") {
164
- return await resultTransformer(
165
- createErroredExecutionResult({
166
- error: new Error(`runtime stopped during execution`),
167
- }),
168
- )
169
- }
170
- onErrorRef.current = (error) => {
171
- throw error
141
+ let result = winner.data
142
+ result = await resultTransformer(result)
143
+ return result
144
+ } catch (e) {
145
+ let result = {
146
+ status: "errored",
147
+ error: e,
172
148
  }
173
- const result = winner.data
174
- return await resultTransformer(result)
175
- } catch (error) {
176
- return await resultTransformer(
177
- createErroredExecutionResult({
178
- error,
179
- }),
180
- )
149
+ result = await resultTransformer(result)
150
+ return result
181
151
  } finally {
182
152
  await runOperation.end()
183
153
  }
@@ -200,9 +170,3 @@ const createTimedoutResult = () => {
200
170
  status: "timedout",
201
171
  }
202
172
  }
203
- const createErroredExecutionResult = ({ error }) => {
204
- return {
205
- status: "errored",
206
- error,
207
- }
208
- }