@jsenv/core 27.0.0-alpha.7 → 27.0.0-alpha.70

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 (247) 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 +79 -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 +13452 -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/main.js +9 -1
  106. package/package.json +44 -32
  107. package/readme.md +6 -14
  108. package/src/build/build.js +1080 -562
  109. package/src/build/build_urls_generator.js +65 -24
  110. package/src/build/graph_utils.js +31 -0
  111. package/src/build/{inject_version_mappings.js → inject_global_version_mappings.js} +49 -18
  112. package/src/build/inject_service_worker_urls.js +79 -0
  113. package/src/build/resync_ressource_hints.js +115 -0
  114. package/src/build/start_build_server.js +211 -0
  115. package/src/dev/plugins/explorer/client/explorer.html +1 -1
  116. package/src/dev/plugins/explorer/jsenv_plugin_explorer.js +8 -12
  117. package/src/dev/plugins/toolbar/jsenv_plugin_toolbar.js +3 -1
  118. package/src/dev/start_dev_server.js +170 -38
  119. package/src/execute/execute.js +36 -6
  120. package/src/execute/run.js +21 -57
  121. package/src/execute/runtimes/browsers/from_playwright.js +218 -148
  122. package/src/execute/runtimes/node/controllable_file.mjs +26 -10
  123. package/src/execute/runtimes/node/node_execution_performance.js +67 -0
  124. package/src/execute/runtimes/node/node_process.js +288 -39
  125. package/src/omega/{runtime_support/features_compatibility.js → compat/features_compats.js} +30 -7
  126. package/src/omega/{runtime_support/runtime_support.js → compat/runtime_compat.js} +14 -16
  127. package/src/omega/errors.js +62 -66
  128. package/src/omega/fetched_content_compliance.js +24 -0
  129. package/src/omega/file_url_converter.js +9 -51
  130. package/src/omega/kitchen.js +593 -463
  131. package/src/omega/omega_server.js +2 -3
  132. package/src/omega/server/file_service.js +86 -38
  133. package/src/omega/server/user_agent.js +4 -2
  134. package/src/omega/url_graph/url_graph_load.js +31 -23
  135. package/src/omega/url_graph/url_graph_report.js +94 -51
  136. package/src/omega/url_graph/url_info_transformations.js +37 -17
  137. package/src/omega/url_graph.js +88 -19
  138. package/src/omega/url_specifier_encoding.js +59 -0
  139. package/src/omega/web_workers.js +42 -0
  140. package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/autoreload_preference.js +0 -0
  141. package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/event_source_client.js +19 -12
  142. package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/reload.js +0 -0
  143. package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/url_helpers.js +0 -0
  144. package/src/plugins/autoreload/dev_sse/jsenv_plugin_dev_sse_client.js +41 -0
  145. package/src/plugins/autoreload/dev_sse/jsenv_plugin_dev_sse_server.js +204 -0
  146. package/src/plugins/autoreload/jsenv_plugin_autoreload.js +25 -0
  147. package/src/plugins/autoreload/jsenv_plugin_hmr.js +35 -0
  148. package/src/plugins/bundling/css/bundle_css.js +140 -0
  149. package/src/plugins/bundling/js_classic_workers/bundle_js_classic_workers.js +13 -0
  150. package/src/plugins/bundling/js_module/bundle_js_module.js +342 -0
  151. package/src/plugins/bundling/jsenv_plugin_bundling.js +54 -0
  152. package/src/plugins/cache_control/jsenv_plugin_cache_control.js +34 -0
  153. package/src/{omega/core_plugins → plugins}/commonjs_globals/jsenv_plugin_commonjs_globals.js +54 -41
  154. package/src/plugins/file_urls/jsenv_plugin_file_urls.js +198 -0
  155. package/src/{omega/core_plugins → plugins}/html_supervisor/client/error_in_document.js +0 -0
  156. package/src/{omega/core_plugins → plugins}/html_supervisor/client/error_in_notification.js +0 -0
  157. package/src/plugins/html_supervisor/client/html_supervisor_installer.js +254 -0
  158. package/src/plugins/html_supervisor/client/html_supervisor_setup.js +79 -0
  159. package/src/{omega/core_plugins → plugins}/html_supervisor/client/perf_browser.js +0 -0
  160. package/src/{omega/core_plugins → plugins}/html_supervisor/client/uneval_exception.js +0 -0
  161. package/src/{omega/core_plugins → plugins}/html_supervisor/jsenv_plugin_html_supervisor.js +73 -55
  162. package/src/plugins/http_urls/jsenv_plugin_http_urls.js +12 -0
  163. package/src/{dev/plugins/autoreload → plugins/import_meta_hot}/babel_plugin_metadata_import_meta_hot.js +4 -5
  164. package/src/{dev/plugins/autoreload → plugins/import_meta_hot}/client/import_meta_hot.js +3 -1
  165. package/src/{dev/plugins/autoreload → plugins/import_meta_hot}/html_hot_dependencies.js +7 -4
  166. package/src/plugins/import_meta_hot/jsenv_plugin_import_meta_hot.js +100 -0
  167. package/src/{omega/core_plugins → plugins}/import_meta_scenarios/jsenv_plugin_import_meta_scenarios.js +33 -8
  168. package/src/plugins/import_meta_url/client/import_meta_url_browser.js +52 -0
  169. package/src/plugins/import_meta_url/client/import_meta_url_commonjs.mjs +9 -0
  170. package/src/{omega/core_plugins → plugins}/importmap/jsenv_plugin_importmap.js +40 -36
  171. package/src/plugins/inject_globals/jsenv_plugin_inject_globals.js +76 -0
  172. package/src/{omega/core_plugins → plugins}/inline/client/inline_content.js +0 -0
  173. package/src/{omega/core_plugins → plugins}/inline/jsenv_plugin_data_urls.js +19 -18
  174. package/src/plugins/inline/jsenv_plugin_html_inline_content.js +161 -0
  175. package/src/plugins/inline/jsenv_plugin_inline.js +36 -0
  176. package/src/{omega/core_plugins → plugins}/inline/jsenv_plugin_inline_query_param.js +7 -10
  177. package/src/plugins/inline/jsenv_plugin_js_inline_content.js +294 -0
  178. package/src/plugins/leading_slash/jsenv_plugin_leading_slash.js +13 -0
  179. package/src/plugins/minification/css/minify_css.js +9 -0
  180. package/src/plugins/minification/html/minify_html.js +15 -0
  181. package/src/{build/plugins/minify_js/jsenv_plugin_minify_js.js → plugins/minification/js/minify_js.js} +6 -22
  182. package/src/plugins/minification/jsenv_plugin_minification.js +78 -0
  183. package/src/plugins/minification/json/minify_json.js +8 -0
  184. package/src/plugins/node_esm_resolution/jsenv_plugin_node_esm_resolution.js +160 -0
  185. package/src/plugins/node_runtime/jsenv_plugin_node_runtime.js +12 -0
  186. package/src/{omega → plugins}/plugin_controller.js +56 -11
  187. package/src/plugins/plugins.js +92 -0
  188. package/src/plugins/transpilation/as_js_classic/client/s.js +429 -0
  189. package/src/plugins/transpilation/as_js_classic/helpers/babel_plugin_transform_import_meta_url.js +47 -0
  190. package/src/plugins/transpilation/as_js_classic/helpers/systemjs_old.js +43 -0
  191. package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic.js +213 -0
  192. package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic_html.js +304 -0
  193. package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic_workers.js +55 -0
  194. package/src/{omega/core_plugins → plugins/transpilation}/babel/global_this/babel_plugin_global_this_as_jsenv_import.js +0 -0
  195. package/src/{omega/core_plugins → plugins/transpilation}/babel/global_this/client/global_this.js +0 -0
  196. package/src/{omega/core_plugins → plugins/transpilation}/babel/helpers/babel_plugin_babel_helpers_as_jsenv_imports.js +0 -0
  197. package/src/{omega/core_plugins → plugins/transpilation}/babel/helpers/babel_plugin_structure.js +12 -16
  198. package/src/{omega/core_plugins → plugins/transpilation}/babel/helpers/babel_plugins_compatibility.js +0 -0
  199. package/src/{omega/core_plugins → plugins/transpilation}/babel/jsenv_plugin_babel.js +39 -32
  200. package/src/{omega/core_plugins → plugins/transpilation}/babel/new_stylesheet/babel_plugin_new_stylesheet_as_jsenv_import.js +30 -6
  201. package/src/{omega/core_plugins → plugins/transpilation}/babel/new_stylesheet/client/new_stylesheet.js +0 -0
  202. package/src/{omega/core_plugins → plugins/transpilation}/babel/regenerator_runtime/babel_plugin_regenerator_runtime_as_jsenv_import.js +0 -0
  203. package/src/{omega/core_plugins → plugins/transpilation}/babel/regenerator_runtime/client/regenerator_runtime.js +0 -0
  204. package/src/plugins/transpilation/css_parcel/jsenv_plugin_css_parcel.js +18 -0
  205. package/src/plugins/transpilation/import_assertions/jsenv_plugin_import_assertions.js +184 -0
  206. package/src/plugins/transpilation/jsenv_plugin_top_level_await.js +80 -0
  207. package/src/plugins/transpilation/jsenv_plugin_transpilation.js +46 -0
  208. package/src/plugins/url_analysis/css/css_urls.js +49 -0
  209. package/src/plugins/url_analysis/html/html_urls.js +272 -0
  210. package/src/plugins/url_analysis/js/js_urls.js +68 -0
  211. package/src/plugins/url_analysis/jsenv_plugin_url_analysis.js +102 -0
  212. package/src/plugins/url_analysis/webmanifest/webmanifest_urls.js +20 -0
  213. package/src/{omega/core_plugins → plugins}/url_resolution/jsenv_plugin_url_resolution.js +9 -5
  214. package/src/plugins/url_version/jsenv_plugin_url_version.js +28 -0
  215. package/src/test/execute_plan.js +81 -44
  216. package/src/test/execute_test_plan.js +37 -24
  217. package/src/test/execution_steps.js +1 -4
  218. package/src/test/logs_file_execution.js +56 -49
  219. package/src/build/plugins/bundle_js_module/jsenv_plugin_bundle_js_module.js +0 -225
  220. package/src/build/plugins/minify_html/jsenv_plugin_minify_html.js +0 -30
  221. package/src/dev/plugins/autoreload/client/event_source_connection.js +0 -195
  222. package/src/dev/plugins/autoreload/jsenv_plugin_autoreload.js +0 -374
  223. package/src/dev/plugins/autoreload/sse_service.js +0 -149
  224. package/src/execute/runtimes/node/controlled_process.js +0 -316
  225. package/src/omega/core_plugins/babel/new_stylesheet/client/.eslintrc.cjs +0 -24
  226. package/src/omega/core_plugins/file_urls/jsenv_plugin_file_urls.js +0 -67
  227. package/src/omega/core_plugins/filesystem_magic/jsenv_plugin_filesystem_magic.js +0 -58
  228. package/src/omega/core_plugins/html_supervisor/client/html_supervisor_installer.js +0 -168
  229. package/src/omega/core_plugins/html_supervisor/client/html_supervisor_setup.js +0 -77
  230. package/src/omega/core_plugins/import_assertions/helpers/babel_plugin_metadata_import_assertions.js +0 -98
  231. package/src/omega/core_plugins/import_assertions/helpers/json_module.js +0 -12
  232. package/src/omega/core_plugins/import_assertions/helpers/text_module.js +0 -6
  233. package/src/omega/core_plugins/import_assertions/jsenv_plugin_import_assertions.js +0 -211
  234. package/src/omega/core_plugins/inline/jsenv_plugin_inline.js +0 -13
  235. package/src/omega/core_plugins/inline/jsenv_plugin_js_and_css_inside_html.js +0 -142
  236. package/src/omega/core_plugins/inline/jsenv_plugin_new_inline_content.js +0 -207
  237. package/src/omega/core_plugins/leading_slash/jsenv_plugin_leading_slash.js +0 -12
  238. package/src/omega/core_plugins/node_esm_resolution/jsenv_plugin_node_esm_resolution.js +0 -77
  239. package/src/omega/core_plugins/url_version/jsenv_plugin_url_version.js +0 -50
  240. package/src/omega/core_plugins.js +0 -39
  241. package/src/omega/runtime_support/default_runtime_support.js +0 -13
  242. package/src/omega/url_graph/url_graph_sort.js +0 -29
  243. package/src/omega/url_mentions/css_url_mentions.js +0 -63
  244. package/src/omega/url_mentions/html_url_mentions.js +0 -185
  245. package/src/omega/url_mentions/js_module_url_mentions.js +0 -91
  246. package/src/omega/url_mentions/parse_url_mentions.js +0 -37
  247. package/src/omega/url_mentions/worker_classic_url_mentions.js +0 -37
