@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,186 @@
1
+ import { createEventSourceConnection } from "./event_source_connection.js"
2
+ import {
3
+ isAutoreloadEnabled,
4
+ setAutoreloadPreference,
5
+ } from "./autoreload_preference.js"
6
+ import { compareTwoUrlPaths } from "./url_helpers.js"
7
+ import {
8
+ reloadHtmlPage,
9
+ reloadDOMNodesUsingUrl,
10
+ reloadJsImport,
11
+ } from "./reload.js"
12
+ import { urlHotMetas } from "./import_meta_hot.js"
13
+
14
+ const reloadMessages = []
15
+ const reloadMessagesSignal = { onchange: () => {} }
16
+ let pendingCallbacks = []
17
+ let running = false
18
+ const addToHotQueue = async (callback) => {
19
+ pendingCallbacks.push(callback)
20
+ dequeue()
21
+ }
22
+ const dequeue = async () => {
23
+ if (running) {
24
+ return
25
+ }
26
+ const callbacks = pendingCallbacks.slice()
27
+ pendingCallbacks = []
28
+ running = true
29
+ await callbacks.reduce(async (previous, callback) => {
30
+ await previous
31
+ await callback()
32
+ }, Promise.resolve())
33
+ running = false
34
+ if (pendingCallbacks.length) {
35
+ dequeue()
36
+ }
37
+ }
38
+
39
+ const applyReloadMessageEffects = async () => {
40
+ const someEffectIsFullReload = reloadMessages.some(
41
+ (reloadMessage) => reloadMessage.type === "full",
42
+ )
43
+ if (someEffectIsFullReload) {
44
+ reloadHtmlPage()
45
+ return
46
+ }
47
+
48
+ const onApplied = (reloadMessage) => {
49
+ const index = reloadMessages.indexOf(reloadMessage)
50
+ reloadMessages.splice(index, 1)
51
+ reloadMessagesSignal.onchange()
52
+ }
53
+ const setReloadMessagePromise = (reloadMessage, promise) => {
54
+ reloadMessage.status = "pending"
55
+ promise.then(
56
+ () => {
57
+ onApplied(reloadMessage)
58
+ },
59
+ (e) => {
60
+ // TODO: reuse error display from html supervisor
61
+ console.error(e)
62
+ console.error(
63
+ `[hmr] Failed to reload after ${reloadMessage.reason}.
64
+ This could be due to syntax errors or importing non-existent modules (see errors above)`,
65
+ )
66
+ reloadMessage.status = "failed"
67
+ reloadMessagesSignal.onchange()
68
+ },
69
+ )
70
+ }
71
+ reloadMessages.forEach((reloadMessage) => {
72
+ if (reloadMessage.type === "hot") {
73
+ const promise = addToHotQueue(() => {
74
+ return applyHotReload(reloadMessage)
75
+ })
76
+ setReloadMessagePromise(reloadMessage, promise)
77
+ } else {
78
+ setReloadMessagePromise(reloadMessage, Promise.resolve())
79
+ }
80
+ })
81
+ reloadMessagesSignal.onchange() // reload status is "pending"
82
+ }
83
+
84
+ const applyHotReload = async ({ hotInstructions }) => {
85
+ await hotInstructions.reduce(
86
+ async (previous, { type, boundary, acceptedBy }) => {
87
+ await previous
88
+
89
+ const urlToFetch = new URL(boundary, `${window.location.origin}/`).href
90
+ const urlHotMeta = urlHotMetas[urlToFetch]
91
+ // TODO: we should return when there is no url hot meta because
92
+ // it means code was not executed (code splitting with dynamic import)
93
+ // if (!urlHotMeta) {return }
94
+
95
+ if (type === "prune") {
96
+ console.group(`[jsenv] prune: ${boundary} (inside ${acceptedBy})`)
97
+ } else if (acceptedBy === boundary) {
98
+ console.group(`[jsenv] hot reloading: ${boundary}`)
99
+ } else {
100
+ console.group(`[jsenv] hot reloading: ${acceptedBy} inside ${boundary}`)
101
+ }
102
+ if (urlHotMeta && urlHotMeta.disposeCallback) {
103
+ console.log(`call dispose callback`)
104
+ await urlHotMeta.disposeCallback()
105
+ }
106
+ if (type === "prune") {
107
+ delete urlHotMetas[urlToFetch]
108
+ console.log(`cleanup pruned url`)
109
+ console.groupEnd()
110
+ return null
111
+ }
112
+ if (type === "js_module") {
113
+ console.log(`importing js module`)
114
+ const namespace = await reloadJsImport(urlToFetch)
115
+ if (urlHotMeta && urlHotMeta.acceptCallback) {
116
+ await urlHotMeta.acceptCallback(namespace)
117
+ }
118
+ console.log(`js module import done`)
119
+ console.groupEnd()
120
+ return namespace
121
+ }
122
+ if (type === "html") {
123
+ if (!compareTwoUrlPaths(urlToFetch, window.location.href)) {
124
+ // we are not in that HTML page
125
+ return null
126
+ }
127
+ console.log(`reloading url`)
128
+ const urlToReload = new URL(acceptedBy, `${window.location.origin}/`)
129
+ .href
130
+ reloadDOMNodesUsingUrl(urlToReload)
131
+ console.log(`url reloaded`)
132
+ console.groupEnd()
133
+ return null
134
+ }
135
+ console.warn(`unknown update type: "${type}"`)
136
+ return null
137
+ },
138
+ Promise.resolve(),
139
+ )
140
+ }
141
+
142
+ const addReloadMessage = (reloadMessage) => {
143
+ reloadMessages.push(reloadMessage)
144
+ if (isAutoreloadEnabled()) {
145
+ applyReloadMessageEffects()
146
+ } else {
147
+ reloadMessagesSignal.onchange()
148
+ }
149
+ }
150
+
151
+ const eventsourceConnection = createEventSourceConnection(
152
+ document.location.href,
153
+ {
154
+ reload: ({ data }) => {
155
+ const reloadMessage = JSON.parse(data)
156
+ addReloadMessage(reloadMessage)
157
+ },
158
+ },
159
+ {
160
+ retryMaxAttempt: Infinity,
161
+ retryAllocatedMs: 20 * 1000,
162
+ },
163
+ )
164
+
165
+ const { status, connect, disconnect } = eventsourceConnection
166
+ connect()
167
+ window.__jsenv_event_source_client__ = {
168
+ status,
169
+ connect,
170
+ disconnect,
171
+ isAutoreloadEnabled,
172
+ setAutoreloadPreference,
173
+ urlHotMetas,
174
+ reloadMessages,
175
+ reloadMessagesSignal,
176
+ applyReloadMessageEffects,
177
+ addReloadMessage,
178
+ }
179
+
180
+ // const findHotMetaUrl = (originalFileRelativeUrl) => {
181
+ // return Object.keys(urlHotMetas).find((compileUrl) => {
182
+ // return (
183
+ // parseCompiledUrl(compileUrl).fileRelativeUrl === originalFileRelativeUrl
184
+ // )
185
+ // })
186
+ // }
@@ -1,5 +1,3 @@
1
- /* eslint-env browser */
2
-
3
1
  export const createEventSourceConnection = (
4
2
  eventSourceUrl,
5
3
  events = {},
@@ -23,28 +21,27 @@ export const createEventSourceConnection = (
23
21
  }
24
22
  })
