@jsenv/core 26.0.1 → 27.0.0-alpha.10

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 (465) hide show
  1. package/main.js +17 -24
  2. package/package.json +35 -71
  3. package/readme.md +30 -37
  4. package/src/build/build.js +867 -0
  5. package/src/build/build_urls_generator.js +73 -0
  6. package/src/build/inject_service_worker_urls.js +25 -0
  7. package/src/build/inject_version_mappings.js +63 -0
  8. package/src/build/plugins/bundle_js_module/jsenv_plugin_bundle_js_module.js +227 -0
  9. package/src/build/plugins/minify_html/jsenv_plugin_minify_html.js +30 -0
  10. package/src/build/plugins/minify_js/jsenv_plugin_minify_js.js +47 -0
  11. package/src/dev/plugins/autoreload/babel_plugin_metadata_import_meta_hot.js +98 -0
  12. package/src/dev/plugins/autoreload/client/autoreload_preference.js +11 -0
  13. package/src/dev/plugins/autoreload/client/event_source_client.js +186 -0
  14. package/src/{internal/dev_server/event_source_client → dev/plugins/autoreload/client}/event_source_connection.js +21 -25
  15. package/src/dev/plugins/autoreload/client/import_meta_hot.js +80 -0
  16. package/src/dev/plugins/autoreload/client/reload.js +101 -0
  17. package/src/dev/plugins/autoreload/client/url_helpers.js +20 -0
  18. package/src/dev/plugins/autoreload/html_hot_dependencies.js +156 -0
  19. package/src/dev/plugins/autoreload/jsenv_plugin_autoreload.js +374 -0
  20. package/src/dev/plugins/autoreload/sse_service.js +149 -0
  21. package/src/dev/plugins/explorer/client/explorer.html +607 -0
  22. package/src/{internal → dev/plugins/explorer/client}/jsenv.png +0 -0
  23. package/src/dev/plugins/explorer/jsenv_plugin_explorer.js +74 -0
  24. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/animation/toolbar_animation.js +0 -0
  25. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/eventsource/eventsource.css +2 -2
  26. package/src/dev/plugins/toolbar/client/eventsource/toolbar_eventsource.js +57 -0
  27. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/execution/execution.css +0 -0
  28. package/src/dev/plugins/toolbar/client/execution/toolbar_execution.js +88 -0
  29. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/focus/focus.css +0 -0
  30. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/focus/toolbar_focus.js +0 -0
  31. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/jsenv_logo.svg +0 -0
  32. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/notification/toolbar_notification.js +0 -0
  33. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/responsive/overflow_menu.css +0 -0
  34. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/responsive/toolbar_responsive.js +0 -0
  35. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/settings/settings.css +0 -0
  36. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/settings/toolbar_settings.js +1 -0
  37. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/theme/jsenv_theme.css +1 -15
  38. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/theme/light_theme.css +0 -17
  39. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/theme/toolbar_theme.js +0 -0
  40. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/toolbar.html +40 -199
  41. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/toolbar_injector.js +8 -28
  42. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/toolbar_main.css +0 -24
  43. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/toolbar_main.js +10 -56
  44. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/tooltip/tooltip.css +1 -1
  45. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/tooltip/tooltip.js +0 -0
  46. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/util/animation.js +0 -0
  47. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/util/dom.js +0 -0
  48. package/src/{internal/browser_utils → dev/plugins/toolbar/client/util}/fetch_using_xhr.js +0 -0
  49. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/util/fetching.js +2 -4
  50. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/util/iframe_to_parent_href.js +0 -0
  51. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/util/jsenv_logger.js +0 -0
  52. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/util/preferences.js +0 -0
  53. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/util/responsive.js +0 -0
  54. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/util/util.js +0 -0
  55. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/variant/variant.js +0 -0
  56. package/src/dev/plugins/toolbar/jsenv_plugin_toolbar.js +62 -0
  57. package/src/dev/start_dev_server.js +108 -0
  58. package/src/execute/execute.js +138 -0
  59. package/src/execute/run.js +208 -0
  60. package/src/execute/runtimes/browsers/chromium.js +8 -0
  61. package/src/execute/runtimes/browsers/firefox.js +7 -0
  62. package/src/execute/runtimes/browsers/from_playwright.js +464 -0
  63. package/src/{browser_runtimes.js → execute/runtimes/browsers/webkit.js} +4 -18
  64. package/src/{internal/node_launcher/child_process_options.js → execute/runtimes/node/child_exec_options.js} +25 -36
  65. package/src/{internal/node_launcher/node_controllable_file.mjs → execute/runtimes/node/controllable_file.mjs} +1 -18
  66. package/src/{internal/node_launcher/node_controllable_process.js → execute/runtimes/node/controlled_process.js} +128 -150
  67. package/src/execute/runtimes/node/exec_options.js +44 -0
  68. package/src/{internal/node_launcher → execute/runtimes/node}/kill_process_tree.js +3 -1
  69. package/src/execute/runtimes/node/node_process.js +92 -0
  70. package/src/execute/runtimes/node/node_worker_thread.js +28 -0
  71. package/src/omega/core_plugins/babel/global_this/babel_plugin_global_this_as_jsenv_import.js +35 -0
  72. package/{helpers/global-this/global-this.js → src/omega/core_plugins/babel/global_this/client/global_this.js} +0 -0
  73. package/src/{internal/compile_server/js → omega/core_plugins/babel/helpers}/babel_plugin_babel_helpers_as_jsenv_imports.js +15 -20
  74. package/src/omega/core_plugins/babel/helpers/babel_plugin_structure.js +176 -0
  75. package/src/{internal/features → omega/core_plugins/babel/helpers}/babel_plugins_compatibility.js +1 -24
  76. package/src/omega/core_plugins/babel/jsenv_plugin_babel.js +111 -0
  77. package/src/omega/core_plugins/babel/new_stylesheet/babel_plugin_new_stylesheet_as_jsenv_import.js +117 -0
  78. package/{helpers/babel → src/omega/core_plugins/babel/new_stylesheet/client}/.eslintrc.cjs +1 -1
  79. package/{helpers/new_stylesheet → src/omega/core_plugins/babel/new_stylesheet/client}/new_stylesheet.js +0 -0
  80. package/src/omega/core_plugins/babel/regenerator_runtime/babel_plugin_regenerator_runtime_as_jsenv_import.js +34 -0
  81. package/{helpers/regenerator-runtime/regenerator-runtime.js → src/omega/core_plugins/babel/regenerator_runtime/client/regenerator_runtime.js} +0 -0
  82. package/src/omega/core_plugins/commonjs_globals/jsenv_plugin_commonjs_globals.js +169 -0
  83. package/src/omega/core_plugins/file_urls/jsenv_plugin_file_urls.js +67 -0
  84. package/src/omega/core_plugins/filesystem_magic/jsenv_plugin_filesystem_magic.js +58 -0
  85. package/src/{internal/browser_client → omega/core_plugins/html_supervisor/client}/error_in_document.js +10 -16
  86. package/src/{internal/browser_client → omega/core_plugins/html_supervisor/client}/error_in_notification.js +0 -0
  87. package/src/omega/core_plugins/html_supervisor/client/html_supervisor_installer.js +168 -0
  88. package/src/omega/core_plugins/html_supervisor/client/html_supervisor_setup.js +77 -0
  89. package/src/{internal/browser_client → omega/core_plugins/html_supervisor/client}/perf_browser.js +0 -0
  90. package/src/{internal/runtime_client → omega/core_plugins/html_supervisor/client}/uneval_exception.js +0 -0
  91. package/src/omega/core_plugins/html_supervisor/jsenv_plugin_html_supervisor.js +233 -0
  92. package/src/omega/core_plugins/import_assertions/helpers/babel_plugin_metadata_import_assertions.js +98 -0
  93. package/src/{internal/building/import_assertions → omega/core_plugins/import_assertions/helpers}/json_module.js +3 -2
  94. package/src/omega/core_plugins/import_assertions/helpers/text_module.js +6 -0
  95. package/src/omega/core_plugins/import_assertions/jsenv_plugin_import_assertions.js +211 -0
  96. package/src/omega/core_plugins/import_meta_scenarios/jsenv_plugin_import_meta_scenarios.js +90 -0
  97. package/src/omega/core_plugins/importmap/jsenv_plugin_importmap.js +212 -0
  98. package/src/omega/core_plugins/inject_globals/jsenv_plugin_inject_globals.js +27 -0
  99. package/src/omega/core_plugins/inline/client/inline_content.js +6 -0
  100. package/src/omega/core_plugins/inline/jsenv_plugin_data_urls.js +70 -0
  101. package/src/omega/core_plugins/inline/jsenv_plugin_inline.js +13 -0
  102. package/src/omega/core_plugins/inline/jsenv_plugin_inline_query_param.js +42 -0
  103. package/src/omega/core_plugins/inline/jsenv_plugin_js_and_css_inside_html.js +142 -0
  104. package/src/omega/core_plugins/inline/jsenv_plugin_new_inline_content.js +207 -0
  105. package/src/omega/core_plugins/leading_slash/jsenv_plugin_leading_slash.js +12 -0
  106. package/src/omega/core_plugins/node_esm_resolution/jsenv_plugin_node_esm_resolution.js +77 -0
  107. package/src/omega/core_plugins/url_resolution/jsenv_plugin_url_resolution.js +28 -0
  108. package/src/omega/core_plugins/url_version/jsenv_plugin_url_version.js +50 -0
  109. package/src/omega/core_plugins.js +42 -0
  110. package/src/omega/errors.js +168 -0
  111. package/src/omega/file_url_converter.js +21 -0
  112. package/src/omega/kitchen.js +776 -0
  113. package/src/omega/omega_server.js +129 -0
  114. package/src/omega/plugin_controller.js +240 -0
  115. package/src/omega/runtime_support/default_runtime_support.js +13 -0
  116. package/src/omega/runtime_support/features_compatibility.js +130 -0
  117. package/src/omega/runtime_support/runtime_support.js +52 -0
  118. package/src/omega/server/file_service.js +155 -0
  119. package/src/omega/server/user_agent.js +22 -0
  120. package/src/omega/url_graph/url_graph_load.js +69 -0
  121. package/src/omega/url_graph/url_graph_report.js +151 -0
  122. package/src/omega/url_graph/url_graph_sort.js +29 -0
  123. package/src/omega/url_graph/url_info_transformations.js +161 -0
  124. package/src/omega/url_graph.js +133 -0
  125. package/src/omega/url_mentions/css_url_mentions.js +63 -0
  126. package/src/omega/url_mentions/html_url_mentions.js +185 -0
  127. package/src/omega/url_mentions/js_module_url_mentions.js +91 -0
  128. package/src/omega/url_mentions/parse_url_mentions.js +37 -0
  129. package/src/omega/url_mentions/worker_classic_url_mentions.js +37 -0
  130. package/src/{internal/executing → test}/execute_plan.js +156 -211
  131. package/src/{execute_test_plan.js → test/execute_test_plan.js} +36 -81
  132. package/src/{internal/executing → test}/execution_colors.js +0 -0
  133. package/src/{internal/executing → test}/execution_steps.js +2 -8
  134. package/src/{internal/executing → test}/gc.js +0 -0
  135. package/src/test/logs_file_execution.js +223 -0
  136. package/dist/browser_client/asset-manifest.json +0 -4
  137. package/dist/browser_client/browser_client_fb33eaa4.js +0 -5320
  138. package/dist/browser_client/browser_client_fb33eaa4.js.map +0 -1089
  139. package/dist/build_manifest.js +0 -12
  140. package/dist/compile_proxy/asset-manifest.json +0 -4
  141. package/dist/compile_proxy/compile_proxy.html__inline__20_651d1e7b.js.map +0 -343
  142. package/dist/compile_proxy/compile_proxy_62f952c4.html +0 -2245
  143. package/dist/event_source_client/asset-manifest.json +0 -4
  144. package/dist/event_source_client/event_source_client_69f48287.js +0 -354
  145. package/dist/event_source_client/event_source_client_69f48287.js.map +0 -128
  146. package/dist/redirector/asset-manifest.json +0 -4
  147. package/dist/redirector/redirector.html__inline__12_171e07b4.js.map +0 -349
  148. package/dist/redirector/redirector_8117ec92.html +0 -2290
  149. package/dist/toolbar/asset-manifest.json +0 -13
  150. package/dist/toolbar/assets/compilation.css_7421bd55.map +0 -12
  151. package/dist/toolbar/assets/eventsource.css_c0c71e7b.map +0 -12
  152. package/dist/toolbar/assets/execution.css_f3377c10.map +0 -12
  153. package/dist/toolbar/assets/focus.css_896f3e45.map +0 -12
  154. package/dist/toolbar/assets/light_theme.css_5bff0336.map +0 -12
  155. package/dist/toolbar/assets/overflow_menu.css_9a0fc3d8.map +0 -12
  156. package/dist/toolbar/assets/settings.css_942b5a9e.map +0 -12
  157. package/dist/toolbar/assets/toolbar_main.css_b1c67dd7.map +0 -28
  158. package/dist/toolbar/assets/tooltip.css_a94a8bdd.map +0 -12
  159. package/dist/toolbar/toolbar_b0c9100c.html +0 -4976
  160. package/dist/toolbar/toolbar_main_f54c1bb0.js.map +0 -776
  161. package/dist/toolbar_injector/asset-manifest.json +0 -5
  162. package/dist/toolbar_injector/assets/jsenv_logo_192011c2.svg +0 -95
  163. package/dist/toolbar_injector/toolbar_injector_65b501eb.js +0 -976
  164. package/dist/toolbar_injector/toolbar_injector_65b501eb.js.map +0 -294
  165. package/helpers/babel/AsyncGenerator/AsyncGenerator.js +0 -81
  166. package/helpers/babel/AwaitValue/AwaitValue.js +0 -3
  167. package/helpers/babel/applyDecoratorDescriptor/applyDecoratorDescriptor.js +0 -33
  168. package/helpers/babel/arrayLikeToArray/arrayLikeToArray.js +0 -7
  169. package/helpers/babel/arrayWithHoles/arrayWithHoles.js +0 -4
  170. package/helpers/babel/arrayWithoutHoles/arrayWithoutHoles.js +0 -6
  171. package/helpers/babel/assertThisInitialized/assertThisInitialized.js +0 -7
  172. package/helpers/babel/asyncGeneratorDelegate/asyncGeneratorDelegate.js +0 -40
  173. package/helpers/babel/asyncIterator/asyncIterator.js +0 -65
  174. package/helpers/babel/asyncToGenerator/asyncToGenerator.js +0 -34
  175. package/helpers/babel/awaitAsyncGenerator/awaitAsyncGenerator.js +0 -5
  176. package/helpers/babel/classApplyDescriptorDestructureSet/classApplyDescriptorDestructureSet.js +0 -20
  177. package/helpers/babel/classApplyDescriptorGet/classApplyDescriptorGet.js +0 -6
  178. package/helpers/babel/classApplyDescriptorSet/classApplyDescriptorSet.js +0 -13
  179. package/helpers/babel/classCallCheck/classCallCheck.js +0 -5
  180. package/helpers/babel/classCheckPrivateStaticAccess/classCheckPrivateStaticAccess.js +0 -5
  181. package/helpers/babel/classCheckPrivateStaticFieldDescriptor/classCheckPrivateStaticFieldDescriptor.js +0 -6
  182. package/helpers/babel/classExtractFieldDescriptor/classExtractFieldDescriptor.js +0 -7
  183. package/helpers/babel/classNameTDZError/classNameTDZError.js +0 -4
  184. package/helpers/babel/classPrivateFieldDestructureSet/classPrivateFieldDestructureSet.js +0 -7
  185. package/helpers/babel/classPrivateFieldGet/classPrivateFieldGet.js +0 -7
  186. package/helpers/babel/classPrivateFieldLooseBase/classPrivateFieldLooseBase.js +0 -6
  187. package/helpers/babel/classPrivateFieldLooseKey/classPrivateFieldLooseKey.js +0 -5
  188. package/helpers/babel/classPrivateFieldSet/classPrivateFieldSet.js +0 -8
  189. package/helpers/babel/classPrivateMethodGet/classPrivateMethodGet.js +0 -6
  190. package/helpers/babel/classPrivateMethodSet/classPrivateMethodSet.js +0 -3
  191. package/helpers/babel/classStaticPrivateFieldSpecGet/classStaticPrivateFieldSpecGet.js +0 -9
  192. package/helpers/babel/classStaticPrivateFieldSpecSet/classStaticPrivateFieldSpecSet.js +0 -15
  193. package/helpers/babel/classStaticPrivateMethodGet/classStaticPrivateMethodGet.js +0 -6
  194. package/helpers/babel/classStaticPrivateMethodSet/classStaticPrivateMethodSet.js +0 -3
  195. package/helpers/babel/construct/construct.js +0 -16
  196. package/helpers/babel/createClass/createClass.js +0 -15
  197. package/helpers/babel/createForOfIteratorHelper/createForOfIteratorHelper.js +0 -60
  198. package/helpers/babel/createForOfIteratorHelperLoose/createForOfIteratorHelperLoose.js +0 -23
  199. package/helpers/babel/createRawReactElement/createRawReactElement.js +0 -50
  200. package/helpers/babel/createSuper/createSuper.js +0 -22
  201. package/helpers/babel/decorate/decorate.js +0 -403
  202. package/helpers/babel/defaults/defaults.js +0 -11
  203. package/helpers/babel/defineEnumerableProperties/defineEnumerableProperties.js +0 -23
  204. package/helpers/babel/defineProperty/defineProperty.js +0 -18
  205. package/helpers/babel/extends/extends.js +0 -14
  206. package/helpers/babel/get/get.js +0 -19
  207. package/helpers/babel/getPrototypeOf/getPrototypeOf.js +0 -4
  208. package/helpers/babel/inherits/inherits.js +0 -19
  209. package/helpers/babel/inheritsLoose/inheritsLoose.js +0 -7
  210. package/helpers/babel/initializerDefineProperty/initializerDefineProperty.js +0 -10
  211. package/helpers/babel/initializerWarningHelper/initializerWarningHelper.js +0 -6
  212. package/helpers/babel/instanceof/instanceof.js +0 -6
  213. package/helpers/babel/interopRequireDefault/interopRequireDefault.js +0 -3
  214. package/helpers/babel/interopRequireWildcard/interopRequireWildcard.js +0 -37
  215. package/helpers/babel/isNativeFunction/isNativeFunction.js +0 -4
  216. package/helpers/babel/isNativeReflectConstruct/isNativeReflectConstruct.js +0 -21
  217. package/helpers/babel/iterableToArray/iterableToArray.js +0 -7
  218. package/helpers/babel/iterableToArrayLimit/iterableToArrayLimit.js +0 -36
  219. package/helpers/babel/iterableToArrayLimitLoose/iterableToArrayLimitLoose.js +0 -10
  220. package/helpers/babel/jsx/jsx.js +0 -50
  221. package/helpers/babel/maybeArrayLike/maybeArrayLike.js +0 -10
  222. package/helpers/babel/newArrowCheck/newArrowCheck.js +0 -5
  223. package/helpers/babel/nonIterableRest/nonIterableRest.js +0 -5
  224. package/helpers/babel/nonIterableSpread/nonIterableSpread.js +0 -5
  225. package/helpers/babel/objectDestructuringEmpty/objectDestructuringEmpty.js +0 -3
  226. package/helpers/babel/objectSpread/objectSpread.js +0 -23
  227. package/helpers/babel/objectSpread2/objectSpread2.js +0 -41
  228. package/helpers/babel/objectWithoutProperties/objectWithoutProperties.js +0 -19
  229. package/helpers/babel/objectWithoutPropertiesLoose/objectWithoutPropertiesLoose.js +0 -13
  230. package/helpers/babel/possibleConstructorReturn/possibleConstructorReturn.js +0 -10
  231. package/helpers/babel/readOnlyError/readOnlyError.js +0 -4
  232. package/helpers/babel/readme.md +0 -8
  233. package/helpers/babel/set/set.js +0 -44
  234. package/helpers/babel/setPrototypeOf/setPrototypeOf.js +0 -6
  235. package/helpers/babel/skipFirstGeneratorNext/skipFirstGeneratorNext.js +0 -8
  236. package/helpers/babel/slicedToArray/slicedToArray.js +0 -10
  237. package/helpers/babel/slicedToArrayLoose/slicedToArrayLoose.js +0 -13
  238. package/helpers/babel/superPropBase/superPropBase.js +0 -10
  239. package/helpers/babel/taggedTemplateLiteral/taggedTemplateLiteral.js +0 -10
  240. package/helpers/babel/taggedTemplateLiteralLoose/taggedTemplateLiteralLoose.js +0 -7
  241. package/helpers/babel/tdz/tdz.js +0 -4
  242. package/helpers/babel/temporalRef/temporalRef.js +0 -6
  243. package/helpers/babel/temporalUndefined/temporalUndefined.js +0 -3
  244. package/helpers/babel/toArray/toArray.js +0 -10
  245. package/helpers/babel/toConsumableArray/toConsumableArray.js +0 -10
  246. package/helpers/babel/toPrimitive/toPrimitive.js +0 -10
  247. package/helpers/babel/toPropertyKey/toPropertyKey.js +0 -6
  248. package/helpers/babel/typeof/typeof.js +0 -14
  249. package/helpers/babel/unsupportedIterableToArray/unsupportedIterableToArray.js +0 -12
  250. package/helpers/babel/wrapAsyncGenerator/wrapAsyncGenerator.js +0 -8
  251. package/helpers/babel/wrapNativeSuper/wrapNativeSuper.js +0 -30
  252. package/helpers/babel/wrapRegExp/wrapRegExp.js +0 -63
  253. package/helpers/babel/writeOnlyError/writeOnlyError.js +0 -4
  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/build_project.js +0 -336
  257. package/src/commonjs_to_js_module.js +0 -180
  258. package/src/dev_server.js +0 -302
  259. package/src/execute.js +0 -184
  260. package/src/import_using_child_process.js +0 -68
  261. package/src/internal/browser_client/browser_client.js +0 -220
  262. package/src/internal/browser_client/browser_client_factory.js +0 -144
  263. package/src/internal/browser_client/browser_error_stack_remap.js +0 -43
  264. package/src/internal/browser_client/browser_system.js +0 -216
  265. package/src/internal/browser_client/module_namespace_transfer.js +0 -90
  266. package/src/internal/browser_detection/browser_detection.js +0 -65
  267. package/src/internal/browser_detection/detect_android.js +0 -13
  268. package/src/internal/browser_detection/detect_chrome.js +0 -28
  269. package/src/internal/browser_detection/detect_edge.js +0 -13
  270. package/src/internal/browser_detection/detect_electron.js +0 -1
  271. package/src/internal/browser_detection/detect_firefox.js +0 -17
  272. package/src/internal/browser_detection/detect_internet_explorer.js +0 -14
  273. package/src/internal/browser_detection/detect_ios.js +0 -19
  274. package/src/internal/browser_detection/detect_opera.js +0 -27
  275. package/src/internal/browser_detection/detect_safari.js +0 -13
  276. package/src/internal/browser_detection/user_agent_data.js +0 -25
  277. package/src/internal/browser_detection/util.js +0 -13
  278. package/src/internal/browser_launcher/browser_runtime_profile.js +0 -81
  279. package/src/internal/browser_launcher/execute_html_file.js +0 -355
  280. package/src/internal/browser_launcher/from_playwright.js +0 -320
  281. package/src/internal/browser_launcher/page_errors_and_logs.js +0 -77
  282. package/src/internal/browser_utils/fetch_and_eval.js +0 -27
  283. package/src/internal/browser_utils/fetch_and_eval_using_script.js +0 -47
  284. package/src/internal/browser_utils/fetch_browser.js +0 -34
  285. package/src/internal/browser_utils/fetch_json.js +0 -7
  286. package/src/internal/building/build_logs.js +0 -134
  287. package/src/internal/building/build_stats.js +0 -100
  288. package/src/internal/building/build_url_generator.js +0 -153
  289. package/src/internal/building/build_using_rollup.js +0 -359
  290. package/src/internal/building/css/apply_post_css.js +0 -55
  291. package/src/internal/building/css/jsenv_parse_css.js +0 -260
  292. package/src/internal/building/css/move_css_urls.js +0 -44
  293. package/src/internal/building/css/parse_css_urls.js +0 -38
  294. package/src/internal/building/css/postcss_plugin_url_visitor.js +0 -245
  295. package/src/internal/building/css/replace_css_urls.js +0 -68
  296. package/src/internal/building/global_format/es_to_system.js +0 -34
  297. package/src/internal/building/html/html_node_mutations.js +0 -29
  298. package/src/internal/building/html/html_scan.js +0 -70
  299. package/src/internal/building/html/jsenv_parse_html.js +0 -813
  300. package/src/internal/building/html/minify_html.js +0 -7
  301. package/src/internal/building/import_assertions/css_module.js +0 -43
  302. package/src/internal/building/import_references.js +0 -80
  303. package/src/internal/building/importmap/jsenv_parse_importmap.js +0 -28
  304. package/src/internal/building/js/babel_plugin_inline_worker_imports.js +0 -96
  305. package/src/internal/building/js/jsenv_parse_js.js +0 -122
  306. package/src/internal/building/js/minify_js.js +0 -33
  307. package/src/internal/building/js/transform_worker.js +0 -55
  308. package/src/internal/building/json/jsenv_parse_json.js +0 -11
  309. package/src/internal/building/parse_ressource.js +0 -207
  310. package/src/internal/building/ressource_builder.js +0 -1098
  311. package/src/internal/building/ressource_builder_util.js +0 -194
  312. package/src/internal/building/rollup_plugin_jsenv.js +0 -1965
  313. package/src/internal/building/sort_pathnames.js +0 -10
  314. package/src/internal/building/sourcemap/sourcemap_loader.js +0 -70
  315. package/src/internal/building/svg/jsenv_parse_svg.js +0 -112
  316. package/src/internal/building/url_fetcher.js +0 -85
  317. package/src/internal/building/url_loader.js +0 -127
  318. package/src/internal/building/url_trace.js +0 -229
  319. package/src/internal/building/url_versioning/resolve_import_url_helper.js +0 -12
  320. package/src/internal/building/url_versioning/url_versioning.js +0 -65
  321. package/src/internal/building/webmanifest/jsenv_parse_webmanifest.js +0 -48
  322. package/src/internal/compile_server/commonjs/rollup_plugin_commonjs_named_exports.js +0 -187
  323. package/src/internal/compile_server/compile_file.js +0 -273
  324. package/src/internal/compile_server/compile_server.js +0 -519
  325. package/src/internal/compile_server/compiled_file_service.js +0 -264
  326. package/src/internal/compile_server/html/html_ast.js +0 -534
  327. package/src/internal/compile_server/html/html_source_file_service.js +0 -453
  328. package/src/internal/compile_server/html/jsenv_compile_html.js +0 -674
  329. package/src/internal/compile_server/importmap/jsenv_compile_importmap.js +0 -28
  330. package/src/internal/compile_server/js/ansi_to_html.js +0 -9
  331. package/src/internal/compile_server/js/babelHelper.js +0 -145
  332. package/src/internal/compile_server/js/babel_parse_error.js +0 -9
  333. package/src/internal/compile_server/js/babel_plugin_global_this_as_jsenv_import.js +0 -34
  334. package/src/internal/compile_server/js/babel_plugin_import_assertions.js +0 -121
  335. package/src/internal/compile_server/js/babel_plugin_import_metadata.js +0 -18
  336. package/src/internal/compile_server/js/babel_plugin_import_visitor.js +0 -84
  337. package/src/internal/compile_server/js/babel_plugin_new_stylesheet_as_jsenv_import.js +0 -113
  338. package/src/internal/compile_server/js/babel_plugin_proxy_external_imports.js +0 -31
  339. package/src/internal/compile_server/js/babel_plugin_regenerator_runtime_as_jsenv_import.js +0 -48
  340. package/src/internal/compile_server/js/babel_plugin_replace_expressions.js +0 -101
  341. package/src/internal/compile_server/js/babel_plugin_systemjs_prepend.js +0 -23
  342. package/src/internal/compile_server/js/babel_plugin_transform_import_meta.js +0 -134
  343. package/src/internal/compile_server/js/babel_plugins.js +0 -37
  344. package/src/internal/compile_server/js/generateBabelHelper.js +0 -36
  345. package/src/internal/compile_server/js/js_transformer.js +0 -195
  346. package/src/internal/compile_server/js/jsenv_compile_js.js +0 -62
  347. package/src/internal/compile_server/js/load_babel_plugin_map_from_file.js +0 -49
  348. package/src/internal/compile_server/jsenv_directory/comparison_utils.js +0 -27
  349. package/src/internal/compile_server/jsenv_directory/compilation_result.js +0 -243
  350. package/src/internal/compile_server/jsenv_directory/compilation_result_from_build.js +0 -184
  351. package/src/internal/compile_server/jsenv_directory/compile_asset.js +0 -24
  352. package/src/internal/compile_server/jsenv_directory/compile_context.js +0 -60
  353. package/src/internal/compile_server/jsenv_directory/compile_profile.js +0 -217
  354. package/src/internal/compile_server/jsenv_directory/file_lock_registry.js +0 -24
  355. package/src/internal/compile_server/jsenv_directory/file_lock_registry.test.js +0 -47
  356. package/src/internal/compile_server/jsenv_directory/fs_optimized_for_cache.js +0 -57
  357. package/src/internal/compile_server/jsenv_directory/jsenv_directory.js +0 -183
  358. package/src/internal/compile_server/jsenv_directory/reuse_or_create_compiled_file.js +0 -269
  359. package/src/internal/compile_server/jsenv_directory/update_compile_cache.js +0 -131
  360. package/src/internal/compile_server/jsenv_directory/validate_compile_cache.js +0 -264
  361. package/src/internal/compile_server/sse_service/sse_service.js +0 -369
  362. package/src/internal/coverage/babel_plugin_instrument.js +0 -90
  363. package/src/internal/coverage/coverage_reporter_html_directory.js +0 -37
  364. package/src/internal/coverage/coverage_reporter_json_file.js +0 -22
  365. package/src/internal/coverage/coverage_reporter_text_log.js +0 -20
  366. package/src/internal/coverage/empty_coverage_factory.js +0 -70
  367. package/src/internal/coverage/file_by_file_coverage.js +0 -28
  368. package/src/internal/coverage/istanbul_coverage_composition.js +0 -28
  369. package/src/internal/coverage/istanbul_coverage_map_from_coverage.js +0 -16
  370. package/src/internal/coverage/list_files_not_covered.js +0 -20
  371. package/src/internal/coverage/missing_coverage.js +0 -46
  372. package/src/internal/coverage/report_to_coverage.js +0 -198
  373. package/src/internal/coverage/v8_and_istanbul.js +0 -38
  374. package/src/internal/coverage/v8_coverage_composition.js +0 -23
  375. package/src/internal/coverage/v8_coverage_from_directory.js +0 -86
  376. package/src/internal/coverage/v8_coverage_to_istanbul.js +0 -100
  377. package/src/internal/data_url.js +0 -54
  378. package/src/internal/dev_server/event_source_client/event_source_client.js +0 -63
  379. package/src/internal/dev_server/event_source_client/file_changes.js +0 -82
  380. package/src/internal/dev_server/event_source_client/livereload_preference.js +0 -13
  381. package/src/internal/dev_server/exploring/exploring.css +0 -237
  382. package/src/internal/dev_server/exploring/exploring.html +0 -79
  383. package/src/internal/dev_server/exploring/exploring.js +0 -243
  384. package/src/internal/dev_server/exploring/fetch_exploring_json.js +0 -19
  385. package/src/internal/dev_server/toolbar/compilation/compilation.css +0 -23
  386. package/src/internal/dev_server/toolbar/compilation/toolbar_compilation.js +0 -202
  387. package/src/internal/dev_server/toolbar/eventsource/toolbar_eventsource.js +0 -83
  388. package/src/internal/dev_server/toolbar/execution/toolbar_execution.js +0 -91
  389. package/src/internal/error_stack_remap/install_error_stack_remapping.js +0 -142
  390. package/src/internal/error_stack_remap/remap_call_site.js +0 -315
  391. package/src/internal/error_stack_remap/remap_stack.js +0 -218
  392. package/src/internal/error_stack_remap/stringify_stack.js +0 -9
  393. package/src/internal/executing/launch_and_execute.js +0 -458
  394. package/src/internal/executing/logs_file_execution.js +0 -160
  395. package/src/internal/executing/logs_plan_summary.js +0 -144
  396. package/src/internal/features/browser_feature_detection/browser_feature_detect_dynamic_import.js +0 -20
  397. package/src/internal/features/browser_feature_detection/browser_feature_detect_import_assertions_css.js +0 -23
  398. package/src/internal/features/browser_feature_detection/browser_feature_detect_import_assertions_json.js +0 -25
  399. package/src/internal/features/browser_feature_detection/browser_feature_detect_importmap.js +0 -37
  400. package/src/internal/features/browser_feature_detection/browser_feature_detect_new_stylesheet.js +0 -9
  401. package/src/internal/features/browser_feature_detection/browser_feature_detect_top_level_await.js +0 -14
  402. package/src/internal/features/browser_feature_detection/browser_feature_detection.js +0 -89
  403. package/src/internal/features/browser_feature_detection/compile_proxy.html +0 -27
  404. package/src/internal/features/browser_feature_detection/execute_with_script_module.js +0 -24
  405. package/src/internal/features/features_compat_from_runtime.js +0 -38
  406. package/src/internal/features/features_compat_from_runtime_support.js +0 -31
  407. package/src/internal/features/features_compatibility.js +0 -37
  408. package/src/internal/features/node_feature_detection/feature_detect_dynamic_import.mjs +0 -5
  409. package/src/internal/features/node_feature_detection/feature_detect_top_level_await.mjs +0 -1
  410. package/src/internal/features/node_feature_detection/node_feature_detect_dynamic_import.js +0 -5
  411. package/src/internal/features/node_feature_detection/node_feature_detect_top_level_await.js +0 -16
  412. package/src/internal/features/node_feature_detection/node_feature_detection.js +0 -66
  413. package/src/internal/fetching.js +0 -28
  414. package/src/internal/import_resolution/default_extension.js +0 -40
  415. package/src/internal/import_resolution/import_resolver_importmap.js +0 -64
  416. package/src/internal/import_resolution/import_resolver_node.js +0 -254
  417. package/src/internal/import_resolution/importmap_default.js +0 -37
  418. package/src/internal/jsenv_builds.js +0 -19
  419. package/src/internal/jsenv_params_assertions.js +0 -12
  420. package/src/internal/jsenv_remote_directory.js +0 -156
  421. package/src/internal/logs/byte.js +0 -10
  422. package/src/internal/logs/byte_as_file_size.js +0 -9
  423. package/src/internal/logs/ms_as_duration.js +0 -12
  424. package/src/internal/memoize.js +0 -24
  425. package/src/internal/node_launcher/eval_source.js +0 -6
  426. package/src/internal/node_launcher/fetch_source.js +0 -8
  427. package/src/internal/node_launcher/node_error_stack_remap.js +0 -22
  428. package/src/internal/node_launcher/node_execution_dynamic_import.js +0 -75
  429. package/src/internal/node_launcher/node_execution_performance.js +0 -67
  430. package/src/internal/node_launcher/node_execution_systemjs.js +0 -125
  431. package/src/internal/node_launcher/node_runtime_report.js +0 -77
  432. package/src/internal/node_launcher/node_system.js +0 -192
  433. package/src/internal/node_launcher/perf_node.js +0 -13
  434. package/src/internal/node_launcher/process_options.js +0 -46
  435. package/src/internal/node_launcher/value_install.js +0 -14
  436. package/src/internal/origin_directory_converter.js +0 -62
  437. package/src/internal/promise_race.js +0 -19
  438. package/src/internal/redirector/redirector.html +0 -40
  439. package/src/internal/regexp_escape.js +0 -34
  440. package/src/internal/require.js +0 -3
  441. package/src/internal/response_validation.js +0 -130
  442. package/src/internal/runtime_client/module_registration.js +0 -207
  443. package/src/internal/runtime_client/s.js +0 -864
  444. package/src/internal/runtime_client/s.js.md +0 -1
  445. package/src/internal/runtime_support/jsenv_runtime_support.js +0 -15
  446. package/src/internal/runtime_support/runtime_support.js +0 -70
  447. package/src/internal/semantic_versioning/compare_versions.js +0 -28
  448. package/src/internal/semantic_versioning/highest_version.js +0 -11
  449. package/src/internal/semantic_versioning/is_above.js +0 -5
  450. package/src/internal/semantic_versioning/is_below.js +0 -5
  451. package/src/internal/semantic_versioning/is_equal.js +0 -3
  452. package/src/internal/semantic_versioning/lowest_version.js +0 -11
  453. package/src/internal/semantic_versioning/version_from_value.js +0 -42
  454. package/src/internal/sourcemap_utils.js +0 -112
  455. package/src/internal/template_string_escape.js +0 -20
  456. package/src/internal/url_conversion.js +0 -313
  457. package/src/internal/url_utils.js +0 -33
  458. package/src/internal/url_utils.test.js +0 -39
  459. package/src/internal/windows_file_path_utils.js +0 -16
  460. package/src/jsenv_file_urls.js +0 -35
  461. package/src/jsenv_service_worker_finalizer.js +0 -55
  462. package/src/json_to_js_module.js +0 -13
  463. package/src/node_runtime.js +0 -227
  464. package/src/require_using_child_process.js +0 -67
  465. package/src/text_to_js_module.js +0 -13