@@ -0,0 +1,43 @@
1
+ // const { clientRuntimeCompat, isSupportedOnCurrentClient } = context
2
+ // const shouldBeCompatibleWithNode =
3
+ // Object.keys(clientRuntimeCompat).includes("node")
4
+ // const requiredFeatureNames = [
5
+ // "import_dynamic",
6
+ // "top_level_await",
7
+ // "global_this",
8
+ // // when using node we assume the code won't use browser specific feature
9
+ // ...(shouldBeCompatibleWithNode
10
+ // ? []
11
+ // : [
12
+ // "script_type_module",
13
+ // "worker_type_module",
14
+ // "import_type_json",
15
+ // "import_type_css",
16
+ // ]),
17
+ // // "importmap",
18
+ // ]
19
+ // const needsSystemJs = featuresRelatedToSystemJs.some((featureName) => {
20
+ // const isRequired = requiredFeatureNames.includes(featureName)
21
+ // return isRequired && !isSupportedOnCurrentClient(featureName)
22
+ // })
23
+ // if (!needsSystemJs) {
24
+ // return null
25
+ // }
26
+ // const { code, map } = await applyBabelPlugins({
27
+
28
+ // })
29
+ // return {
30
+ // content: code,
31
+ // soourcemap: map,
32
+ // }
33
+
34
+ // const featuresRelatedToSystemJs = [
35
+ // "script_type_module",
36
+ // "worker_type_module",
37
+ // "import_dynamic",
38
+ // "import_type_json",
39
+ // "import_type_css",
40
+ // "top_level_await",
41
+ // // "importmap",
42
+ // // "worker_importmap",
43
+ // ]
@@ -0,0 +1,213 @@
1
+ /*
2
+ * Something to keep in mind:
3
+ * When systemjs format is used by babel, it will generated UID based on
4
+ * the import specifier:
5
+ * https://github.com/babel/babel/blob/97d1967826077f15e766778c0d64711399e9a72a/packages/babel-plugin-transform-modules-systemjs/src/index.ts#L498
6
+ * But at this stage import specifier are absolute file urls
7
+ * So without minification these specifier are long and dependent
8
+ * on where the files are on the filesystem.
9
+ * This is mitigated by minification that will shorten them
10
+ * But ideally babel should not generate this in the first place
11
+ * and prefer to unique identifier based solely on the specifier basename for instance
12
+ */
13
+
14
+ import { createRequire } from "node:module"
15
+ import { urlToFilename, injectQueryParams } from "@jsenv/urls"
16
+ import { readFileSync } from "@jsenv/filesystem"
17
+
18
+ import { requireBabelPlugin } from "@jsenv/babel-plugins"
19
+ import { applyBabelPlugins } from "@jsenv/utils/js_ast/apply_babel_plugins.js"
20
+ import { createMagicSource } from "@jsenv/utils/sourcemap/magic_source.js"
21
+ import { composeTwoSourcemaps } from "@jsenv/utils/sourcemap/sourcemap_composition_v3.js"
22
+
23
+ import { babelPluginTransformImportMetaUrl } from "./helpers/babel_plugin_transform_import_meta_url.js"
24
+ import { jsenvPluginAsJsClassicHtml } from "./jsenv_plugin_as_js_classic_html.js"
25
+ import { jsenvPluginAsJsClassicWorkers } from "./jsenv_plugin_as_js_classic_workers.js"
26
+
27
+ const require = createRequire(import.meta.url)
28
+
29
+ export const jsenvPluginAsJsClassic = ({ systemJsInjection }) => {
30
+ const systemJsClientFileUrl = new URL(
31
+ "./client/s.js?js_classic",
32
+ import.meta.url,
33
+ ).href
34
+
35
+ return [
36
+ jsenvPluginAsJsClassicConversion({
37
+ systemJsInjection,
38
+ systemJsClientFileUrl,
39
+ }),
40
+ jsenvPluginAsJsClassicHtml({
41
+ systemJsInjection,
42
+ systemJsClientFileUrl,
43
+ generateJsClassicFilename,
44
+ }),
45
+ jsenvPluginAsJsClassicWorkers({
46
+ generateJsClassicFilename,
47
+ }),
48
+ ]
49
+ }
50
+
51
+ // propagate ?as_js_classic to referenced urls
52
+ // and perform the conversion during fetchUrlContent
53
+ const jsenvPluginAsJsClassicConversion = ({
54
+ systemJsInjection,
55
+ systemJsClientFileUrl,
56
+ }) => {
57
+ const propagateJsClassicSearchParam = (reference, context) => {
58
+ const parentUrlInfo = context.urlGraph.getUrlInfo(reference.parentUrl)
59
+ if (
60
+ !parentUrlInfo ||
61
+ !new URL(parentUrlInfo.url).searchParams.has("as_js_classic")
62
+ ) {
63
+ return null
64
+ }
65
+ const urlTransformed = injectQueryParams(reference.url, {
66
+ as_js_classic: "",
67
+ })
68
+ reference.filename = generateJsClassicFilename(reference.url)
69
+ return urlTransformed
70
+ }
71
+
72
+ return {
73
+ name: "jsenv:as_js_classic_conversion",
74
+ appliesDuring: "*",
75
+ redirectUrl: {
76
+ // We want to propagate transformation of js module to js classic to:
77
+ // - import specifier (static/dynamic import + re-export)
78
+ // - url specifier when inside System.register/_context.import()
79
+ // (because it's the transpiled equivalent of static and dynamic imports)
80
+ // And not other references otherwise we could try to transform inline ressources
81
+ // or specifiers inside new URL()...
82
+ js_import_export: propagateJsClassicSearchParam,
83
+ js_url_specifier: (reference, context) => {
84
+ if (
85
+ reference.subtype === "system_register_arg" ||
86
+ reference.subtype === "system_import_arg"
87
+ ) {
88
+ return propagateJsClassicSearchParam(reference, context)
89
+ }
90
+ return null
91
+ },
92
+ },
93
+ fetchUrlContent: async (urlInfo, context) => {
94
+ const originalUrlInfo = await context.fetchOriginalUrlInfo({
95
+ urlInfo,
96
+ context,
97
+ searchParam: "as_js_classic",
98
+ // override the expectedType to "js_module"
99
+ // because when there is ?as_js_classic it means the underlying ressource
100
+ // is a js_module
101
+ expectedType: "js_module",
102
+ })
103
+ if (!originalUrlInfo) {
104
+ return null
105
+ }
106
+ const isJsEntryPoint =
107
+ // in general html files are entry points
108
+ // but during build js can be sepcified as an entry point
109
+ // (meaning there is no html file where we can inject systemjs)
110
+ // in that case we need to inject systemjs in the js file
111
+ originalUrlInfo.data.isEntryPoint ||
112
+ // In thoose case we need to inject systemjs the worker js file
113
+ originalUrlInfo.data.isWebWorkerEntryPoint
114
+ // if it's an entry point without dependency (it does not use import)
115
+ // then we can use UMD, otherwise we have to use systemjs
116
+ // because it is imported by systemjs
117
+ const jsClassicFormat =
118
+ isJsEntryPoint && !originalUrlInfo.data.usesImport ? "umd" : "system"
119
+ const { content, sourcemap } = await convertJsModuleToJsClassic({
120
+ systemJsInjection,
121
+ systemJsClientFileUrl,
122
+ urlInfo: originalUrlInfo,
123
+ isJsEntryPoint,
124
+ jsClassicFormat,
125
+ })
126
+ urlInfo.data.jsClassicFormat = jsClassicFormat
127
+ return {
128
+ originalUrl: originalUrlInfo.originalUrl,
129
+ originalContent: originalUrlInfo.originalContent,
130
+ type: "js_classic",
131
+ contentType: "text/javascript",
132
+ content,
133
+ sourcemap,
134
+ }
135
+ },
136
+ }
137
+ }
138
+
139
+ const generateJsClassicFilename = (url) => {
140
+ const filename = urlToFilename(url)
141
+ let [basename, extension] = splitFileExtension(filename)
142
+ const { searchParams } = new URL(url)
143
+ if (
144
+ searchParams.has("as_json_module") ||
145
+ searchParams.has("as_css_module") ||
146
+ searchParams.has("as_text_module")
147
+ ) {
148
+ extension = ".js"
149
+ }
150
+ return `${basename}.es5${extension}`
151
+ }
152
+
153
+ const splitFileExtension = (filename) => {
154
+ const dotLastIndex = filename.lastIndexOf(".")
155
+ if (dotLastIndex === -1) {
156
+ return [filename, ""]
157
+ }
158
+ return [filename.slice(0, dotLastIndex), filename.slice(dotLastIndex)]
159
+ }
160
+
161
+ const convertJsModuleToJsClassic = async ({
162
+ systemJsInjection,
163
+ systemJsClientFileUrl,
164
+ urlInfo,
165
+ isJsEntryPoint,
166
+ jsClassicFormat,
167
+ }) => {
168
+ const { code, map } = await applyBabelPlugins({
169
+ babelPlugins: [
170
+ ...(jsClassicFormat === "system"
171
+ ? [
172
+ // propposal-dynamic-import required with systemjs for babel8:
173
+ // https://github.com/babel/babel/issues/10746
174
+ require("@babel/plugin-proposal-dynamic-import"),
175
+ [
176
+ requireBabelPlugin("babel-plugin-transform-async-to-promises"),
177
+ {
178
+ topLevelAwait: "return",
179
+ },
180
+ ],
181
+ require("@babel/plugin-transform-modules-systemjs"),
182
+ ]
183
+ : [
184
+ [
185
+ requireBabelPlugin("babel-plugin-transform-async-to-promises"),
186
+ {
187
+ topLevelAwait: "simple",
188
+ },
189
+ ],
190
+ babelPluginTransformImportMetaUrl,
191
+ require("@babel/plugin-transform-modules-umd"),
192
+ ]),
193
+ ],
194
+ urlInfo,
195
+ })
196
+ let sourcemap = urlInfo.sourcemap
197
+ sourcemap = await composeTwoSourcemaps(sourcemap, map)
198
+ if (systemJsInjection && jsClassicFormat === "system" && isJsEntryPoint) {
199
+ const magicSource = createMagicSource(code)
200
+ const systemjsCode = readFileSync(systemJsClientFileUrl, { as: "string" })
201
+ magicSource.prepend(`${systemjsCode}\n\n`)
202
+ const magicResult = magicSource.toContentAndSourcemap()
203
+ sourcemap = await composeTwoSourcemaps(sourcemap, magicResult.sourcemap)
204
+ return {
205
+ content: magicResult.content,
206
+ sourcemap,
207
+ }
208
+ }
209
+ return {
210
+ content: code,
211
+ sourcemap,
212
+ }
213
+ }
@@ -0,0 +1,304 @@
1
+ import {
2
+ getHtmlNodeAttributeByName,
3
+ getHtmlNodeTextNode,
4
+ parseHtmlString,
5
+ removeHtmlNodeAttributeByName,
6
+ assignHtmlNodeAttributes,
7
+ stringifyHtmlAst,
8
+ visitHtmlAst,
9
+ htmlNodePosition,
10
+ setHtmlNodeGeneratedText,
11
+ injectScriptAsEarlyAsPossible,
12
+ createHtmlNode,
13
+ } from "@jsenv/utils/html_ast/html_ast.js"
14
+ import {
15
+ generateInlineContentUrl,
16
+ injectQueryParamsIntoSpecifier,
17
+ } from "@jsenv/urls"
18
+
19
+ export const jsenvPluginAsJsClassicHtml = ({
20
+ systemJsInjection,
21
+ systemJsClientFileUrl,
22
+ generateJsClassicFilename,
23
+ }) => {
24
+ return {
25
+ name: "jsenv:as_js_classic_html",
26
+ appliesDuring: "*",
27
+ transformUrlContent: {
28
+ html: async (urlInfo, context) => {
29
+ const shouldTransformScriptTypeModule =
30
+ !context.isSupportedOnCurrentClients("script_type_module") ||
31
+ !context.isSupportedOnCurrentClients("import_dynamic")
32
+ const htmlAst = parseHtmlString(urlInfo.content)
33
+ const preloadAsScriptNodes = []
34
+ const modulePreloadNodes = []
35
+ const moduleScriptNodes = []
36
+ const classicScriptNodes = []
37
+ const visitLinkNodes = (node) => {
38
+ if (node.nodeName !== "link") {
39
+ return
40
+ }
41
+ const relAttribute = getHtmlNodeAttributeByName(node, "rel")
42
+ const rel = relAttribute ? relAttribute.value : undefined
43
+ if (rel === "modulepreload") {
44
+ modulePreloadNodes.push(node)
45
+ return
46
+ }
47
+ if (rel === "preload") {
48
+ const asAttribute = getHtmlNodeAttributeByName(node, "as")
49
+ const asValue = asAttribute ? asAttribute.value : undefined
50
+ if (asValue === "script") {
51
+ preloadAsScriptNodes.push(node)
52
+ }
53
+ return
54
+ }
55
+ }
56
+ const visitScriptNodes = (node) => {
57
+ if (node.nodeName !== "script") {
58
+ return
59
+ }
60
+ const typeAttribute = getHtmlNodeAttributeByName(node, "type")
61
+ const type = typeAttribute ? typeAttribute.value : undefined
62
+ if (type === "module") {
63
+ moduleScriptNodes.push(node)
64
+ return
65
+ }
66
+ if (type === undefined || type === "text/javascript") {
67
+ classicScriptNodes.push(node)
68
+ return
69
+ }
70
+ }
71
+ visitHtmlAst(htmlAst, (node) => {
72
+ visitLinkNodes(node)
73
+ visitScriptNodes(node)
74
+ })
75
+
76
+ const actions = []
77
+ const jsModuleUrls = []
78
+ const convertedUrls = []
79
+ const getReferenceAsJsClassic = async (
80
+ reference,
81
+ {
82
+ // we don't cook ressource hints
83
+ // because they might refer to ressource that will be modified during build
84
+ // It also means something else HAVE to reference that url in order to cook it
85
+ // so that the preload is deleted by "resync_ressource_hints.js" otherwise
86
+ cookIt = false,
87
+ } = {},
88
+ ) => {
89
+ const newReferenceProps = {
90
+ expectedType: "js_classic",
91
+ specifier: injectQueryParamsIntoSpecifier(reference.specifier, {
92
+ as_js_classic: "",
93
+ }),
94
+ filename: generateJsClassicFilename(reference.url),
95
+ }
96
+ const [newReference, newUrlInfo] = context.referenceUtils.update(
97
+ reference,
98
+ newReferenceProps,
99
+ )
100
+ const convertedUrl = newUrlInfo.url
101
+ if (!convertedUrls.includes(convertedUrl)) {
102
+ convertedUrls.push(convertedUrl)
103
+ }
104
+ if (cookIt) {
105
+ // during dev it means js modules will be cooked before server sends the HTML
106
+ // it's ok because:
107
+ // - during dev script_type_module are supported (dev use a recent browser)
108
+ // - even if browser is not supported it still works it's jus a bit slower
109
+ // because it needs to decide if systemjs will be injected or not
110
+ await context.cook(newUrlInfo, { reference: newReference })
111
+ }
112
+ return [newReference, newUrlInfo]
113
+ }
114
+
115
+ classicScriptNodes.forEach((classicScriptNode) => {
116
+ const srcAttribute = getHtmlNodeAttributeByName(
117
+ classicScriptNode,
118
+ "src",
119
+ )
120
+ if (srcAttribute) {
121
+ const reference = urlInfo.references.find(
122
+ (ref) =>
123
+ ref.generatedSpecifier === srcAttribute.value &&
124
+ ref.type === "script_src",
125
+ )
126
+ const urlObject = new URL(reference.url)
127
+ if (urlObject.searchParams.has("as_js_classic")) {
128
+ const convertedUrl = urlObject.href
129
+ convertedUrls.push(convertedUrl)
130
+ urlObject.searchParams.delete("as_js_classic")
131
+ const jsModuleUrl = urlObject.href
132
+ jsModuleUrls.push(jsModuleUrl)
133
+ actions.push(async () => {
134
+ const urlInfo = context.urlGraph.getUrlInfo(convertedUrl)
135
+ await context.cook(urlInfo, { reference })
136
+ })
137
+ }
138
+ }
139
+ })
140
+ moduleScriptNodes.forEach((moduleScriptNode) => {
141
+ const srcAttribute = getHtmlNodeAttributeByName(
142
+ moduleScriptNode,
143
+ "src",
144
+ )
145
+ if (srcAttribute) {
146
+ const reference = urlInfo.references.find(
147
+ (ref) =>
148
+ ref.generatedSpecifier === srcAttribute.value &&
149
+ ref.type === "script_src" &&
150
+ ref.expectedType === "js_module",
151
+ )
152
+ jsModuleUrls.push(reference.url)
153
+ if (shouldTransformScriptTypeModule) {
154
+ actions.push(async () => {
155
+ const [newReference] = await getReferenceAsJsClassic(
156
+ reference,
157
+ {
158
+ cookIt: true,
159
+ },
160
+ )
161
+ removeHtmlNodeAttributeByName(moduleScriptNode, "type")
162
+ srcAttribute.value = newReference.generatedSpecifier
163
+ })
164
+ }
165
+ return
166
+ }
167
+ if (shouldTransformScriptTypeModule) {
168
+ const textNode = getHtmlNodeTextNode(moduleScriptNode)
169
+ actions.push(async () => {
170
+ const { line, column, lineEnd, columnEnd, isOriginal } =
171
+ htmlNodePosition.readNodePosition(moduleScriptNode, {
172
+ preferOriginal: true,
173
+ })
174
+ let inlineScriptUrl = generateInlineContentUrl({
175
+ url: urlInfo.url,
176
+ extension: ".js",
177
+ line,
178
+ column,
179
+ lineEnd,
180
+ columnEnd,
181
+ })
182
+ const [inlineReference] = context.referenceUtils.foundInline({
183
+ node: moduleScriptNode,
184
+ type: "script_src",
185
+ expectedType: "js_module",
186
+ isOriginalPosition: isOriginal,
187
+ // we remove 1 to the line because imagine the following html:
188
+ // <script>console.log('ok')</script>
189
+ // -> content starts same line as <script>
190
+ specifierLine: line - 1,
191
+ specifierColumn: column,
192
+ specifier: inlineScriptUrl,
193
+ contentType: "application/javascript",
194
+ content: textNode.value,
195
+ })
196
+ const [, newUrlInfo] = await getReferenceAsJsClassic(
197
+ inlineReference,
198
+ { cookIt: true },
199
+ )
200
+ removeHtmlNodeAttributeByName(moduleScriptNode, "type")
201
+ setHtmlNodeGeneratedText(moduleScriptNode, {
202
+ generatedText: newUrlInfo.content,
203
+ generatedBy: "jsenv:as_js_classic_html",
204
+ })
205
+ })
206
+ }
207
+ })
208
+ if (shouldTransformScriptTypeModule) {
209
+ preloadAsScriptNodes.forEach((preloadAsScriptNode) => {
210
+ const hrefAttribute = getHtmlNodeAttributeByName(
211
+ preloadAsScriptNode,
212
+ "href",
213
+ )
214
+ const href = hrefAttribute.value
215
+ const reference = urlInfo.references.find(
216
+ (ref) =>
217
+ ref.generatedSpecifier === href &&
218
+ ref.type === "link_href" &&
219
+ ref.expectedType === undefined,
220
+ )
221
+ const expectedScriptType = jsModuleUrls.includes(reference.url)
222
+ ? "module"
223
+ : "classic"
224
+ if (expectedScriptType === "module") {
225
+ actions.push(async () => {
226
+ // reference modified by <script type="module"> conversion
227
+ let newReference
228
+ if (reference.next) {
229
+ newReference = reference.next
230
+ } else {
231
+ // when the url is not referenced by a <script type="module">
232
+ // we assume we want to preload "classic" but it might not be the case
233
+ // but it's unlikely to happen and people should use "modulepreload" in that case anyway
234
+ ;[newReference] = await getReferenceAsJsClassic(reference)
235
+ }
236
+ assignHtmlNodeAttributes(preloadAsScriptNode, {
237
+ href: newReference.generatedSpecifier,
238
+ })
239
+ removeHtmlNodeAttributeByName(
240
+ preloadAsScriptNode,
241
+ "crossorigin",
242
+ )
243
+ })
244
+ }
245
+ })
246
+ modulePreloadNodes.forEach((modulePreloadNode) => {
247
+ const hrefAttribute = getHtmlNodeAttributeByName(
248
+ modulePreloadNode,
249
+ "href",
250
+ )
251
+ const href = hrefAttribute.value
252
+ const reference = urlInfo.references.find(
253
+ (ref) =>
254
+ ref.generatedSpecifier === href &&
255
+ ref.type === "link_href" &&
256
+ ref.expectedType === "js_module",
257
+ )
258
+ actions.push(async () => {
259
+ let newReference
260
+ if (reference.next) {
261
+ newReference = reference.next
262
+ } else {
263
+ ;[newReference] = await getReferenceAsJsClassic(reference)
264
+ }
265
+ assignHtmlNodeAttributes(modulePreloadNode, {
266
+ rel: "preload",
267
+ as: "script",
268
+ href: newReference.generatedSpecifier,
269
+ })
270
+ })
271
+ })
272
+ }
273
+
274
+ if (actions.length === 0) {
275
+ return null
276
+ }
277
+ await Promise.all(actions.map((action) => action()))
278
+ if (systemJsInjection) {
279
+ const needsSystemJs = convertedUrls.some(
280
+ (convertedUrl) =>
281
+ context.urlGraph.getUrlInfo(convertedUrl).data.jsClassicFormat ===
282
+ "system",
283
+ )
284
+ if (needsSystemJs) {
285
+ const [systemJsReference] = context.referenceUtils.inject({
286
+ type: "script_src",
287
+ expectedType: "js_classic",
288
+ specifier: systemJsClientFileUrl,
289
+ })
290
+ injectScriptAsEarlyAsPossible(
291
+ htmlAst,
292
+ createHtmlNode({
293
+ "tagName": "script",
294
+ "src": systemJsReference.generatedSpecifier,
295
+ "injected-by": "jsenv:as_js_classic_html",
296
+ }),
297
+ )
298
+ }
299
+ }
300
+ return stringifyHtmlAst(htmlAst)
301
+ },
302
+ },
303
+ }
304
+ }
@@ -0,0 +1,55 @@
1
+ import { injectQueryParams } from "@jsenv/urls"
2
+
3
+ export const jsenvPluginAsJsClassicWorkers = ({
4
+ generateJsClassicFilename,
5
+ }) => {
6
+ const updateReference = (reference) => {
7
+ reference.filename = generateJsClassicFilename(reference.url)
8
+ reference.mutation = (magicSource) => {
9
+ magicSource.replace({
10
+ start: reference.typePropertyNode.value.start,
11
+ end: reference.typePropertyNode.value.end,
12
+ replacement: JSON.stringify("classic"),
13
+ })
14
+ }
15
+ reference.expectedType = "js_classic"
16
+ return injectQueryParams(reference.url, {
17
+ as_js_classic: "",
18
+ })
19
+ }
20
+
21
+ return {
22
+ name: "jsenv:as_js_classic_workers",
23
+ appliesDuring: "*",
24
+ redirectUrl: {
25
+ js_url_specifier: (reference, context) => {
26
+ if (reference.expectedType !== "js_module") {
27
+ return null
28
+ }
29
+ if (reference.expectedSubtype === "worker") {
30
+ if (context.isSupportedOnCurrentClients("worker_type_module")) {
31
+ return null
32
+ }
33
+ return updateReference(reference)
34
+ }
35
+ if (reference.expectedSubtype === "service_worker") {
36
+ if (
37
+ context.isSupportedOnCurrentClients("service_worker_type_module")
38
+ ) {
39
+ return null
40
+ }
41
+ return updateReference(reference)
42
+ }
43
+ if (reference.expectedSubtype === "shared_worker") {
44
+ if (
45
+ context.isSupportedOnCurrentClients("shared_worker_type_module")
46
+ ) {
47
+ return null
48
+ }
49
+ return updateReference(reference)
50
+ }
51
+ return null
52
+ },
53
+ },
54
+ }
55
+ }
@@ -3,14 +3,12 @@ import { babelPluginCompatMap } from "./babel_plugins_compatibility.js"
3
3
 
