@jsenv/core 27.0.0-alpha.2 → 27.0.0-alpha.20

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 (219) hide show
  1. package/main.js +4 -0
  2. package/package.json +16 -12
  3. package/readme.md +4 -12
  4. package/src/build/build.js +512 -304
  5. package/src/build/build_urls_generator.js +33 -21
  6. package/src/build/graph_utils.js +31 -0
  7. package/src/build/{inject_version_mappings.js → inject_global_version_mappings.js} +33 -15
  8. package/src/build/inject_service_worker_urls.js +79 -0
  9. package/src/build/resync_ressource_hints.js +83 -0
  10. package/src/build/start_build_server.js +188 -0
  11. package/src/dev/plugins/explorer/jsenv_plugin_explorer.js +2 -2
  12. package/src/dev/plugins/toolbar/jsenv_plugin_toolbar.js +3 -1
  13. package/src/dev/start_dev_server.js +19 -22
  14. package/src/execute/execute.js +23 -4
  15. package/src/execute/run.js +17 -54
  16. package/src/execute/runtimes/browsers/from_playwright.js +167 -146
  17. package/src/execute/runtimes/node/node_process.js +281 -37
  18. package/src/omega/{runtime_support/default_runtime_support.js → compat/default_runtime_compat.js} +3 -5
  19. package/src/omega/{runtime_support/features_compatibility.js → compat/features_compats.js} +66 -4
  20. package/src/omega/compat/runtime_compat.js +50 -0
  21. package/src/omega/errors.js +51 -58
  22. package/src/omega/fetched_content_compliance.js +24 -0
  23. package/src/omega/file_url_converter.js +8 -50
  24. package/src/omega/kitchen.js +405 -286
  25. package/src/omega/server/file_service.js +9 -11
  26. package/src/omega/url_graph/url_graph_load.js +14 -7
  27. package/src/omega/url_graph/url_graph_report.js +7 -5
  28. package/src/omega/url_graph.js +22 -9
  29. package/src/omega/web_workers.js +42 -0
  30. package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/autoreload_preference.js +0 -0
  31. package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/event_source_client.js +2 -2
  32. package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/reload.js +0 -0
  33. package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/url_helpers.js +0 -0
  34. package/src/plugins/autoreload/dev_sse/jsenv_plugin_dev_sse_client.js +41 -0
  35. package/src/{dev/plugins/autoreload/jsenv_plugin_autoreload.js → plugins/autoreload/dev_sse/jsenv_plugin_dev_sse_server.js} +27 -168
  36. package/src/plugins/autoreload/jsenv_plugin_autoreload.js +25 -0
  37. package/src/plugins/autoreload/jsenv_plugin_hmr.js +35 -0
  38. package/src/plugins/bundling/css/bundle_css.js +21 -0
  39. package/src/plugins/bundling/js_classic_workers/bundle_js_classic_workers.js +13 -0
  40. package/src/{build/plugins/bundle_js_module/jsenv_plugin_bundle_js_module.js → plugins/bundling/js_module/bundle_js_module.js} +105 -78
  41. package/src/plugins/bundling/jsenv_plugin_bundling.js +51 -0
  42. package/src/{omega/core_plugins → plugins}/commonjs_globals/jsenv_plugin_commonjs_globals.js +48 -41
  43. package/src/plugins/file_urls/jsenv_plugin_file_urls.js +66 -0
  44. package/src/{omega/core_plugins → plugins}/filesystem_magic/jsenv_plugin_filesystem_magic.js +7 -4
  45. package/src/{omega/core_plugins → plugins}/html_supervisor/client/error_in_document.js +0 -0
  46. package/src/{omega/core_plugins → plugins}/html_supervisor/client/error_in_notification.js +0 -0
  47. package/src/{omega/core_plugins → plugins}/html_supervisor/client/html_supervisor_installer.js +3 -2
  48. package/src/{omega/core_plugins → plugins}/html_supervisor/client/html_supervisor_setup.js +0 -0
  49. package/src/{omega/core_plugins → plugins}/html_supervisor/client/perf_browser.js +0 -0
  50. package/src/{omega/core_plugins → plugins}/html_supervisor/client/uneval_exception.js +0 -0
  51. package/src/{omega/core_plugins → plugins}/html_supervisor/jsenv_plugin_html_supervisor.js +38 -46
  52. package/src/plugins/http_urls/jsenv_plugin_http_urls.js +12 -0
  53. package/src/{dev/plugins/autoreload → plugins/import_meta_hot}/babel_plugin_metadata_import_meta_hot.js +4 -5
  54. package/src/{dev/plugins/autoreload → plugins/import_meta_hot}/client/import_meta_hot.js +3 -1
  55. package/src/{dev/plugins/autoreload → plugins/import_meta_hot}/html_hot_dependencies.js +2 -2
  56. package/src/plugins/import_meta_hot/jsenv_plugin_import_meta_hot.js +98 -0
  57. package/src/{omega/core_plugins → plugins}/import_meta_scenarios/jsenv_plugin_import_meta_scenarios.js +41 -13
  58. package/src/plugins/import_meta_url/client/import_meta_url_browser.js +52 -0
  59. package/src/plugins/import_meta_url/client/import_meta_url_commonjs.mjs +9 -0
  60. package/src/{omega/core_plugins → plugins}/importmap/jsenv_plugin_importmap.js +37 -31
  61. package/src/plugins/inject_globals/jsenv_plugin_inject_globals.js +25 -0
  62. package/src/{omega/core_plugins → plugins}/inline/client/inline_content.js +0 -0
  63. package/src/{omega/core_plugins → plugins}/inline/jsenv_plugin_data_urls.js +18 -14
  64. package/src/{omega/core_plugins/inline/jsenv_plugin_js_and_css_inside_html.js → plugins/inline/jsenv_plugin_html_inline_content.js} +61 -40
  65. package/src/plugins/inline/jsenv_plugin_inline.js +36 -0
  66. package/src/{omega/core_plugins → plugins}/inline/jsenv_plugin_inline_query_param.js +6 -6
  67. package/src/plugins/inline/jsenv_plugin_js_inline_content.js +263 -0
  68. package/src/plugins/leading_slash/jsenv_plugin_leading_slash.js +13 -0
  69. package/src/plugins/minification/css/minify_css.js +9 -0
  70. package/src/plugins/minification/html/minify_html.js +15 -0
  71. package/src/{build/plugins/minify_js/jsenv_plugin_minify_js.js → plugins/minification/js/minify_js.js} +6 -22
  72. package/src/plugins/minification/jsenv_plugin_minification.js +78 -0
  73. package/src/plugins/minification/json/minify_json.js +8 -0
  74. package/src/{omega/core_plugins → plugins}/node_esm_resolution/jsenv_plugin_node_esm_resolution.js +15 -15
  75. package/src/{omega → plugins}/plugin_controller.js +18 -10
  76. package/src/plugins/plugins.js +73 -0
  77. package/src/plugins/transpilation/as_js_classic/client/s.js +808 -0
  78. package/src/plugins/transpilation/as_js_classic/client/s.js.md +1 -0
  79. package/src/plugins/transpilation/as_js_classic/helpers/babel_plugin_transform_import_meta_url.js +47 -0
  80. package/src/plugins/transpilation/as_js_classic/helpers/systemjs_old.js +43 -0
  81. package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic.js +191 -0
  82. package/src/plugins/transpilation/as_js_classic/jsenv_plugin_script_type_module_as_classic.js +156 -0
  83. package/src/plugins/transpilation/as_js_classic/jsenv_plugin_top_level_await.js +37 -0
  84. package/src/plugins/transpilation/as_js_classic/jsenv_plugin_workers_type_module_as_classic.js +133 -0
  85. package/src/{omega/core_plugins → plugins/transpilation}/babel/global_this/babel_plugin_global_this_as_jsenv_import.js +0 -0
  86. package/src/{omega/core_plugins → plugins/transpilation}/babel/global_this/client/global_this.js +0 -0
  87. package/src/{omega/core_plugins/babel/babel_helper → plugins/transpilation/babel/helpers}/babel_plugin_babel_helpers_as_jsenv_imports.js +1 -2
  88. package/src/plugins/transpilation/babel/helpers/babel_plugin_structure.js +158 -0
  89. package/src/{omega/core_plugins → plugins/transpilation}/babel/helpers/babel_plugins_compatibility.js +0 -0
  90. package/src/{omega/core_plugins → plugins/transpilation}/babel/jsenv_plugin_babel.js +38 -22
  91. package/src/{omega/core_plugins → plugins/transpilation}/babel/new_stylesheet/babel_plugin_new_stylesheet_as_jsenv_import.js +0 -0
  92. package/src/{omega/core_plugins → plugins/transpilation}/babel/new_stylesheet/client/.eslintrc.cjs +0 -0
  93. package/src/{omega/core_plugins → plugins/transpilation}/babel/new_stylesheet/client/new_stylesheet.js +0 -0
  94. package/src/{omega/core_plugins → plugins/transpilation}/babel/regenerator_runtime/babel_plugin_regenerator_runtime_as_jsenv_import.js +0 -0
  95. package/src/{omega/core_plugins → plugins/transpilation}/babel/regenerator_runtime/client/regenerator_runtime.js +0 -0
  96. package/src/plugins/transpilation/css_parcel/jsenv_plugin_css_parcel.js +18 -0
  97. package/src/{omega/core_plugins → plugins/transpilation}/import_assertions/helpers/babel_plugin_metadata_import_assertions.js +0 -0
  98. package/src/plugins/transpilation/import_assertions/jsenv_plugin_import_assertions.js +243 -0
  99. package/src/plugins/transpilation/jsenv_plugin_transpilation.js +40 -0
  100. package/src/plugins/url_references/css/css_urls.js +49 -0
  101. package/src/plugins/url_references/html/html_urls.js +273 -0
  102. package/src/plugins/url_references/js/js_urls.js +170 -0
  103. package/src/plugins/url_references/jsenv_plugin_url_references.js +18 -0
  104. package/src/plugins/url_references/webmanifest/webmanifest_urls.js +17 -0
  105. package/src/{omega/core_plugins → plugins}/url_resolution/jsenv_plugin_url_resolution.js +12 -5
  106. package/src/{omega/core_plugins → plugins}/url_version/jsenv_plugin_url_version.js +8 -8
  107. package/src/test/execute_plan.js +25 -11
  108. package/src/test/execute_test_plan.js +14 -1
  109. package/src/test/logs_file_execution.js +8 -7
  110. package/src/build/plugins/minify_html/jsenv_plugin_minify_html.js +0 -30
  111. package/src/dev/plugins/autoreload/client/event_source_connection.js +0 -195
  112. package/src/dev/plugins/autoreload/sse_service.js +0 -149
  113. package/src/execute/runtimes/node/controlled_process.js +0 -316
  114. package/src/omega/core_plugins/babel/babel_helper/babel_helper_directory.js +0 -29
  115. package/src/omega/core_plugins/babel/babel_helper/client/.eslintrc.cjs +0 -24
  116. package/src/omega/core_plugins/babel/babel_helper/client/AsyncGenerator/AsyncGenerator.js +0 -81
  117. package/src/omega/core_plugins/babel/babel_helper/client/AwaitValue/AwaitValue.js +0 -3
  118. package/src/omega/core_plugins/babel/babel_helper/client/applyDecoratorDescriptor/applyDecoratorDescriptor.js +0 -33
  119. package/src/omega/core_plugins/babel/babel_helper/client/arrayLikeToArray/arrayLikeToArray.js +0 -7
  120. package/src/omega/core_plugins/babel/babel_helper/client/arrayWithHoles/arrayWithHoles.js +0 -4
  121. package/src/omega/core_plugins/babel/babel_helper/client/arrayWithoutHoles/arrayWithoutHoles.js +0 -6
  122. package/src/omega/core_plugins/babel/babel_helper/client/assertThisInitialized/assertThisInitialized.js +0 -7
  123. package/src/omega/core_plugins/babel/babel_helper/client/asyncGeneratorDelegate/asyncGeneratorDelegate.js +0 -40
  124. package/src/omega/core_plugins/babel/babel_helper/client/asyncIterator/asyncIterator.js +0 -65
  125. package/src/omega/core_plugins/babel/babel_helper/client/asyncToGenerator/asyncToGenerator.js +0 -34
  126. package/src/omega/core_plugins/babel/babel_helper/client/awaitAsyncGenerator/awaitAsyncGenerator.js +0 -5
  127. package/src/omega/core_plugins/babel/babel_helper/client/classApplyDescriptorDestructureSet/classApplyDescriptorDestructureSet.js +0 -20
  128. package/src/omega/core_plugins/babel/babel_helper/client/classApplyDescriptorGet/classApplyDescriptorGet.js +0 -6
  129. package/src/omega/core_plugins/babel/babel_helper/client/classApplyDescriptorSet/classApplyDescriptorSet.js +0 -13
  130. package/src/omega/core_plugins/babel/babel_helper/client/classCallCheck/classCallCheck.js +0 -5
  131. package/src/omega/core_plugins/babel/babel_helper/client/classCheckPrivateStaticAccess/classCheckPrivateStaticAccess.js +0 -5
  132. package/src/omega/core_plugins/babel/babel_helper/client/classCheckPrivateStaticFieldDescriptor/classCheckPrivateStaticFieldDescriptor.js +0 -6
  133. package/src/omega/core_plugins/babel/babel_helper/client/classExtractFieldDescriptor/classExtractFieldDescriptor.js +0 -7
  134. package/src/omega/core_plugins/babel/babel_helper/client/classNameTDZError/classNameTDZError.js +0 -4
  135. package/src/omega/core_plugins/babel/babel_helper/client/classPrivateFieldDestructureSet/classPrivateFieldDestructureSet.js +0 -7
  136. package/src/omega/core_plugins/babel/babel_helper/client/classPrivateFieldGet/classPrivateFieldGet.js +0 -7
  137. package/src/omega/core_plugins/babel/babel_helper/client/classPrivateFieldLooseBase/classPrivateFieldLooseBase.js +0 -6
  138. package/src/omega/core_plugins/babel/babel_helper/client/classPrivateFieldLooseKey/classPrivateFieldLooseKey.js +0 -5
  139. package/src/omega/core_plugins/babel/babel_helper/client/classPrivateFieldSet/classPrivateFieldSet.js +0 -8
  140. package/src/omega/core_plugins/babel/babel_helper/client/classPrivateMethodGet/classPrivateMethodGet.js +0 -6
  141. package/src/omega/core_plugins/babel/babel_helper/client/classPrivateMethodSet/classPrivateMethodSet.js +0 -3
  142. package/src/omega/core_plugins/babel/babel_helper/client/classStaticPrivateFieldSpecGet/classStaticPrivateFieldSpecGet.js +0 -9
  143. package/src/omega/core_plugins/babel/babel_helper/client/classStaticPrivateFieldSpecSet/classStaticPrivateFieldSpecSet.js +0 -15
  144. package/src/omega/core_plugins/babel/babel_helper/client/classStaticPrivateMethodGet/classStaticPrivateMethodGet.js +0 -6
  145. package/src/omega/core_plugins/babel/babel_helper/client/classStaticPrivateMethodSet/classStaticPrivateMethodSet.js +0 -3
  146. package/src/omega/core_plugins/babel/babel_helper/client/construct/construct.js +0 -16
  147. package/src/omega/core_plugins/babel/babel_helper/client/createClass/createClass.js +0 -15
  148. package/src/omega/core_plugins/babel/babel_helper/client/createForOfIteratorHelper/createForOfIteratorHelper.js +0 -60
  149. package/src/omega/core_plugins/babel/babel_helper/client/createForOfIteratorHelperLoose/createForOfIteratorHelperLoose.js +0 -23
  150. package/src/omega/core_plugins/babel/babel_helper/client/createRawReactElement/createRawReactElement.js +0 -50
  151. package/src/omega/core_plugins/babel/babel_helper/client/createSuper/createSuper.js +0 -22
  152. package/src/omega/core_plugins/babel/babel_helper/client/decorate/decorate.js +0 -403
  153. package/src/omega/core_plugins/babel/babel_helper/client/defaults/defaults.js +0 -11
  154. package/src/omega/core_plugins/babel/babel_helper/client/defineEnumerableProperties/defineEnumerableProperties.js +0 -23
  155. package/src/omega/core_plugins/babel/babel_helper/client/defineProperty/defineProperty.js +0 -18
  156. package/src/omega/core_plugins/babel/babel_helper/client/extends/extends.js +0 -14
  157. package/src/omega/core_plugins/babel/babel_helper/client/get/get.js +0 -19
  158. package/src/omega/core_plugins/babel/babel_helper/client/getPrototypeOf/getPrototypeOf.js +0 -4
  159. package/src/omega/core_plugins/babel/babel_helper/client/inherits/inherits.js +0 -19
  160. package/src/omega/core_plugins/babel/babel_helper/client/inheritsLoose/inheritsLoose.js +0 -7
  161. package/src/omega/core_plugins/babel/babel_helper/client/initializerDefineProperty/initializerDefineProperty.js +0 -10
  162. package/src/omega/core_plugins/babel/babel_helper/client/initializerWarningHelper/initializerWarningHelper.js +0 -6
  163. package/src/omega/core_plugins/babel/babel_helper/client/instanceof/instanceof.js +0 -6
  164. package/src/omega/core_plugins/babel/babel_helper/client/interopRequireDefault/interopRequireDefault.js +0 -3
  165. package/src/omega/core_plugins/babel/babel_helper/client/interopRequireWildcard/interopRequireWildcard.js +0 -37
  166. package/src/omega/core_plugins/babel/babel_helper/client/isNativeFunction/isNativeFunction.js +0 -4
  167. package/src/omega/core_plugins/babel/babel_helper/client/isNativeReflectConstruct/isNativeReflectConstruct.js +0 -21
  168. package/src/omega/core_plugins/babel/babel_helper/client/iterableToArray/iterableToArray.js +0 -7
  169. package/src/omega/core_plugins/babel/babel_helper/client/iterableToArrayLimit/iterableToArrayLimit.js +0 -36
  170. package/src/omega/core_plugins/babel/babel_helper/client/iterableToArrayLimitLoose/iterableToArrayLimitLoose.js +0 -10
  171. package/src/omega/core_plugins/babel/babel_helper/client/jsx/jsx.js +0 -50
  172. package/src/omega/core_plugins/babel/babel_helper/client/maybeArrayLike/maybeArrayLike.js +0 -10
  173. package/src/omega/core_plugins/babel/babel_helper/client/newArrowCheck/newArrowCheck.js +0 -5
  174. package/src/omega/core_plugins/babel/babel_helper/client/nonIterableRest/nonIterableRest.js +0 -5
  175. package/src/omega/core_plugins/babel/babel_helper/client/nonIterableSpread/nonIterableSpread.js +0 -5
  176. package/src/omega/core_plugins/babel/babel_helper/client/objectDestructuringEmpty/objectDestructuringEmpty.js +0 -3
  177. package/src/omega/core_plugins/babel/babel_helper/client/objectSpread/objectSpread.js +0 -23
  178. package/src/omega/core_plugins/babel/babel_helper/client/objectSpread2/objectSpread2.js +0 -41
  179. package/src/omega/core_plugins/babel/babel_helper/client/objectWithoutProperties/objectWithoutProperties.js +0 -19
  180. package/src/omega/core_plugins/babel/babel_helper/client/objectWithoutPropertiesLoose/objectWithoutPropertiesLoose.js +0 -13
  181. package/src/omega/core_plugins/babel/babel_helper/client/possibleConstructorReturn/possibleConstructorReturn.js +0 -10
  182. package/src/omega/core_plugins/babel/babel_helper/client/readOnlyError/readOnlyError.js +0 -4
  183. package/src/omega/core_plugins/babel/babel_helper/client/readme.md +0 -8
  184. package/src/omega/core_plugins/babel/babel_helper/client/set/set.js +0 -44
  185. package/src/omega/core_plugins/babel/babel_helper/client/setPrototypeOf/setPrototypeOf.js +0 -6
  186. package/src/omega/core_plugins/babel/babel_helper/client/skipFirstGeneratorNext/skipFirstGeneratorNext.js +0 -8
  187. package/src/omega/core_plugins/babel/babel_helper/client/slicedToArray/slicedToArray.js +0 -10
  188. package/src/omega/core_plugins/babel/babel_helper/client/slicedToArrayLoose/slicedToArrayLoose.js +0 -13
  189. package/src/omega/core_plugins/babel/babel_helper/client/superPropBase/superPropBase.js +0 -10
  190. package/src/omega/core_plugins/babel/babel_helper/client/taggedTemplateLiteral/taggedTemplateLiteral.js +0 -10
  191. package/src/omega/core_plugins/babel/babel_helper/client/taggedTemplateLiteralLoose/taggedTemplateLiteralLoose.js +0 -7
  192. package/src/omega/core_plugins/babel/babel_helper/client/tdz/tdz.js +0 -4
  193. package/src/omega/core_plugins/babel/babel_helper/client/temporalRef/temporalRef.js +0 -6
  194. package/src/omega/core_plugins/babel/babel_helper/client/temporalUndefined/temporalUndefined.js +0 -3
  195. package/src/omega/core_plugins/babel/babel_helper/client/toArray/toArray.js +0 -10
  196. package/src/omega/core_plugins/babel/babel_helper/client/toConsumableArray/toConsumableArray.js +0 -10
  197. package/src/omega/core_plugins/babel/babel_helper/client/toPrimitive/toPrimitive.js +0 -10
  198. package/src/omega/core_plugins/babel/babel_helper/client/toPropertyKey/toPropertyKey.js +0 -6
  199. package/src/omega/core_plugins/babel/babel_helper/client/typeof/typeof.js +0 -14
  200. package/src/omega/core_plugins/babel/babel_helper/client/unsupportedIterableToArray/unsupportedIterableToArray.js +0 -12
  201. package/src/omega/core_plugins/babel/babel_helper/client/wrapAsyncGenerator/wrapAsyncGenerator.js +0 -8
  202. package/src/omega/core_plugins/babel/babel_helper/client/wrapNativeSuper/wrapNativeSuper.js +0 -30
  203. package/src/omega/core_plugins/babel/babel_helper/client/wrapRegExp/wrapRegExp.js +0 -63
  204. package/src/omega/core_plugins/babel/babel_helper/client/writeOnlyError/writeOnlyError.js +0 -4
  205. package/src/omega/core_plugins/babel/helpers/babel_plugin_structure.js +0 -187
  206. package/src/omega/core_plugins/file_urls/jsenv_plugin_file_urls.js +0 -67
  207. package/src/omega/core_plugins/import_assertions/helpers/json_module.js +0 -12
  208. package/src/omega/core_plugins/import_assertions/helpers/text_module.js +0 -6
  209. package/src/omega/core_plugins/import_assertions/jsenv_plugin_import_assertions.js +0 -211
  210. package/src/omega/core_plugins/inline/jsenv_plugin_inline.js +0 -13
  211. package/src/omega/core_plugins/inline/jsenv_plugin_new_inline_content.js +0 -210
  212. package/src/omega/core_plugins/leading_slash/jsenv_plugin_leading_slash.js +0 -12
  213. package/src/omega/core_plugins.js +0 -39
  214. package/src/omega/runtime_support/runtime_support.js +0 -20
  215. package/src/omega/url_mentions/css_url_mentions.js +0 -63
  216. package/src/omega/url_mentions/html_url_mentions.js +0 -185
  217. package/src/omega/url_mentions/js_module_url_mentions.js +0 -91
  218. package/src/omega/url_mentions/parse_url_mentions.js +0 -37
  219. package/src/omega/url_mentions/worker_classic_url_mentions.js +0 -37
