@jsenv/core 27.0.0-alpha.9 → 27.0.0-alpha.92

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 (277) 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/applyDecs/applyDecs.js +756 -0
  5. package/dist/babel_helpers/arrayLikeToArray/arrayLikeToArray.js +9 -0
  6. package/dist/babel_helpers/arrayWithHoles/arrayWithHoles.js +4 -0
  7. package/dist/babel_helpers/arrayWithoutHoles/arrayWithoutHoles.js +5 -0
  8. package/dist/babel_helpers/assertThisInitialized/assertThisInitialized.js +8 -0
  9. package/dist/babel_helpers/asyncGeneratorDelegate/asyncGeneratorDelegate.js +52 -0
  10. package/dist/babel_helpers/asyncIterator/asyncIterator.js +78 -0
  11. package/dist/babel_helpers/asyncToGenerator/asyncToGenerator.js +39 -0
  12. package/dist/babel_helpers/awaitAsyncGenerator/awaitAsyncGenerator.js +4 -0
  13. package/dist/babel_helpers/classApplyDescriptorDestructureSet/classApplyDescriptorDestructureSet.js +24 -0
  14. package/dist/babel_helpers/classApplyDescriptorGet/classApplyDescriptorGet.js +7 -0
  15. package/dist/babel_helpers/classApplyDescriptorSet/classApplyDescriptorSet.js +14 -0
  16. package/dist/babel_helpers/classCallCheck/classCallCheck.js +5 -0
  17. package/dist/babel_helpers/classCheckPrivateStaticAccess/classCheckPrivateStaticAccess.js +5 -0
  18. package/dist/babel_helpers/classCheckPrivateStaticFieldDescriptor/classCheckPrivateStaticFieldDescriptor.js +6 -0
  19. package/dist/babel_helpers/classExtractFieldDescriptor/classExtractFieldDescriptor.js +8 -0
  20. package/dist/babel_helpers/classNameTDZError/classNameTDZError.js +4 -0
  21. package/dist/babel_helpers/classPrivateFieldDestructureSet/classPrivateFieldDestructureSet.js +6 -0
  22. package/dist/babel_helpers/classPrivateFieldGet/classPrivateFieldGet.js +6 -0
  23. package/dist/babel_helpers/classPrivateFieldLooseBase/classPrivateFieldLooseBase.js +7 -0
  24. package/dist/babel_helpers/classPrivateFieldLooseKey/classPrivateFieldLooseKey.js +5 -0
  25. package/dist/babel_helpers/classPrivateFieldSet/classPrivateFieldSet.js +7 -0
  26. package/dist/babel_helpers/classPrivateMethodGet/classPrivateMethodGet.js +7 -0
  27. package/dist/babel_helpers/classPrivateMethodSet/classPrivateMethodSet.js +3 -0
  28. package/dist/babel_helpers/classStaticPrivateFieldSpecGet/classStaticPrivateFieldSpecGet.js +8 -0
  29. package/dist/babel_helpers/classStaticPrivateFieldSpecSet/classStaticPrivateFieldSpecSet.js +9 -0
  30. package/dist/babel_helpers/classStaticPrivateMethodGet/classStaticPrivateMethodGet.js +5 -0
  31. package/dist/babel_helpers/classStaticPrivateMethodSet/classStaticPrivateMethodSet.js +3 -0
  32. package/dist/babel_helpers/construct/construct.js +15 -0
  33. package/dist/babel_helpers/createClass/createClass.js +18 -0
  34. package/dist/babel_helpers/createForOfIteratorHelper/createForOfIteratorHelper.js +63 -0
  35. package/dist/babel_helpers/createForOfIteratorHelperLoose/createForOfIteratorHelperLoose.js +22 -0
  36. package/dist/babel_helpers/createRawReactElement/createRawReactElement.js +50 -0
  37. package/dist/babel_helpers/createSuper/createSuper.js +22 -0
  38. package/dist/babel_helpers/decorate/decorate.js +622 -0
  39. package/dist/babel_helpers/defaults/defaults.js +14 -0
  40. package/dist/babel_helpers/defineEnumerableProperties/defineEnumerableProperties.js +26 -0
  41. package/dist/babel_helpers/defineProperty/defineProperty.js +19 -0
  42. package/dist/babel_helpers/extends/extends.js +16 -0
  43. package/dist/babel_helpers/get/get.js +21 -0
  44. package/dist/babel_helpers/getPrototypeOf/getPrototypeOf.js +2 -0
  45. package/dist/babel_helpers/identity/identity.js +3 -0
  46. package/dist/babel_helpers/inherits/inherits.js +21 -0
  47. package/dist/babel_helpers/inheritsLoose/inheritsLoose.js +6 -0
  48. package/dist/babel_helpers/initializerDefineProperty/initializerDefineProperty.js +10 -0
  49. package/dist/babel_helpers/initializerWarningHelper/initializerWarningHelper.js +3 -0
  50. package/dist/babel_helpers/instanceof/instanceof.js +7 -0
  51. package/dist/babel_helpers/interopRequireDefault/interopRequireDefault.js +5 -0
  52. package/dist/babel_helpers/interopRequireWildcard/interopRequireWildcard.js +49 -0
  53. package/dist/babel_helpers/isNativeFunction/isNativeFunction.js +4 -0
  54. package/dist/babel_helpers/isNativeReflectConstruct/isNativeReflectConstruct.js +21 -0
  55. package/dist/babel_helpers/iterableToArray/iterableToArray.js +3 -0
  56. package/dist/babel_helpers/iterableToArrayLimit/iterableToArrayLimit.js +38 -0
  57. package/dist/babel_helpers/iterableToArrayLimitLoose/iterableToArrayLimitLoose.js +13 -0
  58. package/dist/babel_helpers/jsx/jsx.js +49 -0
  59. package/dist/babel_helpers/maybeArrayLike/maybeArrayLike.js +10 -0
  60. package/dist/babel_helpers/newArrowCheck/newArrowCheck.js +5 -0
  61. package/dist/babel_helpers/nonIterableRest/nonIterableRest.js +3 -0
  62. package/dist/babel_helpers/nonIterableSpread/nonIterableSpread.js +3 -0
  63. package/dist/babel_helpers/objectDestructuringEmpty/objectDestructuringEmpty.js +3 -0
  64. package/dist/babel_helpers/objectSpread/objectSpread.js +22 -0
  65. package/dist/babel_helpers/objectSpread2/objectSpread2.js +41 -0
  66. package/dist/babel_helpers/objectWithoutProperties/objectWithoutProperties.js +20 -0
  67. package/dist/babel_helpers/objectWithoutPropertiesLoose/objectWithoutPropertiesLoose.js +15 -0
  68. package/dist/babel_helpers/possibleConstructorReturn/possibleConstructorReturn.js +10 -0
  69. package/dist/babel_helpers/readOnlyError/readOnlyError.js +4 -0
  70. package/dist/babel_helpers/set/set.js +51 -0
  71. package/dist/babel_helpers/setPrototypeOf/setPrototypeOf.js +5 -0
  72. package/dist/babel_helpers/skipFirstGeneratorNext/skipFirstGeneratorNext.js +8 -0
  73. package/dist/babel_helpers/slicedToArray/slicedToArray.js +5 -0
  74. package/dist/babel_helpers/slicedToArrayLoose/slicedToArrayLoose.js +7 -0
  75. package/dist/babel_helpers/superPropBase/superPropBase.js +10 -0
  76. package/dist/babel_helpers/taggedTemplateLiteral/taggedTemplateLiteral.js +11 -0
  77. package/dist/babel_helpers/taggedTemplateLiteralLoose/taggedTemplateLiteralLoose.js +8 -0
  78. package/dist/babel_helpers/tdz/tdz.js +4 -0
  79. package/dist/babel_helpers/temporalRef/temporalRef.js +5 -0
  80. package/dist/babel_helpers/temporalUndefined/temporalUndefined.js +3 -0
  81. package/dist/babel_helpers/toArray/toArray.js +5 -0
  82. package/dist/babel_helpers/toConsumableArray/toConsumableArray.js +5 -0
  83. package/dist/babel_helpers/toPrimitive/toPrimitive.js +14 -0
  84. package/dist/babel_helpers/toPropertyKey/toPropertyKey.js +5 -0
  85. package/dist/babel_helpers/typeof/typeof.js +7 -0
  86. package/dist/babel_helpers/unsupportedIterableToArray/unsupportedIterableToArray.js +10 -0
  87. package/dist/babel_helpers/wrapAsyncGenerator/wrapAsyncGenerator.js +7 -0
  88. package/dist/babel_helpers/wrapNativeSuper/wrapNativeSuper.js +35 -0
  89. package/dist/babel_helpers/wrapRegExp/wrapRegExp.js +67 -0
  90. package/dist/babel_helpers/writeOnlyError/writeOnlyError.js +4 -0
  91. package/dist/html/explorer.html +557 -0
  92. package/dist/js/controllable_file.mjs +227 -0
  93. package/dist/js/event_source_client.js +528 -0
  94. package/dist/js/global_this.js +32 -0
  95. package/dist/js/html_supervisor_installer.js +522 -0
  96. package/dist/js/html_supervisor_setup.js +82 -0
  97. package/dist/js/import_meta_hot.js +84 -0
  98. package/dist/js/inline_content.js +8 -0
  99. package/dist/js/new_stylesheet.js +409 -0
  100. package/dist/js/regenerator_runtime.js +721 -0
  101. package/dist/js/s.js +429 -0
  102. package/dist/js/uneval.js +804 -0
  103. package/dist/main.js +25163 -0
  104. package/dist/other/jsenv.png +0 -0
  105. package/dist/s.js +626 -0
  106. package/dist/s.js.map +205 -0
  107. package/package.json +61 -57
  108. package/readme.md +6 -14
  109. package/src/build/build.js +1040 -551
  110. package/src/build/build_urls_generator.js +65 -25
  111. package/src/build/graph_utils.js +31 -0
  112. package/src/build/inject_global_version_mappings.js +93 -0
  113. package/src/build/inject_service_worker_urls.js +79 -0
  114. package/src/build/resync_ressource_hints.js +114 -0
  115. package/src/build/start_build_server.js +217 -0
  116. package/src/build/version_generator.js +60 -0
  117. package/src/dev/plugins/explorer/client/explorer.html +1 -1
  118. package/src/dev/plugins/explorer/jsenv_plugin_explorer.js +9 -14
  119. package/src/dev/plugins/toolbar/client/util/fetching.js +1 -1
  120. package/src/dev/plugins/toolbar/jsenv_plugin_toolbar.js +6 -4
  121. package/src/dev/start_dev_server.js +173 -38
  122. package/src/execute/execute.js +35 -8
  123. package/src/execute/run.js +21 -57
  124. package/src/execute/runtimes/browsers/from_playwright.js +224 -153
  125. package/src/execute/runtimes/node/child_exec_options.js +1 -1
  126. package/src/execute/runtimes/node/controllable_file.mjs +26 -10
  127. package/src/execute/runtimes/node/kill_process_tree.js +2 -4
  128. package/src/execute/runtimes/node/node_execution_performance.js +67 -0
  129. package/src/execute/runtimes/node/node_process.js +288 -39
  130. package/src/helpers/command/command.js +73 -0
  131. package/src/{dev/plugins/autoreload/client/event_source_connection.js → helpers/event_source/event_source.js} +2 -0
  132. package/src/helpers/event_source/sse_service.js +53 -0
  133. package/src/helpers/worker_reload.js +57 -0
  134. package/src/main.js +27 -0
  135. package/src/omega/{runtime_support/features_compatibility.js → compat/features_compats.js} +30 -7
  136. package/src/omega/{runtime_support/runtime_support.js → compat/runtime_compat.js} +16 -17
  137. package/src/omega/errors.js +63 -67
  138. package/src/omega/fetched_content_compliance.js +24 -0
  139. package/src/omega/file_url_converter.js +9 -51
  140. package/src/omega/kitchen.js +607 -466
  141. package/src/omega/omega_server.js +2 -3
  142. package/src/omega/server/file_service.js +88 -41
  143. package/src/omega/server/user_agent.js +5 -5
  144. package/src/omega/url_graph/{url_graph_sort.js → sort_by_dependencies.js} +3 -5
  145. package/src/omega/url_graph/url_graph_load.js +31 -23
  146. package/src/omega/url_graph/url_graph_report.js +94 -51
  147. package/src/omega/url_graph/url_info_transformations.js +54 -24
  148. package/src/omega/url_graph.js +88 -19
  149. package/src/omega/url_specifier_encoding.js +59 -0
  150. package/src/omega/web_workers.js +42 -0
  151. package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/autoreload_preference.js +0 -0
  152. package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/event_source_client.js +19 -12
  153. package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/reload.js +6 -3
  154. package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/url_helpers.js +0 -0
  155. package/src/plugins/autoreload/dev_sse/jsenv_plugin_dev_sse_client.js +41 -0
  156. package/src/plugins/autoreload/dev_sse/jsenv_plugin_dev_sse_server.js +204 -0
  157. package/src/plugins/autoreload/jsenv_plugin_autoreload.js +25 -0
  158. package/src/plugins/autoreload/jsenv_plugin_hmr.js +35 -0
  159. package/src/plugins/bundling/css/bundle_css.js +140 -0
  160. package/src/plugins/bundling/js_classic_workers/bundle_js_classic_workers.js +13 -0
  161. package/src/plugins/bundling/js_module/bundle_js_module.js +362 -0
  162. package/src/plugins/bundling/jsenv_plugin_bundling.js +54 -0
  163. package/src/plugins/cache_control/jsenv_plugin_cache_control.js +34 -0
  164. package/src/{omega/core_plugins → plugins}/commonjs_globals/jsenv_plugin_commonjs_globals.js +56 -43
  165. package/src/plugins/file_urls/jsenv_plugin_file_urls.js +190 -0
  166. package/src/{omega/core_plugins → plugins}/html_supervisor/client/error_in_document.js +0 -0
  167. package/src/{omega/core_plugins → plugins}/html_supervisor/client/error_in_notification.js +0 -0
  168. package/src/plugins/html_supervisor/client/html_supervisor_installer.js +254 -0
  169. package/src/plugins/html_supervisor/client/html_supervisor_setup.js +82 -0
  170. package/src/{omega/core_plugins → plugins}/html_supervisor/client/perf_browser.js +0 -0
  171. package/src/{omega/core_plugins → plugins}/html_supervisor/client/uneval_exception.js +0 -0
  172. package/src/plugins/html_supervisor/jsenv_plugin_html_supervisor.js +239 -0
  173. package/src/plugins/http_urls/jsenv_plugin_http_urls.js +16 -0
  174. package/src/{dev/plugins/autoreload → plugins/import_meta_hot}/babel_plugin_metadata_import_meta_hot.js +4 -5
  175. package/src/{dev/plugins/autoreload → plugins/import_meta_hot}/client/import_meta_hot.js +3 -1
  176. package/src/{dev/plugins/autoreload → plugins/import_meta_hot}/html_hot_dependencies.js +15 -18
  177. package/src/plugins/import_meta_hot/jsenv_plugin_import_meta_hot.js +100 -0
  178. package/src/{omega/core_plugins → plugins}/import_meta_scenarios/jsenv_plugin_import_meta_scenarios.js +35 -10
  179. package/src/plugins/import_meta_url/client/import_meta_url_browser.js +52 -0
  180. package/src/plugins/import_meta_url/client/import_meta_url_commonjs.mjs +9 -0
  181. package/src/{omega/core_plugins → plugins}/importmap/jsenv_plugin_importmap.js +56 -54
  182. package/src/plugins/inject_globals/inject_globals.js +57 -0
  183. package/src/plugins/inject_globals/jsenv_plugin_inject_globals.js +24 -0
  184. package/src/{omega/core_plugins → plugins}/inline/client/inline_content.js +0 -0
  185. package/src/{omega/core_plugins → plugins}/inline/jsenv_plugin_data_urls.js +22 -21
  186. package/src/plugins/inline/jsenv_plugin_html_inline_content.js +159 -0
  187. package/src/plugins/inline/jsenv_plugin_inline.js +36 -0
  188. package/src/{omega/core_plugins → plugins}/inline/jsenv_plugin_inline_query_param.js +8 -11
  189. package/src/plugins/inline/jsenv_plugin_js_inline_content.js +294 -0
  190. package/src/plugins/leading_slash/jsenv_plugin_leading_slash.js +13 -0
  191. package/src/plugins/minification/css/minify_css.js +9 -0
  192. package/src/plugins/minification/html/minify_html.js +13 -0
  193. package/src/{build/plugins/minify_js/jsenv_plugin_minify_js.js → plugins/minification/js/minify_js.js} +6 -22
  194. package/src/plugins/minification/jsenv_plugin_minification.js +78 -0
  195. package/src/plugins/minification/json/minify_json.js +8 -0
  196. package/src/plugins/node_esm_resolution/jsenv_plugin_node_esm_resolution.js +162 -0
  197. package/src/plugins/node_runtime/jsenv_plugin_node_runtime.js +12 -0
  198. package/src/{omega → plugins}/plugin_controller.js +57 -12
  199. package/src/plugins/plugins.js +91 -0
  200. package/src/plugins/transpilation/as_js_classic/client/s.js +429 -0
  201. package/src/plugins/transpilation/as_js_classic/helpers/babel_plugin_transform_import_meta_url.js +47 -0
  202. package/src/plugins/transpilation/as_js_classic/helpers/systemjs_old.js +43 -0
  203. package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic.js +209 -0
  204. package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic_html.js +282 -0
  205. package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic_workers.js +55 -0
  206. package/src/{omega/core_plugins → plugins/transpilation}/babel/global_this/babel_plugin_global_this_as_jsenv_import.js +2 -3
  207. package/src/{omega/core_plugins → plugins/transpilation}/babel/global_this/client/global_this.js +0 -0
  208. package/src/{omega/core_plugins → plugins/transpilation}/babel/helpers/babel_plugin_babel_helpers_as_jsenv_imports.js +3 -4
  209. package/src/{omega/core_plugins → plugins/transpilation}/babel/helpers/babel_plugin_structure.js +14 -17
  210. package/src/{omega/core_plugins → plugins/transpilation}/babel/helpers/babel_plugins_compatibility.js +0 -0
  211. package/src/{omega/core_plugins → plugins/transpilation}/babel/jsenv_plugin_babel.js +40 -33
  212. package/src/{omega/core_plugins → plugins/transpilation}/babel/new_stylesheet/babel_plugin_new_stylesheet_as_jsenv_import.js +32 -9
  213. package/src/{omega/core_plugins → plugins/transpilation}/babel/new_stylesheet/client/new_stylesheet.js +0 -0
  214. package/src/{omega/core_plugins → plugins/transpilation}/babel/regenerator_runtime/babel_plugin_regenerator_runtime_as_jsenv_import.js +2 -3
  215. package/src/{omega/core_plugins → plugins/transpilation}/babel/regenerator_runtime/client/regenerator_runtime.js +0 -0
  216. package/src/plugins/transpilation/babel/require_babel_plugin.js +8 -0
  217. package/src/plugins/transpilation/css_parcel/jsenv_plugin_css_parcel.js +18 -0
  218. package/src/plugins/transpilation/import_assertions/jsenv_plugin_import_assertions.js +184 -0
  219. package/src/plugins/transpilation/jsenv_plugin_top_level_await.js +80 -0
  220. package/src/plugins/transpilation/jsenv_plugin_transpilation.js +46 -0
  221. package/src/plugins/url_analysis/css/css_urls.js +48 -0
  222. package/src/plugins/url_analysis/html/html_urls.js +257 -0
  223. package/src/plugins/url_analysis/js/js_urls.js +69 -0
  224. package/src/plugins/url_analysis/jsenv_plugin_url_analysis.js +110 -0
  225. package/src/plugins/url_analysis/webmanifest/webmanifest_urls.js +20 -0
  226. package/src/{omega/core_plugins → plugins}/url_resolution/jsenv_plugin_url_resolution.js +9 -5
  227. package/src/plugins/url_version/jsenv_plugin_url_version.js +28 -0
  228. package/src/require_from_jsenv.js +3 -0
  229. package/src/test/coverage/babel_plugin_instrument.js +82 -0
  230. package/src/test/coverage/coverage_reporter_html_directory.js +36 -0
  231. package/src/test/coverage/coverage_reporter_json_file.js +22 -0
  232. package/src/test/coverage/coverage_reporter_text_log.js +19 -0
  233. package/src/test/coverage/empty_coverage_factory.js +52 -0
  234. package/src/test/coverage/file_by_file_coverage.js +25 -0
  235. package/src/test/coverage/istanbul_coverage_composition.js +28 -0
  236. package/src/test/coverage/istanbul_coverage_map_from_coverage.js +16 -0
  237. package/src/test/coverage/list_files_not_covered.js +15 -0
  238. package/src/test/coverage/missing_coverage.js +41 -0
  239. package/src/test/coverage/report_to_coverage.js +196 -0
  240. package/src/test/coverage/v8_and_istanbul.js +37 -0
  241. package/src/test/coverage/v8_coverage_composition.js +24 -0
  242. package/src/test/coverage/v8_coverage_from_directory.js +87 -0
  243. package/src/test/coverage/v8_coverage_to_istanbul.js +99 -0
  244. package/src/test/execute_plan.js +87 -46
  245. package/src/test/execute_test_plan.js +40 -28
  246. package/src/test/execution_steps.js +2 -5
  247. package/src/test/logs_file_execution.js +56 -49
  248. package/main.js +0 -19
  249. package/src/build/inject_version_mappings.js +0 -62
  250. package/src/build/plugins/bundle_js_module/jsenv_plugin_bundle_js_module.js +0 -227
  251. package/src/build/plugins/minify_html/jsenv_plugin_minify_html.js +0 -30
  252. package/src/dev/plugins/autoreload/jsenv_plugin_autoreload.js +0 -374
  253. package/src/dev/plugins/autoreload/sse_service.js +0 -149
  254. package/src/execute/runtimes/node/controlled_process.js +0 -316
  255. package/src/omega/core_plugins/babel/new_stylesheet/client/.eslintrc.cjs +0 -24
  256. package/src/omega/core_plugins/file_urls/jsenv_plugin_file_urls.js +0 -67
  257. package/src/omega/core_plugins/filesystem_magic/jsenv_plugin_filesystem_magic.js +0 -58
  258. package/src/omega/core_plugins/html_supervisor/client/html_supervisor_installer.js +0 -168
  259. package/src/omega/core_plugins/html_supervisor/client/html_supervisor_setup.js +0 -77
  260. package/src/omega/core_plugins/html_supervisor/jsenv_plugin_html_supervisor.js +0 -233
  261. package/src/omega/core_plugins/import_assertions/helpers/babel_plugin_metadata_import_assertions.js +0 -98
  262. package/src/omega/core_plugins/import_assertions/helpers/json_module.js +0 -12
  263. package/src/omega/core_plugins/import_assertions/helpers/text_module.js +0 -6
  264. package/src/omega/core_plugins/import_assertions/jsenv_plugin_import_assertions.js +0 -211
  265. package/src/omega/core_plugins/inline/jsenv_plugin_inline.js +0 -13
  266. package/src/omega/core_plugins/inline/jsenv_plugin_js_and_css_inside_html.js +0 -142
  267. package/src/omega/core_plugins/inline/jsenv_plugin_new_inline_content.js +0 -207
  268. package/src/omega/core_plugins/leading_slash/jsenv_plugin_leading_slash.js +0 -12
  269. package/src/omega/core_plugins/node_esm_resolution/jsenv_plugin_node_esm_resolution.js +0 -77
  270. package/src/omega/core_plugins/url_version/jsenv_plugin_url_version.js +0 -50
  271. package/src/omega/core_plugins.js +0 -39
  272. package/src/omega/runtime_support/default_runtime_support.js +0 -13
  273. package/src/omega/url_mentions/css_url_mentions.js +0 -63
  274. package/src/omega/url_mentions/html_url_mentions.js +0 -185
  275. package/src/omega/url_mentions/js_module_url_mentions.js +0 -91
  276. package/src/omega/url_mentions/parse_url_mentions.js +0 -37
  277. package/src/omega/url_mentions/worker_classic_url_mentions.js +0 -37
