@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,98 @@
1
+ export const babelPluginMetadataImportAssertions = () => {
2
+ return {
3
+ name: "metadata-import-assertions",
4
+ visitor: {
5
+ Program: (programPath, state) => {
6
+ const importAssertions = collectProgramImportAssertions(programPath)
7
+ state.file.metadata.importAssertions = importAssertions
8
+ },
9
+ },
10
+ }
11
+ }
12
+
13
+ /*
14
+ * Jsenv wont touch code where "specifier" or "type" is dynamic (see code below)
15
+ * ```js
16
+ * const file ="./style.css"
17
+ * const type = "css"
18
+ * import(file, { assert: { type }})
19
+ * ```
20
+ * Jsenv could throw an error because we know browser will fail to execute the code
21
+ * because import assertions are not supported.
22
+ * But for now (as it is simpler to do so) we let the browser throw the error
23
+ */
24
+ const collectProgramImportAssertions = (programPath) => {
25
+ const importAssertions = []
26
+ programPath.traverse({
27
+ CallExpression: (path) => {
28
+ if (path.node.callee.type !== "Import") {
29
+ // Some other function call, not import();
30
+ return
31
+ }
32
+ if (path.node.arguments[0].type !== "StringLiteral") {
33
+ // Non-string argument, probably a variable or expression, e.g.
34
+ // import(moduleId)
35
+ // import('./' + moduleName)
36
+ return
37
+ }
38
+ const args = path.node.arguments
39
+ const secondArg = args[1]
40
+ if (!secondArg) {
41
+ return
42
+ }
43
+ const { properties } = secondArg
44
+ const assertProperty = properties.find((property) => {
45
+ return property.key.name === "assert"
46
+ })
47
+ if (!assertProperty) {
48
+ return
49
+ }
50
+ const assertProperties = assertProperty.value.properties
51
+ const typePropertyNode = assertProperties.find((property) => {
52
+ return property.key.name === "type"
53
+ })
54
+ if (!typePropertyNode) {
55
+ return
56
+ }
57
+ const typePropertyValue = typePropertyNode.value
58
+ if (typePropertyValue.type !== "StringLiteral") {
59
+ return
60
+ }
61
+ const type = typePropertyValue.value
62
+ importAssertions.push({
63
+ path,
64
+ assert: {
65
+ type,
66
+ },
67
+ })
68
+ },
69
+
70
+ ImportDeclaration: (path) => {
71
+ const { assertions } = path.node
72
+ if (!assertions) {
73
+ return
74
+ }
75
+ if (assertions.length === 0) {
76
+ return
77
+ }
78
+ const typeAssertion = assertions.find(
79
+ (assertion) => assertion.key.name === "type",
80
+ )
81
+ if (!typeAssertion) {
82
+ return
83
+ }
84
+ const typeNode = typeAssertion.value
85
+ if (typeNode.type !== "StringLiteral") {
86
+ return
87
+ }
88
+ const type = typeNode.value
89
+ importAssertions.push({
90
+ path,
91
+ assert: {
92
+ type,
93
+ },
94
+ })
95
+ },
96
+ })
97
+ return importAssertions
98
+ }
@@ -1,4 +1,4 @@
1
- export const convertJsonTextToJavascriptModule = ({ code }) => {
1
+ export const convertJsonTextToJavascriptModule = ({ content }) => {
2
2
  // here we could do the following
3
3
  // return export default jsonText
4
4
  // This would return valid js, that would be minified later
@@ -6,6 +6,7 @@ export const convertJsonTextToJavascriptModule = ({ code }) => {
6
6
  // for js engine to parse JSON than JS
7
7
 
8
8
  return {
9
- code: `export default JSON.parse(${JSON.stringify(code.trim())})`,
9
+ contentType: "application/javascript",
10
+ content: `export default JSON.parse(${JSON.stringify(content.trim())})`,
10
11
  }
11
12
  }
@@ -0,0 +1,6 @@
1
+ export const convertTextToJavascriptModule = ({ content }) => {
2
+ return {
3
+ contentType: "application/javascript",
4
+ content: `export default ${JSON.stringify(content)}`,
5
+ }
6
+ }
@@ -0,0 +1,211 @@
1
+ import { applyBabelPlugins } from "@jsenv/utils/js_ast/apply_babel_plugins.js"
2
+ import { ContentType } from "@jsenv/utils/src/content_type.js"
3
+ import { createMagicSource } from "@jsenv/utils/sourcemap/magic_source.js"
4
+ import { injectQueryParamsIntoSpecifier } from "@jsenv/utils/urls/url_utils.js"
5
+ import { JS_QUOTES } from "@jsenv/utils/string/js_quotes.js"
6
+
7
+ import { babelPluginMetadataImportAssertions } from "./helpers/babel_plugin_metadata_import_assertions.js"
8
+ import { convertJsonTextToJavascriptModule } from "./helpers/json_module.js"
9
+ import { convertTextToJavascriptModule } from "./helpers/text_module.js"
10
+
11
+ export const jsenvPluginImportAssertions = () => {
12
+ const importAssertions = [
13
+ {
14
+ name: "jsenv:import_assertions",
15
+ appliesDuring: "*",
16
+ transform: {
17
+ js_module: async (
18
+ { url, generatedUrl, content },
19
+ { scenario, isSupportedOnRuntime, referenceUtils },
20
+ ) => {
21
+ const importTypesToHandle = getImportTypesToHandle({
22
+ scenario,
23
+ isSupportedOnRuntime,
24
+ })
25
+ if (importTypesToHandle.length === 0) {
26
+ return null
27
+ }
28
+ const { metadata } = await applyBabelPlugins({
29
+ babelPlugins: [babelPluginMetadataImportAssertions],
30
+ url,
31
+ generatedUrl,
32
+ content,
33
+ })
34
+ const { importAssertions } = metadata
35
+ const magicSource = createMagicSource(content)
36
+ importAssertions.forEach((importAssertion) => {
37
+ const assertType = importAssertion.assert.type
38
+ if (!importTypesToHandle.includes(assertType)) {
39
+ return
40
+ }
41
+ const { path } = importAssertion
42
+ const { node } = path
43
+ const importType = `${assertType}_module`
44
+ if (node.type === "CallExpression") {
45
+ const importSpecifierPath = path.get("arguments")[0]
46
+ const specifier = importSpecifierPath.node.value
47
+ const newSpecifier = injectQueryParamsIntoSpecifier(specifier, {
48
+ [importType]: "",
49
+ })
50
+ const [newReference, newUrlInfo] = referenceUtils.updateSpecifier(
51
+ JSON.stringify(specifier),
52
+ newSpecifier,
53
+ )
54
+ newUrlInfo.data.importType = importType
55
+ magicSource.replace({
56
+ start: importSpecifierPath.node.start,
57
+ end: importSpecifierPath.node.end,
58
+ replacement: newReference.generatedSpecifier,
59
+ })
60
+ const secondArgPath = path.get("arguments")[1]
61
+ magicSource.remove({
62
+ start: secondArgPath.node.start,
63
+ end: secondArgPath.node.end,
64
+ })
65
+ return
66
+ }
67
+ const importSpecifierPath = path.get("source")
68
+ const specifier = importSpecifierPath.node.value
69
+ const newSpecifier = injectQueryParamsIntoSpecifier(specifier, {
70
+ [importType]: "",
71
+ })
72
+ const [newReference, newUrlInfo] = referenceUtils.updateSpecifier(
73
+ JSON.stringify(specifier),
74
+ newSpecifier,
75
+ )
76
+ newUrlInfo.data.importType = importType
77
+ magicSource.replace({
78
+ start: importSpecifierPath.node.start,
79
+ end: importSpecifierPath.node.end,
80
+ replacement: newReference.generatedSpecifier,
81
+ })
82
+ const assertionsPath = path.get("assertions")[0]
83
+ magicSource.remove({
84
+ start: assertionsPath.node.start,
85
+ end: assertionsPath.node.end,
86
+ })
87
+ })
88
+ return magicSource.toContentAndSourcemap()
89
+ },
90
+ },
91
+ },
92
+ ]
93
+
94
+ const importTypeJson = {
95
+ name: "jsenv:import_type_json",
96
+ appliesDuring: "*",
97
+ finalize: ({ url, contentType, content }) => {
98
+ if (!new URL(url).searchParams.has("json_module")) {
99
+ return null
100
+ }
101
+ if (contentType !== "application/json") {
102
+ throw new Error(
103
+ `Unexpected content type on ${url}, should be "application/json" but got ${contentType}`,
104
+ )
105
+ }
106
+ return convertJsonTextToJavascriptModule({
107
+ content,
108
+ })
109
+ },
110
+ }
111
+
112
+ // not standard but I expect this to happen one day?
113
+ const importTypeText = {
114
+ name: "jsenv:import_type_text",
115
+ appliesDuring: "*",
116
+ finalize: ({ url, contentType, content }) => {
117
+ if (!new URL(url).searchParams.has("text_module")) {
118
+ return null
119
+ }
120
+ if (ContentType.isTextual(contentType)) {
121
+ throw new Error(
122
+ `Unexpected content type on ${url}, should be "text/*" but got ${contentType}`,
123
+ )
124
+ }
125
+ return convertTextToJavascriptModule({
126
+ content,
127
+ })
128
+ },
129
+ }
130
+
131
+ return [
132
+ importAssertions,
133
+ importTypeJson,
134
+ jsenvPluginImportTypeCss(),
135
+ importTypeText,
136
+ ]
137
+ }
138
+
139
+ const jsenvPluginImportTypeCss = () => {
140
+ const inlineContentClientFileUrl = new URL(
141
+ "../inline/client/inline_content.js",
142
+ import.meta.url,
143
+ ).href
144
+
145
+ return {
146
+ name: "jsenv:import_type_css",
147
+ appliesDuring: "*",
148
+ // load the original css url
149
+ load: ({ data }, { urlGraph, load }) => {
150
+ if (data.importType !== "css_module") {
151
+ return null
152
+ }
153
+ return load({
154
+ reference: data.originalReference,
155
+ urlInfo: urlGraph.getUrlInfo(data.originalReference.url),
156
+ })
157
+ },
158
+ transform: ({ url, data, contentType, content }, { referenceUtils }) => {
159
+ if (data.importType !== "css_module") {
160
+ return null
161
+ }
162
+ if (contentType !== "text/css") {
163
+ throw new Error(
164
+ `Unexpected content type on ${url}, should be "text/css" but got ${contentType}`,
165
+ )
166
+ }
167
+ const [reference] = referenceUtils.inject({
168
+ type: "js_import_export",
169
+ specifier: inlineContentClientFileUrl,
170
+ })
171
+ const cssText = JS_QUOTES.escapeSpecialChars(content, {
172
+ // If template string is choosen and runtime do not support template literals
173
+ // it's ok because "jsenv:new_inline_content" plugin executes after this one
174
+ // and convert template strings into raw strings
175
+ canUseTemplateString: true,
176
+ })
177
+ return {
178
+ type: "js_module",
179
+ contentType: "application/javascript",
180
+ content: `import { InlineContent } from ${reference.generatedSpecifier}
181
+
182
+ const css = new InlineContent(${cssText}, { type: "text/css" })
183
+ const stylesheet = new CSSStyleSheet()
184
+ stylesheet.replaceSync(css.text)
185
+ export default stylesheet`,
186
+ }
187
+ },
188
+ }
189
+ }
190
+
191
+ const getImportTypesToHandle = ({ scenario, isSupportedOnRuntime }) => {
192
+ // during build always replace import assertions with the js:
193
+ // - means rollup can bundle more js file together
194
+ // - means url versioning can work for css inlined in js
195
+ // - avoid rollup to see import assertions
196
+ // We would have to tell rollup to ignore import with assertion
197
+ if (scenario === "build") {
198
+ return ["json", "css", "text"]
199
+ }
200
+ const importTypes = []
201
+ if (!isSupportedOnRuntime("import_type_json")) {
202
+ importTypes.push("json")
203
+ }
204
+ if (!isSupportedOnRuntime("import_type_css")) {
205
+ importTypes.push("css")
206
+ }
207
+ if (!isSupportedOnRuntime("import_type_text")) {
208
+ importTypes.push("text")
209
+ }
210
+ return importTypes
211
+ }
@@ -0,0 +1,80 @@
1
+ /*
2
+ * Source code can contain the following
3
+ * - import.meta.dev
4
+ * - import.meta.test
5
+ * - import.meta.build
6
+ * They are either:
7
+ * - replaced by true: When scenario matches (import.meta.dev and it's the dev server)
8
+ * - left as is to be evaluated to undefined (import.meta.test but it's the dev server)
9
+ * - replaced by undefined (import.meta.dev but it's build; the goal is to ensure it's tree-shaked)
10
+ */
11
+
12
+ import { applyBabelPlugins } from "@jsenv/utils/js_ast/apply_babel_plugins.js"
13
+ import { createMagicSource } from "@jsenv/utils/sourcemap/magic_source.js"
14
+
15
+ import { collectProgramImportMetas } from "@jsenv/utils/js_ast/program_import_metas.js"
16
+
17
+ export const jsenvPluginImportMetaScenarios = () => {
18
+ return {
19
+ name: "jsenv:import_meta_scenario",
20
+ appliesDuring: "*",
21
+ transform: {
22
+ js_module: async ({ url, content }, { scenario }) => {
23
+ const { metadata } = await applyBabelPlugins({
24
+ babelPlugins: [babelPluginMetadataImportMetaScenarios],
25
+ url,
26
+ content,
27
+ })
28
+ const { dev = [], test = [], build = [] } = metadata.importMetaScenarios
29
+ const replacements = []
30
+ const replace = (path, value) => {
31
+ replacements.push({ path, value })
32
+ }
33
+ if (scenario === "dev") {
34
+ dev.forEach((path) => {
35
+ replace(path, true)
36
+ })
37
+ } else if (scenario === "test") {
38
+ test.forEach((path) => {
39
+ replace(path, true)
40
+ })
41
+ } else if (scenario === "build") {
42
+ dev.forEach((path) => {
43
+ replace(path, undefined)
44
+ })
45
+ test.forEach((path) => {
46
+ replace(path, undefined)
47
+ })
48
+ build.forEach((path) => {
49
+ replace(path, true)
50
+ })
51
+ }
52
+ const magicSource = createMagicSource(content)
53
+ replacements.forEach(({ path, value }) => {
54
+ magicSource.overwrite({
55
+ start: path.node.start,
56
+ end: path.node.end,
57
+ replacement: value,
58
+ })
59
+ })
60
+ return magicSource.toContentAndSourcemap()
61
+ },
62
+ },
63
+ }
64
+ }
65
+
66
+ const babelPluginMetadataImportMetaScenarios = () => {
67
+ return {
68
+ name: "metadata-import-meta-scenarios",
69
+ visitor: {
70
+ Program(programPath, state) {
71
+ const importMetas = collectProgramImportMetas(programPath)
72
+ state.file.metadata.importMetaScenarios = {
73
+ dev: importMetas.dev,
74
+ test: importMetas.test,
75
+ build: importMetas.build,
76
+ }
77
+ },
78
+ },
79
+ }
80
+ }
@@ -0,0 +1,212 @@
1
+ /*
2
+ * Plugin to read and apply importmap files found in html files.
3
+ * - feeds importmap files to jsenv kitchen
4
+ * - use importmap to resolve import (when there is one + fallback to other resolution mecanism)
5
+ * - inline importmap with [src=""]
6
+ *
7
+ * A correct importmap resolution should scope importmap resolution per html file.
8
+ * It would be doable by adding ?html_id to each js file in order to track
9
+ * the html file importing it.
10
+ * Considering it happens only when all the following conditions are met:
11
+ * - 2+ html files are using an importmap
12
+ * - the importmap used is not the same
13
+ * - the importmap contain conflicting mappings
14
+ * - these html files are both executed during the same scenario (dev, test, build)
15
+ * And that it would be ugly to see ?html_id all over the place
16
+ * -> The importmap resolution implemented here takes a shortcut and does the following:
17
+ * - All importmap found are merged into a single one that is applied to every import specifiers
18
+ */
19
+
20
+ import {
21
+ resolveImport,
22
+ composeTwoImportMaps,
23
+ normalizeImportMap,
24
+ } from "@jsenv/importmap"
25
+
26
+ import {
27
+ parseHtmlString,
28
+ stringifyHtmlAst,
29
+ findNode,
30
+ getHtmlNodeAttributeByName,
31
+ htmlNodePosition,
32
+ removeHtmlNodeAttributeByName,
33
+ setHtmlNodeText,
34
+ assignHtmlNodeAttributes,
35
+ getHtmlNodeTextNode,
36
+ removeHtmlNode,
37
+ } from "@jsenv/utils/html_ast/html_ast.js"
38
+ import { generateInlineContentUrl } from "@jsenv/core/packages/utils/urls/inline_content_url_generator.js"
39
+
40
+ export const jsenvPluginImportmap = () => {
41
+ let finalImportmap = null
42
+ const importmaps = {}
43
+ const onHtmlImportmapParsed = (importmap, htmlUrl) => {
44
+ importmaps[htmlUrl] = importmap
45
+ ? normalizeImportMap(importmap, htmlUrl)
46
+ : null
47
+ finalImportmap = Object.keys(importmaps).reduce((previous, url) => {
48
+ const importmap = importmaps[url]
49
+ if (!previous) {
50
+ return importmap
51
+ }
52
+ if (!importmap) {
53
+ return previous
54
+ }
55
+ return composeTwoImportMaps(previous, importmap)
56
+ }, null)
57
+ }
58
+
59
+ return {
60
+ name: "jsenv:importmap",
61
+ appliesDuring: "*",
62
+ resolve: {
63
+ js_import_export: ({ parentUrl, specifier }) => {
64
+ if (!finalImportmap) {
65
+ return null
66
+ }
67
+ try {
68
+ let fromMapping = false
69
+ const result = resolveImport({
70
+ specifier,
71
+ importer: parentUrl,
72
+ importMap: finalImportmap,
73
+ onImportMapping: () => {
74
+ fromMapping = true
75
+ },
76
+ })
77
+ if (fromMapping) {
78
+ return result
79
+ }
80
+ return null
81
+ } catch (e) {
82
+ if (e.message.includes("bare specifier")) {
83
+ // in theory we should throw to be compliant with web behaviour
84
+ // but for now it's simpler to return null
85
+ // and let a chance to other plugins to handle the bare specifier
86
+ // (node esm resolution)
87
+ // and we want importmap to be prio over node esm so we cannot put this plugin after
88
+ return null
89
+ }
90
+ throw e
91
+ }
92
+ },
93
+ },
94
+ transform: {
95
+ html: async (
96
+ { url, content, references },
97
+ { scenario, cook, urlGraph, referenceUtils },
98
+ ) => {
99
+ const htmlAst = parseHtmlString(content)
100
+ const importmap = findNode(htmlAst, (node) => {
101
+ if (node.nodeName !== "script") {
102
+ return false
103
+ }
104
+ const typeAttribute = getHtmlNodeAttributeByName(node, "type")
105
+ if (!typeAttribute || typeAttribute.value !== "importmap") {
106
+ return false
107
+ }
108
+ return true
109
+ })
110
+ if (!importmap) {
111
+ onHtmlImportmapParsed(null, url)
112
+ return null
113
+ }
114
+ const handleInlineImportmap = async (importmap, textNode) => {
115
+ const { line, column, lineEnd, columnEnd, isOriginal } =
116
+ htmlNodePosition.readNodePosition(importmap, {
117
+ preferOriginal: true,
118
+ })
119
+ const inlineImportmapUrl = generateInlineContentUrl({
120
+ url,
121
+ extension: ".importmap",
122
+ line,
123
+ column,
124
+ lineEnd,
125
+ columnEnd,
126
+ })
127
+ const [inlineImportmapReference, inlineImportmapUrlInfo] =
128
+ referenceUtils.foundInline({
129
+ type: "script_src",
130
+ line: line - 1,
131
+ column,
132
+ isOriginal,
133
+ specifier: inlineImportmapUrl,
134
+ contentType: "application/importmap+json",
135
+ content: textNode.value,
136
+ })
137
+ await cook({
138
+ reference: inlineImportmapReference,
139
+ urlInfo: inlineImportmapUrlInfo,
140
+ })
141
+ setHtmlNodeText(importmap, inlineImportmapUrlInfo.content)
142
+ onHtmlImportmapParsed(JSON.parse(inlineImportmapUrlInfo.content), url)
143
+ }
144
+ const handleImportmapWithSrc = async (importmap, src) => {
145
+ // Browser would throw on remote importmap
146
+ // and won't sent a request to the server for it
147
+ // We must precook the importmap to know its content and inline it into the HTML
148
+ // In this situation the ref to the importmap was already discovered
149
+ // when parsing the HTML
150
+ const importmapReference = references.find(
151
+ (reference) => reference.url === src,
152
+ )
153
+ const importmapUrlInfo = urlGraph.getUrlInfo(importmapReference.url)
154
+ await cook({
155
+ reference: importmapReference,
156
+ urlInfo: importmapUrlInfo,
157
+ })
158
+ onHtmlImportmapParsed(JSON.parse(importmapUrlInfo.content), url)
159
+ removeHtmlNodeAttributeByName(importmap, "src")
160
+ assignHtmlNodeAttributes(importmap, {
161
+ "content-src": src,
162
+ "inlined-by": "jsenv:importmap",
163
+ })
164
+ setHtmlNodeText(importmap, importmapUrlInfo.content)
165
+
166
+ const { line, column, lineEnd, columnEnd, isOriginal } =
167
+ htmlNodePosition.readNodePosition(importmap, {
168
+ preferOriginal: true,
169
+ })
170
+ const inlineImportmapUrl = generateInlineContentUrl({
171
+ url,
172
+ extension: ".importmap",
173
+ line,
174
+ column,
175
+ lineEnd,
176
+ columnEnd,
177
+ })
178
+ referenceUtils.becomesInline(importmapReference, {
179
+ line: line - 1,
180
+ column,
181
+ isOriginal,
182
+ specifier: inlineImportmapUrl,
183
+ contentType: "application/importmap+json",
184
+ content: importmapUrlInfo.content,
185
+ })
186
+ }
187
+
188
+ const srcAttribute = getHtmlNodeAttributeByName(importmap, "src")
189
+ const src = srcAttribute ? srcAttribute.value : undefined
190
+ if (src) {
191
+ await handleImportmapWithSrc(importmap, src)
192
+ } else {
193
+ const textNode = getHtmlNodeTextNode(importmap)
194
+ if (textNode) {
195
+ await handleInlineImportmap(importmap, textNode)
196
+ }
197
+ }
198
+ // once this plugin knows the importmap, it will use it
199
+ // to map imports. These import specifiers will be normalized
200
+ // by "formatReferencedUrl" making the importmap presence useless.
201
+ // In dev/test we keep importmap into the HTML to see it even if useless
202
+ // Duing build we get rid of it
203
+ if (scenario === "build") {
204
+ removeHtmlNode(importmap)
205
+ }
206
+ return {
207
+ content: stringifyHtmlAst(htmlAst),
208
+ }
209
+ },
210
+ },
211
+ }
212
+ }
@@ -0,0 +1,6 @@
1
+ function InlineContent(content, { type = "text/plain" }) {
2
+ this.text = content
3
+ this.type = type
4
+ }
5
+
6
+ export { InlineContent }
@@ -0,0 +1,70 @@
1
+ import { DataUrl } from "@jsenv/utils/urls/data_url.js"
2
+ import { ContentType } from "@jsenv/utils/src/content_type.js"
3
+
4
+ export const jsenvPluginDataUrls = () => {
5
+ return {
6
+ name: "jsenv:data_urls",
7
+ appliesDuring: "*",
8
+ resolve: ({ specifier }) => {
9
+ if (!specifier.startsWith("data:")) {
10
+ return null
11
+ }
12
+ return specifier
13
+ },
14
+ load: ({ url, data }) => {
15
+ if (!url.startsWith("data:")) {
16
+ return null
17
+ }
18
+ const { contentType, base64Flag, data: urlData } = DataUrl.parse(url)
19
+ data.base64Flag = base64Flag
20
+ return {
21
+ contentType,
22
+ content: contentFromUrlData({ contentType, base64Flag, urlData }),
23
+ }
24
+ },
25
+ formatReferencedUrl: (reference, { urlGraph, cook }) => {
26
+ if (!reference.url.startsWith("data:")) {
27
+ return null
28
+ }
29
+ if (reference.type === "sourcemap_comment") {
30
+ return null
31
+ }
32
+ return (async () => {
33
+ const urlInfo = urlGraph.getUrlInfo(reference.url)
34
+ await cook({
35
+ reference,
36
+ urlInfo,
37
+ })
38
+ if (urlInfo.originalContent === urlInfo.content) {
39
+ return reference.url
40
+ }
41
+ const specifier = DataUrl.stringify({
42
+ contentType: urlInfo.contentType,
43
+ base64Flag: urlInfo.data.base64Flag,
44
+ data: urlInfo.data.base64Flag
45
+ ? dataToBase64(urlInfo.content)
46
+ : String(urlInfo.content),
47
+ })
48
+ return specifier
49
+ })()
50
+ },
51
+ }
52
+ }
53
+
54
+ const contentFromUrlData = ({ contentType, base64Flag, urlData }) => {
55
+ if (ContentType.isTextual(contentType)) {
56
+ if (base64Flag) {
57
+ return base64ToString(urlData)
58
+ }
59
+ return urlData
60
+ }
61
+ if (base64Flag) {
62
+ return base64ToBuffer(urlData)
63
+ }
64
+ return Buffer.from(urlData)
65
+ }
66
+
67
+ const base64ToBuffer = (base64String) => Buffer.from(base64String, "base64")
68
+ const base64ToString = (base64String) =>
69
+ Buffer.from(base64String, "base64").toString("utf8")
70
+ const dataToBase64 = (data) => Buffer.from(data).toString("base64")