4
4
  export const getBaseBabelPluginStructure = ({
5
5
  url,
6
- isSupportedOnRuntime,
7
- usesTopLevelAwait,
8
- // // https://github.com/rpetrich/babel-plugin-transform-async-to-promises/blob/92755ff8c943c97596523e586b5fa515c2e99326/async-to-promises.ts#L55
9
- topLevelAwait = "simple",
10
- isJsModule,
6
+ isSupported,
7
+ // isJsModule,
8
+ // getImportSpecifier,
11
9
  }) => {
12
10
  const isBabelPluginNeeded = (babelPluginName) => {
13
- return !isSupportedOnRuntime(babelPluginCompatMap[babelPluginName])
11
+ return !isSupported(babelPluginCompatMap[babelPluginName])
14
12
  }
15
13
 
16
14
  const babelPluginStructure = {}
@@ -37,21 +35,19 @@ export const getBaseBabelPluginStructure = ({
37
35
  babelPluginStructure["proposal-unicode-property-regex"] =
38
36
  requireBabelPlugin("@babel/plugin-proposal-unicode-property-regex")
39
37
  }
40
- if (
41
- isJsModule &&
42
- usesTopLevelAwait &&
43
- !isSupportedOnRuntime("top_level_await")
44
- ) {
38
+ if (isBabelPluginNeeded("transform-async-to-promises")) {
45
39
  babelPluginStructure["transform-async-to-promises"] = [
46
40
  requireBabelPlugin("babel-plugin-transform-async-to-promises"),
47
41
  {
48
- topLevelAwait,
42
+ topLevelAwait: "ignore", // will be handled by "jsenv:top_level_await" plugin
43
+ externalHelpers: false,
44
+ // enable once https://github.com/rpetrich/babel-plugin-transform-async-to-promises/pull/83
45
+ // externalHelpers: isJsModule,
46
+ // externalHelpersPath: isJsModule ? getImportSpecifier(
47
+ // "babel-plugin-transform-async-to-promises/helpers.mjs",
48
+ // ) : null
49
49
  },
50
50
  ]
51
- } else if (isBabelPluginNeeded("transform-async-to-promises")) {
52
- babelPluginStructure["transform-async-to-promises"] = requireBabelPlugin(
53
- "babel-plugin-transform-async-to-promises",
54
- )
55
51
  }
56
52
  if (isBabelPluginNeeded("transform-arrow-functions")) {
57
53
  babelPluginStructure["transform-arrow-functions"] = requireBabelPlugin(