25
23
 
26
- let connectionStatus = "default"
27
- let connectionStatusChangeCallback = () => {}
28
- let _disconnect = () => {}
29
-
30
- const goToStatus = (newStatus) => {
31
- if (newStatus !== connectionStatus) {
32
- connectionStatus = newStatus
33
- connectionStatusChangeCallback()
34
- }
24
+ const status = {
25
+ value: "default",
26
+ goTo: (value) => {
27
+ if (value === status.value) {
28
+ return
29
+ }
30
+ status.value = value
31
+ status.onchange()
32
+ },
33
+ onchange: () => {},
35
34
  }
35
+ let _disconnect = () => {}
36
36
 
37
37
  const attemptConnection = (url) => {
38
38
  const eventSource = new EventSource(url, {
39
39
  withCredentials: true,
40
40
  })
41
41
  _disconnect = () => {
42
- if (
43
- connectionStatus !== "connecting" &&
44
- connectionStatus !== "connected"
45
- ) {
42
+ if (status.value !== "connecting" && status.value !== "connected") {
46
43
  console.warn(
47
- `disconnect() ignored because connection is ${connectionStatus}`,
44
+ `disconnect() ignored because connection is ${status.value}`,
48
45
  )
49
46
  return
50
47
  }
@@ -53,7 +50,7 @@ export const createEventSourceConnection = (
53
50
  Object.keys(events).forEach((eventName) => {
54
51
  eventSource.removeEventListener(eventName, events[eventName])
55
52
  })
56
- goToStatus("disconnected")
53
+ status.goTo("disconnected")
57
54
  }
58
55
  let retryCount = 0
59
56
  let firstRetryMs = Date.now()
@@ -79,7 +76,7 @@ export const createEventSourceConnection = (
79
76
  }
80
77
 
81
78
  retryCount++
82
- goToStatus("connecting")
79
+ status.goTo("connecting")
83
80
  return
84
81
  }
85
82
 
@@ -89,7 +86,7 @@ export const createEventSourceConnection = (
89
86
  }
90
87
  }
91
88
  eventSource.onopen = () => {
92
- goToStatus("connected")
89
+ status.goTo("connected")
93
90
  }
94
91
  Object.keys(events).forEach((eventName) => {
95
92
  eventSource.addEventListener(eventName, events[eventName])
@@ -101,7 +98,7 @@ export const createEventSourceConnection = (
101
98
  }
102
99
  })
103
100
  }
104
- goToStatus("connecting")
101
+ status.goTo("connecting")
105
102
  }
