@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
@@ -0,0 +1,190 @@
1
+ import { readFileSync, readdirSync, realpathSync, statSync } from "node:fs"
2
+ import { pathToFileURL } from "node:url"
3
+ import {
4
+ urlIsInsideOf,
5
+ urlToRelativeUrl,
6
+ urlToFilename,
7
+ ensurePathnameTrailingSlash,
8
+ } from "@jsenv/urls"
9
+ import {
10
+ applyFileSystemMagicResolution,
11
+ getExtensionsToTry,
12
+ } from "@jsenv/node-esm-resolution"
13
+ import { CONTENT_TYPE } from "@jsenv/utils/src/content_type/content_type.js"
14
+
15
+ export const jsenvPluginFileUrls = ({
16
+ magicExtensions = ["inherit", ".js"],
17
+ magicDirectoryIndex = true,
18
+ preserveSymlinks = false,
19
+ directoryReferenceAllowed = false,
20
+ }) => {
21
+ return [
22
+ {
23
+ name: "jsenv:file_url_resolution",
24
+ appliesDuring: "*",
25
+ redirectUrl: (reference) => {
26
+ // http, https, data, about, ...
27
+ if (!reference.url.startsWith("file:")) {
28
+ return null
29
+ }
30
+ if (reference.isInline) {
31
+ return null
32
+ }
33
+ const urlObject = new URL(reference.url)
34
+ let stat
35
+ try {
36
+ stat = statSync(urlObject)
37
+ } catch (e) {
38
+ if (e.code === "ENOENT") {
39
+ stat = null
40
+ } else {
41
+ throw e
42
+ }
43
+ }
44
+ const { search, hash } = urlObject
45
+ let { pathname } = urlObject
46
+ const pathnameUsesTrailingSlash = pathname.endsWith("/")
47
+ urlObject.search = ""
48
+ urlObject.hash = ""
49
+ const foundADirectory = stat && stat.isDirectory()
50
+ const foundSomething = stat && !foundADirectory
51
+ // force trailing slash on directories
52
+ if (foundADirectory && !pathnameUsesTrailingSlash) {
53
+ urlObject.pathname = `${pathname}/`
54
+ }
55
+ // otherwise remove trailing slash if any
56
+ if (foundSomething && pathnameUsesTrailingSlash) {
57
+ // a warning here? (because it's strange to reference a file with a trailing slash)
58
+ urlObject.pathname = pathname.slice(0, -1)
59
+ }
60
+ if (foundADirectory && directoryReferenceAllowed) {
61
+ if (
62
+ // ignore new URL second arg
63
+ reference.subtype === "new_url_second_arg" ||
64
+ // ignore root file url
65
+ reference.url === "file:///"
66
+ ) {
67
+ reference.shouldHandle = false
68
+ }
69
+ reference.data.foundADirectory = true
70
+ const directoryFacadeUrl = urlObject.href
71
+ const directoryUrlRaw = preserveSymlinks
72
+ ? directoryFacadeUrl
73
+ : resolveSymlink(directoryFacadeUrl)
74
+ const directoryUrl = `${directoryUrlRaw}${search}${hash}`
75
+ return directoryUrl
76
+ }
77
+ const url = urlObject.href
78
+ const filesystemResolution = applyFileSystemMagicResolution(url, {
79
+ fileStat: stat,
80
+ magicDirectoryIndex,
81
+ magicExtensions: getExtensionsToTry(
82
+ magicExtensions,
83
+ reference.parentUrl,
84
+ ),
85
+ })
86
+ if (!filesystemResolution.found) {
87
+ reference.data.foundADirectory = foundADirectory
88
+ return null
89
+ }
90
+ reference.data.foundADirectory = filesystemResolution.isDirectory
91
+ const fileFacadeUrl = filesystemResolution.url
92
+ const fileUrlRaw = preserveSymlinks
93
+ ? fileFacadeUrl
94
+ : resolveSymlink(fileFacadeUrl)
95
+ const fileUrl = `${fileUrlRaw}${search}${hash}`
96
+ return fileUrl
97
+ },
98
+ },
99
+ {
100
+ name: "jsenv:filesystem_resolution",
101
+ appliesDuring: "*",
102
+ resolveUrl: {
103
+ filesystem: (reference, context) => {
104
+ const { parentUrl } = reference
105
+ const parentUrlInfo = context.urlGraph.getUrlInfo(parentUrl)
106
+ const baseUrl =
107
+ parentUrlInfo && parentUrlInfo.type === "directory"
108
+ ? ensurePathnameTrailingSlash(parentUrl)
109
+ : parentUrl
110
+ return new URL(reference.specifier, baseUrl).href
111
+ },
112
+ },
113
+ },
114
+ {
115
+ name: "jsenv:@fs_resolution",
116
+ appliesDuring: {
117
+ // during dev and test it's a browser running the code
118
+ // so absolute file urls needs to be relativized
119
+ dev: true,
120
+ test: true,
121
+ // during build it's fine to use file:// urls
122
+ build: false,
123
+ },
124
+ resolveUrl: (reference) => {
125
+ if (reference.specifier.startsWith("/@fs/")) {
126
+ const fsRootRelativeUrl = reference.specifier.slice("/@fs/".length)
127
+ return `file:///${fsRootRelativeUrl}`
128
+ }
129
+ return null
130
+ },
131
+ formatUrl: (reference, context) => {
132
+ if (!reference.generatedUrl.startsWith("file:")) {
133
+ return null
134
+ }
135
+ if (urlIsInsideOf(reference.generatedUrl, context.rootDirectoryUrl)) {
136
+ return `/${urlToRelativeUrl(
137
+ reference.generatedUrl,
138
+ context.rootDirectoryUrl,
139
+ )}`
140
+ }
141
+ return `/@fs/${reference.generatedUrl.slice("file:///".length)}`
142
+ },
143
+ },
144
+ {
145
+ name: "jsenv:file_url_fetching",
146
+ appliesDuring: "*",
147
+ fetchUrlContent: (urlInfo, context) => {
148
+ if (!urlInfo.url.startsWith("file:")) {
149
+ return null
150
+ }
151
+ const urlObject = new URL(urlInfo.url)
152
+ if (context.reference.data.foundADirectory) {
153
+ if (directoryReferenceAllowed) {
154
+ const directoryEntries = readdirSync(urlObject)
155
+ let filename
156
+ if (context.reference.type === "filesystem") {
157
+ const parentUrlInfo = context.urlGraph.getUrlInfo(
158
+ context.reference.parentUrl,
159
+ )
160
+ filename = `${parentUrlInfo.filename}${context.reference.specifier}/`
161
+ } else {
162
+ filename = `${urlToFilename(urlInfo.url)}/`
163
+ }
164
+ return {
165
+ type: "directory",
166
+ contentType: "application/json",
167
+ content: JSON.stringify(directoryEntries, null, " "),
168
+ filename,
169
+ }
170
+ }
171
+ const error = new Error("found a directory on filesystem")
172
+ error.code = "DIRECTORY_REFERENCE_NOT_ALLOWED"
173
+ throw error
174
+ }
175
+ const fileBuffer = readFileSync(urlObject)
176
+ const contentType = CONTENT_TYPE.fromUrlExtension(urlInfo.url)
177
+ return {
178
+ content: CONTENT_TYPE.isTextual(contentType)
179
+ ? String(fileBuffer)
180
+ : fileBuffer,
181
+ contentType,
182
+ }
183
+ },
184
+ },
185
+ ]
186
+ }
187
+
188
+ const resolveSymlink = (fileUrl) => {
189
+ return pathToFileURL(realpathSync(new URL(fileUrl))).href
190
+ }
@@ -0,0 +1,254 @@
1
+ import { unevalException } from "./uneval_exception.js"
2
+ import { displayErrorInDocument } from "./error_in_document.js"
3
+ import { displayErrorNotification } from "./error_in_notification.js"
4
+
5
+ const { __html_supervisor__ } = window
6
+
7
+ export const installHtmlSupervisor = ({ logs, measurePerf }) => {
8
+ const errorTransformer = null // could implement error stack remapping if needed
9
+ const scriptExecutionResults = {}
10
+ let collectCalled = false
11
+ let pendingExecutionCount = 0
12
+ let resolveScriptExecutionsPromise
13
+ const scriptExecutionsPromise = new Promise((resolve) => {
14
+ resolveScriptExecutionsPromise = resolve
15
+ })
16
+ const onExecutionStart = (name) => {
17
+ scriptExecutionResults[name] = null // ensure execution order is reflected into the object
18
+ pendingExecutionCount++
19
+ if (measurePerf) {
20
+ performance.mark(`execution_start`)
21
+ }
22
+ }
23
+ const onExecutionSettled = (name, executionResult) => {
24
+ if (measurePerf) {
25
+ performance.measure(`execution`, `execution_start`)
26
+ }
27
+ scriptExecutionResults[name] = executionResult
28
+ pendingExecutionCount--
29
+ if (pendingExecutionCount === 0 && collectCalled) {
30
+ resolveScriptExecutionsPromise()
31
+ }
32
+ }
33
+ const onExecutionError = (
34
+ executionResult,
35
+ {
36
+ currentScript,
37
+ errorExposureInNotification = false,
38
+ errorExposureInDocument = true,
39
+ },
40
+ ) => {
41
+ const error = executionResult.error
42
+ if (error && error.code === "NETWORK_FAILURE") {
43
+ if (currentScript) {
44
+ const errorEvent = new Event("error")
45
+ currentScript.dispatchEvent(errorEvent)
46
+ }
47
+ } else if (typeof error === "object") {
48
+ const globalErrorEvent = new Event("error")
49
+ globalErrorEvent.filename = error.filename
50
+ globalErrorEvent.lineno = error.line || error.lineno
51
+ globalErrorEvent.colno = error.column || error.columnno
52
+ globalErrorEvent.message = error.message
53
+ window.dispatchEvent(globalErrorEvent)
54
+ }
55
+ if (errorExposureInNotification) {
56
+ displayErrorNotification(error)
57
+ }
58
+ if (errorExposureInDocument) {
59
+ displayErrorInDocument(error)
60
+ }
61
+ executionResult.exceptionSource = unevalException(error)
62
+ delete executionResult.error
63
+ }
64
+ const getNavigationStartTime = () => {
65
+ try {
66
+ return window.performance.timing.navigationStart
67
+ } catch (e) {
68
+ return Date.now()
69
+ }
70
+ }
71
+
72
+ const performExecution = async ({
73
+ src,
74
+ type,
75
+ currentScript,
76
+ execute,
77
+ // https://developer.mozilla.org/en-US/docs/web/html/element/script
78
+ }) => {
79
+ if (logs) {
80
+ console.group(`[jsenv] loading ${type} ${src}`)
81
+ }
82
+ onExecutionStart(src)
83
+ let completed
84
+ let result
85
+ let error
86
+ try {
87
+ result = await execute()
88
+ completed = true
89
+ } catch (e) {
90
+ completed = false
91
+ error = e
92
+ }
93
+ if (completed) {
94
+ const executionResult = {
95
+ status: "completed",
96
+ namespace: result,
97
+ coverage: window.__coverage__,
98
+ }
99
+ onExecutionSettled(src, executionResult)
100
+ if (logs) {
101
+ console.log(`${type} load ended`)
102
+ console.groupEnd()
103
+ }
104
+ return
105
+ }
106
+ const executionResult = {
107
+ status: "errored",
108
+ coverage: window.__coverage__,
109
+ }
110
+ let errorExposureInConsole = true
111
+ if (error.name === "SyntaxError") {
112
+ // errorExposureInConsole = false
113
+ }
114
+ if (errorTransformer) {
115
+ try {
116
+ error = await errorTransformer(error)
117
+ } catch (e) {}
118
+ }
119
+ executionResult.error = error
120
+ onExecutionSettled(src, executionResult)
121
+ onExecutionError(executionResult, {
122
+ currentScript,
123
+ })
124
+ if (errorExposureInConsole) {
125
+ if (typeof window.reportError === "function") {
126
+ window.reportError(error)
127
+ } else {
128
+ console.error(error)
129
+ }
130
+ }
131
+ if (logs) {
132
+ console.groupEnd()
133
+ }
134
+ }
135
+
136
+ const classicExecutionQueue = createExecutionQueue(performExecution)
137
+ const deferedExecutionQueue = createExecutionQueue(performExecution)
138
+ deferedExecutionQueue.waitFor(
139
+ new Promise((resolve) => {
140
+ if (
141
+ document.readyState === "interactive" ||
142
+ document.readyState === "complete"
143
+ ) {
144
+ resolve()
145
+ } else {
146
+ document.addEventListener("readystatechange", () => {
147
+ if (document.readyState === "interactive") {
148
+ resolve()
149
+ }
150
+ })
151
+ }
152
+ }),
153
+ )
154
+ __html_supervisor__.addScriptToExecute = async (scriptToExecute) => {
155
+ if (scriptToExecute.async) {
156
+ performExecution(scriptToExecute)
157
+ return
158
+ }
159
+ const useDeferQueue =
160
+ scriptToExecute.defer || scriptToExecute.type === "js_module"
161
+ if (useDeferQueue) {
162
+ // defer must wait for classic script to be done
163
+ const classicExecutionPromise = classicExecutionQueue.getPromise()
164
+ if (classicExecutionPromise) {
165
+ deferedExecutionQueue.waitFor(classicExecutionPromise)
166
+ }
167
+ deferedExecutionQueue.executeAsap(scriptToExecute)
168
+ } else {
169
+ classicExecutionQueue.executeAsap(scriptToExecute)
170
+ }
171
+ }
172
+
173
+ __html_supervisor__.collectScriptResults = async () => {
174
+ collectCalled = true
175
+ if (pendingExecutionCount === 0) {
176
+ resolveScriptExecutionsPromise()
177
+ } else {
178
+ await scriptExecutionsPromise
179
+ }
180
+
181
+ let status = "completed"
182
+ let exceptionSource = ""
183
+ Object.keys(scriptExecutionResults).forEach((key) => {
184
+ const scriptExecutionResult = scriptExecutionResults[key]
185
+ if (scriptExecutionResult.status === "errored") {
186
+ status = "errored"
187
+ exceptionSource = scriptExecutionResult.exceptionSource
188
+ }
189
+ })
190
+ return {
191
+ status,
192
+ ...(status === "errored" ? { exceptionSource } : {}),
193
+ startTime: getNavigationStartTime(),
194
+ endTime: Date.now(),
195
+ scriptExecutionResults,
196
+ }
197
+ }
198
+
199
+ const { scriptsToExecute } = __html_supervisor__
200
+ const copy = scriptsToExecute.slice()
201
+ scriptsToExecute.length = 0
202
+ copy.forEach((scriptToExecute) => {
203
+ __html_supervisor__.addScriptToExecute(scriptToExecute)
204
+ })
205
+ }
206
+
207
+ export const superviseScriptTypeModule = ({ src, isInline }) => {
208
+ __html_supervisor__.addScriptToExecute({
209
+ src,
210
+ type: "js_module",
211
+ isInline,
212
+ execute: () => import(new URL(src, document.location.href).href),
213
+ })
214
+ }
215
+
216
+ const createExecutionQueue = (execute) => {
217
+ const scripts = []
218
+
219
+ let promiseToWait = null
220
+ const waitFor = async (promise) => {
221
+ promiseToWait = promise
222
+ promiseToWait.then(
223
+ () => {
224
+ promiseToWait = null
225
+ dequeue()
226
+ },
227
+ () => {
228
+ promiseToWait = null
229
+ dequeue()
230
+ },
231
+ )
232
+ }
233
+
234
+ const executeAsap = async (script) => {
235
+ if (promiseToWait) {
236
+ scripts.push(script)
237
+ return
238
+ }
239
+ waitFor(execute(script))
240
+ }
241
+
242
+ const dequeue = () => {
243
+ const scriptWaiting = scripts.shift()
244
+ if (scriptWaiting) {
245
+ __html_supervisor__.addScriptToExecute(scriptWaiting)
246
+ }
247
+ }
248
+
249
+ return {
250
+ waitFor,
251
+ executeAsap,
252
+ getPromise: () => promiseToWait,
253
+ }
254
+ }
@@ -0,0 +1,82 @@
1
+ window.__html_supervisor__ = {
2
+ // "html_supervisor_installer.js" will implement
3
+ // - "addScriptToExecute"
4
+ // - "superviseScriptTypeModule"
5
+ // - "collectScriptResults"
6
+ // and take all executions in "scriptsToExecute" and implement their supervision
7
+ scriptsToExecute: [],
8
+ addScriptToExecute: (scriptToExecute) => {
9
+ window.__html_supervisor__.scriptsToExecute.push(scriptToExecute)
10
+ },
11
+ superviseScript: ({ src, isInline, crossorigin, integrity }) => {
12
+ window.__html_supervisor__.addScriptToExecute({
13
+ src,
14
+ type: "js_classic",
15
+ isInline,
16
+ currentScript: document.currentScript,
17
+ execute: () => {
18
+ return new Promise((resolve, reject) => {
19
+ const script = document.createElement("script")
20
+ if (crossorigin) {
21
+ script.crossorigin = crossorigin
22
+ }
23
+ if (integrity) {
24
+ script.integrity = integrity
25
+ }
26
+ script.src = src
27
+ const scriptUrl = new URL(src, window.location).href
28
+ let lastWindowErrorUrl
29
+ let lastWindowError
30
+ const windowErrorCallback = (e) => {
31
+ lastWindowErrorUrl = e.filename
32
+ lastWindowError = e.error
33
+ }
34
+ const cleanup = () => {
35
+ // the execution of the script itself can remove script from the page
36
+ if (script.parentNode) {
37
+ script.parentNode.removeChild(script)
38
+ }
39
+ window.removeEventListener("error", windowErrorCallback)
40
+ }
41
+ window.addEventListener("error", windowErrorCallback)
42
+ script.addEventListener("error", () => {
43
+ cleanup()
44
+ reject(src)
45
+ })
46
+ script.addEventListener("load", () => {
47
+ cleanup()
48
+ if (lastWindowErrorUrl === scriptUrl) {
49
+ reject(lastWindowError)
50
+ } else {
51
+ resolve()
52
+ }
53
+ })
54
+ document.body.appendChild(script)
55
+ })
56
+ },
57
+ })
58
+ },
59
+ superviseScriptTypeModule: () => {
60
+ throw new Error("htmlSupervisor not installed")
61
+ },
62
+ getScriptExecutionResults: () => {
63
+ // wait for page to load before collecting script execution results
64
+ const htmlReadyPromise = new Promise((resolve) => {
65
+ if (document.readyState === "complete") {
66
+ resolve()
67
+ return
68
+ }
69
+ const loadCallback = () => {
70
+ window.removeEventListener("load", loadCallback)
71
+ resolve()
72
+ }
73
+ window.addEventListener("load", loadCallback)
74
+ })
75
+ return htmlReadyPromise.then(() => {
76
+ return window.__html_supervisor__.collectScriptResults()
77
+ })
78
+ },
79
+ collectScriptResults: () => {
80
+ throw new Error("htmlSupervisor not installed")
81
+ },
82
+ }