@@ -8,14 +8,13 @@ import {
8
8
  } from "@jsenv/server"
9
9
  import { convertFileSystemErrorToResponseProperties } from "@jsenv/server/src/internal/convertFileSystemErrorToResponseProperties.js"
10
10
  import { createCallbackListNotifiedOnce } from "@jsenv/abort"
11
- import { loggerToLogLevel } from "@jsenv/logger"
12
11
 
13
12
  import { createFileService } from "./server/file_service.js"
14
13
 
15
14
  export const startOmegaServer = async ({
16
15
  signal,
17
16
  handleSIGINT,
18
- logger,
17
+ logLevel,
19
18
  protocol = "http",
20
19
  http2 = protocol === "https",
21
20
  privateKey,
@@ -48,7 +47,7 @@ export const startOmegaServer = async ({
48
47
  stopOnSIGINT: handleSIGINT,
49
48
  stopOnInternalError: false,
50
49
  keepProcessAlive,
51
- logLevel: loggerToLogLevel(logger),
50
+ logLevel,
52
51
  startLog: false,
53
52
 
54
53
  protocol,
@@ -3,7 +3,7 @@ import {
3
3
  serveDirectory,
4
4
  composeTwoResponses,
5
5
  } from "@jsenv/server"
6
- import { urlIsInsideOf, moveUrl } from "@jsenv/filesystem"
6
+ import { urlIsInsideOf, moveUrl } from "@jsenv/urls"
7
7
 
8
8
  import { parseUserAgentHeader } from "./user_agent.js"
9
9
 
@@ -20,6 +20,11 @@ export const createFileService = ({
20
20
  urlGraph,
21
21
  scenario,
22
22
  }
23
+ const augmentResponseContext = {
24
+ rootDirectoryUrl,
25
+ urlGraph,
26
+ scenario,
27
+ }
23
28
 
24
29
  const getResponse = async (request) => {
25
30
  // serve file inside ".jsenv" directory
@@ -39,43 +44,87 @@ export const createFileService = ({
39
44
  if (responseFromPlugin) {
40
45
  return responseFromPlugin
41
46
  }
42
- const { runtimeName, runtimeVersion } = parseUserAgentHeader(
43
- request.headers["user-agent"],
44
- )
45
- const runtimeSupport = {
46
- [runtimeName]: runtimeVersion,
47
+ let reference
48
+ const parentUrl = inferParentFromRequest(request, rootDirectoryUrl)
49
+ if (parentUrl) {
50
+ reference = urlGraph.inferReference(request.ressource, parentUrl)
51
+ }
52
+ if (!reference) {
53
+ const entryPoint = kitchen.prepareEntryPoint({
54
+ trace: parentUrl || rootDirectoryUrl,
55
+ parentUrl: parentUrl || rootDirectoryUrl,
56
+ type: "entry_point",
57
+ specifier: request.ressource,
58
+ })
59
+ reference = entryPoint[0]
60
+ }
61
+ const urlInfo = urlGraph.reuseOrCreateUrlInfo(reference.url)
62
+
63
+ const ifNoneMatch = request.headers["if-none-match"]
64
+ if (ifNoneMatch && urlInfo.contentEtag === ifNoneMatch) {
65
+ return {
66
+ status: 304,
67
+ headers: {
68
+ "cache-control": `private,max-age=0,must-revalidate`,
69
+ ...urlInfo.headers,
70
+ },
71
+ }
47
72
  }
48
- const reference = kitchen.createReference({
49
- parentUrl: inferParentFromRequest(request, rootDirectoryUrl),
50
- type: "entry_point",
51
- specifier: request.ressource,
52
- })
53
- const requestedUrlInfo = kitchen.resolveReference(reference)
54
- const referenceFromGraph = urlGraph.inferReference(
55
- reference.url,
56
- reference.parentUrl,
57
- )
58
73
  try {
59
- await kitchen.cook({
60
- reference: referenceFromGraph || reference,
61
- urlInfo: requestedUrlInfo,
62
- outDirectoryUrl: `${rootDirectoryUrl}.jsenv/${scenario}/${runtimeName}@${runtimeVersion}/`,
63
- runtimeSupport,
74
+ // urlInfo objects are reused, they must be "reset" before cooking them again
75
+ if (
76
+ urlInfo.contentEtag &&
77
+ !urlInfo.isInline &&
78
+ urlInfo.type !== "sourcemap"
79
+ ) {
80
+ urlInfo.sourcemap = null
81
+ urlInfo.sourcemapReference = null
82
+ urlInfo.content = null
83
+ urlInfo.originalContent = null
84
+ urlInfo.type = null
85
+ urlInfo.subtype = null
86
+ urlInfo.timing = {}
87
+ }
88
+ const { runtimeName, runtimeVersion } = parseUserAgentHeader(
89
+ request.headers["user-agent"],
90
+ )
91
+ await kitchen.cook(urlInfo, {
92
+ request,
93
+ reference,
94
+ clientRuntimeCompat: {
95
+ [runtimeName]: runtimeVersion,
96
+ },
97
+ outDirectoryUrl:
98
+ scenario === "dev"
99
+ ? `${rootDirectoryUrl}.jsenv/${runtimeName}@${runtimeVersion}/`
100
+ : `${rootDirectoryUrl}.jsenv/${scenario}/${runtimeName}@${runtimeVersion}/`,
64
101
  })
65
- const { response, contentType, content } = requestedUrlInfo
102
+ let { response } = urlInfo
66
103
  if (response) {
67
104
  return response
68
105
  }
69
- return {
106
+ response = {
70
107
  url: reference.url,
71
108
  status: 200,
72
109
  headers: {
73
- "content-type": contentType,
74
- "content-length": Buffer.byteLength(content),
110
+ "content-length": Buffer.byteLength(urlInfo.content),
75
111
  "cache-control": `private,max-age=0,must-revalidate`,
112
+ "eTag": urlInfo.contentEtag,
113
+ ...urlInfo.headers,
114
+ "content-type": urlInfo.contentType,
76
115
  },
77
- body: content,
116
+ body: urlInfo.content,
117
+ timing: urlInfo.timing,
78
118
  }
119
+ kitchen.pluginController.callHooks(
120
+ "augmentResponse",
121
+ { reference, urlInfo },
122
+ augmentResponseContext,
123
+ (returnValue) => {
124
+ response = composeTwoResponses(response, returnValue)
125
+ },
126
+ )
127
+ return response
79
128
  } catch (e) {
80
129
  const code = e.code
81
130
  if (code === "PARSE_ERROR") {
@@ -86,14 +135,14 @@ export const createFileService = ({
86
135
  statusText: e.reason,
87
136
  statusMessage: e.message,
88
137
  headers: {
89
- "content-type": requestedUrlInfo.contentType,
90
- "content-length": Buffer.byteLength(requestedUrlInfo.content),
138
+ "content-type": urlInfo.contentType,
139
+ "content-length": Buffer.byteLength(urlInfo.content),
91
140
  "cache-control": "no-store",
92
141
  },
93
- body: requestedUrlInfo.content,
142
+ body: urlInfo.content,
94
143
  }
95
144
  }
96
- if (code === "EISDIR") {
145
+ if (code === "DIRECTORY_REFERENCE_NOT_ALLOWED") {
97
146
  return serveDirectory(reference.url, {
98
147
  headers: {
99
148
  accept: "text/html",
@@ -127,16 +176,6 @@ export const createFileService = ({
127
176
  }
128
177
  return async (request) => {
129
178
  let response = await getResponse(request)
130
- if (response.url) {
131
- kitchen.pluginController.callHooks(
132
- "augmentResponse",
133
- response,
134
- {},
135
- (returnValue) => {
136
- response = composeTwoResponses(response, returnValue)
137
- },
138
- )
139
- }
140
179
  return response
141
180
  }
142
181
  }
@@ -144,7 +183,15 @@ export const createFileService = ({
144
183
  const inferParentFromRequest = (request, rootDirectoryUrl) => {
145
184
  const { referer } = request.headers
146
185
  if (!referer) {
147
- return rootDirectoryUrl
186
+ return null
187
+ }
188
+ const refererUrlObject = new URL(referer)
189
+ refererUrlObject.searchParams.delete("hmr")
190
+ refererUrlObject.searchParams.delete("v")
191
+ const { pathname, search } = refererUrlObject
192
+ if (pathname.startsWith("/@fs/")) {
193
+ const fsRootRelativeUrl = pathname.slice("/@fs/".length)
194
+ return `file:///${fsRootRelativeUrl}${search}`
148
195
  }
149
196
  return moveUrl({
150
197
  url: referer,
@@ -1,8 +1,8 @@
1
- import { createRequire } from "node:module"
1
+ import { memoizeByFirstArgument } from "@jsenv/utils/src/memoize/memoize_by_first_argument.js"
2
2
 
3
- const require = createRequire(import.meta.url)
3
+ import { requireFromJsenv } from "@jsenv/core/src/require_from_jsenv.js"
4
4
 
5
- export const parseUserAgentHeader = (userAgent) => {
5
+ export const parseUserAgentHeader = memoizeByFirstArgument((userAgent) => {
6
6
  if (userAgent.includes("node-fetch/")) {
7
7
  // it's not really node and conceptually we can't assume the node version
8
8
  // but good enough for now
@@ -11,7 +11,7 @@ export const parseUserAgentHeader = (userAgent) => {
11
11
  runtimeVersion: process.version.slice(1),
12
12
  }
13
13
  }
14
- const UA = require("@financial-times/polyfill-useragent-normaliser")
14
+ const UA = requireFromJsenv("@financial-times/polyfill-useragent-normaliser")
15
15
  const { ua } = new UA(userAgent)
16
16
  const { family, major, minor, patch } = ua
17
17
  return {
@@ -19,4 +19,4 @@ export const parseUserAgentHeader = (userAgent) => {
19
19
  runtimeVersion:
20
20
  family === "Other" ? "unknown" : `${major}.${minor}${patch}`,
21
21
  }
22
- }
22
+ })
@@ -1,6 +1,4 @@
1
- export const sortUrlGraphByDependencies = (urlGraph) => {
2
- const { urlInfos } = urlGraph
3
-
1
+ export const sortByDependencies = (nodes) => {
4
2
  const visited = []
5
3
  const sorted = []
6
4
  const circular = []
@@ -15,13 +13,13 @@ export const sortUrlGraphByDependencies = (urlGraph) => {
15
13
  sorted.push(url)
16
14
  } else {
17
15
  visited.push(url)
18
- urlInfos[url].dependencies.forEach((dependencyUrl) => {
16
+ nodes[url].dependencies.forEach((dependencyUrl) => {
19
17
  visit(dependencyUrl, url)
20
18
  })
21
19
  sorted.push(url)
22
20
  }
23
21
  }
24
- Object.keys(urlInfos).forEach((url) => {
22
+ Object.keys(nodes).forEach((url) => {
25
23
  visit(url)
26
24
  })
27
25
  sorted.circular = circular
@@ -1,62 +1,69 @@
1
1
  import { ensureEmptyDirectory } from "@jsenv/filesystem"
2
2
 
3
3
  export const loadUrlGraph = async ({
4
+ operation,
4
5
  urlGraph,
5
6
  kitchen,
6
7
  startLoading,
8
+ writeGeneratedFiles,
7
9
  outDirectoryUrl,
8
- runtimeSupport,
10
+ clientRuntimeCompat,
9
11
  }) => {
10
- if (outDirectoryUrl) {
12
+ if (writeGeneratedFiles && outDirectoryUrl) {
11
13
  await ensureEmptyDirectory(outDirectoryUrl)
12
14
  }
13
15
  const promises = []
14
- const cook = ({ urlInfo, ...rest }) => {
15
- const promiseFromData = urlInfo.data.promise
16
+ const promiseMap = new Map()
17
+ const cook = (urlInfo, context) => {
18
+ const promiseFromData = promiseMap.get(urlInfo)
16
19
  if (promiseFromData) return promiseFromData
17
- const promise = _cook({
18
- urlInfo,
20
+ const promise = _cook(urlInfo, {
19
21
  outDirectoryUrl,
20
- runtimeSupport,
21
- ...rest,
22
+ clientRuntimeCompat,
23
+ ...context,
22
24
  })
23
25
  promises.push(promise)
24
- urlInfo.data.promise = promise
26
+ promiseMap.set(urlInfo, promise)
25
27
  return promise
26
28
  }
27
- const _cook = async ({ urlInfo, ...rest }) => {
28
- await kitchen.cook({
29
- urlInfo,
29
+ const _cook = async (urlInfo, context) => {
30
+ await kitchen.cook(urlInfo, {
30
31
  cookDuringCook: cook,
31
- ...rest,
32
+ ...context,
32
33
  })
33
34
  const { references } = urlInfo
34
35
  references.forEach((reference) => {
35
- cook({
36
- reference,
37
- urlInfo: urlGraph.getUrlInfo(reference.url),
38
- })
36
+ // we don't cook ressource hints
37
+ // because they might refer to ressource that will be modified during build
38
+ // It also means something else have to reference that url in order to cook it
39
+ // so that the preload is deleted by "resync_ressource_hints.js" otherwise
40
+ if (reference.isRessourceHint) {
41
+ return
42
+ }
43
+ // we use reference.generatedUrl to mimic what a browser would do:
44
+ // do a fetch to the specifier as found in the file
45
+ const referencedUrlInfo = urlGraph.reuseOrCreateUrlInfo(
46
+ reference.generatedUrl,
47
+ )
48
+ cook(referencedUrlInfo, { reference })
39
49
  })
40
50
  }
41
51
  startLoading(
42
52
  ({ trace, parentUrl = kitchen.rootDirectoryUrl, type, specifier }) => {
43
- const entryReference = kitchen.createReference({
53
+ const [entryReference, entryUrlInfo] = kitchen.prepareEntryPoint({
44
54
  trace,
45
55
  parentUrl,
46
56
  type,
47
57
  specifier,
48
58
  })
49
- const entryUrlInfo = kitchen.resolveReference(entryReference)
50
59
  entryUrlInfo.data.isEntryPoint = true
51
- cook({
52
- reference: entryReference,
53
- urlInfo: entryUrlInfo,
54
- })
60
+ cook(entryUrlInfo, { reference: entryReference })
55
61
  return [entryReference, entryUrlInfo]
56
62
  },
57
63
  )
58
64
 
59
65
  const waitAll = async () => {
66
+ operation.throwIfAborted()
60
67
  if (promises.length === 0) {
61
68
  return
62
69
  }
@@ -66,4 +73,5 @@ export const loadUrlGraph = async ({
66
73
  await waitAll()
67
74
  }
68
75
  await waitAll()
76
+ promiseMap.clear()
69
77
  }
@@ -1,37 +1,33 @@
1
- import { ANSI } from "@jsenv/log"
2
-
3
- import { byteAsFileSize } from "@jsenv/utils/logs/size_log.js"
1
+ import { ANSI, byteAsFileSize, distributePercentages } from "@jsenv/log"
4
2
 
5
3
  export const createUrlGraphSummary = (
6
4
  urlGraph,
7
5
  { title = "graph summary" } = {},
8
6
  ) => {
9
7
  const graphReport = createUrlGraphReport(urlGraph)
10
- const totalLabel = `Total`
11
8
  return `--- ${title} ---
12
9
  ${createRepartitionMessage(graphReport)}
13
- ${ANSI.color(totalLabel, ANSI.GREY)} ${
14
- graphReport.total.count
15
- } (${byteAsFileSize(graphReport.total.size)})
16
10
  --------------------`
17
11
  }
18
12
 
19
13
  const createUrlGraphReport = (urlGraph) => {
20
14
  const { urlInfos } = urlGraph
21
15
  const countGroups = {
16
+ sourcemaps: 0,
22
17
  html: 0,
23
18
  css: 0,
24
19
  js: 0,
25
- assets: 0,
26
- sourcemaps: 0,
20
+ json: 0,
21
+ other: 0,
27
22
  total: 0,
28
23
  }
29
24
  const sizeGroups = {
25
+ sourcemaps: 0,
30
26
  html: 0,
31
27
  css: 0,
32
28
  js: 0,
33
- sourcemaps: 0,
34
- assets: 0,
29
+ json: 0,
30
+ other: 0,
35
31
  total: 0,
36
32
  }
37
33
  Object.keys(urlInfos).forEach((url) => {
@@ -39,8 +35,10 @@ const createUrlGraphReport = (urlGraph) => {
39
35
  return
40
36
  }
41
37
  const urlInfo = urlInfos[url]
42
- // ignore inline files, they are already taken into account in the file where they appear
43
- if (urlInfo.isInline) {
38
+ // ignore:
39
+ // - inline files: they are already taken into account in the file where they appear
40
+ // - ignored files: we don't know their content
41
+ if (urlInfo.isInline || !urlInfo.shouldHandle) {
44
42
  return
45
43
  }
46
44
  // file loaded via import assertion are already inside the graph
@@ -49,9 +47,9 @@ const createUrlGraphReport = (urlGraph) => {
49
47
  // and only the js module remain (likely bundled)
50
48
  const urlObject = new URL(urlInfo.url)
51
49
  if (
52
- urlObject.searchParams.has("json_module") ||
53
- urlObject.searchParams.has("css_module") ||
54
- urlObject.searchParams.has("text_module")
50
+ urlObject.searchParams.has("as_json_module") ||
51
+ urlObject.searchParams.has("as_css_module") ||
52
+ urlObject.searchParams.has("as_text_module")
55
53
  ) {
56
54
  return
57
55
  }
@@ -79,17 +77,63 @@ const createUrlGraphReport = (urlGraph) => {
79
77
  sizeGroups.js += urlContentSize
80
78
  return
81
79
  }
82
- countGroups.assets++
83
- sizeGroups.assets += urlContentSize
80
+ if (category === "json") {
81
+ countGroups.json++
82
+ sizeGroups.json += urlContentSize
83
+ return
84
+ }
85
+ countGroups.other++
86
+ sizeGroups.other += urlContentSize
84
87
  return
85
88
  })
89
+
90
+ const sizesToDistribute = {}
91
+ Object.keys(sizeGroups).forEach((groupName) => {
92
+ if (groupName !== "sourcemaps" && groupName !== "total") {
93
+ sizesToDistribute[groupName] = sizeGroups[groupName]
94
+ }
95
+ })
96
+ const percentageGroups = distributePercentages(sizesToDistribute)
97
+
86
98
  return {
87
- html: { count: countGroups.html, size: sizeGroups.html },
88
- css: { count: countGroups.css, size: sizeGroups.css },
89
- js: { count: countGroups.js, size: sizeGroups.js },
90
- sourcemaps: { count: countGroups.sourcemaps, size: sizeGroups.sourcemaps },
91
- assets: { count: countGroups.assets, size: sizeGroups.assets },
92
- total: { count: countGroups.total, size: sizeGroups.total },
99
+ // sourcemaps are special, there size are ignored
100
+ // so there is no "percentage" associated
101
+ sourcemaps: {
102
+ count: countGroups.sourcemaps,
103
+ size: sizeGroups.sourcemaps,
104
+ percentage: undefined,
105
+ },
106
+
107
+ html: {
108
+ count: countGroups.html,
109
+ size: sizeGroups.html,
110
+ percentage: percentageGroups.html,
111
+ },
112
+ css: {
113
+ count: countGroups.css,
114
+ size: sizeGroups.css,
115
+ percentage: percentageGroups.css,
116
+ },
117
+ js: {
118
+ count: countGroups.js,
119
+ size: sizeGroups.js,
120
+ percentage: percentageGroups.js,
121
+ },
122
+ json: {
123
+ count: countGroups.json,
124
+ size: sizeGroups.json,
125
+ percentage: percentageGroups.json,
126
+ },
127
+ other: {
128
+ count: countGroups.other,
129
+ size: sizeGroups.other,
130
+ percentage: percentageGroups.other,
131
+ },
132
+ total: {
133
+ count: countGroups.total,
134
+ size: sizeGroups.total,
135
+ percentage: 100,
136
+ },
93
137
  }
94
138
  }
95
139
 
@@ -106,32 +150,22 @@ const determineCategory = (urlInfo) => {
106
150
  if (urlInfo.type === "js_module" || urlInfo.type === "js_classic") {
107
151
  return "js"
108
152
  }
109
- return "assets"
153
+ if (urlInfo.type === "json") {
154
+ return "json"
155
+ }
156
+ return "other"
110
157
  }
111
158
 
112
- const createRepartitionMessage = ({ html, css, js, assets }) => {
113
- const parts = []
114
- if (html.count) {
115
- parts.push(
116
- `${ANSI.color(`html:`, ANSI.GREY)} ${html.count} (${byteAsFileSize(
117
- html.size,
118
- )})`,
119
- )
120
- }
121
- if (css.count) {
159
+ const createRepartitionMessage = ({ html, css, js, json, other, total }) => {
160
+ const addPart = (name, { count, size, percentage }) => {
122
161
  parts.push(
123
- `${ANSI.color(`css:`, ANSI.GREY)} ${css.count} (${byteAsFileSize(
124
- css.size,
125
- )})`,
126
- )
127
- }
128
- if (js.count) {
129
- parts.push(
130
- `${ANSI.color(`js:`, ANSI.GREY)} ${js.count} (${byteAsFileSize(
131
- js.size,
132
- )})`,
162
+ `${ANSI.color(`${name}:`, ANSI.GREY)} ${count} (${byteAsFileSize(
163
+ size,
164
+ )} / ${percentage} %)`,
133
165
  )
134
166
  }
167
+
168
+ const parts = []
135
169
  // if (sourcemaps.count) {
136
170
  // parts.push(
137
171
  // `${ANSI.color(`sourcemaps:`, ANSI.GREY)} ${
@@ -139,13 +173,22 @@ const createRepartitionMessage = ({ html, css, js, assets }) => {
139
173
  // } (${byteAsFileSize(sourcemaps.size)})`,
140
174
  // )
141
175
  // }
142
- if (assets.count) {
143
- parts.push(
144
- `${ANSI.color(`assets:`, ANSI.GREY)} ${assets.count} (${byteAsFileSize(
145
- assets.size,
146
- )})`,
147
- )
176
+ if (html.count) {
177
+ addPart("html ", html)
178
+ }
179
+ if (css.count) {
180
+ addPart("css ", css)
181
+ }
182
+ if (js.count) {
183
+ addPart("js ", js)
184
+ }
185
+ if (json.count) {
186
+ addPart("json ", json)
187
+ }
188
+ if (other.count) {
189
+ addPart("other", other)
148
190
  }
191
+ addPart("total", total)
149
192
  return `- ${parts.join(`
150
193
  - `)}`
151
194
  }