@jsenv/core 27.0.0-alpha.8 → 27.0.0-alpha.80

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 (253) hide show
  1. package/dist/babel_helpers/AsyncGenerator/AsyncGenerator.js +95 -0
  2. package/dist/babel_helpers/AwaitValue/AwaitValue.js +3 -0
  3. package/dist/babel_helpers/applyDecoratorDescriptor/applyDecoratorDescriptor.js +29 -0
  4. package/dist/babel_helpers/arrayLikeToArray/arrayLikeToArray.js +9 -0
  5. package/dist/babel_helpers/arrayWithHoles/arrayWithHoles.js +4 -0
  6. package/dist/babel_helpers/arrayWithoutHoles/arrayWithoutHoles.js +5 -0
  7. package/dist/babel_helpers/assertThisInitialized/assertThisInitialized.js +8 -0
  8. package/dist/babel_helpers/asyncGeneratorDelegate/asyncGeneratorDelegate.js +52 -0
  9. package/dist/babel_helpers/asyncIterator/asyncIterator.js +78 -0
  10. package/dist/babel_helpers/asyncToGenerator/asyncToGenerator.js +39 -0
  11. package/dist/babel_helpers/awaitAsyncGenerator/awaitAsyncGenerator.js +4 -0
  12. package/dist/babel_helpers/classApplyDescriptorDestructureSet/classApplyDescriptorDestructureSet.js +24 -0
  13. package/dist/babel_helpers/classApplyDescriptorGet/classApplyDescriptorGet.js +7 -0
  14. package/dist/babel_helpers/classApplyDescriptorSet/classApplyDescriptorSet.js +14 -0
  15. package/dist/babel_helpers/classCallCheck/classCallCheck.js +5 -0
  16. package/dist/babel_helpers/classCheckPrivateStaticAccess/classCheckPrivateStaticAccess.js +5 -0
  17. package/dist/babel_helpers/classCheckPrivateStaticFieldDescriptor/classCheckPrivateStaticFieldDescriptor.js +6 -0
  18. package/dist/babel_helpers/classExtractFieldDescriptor/classExtractFieldDescriptor.js +8 -0
  19. package/dist/babel_helpers/classNameTDZError/classNameTDZError.js +4 -0
  20. package/dist/babel_helpers/classPrivateFieldDestructureSet/classPrivateFieldDestructureSet.js +6 -0
  21. package/dist/babel_helpers/classPrivateFieldGet/classPrivateFieldGet.js +6 -0
  22. package/dist/babel_helpers/classPrivateFieldLooseBase/classPrivateFieldLooseBase.js +7 -0
  23. package/dist/babel_helpers/classPrivateFieldLooseKey/classPrivateFieldLooseKey.js +5 -0
  24. package/dist/babel_helpers/classPrivateFieldSet/classPrivateFieldSet.js +7 -0
  25. package/dist/babel_helpers/classPrivateMethodGet/classPrivateMethodGet.js +7 -0
  26. package/dist/babel_helpers/classPrivateMethodSet/classPrivateMethodSet.js +3 -0
  27. package/dist/babel_helpers/classStaticPrivateFieldSpecGet/classStaticPrivateFieldSpecGet.js +8 -0
  28. package/dist/babel_helpers/classStaticPrivateFieldSpecSet/classStaticPrivateFieldSpecSet.js +9 -0
  29. package/dist/babel_helpers/classStaticPrivateMethodGet/classStaticPrivateMethodGet.js +5 -0
  30. package/dist/babel_helpers/classStaticPrivateMethodSet/classStaticPrivateMethodSet.js +3 -0
  31. package/dist/babel_helpers/construct/construct.js +15 -0
  32. package/dist/babel_helpers/createClass/createClass.js +18 -0
  33. package/dist/babel_helpers/createForOfIteratorHelper/createForOfIteratorHelper.js +63 -0
  34. package/dist/babel_helpers/createForOfIteratorHelperLoose/createForOfIteratorHelperLoose.js +22 -0
  35. package/dist/babel_helpers/createRawReactElement/createRawReactElement.js +50 -0
  36. package/dist/babel_helpers/createSuper/createSuper.js +22 -0
  37. package/dist/babel_helpers/decorate/decorate.js +622 -0
  38. package/dist/babel_helpers/defaults/defaults.js +14 -0
  39. package/dist/babel_helpers/defineEnumerableProperties/defineEnumerableProperties.js +26 -0
  40. package/dist/babel_helpers/defineProperty/defineProperty.js +19 -0
  41. package/dist/babel_helpers/extends/extends.js +16 -0
  42. package/dist/babel_helpers/get/get.js +21 -0
  43. package/dist/babel_helpers/getPrototypeOf/getPrototypeOf.js +2 -0
  44. package/dist/babel_helpers/inherits/inherits.js +21 -0
  45. package/dist/babel_helpers/inheritsLoose/inheritsLoose.js +6 -0
  46. package/dist/babel_helpers/initializerDefineProperty/initializerDefineProperty.js +10 -0
  47. package/dist/babel_helpers/initializerWarningHelper/initializerWarningHelper.js +3 -0
  48. package/dist/babel_helpers/instanceof/instanceof.js +7 -0
  49. package/dist/babel_helpers/interopRequireDefault/interopRequireDefault.js +5 -0
  50. package/dist/babel_helpers/interopRequireWildcard/interopRequireWildcard.js +49 -0
  51. package/dist/babel_helpers/isNativeFunction/isNativeFunction.js +4 -0
  52. package/dist/babel_helpers/isNativeReflectConstruct/isNativeReflectConstruct.js +21 -0
  53. package/dist/babel_helpers/iterableToArray/iterableToArray.js +3 -0
  54. package/dist/babel_helpers/iterableToArrayLimit/iterableToArrayLimit.js +38 -0
  55. package/dist/babel_helpers/iterableToArrayLimitLoose/iterableToArrayLimitLoose.js +13 -0
  56. package/dist/babel_helpers/jsx/jsx.js +49 -0
  57. package/dist/babel_helpers/maybeArrayLike/maybeArrayLike.js +10 -0
  58. package/dist/babel_helpers/newArrowCheck/newArrowCheck.js +5 -0
  59. package/dist/babel_helpers/nonIterableRest/nonIterableRest.js +3 -0
  60. package/dist/babel_helpers/nonIterableSpread/nonIterableSpread.js +3 -0
  61. package/dist/babel_helpers/objectDestructuringEmpty/objectDestructuringEmpty.js +3 -0
  62. package/dist/babel_helpers/objectSpread/objectSpread.js +22 -0
  63. package/dist/babel_helpers/objectSpread2/objectSpread2.js +41 -0
  64. package/dist/babel_helpers/objectWithoutProperties/objectWithoutProperties.js +20 -0
  65. package/dist/babel_helpers/objectWithoutPropertiesLoose/objectWithoutPropertiesLoose.js +15 -0
  66. package/dist/babel_helpers/possibleConstructorReturn/possibleConstructorReturn.js +10 -0
  67. package/dist/babel_helpers/readOnlyError/readOnlyError.js +4 -0
  68. package/dist/babel_helpers/readme.md +8 -0
  69. package/dist/babel_helpers/set/set.js +51 -0
  70. package/dist/babel_helpers/setPrototypeOf/setPrototypeOf.js +5 -0
  71. package/dist/babel_helpers/skipFirstGeneratorNext/skipFirstGeneratorNext.js +8 -0
  72. package/dist/babel_helpers/slicedToArray/slicedToArray.js +5 -0
  73. package/dist/babel_helpers/slicedToArrayLoose/slicedToArrayLoose.js +7 -0
  74. package/dist/babel_helpers/superPropBase/superPropBase.js +10 -0
  75. package/dist/babel_helpers/taggedTemplateLiteral/taggedTemplateLiteral.js +11 -0
  76. package/dist/babel_helpers/taggedTemplateLiteralLoose/taggedTemplateLiteralLoose.js +8 -0
  77. package/dist/babel_helpers/tdz/tdz.js +4 -0
  78. package/dist/babel_helpers/temporalRef/temporalRef.js +5 -0
  79. package/dist/babel_helpers/temporalUndefined/temporalUndefined.js +3 -0
  80. package/dist/babel_helpers/toArray/toArray.js +5 -0
  81. package/dist/babel_helpers/toConsumableArray/toConsumableArray.js +5 -0
  82. package/dist/babel_helpers/toPrimitive/toPrimitive.js +14 -0
  83. package/dist/babel_helpers/toPropertyKey/toPropertyKey.js +5 -0
  84. package/dist/babel_helpers/typeof/typeof.js +7 -0
  85. package/dist/babel_helpers/unsupportedIterableToArray/unsupportedIterableToArray.js +10 -0
  86. package/dist/babel_helpers/wrapAsyncGenerator/wrapAsyncGenerator.js +7 -0
  87. package/dist/babel_helpers/wrapNativeSuper/wrapNativeSuper.js +35 -0
  88. package/dist/babel_helpers/wrapRegExp/wrapRegExp.js +67 -0
  89. package/dist/babel_helpers/writeOnlyError/writeOnlyError.js +4 -0
  90. package/dist/html/explorer.html +557 -0
  91. package/dist/js/controllable_file.mjs +227 -0
  92. package/dist/js/event_source_client.js +324 -0
  93. package/dist/js/global_this.js +32 -0
  94. package/dist/js/html_supervisor_installer.js +522 -0
  95. package/dist/js/html_supervisor_setup.js +82 -0
  96. package/dist/js/import_meta_hot.js +84 -0
  97. package/dist/js/inline_content.js +8 -0
  98. package/dist/js/new_stylesheet.js +409 -0
  99. package/dist/js/regenerator_runtime.js +721 -0
  100. package/dist/js/s.js +429 -0
  101. package/dist/main.js +13418 -0
  102. package/dist/other/jsenv.png +0 -0
  103. package/dist/s.js +626 -0
  104. package/dist/s.js.map +204 -0
  105. package/package.json +55 -48
  106. package/readme.md +6 -14
  107. package/src/build/build.js +1074 -563
  108. package/src/build/build_urls_generator.js +65 -24
  109. package/src/build/graph_utils.js +31 -0
  110. package/src/build/{inject_version_mappings.js → inject_global_version_mappings.js} +49 -18
  111. package/src/build/inject_service_worker_urls.js +79 -0
  112. package/src/build/resync_ressource_hints.js +115 -0
  113. package/src/build/start_build_server.js +210 -0
  114. package/src/dev/plugins/explorer/client/explorer.html +1 -1
  115. package/src/dev/plugins/explorer/jsenv_plugin_explorer.js +9 -13
  116. package/src/dev/plugins/toolbar/jsenv_plugin_toolbar.js +3 -1
  117. package/src/dev/start_dev_server.js +165 -38
  118. package/src/execute/execute.js +35 -8
  119. package/src/execute/run.js +21 -57
  120. package/src/execute/runtimes/browsers/from_playwright.js +220 -150
  121. package/src/execute/runtimes/node/child_exec_options.js +1 -1
  122. package/src/execute/runtimes/node/controllable_file.mjs +26 -10
  123. package/src/execute/runtimes/node/kill_process_tree.js +2 -4
  124. package/src/execute/runtimes/node/node_execution_performance.js +67 -0
  125. package/src/execute/runtimes/node/node_process.js +288 -39
  126. package/src/main.js +27 -0
  127. package/src/omega/{runtime_support/features_compatibility.js → compat/features_compats.js} +30 -7
  128. package/src/omega/{runtime_support/runtime_support.js → compat/runtime_compat.js} +14 -16
  129. package/src/omega/errors.js +63 -67
  130. package/src/omega/fetched_content_compliance.js +24 -0
  131. package/src/omega/file_url_converter.js +9 -51
  132. package/src/omega/kitchen.js +605 -467
  133. package/src/omega/omega_server.js +2 -3
  134. package/src/omega/server/file_service.js +88 -41
  135. package/src/omega/server/user_agent.js +5 -6
  136. package/src/omega/url_graph/url_graph_load.js +31 -23
  137. package/src/omega/url_graph/url_graph_report.js +94 -51
  138. package/src/omega/url_graph/url_info_transformations.js +37 -17
  139. package/src/omega/url_graph.js +88 -19
  140. package/src/omega/url_specifier_encoding.js +59 -0
  141. package/src/omega/web_workers.js +42 -0
  142. package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/autoreload_preference.js +0 -0
  143. package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/event_source_client.js +19 -12
  144. package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/reload.js +0 -0
  145. package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/url_helpers.js +0 -0
  146. package/src/plugins/autoreload/dev_sse/jsenv_plugin_dev_sse_client.js +41 -0
  147. package/src/plugins/autoreload/dev_sse/jsenv_plugin_dev_sse_server.js +204 -0
  148. package/src/plugins/autoreload/jsenv_plugin_autoreload.js +25 -0
  149. package/src/plugins/autoreload/jsenv_plugin_hmr.js +35 -0
  150. package/src/plugins/bundling/css/bundle_css.js +140 -0
  151. package/src/plugins/bundling/js_classic_workers/bundle_js_classic_workers.js +13 -0
  152. package/src/plugins/bundling/js_module/bundle_js_module.js +343 -0
  153. package/src/plugins/bundling/jsenv_plugin_bundling.js +54 -0
  154. package/src/plugins/cache_control/jsenv_plugin_cache_control.js +34 -0
  155. package/src/{omega/core_plugins → plugins}/commonjs_globals/jsenv_plugin_commonjs_globals.js +54 -41
  156. package/src/plugins/file_urls/jsenv_plugin_file_urls.js +183 -0
  157. package/src/{omega/core_plugins → plugins}/html_supervisor/client/error_in_document.js +0 -0
  158. package/src/{omega/core_plugins → plugins}/html_supervisor/client/error_in_notification.js +0 -0
  159. package/src/plugins/html_supervisor/client/html_supervisor_installer.js +254 -0
  160. package/src/plugins/html_supervisor/client/html_supervisor_setup.js +82 -0
  161. package/src/{omega/core_plugins → plugins}/html_supervisor/client/perf_browser.js +0 -0
  162. package/src/{omega/core_plugins → plugins}/html_supervisor/client/uneval_exception.js +0 -0
  163. package/src/{omega/core_plugins → plugins}/html_supervisor/jsenv_plugin_html_supervisor.js +73 -55
  164. package/src/plugins/http_urls/jsenv_plugin_http_urls.js +12 -0
  165. package/src/{dev/plugins/autoreload → plugins/import_meta_hot}/babel_plugin_metadata_import_meta_hot.js +4 -5
  166. package/src/{dev/plugins/autoreload → plugins/import_meta_hot}/client/import_meta_hot.js +3 -1
  167. package/src/{dev/plugins/autoreload → plugins/import_meta_hot}/html_hot_dependencies.js +7 -4
  168. package/src/plugins/import_meta_hot/jsenv_plugin_import_meta_hot.js +100 -0
  169. package/src/{omega/core_plugins → plugins}/import_meta_scenarios/jsenv_plugin_import_meta_scenarios.js +33 -8
  170. package/src/plugins/import_meta_url/client/import_meta_url_browser.js +52 -0
  171. package/src/plugins/import_meta_url/client/import_meta_url_commonjs.mjs +9 -0
  172. package/src/{omega/core_plugins → plugins}/importmap/jsenv_plugin_importmap.js +40 -36
  173. package/src/plugins/inject_globals/inject_globals.js +57 -0
  174. package/src/plugins/inject_globals/jsenv_plugin_inject_globals.js +24 -0
  175. package/src/{omega/core_plugins → plugins}/inline/client/inline_content.js +0 -0
  176. package/src/{omega/core_plugins → plugins}/inline/jsenv_plugin_data_urls.js +22 -21
  177. package/src/plugins/inline/jsenv_plugin_html_inline_content.js +161 -0
  178. package/src/plugins/inline/jsenv_plugin_inline.js +36 -0
  179. package/src/{omega/core_plugins → plugins}/inline/jsenv_plugin_inline_query_param.js +8 -11
  180. package/src/plugins/inline/jsenv_plugin_js_inline_content.js +294 -0
  181. package/src/plugins/leading_slash/jsenv_plugin_leading_slash.js +13 -0
  182. package/src/plugins/minification/css/minify_css.js +9 -0
  183. package/src/plugins/minification/html/minify_html.js +13 -0
  184. package/src/{build/plugins/minify_js/jsenv_plugin_minify_js.js → plugins/minification/js/minify_js.js} +6 -22
  185. package/src/plugins/minification/jsenv_plugin_minification.js +78 -0
  186. package/src/plugins/minification/json/minify_json.js +8 -0
  187. package/src/plugins/node_esm_resolution/jsenv_plugin_node_esm_resolution.js +162 -0
  188. package/src/plugins/node_runtime/jsenv_plugin_node_runtime.js +12 -0
  189. package/src/{omega → plugins}/plugin_controller.js +57 -12
  190. package/src/plugins/plugins.js +89 -0
  191. package/src/plugins/transpilation/as_js_classic/client/s.js +429 -0
  192. package/src/plugins/transpilation/as_js_classic/helpers/babel_plugin_transform_import_meta_url.js +47 -0
  193. package/src/plugins/transpilation/as_js_classic/helpers/systemjs_old.js +43 -0
  194. package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic.js +211 -0
  195. package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic_html.js +304 -0
  196. package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic_workers.js +55 -0
  197. package/src/{omega/core_plugins → plugins/transpilation}/babel/global_this/babel_plugin_global_this_as_jsenv_import.js +0 -0
  198. package/src/{omega/core_plugins → plugins/transpilation}/babel/global_this/client/global_this.js +0 -0
  199. package/src/{omega/core_plugins → plugins/transpilation}/babel/helpers/babel_plugin_babel_helpers_as_jsenv_imports.js +0 -0
  200. package/src/{omega/core_plugins → plugins/transpilation}/babel/helpers/babel_plugin_structure.js +14 -17
  201. package/src/{omega/core_plugins → plugins/transpilation}/babel/helpers/babel_plugins_compatibility.js +0 -0
  202. package/src/{omega/core_plugins → plugins/transpilation}/babel/jsenv_plugin_babel.js +39 -32
  203. package/src/{omega/core_plugins → plugins/transpilation}/babel/new_stylesheet/babel_plugin_new_stylesheet_as_jsenv_import.js +30 -6
  204. package/src/{omega/core_plugins → plugins/transpilation}/babel/new_stylesheet/client/new_stylesheet.js +0 -0
  205. package/src/{omega/core_plugins → plugins/transpilation}/babel/regenerator_runtime/babel_plugin_regenerator_runtime_as_jsenv_import.js +0 -0
  206. package/src/{omega/core_plugins → plugins/transpilation}/babel/regenerator_runtime/client/regenerator_runtime.js +0 -0
  207. package/src/plugins/transpilation/babel/require_babel_plugin.js +8 -0
  208. package/src/plugins/transpilation/css_parcel/jsenv_plugin_css_parcel.js +18 -0
  209. package/src/plugins/transpilation/import_assertions/jsenv_plugin_import_assertions.js +184 -0
  210. package/src/plugins/transpilation/jsenv_plugin_top_level_await.js +79 -0
  211. package/src/plugins/transpilation/jsenv_plugin_transpilation.js +46 -0
  212. package/src/plugins/url_analysis/css/css_urls.js +49 -0
  213. package/src/plugins/url_analysis/html/html_urls.js +272 -0
  214. package/src/plugins/url_analysis/js/js_urls.js +68 -0
  215. package/src/plugins/url_analysis/jsenv_plugin_url_analysis.js +103 -0
  216. package/src/plugins/url_analysis/webmanifest/webmanifest_urls.js +20 -0
  217. package/src/{omega/core_plugins → plugins}/url_resolution/jsenv_plugin_url_resolution.js +9 -5
  218. package/src/plugins/url_version/jsenv_plugin_url_version.js +28 -0
  219. package/src/require_from_jsenv.js +3 -0
  220. package/src/test/execute_plan.js +85 -44
  221. package/src/test/execute_test_plan.js +37 -25
  222. package/src/test/execution_steps.js +2 -5
  223. package/src/test/logs_file_execution.js +56 -49
  224. package/main.js +0 -19
  225. package/src/build/plugins/bundle_js_module/jsenv_plugin_bundle_js_module.js +0 -227
  226. package/src/build/plugins/minify_html/jsenv_plugin_minify_html.js +0 -30
  227. package/src/dev/plugins/autoreload/client/event_source_connection.js +0 -195
  228. package/src/dev/plugins/autoreload/jsenv_plugin_autoreload.js +0 -374
  229. package/src/dev/plugins/autoreload/sse_service.js +0 -149
  230. package/src/execute/runtimes/node/controlled_process.js +0 -316
  231. package/src/omega/core_plugins/babel/new_stylesheet/client/.eslintrc.cjs +0 -24
  232. package/src/omega/core_plugins/file_urls/jsenv_plugin_file_urls.js +0 -67
  233. package/src/omega/core_plugins/filesystem_magic/jsenv_plugin_filesystem_magic.js +0 -58
  234. package/src/omega/core_plugins/html_supervisor/client/html_supervisor_installer.js +0 -168
  235. package/src/omega/core_plugins/html_supervisor/client/html_supervisor_setup.js +0 -77
  236. package/src/omega/core_plugins/import_assertions/helpers/babel_plugin_metadata_import_assertions.js +0 -98
  237. package/src/omega/core_plugins/import_assertions/helpers/json_module.js +0 -12
  238. package/src/omega/core_plugins/import_assertions/helpers/text_module.js +0 -6
  239. package/src/omega/core_plugins/import_assertions/jsenv_plugin_import_assertions.js +0 -211
  240. package/src/omega/core_plugins/inline/jsenv_plugin_inline.js +0 -13
  241. package/src/omega/core_plugins/inline/jsenv_plugin_js_and_css_inside_html.js +0 -142
  242. package/src/omega/core_plugins/inline/jsenv_plugin_new_inline_content.js +0 -207
  243. package/src/omega/core_plugins/leading_slash/jsenv_plugin_leading_slash.js +0 -12
  244. package/src/omega/core_plugins/node_esm_resolution/jsenv_plugin_node_esm_resolution.js +0 -77
  245. package/src/omega/core_plugins/url_version/jsenv_plugin_url_version.js +0 -50
  246. package/src/omega/core_plugins.js +0 -39
  247. package/src/omega/runtime_support/default_runtime_support.js +0 -13
  248. package/src/omega/url_graph/url_graph_sort.js +0 -29
  249. package/src/omega/url_mentions/css_url_mentions.js +0 -63
  250. package/src/omega/url_mentions/html_url_mentions.js +0 -185
  251. package/src/omega/url_mentions/js_module_url_mentions.js +0 -91
  252. package/src/omega/url_mentions/parse_url_mentions.js +0 -37
  253. package/src/omega/url_mentions/worker_classic_url_mentions.js +0 -37