106
103
 
107
104
  let connect = () => {
@@ -116,7 +113,9 @@ export const createEventSourceConnection = (
116
113
  }
117
114
 
118
115
  const removePageUnloadListener = listenPageUnload(() => {
119
- _disconnect()
116
+ if (status.value === "connecting" || status.value === "connected") {
117
+ _disconnect()
118
+ }
120
119
  })
121
120
 
122
121
  const destroy = () => {
@@ -125,10 +124,7 @@ export const createEventSourceConnection = (
125
124
  }
126
125
 
127
126
  return {
128
- getConnectionStatus: () => connectionStatus,
129
- setConnectionStatusChangeCallback: (callback) => {
130
- connectionStatusChangeCallback = callback
131
- },
127
+ status,
132
128
  connect,
133
129
  disconnect: () => _disconnect(),
134
130
  destroy,
@@ -0,0 +1,80 @@
1
+ /*
2
+ * https://vitejs.dev/guide/api-hmr.html#hot-accept-deps-cb
3
+ * https://modern-web.dev/docs/dev-server/plugins/hmr/
4
+ */
5
+
6
+ export const urlHotMetas = {}
7
+
8
+ export const createImportMetaHot = (importMetaUrl) => {
9
+ const data = {}
10
+ const url = asUrlWithoutHmrQuery(importMetaUrl)
11
+
12
+ return {
13
+ data,
14
+ accept: (firstArg, secondArg) => {
15
+ if (!firstArg) {
16
+ addUrlMeta(url, {
17
+ dependencies: [url],
18
+ acceptCallback: () => {},
19
+ })
20
+ return
21
+ }
22
+ if (typeof firstArg === "function") {
23
+ addUrlMeta(url, {
24
+ dependencies: [url],
25
+ acceptCallback: firstArg,
26
+ })
27
+ return
28
+ }
29
+ if (typeof firstArg === "string") {
30
+ addUrlMeta(url, {
31
+ dependencies: [firstArg],
32
+ acceptCallback: secondArg,
33
+ })
34
+ return
35
+ }
36
+ if (Array.isArray(firstArg)) {
37
+ addUrlMeta(url, {
38
+ dependencies: firstArg,
39
+ acceptCallback: secondArg,
40
+ })
41
+ return
42
+ }
43
+ throw new Error(`invalid call to hot.accept()`)
44
+ },
45
+ dispose: (callback) => {
46
+ addUrlMeta(url, {
47
+ disposeCallback: () => {
48
+ return callback(data)
49
+ },
50
+ })
51
+ },
52
+ decline: () => {
53
+ addUrlMeta(url, {
54
+ declined: true,
55
+ })
56
+ },
57
+ invalidate: () => {
58
+ addUrlMeta(url, {
59
+ invalidated: true,
60
+ })
61
+ },
62
+ }
63
+ }
64
+
65
+ const addUrlMeta = (url, meta) => {
66
+ urlHotMetas[url] = {
67
+ ...urlHotMetas[url],
68
+ ...meta,
69
+ }
70
+ }
71
+
72
+ const asUrlWithoutHmrQuery = (url) => {
73
+ const urlObject = new URL(url)
74
+ if (urlObject.searchParams.has("hmr")) {
75
+ urlObject.searchParams.delete("hmr")
76
+ urlObject.searchParams.delete("v")
77
+ return urlObject.href
78
+ }
79
+ return url
80
+ }
@@ -0,0 +1,101 @@
1
+ import { htmlAttributeSrcSet } from "@jsenv/utils/html_ast/html_attribute_src_set.js"
2
+
3
+ import { injectQuery, compareTwoUrlPaths } from "./url_helpers.js"
4
+
5
+ export const reloadHtmlPage = () => {
6
+ window.location.reload(true)
7
+ }
8
+
9
+ // This function can consider everything as hot reloadable:
10
+ // - no need to check [hot-accept]and [hot-decline] attributes for instance
11
+ // This is because if something should full reload, we receive "full_reload"
12
+ // from server and this function is not called
13
+ export const reloadDOMNodesUsingUrl = (urlToReload) => {
14
+ const mutations = []
15
+ const shouldReloadUrl = (urlCandidate) => {
16
+ return compareTwoUrlPaths(urlCandidate, urlToReload)
17
+ }
18
+ const visitNodeAttributeAsUrl = (node, attributeName) => {
19
+ let attribute = node[attributeName]
20
+ if (!attribute) {
21
+ return
22
+ }
23
+ if (SVGAnimatedString && attribute instanceof SVGAnimatedString) {
24
+ attribute = attribute.animVal
25
+ }
26
+ if (!shouldReloadUrl(attribute)) {
27
+ return
28
+ }
29
+ mutations.push(() => {
30
+ node[attributeName] = injectQuery(attribute, { hmr: Date.now() })
31
+ })
32
+ }
33
+ Array.from(document.querySelectorAll(`link[rel="stylesheet"]`)).forEach(
34
+ (link) => {
35
+ visitNodeAttributeAsUrl(link, "href")
36
+ },
37
+ )
38
+ Array.from(document.querySelectorAll(`link[rel="icon"]`)).forEach((link) => {
39
+ visitNodeAttributeAsUrl(link, "href")
40
+ })
41
+ Array.from(document.querySelector("script")).forEach((script) => {
42
+ visitNodeAttributeAsUrl(script, "src")
43
+ })
44
+ // There is no real need to update a.href because the ressource will be fetched when clicked.
45
+ // But in a scenario where the ressource was already visited and is in browser cache, adding
46
+ // the dynamic query param ensure the cache is invalidated
47
+ Array.from(document.querySelectorAll("a")).forEach((a) => {
48
+ visitNodeAttributeAsUrl(a, "href")
49
+ })
50
+ // About iframes:
51
+ // - By default iframe itself and everything inside trigger a parent page full-reload
52
+ // - Adding [hot-accept] on the iframe means parent page won't reload when iframe full/hot reload
53
+ // In that case and if there is code in the iframe and parent doing post message communication:
54
+ // you must put import.meta.hot.decline() for code involved in communication.
55
+ // (both in parent and iframe)
56
+ Array.from(document.querySelectorAll("img")).forEach((img) => {
57
+ visitNodeAttributeAsUrl(img, "src")
58
+ const srcset = img.srcset
59
+ if (srcset) {
60
+ const srcCandidates = htmlAttributeSrcSet.parse(srcset)
61
+ srcCandidates.forEach((srcCandidate) => {
62
+ const url = new URL(srcCandidate.specifier, `${window.location.href}`)
63
+ if (shouldReloadUrl(url)) {
64
+ srcCandidate.specifier = injectQuery(url, { hmr: Date.now() })
65
+ }
66
+ })
67
+ mutations.push(() => {
68
+ img.srcset = htmlAttributeSrcSet.stringify(srcCandidates)
69
+ })
70
+ }
71
+ })
72
+ Array.from(document.querySelectorAll("source")).forEach((source) => {
73
+ visitNodeAttributeAsUrl(source, "src")
74
+ })
75
+ // svg image tag
76
+ Array.from(document.querySelectorAll("image")).forEach((image) => {
77
+ visitNodeAttributeAsUrl(image, "href")
78
+ })
79
+ // svg use
80
+ Array.from(document.querySelectorAll("use")).forEach((use) => {
81
+ visitNodeAttributeAsUrl(use, "href")
82
+ })
83
+ mutations.forEach((mutation) => {
84
+ mutation()
85
+ })
86
+ }
87
+
88
+ export const reloadJsImport = async (url) => {
89
+ const urlWithHmr = injectQuery(url, { hmr: Date.now() })
90
+ const namespace = await import(urlWithHmr)
91
+ return namespace
92
+ }
93
+
94
+ export const reloadAllCss = () => {
95
+ const links = Array.from(document.getElementsByTagName("link"))
96
+ links.forEach((link) => {
97
+ if (link.rel === "stylesheet") {
98
+ link.href = injectQuery(link.href, { hmr: Date.now() })
99
+ }
100
+ })
101
+ }
@@ -0,0 +1,20 @@
1
+ export const compareTwoUrlPaths = (url, otherUrl) => {
2
+ if (url === otherUrl) {
3
+ return true
4
+ }
5
+ const urlObject = new URL(url)
6
+ const otherUrlObject = new URL(otherUrl)
7
+ return (
8
+ urlObject.origin === otherUrlObject.origin &&
9
+ urlObject.pathname === otherUrlObject.pathname
10
+ )
11
+ }
12
+
13
+ export const injectQuery = (url, query) => {
14
+ const urlObject = new URL(url)
15
+ const { searchParams } = urlObject
16
+ Object.keys(query).forEach((key) => {
17
+ searchParams.set(key, query[key])
18
+ })
19
+ return String(urlObject)
20
+ }
@@ -0,0 +1,156 @@
1
+ import {
2
+ getHtmlNodeAttributeByName,
3
+ parseLinkNode,
4
+ } from "@jsenv/utils/html_ast/html_ast.js"
5
+ import { htmlAttributeSrcSet } from "@jsenv/utils/html_ast/html_attribute_src_set.js"
6
+
7
+ // Some "smart" default applied to decide what should hot reload / fullreload:
8
+ // By default:
9
+ // - hot reload on <img src="./image.png" />
10
+ // - fullreload on <script src="./file.js" />
11
+ // Can be controlled by [hot-decline] and [hot-accept]:
12
+ // - fullreload on <img src="./image.png" hot-decline />
13
+ // - hot reload on <script src="./file.js" hot-accept />
14
+ export const collectHotDataFromHtmlAst = (htmlAst) => {
15
+ const hotReferences = []
16
+
17
+ const onSpecifier = ({ specifier, node, attributeName, hotAccepted }) => {
18
+ if (
19
+ // explicitely enabled with [hot-accept] attribute
20
+ hotAccepted === true ||
21
+ htmlNodeCanHotReload(node)
22
+ ) {
23
+ hotReferences.push({
24
+ type: `${node.nodeName}_${attributeName}`,
25
+ specifier,
26
+ })
27
+ }
28
+ }
29
+
30
+ const visitUrlSpecifierAttribute = ({ node, attributeName, hotAccepted }) => {
31
+ const attribute = getHtmlNodeAttributeByName(node, attributeName)
32
+ const value = attribute ? attribute.value : undefined
33
+ if (value) {
34
+ onSpecifier({
35
+ specifier: value,
36
+ node,
37
+ attributeName,
38
+ hotAccepted,
39
+ })
40
+ }
41
+ }
42
+
43
+ const onNode = (node, { hotAccepted }) => {
44
+ // explicitely disabled with [hot-decline] attribute
45
+ if (hotAccepted === false) {
46
+ return
47
+ }
48
+ if (nodeNamesWithHref.includes(node.nodeName)) {
49
+ visitUrlSpecifierAttribute({
50
+ node,
51
+ attributeName: "href",
52
+ hotAccepted,
53
+ })
54
+ visitUrlSpecifierAttribute({
55
+ node,
56
+ attributeName: "content-href",
57
+ hotAccepted,
58
+ })
59
+ }
60
+ if (nodeNamesWithSrc.includes(node.nodeName)) {
61
+ visitUrlSpecifierAttribute({
62
+ node,
63
+ attributeName: "src",
64
+ hotAccepted,
65
+ })
66
+ visitUrlSpecifierAttribute({
67
+ node,
68
+ attributeName: "content-src",
69
+ hotAccepted,
70
+ })
71
+ }
72
+ if (nodeNamesWithSrcset.includes(node.nodeName)) {
73
+ const srcsetAttribute = getHtmlNodeAttributeByName(node, "srcset")
74
+ const srcset = srcsetAttribute ? srcsetAttribute.value : undefined
75
+ if (srcset) {
76
+ const srcCandidates = htmlAttributeSrcSet.parse(srcset)
77
+ srcCandidates.forEach((srcCandidate) => {
78
+ onSpecifier({
79
+ node,
80
+ specifier: srcCandidate.specifier,
81
+ attributeName: "srcset",
82
+ hotAccepted,
83
+ })
84
+ })
85
+ }
86
+ }
87
+ }
88
+
89
+ const iterate = (node, context) => {
90
+ context = {
91
+ ...context,
92
+ ...getNodeContext(node),
93
+ }
94
+ onNode(node, context)
95
+ const { childNodes } = node
96
+ if (childNodes) {
97
+ let i = 0
98
+ while (i < childNodes.length) {
99
+ const childNode = childNodes[i++]
100
+ iterate(childNode, context)
101
+ }
102
+ }
103
+ }
104
+ iterate(htmlAst, {})
105
+
106
+ return { hotReferences }
107
+ }
108
+
109
+ const nodeNamesWithHref = ["link", "a", "image", "use"]
110
+ const nodeNamesWithSrc = ["script", "iframe", "img"]
111
+ const nodeNamesWithSrcset = ["img", "source"]
112
+
113
+ const getNodeContext = (node) => {
114
+ const context = {}
115
+ const hotAcceptAttribute = getHtmlNodeAttributeByName(node, "hot-accept")
116
+ if (hotAcceptAttribute) {
117
+ context.hotAccepted = true
118
+ }
119
+ const hotDeclineAttribute = getHtmlNodeAttributeByName(node, "hot-decline")
120
+ if (hotDeclineAttribute) {
121
+ context.hotAccepted = false
122
+ }
123
+ return context
124
+ }
125
+
126
+ const htmlNodeCanHotReload = (node) => {
127
+ if (node.nodeName === "link") {
128
+ const { isStylesheet, isRessourceHint } = parseLinkNode(node)
129
+ if (isStylesheet) {
130
+ // stylesheets can be hot replaced by default
131
+ return true
132
+ }
133
+ if (isRessourceHint) {
134
+ // for ressource hints html will be notified the underlying ressource has changed
135
+ // but we won't do anything (if the ressource is deleted we should?)
136
+ return true
137
+ }
138
+ return false
139
+ }
140
+ return [
141
+ // "script_src", // script src cannot hot reload
142
+ "a",
143
+ // Iframe will have their own event source client
144
+ // and can hot reload independently
145
+ // But if the iframe communicates with the parent iframe
146
+ // then we canot know for sure if the communication is broken
147
+ // ideally, if the iframe full-reload the page must full-reload too
148
+ // if the iframe hot-reload we don't know but we could assume there is nothing to do
149
+ // if there is [hot-accept] on the iframe
150
+ "iframe",
151
+ "img",
152
+ "source",
153
+ "image",
154
+ "use",
155
+ ].includes(node.nodeName)
156
+ }