@@ -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,90 @@
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 is also considered a dev environment
39
+ // just like the dev server can be used to debug test files
40
+ // without this people would have to write
41
+ // if (import.meta.dev || import.meta.test) or if (!import.meta.build)
42
+ dev.forEach((path) => {
43
+ replace(path, "true")
44
+ })
45
+ test.forEach((path) => {
46
+ replace(path, "true")
47
+ })
48
+ } else if (scenario === "build") {
49
+ // replacing by undefined might not be required
50
+ // as I suppose rollup would consider them as undefined
51
+ // but let's make it explicit to ensure code is properly tree-shaked
52
+ dev.forEach((path) => {
53
+ replace(path, "undefined")
54
+ })
55
+ test.forEach((path) => {
56
+ replace(path, "undefined")
57
+ })
58
+ build.forEach((path) => {
59
+ replace(path, "true")
60
+ })
61
+ }
62
+ const magicSource = createMagicSource(content)
63
+ replacements.forEach(({ path, value }) => {
64
+ magicSource.replace({
65
+ start: path.node.start,
66
+ end: path.node.end,
67
+ replacement: value,
68
+ })
69
+ })
70
+ return magicSource.toContentAndSourcemap()
71
+ },
72
+ },
73
+ }
74
+ }
75
+
76
+ const babelPluginMetadataImportMetaScenarios = () => {
77
+ return {
78
+ name: "metadata-import-meta-scenarios",
79
+ visitor: {
80
+ Program(programPath, state) {
81
+ const importMetas = collectProgramImportMetas(programPath)
82
+ state.file.metadata.importMetaScenarios = {
83
+ dev: importMetas.dev,
84
+ test: importMetas.test,
85
+ build: importMetas.build,
86
+ }
87
+ },
88
+ },
89
+ }
90
+ }
@@ -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/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,27 @@
1
+ import { createMagicSource } from "@jsenv/core/packages/utils/sourcemap/magic_source.js"
2
+
3
+ export const jsenvPluginInjectGlobals = (globals = {}) => {
4
+ if (Object.keys(globals).length === 0) {
5
+ return []
6
+ }
7
+ const injectGlobals = (urlInfo) => {
8
+ const magicSource = createMagicSource(urlInfo.content)
9
+ const globalName =
10
+ urlInfo.subtype === "worker" || urlInfo.subtype === "service_worker"
11
+ ? "self"
12
+ : "window"
13
+ magicSource.prepend(
14
+ `Object.assign(${globalName}, ${JSON.stringify(globals, null, " ")});`,
15
+ )
16
+ return magicSource.toContentAndSourcemap()
17
+ }
18
+
19
+ return {
20
+ name: "jsenv:inject_globals",
21
+ appliesDuring: "*",
22
+ transform: {
23
+ js_module: injectGlobals,
24
+ js_classic: injectGlobals,
25
+ },
26
+ }
27
+ }
@@ -0,0 +1,6 @@
1
+ function InlineContent(content, { type = "text/plain" }) {
2
+ this.text = content
3
+ this.type = type
4
+ }
5
+
6
+ export { InlineContent }