@@ -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
 
@@ -26,9 +26,13 @@ export const execute = async ({
26
26
  runtime,
27
27
  runtimeParams,
28
28
 
29
- plugins = [],
30
29
  scenario = "dev",
31
30
  sourcemaps = "inline",
31
+ plugins = [],
32
+ nodeEsmResolution,
33
+ fileSystemMagicResolution,
34
+ injectedGlobals,
35
+ transpilation,
32
36
 
33
37
  port,
34
38
  protocol,
@@ -53,6 +57,7 @@ export const execute = async ({
53
57
  })
54
58
  }
55
59
 
60
+ let resultTransformer = (result) => result
56
61
  runtimeParams = {
57
62
  rootDirectoryUrl,
58
63
  fileRelativeUrl,
@@ -65,9 +70,18 @@ export const execute = async ({
65
70
  logger,
66
71
  rootDirectoryUrl,
67
72
  urlGraph,
68
- plugins: [...plugins, ...getCorePlugins()],
69
73
  scenario,
70
74
  sourcemaps,
75
+ plugins: [
76
+ ...plugins,
77
+ ...getCorePlugins({
78
+ scenario,
79
+ nodeEsmResolution,
80
+ fileSystemMagicResolution,
81
+ injectedGlobals,
82
+ transpilation,
83
+ }),
84
+ ],
71
85
  })
72
86
  const serverLogger = createLogger({ logLevel: "warn" })
73
87
  const server = await startOmegaServer({
@@ -91,9 +105,13 @@ export const execute = async ({
91
105
  ...runtimeParams,
92
106
  server,
93
107
  }
108
+ resultTransformer = (result) => {
109
+ result.server = server
110
+ return result
111
+ }
94
112
  }
95
113
 
96
- const result = await run({
114
+ let result = await run({
97
115
  signal: executeOperation.signal,
98
116
  logger,
99
117
  allocatedMs,
@@ -105,6 +123,7 @@ export const execute = async ({
105
123
  runtime,
106
124
  runtimeParams,
107
125
  })
126
+ result = resultTransformer(result)
108
127
 
109
128
  try {
110
129
  if (result.status === "errored") {
@@ -1,7 +1,6 @@
1
1
  import cuid from "cuid"
2
2
  import { Abort, raceCallbacks } from "@jsenv/abort"
3
3
  import { resolveUrl, writeFile } from "@jsenv/filesystem"
4
- import { createDetailedMessage } from "@jsenv/logger"
5
4
 
6
5
  export const run = async ({
7
6
  signal = new AbortController().signal,
@@ -18,9 +17,7 @@ export const run = async ({
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,22 @@ 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,
137
120
  keepRunning,
138
121
  stopSignal,
139
- onStop: (stopInfo) => onStopRef.current(stopInfo),
140
- onError: (error) => onErrorRef.current(error),
141
122
  onConsole: (log) => onConsoleRef.current(log),
142
- onResult: cb,
143
123
  })
124
+ cb(result)
144
125
  } catch (e) {
145
- reject(e)
126
+ cb({
127
+ status: "errored",
128
+ error: e,
129
+ })
146
130
  }
147
131
  },
148
132
  },
@@ -153,31 +137,16 @@ export const run = async ({
153
137
  if (winner.name === "aborted") {
154
138
  runOperation.throwIfAborted()
155
139
  }
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
140
+ let result = winner.data
141
+ result = await resultTransformer(result)
142
+ return result
143
+ } catch (e) {
144
+ let result = {
145
+ status: "errored",
146
+ error: e,
172
147
  }
173
- const result = winner.data
174
- return await resultTransformer(result)
175
- } catch (error) {
176
- return await resultTransformer(
177
- createErroredExecutionResult({
178
- error,
179
- }),
180
- )
148
+ result = await resultTransformer(result)
149
+ return result
181
150
  } finally {
182
151
  await runOperation.end()
183
152
  }
@@ -200,9 +169,3 @@ const createTimedoutResult = () => {
200
169
  status: "timedout",
201
170
  }
202
171
  }
203
- const createErroredExecutionResult = ({ error }) => {
204
- return {
205
- status: "errored",
206
- error,
207
- }
208
- }
@@ -4,6 +4,7 @@ import {
4
4
  Abort,
5
5
  createCallbackListNotifiedOnce,
6
6
  raceProcessTeardownEvents,
7
+ raceCallbacks,
7
8
  } from "@jsenv/abort"
8
9
  import { moveUrl } from "@jsenv/filesystem"
9
10
 
@@ -42,10 +43,7 @@ export const createRuntimeFromPlaywright = ({
42
43
  stopAfterAllSignal,
43
44
  stopSignal,
44
45
  keepRunning,
45
- onStop,
46
- onError,
47
46
  onConsole,
48
- onResult,
49
47
 
50
48
  executablePath,
51
49
  headful = false,
@@ -74,11 +72,27 @@ export const createRuntimeFromPlaywright = ({
74
72
  }
75
73
  const { browser, browserContext } = await browserAndContextPromise
76
74
  const closeBrowser = async () => {
75
+ const disconnected = browser.isConnected()
76
+ ? new Promise((resolve) => {
77
+ const disconnectedCallback = () => {
78
+ browser.removeListener("disconnected", disconnectedCallback)
79
+ resolve()
80
+ }
81
+ browser.on("disconnected", disconnectedCallback)
82
+ })
83
+ : Promise.resolve()
84
+ // for some reason without this 100ms timeout
85
+ // browser.close() never resolves (playwright does not like something)
86
+ await new Promise((resolve) => setTimeout(resolve, 100))
77
87
  try {
78
- await stopBrowser(browser)
88
+ await browser.close()
79
89
  } catch (e) {
80
- onError(e)
90
+ if (isTargetClosedError(e)) {
91
+ return
92
+ }
93
+ throw e
81
94
  }
95
+ await disconnected
82
96
  }
83
97
  const page = await browserContext.newPage()
84
98
  const closePage = async () => {
@@ -88,44 +102,9 @@ export const createRuntimeFromPlaywright = ({
88
102
  if (isTargetClosedError(e)) {
89
103
  return
90
104
  }
91
- onError(e)
92
- }
93
- }
94
- // https://github.com/GoogleChrome/puppeteer/blob/v1.4.0/docs/api.md#event-disconnected
95
- if (isBrowserDedicatedToExecution) {
96
- browser.on("disconnected", async () => {
97
- await cleanup("browser disconnected")
98
- onStop({ reason: "browser disconnected" })
99
- })
100
- cleanupCallbackList.add(closePage)
101
- cleanupCallbackList.add(closeBrowser)
102
- } else {
103
- const disconnectedCallback = async () => {
104
- await cleanup("browser disconnected")
105
- onError(new Error("browser disconnected during execution"))
106
- }
107
- browser.on("disconnected", disconnectedCallback)
108
- page.on("close", () => {
109
- onStop({ reason: "page closed" })
110
- })
111
- cleanupCallbackList.add(closePage)
112
- const notifyPrevious = stopAfterAllSignal.notify
113
- stopAfterAllSignal.notify = async () => {
114
- await notifyPrevious()
115
- browser.removeListener("disconnected", disconnectedCallback)
116
- await closeBrowser()
105
+ throw e
117
106
  }
118
107
  }
119
- const stopTrackingToNotify = trackPageToNotify(page, {
120
- onError: (error) => {
121
- error = transformErrorHook(error)
122
- if (!ignoreErrorHook(error)) {
123
- onError(error)
124
- }
125
- },
126
- onConsole,
127
- })
128
- cleanupCallbackList.add(stopTrackingToNotify)
129
108
 
130
109
  let resultTransformer = (result) => result
131
110
  if (collectCoverage) {
@@ -169,30 +148,164 @@ export const createRuntimeFromPlaywright = ({
169
148
  resultTransformer = composeTransformer(
170
149
  resultTransformer,
171
150
  async (result) => {
172
- result.coverage = generateCoverageForPage(result.namespace)
151
+ const scriptExecutionResults = result.namespace
152
+ if (scriptExecutionResults) {
153
+ result.coverage = generateCoverageForPage(scriptExecutionResults)
154
+ }
173
155
  return result
174
156
  },
175
157
  )
176
158
  }
177
159
  } else {
178
160
  resultTransformer = composeTransformer(resultTransformer, (result) => {
179
- const { namespace: fileExecutionResultMap } = result
180
- Object.keys(fileExecutionResultMap).forEach((fileRelativeUrl) => {
181
- delete fileExecutionResultMap[fileRelativeUrl].coverage
182
- })
161
+ const scriptExecutionResults = result.namespace
162
+ if (scriptExecutionResults) {
163
+ Object.keys(scriptExecutionResults).forEach((fileRelativeUrl) => {
164
+ delete scriptExecutionResults[fileRelativeUrl].coverage
165
+ })
166
+ }
183
167
  return result
184
168
  })
185
169
  }
186
170
  const fileClientUrl = new URL(fileRelativeUrl, `${server.origin}/`).href
187
- await page.goto(fileClientUrl, { timeout: 0 })
188
- let result = await getResult({
189
- page,
190
- rootDirectoryUrl,
191
- server,
192
- transformErrorHook,
171
+
172
+ // https://github.com/GoogleChrome/puppeteer/blob/v1.4.0/docs/api.md#event-console
173
+ const removeConsoleListener = registerEvent({
174
+ object: page,
175
+ eventType: "console",
176
+ // https://github.com/microsoft/playwright/blob/master/docs/api.md#event-console
177
+ callback: async (consoleMessage) => {
178
+ onConsole({
179
+ type: consoleMessage.type(),
180
+ text: `${extractTextFromConsoleMessage(consoleMessage)}
181
+ `,
182
+ })
183
+ },
184
+ })
185
+ cleanupCallbackList.add(removeConsoleListener)
186
+ const winnerPromise = new Promise((resolve, reject) => {
187
+ raceCallbacks(
188
+ {
189
+ // https://github.com/GoogleChrome/puppeteer/blob/v1.4.0/docs/api.md#event-error
190
+ error: (cb) => {
191
+ return registerEvent({
192
+ object: page,
193
+ eventType: "error",
194
+ callback: (error) => {
195
+ if (ignoreErrorHook(error)) {
196
+ return
197
+ }
198
+ cb(transformErrorHook(error))
199
+ },
200
+ })
201
+ },
202
+ // https://github.com/GoogleChrome/puppeteer/blob/v1.4.0/docs/api.md#event-pageerror
203
+ pageerror: (cb) => {
204
+ return registerEvent({
205
+ object: page,
206
+ eventType: "pageerror",
207
+ callback: (error) => {
208
+ if (ignoreErrorHook(error)) {
209
+ return
210
+ }
211
+ cb(transformErrorHook(error))
212
+ },
213
+ })
214
+ },
215
+ closed: (cb) => {
216
+ // https://github.com/GoogleChrome/puppeteer/blob/v1.4.0/docs/api.md#event-disconnected
217
+ if (isBrowserDedicatedToExecution) {
218
+ browser.on("disconnected", async () => {
219
+ cb({ reason: "browser disconnected" })
220
+ })
221
+ cleanupCallbackList.add(closePage)
222
+ cleanupCallbackList.add(closeBrowser)
223
+ } else {
224
+ const disconnectedCallback = async () => {
225
+ throw new Error("browser disconnected during execution")
226
+ }
227
+ browser.on("disconnected", disconnectedCallback)
228
+ page.on("close", () => {
229
+ cb({ reason: "page closed" })
230
+ })
231
+ cleanupCallbackList.add(closePage)
232
+ const notifyPrevious = stopAfterAllSignal.notify
233
+ stopAfterAllSignal.notify = async () => {
234
+ await notifyPrevious()
235
+ browser.removeListener("disconnected", disconnectedCallback)
236
+ await closeBrowser()
237
+ }
238
+ }
239
+ },
240
+ response: async (cb) => {
241
+ try {
242
+ await page.goto(fileClientUrl, { timeout: 0 })
243
+ const result = await page.evaluate(
244
+ /* eslint-disable no-undef */
245
+ /* istanbul ignore next */
246
+ () => {
247
+ return window.__html_supervisor__.getScriptExecutionResults()
248
+ },
249
+ /* eslint-enable no-undef */
250
+ )
251
+ const { status, scriptExecutionResults } = result
252
+ if (status === "errored") {
253
+ const { exceptionSource } = result
254
+ const error = evalException(exceptionSource, {
255
+ rootDirectoryUrl,
256
+ server,
257
+ transformErrorHook,
258
+ })
259
+ cb({
260
+ status: "errored",
261
+ error,
262
+ namespace: scriptExecutionResults,
263
+ })
264
+ } else {
265
+ cb({
266
+ status: "completed",
267
+ namespace: scriptExecutionResults,
268
+ })
269
+ }
270
+ } catch (e) {
271
+ reject(e)
272
+ }
273
+ },
274
+ },
275
+ resolve,
276
+ )
193
277
  })
194
- result = await resultTransformer(result)
195
- onResult(result)
278
+
279
+ const getResult = async () => {
280
+ const winner = await winnerPromise
281
+ if (winner.name === "error" || winner.name === "pageerror") {
282
+ const error = winner.data
283
+ return {
284
+ status: "errored",
285
+ error,
286
+ }
287
+ }
288
+ if (winner.name === "closed") {
289
+ return {
290
+ status: "errored",
291
+ error: isBrowserDedicatedToExecution
292
+ ? new Error(`browser disconnected during execution`)
293
+ : new Error(`page closed during execution`),
294
+ }
295
+ }
296
+ return winner.data
297
+ }
298
+ let result
299
+
300
+ try {
301
+ result = await getResult()
302
+ result = await resultTransformer(result)
303
+ } catch (e) {
304
+ result = {
305
+ status: "errored",
306
+ error: e,
307
+ }
308
+ }
196
309
  if (keepRunning) {
197
310
  stopSignal.notify = cleanup
198
311
  } else {
@@ -214,40 +327,6 @@ export const createRuntimeFromPlaywright = ({
214
327
  return runtime
215
328
  }
216
329
 
217
- const getResult = async ({
218
- page,
219
- rootDirectoryUrl,
220
- server,
221
- transformErrorHook,
222
- }) => {
223
- const result = await page.evaluate(
224
- /* eslint-disable no-undef */
225
- /* istanbul ignore next */
226
- () => {
227
- return window.__html_supervisor__.getScriptExecutionResults()
228
- },
229
- /* eslint-enable no-undef */
230
- )
231
- const { status, scriptExecutionResults } = result
232
- if (status === "errored") {
233
- const { exceptionSource } = result
234
- const error = evalException(exceptionSource, {
235
- rootDirectoryUrl,
236
- server,
237
- transformErrorHook,
238
- })
239
- return {
240
- status: "errored",
241
- error,
242
- namespace: scriptExecutionResults,
243
- }
244
- }
245
- return {
246
- status: "completed",
247
- namespace: scriptExecutionResults,
248
- }
249
- }
250
-
251
330
  const generateCoverageForPage = (scriptExecutionResults) => {
252
331
  let istanbulCoverageComposed = null
253
332
  Object.keys(scriptExecutionResults).forEach((fileRelativeUrl) => {
@@ -262,31 +341,6 @@ const generateCoverageForPage = (scriptExecutionResults) => {
262
341
  return istanbulCoverageComposed
263
342
  }
264
343
 
265
- const stopBrowser = async (browser) => {
266
- const disconnected = browser.isConnected()
267
- ? new Promise((resolve) => {
268
- const disconnectedCallback = () => {
269
- browser.removeListener("disconnected", disconnectedCallback)
270
- resolve()
271
- }
272
- browser.on("disconnected", disconnectedCallback)
273
- })
274
- : Promise.resolve()
275
-
276
- // for some reason without this 100ms timeout
277
- // browser.close() never resolves (playwright does not like something)
278
- await new Promise((resolve) => setTimeout(resolve, 100))
279
- try {
280
- await browser.close()
281
- } catch (e) {
282
- if (isTargetClosedError(e)) {
283
- return
284
- }
285
- throw e
286
- }
287
- await disconnected
288
- }
289
-
290
344
  const launchBrowserUsingPlaywright = async ({
291
345
  signal,
292
346
  browserName,
@@ -366,39 +420,6 @@ const isTargetClosedError = (error) => {
366
420
  return false
367
421
  }
368
422
 
369
- const trackPageToNotify = (page, { onError, onConsole }) => {
370
- // https://github.com/GoogleChrome/puppeteer/blob/v1.4.0/docs/api.md#event-error
371
- const removeErrorListener = registerEvent({
372
- object: page,
373
- eventType: "error",
374
- callback: onError,
375
- })
376
- // https://github.com/GoogleChrome/puppeteer/blob/v1.4.0/docs/api.md#event-pageerror
377
- const removePageErrorListener = registerEvent({
378
- object: page,
379
- eventType: "pageerror",
380
- callback: onError,
381
- })
382
- // https://github.com/GoogleChrome/puppeteer/blob/v1.4.0/docs/api.md#event-console
383
- const removeConsoleListener = registerEvent({
384
- object: page,
385
- eventType: "console",
386
- // https://github.com/microsoft/playwright/blob/master/docs/api.md#event-console
387
- callback: async (consoleMessage) => {
388
- onConsole({
389
- type: consoleMessage.type(),
390
- text: `${extractTextFromConsoleMessage(consoleMessage)}
391
- `,
392
- })
393
- },
394
- })
395
- return () => {
396
- removeErrorListener()
397
- removePageErrorListener()
398
- removeConsoleListener()
399
- }
400
- }
401
-
402
423
  const composeTransformer = (previousTransformer, transformer) => {
403
424
  return async (value) => {
404
425
  const transformedValue = await previousTransformer(value)