@@ -1,6 +1,6 @@
1
1
  import { applyBabelPlugins } from "@jsenv/utils/js_ast/apply_babel_plugins.js"
2
2
 
3
- import { RUNTIME_SUPPORT } from "@jsenv/core/src/omega/runtime_support/runtime_support.js"
3
+ import { RUNTIME_COMPAT } from "@jsenv/core/src/omega/compat/runtime_compat.js"
4
4
  import { getBaseBabelPluginStructure } from "./helpers/babel_plugin_structure.js"
5
5
  import { babelPluginBabelHelpersAsJsenvImports } from "./helpers/babel_plugin_babel_helpers_as_jsenv_imports.js"
6
6
  import { babelPluginNewStylesheetAsJsenvImport } from "./new_stylesheet/babel_plugin_new_stylesheet_as_jsenv_import.js"
@@ -9,47 +9,57 @@ import { babelPluginRegeneratorRuntimeAsJsenvImport } from "./regenerator_runtim
9
9
 
10
10
  export const jsenvPluginBabel = ({
11
11
  getCustomBabelPlugins,
12
- topLevelAwait,
12
+ babelHelpersAsImport = true,
13
13
  } = {}) => {
14
14
  const transformWithBabel = async (urlInfo, context) => {
15
15
  const isJsModule = urlInfo.type === "js_module"
16
16
  const isWorker = urlInfo.subtype === "worker"
17
17
  const isServiceWorker = urlInfo.subtype === "service_worker"
18
- const isWorkerContext = isWorker || isServiceWorker
19
- let { runtimeSupport } = context
20
- if (isServiceWorker) {
18
+ const isSharedWorker = urlInfo.subtype === "shared_worker"
19
+ const isWorkerContext = isWorker || isServiceWorker || isSharedWorker
20
+
21
+ let { clientRuntimeCompat } = context
22
+ if (isWorker) {
23
+ clientRuntimeCompat = RUNTIME_COMPAT.add(clientRuntimeCompat, "worker")
24
+ } else if (isServiceWorker) {
21
25
  // when code is executed by a service worker we can assume
22
26
  // the execution context supports more than the default one
23
27
  // for instance arrow function are supported
24
- runtimeSupport = RUNTIME_SUPPORT.add(runtimeSupport, "service_worker")
28
+ clientRuntimeCompat = RUNTIME_COMPAT.add(
29
+ clientRuntimeCompat,
30
+ "service_worker",
31
+ )
32
+ } else if (isSharedWorker) {
33
+ clientRuntimeCompat = RUNTIME_COMPAT.add(
34
+ clientRuntimeCompat,
35
+ "shared_worker",
36
+ )
25
37
  }
26
- if (isWorker) {
27
- runtimeSupport = RUNTIME_SUPPORT.add(runtimeSupport, "worker")
38
+
39
+ const isSupported = (feature) =>
40
+ RUNTIME_COMPAT.isSupported(clientRuntimeCompat, feature)
41
+ const getImportSpecifier = (clientFileUrl) => {
42
+ const [reference] = context.referenceUtils.inject({
43
+ type: "js_import_export",
44
+ expectedType: "js_module",
45
+ specifier: clientFileUrl,
46
+ })
47
+ return JSON.parse(reference.generatedSpecifier)
28
48
  }
29
- const { referenceUtils } = context
30
- const isSupportedOnRuntime = (feature) =>
31
- RUNTIME_SUPPORT.isSupported(runtimeSupport, feature)
49
+
32
50
  const babelPluginStructure = getBaseBabelPluginStructure({
33
51
  url: urlInfo.url,
34
- isSupportedOnRuntime,
35
- topLevelAwait,
36
- usesTopLevelAwait: urlInfo.data.usesTopLevelAwait,
37
- isJsModule,
52
+ isSupported,
38
53
  isWorkerContext,
54
+ isJsModule,
55
+ getImportSpecifier,
39
56
  })
40
57
  if (getCustomBabelPlugins) {
41
58
  Object.assign(babelPluginStructure, getCustomBabelPlugins(context))
42
59
  }
43
60
 
44
- if (isJsModule) {
45
- const getImportSpecifier = (clientFileUrl) => {
46
- const [reference] = referenceUtils.inject({
47
- type: "js_import_export",
48
- specifier: clientFileUrl,
49
- })
50
- return JSON.parse(reference.generatedSpecifier)
51
- }
52
- if (!isSupportedOnRuntime("global_this")) {
61
+ if (isJsModule && babelHelpersAsImport) {
62
+ if (!isSupported("global_this")) {
53
63
  babelPluginStructure["global-this-as-jsenv-import"] = [
54
64
  babelPluginGlobalThisAsJsenvImport,
55
65
  {
@@ -57,7 +67,7 @@ export const jsenvPluginBabel = ({
57
67
  },
58
68
  ]
59
69
  }
60
- if (!isSupportedOnRuntime("async_generator_function")) {
70
+ if (!isSupported("async_generator_function")) {
61
71
  babelPluginStructure["regenerator-runtime-as-jsenv-import"] = [
62
72
  babelPluginRegeneratorRuntimeAsJsenvImport,
63
73
  {
@@ -65,7 +75,7 @@ export const jsenvPluginBabel = ({
65
75
  },
66
76
  ]
67
77
  }
68
- if (!isSupportedOnRuntime("new_stylesheet")) {
78
+ if (!isSupported("new_stylesheet")) {
69
79
  babelPluginStructure["new-stylesheet-as-jsenv-import"] = [
70
80
  babelPluginNewStylesheetAsJsenvImport,
71
81
  {
@@ -90,22 +100,19 @@ export const jsenvPluginBabel = ({
90
100
  )
91
101
  const { code, map } = await applyBabelPlugins({
92
102
  babelPlugins,
93
- url: urlInfo.url,
94
- generatedUrl: urlInfo.generatedUrl,
95
- content: urlInfo.content,
103
+ urlInfo,
96
104
  })
97
105
  return {
98
106
  content: code,
99
107
  sourcemap: map,
100
108
  }
101
109
  }
102
-
103
110
  return {
104
111
  name: "jsenv:babel",
105
112
  appliesDuring: "*",
106
- transform: {
107
- js_module: transformWithBabel,
113
+ finalizeUrlContent: {
108
114
  js_classic: transformWithBabel,
115
+ js_module: transformWithBabel,
109
116
  },
110
117
  }
111
118
  }
@@ -1,9 +1,3 @@
1
- /*
2
- * TODO:
3
- * - code should also inject helper when code uses new keyword on "CSSStyleSheet"
4
- * - code should also inject helper when code uses "document.adoptedStylesheets"
5
- */
6
-
7
1
  import { pathToFileURL } from "node:url"
8
2
 
9
3
  import { injectImport } from "@jsenv/utils/js_ast/babel_utils.js"
@@ -27,6 +21,18 @@ export const babelPluginNewStylesheetAsJsenvImport = (
27
21
  }
28
22
  let usesNewStylesheet = false
29
23
  programPath.traverse({
24
+ NewExpression: (path) => {
25
+ usesNewStylesheet = isNewCssStyleSheetCall(path.node)
26
+ if (usesNewStylesheet) {
27
+ path.stop()
28
+ }
29
+ },
30
+ MemberExpression: (path) => {
31
+ usesNewStylesheet = isDocumentAdoptedStyleSheets(path.node)
32
+ if (usesNewStylesheet) {
33
+ path.stop()
34
+ }
35
+ },
30
36
  CallExpression: (path) => {
31
37
  if (path.node.callee.type !== "Import") {
32
38
  // Some other function call, not import();
@@ -90,6 +96,24 @@ export const babelPluginNewStylesheetAsJsenvImport = (
90
96
  }
91
97
  }
92
98
 
99
+ const isNewCssStyleSheetCall = (node) => {
100
+ return (
101
+ node.type === "NewExpression" &&
102
+ node.callee.type === "Identifier" &&
103
+ node.callee.name === "CSSStyleSheet"
104
+ )
105
+ }
106
+
107
+ const isDocumentAdoptedStyleSheets = (node) => {
108
+ return (
109
+ node.type === "MemberExpression" &&
110
+ node.object.type === "Identifier" &&
111
+ node.object.name === "document" &&
112
+ node.property.type === "Identifier" &&
113
+ node.property.name === "adoptedStyleSheets"
114
+ )
115
+ }
116
+
93
117
  const hasCssModuleQueryParam = (path) => {
94
118
  const { node } = path
95
119
  return (
@@ -0,0 +1,8 @@
1
+ import { createRequire } from "node:module"
2
+ import { pathToFileURL } from "node:url"
3
+ import { requireFromJsenv } from "@jsenv/core/src/require_from_jsenv.js"
4
+
5
+ const babelPluginPackagePath = requireFromJsenv.resolve("@jsenv/babel-plugins")
6
+ const babelPluginPackageUrl = pathToFileURL(babelPluginPackagePath)
7
+
8
+ export const requireBabelPlugin = createRequire(babelPluginPackageUrl)
@@ -0,0 +1,18 @@
1
+ import { transpileWithParcel } from "@jsenv/utils/css_ast/parcel_css.js"
2
+
3
+ // https://github.com/parcel-bundler/parcel-css
4
+ export const jsenvPluginCssParcel = () => {
5
+ return {
6
+ name: "jsenv:css_parcel",
7
+ appliesDuring: "*",
8
+ transformUrlContent: {
9
+ css: (urlInfo, context) => {
10
+ const { code, map } = transpileWithParcel(urlInfo, context)
11
+ return {
12
+ content: String(code),
13
+ sourcemap: map,
14
+ }
15
+ },
16
+ },
17
+ }
18
+ }
@@ -0,0 +1,184 @@
1
+ /*
2
+ * Jsenv wont touch code where "specifier" or "type" is dynamic (see code below)
3
+ * ```js
4
+ * const file = "./style.css"
5
+ * const type = "css"
6
+ * import(file, { assert: { type }})
7
+ * ```
8
+ * Jsenv could throw an error when it knows some browsers in runtimeCompat
9
+ * do not support import assertions
10
+ * But for now (as it is simpler) we let the browser throw the error
11
+ */
12
+
13
+ import { urlToFilename, injectQueryParams } from "@jsenv/urls"
14
+
15
+ import { JS_QUOTES } from "@jsenv/utils/string/js_quotes.js"
16
+
17
+ export const jsenvPluginImportAssertions = () => {
18
+ const updateReference = (reference, searchParam) => {
19
+ reference.expectedType = "js_module"
20
+ reference.filename = `${urlToFilename(reference.url)}.js`
21
+ reference.mutation = (magicSource) => {
22
+ magicSource.remove({
23
+ start: reference.assertNode.start,
24
+ end: reference.assertNode.end,
25
+ })
26
+ }
27
+ const newUrl = injectQueryParams(reference.url, {
28
+ [searchParam]: "",
29
+ })
30
+ return newUrl
31
+ }
32
+
33
+ const importAssertions = {
34
+ name: "jsenv:import_assertions",
35
+ appliesDuring: "*",
36
+ redirectUrl: {
37
+ js_import_export: (reference, context) => {
38
+ if (!reference.assert) {
39
+ return null
40
+ }
41
+ // during build always replace import assertions with the js:
42
+ // - avoid rollup to see import assertions
43
+ // We would have to tell rollup to ignore import with assertion
44
+ // - means rollup can bundle more js file together
45
+ // - means url versioning can work for css inlined in js
46
+ if (reference.assert.type === "json") {
47
+ if (
48
+ context.scenario !== "build" &&
49
+ context.isSupportedOnCurrentClients("import_type_json")
50
+ ) {
51
+ return null
52
+ }
53
+ return updateReference(reference, "as_json_module")
54
+ }
55
+ if (reference.assert.type === "css") {
56
+ if (
57
+ context.scenario !== "build" &&
58
+ context.isSupportedOnCurrentClients("import_type_css")
59
+ ) {
60
+ return null
61
+ }
62
+ return updateReference(reference, "as_css_module")
63
+ }
64
+ if (reference.assert.type === "text") {
65
+ if (
66
+ context.scenario !== "build" &&
67
+ context.isSupportedOnCurrentClients("import_type_text")
68
+ ) {
69
+ return null
70
+ }
71
+ return updateReference(reference, "as_text_module")
72
+ }
73
+ return null
74
+ },
75
+ },
76
+ }
77
+ return [importAssertions, ...jsenvPluginAsModules()]
78
+ }
79
+
80
+ const jsenvPluginAsModules = () => {
81
+ const inlineContentClientFileUrl = new URL(
82
+ "../../inline/client/inline_content.js",
83
+ import.meta.url,
84
+ ).href
85
+
86
+ const asJsonModule = {
87
+ name: `jsenv:as_json_module`,
88
+ appliesDuring: "*",
89
+ fetchUrlContent: async (urlInfo, context) => {
90
+ const originalUrlInfo = await context.fetchOriginalUrlInfo({
91
+ urlInfo,
92
+ context,
93
+ searchParam: "as_json_module",
94
+ expectedType: "json",
95
+ })
96
+ if (!originalUrlInfo) {
97
+ return null
98
+ }
99
+ const jsonText = JSON.stringify(originalUrlInfo.content.trim())
100
+ return {
101
+ // here we could `export default ${jsonText}`:
102
+ // but js engine are optimized to recognize JSON.parse
103
+ // and use a faster parsing strategy
104
+ content: `export default JSON.parse(${jsonText})`,
105
+ contentType: "text/javascript",
106
+ type: "js_module",
107
+ originalUrl: originalUrlInfo.originalUrl,
108
+ originalContent: originalUrlInfo.originalContent,
109
+ }
110
+ },
111
+ }
112
+
113
+ const asCssModule = {
114
+ name: `jsenv:as_css_module`,
115
+ appliesDuring: "*",
116
+ fetchUrlContent: async (urlInfo, context) => {
117
+ const originalUrlInfo = await context.fetchOriginalUrlInfo({
118
+ urlInfo,
119
+ context,
120
+ searchParam: "as_css_module",
121
+ expectedType: "css",
122
+ })
123
+ if (!originalUrlInfo) {
124
+ return null
125
+ }
126
+ const cssText = JS_QUOTES.escapeSpecialChars(originalUrlInfo.content, {
127
+ // If template string is choosen and runtime do not support template literals
128
+ // it's ok because "jsenv:new_inline_content" plugin executes after this one
129
+ // and convert template strings into raw strings
130
+ canUseTemplateString: true,
131
+ })
132
+ return {
133
+ content: `import { InlineContent } from ${JSON.stringify(
134
+ inlineContentClientFileUrl,
135
+ )}
136
+
137
+ const inlineContent = new InlineContent(${cssText}, { type: "text/css" })
138
+ const stylesheet = new CSSStyleSheet()
139
+ stylesheet.replaceSync(inlineContent.text)
140
+ export default stylesheet`,
141
+ contentType: "text/javascript",
142
+ type: "js_module",
143
+ originalUrl: originalUrlInfo.originalUrl,
144
+ originalContent: originalUrlInfo.originalContent,
145
+ }
146
+ },
147
+ }
148
+
149
+ const asTextModule = {
150
+ name: `jsenv:as_text_module`,
151
+ appliesDuring: "*",
152
+ fetchUrlContent: async (urlInfo, context) => {
153
+ const originalUrlInfo = await context.fetchOriginalUrlInfo({
154
+ urlInfo,
155
+ context,
156
+ searchParam: "as_text_module",
157
+ expectedType: "text",
158
+ })
159
+ if (!originalUrlInfo) {
160
+ return null
161
+ }
162
+ const textPlain = JS_QUOTES.escapeSpecialChars(urlInfo.content, {
163
+ // If template string is choosen and runtime do not support template literals
164
+ // it's ok because "jsenv:new_inline_content" plugin executes after this one
165
+ // and convert template strings into raw strings
166
+ canUseTemplateString: true,
167
+ })
168
+ return {
169
+ content: `import { InlineContent } from ${JSON.stringify(
170
+ inlineContentClientFileUrl,
171
+ )}
172
+
173
+ const inlineContent = new InlineContent(${textPlain}, { type: "text/plain" })
174
+ export default inlineContent.text`,
175
+ contentType: "text/javascript",
176
+ type: "js_module",
177
+ originalUrl: originalUrlInfo.originalUrl,
178
+ originalContent: originalUrlInfo.originalContent,
179
+ }
180
+ },
181
+ }
182
+
183
+ return [asJsonModule, asCssModule, asTextModule]
184
+ }
@@ -0,0 +1,79 @@
1
+ import { applyBabelPlugins } from "@jsenv/utils/js_ast/apply_babel_plugins.js"
2
+ import { requireBabelPlugin } from "./babel/require_babel_plugin.js"
3
+
4
+ export const jsenvPluginTopLevelAwait = () => {
5
+ return {
6
+ name: "jsenv:top_level_await",
7
+ appliesDuring: "*",
8
+ transformUrlContent: {
9
+ js_module: async (urlInfo, context) => {
10
+ if (context.isSupportedOnCurrentClients("top_level_await")) {
11
+ return null
12
+ }
13
+ const usesTLA = await usesTopLevelAwait(urlInfo)
14
+ if (!usesTLA) {
15
+ return null
16
+ }
17
+ const { code, map } = await applyBabelPlugins({
18
+ urlInfo,
19
+ babelPlugins: [
20
+ [
21
+ requireBabelPlugin("babel-plugin-transform-async-to-promises"),
22
+ {
23
+ // Maybe we could pass target: "es6" when we support arrow function
24
+ // https://github.com/rpetrich/babel-plugin-transform-async-to-promises/blob/92755ff8c943c97596523e586b5fa515c2e99326/async-to-promises.ts#L55
25
+ topLevelAwait: "simple",
26
+ // enable once https://github.com/rpetrich/babel-plugin-transform-async-to-promises/pull/83
27
+ // externalHelpers: true,
28
+ // externalHelpersPath: JSON.parse(
29
+ // context.referenceUtils.inject({
30
+ // type: "js_import_export",
31
+ // expectedType: "js_module",
32
+ // specifier:
33
+ // "babel-plugin-transform-async-to-promises/helpers.mjs",
34
+ // })[0],
35
+ // ),
36
+ },
37
+ ],
38
+ ],
39
+ })
40
+ return {
41
+ content: code,
42
+ sourcemap: map,
43
+ }
44
+ },
45
+ },
46
+ }
47
+ }
48
+
49
+ const usesTopLevelAwait = async (urlInfo) => {
50
+ if (!urlInfo.content.includes("await ")) {
51
+ return false
52
+ }
53
+ const { metadata } = await applyBabelPlugins({
54
+ urlInfo,
55
+ babelPlugins: [babelPluginMetadataUsesTopLevelAwait],
56
+ })
57
+ return metadata.usesTopLevelAwait
58
+ }
59
+
60
+ const babelPluginMetadataUsesTopLevelAwait = () => {
61
+ return {
62
+ name: "metadata-uses-top-level-await",
63
+ visitor: {
64
+ Program: (programPath, state) => {
65
+ let usesTopLevelAwait = false
66
+ programPath.traverse({
67
+ AwaitExpression: (path) => {
68
+ const closestFunction = path.getFunctionParent()
69
+ if (!closestFunction) {
70
+ usesTopLevelAwait = true
71
+ path.stop()
72
+ }
73
+ },
74
+ })
75
+ state.file.metadata.usesTopLevelAwait = usesTopLevelAwait
76
+ },
77
+ },
78
+ }
79
+ }
@@ -0,0 +1,46 @@
1
+ /*
2
+ * Transforms code to make it compatible with browser that would not be able to
3
+ * run it otherwise. For instance:
4
+ * - const -> var
5
+ * - async/await -> promises
6
+ * Anything that is not standard (import.meta.dev for instance) is outside the scope
7
+ * of this plugin
8
+ */
9
+
10
+ import { jsenvPluginCssParcel } from "./css_parcel/jsenv_plugin_css_parcel.js"
11
+ import { jsenvPluginImportAssertions } from "./import_assertions/jsenv_plugin_import_assertions.js"
12
+ import { jsenvPluginAsJsClassic } from "./as_js_classic/jsenv_plugin_as_js_classic.js"
13
+ import { jsenvPluginBabel } from "./babel/jsenv_plugin_babel.js"
14
+ import { jsenvPluginTopLevelAwait } from "./jsenv_plugin_top_level_await.js"
15
+
16
+ export const jsenvPluginTranspilation = ({
17
+ importAssertions = true,
18
+ css = true,
19
+ jsModuleAsJsClassic = true,
20
+ systemJsInjection = true,
21
+ topLevelAwait = true,
22
+ babelHelpersAsImport = true,
23
+ getCustomBabelPlugins,
24
+ }) => {
25
+ return [
26
+ // import assertions we want it all the time
27
+ ...(importAssertions ? [jsenvPluginImportAssertions()] : []),
28
+ // babel also so that rollup can bundle babel helpers for instance
29
+ jsenvPluginBabel({
30
+ topLevelAwait,
31
+ getCustomBabelPlugins,
32
+ babelHelpersAsImport,
33
+ }),
34
+ // but the conversion from js_module to js_classic
35
+ // we want to do it after bundling
36
+ // so the build function will disable jsModuleAsJsClassic during build
37
+ // and enable it manually during postbuild
38
+ ...(jsModuleAsJsClassic
39
+ ? [jsenvPluginAsJsClassic({ systemJsInjection })]
40
+ : []),
41
+ // topLevelAwait must come after js_module_as_js_classic because it's related to the module format
42
+ // so we want to wait to know the module format before transforming things related to top level await
43
+ ...(topLevelAwait ? [jsenvPluginTopLevelAwait(topLevelAwait)] : []),
44
+ ...(css ? [jsenvPluginCssParcel()] : []),
45
+ ]
46
+ }
@@ -0,0 +1,49 @@
1
+ /*
2
+ * https://github.com/parcel-bundler/parcel/blob/v2/packages/transformers/css/src/CSSTransformer.js
3
+ */
4
+
5
+ import { createMagicSource } from "@jsenv/utils/sourcemap/magic_source.js"
6
+ import { applyPostCss } from "@jsenv/utils/css_ast/apply_post_css.js"
7
+ import { postCssPluginUrlVisitor } from "@jsenv/utils/css_ast/postcss_plugin_url_visitor.js"
8
+
9
+ export const parseAndTransformCssUrls = async (urlInfo, context) => {
10
+ const actions = []
11
+ const magicSource = createMagicSource(urlInfo.content)
12
+ await applyPostCss({
13
+ sourcemaps: false,
14
+ plugins: [
15
+ postCssPluginUrlVisitor({
16
+ urlVisitor: ({
17
+ type,
18
+ specifier,
19
+ specifierStart,
20
+ specifierEnd,
21
+ specifierLine,
22
+ specifierColumn,
23
+ }) => {
24
+ const [reference] = context.referenceUtils.found({
25
+ type: `css_${type}`,
26
+ specifier,
27
+ specifierStart,
28
+ specifierEnd,
29
+ specifierLine,
30
+ specifierColumn,
31
+ })
32
+ actions.push(async () => {
33
+ magicSource.replace({
34
+ start: specifierStart,
35
+ end: specifierEnd,
36
+ replacement: await context.referenceUtils.readGeneratedSpecifier(
37
+ reference,
38
+ ),
39
+ })
40
+ })
41
+ },
42
+ }),
43
+ ],
44
+ url: urlInfo.originalUrl,
45
+ content: urlInfo.content,
46
+ })
47
+ await Promise.all(actions.map((action) => action()))
48
+ return magicSource.toContentAndSourcemap()
49
+ }