@jsenv/core 25.6.2 → 27.0.0-alpha.0

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 (476) hide show
  1. package/main.js +18 -20
  2. package/package.json +38 -73
  3. package/readme.md +32 -44
  4. package/src/build/build.js +737 -0
  5. package/src/build/build_urls_generator.js +64 -0
  6. package/src/build/inject_version_mappings.js +62 -0
  7. package/src/build/plugins/bundle_js_module/jsenv_plugin_bundle_js_module.js +225 -0
  8. package/src/build/plugins/minify_html/jsenv_plugin_minify_html.js +30 -0
  9. package/src/build/plugins/minify_js/jsenv_plugin_minify_js.js +47 -0
  10. package/src/dev/plugins/autoreload/babel_plugin_metadata_import_meta_hot.js +98 -0
  11. package/src/dev/plugins/autoreload/client/autoreload_preference.js +11 -0
  12. package/src/dev/plugins/autoreload/client/event_source_client.js +186 -0
  13. package/src/{internal/dev_server/event_source_client → dev/plugins/autoreload/client}/event_source_connection.js +21 -25
  14. package/src/dev/plugins/autoreload/client/import_meta_hot.js +80 -0
  15. package/src/dev/plugins/autoreload/client/reload.js +101 -0
  16. package/src/dev/plugins/autoreload/client/url_helpers.js +20 -0
  17. package/src/dev/plugins/autoreload/html_hot_dependencies.js +156 -0
  18. package/src/dev/plugins/autoreload/jsenv_plugin_autoreload.js +374 -0
  19. package/src/dev/plugins/autoreload/sse_service.js +149 -0
  20. package/src/dev/plugins/explorer/client/explorer.html +607 -0
  21. package/src/{internal → dev/plugins/explorer/client}/jsenv.png +0 -0
  22. package/src/dev/plugins/explorer/jsenv_plugin_explorer.js +74 -0
  23. package/src/{internal/dev_server/toolbar/animation/toolbar.animation.js → dev/plugins/toolbar/client/animation/toolbar_animation.js} +0 -0
  24. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/eventsource/eventsource.css +2 -2
  25. package/src/dev/plugins/toolbar/client/eventsource/toolbar_eventsource.js +57 -0
  26. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/execution/execution.css +0 -0
  27. package/src/dev/plugins/toolbar/client/execution/toolbar_execution.js +88 -0
  28. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/focus/focus.css +0 -0
  29. package/src/{internal/dev_server/toolbar/focus/toolbar.focus.js → dev/plugins/toolbar/client/focus/toolbar_focus.js} +0 -0
  30. package/src/{internal/dev_server/toolbar/jsenv-logo.svg → dev/plugins/toolbar/client/jsenv_logo.svg} +1 -1
  31. package/src/{internal/dev_server/toolbar/notification/toolbar.notification.js → dev/plugins/toolbar/client/notification/toolbar_notification.js} +0 -0
  32. package/src/{internal/dev_server/toolbar/responsive/overflow-menu.css → dev/plugins/toolbar/client/responsive/overflow_menu.css} +0 -0
  33. package/src/{internal/dev_server/toolbar/responsive/toolbar.responsive.js → dev/plugins/toolbar/client/responsive/toolbar_responsive.js} +0 -0
  34. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/settings/settings.css +0 -0
  35. package/src/{internal/dev_server/toolbar/settings/toolbar.settings.js → dev/plugins/toolbar/client/settings/toolbar_settings.js} +1 -0
  36. package/src/{internal/dev_server/toolbar/theme/jsenv-theme.css → dev/plugins/toolbar/client/theme/jsenv_theme.css} +1 -15
  37. package/src/{internal/dev_server/toolbar/theme/light-theme.css → dev/plugins/toolbar/client/theme/light_theme.css} +0 -17
  38. package/src/{internal/dev_server/toolbar/theme/toolbar.theme.js → dev/plugins/toolbar/client/theme/toolbar_theme.js} +0 -0
  39. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/toolbar.html +42 -201
  40. package/src/{internal/dev_server/toolbar/toolbar.injector.js → dev/plugins/toolbar/client/toolbar_injector.js} +10 -29
  41. package/src/{internal/dev_server/toolbar/toolbar.main.css → dev/plugins/toolbar/client/toolbar_main.css} +2 -26
  42. package/src/{internal/dev_server/toolbar/toolbar.main.js → dev/plugins/toolbar/client/toolbar_main.js} +18 -64
  43. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/tooltip/tooltip.css +1 -1
  44. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/tooltip/tooltip.js +0 -0
  45. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/util/animation.js +0 -0
  46. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/util/dom.js +0 -0
  47. package/src/{internal/browser_utils/fetchUsingXHR.js → dev/plugins/toolbar/client/util/fetch_using_xhr.js} +0 -2
  48. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/util/fetching.js +2 -4
  49. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/util/iframe_to_parent_href.js +0 -0
  50. package/src/{internal/dev_server/toolbar/util/jsenvLogger.js → dev/plugins/toolbar/client/util/jsenv_logger.js} +0 -0
  51. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/util/preferences.js +0 -0
  52. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/util/responsive.js +0 -0
  53. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/util/util.js +0 -0
  54. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/variant/variant.js +0 -0
  55. package/src/dev/plugins/toolbar/jsenv_plugin_toolbar.js +62 -0
  56. package/src/dev/start_dev_server.js +105 -0
  57. package/src/execute/execute.js +132 -0
  58. package/src/execute/run.js +208 -0
  59. package/src/execute/runtimes/browsers/chromium.js +8 -0
  60. package/src/execute/runtimes/browsers/firefox.js +7 -0
  61. package/src/execute/runtimes/browsers/from_playwright.js +464 -0
  62. package/src/execute/runtimes/browsers/webkit.js +24 -0
  63. package/src/{internal/node_launcher/createChildProcessOptions.js → execute/runtimes/node/child_exec_options.js} +25 -36
  64. package/src/{internal/node_runtime/nodeControllableFile.mjs → execute/runtimes/node/controllable_file.mjs} +1 -18
  65. package/src/{internal/node_launcher/createControllableNodeProcess.js → execute/runtimes/node/controlled_process.js} +128 -150
  66. package/src/execute/runtimes/node/exec_options.js +44 -0
  67. package/src/{internal/node_launcher → execute/runtimes/node}/kill_process_tree.js +4 -2
  68. package/src/execute/runtimes/node/node_process.js +92 -0
  69. package/src/execute/runtimes/node/node_worker_thread.js +28 -0
  70. package/src/omega/core_plugins/babel/babel_helper/babel_helper_directory.js +29 -0
  71. package/src/{internal/compiling/js-compilation-service → omega/core_plugins/babel/babel_helper}/babel_plugin_babel_helpers_as_jsenv_imports.js +16 -19
  72. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/.eslintrc.cjs +0 -0
  73. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/AsyncGenerator/AsyncGenerator.js +0 -0
  74. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/AwaitValue/AwaitValue.js +0 -0
  75. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/applyDecoratorDescriptor/applyDecoratorDescriptor.js +0 -0
  76. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/arrayLikeToArray/arrayLikeToArray.js +0 -0
  77. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/arrayWithHoles/arrayWithHoles.js +0 -0
  78. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/arrayWithoutHoles/arrayWithoutHoles.js +0 -0
  79. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/assertThisInitialized/assertThisInitialized.js +0 -0
  80. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/asyncGeneratorDelegate/asyncGeneratorDelegate.js +0 -0
  81. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/asyncIterator/asyncIterator.js +0 -0
  82. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/asyncToGenerator/asyncToGenerator.js +0 -0
  83. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/awaitAsyncGenerator/awaitAsyncGenerator.js +0 -0
  84. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/classApplyDescriptorDestructureSet/classApplyDescriptorDestructureSet.js +0 -0
  85. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/classApplyDescriptorGet/classApplyDescriptorGet.js +0 -0
  86. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/classApplyDescriptorSet/classApplyDescriptorSet.js +0 -0
  87. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/classCallCheck/classCallCheck.js +0 -0
  88. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/classCheckPrivateStaticAccess/classCheckPrivateStaticAccess.js +0 -0
  89. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/classCheckPrivateStaticFieldDescriptor/classCheckPrivateStaticFieldDescriptor.js +0 -0
  90. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/classExtractFieldDescriptor/classExtractFieldDescriptor.js +0 -0
  91. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/classNameTDZError/classNameTDZError.js +0 -0
  92. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/classPrivateFieldDestructureSet/classPrivateFieldDestructureSet.js +0 -0
  93. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/classPrivateFieldGet/classPrivateFieldGet.js +0 -0
  94. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/classPrivateFieldLooseBase/classPrivateFieldLooseBase.js +0 -0
  95. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/classPrivateFieldLooseKey/classPrivateFieldLooseKey.js +0 -0
  96. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/classPrivateFieldSet/classPrivateFieldSet.js +0 -0
  97. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/classPrivateMethodGet/classPrivateMethodGet.js +0 -0
  98. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/classPrivateMethodSet/classPrivateMethodSet.js +0 -0
  99. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/classStaticPrivateFieldSpecGet/classStaticPrivateFieldSpecGet.js +0 -0
  100. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/classStaticPrivateFieldSpecSet/classStaticPrivateFieldSpecSet.js +0 -0
  101. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/classStaticPrivateMethodGet/classStaticPrivateMethodGet.js +0 -0
  102. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/classStaticPrivateMethodSet/classStaticPrivateMethodSet.js +0 -0
  103. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/construct/construct.js +0 -0
  104. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/createClass/createClass.js +0 -0
  105. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/createForOfIteratorHelper/createForOfIteratorHelper.js +0 -0
  106. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/createForOfIteratorHelperLoose/createForOfIteratorHelperLoose.js +0 -0
  107. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/createRawReactElement/createRawReactElement.js +0 -0
  108. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/createSuper/createSuper.js +0 -0
  109. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/decorate/decorate.js +0 -0
  110. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/defaults/defaults.js +0 -0
  111. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/defineEnumerableProperties/defineEnumerableProperties.js +0 -0
  112. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/defineProperty/defineProperty.js +0 -0
  113. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/extends/extends.js +0 -0
  114. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/get/get.js +0 -0
  115. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/getPrototypeOf/getPrototypeOf.js +0 -0
  116. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/inherits/inherits.js +0 -0
  117. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/inheritsLoose/inheritsLoose.js +0 -0
  118. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/initializerDefineProperty/initializerDefineProperty.js +0 -0
  119. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/initializerWarningHelper/initializerWarningHelper.js +0 -0
  120. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/instanceof/instanceof.js +0 -0
  121. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/interopRequireDefault/interopRequireDefault.js +0 -0
  122. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/interopRequireWildcard/interopRequireWildcard.js +0 -0
  123. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/isNativeFunction/isNativeFunction.js +0 -0
  124. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/isNativeReflectConstruct/isNativeReflectConstruct.js +0 -0
  125. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/iterableToArray/iterableToArray.js +0 -0
  126. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/iterableToArrayLimit/iterableToArrayLimit.js +0 -0
  127. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/iterableToArrayLimitLoose/iterableToArrayLimitLoose.js +0 -0
  128. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/jsx/jsx.js +0 -0
  129. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/maybeArrayLike/maybeArrayLike.js +0 -0
  130. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/newArrowCheck/newArrowCheck.js +0 -0
  131. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/nonIterableRest/nonIterableRest.js +0 -0
  132. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/nonIterableSpread/nonIterableSpread.js +0 -0
  133. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/objectDestructuringEmpty/objectDestructuringEmpty.js +0 -0
  134. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/objectSpread/objectSpread.js +0 -0
  135. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/objectSpread2/objectSpread2.js +0 -0
  136. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/objectWithoutProperties/objectWithoutProperties.js +0 -0
  137. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/objectWithoutPropertiesLoose/objectWithoutPropertiesLoose.js +0 -0
  138. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/possibleConstructorReturn/possibleConstructorReturn.js +0 -0
  139. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/readOnlyError/readOnlyError.js +0 -0
  140. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/readme.md +0 -0
  141. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/set/set.js +0 -0
  142. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/setPrototypeOf/setPrototypeOf.js +0 -0
  143. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/skipFirstGeneratorNext/skipFirstGeneratorNext.js +0 -0
  144. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/slicedToArray/slicedToArray.js +0 -0
  145. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/slicedToArrayLoose/slicedToArrayLoose.js +0 -0
  146. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/superPropBase/superPropBase.js +0 -0
  147. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/taggedTemplateLiteral/taggedTemplateLiteral.js +0 -0
  148. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/taggedTemplateLiteralLoose/taggedTemplateLiteralLoose.js +0 -0
  149. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/tdz/tdz.js +0 -0
  150. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/temporalRef/temporalRef.js +0 -0
  151. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/temporalUndefined/temporalUndefined.js +0 -0
  152. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/toArray/toArray.js +0 -0
  153. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/toConsumableArray/toConsumableArray.js +0 -0
  154. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/toPrimitive/toPrimitive.js +0 -0
  155. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/toPropertyKey/toPropertyKey.js +0 -0
  156. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/typeof/typeof.js +0 -0
  157. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/unsupportedIterableToArray/unsupportedIterableToArray.js +0 -0
  158. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/wrapAsyncGenerator/wrapAsyncGenerator.js +0 -0
  159. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/wrapNativeSuper/wrapNativeSuper.js +0 -0
  160. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/wrapRegExp/wrapRegExp.js +0 -0
  161. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/writeOnlyError/writeOnlyError.js +0 -0
  162. package/src/omega/core_plugins/babel/global_this/babel_plugin_global_this_as_jsenv_import.js +35 -0
  163. package/{helpers/global-this/global-this.js → src/omega/core_plugins/babel/global_this/client/global_this.js} +0 -0
  164. package/src/omega/core_plugins/babel/helpers/babel_plugin_structure.js +187 -0
  165. package/src/{internal/features → omega/core_plugins/babel/helpers}/babel_plugins_compatibility.js +1 -24
  166. package/src/omega/core_plugins/babel/jsenv_plugin_babel.js +97 -0
  167. package/src/omega/core_plugins/babel/new_stylesheet/babel_plugin_new_stylesheet_as_jsenv_import.js +117 -0
  168. package/src/omega/core_plugins/babel/new_stylesheet/client/.eslintrc.cjs +24 -0
  169. package/{helpers/new_stylesheet → src/omega/core_plugins/babel/new_stylesheet/client}/new_stylesheet.js +0 -0
  170. package/src/omega/core_plugins/babel/regenerator_runtime/babel_plugin_regenerator_runtime_as_jsenv_import.js +34 -0
  171. package/{helpers/regenerator-runtime/regenerator-runtime.js → src/omega/core_plugins/babel/regenerator_runtime/client/regenerator_runtime.js} +0 -0
  172. package/src/omega/core_plugins/commonjs_globals/jsenv_plugin_commonjs_globals.js +169 -0
  173. package/src/omega/core_plugins/file_urls/jsenv_plugin_file_urls.js +67 -0
  174. package/src/omega/core_plugins/filesystem_magic/jsenv_plugin_filesystem_magic.js +58 -0
  175. package/src/{internal/browser_runtime/displayErrorInDocument.js → omega/core_plugins/html_supervisor/client/error_in_document.js} +10 -18
  176. package/src/{internal/browser_runtime/displayErrorNotification.js → omega/core_plugins/html_supervisor/client/error_in_notification.js} +0 -1
  177. package/src/omega/core_plugins/html_supervisor/client/html_supervisor_installer.js +168 -0
  178. package/src/omega/core_plugins/html_supervisor/client/html_supervisor_setup.js +77 -0
  179. package/src/{internal → omega/core_plugins/html_supervisor/client}/perf_browser.js +0 -2
  180. package/src/{internal/unevalException.js → omega/core_plugins/html_supervisor/client/uneval_exception.js} +1 -1
  181. package/src/omega/core_plugins/html_supervisor/jsenv_plugin_html_supervisor.js +233 -0
  182. package/src/omega/core_plugins/import_assertions/helpers/babel_plugin_metadata_import_assertions.js +98 -0
  183. package/src/{internal/building → omega/core_plugins/import_assertions/helpers}/json_module.js +3 -2
  184. package/src/omega/core_plugins/import_assertions/helpers/text_module.js +6 -0
  185. package/src/omega/core_plugins/import_assertions/jsenv_plugin_import_assertions.js +211 -0
  186. package/src/omega/core_plugins/import_meta_scenarios/jsenv_plugin_import_meta_scenarios.js +80 -0
  187. package/src/omega/core_plugins/importmap/jsenv_plugin_importmap.js +212 -0
  188. package/src/omega/core_plugins/inline/client/inline_content.js +6 -0
  189. package/src/omega/core_plugins/inline/jsenv_plugin_data_urls.js +70 -0
  190. package/src/omega/core_plugins/inline/jsenv_plugin_inline.js +13 -0
  191. package/src/omega/core_plugins/inline/jsenv_plugin_inline_query_param.js +42 -0
  192. package/src/omega/core_plugins/inline/jsenv_plugin_js_and_css_inside_html.js +142 -0
  193. package/src/omega/core_plugins/inline/jsenv_plugin_new_inline_content.js +210 -0
  194. package/src/omega/core_plugins/leading_slash/jsenv_plugin_leading_slash.js +12 -0
  195. package/src/omega/core_plugins/node_esm_resolution/jsenv_plugin_node_esm_resolution.js +77 -0
  196. package/src/omega/core_plugins/url_resolution/jsenv_plugin_url_resolution.js +28 -0
  197. package/src/omega/core_plugins/url_version/jsenv_plugin_url_version.js +50 -0
  198. package/src/omega/core_plugins.js +39 -0
  199. package/src/omega/errors.js +168 -0
  200. package/src/omega/file_url_converter.js +63 -0
  201. package/src/omega/kitchen.js +777 -0
  202. package/src/omega/omega_server.js +129 -0
  203. package/src/omega/plugin_controller.js +240 -0
  204. package/src/omega/runtime_support/default_runtime_support.js +13 -0
  205. package/src/omega/runtime_support/features_compatibility.js +91 -0
  206. package/src/omega/runtime_support/runtime_support.js +20 -0
  207. package/src/omega/server/file_service.js +155 -0
  208. package/src/omega/server/user_agent.js +22 -0
  209. package/src/omega/url_graph/url_graph_load.js +68 -0
  210. package/src/omega/url_graph/url_graph_report.js +151 -0
  211. package/src/omega/url_graph/url_graph_sort.js +29 -0
  212. package/src/omega/url_graph/url_info_transformations.js +161 -0
  213. package/src/omega/url_graph.js +132 -0
  214. package/src/omega/url_mentions/css_url_mentions.js +63 -0
  215. package/src/omega/url_mentions/html_url_mentions.js +185 -0
  216. package/src/omega/url_mentions/js_module_url_mentions.js +91 -0
  217. package/src/omega/url_mentions/parse_url_mentions.js +37 -0
  218. package/src/omega/url_mentions/worker_classic_url_mentions.js +37 -0
  219. package/src/{internal/executing/executePlan.js → test/execute_plan.js} +159 -213
  220. package/src/{executeTestPlan.js → test/execute_test_plan.js} +36 -84
  221. package/src/{internal/executing → test}/execution_colors.js +0 -0
  222. package/src/{internal/executing/generateFileExecutionSteps.js → test/execution_steps.js} +25 -4
  223. package/src/{internal/executing → test}/gc.js +0 -0
  224. package/src/test/logs_file_execution.js +223 -0
  225. package/dist/browser_runtime/asset-manifest.json +0 -4
  226. package/dist/browser_runtime/browser_runtime_c81cd9af.js +0 -5300
  227. package/dist/browser_runtime/browser_runtime_c81cd9af.js.map +0 -1089
  228. package/dist/build_manifest.js +0 -12
  229. package/dist/compile_proxy/asset-manifest.json +0 -4
  230. package/dist/compile_proxy/compile_proxy.html__inline__20_c05fdc30.js.map +0 -343
  231. package/dist/compile_proxy/compile_proxy_93ec4247.html +0 -2247
  232. package/dist/event_source_client/asset-manifest.json +0 -4
  233. package/dist/event_source_client/event_source_client_69f48287.js +0 -354
  234. package/dist/event_source_client/event_source_client_69f48287.js.map +0 -128
  235. package/dist/redirector/asset-manifest.json +0 -4
  236. package/dist/redirector/redirector.html__inline__12_20421b23.js.map +0 -349
  237. package/dist/redirector/redirector_ddc79416.html +0 -2292
  238. package/dist/toolbar/asset-manifest.json +0 -13
  239. package/dist/toolbar/assets/compilation.css_7421bd55.map +0 -12
  240. package/dist/toolbar/assets/eventsource.css_c0c71e7b.map +0 -12
  241. package/dist/toolbar/assets/execution.css_f3377c10.map +0 -12
  242. package/dist/toolbar/assets/focus.css_896f3e45.map +0 -12
  243. package/dist/toolbar/assets/light-theme.css_72a60fa3.map +0 -12
  244. package/dist/toolbar/assets/overflow-menu.css_2859d519.map +0 -12
  245. package/dist/toolbar/assets/settings.css_942b5a9e.map +0 -12
  246. package/dist/toolbar/assets/toolbar.main.css_b7d8bec1.map +0 -28
  247. package/dist/toolbar/assets/tooltip.css_a94a8bdd.map +0 -12
  248. package/dist/toolbar/toolbar.main_7d7783d3.js.map +0 -776
  249. package/dist/toolbar/toolbar_d6045dd0.html +0 -4978
  250. package/dist/toolbar_injector/asset-manifest.json +0 -5
  251. package/dist/toolbar_injector/assets/jsenv-logo_188b9ca6.svg +0 -95
  252. package/dist/toolbar_injector/toolbar_injector_c8c214dd.js +0 -977
  253. package/dist/toolbar_injector/toolbar_injector_c8c214dd.js.map +0 -294
  254. package/helpers/import-meta/import-meta-url-commonjs.js +0 -9
  255. package/helpers/import-meta/import-meta-url-global.js +0 -54
  256. package/src/buildProject.js +0 -336
  257. package/src/commonJsToJavaScriptModule.js +0 -180
  258. package/src/dev_server.js +0 -295
  259. package/src/execute.js +0 -184
  260. package/src/importUsingChildProcess.js +0 -68
  261. package/src/internal/argUtils.js +0 -12
  262. package/src/internal/babel_plugin_replace_expressions.js +0 -101
  263. package/src/internal/browser_detection/browser_detection.js +0 -68
  264. package/src/internal/browser_detection/detectAndroid.js +0 -13
  265. package/src/internal/browser_detection/detectChrome.js +0 -28
  266. package/src/internal/browser_detection/detectEdge.js +0 -13
  267. package/src/internal/browser_detection/detectElectron.js +0 -1
  268. package/src/internal/browser_detection/detectFirefox.js +0 -17
  269. package/src/internal/browser_detection/detectIOS.js +0 -19
  270. package/src/internal/browser_detection/detectInternetExplorer.js +0 -14
  271. package/src/internal/browser_detection/detectOpera.js +0 -27
  272. package/src/internal/browser_detection/detectSafari.js +0 -13
  273. package/src/internal/browser_detection/user_agent_data.js +0 -26
  274. package/src/internal/browser_detection/util.js +0 -13
  275. package/src/internal/browser_launcher/browser_runtime_profile.js +0 -81
  276. package/src/internal/browser_launcher/executeHtmlFile.js +0 -354
  277. package/src/internal/browser_launcher/from_playwright.js +0 -320
  278. package/src/internal/browser_launcher/trackPageToNotify.js +0 -77
  279. package/src/internal/browser_runtime/browser_runtime.js +0 -224
  280. package/src/internal/browser_runtime/browser_system.js +0 -218
  281. package/src/internal/browser_runtime/createBrowserRuntime.js +0 -146
  282. package/src/internal/browser_runtime/evalSource.js +0 -11
  283. package/src/internal/browser_runtime/makeNamespaceTransferable.js +0 -90
  284. package/src/internal/browser_utils/fetchAndEvalUsingFetch.js +0 -29
  285. package/src/internal/browser_utils/fetchAndEvalUsingScript.js +0 -49
  286. package/src/internal/browser_utils/fetchJson.js +0 -7
  287. package/src/internal/browser_utils/fetch_browser.js +0 -34
  288. package/src/internal/building/buildToCompilationResult.js +0 -183
  289. package/src/internal/building/buildUsingRollup.js +0 -359
  290. package/src/internal/building/build_logs.js +0 -133
  291. package/src/internal/building/build_stats.js +0 -100
  292. package/src/internal/building/build_url_generator.js +0 -153
  293. package/src/internal/building/css/applyPostCss.js +0 -55
  294. package/src/internal/building/css/moveCssUrls.js +0 -44
  295. package/src/internal/building/css/parseCssRessource.js +0 -259
  296. package/src/internal/building/css/parseCssUrls.js +0 -38
  297. package/src/internal/building/css/postcss_plugin_url_visitor.js +0 -244
  298. package/src/internal/building/css/replaceCssUrls.js +0 -67
  299. package/src/internal/building/css_module.js +0 -43
  300. package/src/internal/building/es_to_system.js +0 -34
  301. package/src/internal/building/html/htmlScan.js +0 -70
  302. package/src/internal/building/html/minifyHtml.js +0 -7
  303. package/src/internal/building/html/parseHtmlRessource.js +0 -814
  304. package/src/internal/building/import_references.js +0 -80
  305. package/src/internal/building/importmap/parseImportmapRessource.js +0 -28
  306. package/src/internal/building/js/babel_plugin_inline_worker_imports.js +0 -96
  307. package/src/internal/building/js/minifyJs.js +0 -33
  308. package/src/internal/building/js/parseJsRessource.js +0 -121
  309. package/src/internal/building/js/transform_worker.js +0 -55
  310. package/src/internal/building/json/parseJsonRessource.js +0 -11
  311. package/src/internal/building/parseRessource.js +0 -207
  312. package/src/internal/building/parsing.utils.js +0 -29
  313. package/src/internal/building/resolve_import_url_helper.js +0 -12
  314. package/src/internal/building/ressource_builder.js +0 -1097
  315. package/src/internal/building/ressource_builder_util.js +0 -194
  316. package/src/internal/building/rollup_plugin_jsenv.js +0 -1963
  317. package/src/internal/building/sortObjectByPathnames.js +0 -10
  318. package/src/internal/building/sourcemap_loader.js +0 -73
  319. package/src/internal/building/svg/parseSvgRessource.js +0 -111
  320. package/src/internal/building/url_fetcher.js +0 -85
  321. package/src/internal/building/url_loader.js +0 -127
  322. package/src/internal/building/url_trace.js +0 -229
  323. package/src/internal/building/url_versioning.js +0 -65
  324. package/src/internal/building/webmanifest/parseWebmanifestRessource.js +0 -48
  325. package/src/internal/compiling/babel_parse_error.js +0 -9
  326. package/src/internal/compiling/babel_plugin_global_this_as_jsenv_import.js +0 -34
  327. package/src/internal/compiling/babel_plugin_import_assertions.js +0 -120
  328. package/src/internal/compiling/babel_plugin_import_metadata.js +0 -18
  329. package/src/internal/compiling/babel_plugin_import_visitor.js +0 -84
  330. package/src/internal/compiling/babel_plugin_new_stylesheet_as_jsenv_import.js +0 -113
  331. package/src/internal/compiling/babel_plugin_proxy_external_imports.js +0 -31
  332. package/src/internal/compiling/babel_plugin_transform_import_meta.js +0 -134
  333. package/src/internal/compiling/babel_plugins.js +0 -37
  334. package/src/internal/compiling/compileFile.js +0 -271
  335. package/src/internal/compiling/compileHtml.js +0 -544
  336. package/src/internal/compiling/createCompiledFileService.js +0 -263
  337. package/src/internal/compiling/html_source_file_service.js +0 -453
  338. package/src/internal/compiling/js-compilation-service/ansiToHTML.js +0 -9
  339. package/src/internal/compiling/js-compilation-service/babelHelper.js +0 -145
  340. package/src/internal/compiling/js-compilation-service/babel_plugin_regenerator_runtime_as_jsenv_import.js +0 -48
  341. package/src/internal/compiling/js-compilation-service/babel_plugin_systemjs_prepend.js +0 -23
  342. package/src/internal/compiling/js-compilation-service/generateBabelHelper.js +0 -36
  343. package/src/internal/compiling/js-compilation-service/transformJs.js +0 -196
  344. package/src/internal/compiling/jsenvCompilerForHtml.js +0 -674
  345. package/src/internal/compiling/jsenvCompilerForImportmap.js +0 -28
  346. package/src/internal/compiling/jsenvCompilerForJavaScript.js +0 -61
  347. package/src/internal/compiling/jsenv_directory/comparison_utils.js +0 -27
  348. package/src/internal/compiling/jsenv_directory/compile_asset.js +0 -24
  349. package/src/internal/compiling/jsenv_directory/compile_context.js +0 -60
  350. package/src/internal/compiling/jsenv_directory/compile_profile.js +0 -217
  351. package/src/internal/compiling/jsenv_directory/file_lock_registry.js +0 -24
  352. package/src/internal/compiling/jsenv_directory/file_lock_registry.test.js +0 -47
  353. package/src/internal/compiling/jsenv_directory/fs-optimized-for-cache.js +0 -57
  354. package/src/internal/compiling/jsenv_directory/getOrGenerateCompiledFile.js +0 -269
  355. package/src/internal/compiling/jsenv_directory/jsenv_directory.js +0 -174
  356. package/src/internal/compiling/jsenv_directory/updateMeta.js +0 -150
  357. package/src/internal/compiling/jsenv_directory/validateCache.js +0 -264
  358. package/src/internal/compiling/load_babel_plugin_map_from_file.js +0 -49
  359. package/src/internal/compiling/rollup_plugin_commonjs_named_exports.js +0 -187
  360. package/src/internal/compiling/sse_service/sse_service.js +0 -369
  361. package/src/internal/compiling/startCompileServer.js +0 -518
  362. package/src/internal/compiling/transformResultToCompilationResult.js +0 -242
  363. package/src/internal/dataUrl.utils.js +0 -55
  364. package/src/internal/dev_server/event_source_client/event_source_client.js +0 -63
  365. package/src/internal/dev_server/event_source_client/file_changes.js +0 -82
  366. package/src/internal/dev_server/event_source_client/livereload_preference.js +0 -13
  367. package/src/internal/dev_server/exploring/exploring.css +0 -237
  368. package/src/internal/dev_server/exploring/exploring.html +0 -79
  369. package/src/internal/dev_server/exploring/exploring.js +0 -243
  370. package/src/internal/dev_server/exploring/fetchExploringJson.js +0 -19
  371. package/src/internal/dev_server/toolbar/compilation/compilation.css +0 -23
  372. package/src/internal/dev_server/toolbar/compilation/toolbar.compilation.js +0 -201
  373. package/src/internal/dev_server/toolbar/eventsource/toolbar.eventsource.js +0 -83
  374. package/src/internal/dev_server/toolbar/execution/toolbar.execution.js +0 -91
  375. package/src/internal/error-stack-remapping/getOriginalCallsites.js +0 -217
  376. package/src/internal/error-stack-remapping/installBrowserErrorStackRemapping.js +0 -45
  377. package/src/internal/error-stack-remapping/installErrorStackRemapping.js +0 -141
  378. package/src/internal/error-stack-remapping/installNodeErrorStackRemapping.js +0 -20
  379. package/src/internal/error-stack-remapping/remapCallSite.js +0 -314
  380. package/src/internal/error-stack-remapping/stackToString.js +0 -9
  381. package/src/internal/escapeRegexpSpecialCharacters.js +0 -34
  382. package/src/internal/escapeTemplateStringSpecialCharacters.js +0 -20
  383. package/src/internal/executing/coverage/babel_plugin_instrument.js +0 -90
  384. package/src/internal/executing/coverage/reportToCoverage.js +0 -198
  385. package/src/internal/executing/coverage_missing/createEmptyCoverage.js +0 -6
  386. package/src/internal/executing/coverage_missing/list_files_not_covered.js +0 -20
  387. package/src/internal/executing/coverage_missing/missing_coverage.js +0 -46
  388. package/src/internal/executing/coverage_missing/relativeUrlToEmptyCoverage.js +0 -63
  389. package/src/internal/executing/coverage_reporter/coverage_reporter_html_directory.js +0 -36
  390. package/src/internal/executing/coverage_reporter/coverage_reporter_json_file.js +0 -22
  391. package/src/internal/executing/coverage_reporter/coverage_reporter_text_log.js +0 -19
  392. package/src/internal/executing/coverage_reporter/istanbulCoverageMapFromCoverage.js +0 -16
  393. package/src/internal/executing/coverage_utils/file_by_file_coverage.js +0 -28
  394. package/src/internal/executing/coverage_utils/istanbul_coverage_composition.js +0 -28
  395. package/src/internal/executing/coverage_utils/v8_and_istanbul.js +0 -38
  396. package/src/internal/executing/coverage_utils/v8_coverage_composition.js +0 -23
  397. package/src/internal/executing/coverage_utils/v8_coverage_from_directory.js +0 -86
  398. package/src/internal/executing/coverage_utils/v8_coverage_to_istanbul.js +0 -100
  399. package/src/internal/executing/createSummaryLog.js +0 -143
  400. package/src/internal/executing/executionIsPassed.js +0 -2
  401. package/src/internal/executing/executionLogs.js +0 -159
  402. package/src/internal/executing/generateExecutionSteps.js +0 -29
  403. package/src/internal/executing/launchAndExecute.js +0 -458
  404. package/src/internal/features/browser_feature_detection/browser_feature_detect_dynamic_import.js +0 -20
  405. package/src/internal/features/browser_feature_detection/browser_feature_detect_import_assertions_css.js +0 -23
  406. package/src/internal/features/browser_feature_detection/browser_feature_detect_import_assertions_json.js +0 -25
  407. package/src/internal/features/browser_feature_detection/browser_feature_detect_importmap.js +0 -37
  408. package/src/internal/features/browser_feature_detection/browser_feature_detect_new_stylesheet.js +0 -9
  409. package/src/internal/features/browser_feature_detection/browser_feature_detect_top_level_await.js +0 -14
  410. package/src/internal/features/browser_feature_detection/browser_feature_detection.js +0 -89
  411. package/src/internal/features/browser_feature_detection/compile_proxy.html +0 -27
  412. package/src/internal/features/browser_feature_detection/execute_with_script_module.js +0 -24
  413. package/src/internal/features/features_compat_from_runtime.js +0 -38
  414. package/src/internal/features/features_compat_from_runtime_support.js +0 -31
  415. package/src/internal/features/features_compatibility.js +0 -37
  416. package/src/internal/features/node_feature_detection/feature_detect_dynamic_import.mjs +0 -5
  417. package/src/internal/features/node_feature_detection/feature_detect_top_level_await.mjs +0 -1
  418. package/src/internal/features/node_feature_detection/node_feature_detect_dynamic_import.js +0 -5
  419. package/src/internal/features/node_feature_detection/node_feature_detect_top_level_await.js +0 -16
  420. package/src/internal/features/node_feature_detection/node_feature_detection.js +0 -66
  421. package/src/internal/fetchUrl.js +0 -28
  422. package/src/internal/filePathUtils.js +0 -19
  423. package/src/internal/import-resolution/default-extension.js +0 -40
  424. package/src/internal/import-resolution/import-resolver-importmap.js +0 -64
  425. package/src/internal/import-resolution/import-resolver-node.js +0 -254
  426. package/src/internal/import-resolution/importmap_default.js +0 -37
  427. package/src/internal/jsenvCoreDirectoryUrl.js +0 -11
  428. package/src/internal/jsenvInternalFiles.js +0 -36
  429. package/src/internal/jsenv_builds.js +0 -19
  430. package/src/internal/jsenv_remote_directory.js +0 -156
  431. package/src/internal/logs/byte.js +0 -10
  432. package/src/internal/logs/byteAsFileSize.js +0 -9
  433. package/src/internal/logs/msAsDuration.js +0 -12
  434. package/src/internal/memoize.js +0 -24
  435. package/src/internal/node_launcher/node_runtime_report.js +0 -77
  436. package/src/internal/node_launcher/processOptions.js +0 -46
  437. package/src/internal/node_runtime/evalSource.js +0 -6
  438. package/src/internal/node_runtime/fetchSource.js +0 -8
  439. package/src/internal/node_runtime/node_execution_dynamic_import.js +0 -74
  440. package/src/internal/node_runtime/node_execution_performance.js +0 -67
  441. package/src/internal/node_runtime/node_execution_systemjs.js +0 -125
  442. package/src/internal/node_runtime/node_system.js +0 -191
  443. package/src/internal/origin_directory_converter.js +0 -62
  444. package/src/internal/perf_node.js +0 -13
  445. package/src/internal/promise_race.js +0 -19
  446. package/src/internal/redirector/redirector.html +0 -40
  447. package/src/internal/require.js +0 -3
  448. package/src/internal/response_validation.js +0 -130
  449. package/src/internal/runtime/module-registration.js +0 -207
  450. package/src/internal/runtime/s.js +0 -864
  451. package/src/internal/runtime/s.js.md +0 -1
  452. package/src/internal/runtime/valueInstall.js +0 -14
  453. package/src/internal/runtime_support/jsenv_runtime_support.js +0 -15
  454. package/src/internal/runtime_support/runtime_support.js +0 -70
  455. package/src/internal/semantic_versioning/findHighestVersion.js +0 -12
  456. package/src/internal/semantic_versioning/findLowestVersion.js +0 -12
  457. package/src/internal/semantic_versioning/index.js +0 -5
  458. package/src/internal/semantic_versioning/valueToVersion.js +0 -44
  459. package/src/internal/semantic_versioning/versionCompare.js +0 -32
  460. package/src/internal/semantic_versioning/versionIsAbove.js +0 -5
  461. package/src/internal/semantic_versioning/versionIsBelow.js +0 -5
  462. package/src/internal/semantic_versioning/versionIsEqual.js +0 -3
  463. package/src/internal/sourceMappingURLUtils.js +0 -112
  464. package/src/internal/url_conversion.js +0 -313
  465. package/src/internal/url_utils.js +0 -33
  466. package/src/internal/url_utils.test.js +0 -39
  467. package/src/jsenvCoverageConfig.js +0 -7
  468. package/src/jsenvExplorableConfig.js +0 -9
  469. package/src/jsenvRuntimeSupportDuringDev.js +0 -12
  470. package/src/jsenvServiceWorkerFinalizer.js +0 -55
  471. package/src/jsonToJavaScriptModule.js +0 -12
  472. package/src/launchBrowser.js +0 -43
  473. package/src/launchNode.js +0 -227
  474. package/src/playwright_browser_versions.js +0 -5
  475. package/src/requireUsingChildProcess.js +0 -67
  476. package/src/textToJavaScriptModule.js +0 -14
@@ -0,0 +1,208 @@
1
+ import cuid from "cuid"
2
+ import { Abort, raceCallbacks } from "@jsenv/abort"
3
+ import { resolveUrl, writeFile } from "@jsenv/filesystem"
4
+ import { createDetailedMessage } from "@jsenv/logger"
5
+
6
+ export const run = async ({
7
+ signal = new AbortController().signal,
8
+ logger,
9
+ allocatedMs,
10
+ keepRunning = false,
11
+ mirrorConsole = false,
12
+ collectConsole = false,
13
+ collectCoverage = false,
14
+ coverageTempDirectoryUrl,
15
+ // measurePerformance,
16
+ // collectPerformance = false,
17
+
18
+ runtime,
19
+ runtimeParams,
20
+ }) => {
21
+ const onErrorRef = { current: () => {} }
22
+ const onConsoleRef = { current: () => {} }
23
+ const onStopRef = { current: () => {} }
24
+ const stopSignal = { notify: () => {} }
25
+
26
+ let resultTransformer = (result) => result
27
+ const runtimeLabel = `${runtime.name}/${runtime.version}`
28
+
29
+ const runOperation = Abort.startOperation()
30
+ runOperation.addAbortSignal(signal)
31
+ if (typeof allocatedMs === "number" && allocatedMs !== Infinity) {
32
+ const timeoutAbortSource = runOperation.timeout(allocatedMs)
33
+ resultTransformer = composeTransformer(resultTransformer, (result) => {
34
+ if (
35
+ result.status === "errored" &&
36
+ Abort.isAbortError(result.error) &&
37
+ timeoutAbortSource.signal.aborted
38
+ ) {
39
+ return createTimedoutResult()
40
+ }
41
+ return result
42
+ })
43
+ }
44
+ resultTransformer = composeTransformer(resultTransformer, (result) => {
45
+ if (result.status === "errored" && Abort.isAbortError(result.error)) {
46
+ return createAbortedResult()
47
+ }
48
+ return result
49
+ })
50
+ const consoleCalls = []
51
+ onConsoleRef.current = ({ type, text }) => {
52
+ if (mirrorConsole) {
53
+ if (type === "error") {
54
+ process.stderr.write(text)
55
+ } else {
56
+ process.stdout.write(text)
57
+ }
58
+ }
59
+ if (collectConsole) {
60
+ consoleCalls.push({ type, text })
61
+ }
62
+ }
63
+ if (collectConsole) {
64
+ resultTransformer = composeTransformer(resultTransformer, (result) => {
65
+ result.consoleCalls = consoleCalls
66
+ return result
67
+ })
68
+ }
69
+ if (collectCoverage) {
70
+ resultTransformer = composeTransformer(
71
+ resultTransformer,
72
+ async (result) => {
73
+ // we do not keep coverage in memory, it can grow very big
74
+ // instead we store it on the filesystem
75
+ // and they can be read later at "coverageFileUrl"
76
+ const { coverage } = result
77
+ if (coverage) {
78
+ const coverageFileUrl = resolveUrl(
79
+ `./${runtime.name}/${cuid()}`,
80
+ coverageTempDirectoryUrl,
81
+ )
82
+ await writeFile(coverageFileUrl, JSON.stringify(coverage, null, " "))
83
+ result.coverageFileUrl = coverageFileUrl
84
+ delete result.coverage
85
+ }
86
+ return result
87
+ },
88
+ )
89
+ } else {
90
+ resultTransformer = composeTransformer(resultTransformer, (result) => {
91
+ // as collectCoverage is disabled
92
+ // executionResult.coverage is undefined or {}
93
+ // we delete it just to have a cleaner object
94
+ delete result.coverage
95
+ return result
96
+ })
97
+ }
98
+
99
+ const startMs = Date.now()
100
+ resultTransformer = composeTransformer(resultTransformer, (result) => {
101
+ result.duration = Date.now() - startMs
102
+ return result
103
+ })
104
+
105
+ try {
106
+ logger.debug(`run() ${runtimeLabel}`)
107
+ runOperation.throwIfAborted()
108
+ const winnerPromise = new Promise((resolve, reject) => {
109
+ raceCallbacks(
110
+ {
111
+ aborted: (cb) => {
112
+ runOperation.signal.addEventListener("abort", cb)
113
+ return () => {
114
+ runOperation.signal.removeEventListener("abort", cb)
115
+ }
116
+ },
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
+ runned: async (cb) => {
132
+ try {
133
+ await runtime.run({
134
+ signal,
135
+ logger,
136
+ ...runtimeParams,
137
+ keepRunning,
138
+ stopSignal,
139
+ onStop: (stopInfo) => onStopRef.current(stopInfo),
140
+ onError: (error) => onErrorRef.current(error),
141
+ onConsole: (log) => onConsoleRef.current(log),
142
+ onResult: cb,
143
+ })
144
+ } catch (e) {
145
+ reject(e)
146
+ }
147
+ },
148
+ },
149
+ resolve,
150
+ )
151
+ })
152
+ const winner = await winnerPromise
153
+ if (winner.name === "aborted") {
154
+ runOperation.throwIfAborted()
155
+ }
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
172
+ }
173
+ const result = winner.data
174
+ return await resultTransformer(result)
175
+ } catch (error) {
176
+ return await resultTransformer(
177
+ createErroredExecutionResult({
178
+ error,
179
+ }),
180
+ )
181
+ } finally {
182
+ await runOperation.end()
183
+ }
184
+ }
185
+
186
+ const composeTransformer = (previousTransformer, transformer) => {
187
+ return async (value) => {
188
+ const transformedValue = await previousTransformer(value)
189
+ return transformer(transformedValue)
190
+ }
191
+ }
192
+
193
+ const createAbortedResult = () => {
194
+ return {
195
+ status: "aborted",
196
+ }
197
+ }
198
+ const createTimedoutResult = () => {
199
+ return {
200
+ status: "timedout",
201
+ }
202
+ }
203
+ const createErroredExecutionResult = ({ error }) => {
204
+ return {
205
+ status: "errored",
206
+ error,
207
+ }
208
+ }
@@ -0,0 +1,8 @@
1
+ import { createRuntimeFromPlaywright } from "./from_playwright.js"
2
+
3
+ export const chromium = createRuntimeFromPlaywright({
4
+ browserName: "chromium",
5
+ browserVersion: "97.0.4666.0",
6
+ coveragePlaywrightAPIAvailable: true,
7
+ })
8
+ export const chromiumIsolatedTab = chromium.isolatedTab
@@ -0,0 +1,7 @@
1
+ import { createRuntimeFromPlaywright } from "./from_playwright.js"
2
+
3
+ export const firefox = createRuntimeFromPlaywright({
4
+ browserName: "firefox",
5
+ browserVersion: "93.0",
6
+ })
7
+ export const firefoxIsolatedTab = firefox.isolatedTab
@@ -0,0 +1,464 @@
1
+ import { Script } from "node:vm"
2
+ import { createDetailedMessage } from "@jsenv/logger"
3
+ import {
4
+ Abort,
5
+ createCallbackListNotifiedOnce,
6
+ raceProcessTeardownEvents,
7
+ } from "@jsenv/abort"
8
+ import { moveUrl } from "@jsenv/filesystem"
9
+
10
+ import { memoize } from "@jsenv/utils/memoize/memoize.js"
11
+ import { filterV8Coverage } from "@jsenv/utils/coverage/v8_coverage_from_directory.js"
12
+ import { composeTwoFileByFileIstanbulCoverages } from "@jsenv/utils/coverage/istanbul_coverage_composition.js"
13
+ import { escapeRegexpSpecialChars } from "@jsenv/utils/string/escape_regexp_special_chars.js"
14
+
15
+ export const createRuntimeFromPlaywright = ({
16
+ browserName,
17
+ browserVersion,
18
+ coveragePlaywrightAPIAvailable = false,
19
+ ignoreErrorHook = () => false,
20
+ transformErrorHook = (error) => error,
21
+ isolatedTab = false,
22
+ }) => {
23
+ const runtime = {
24
+ name: browserName,
25
+ version: browserVersion,
26
+ needsServer: true,
27
+ }
28
+ let browserAndContextPromise
29
+ runtime.run = async ({
30
+ signal = new AbortController().signal,
31
+ // logger,
32
+ rootDirectoryUrl,
33
+ fileRelativeUrl,
34
+ server,
35
+
36
+ // measurePerformance,
37
+ // collectPerformance,
38
+ collectCoverage = false,
39
+ coverageForceIstanbul,
40
+ urlShouldBeCovered,
41
+
42
+ stopAfterAllSignal,
43
+ stopSignal,
44
+ keepRunning,
45
+ onStop,
46
+ onError,
47
+ onConsole,
48
+ onResult,
49
+
50
+ executablePath,
51
+ headful = false,
52
+ ignoreHTTPSErrors = true,
53
+ }) => {
54
+ const cleanupCallbackList = createCallbackListNotifiedOnce()
55
+ const cleanup = memoize(async (reason) => {
56
+ await cleanupCallbackList.notify({ reason })
57
+ })
58
+
59
+ const isBrowserDedicatedToExecution = isolatedTab || !stopAfterAllSignal
60
+ if (isBrowserDedicatedToExecution || !browserAndContextPromise) {
61
+ browserAndContextPromise = (async () => {
62
+ const browser = await launchBrowserUsingPlaywright({
63
+ signal,
64
+ browserName,
65
+ stopOnExit: true,
66
+ playwrightOptions: {
67
+ headless: !headful,
68
+ executablePath,
69
+ },
70
+ })
71
+ const browserContext = await browser.newContext({ ignoreHTTPSErrors })
72
+ return { browser, browserContext }
73
+ })()
74
+ }
75
+ const { browser, browserContext } = await browserAndContextPromise
76
+ const closeBrowser = async () => {
77
+ try {
78
+ await stopBrowser(browser)
79
+ } catch (e) {
80
+ onError(e)
81
+ }
82
+ }
83
+ const page = await browserContext.newPage()
84
+ const closePage = async () => {
85
+ try {
86
+ await page.close()
87
+ } catch (e) {
88
+ if (isTargetClosedError(e)) {
89
+ return
90
+ }
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()
117
+ }
118
+ }
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
+
130
+ let resultTransformer = (result) => result
131
+ if (collectCoverage) {
132
+ if (coveragePlaywrightAPIAvailable && !coverageForceIstanbul) {
133
+ await page.coverage.startJSCoverage({
134
+ // reportAnonymousScripts: true,
135
+ })
136
+ resultTransformer = composeTransformer(
137
+ resultTransformer,
138
+ async (result) => {
139
+ const v8CoveragesWithWebUrls = await page.coverage.stopJSCoverage()
140
+ // we convert urls starting with http:// to file:// because we later
141
+ // convert the url to filesystem path in istanbulCoverageFromV8Coverage function
142
+ const v8CoveragesWithFsUrls = v8CoveragesWithWebUrls.map(
143
+ (v8CoveragesWithWebUrl) => {
144
+ const fsUrl = moveUrl({
145
+ url: v8CoveragesWithWebUrl.url,
146
+ from: `${server.origin}/`,
147
+ to: rootDirectoryUrl,
148
+ preferAbsolute: true,
149
+ })
150
+ return {
151
+ ...v8CoveragesWithWebUrl,
152
+ url: fsUrl,
153
+ }
154
+ },
155
+ )
156
+ const coverage = filterV8Coverage(
157
+ { result: v8CoveragesWithFsUrls },
158
+ {
159
+ urlShouldBeCovered,
160
+ },
161
+ )
162
+ return {
163
+ ...result,
164
+ coverage,
165
+ }
166
+ },
167
+ )
168
+ } else {
169
+ resultTransformer = composeTransformer(
170
+ resultTransformer,
171
+ async (result) => {
172
+ result.coverage = generateCoverageForPage(result.namespace)
173
+ return result
174
+ },
175
+ )
176
+ }
177
+ } else {
178
+ resultTransformer = composeTransformer(resultTransformer, (result) => {
179
+ const { namespace: fileExecutionResultMap } = result
180
+ Object.keys(fileExecutionResultMap).forEach((fileRelativeUrl) => {
181
+ delete fileExecutionResultMap[fileRelativeUrl].coverage
182
+ })
183
+ return result
184
+ })
185
+ }
186
+ 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,
193
+ })
194
+ result = await resultTransformer(result)
195
+ onResult(result)
196
+ if (keepRunning) {
197
+ stopSignal.notify = cleanup
198
+ } else {
199
+ await cleanup("execution done")
200
+ }
201
+ return result
202
+ }
203
+
204
+ if (!isolatedTab) {
205
+ runtime.isolatedTab = createRuntimeFromPlaywright({
206
+ browserName,
207
+ browserVersion,
208
+ coveragePlaywrightAPIAvailable,
209
+ ignoreErrorHook,
210
+ transformErrorHook,
211
+ isolatedTab: true,
212
+ })
213
+ }
214
+ return runtime
215
+ }
216
+
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
+ const generateCoverageForPage = (scriptExecutionResults) => {
252
+ let istanbulCoverageComposed = null
253
+ Object.keys(scriptExecutionResults).forEach((fileRelativeUrl) => {
254
+ const istanbulCoverage = scriptExecutionResults[fileRelativeUrl].coverage
255
+ istanbulCoverageComposed = istanbulCoverageComposed
256
+ ? composeTwoFileByFileIstanbulCoverages(
257
+ istanbulCoverageComposed,
258
+ istanbulCoverage,
259
+ )
260
+ : istanbulCoverage
261
+ })
262
+ return istanbulCoverageComposed
263
+ }
264
+
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
+ const launchBrowserUsingPlaywright = async ({
291
+ signal,
292
+ browserName,
293
+ stopOnExit,
294
+ playwrightOptions,
295
+ }) => {
296
+ const launchBrowserOperation = Abort.startOperation()
297
+ launchBrowserOperation.addAbortSignal(signal)
298
+ const playwright = await importPlaywright({ browserName })
299
+ if (stopOnExit) {
300
+ launchBrowserOperation.addAbortSource((abort) => {
301
+ return raceProcessTeardownEvents(
302
+ {
303
+ SIGHUP: true,
304
+ SIGTERM: true,
305
+ SIGINT: true,
306
+ beforeExit: true,
307
+ exit: true,
308
+ },
309
+ abort,
310
+ )
311
+ })
312
+ }
313
+ const browserClass = playwright[browserName]
314
+ try {
315
+ const browser = await browserClass.launch({
316
+ ...playwrightOptions,
317
+ // let's handle them to close properly browser + remove listener
318
+ // instead of relying on playwright to do so
319
+ handleSIGINT: false,
320
+ handleSIGTERM: false,
321
+ handleSIGHUP: false,
322
+ })
323
+ launchBrowserOperation.throwIfAborted()
324
+ return browser
325
+ } catch (e) {
326
+ if (launchBrowserOperation.signal.aborted && isTargetClosedError(e)) {
327
+ // rethrow the abort error
328
+ launchBrowserOperation.throwIfAborted()
329
+ }
330
+ throw e
331
+ } finally {
332
+ await launchBrowserOperation.end()
333
+ }
334
+ }
335
+
336
+ const importPlaywright = async ({ browserName }) => {
337
+ try {
338
+ const namespace = await import("playwright")
339
+ return namespace
340
+ } catch (e) {
341
+ if (e.code === "ERR_MODULE_NOT_FOUND") {
342
+ throw new Error(
343
+ createDetailedMessage(
344
+ `"playwright" not found. You need playwright in your dependencies to use "${browserName}"`,
345
+ {
346
+ suggestion: `npm install --save-dev playwright`,
347
+ },
348
+ ),
349
+ { cause: e },
350
+ )
351
+ }
352
+ throw e
353
+ }
354
+ }
355
+
356
+ const isTargetClosedError = (error) => {
357
+ if (error.message.match(/Protocol error \(.*?\): Target closed/)) {
358
+ return true
359
+ }
360
+ if (error.message.match(/Protocol error \(.*?\): Browser.*?closed/)) {
361
+ return true
362
+ }
363
+ if (error.message.includes("browserContext.close: Browser closed")) {
364
+ return true
365
+ }
366
+ return false
367
+ }
368
+
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
+ const composeTransformer = (previousTransformer, transformer) => {
403
+ return async (value) => {
404
+ const transformedValue = await previousTransformer(value)
405
+ return transformer(transformedValue)
406
+ }
407
+ }
408
+
409
+ const extractTextFromConsoleMessage = (consoleMessage) => {
410
+ return consoleMessage.text()
411
+ // ensure we use a string so that istanbul won't try
412
+ // to put any coverage statement inside it
413
+ // ideally we should use uneval no ?
414
+ // eslint-disable-next-line no-new-func
415
+ // const functionEvaluatedBrowserSide = new Function(
416
+ // "value",
417
+ // `if (value instanceof Error) {
418
+ // return value.stack
419
+ // }
420
+ // return value`,
421
+ // )
422
+ // const argValues = await Promise.all(
423
+ // message.args().map(async (arg) => {
424
+ // const jsHandle = arg
425
+ // try {
426
+ // return await jsHandle.executionContext().evaluate(functionEvaluatedBrowserSide, jsHandle)
427
+ // } catch (e) {
428
+ // return String(jsHandle)
429
+ // }
430
+ // }),
431
+ // )
432
+ // const text = argValues.reduce((previous, value, index) => {
433
+ // let string
434
+ // if (typeof value === "object") string = JSON.stringify(value, null, " ")
435
+ // else string = String(value)
436
+ // if (index === 0) return `${previous}${string}`
437
+ // return `${previous} ${string}`
438
+ // }, "")
439
+ // return text
440
+ }
441
+
442
+ const registerEvent = ({ object, eventType, callback }) => {
443
+ object.on(eventType, callback)
444
+ return () => {
445
+ object.removeListener(eventType, callback)
446
+ }
447
+ }
448
+
449
+ const evalException = (
450
+ exceptionSource,
451
+ { rootDirectoryUrl, server, transformErrorHook },
452
+ ) => {
453
+ const script = new Script(exceptionSource, { filename: "" })
454
+ const error = script.runInThisContext()
455
+ if (error && error instanceof Error) {
456
+ const remoteRootRegexp = new RegExp(
457
+ escapeRegexpSpecialChars(`${server.origin}/`),
458
+ "g",
459
+ )
460
+ error.stack = error.stack.replace(remoteRootRegexp, rootDirectoryUrl)
461
+ error.message = error.message.replace(remoteRootRegexp, rootDirectoryUrl)
462
+ }
463
+ return transformErrorHook(error)
464
+ }
@@ -0,0 +1,24 @@
1
+ import { createRuntimeFromPlaywright } from "./from_playwright.js"
2
+
3
+ export const webkit = createRuntimeFromPlaywright({
4
+ browserName: "webkit",
5
+ browserVersion: "15.4",
6
+ ignoreErrorHook: (error) => {
7
+ // we catch error during execution but safari throw unhandled rejection
8
+ // in a non-deterministic way.
9
+ // I suppose it's due to some race condition to decide if the promise is catched or not
10
+ // for now we'll ignore unhandled rejection on wekbkit
11
+ if (error.name === "Unhandled Promise Rejection") {
12
+ return true
13
+ }
14
+ return false
15
+ },
16
+ transformErrorHook: (error) => {
17
+ // Force error stack to contain the error message
18
+ // because it's not the case on webkit
19
+ error.stack = `${error.message}
20
+ at ${error.stack}`
21
+ return error
22
+ },
23
+ })
24
+ export const webkitIsolatedTab = webkit.isolatedTab