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

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 (254) 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/applyDecs/applyDecs.js +756 -0
  5. package/dist/babel_helpers/arrayLikeToArray/arrayLikeToArray.js +9 -0
  6. package/dist/babel_helpers/arrayWithHoles/arrayWithHoles.js +4 -0
  7. package/dist/babel_helpers/arrayWithoutHoles/arrayWithoutHoles.js +5 -0
  8. package/dist/babel_helpers/assertThisInitialized/assertThisInitialized.js +8 -0
  9. package/dist/babel_helpers/asyncGeneratorDelegate/asyncGeneratorDelegate.js +52 -0
  10. package/dist/babel_helpers/asyncIterator/asyncIterator.js +78 -0
  11. package/dist/babel_helpers/asyncToGenerator/asyncToGenerator.js +39 -0
  12. package/dist/babel_helpers/awaitAsyncGenerator/awaitAsyncGenerator.js +4 -0
  13. package/dist/babel_helpers/classApplyDescriptorDestructureSet/classApplyDescriptorDestructureSet.js +24 -0
  14. package/dist/babel_helpers/classApplyDescriptorGet/classApplyDescriptorGet.js +7 -0
  15. package/dist/babel_helpers/classApplyDescriptorSet/classApplyDescriptorSet.js +14 -0
  16. package/dist/babel_helpers/classCallCheck/classCallCheck.js +5 -0
  17. package/dist/babel_helpers/classCheckPrivateStaticAccess/classCheckPrivateStaticAccess.js +5 -0
  18. package/dist/babel_helpers/classCheckPrivateStaticFieldDescriptor/classCheckPrivateStaticFieldDescriptor.js +6 -0
  19. package/dist/babel_helpers/classExtractFieldDescriptor/classExtractFieldDescriptor.js +8 -0
  20. package/dist/babel_helpers/classNameTDZError/classNameTDZError.js +4 -0
  21. package/dist/babel_helpers/classPrivateFieldDestructureSet/classPrivateFieldDestructureSet.js +6 -0
  22. package/dist/babel_helpers/classPrivateFieldGet/classPrivateFieldGet.js +6 -0
  23. package/dist/babel_helpers/classPrivateFieldLooseBase/classPrivateFieldLooseBase.js +7 -0
  24. package/dist/babel_helpers/classPrivateFieldLooseKey/classPrivateFieldLooseKey.js +5 -0
  25. package/dist/babel_helpers/classPrivateFieldSet/classPrivateFieldSet.js +7 -0
  26. package/dist/babel_helpers/classPrivateMethodGet/classPrivateMethodGet.js +7 -0
  27. package/dist/babel_helpers/classPrivateMethodSet/classPrivateMethodSet.js +3 -0
  28. package/dist/babel_helpers/classStaticPrivateFieldSpecGet/classStaticPrivateFieldSpecGet.js +8 -0
  29. package/dist/babel_helpers/classStaticPrivateFieldSpecSet/classStaticPrivateFieldSpecSet.js +9 -0
  30. package/dist/babel_helpers/classStaticPrivateMethodGet/classStaticPrivateMethodGet.js +5 -0
  31. package/dist/babel_helpers/classStaticPrivateMethodSet/classStaticPrivateMethodSet.js +3 -0
  32. package/dist/babel_helpers/construct/construct.js +15 -0
  33. package/dist/babel_helpers/createClass/createClass.js +18 -0
  34. package/dist/babel_helpers/createForOfIteratorHelper/createForOfIteratorHelper.js +63 -0
  35. package/dist/babel_helpers/createForOfIteratorHelperLoose/createForOfIteratorHelperLoose.js +22 -0
  36. package/dist/babel_helpers/createRawReactElement/createRawReactElement.js +50 -0
  37. package/dist/babel_helpers/createSuper/createSuper.js +22 -0
  38. package/dist/babel_helpers/decorate/decorate.js +622 -0
  39. package/dist/babel_helpers/defaults/defaults.js +14 -0
  40. package/dist/babel_helpers/defineEnumerableProperties/defineEnumerableProperties.js +26 -0
  41. package/dist/babel_helpers/defineProperty/defineProperty.js +19 -0
  42. package/dist/babel_helpers/extends/extends.js +16 -0
  43. package/dist/babel_helpers/get/get.js +21 -0
  44. package/dist/babel_helpers/getPrototypeOf/getPrototypeOf.js +2 -0
  45. package/dist/babel_helpers/identity/identity.js +3 -0
  46. package/dist/babel_helpers/inherits/inherits.js +21 -0
  47. package/dist/babel_helpers/inheritsLoose/inheritsLoose.js +6 -0
  48. package/dist/babel_helpers/initializerDefineProperty/initializerDefineProperty.js +10 -0
  49. package/dist/babel_helpers/initializerWarningHelper/initializerWarningHelper.js +3 -0
  50. package/dist/babel_helpers/instanceof/instanceof.js +7 -0
  51. package/dist/babel_helpers/interopRequireDefault/interopRequireDefault.js +5 -0
  52. package/dist/babel_helpers/interopRequireWildcard/interopRequireWildcard.js +49 -0
  53. package/dist/babel_helpers/isNativeFunction/isNativeFunction.js +4 -0
  54. package/dist/babel_helpers/isNativeReflectConstruct/isNativeReflectConstruct.js +21 -0
  55. package/dist/babel_helpers/iterableToArray/iterableToArray.js +3 -0
  56. package/dist/babel_helpers/iterableToArrayLimit/iterableToArrayLimit.js +38 -0
  57. package/dist/babel_helpers/iterableToArrayLimitLoose/iterableToArrayLimitLoose.js +13 -0
  58. package/dist/babel_helpers/jsx/jsx.js +49 -0
  59. package/dist/babel_helpers/maybeArrayLike/maybeArrayLike.js +10 -0
  60. package/dist/babel_helpers/newArrowCheck/newArrowCheck.js +5 -0
  61. package/dist/babel_helpers/nonIterableRest/nonIterableRest.js +3 -0
  62. package/dist/babel_helpers/nonIterableSpread/nonIterableSpread.js +3 -0
  63. package/dist/babel_helpers/objectDestructuringEmpty/objectDestructuringEmpty.js +3 -0
  64. package/dist/babel_helpers/objectSpread/objectSpread.js +22 -0
  65. package/dist/babel_helpers/objectSpread2/objectSpread2.js +41 -0
  66. package/dist/babel_helpers/objectWithoutProperties/objectWithoutProperties.js +20 -0
  67. package/dist/babel_helpers/objectWithoutPropertiesLoose/objectWithoutPropertiesLoose.js +15 -0
  68. package/dist/babel_helpers/possibleConstructorReturn/possibleConstructorReturn.js +10 -0
  69. package/dist/babel_helpers/readOnlyError/readOnlyError.js +4 -0
  70. package/dist/babel_helpers/set/set.js +51 -0
  71. package/dist/babel_helpers/setPrototypeOf/setPrototypeOf.js +5 -0
  72. package/dist/babel_helpers/skipFirstGeneratorNext/skipFirstGeneratorNext.js +8 -0
  73. package/dist/babel_helpers/slicedToArray/slicedToArray.js +5 -0
  74. package/dist/babel_helpers/slicedToArrayLoose/slicedToArrayLoose.js +7 -0
  75. package/dist/babel_helpers/superPropBase/superPropBase.js +10 -0
  76. package/dist/babel_helpers/taggedTemplateLiteral/taggedTemplateLiteral.js +11 -0
  77. package/dist/babel_helpers/taggedTemplateLiteralLoose/taggedTemplateLiteralLoose.js +8 -0
  78. package/dist/babel_helpers/tdz/tdz.js +4 -0
  79. package/dist/babel_helpers/temporalRef/temporalRef.js +5 -0
  80. package/dist/babel_helpers/temporalUndefined/temporalUndefined.js +3 -0
  81. package/dist/babel_helpers/toArray/toArray.js +5 -0
  82. package/dist/babel_helpers/toConsumableArray/toConsumableArray.js +5 -0
  83. package/dist/babel_helpers/toPrimitive/toPrimitive.js +14 -0
  84. package/dist/babel_helpers/toPropertyKey/toPropertyKey.js +5 -0
  85. package/dist/babel_helpers/typeof/typeof.js +7 -0
  86. package/dist/babel_helpers/unsupportedIterableToArray/unsupportedIterableToArray.js +10 -0
  87. package/dist/babel_helpers/wrapAsyncGenerator/wrapAsyncGenerator.js +7 -0
  88. package/dist/babel_helpers/wrapNativeSuper/wrapNativeSuper.js +35 -0
  89. package/dist/babel_helpers/wrapRegExp/wrapRegExp.js +67 -0
  90. package/dist/babel_helpers/writeOnlyError/writeOnlyError.js +4 -0
  91. package/dist/html/explorer.html +557 -0
  92. package/dist/js/controllable_file.mjs +227 -0
  93. package/dist/js/event_source_client.js +324 -0
  94. package/dist/js/global_this.js +32 -0
  95. package/dist/js/html_supervisor_installer.js +522 -0
  96. package/dist/js/html_supervisor_setup.js +82 -0
  97. package/dist/js/import_meta_hot.js +84 -0
  98. package/dist/js/inline_content.js +8 -0
  99. package/dist/js/new_stylesheet.js +409 -0
  100. package/dist/js/regenerator_runtime.js +721 -0
  101. package/dist/js/s.js +429 -0
  102. package/dist/main.js +13422 -0
  103. package/dist/other/jsenv.png +0 -0
  104. package/dist/s.js +626 -0
  105. package/dist/s.js.map +204 -0
  106. package/package.json +57 -51
  107. package/readme.md +6 -14
  108. package/src/build/build.js +1074 -563
  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 +210 -0
  115. package/src/dev/plugins/explorer/client/explorer.html +1 -1
  116. package/src/dev/plugins/explorer/jsenv_plugin_explorer.js +9 -13
  117. package/src/dev/plugins/toolbar/jsenv_plugin_toolbar.js +3 -1
  118. package/src/dev/start_dev_server.js +165 -38
  119. package/src/execute/execute.js +35 -8
  120. package/src/execute/run.js +21 -57
  121. package/src/execute/runtimes/browsers/from_playwright.js +220 -150
  122. package/src/execute/runtimes/node/child_exec_options.js +1 -1
  123. package/src/execute/runtimes/node/controllable_file.mjs +26 -10
  124. package/src/execute/runtimes/node/kill_process_tree.js +2 -4
  125. package/src/execute/runtimes/node/node_execution_performance.js +67 -0
  126. package/src/execute/runtimes/node/node_process.js +288 -39
  127. package/src/main.js +27 -0
  128. package/src/omega/{runtime_support/features_compatibility.js → compat/features_compats.js} +30 -7
  129. package/src/omega/{runtime_support/runtime_support.js → compat/runtime_compat.js} +14 -16
  130. package/src/omega/errors.js +63 -67
  131. package/src/omega/fetched_content_compliance.js +24 -0
  132. package/src/omega/file_url_converter.js +9 -51
  133. package/src/omega/kitchen.js +605 -467
  134. package/src/omega/omega_server.js +2 -3
  135. package/src/omega/server/file_service.js +88 -41
  136. package/src/omega/server/user_agent.js +5 -6
  137. package/src/omega/url_graph/url_graph_load.js +31 -23
  138. package/src/omega/url_graph/url_graph_report.js +94 -51
  139. package/src/omega/url_graph/url_info_transformations.js +37 -17
  140. package/src/omega/url_graph.js +88 -19
  141. package/src/omega/url_specifier_encoding.js +59 -0
  142. package/src/omega/web_workers.js +42 -0
  143. package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/autoreload_preference.js +0 -0
  144. package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/event_source_client.js +19 -12
  145. package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/reload.js +0 -0
  146. package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/url_helpers.js +0 -0
  147. package/src/plugins/autoreload/dev_sse/jsenv_plugin_dev_sse_client.js +41 -0
  148. package/src/plugins/autoreload/dev_sse/jsenv_plugin_dev_sse_server.js +204 -0
  149. package/src/plugins/autoreload/jsenv_plugin_autoreload.js +25 -0
  150. package/src/plugins/autoreload/jsenv_plugin_hmr.js +35 -0
  151. package/src/plugins/bundling/css/bundle_css.js +140 -0
  152. package/src/plugins/bundling/js_classic_workers/bundle_js_classic_workers.js +13 -0
  153. package/src/plugins/bundling/js_module/bundle_js_module.js +343 -0
  154. package/src/plugins/bundling/jsenv_plugin_bundling.js +54 -0
  155. package/src/plugins/cache_control/jsenv_plugin_cache_control.js +34 -0
  156. package/src/{omega/core_plugins → plugins}/commonjs_globals/jsenv_plugin_commonjs_globals.js +54 -41
  157. package/src/plugins/file_urls/jsenv_plugin_file_urls.js +183 -0
  158. package/src/{omega/core_plugins → plugins}/html_supervisor/client/error_in_document.js +0 -0
  159. package/src/{omega/core_plugins → plugins}/html_supervisor/client/error_in_notification.js +0 -0
  160. package/src/plugins/html_supervisor/client/html_supervisor_installer.js +254 -0
  161. package/src/plugins/html_supervisor/client/html_supervisor_setup.js +82 -0
  162. package/src/{omega/core_plugins → plugins}/html_supervisor/client/perf_browser.js +0 -0
  163. package/src/{omega/core_plugins → plugins}/html_supervisor/client/uneval_exception.js +0 -0
  164. package/src/{omega/core_plugins → plugins}/html_supervisor/jsenv_plugin_html_supervisor.js +73 -55
  165. package/src/plugins/http_urls/jsenv_plugin_http_urls.js +12 -0
  166. package/src/{dev/plugins/autoreload → plugins/import_meta_hot}/babel_plugin_metadata_import_meta_hot.js +4 -5
  167. package/src/{dev/plugins/autoreload → plugins/import_meta_hot}/client/import_meta_hot.js +3 -1
  168. package/src/{dev/plugins/autoreload → plugins/import_meta_hot}/html_hot_dependencies.js +7 -4
  169. package/src/plugins/import_meta_hot/jsenv_plugin_import_meta_hot.js +100 -0
  170. package/src/{omega/core_plugins → plugins}/import_meta_scenarios/jsenv_plugin_import_meta_scenarios.js +33 -8
  171. package/src/plugins/import_meta_url/client/import_meta_url_browser.js +52 -0
  172. package/src/plugins/import_meta_url/client/import_meta_url_commonjs.mjs +9 -0
  173. package/src/{omega/core_plugins → plugins}/importmap/jsenv_plugin_importmap.js +40 -36
  174. package/src/plugins/inject_globals/inject_globals.js +57 -0
  175. package/src/plugins/inject_globals/jsenv_plugin_inject_globals.js +24 -0
  176. package/src/{omega/core_plugins → plugins}/inline/client/inline_content.js +0 -0
  177. package/src/{omega/core_plugins → plugins}/inline/jsenv_plugin_data_urls.js +22 -21
  178. package/src/plugins/inline/jsenv_plugin_html_inline_content.js +161 -0
  179. package/src/plugins/inline/jsenv_plugin_inline.js +36 -0
  180. package/src/{omega/core_plugins → plugins}/inline/jsenv_plugin_inline_query_param.js +8 -11
  181. package/src/plugins/inline/jsenv_plugin_js_inline_content.js +294 -0
  182. package/src/plugins/leading_slash/jsenv_plugin_leading_slash.js +13 -0
  183. package/src/plugins/minification/css/minify_css.js +9 -0
  184. package/src/plugins/minification/html/minify_html.js +13 -0
  185. package/src/{build/plugins/minify_js/jsenv_plugin_minify_js.js → plugins/minification/js/minify_js.js} +6 -22
  186. package/src/plugins/minification/jsenv_plugin_minification.js +78 -0
  187. package/src/plugins/minification/json/minify_json.js +8 -0
  188. package/src/plugins/node_esm_resolution/jsenv_plugin_node_esm_resolution.js +162 -0
  189. package/src/plugins/node_runtime/jsenv_plugin_node_runtime.js +12 -0
  190. package/src/{omega → plugins}/plugin_controller.js +57 -12
  191. package/src/plugins/plugins.js +89 -0
  192. package/src/plugins/transpilation/as_js_classic/client/s.js +429 -0
  193. package/src/plugins/transpilation/as_js_classic/helpers/babel_plugin_transform_import_meta_url.js +47 -0
  194. package/src/plugins/transpilation/as_js_classic/helpers/systemjs_old.js +43 -0
  195. package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic.js +211 -0
  196. package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic_html.js +304 -0
  197. package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic_workers.js +55 -0
  198. package/src/{omega/core_plugins → plugins/transpilation}/babel/global_this/babel_plugin_global_this_as_jsenv_import.js +0 -0
  199. package/src/{omega/core_plugins → plugins/transpilation}/babel/global_this/client/global_this.js +0 -0
  200. package/src/{omega/core_plugins → plugins/transpilation}/babel/helpers/babel_plugin_babel_helpers_as_jsenv_imports.js +0 -0
  201. package/src/{omega/core_plugins → plugins/transpilation}/babel/helpers/babel_plugin_structure.js +14 -17
  202. package/src/{omega/core_plugins → plugins/transpilation}/babel/helpers/babel_plugins_compatibility.js +0 -0
  203. package/src/{omega/core_plugins → plugins/transpilation}/babel/jsenv_plugin_babel.js +39 -32
  204. package/src/{omega/core_plugins → plugins/transpilation}/babel/new_stylesheet/babel_plugin_new_stylesheet_as_jsenv_import.js +30 -6
  205. package/src/{omega/core_plugins → plugins/transpilation}/babel/new_stylesheet/client/new_stylesheet.js +0 -0
  206. package/src/{omega/core_plugins → plugins/transpilation}/babel/regenerator_runtime/babel_plugin_regenerator_runtime_as_jsenv_import.js +0 -0
  207. package/src/{omega/core_plugins → plugins/transpilation}/babel/regenerator_runtime/client/regenerator_runtime.js +0 -0
  208. package/src/plugins/transpilation/babel/require_babel_plugin.js +8 -0
  209. package/src/plugins/transpilation/css_parcel/jsenv_plugin_css_parcel.js +18 -0
  210. package/src/plugins/transpilation/import_assertions/jsenv_plugin_import_assertions.js +184 -0
  211. package/src/plugins/transpilation/jsenv_plugin_top_level_await.js +79 -0
  212. package/src/plugins/transpilation/jsenv_plugin_transpilation.js +46 -0
  213. package/src/plugins/url_analysis/css/css_urls.js +49 -0
  214. package/src/plugins/url_analysis/html/html_urls.js +272 -0
  215. package/src/plugins/url_analysis/js/js_urls.js +68 -0
  216. package/src/plugins/url_analysis/jsenv_plugin_url_analysis.js +103 -0
  217. package/src/plugins/url_analysis/webmanifest/webmanifest_urls.js +20 -0
  218. package/src/{omega/core_plugins → plugins}/url_resolution/jsenv_plugin_url_resolution.js +9 -5
  219. package/src/plugins/url_version/jsenv_plugin_url_version.js +28 -0
  220. package/src/require_from_jsenv.js +3 -0
  221. package/src/test/execute_plan.js +85 -44
  222. package/src/test/execute_test_plan.js +37 -25
  223. package/src/test/execution_steps.js +2 -5
  224. package/src/test/logs_file_execution.js +56 -49
  225. package/main.js +0 -19
  226. package/src/build/plugins/bundle_js_module/jsenv_plugin_bundle_js_module.js +0 -227
  227. package/src/build/plugins/minify_html/jsenv_plugin_minify_html.js +0 -30
  228. package/src/dev/plugins/autoreload/client/event_source_connection.js +0 -195
  229. package/src/dev/plugins/autoreload/jsenv_plugin_autoreload.js +0 -374
  230. package/src/dev/plugins/autoreload/sse_service.js +0 -149
  231. package/src/execute/runtimes/node/controlled_process.js +0 -316
  232. package/src/omega/core_plugins/babel/new_stylesheet/client/.eslintrc.cjs +0 -24
  233. package/src/omega/core_plugins/file_urls/jsenv_plugin_file_urls.js +0 -67
  234. package/src/omega/core_plugins/filesystem_magic/jsenv_plugin_filesystem_magic.js +0 -58
  235. package/src/omega/core_plugins/html_supervisor/client/html_supervisor_installer.js +0 -168
  236. package/src/omega/core_plugins/html_supervisor/client/html_supervisor_setup.js +0 -77
  237. package/src/omega/core_plugins/import_assertions/helpers/babel_plugin_metadata_import_assertions.js +0 -98
  238. package/src/omega/core_plugins/import_assertions/helpers/json_module.js +0 -12
  239. package/src/omega/core_plugins/import_assertions/helpers/text_module.js +0 -6
  240. package/src/omega/core_plugins/import_assertions/jsenv_plugin_import_assertions.js +0 -211
  241. package/src/omega/core_plugins/inline/jsenv_plugin_inline.js +0 -13
  242. package/src/omega/core_plugins/inline/jsenv_plugin_js_and_css_inside_html.js +0 -142
  243. package/src/omega/core_plugins/inline/jsenv_plugin_new_inline_content.js +0 -207
  244. package/src/omega/core_plugins/leading_slash/jsenv_plugin_leading_slash.js +0 -12
  245. package/src/omega/core_plugins/node_esm_resolution/jsenv_plugin_node_esm_resolution.js +0 -77
  246. package/src/omega/core_plugins/url_version/jsenv_plugin_url_version.js +0 -50
  247. package/src/omega/core_plugins.js +0 -39
  248. package/src/omega/runtime_support/default_runtime_support.js +0 -13
  249. package/src/omega/url_graph/url_graph_sort.js +0 -29
  250. package/src/omega/url_mentions/css_url_mentions.js +0 -63
  251. package/src/omega/url_mentions/html_url_mentions.js +0 -185
  252. package/src/omega/url_mentions/js_module_url_mentions.js +0 -91
  253. package/src/omega/url_mentions/parse_url_mentions.js +0 -37
  254. package/src/omega/url_mentions/worker_classic_url_mentions.js +0 -37
@@ -30,12 +30,11 @@ import {
30
30
  getHtmlNodeAttributeByName,
31
31
  htmlNodePosition,
32
32
  removeHtmlNodeAttributeByName,
33
- setHtmlNodeText,
34
- assignHtmlNodeAttributes,
33
+ setHtmlNodeGeneratedText,
35
34
  getHtmlNodeTextNode,
36
35
  removeHtmlNode,
37
36
  } from "@jsenv/utils/html_ast/html_ast.js"
38
- import { generateInlineContentUrl } from "@jsenv/utils/urls/inline_content_url_generator.js"
37
+ import { generateInlineContentUrl } from "@jsenv/urls"
39
38
 
40
39
  export const jsenvPluginImportmap = () => {
41
40
  let finalImportmap = null
@@ -59,16 +58,16 @@ export const jsenvPluginImportmap = () => {
59
58
  return {
60
59
  name: "jsenv:importmap",
61
60
  appliesDuring: "*",
62
- resolve: {
63
- js_import_export: ({ parentUrl, specifier }) => {
61
+ resolveUrl: {
62
+ js_import_export: (reference) => {
64
63
  if (!finalImportmap) {
65
64
  return null
66
65
  }
67
66
  try {
68
67
  let fromMapping = false
69
68
  const result = resolveImport({
70
- specifier,
71
- importer: parentUrl,
69
+ specifier: reference.specifier,
70
+ importer: reference.parentUrl,
72
71
  importMap: finalImportmap,
73
72
  onImportMapping: () => {
74
73
  fromMapping = true
@@ -91,12 +90,9 @@ export const jsenvPluginImportmap = () => {
91
90
  }
92
91
  },
93
92
  },
94
- transform: {
95
- html: async (
96
- { url, content, references },
97
- { scenario, cook, urlGraph, referenceUtils },
98
- ) => {
99
- const htmlAst = parseHtmlString(content)
93
+ transformUrlContent: {
94
+ html: async (htmlUrlInfo, context) => {
95
+ const htmlAst = parseHtmlString(htmlUrlInfo.content)
100
96
  const importmap = findNode(htmlAst, (node) => {
101
97
  if (node.nodeName !== "script") {
102
98
  return false
@@ -108,7 +104,7 @@ export const jsenvPluginImportmap = () => {
108
104
  return true
109
105
  })
110
106
  if (!importmap) {
111
- onHtmlImportmapParsed(null, url)
107
+ onHtmlImportmapParsed(null, htmlUrlInfo.url)
112
108
  return null
113
109
  }
114
110
  const handleInlineImportmap = async (importmap, textNode) => {
@@ -117,7 +113,7 @@ export const jsenvPluginImportmap = () => {
117
113
  preferOriginal: true,
118
114
  })
119
115
  const inlineImportmapUrl = generateInlineContentUrl({
120
- url,
116
+ url: htmlUrlInfo.url,
121
117
  extension: ".importmap",
122
118
  line,
123
119
  column,
@@ -125,21 +121,26 @@ export const jsenvPluginImportmap = () => {
125
121
  columnEnd,
126
122
  })
127
123
  const [inlineImportmapReference, inlineImportmapUrlInfo] =
128
- referenceUtils.foundInline({
124
+ context.referenceUtils.foundInline({
129
125
  type: "script_src",
130
- line: line - 1,
131
- column,
132
- isOriginal,
126
+ isOriginalPosition: isOriginal,
127
+ specifierLine: line - 1,
128
+ specifierColumn: column,
133
129
  specifier: inlineImportmapUrl,
134
130
  contentType: "application/importmap+json",
135
131
  content: textNode.value,
136
132
  })
137
- await cook({
133
+ await context.cook(inlineImportmapUrlInfo, {
138
134
  reference: inlineImportmapReference,
139
- urlInfo: inlineImportmapUrlInfo,
140
135
  })
141
- setHtmlNodeText(importmap, inlineImportmapUrlInfo.content)
142
- onHtmlImportmapParsed(JSON.parse(inlineImportmapUrlInfo.content), url)
136
+ setHtmlNodeGeneratedText(importmap, {
137
+ generatedText: inlineImportmapUrlInfo.content,
138
+ generatedBy: "jsenv:importmap",
139
+ })
140
+ onHtmlImportmapParsed(
141
+ JSON.parse(inlineImportmapUrlInfo.content),
142
+ htmlUrlInfo.url,
143
+ )
143
144
  }
144
145
  const handleImportmapWithSrc = async (importmap, src) => {
145
146
  // Browser would throw on remote importmap
@@ -147,35 +148,38 @@ export const jsenvPluginImportmap = () => {
147
148
  // We must precook the importmap to know its content and inline it into the HTML
148
149
  // In this situation the ref to the importmap was already discovered
149
150
  // when parsing the HTML
150
- const importmapReference = references.find(
151
- (reference) => reference.url === src,
151
+ const importmapReference =
152
+ context.referenceUtils.findByGeneratedSpecifier(src)
153
+ const importmapUrlInfo = context.urlGraph.getUrlInfo(
154
+ importmapReference.url,
152
155
  )
153
- const importmapUrlInfo = urlGraph.getUrlInfo(importmapReference.url)
154
- await cook({
156
+ await context.cook(importmapUrlInfo, {
155
157
  reference: importmapReference,
156
- urlInfo: importmapUrlInfo,
157
158
  })
158
- onHtmlImportmapParsed(JSON.parse(importmapUrlInfo.content), url)
159
+ onHtmlImportmapParsed(
160
+ JSON.parse(importmapUrlInfo.content),
161
+ htmlUrlInfo.url,
162
+ )
159
163
  removeHtmlNodeAttributeByName(importmap, "src")
160
- assignHtmlNodeAttributes(importmap, {
161
- "content-src": src,
162
- "inlined-by": "jsenv:importmap",
164
+ setHtmlNodeGeneratedText(importmap, {
165
+ generatedText: importmapUrlInfo.content,
166
+ generatedBy: "jsenv:importmap",
167
+ generatedFromSrc: src,
163
168
  })
164
- setHtmlNodeText(importmap, importmapUrlInfo.content)
165
169
 
166
170
  const { line, column, lineEnd, columnEnd, isOriginal } =
167
171
  htmlNodePosition.readNodePosition(importmap, {
168
172
  preferOriginal: true,
169
173
  })
170
174
  const inlineImportmapUrl = generateInlineContentUrl({
171
- url,
175
+ url: htmlUrlInfo.url,
172
176
  extension: ".importmap",
173
177
  line,
174
178
  column,
175
179
  lineEnd,
176
180
  columnEnd,
177
181
  })
178
- referenceUtils.becomesInline(importmapReference, {
182
+ context.referenceUtils.becomesInline(importmapReference, {
179
183
  line: line - 1,
180
184
  column,
181
185
  isOriginal,
@@ -200,7 +204,7 @@ export const jsenvPluginImportmap = () => {
200
204
  // by "formatReferencedUrl" making the importmap presence useless.
201
205
  // In dev/test we keep importmap into the HTML to see it even if useless
202
206
  // Duing build we get rid of it
203
- if (scenario === "build") {
207
+ if (context.scenario === "build") {
204
208
  removeHtmlNode(importmap)
205
209
  }
206
210
  return {
@@ -0,0 +1,57 @@
1
+ import {
2
+ parseHtmlString,
3
+ injectScriptAsEarlyAsPossible,
4
+ createHtmlNode,
5
+ stringifyHtmlAst,
6
+ } from "@jsenv/utils/html_ast/html_ast.js"
7
+ import { createMagicSource } from "@jsenv/utils/sourcemap/magic_source.js"
8
+
9
+ export const injectGlobals = (urlInfo, globals) => {
10
+ if (urlInfo.type === "html") {
11
+ return globalInjectorOnHtml(urlInfo, globals)
12
+ }
13
+ if (urlInfo.type === "js_classic" || urlInfo.type === "js_module") {
14
+ return globalsInjectorOnJs(urlInfo, globals)
15
+ }
16
+ throw new Error(`cannot inject globals into "${urlInfo.type}"`)
17
+ }
18
+
19
+ const globalInjectorOnHtml = async (urlInfo, globals) => {
20
+ // ideally we would inject an importmap but browser support is too low
21
+ // (even worse for worker/service worker)
22
+ // so for now we inject code into entry points
23
+ const htmlAst = parseHtmlString(urlInfo.content, {
24
+ storeOriginalPositions: false,
25
+ })
26
+ const clientCode = generateClientCodeForGlobals({
27
+ globals,
28
+ isWebWorker: false,
29
+ })
30
+ injectScriptAsEarlyAsPossible(
31
+ htmlAst,
32
+ createHtmlNode({
33
+ "tagName": "script",
34
+ "textContent": clientCode,
35
+ "injected-by": "jsenv:inject_globals",
36
+ }),
37
+ )
38
+ return stringifyHtmlAst(htmlAst)
39
+ }
40
+
41
+ const globalsInjectorOnJs = async (urlInfo, globals) => {
42
+ const clientCode = generateClientCodeForGlobals({
43
+ globals,
44
+ isWebWorker:
45
+ urlInfo.subtype === "worker" ||
46
+ urlInfo.subtype === "service_worker" ||
47
+ urlInfo.subtype === "shared_worker",
48
+ })
49
+ const magicSource = createMagicSource(urlInfo.content)
50
+ magicSource.prepend(clientCode)
51
+ return magicSource.toContentAndSourcemap()
52
+ }
53
+
54
+ const generateClientCodeForGlobals = ({ isWebWorker = false, globals }) => {
55
+ const globalName = isWebWorker ? "self" : "window"
56
+ return `Object.assign(${globalName}, ${JSON.stringify(globals, null, " ")});`
57
+ }
@@ -0,0 +1,24 @@
1
+ import { injectGlobals } from "./inject_globals.js"
2
+
3
+ export const jsenvPluginInjectGlobals = (urlAssociations) => {
4
+ return {
5
+ name: "jsenv:inject_globals",
6
+ appliesDuring: "*",
7
+ transformUrlContent: async (urlInfo) => {
8
+ const url = Object.keys(urlAssociations).find((url) => {
9
+ return url === urlInfo.url
10
+ })
11
+ if (!url) {
12
+ return null
13
+ }
14
+ let globals = urlAssociations[url]
15
+ if (typeof globals === "function") {
16
+ globals = await globals()
17
+ }
18
+ if (Object.keys(globals).length === 0) {
19
+ return null
20
+ }
21
+ return injectGlobals(urlInfo, globals)
22
+ },
23
+ }
24
+ }
@@ -1,45 +1,46 @@
1
- import { DataUrl } from "@jsenv/utils/urls/data_url.js"
2
- import { ContentType } from "@jsenv/utils/src/content_type.js"
1
+ import { DATA_URL } from "@jsenv/urls"
2
+ import { CONTENT_TYPE } from "@jsenv/utils/content_type/content_type.js"
3
3
 
4
4
  export const jsenvPluginDataUrls = () => {
5
5
  return {
6
6
  name: "jsenv:data_urls",
7
7
  appliesDuring: "*",
8
- resolve: ({ specifier }) => {
9
- if (!specifier.startsWith("data:")) {
8
+ resolveUrl: (reference) => {
9
+ if (!reference.specifier.startsWith("data:")) {
10
10
  return null
11
11
  }
12
- return specifier
12
+ return reference.specifier
13
13
  },
14
- load: ({ url, data }) => {
15
- if (!url.startsWith("data:")) {
14
+ fetchUrlContent: (urlInfo) => {
15
+ if (!urlInfo.url.startsWith("data:")) {
16
16
  return null
17
17
  }
18
- const { contentType, base64Flag, data: urlData } = DataUrl.parse(url)
19
- data.base64Flag = base64Flag
20
- return {
18
+ const {
21
19
  contentType,
20
+ base64Flag,
21
+ data: urlData,
22
+ } = DATA_URL.parse(urlInfo.url)
23
+ urlInfo.data.base64Flag = base64Flag
24
+ return {
22
25
  content: contentFromUrlData({ contentType, base64Flag, urlData }),
26
+ contentType,
23
27
  }
24
28
  },
25
- formatReferencedUrl: (reference, { urlGraph, cook }) => {
26
- if (!reference.url.startsWith("data:")) {
29
+ formatUrl: (reference, context) => {
30
+ if (!reference.generatedUrl.startsWith("data:")) {
27
31
  return null
28
32
  }
29
33
  if (reference.type === "sourcemap_comment") {
30
34
  return null
31
35
  }
32
36
  return (async () => {
33
- const urlInfo = urlGraph.getUrlInfo(reference.url)
34
- await cook({
35
- reference,
36
- urlInfo,
37
- })
37
+ const urlInfo = context.urlGraph.getUrlInfo(reference.url)
38
+ await context.cook(urlInfo, { reference })
38
39
  if (urlInfo.originalContent === urlInfo.content) {
39
- return reference.url
40
+ return reference.generatedUrl
40
41
  }
41
- const specifier = DataUrl.stringify({
42
- contentType: urlInfo.contentType,
42
+ const specifier = DATA_URL.stringify({
43
+ contentType: urlInfo.headers["content-type"],
43
44
  base64Flag: urlInfo.data.base64Flag,
44
45
  data: urlInfo.data.base64Flag
45
46
  ? dataToBase64(urlInfo.content)
@@ -52,7 +53,7 @@ export const jsenvPluginDataUrls = () => {
52
53
  }
53
54
 
54
55
  const contentFromUrlData = ({ contentType, base64Flag, urlData }) => {
55
- if (ContentType.isTextual(contentType)) {
56
+ if (CONTENT_TYPE.isTextual(contentType)) {
56
57
  if (base64Flag) {
57
58
  return base64ToString(urlData)
58
59
  }
@@ -0,0 +1,161 @@
1
+ import {
2
+ parseHtmlString,
3
+ stringifyHtmlAst,
4
+ visitHtmlAst,
5
+ getHtmlNodeTextNode,
6
+ htmlNodePosition,
7
+ parseScriptNode,
8
+ setHtmlNodeGeneratedText,
9
+ getHtmlNodeAttributeByName,
10
+ } from "@jsenv/utils/html_ast/html_ast.js"
11
+ import { generateInlineContentUrl } from "@jsenv/urls"
12
+ import { CONTENT_TYPE } from "@jsenv/utils/content_type/content_type.js"
13
+
14
+ export const jsenvPluginHtmlInlineContent = ({ analyzeConvertedScripts }) => {
15
+ return {
16
+ name: "jsenv:html_inline_content",
17
+ appliesDuring: "*",
18
+ transformUrlContent: {
19
+ html: async (urlInfo, context) => {
20
+ const htmlAst = parseHtmlString(urlInfo.content)
21
+ const actions = []
22
+ const handleInlineStyle = (node) => {
23
+ if (node.nodeName !== "style") {
24
+ return
25
+ }
26
+ const textNode = getHtmlNodeTextNode(node)
27
+ if (!textNode) {
28
+ return
29
+ }
30
+ actions.push(async () => {
31
+ const { line, column, lineEnd, columnEnd, isOriginal } =
32
+ htmlNodePosition.readNodePosition(node, {
33
+ preferOriginal: true,
34
+ })
35
+ const inlineStyleUrl = generateInlineContentUrl({
36
+ url: urlInfo.url,
37
+ extension: ".css",
38
+ line,
39
+ column,
40
+ lineEnd,
41
+ columnEnd,
42
+ })
43
+ const [inlineStyleReference, inlineStyleUrlInfo] =
44
+ context.referenceUtils.foundInline({
45
+ type: "link_href",
46
+ expectedType: "css",
47
+ isOriginalPosition: isOriginal,
48
+ // we remove 1 to the line because imagine the following html:
49
+ // <style>body { color: red; }</style>
50
+ // -> content starts same line as <style>
51
+ specifierLine: line - 1,
52
+ specifierColumn: column,
53
+ specifier: inlineStyleUrl,
54
+ contentType: "text/css",
55
+ content: textNode.value,
56
+ })
57
+ await context.cook(inlineStyleUrlInfo, {
58
+ reference: inlineStyleReference,
59
+ })
60
+ setHtmlNodeGeneratedText(node, {
61
+ generatedText: inlineStyleUrlInfo.content,
62
+ generatedBy: "jsenv:html_inline_content",
63
+ })
64
+ })
65
+ }
66
+ const handleInlineScript = (node) => {
67
+ if (node.nodeName !== "script") {
68
+ return
69
+ }
70
+ const textNode = getHtmlNodeTextNode(node)
71
+ if (!textNode) {
72
+ return
73
+ }
74
+ // If the inline script was already handled by an other plugin, ignore it
75
+ // - we want to preserve inline scripts generated by html supervisor during dev
76
+ // - we want to avoid cooking twice a script during build
77
+ const generatedBy = getHtmlNodeAttributeByName(node, "generated-by")
78
+ if (generatedBy) {
79
+ if (generatedBy.value === "jsenv:as_js_classic_html") {
80
+ if (!analyzeConvertedScripts) {
81
+ return
82
+ }
83
+ }
84
+ if (generatedBy.value === "jsenv:html_supervisor") {
85
+ return
86
+ }
87
+ }
88
+ actions.push(async () => {
89
+ const scriptCategory = parseScriptNode(node)
90
+ const { line, column, lineEnd, columnEnd, isOriginal } =
91
+ htmlNodePosition.readNodePosition(node, {
92
+ preferOriginal: true,
93
+ })
94
+ // from MDN about [type] attribute:
95
+ // "Any other value: The embedded content is treated as a data block
96
+ // which won't be processed by the browser. Developers must use a valid MIME type
97
+ // that is not a JavaScript MIME type to denote data blocks.
98
+ // The src attribute will be ignored."
99
+ // https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script#attr-type
100
+ const isJs =
101
+ scriptCategory === "classic" || scriptCategory === "module"
102
+ const isImportmap = scriptCategory === "importmap"
103
+ const contentType = isJs
104
+ ? "text/javascript"
105
+ : isImportmap
106
+ ? "application/importmap+json"
107
+ : scriptCategory
108
+
109
+ let inlineScriptUrl = generateInlineContentUrl({
110
+ url: urlInfo.url,
111
+ extension: CONTENT_TYPE.asFileExtension(contentType),
112
+ line,
113
+ column,
114
+ lineEnd,
115
+ columnEnd,
116
+ })
117
+ const [inlineScriptReference, inlineScriptUrlInfo] =
118
+ context.referenceUtils.foundInline({
119
+ node,
120
+ type: "script_src",
121
+ expectedType: {
122
+ classic: "js_classic",
123
+ module: "js_module",
124
+ importmap: "importmap",
125
+ }[scriptCategory],
126
+ // we remove 1 to the line because imagine the following html:
127
+ // <script>console.log('ok')</script>
128
+ // -> content starts same line as <script>
129
+ specifierLine: line - 1,
130
+ specifierColumn: column,
131
+ isOriginalPosition: isOriginal,
132
+ specifier: inlineScriptUrl,
133
+ contentType,
134
+ content: textNode.value,
135
+ })
136
+
137
+ await context.cook(inlineScriptUrlInfo, {
138
+ reference: inlineScriptReference,
139
+ })
140
+ setHtmlNodeGeneratedText(node, {
141
+ generatedText: inlineScriptUrlInfo.content,
142
+ generatedBy: "jsenv:html_inline_content",
143
+ })
144
+ })
145
+ }
146
+ visitHtmlAst(htmlAst, (node) => {
147
+ handleInlineStyle(node)
148
+ handleInlineScript(node)
149
+ })
150
+ if (actions.length === 0) {
151
+ return null
152
+ }
153
+ await Promise.all(actions.map((action) => action()))
154
+ const htmlModified = stringifyHtmlAst(htmlAst)
155
+ return {
156
+ content: htmlModified,
157
+ }
158
+ },
159
+ },
160
+ }
161
+ }
@@ -0,0 +1,36 @@
1
+ import { jsenvPluginHtmlInlineContent } from "./jsenv_plugin_html_inline_content.js"
2
+ import { jsenvPluginJsInlineContent } from "./jsenv_plugin_js_inline_content.js"
3
+ import { jsenvPluginDataUrls } from "./jsenv_plugin_data_urls.js"
4
+ import { jsenvPluginInlineQueryParam } from "./jsenv_plugin_inline_query_param.js"
5
+
6
+ export const jsenvPluginInline = ({
7
+ fetchInlineUrls = true,
8
+ analyzeConvertedScripts = false,
9
+ allowEscapeForVersioning = false,
10
+ } = {}) => {
11
+ return [
12
+ ...(fetchInlineUrls ? [jsenvPluginInlineUrls()] : []),
13
+ jsenvPluginHtmlInlineContent({ analyzeConvertedScripts }),
14
+ jsenvPluginJsInlineContent({ allowEscapeForVersioning }),
15
+ jsenvPluginDataUrls(),
16
+ jsenvPluginInlineQueryParam(),
17
+ ]
18
+ }
19
+
20
+ const jsenvPluginInlineUrls = () => {
21
+ return {
22
+ name: "jsenv:inline_urls",
23
+ appliesDuring: "*",
24
+ fetchUrlContent: (urlInfo) => {
25
+ if (!urlInfo.isInline) {
26
+ return null
27
+ }
28
+ return {
29
+ // we want to fetch the original content otherwise we might re-cook
30
+ // content already cooked
31
+ content: urlInfo.originalContent,
32
+ contentType: urlInfo.contentType,
33
+ }
34
+ },
35
+ }
36
+ }
@@ -1,10 +1,10 @@
1
- import { DataUrl } from "@jsenv/utils/urls/data_url.js"
1
+ import { DATA_URL } from "@jsenv/urls"
2
2
 
3
3
  export const jsenvPluginInlineQueryParam = () => {
4
4
  return {
5
5
  name: "jsenv:inline_query_param",
6
6
  appliesDuring: "*",
7
- formatReferencedUrl: {
7
+ formatUrl: {
8
8
  // <link> and <script> can be inlined in the html
9
9
  // this should be done during dev and postbuild but not build
10
10
  // so that the bundled file gets inlined and not the entry point
@@ -15,21 +15,18 @@ export const jsenvPluginInlineQueryParam = () => {
15
15
  // but maybe we should rather use ?object_url
16
16
  // or people could do this:
17
17
  // import workerText from './worker.js?text'
18
- // const blob = new Blob(workerText, { type: 'application/javascript' })
18
+ // const blob = new Blob(workerText, { type: 'text/javascript' })
19
19
  // window.URL.createObjectURL(blob)
20
20
  // in any case the recommended way is to use an url
21
21
  // to benefit from shared worker and reuse worker between tabs
22
- "*": (reference, { urlGraph, cook }) => {
23
- if (!new URL(reference.url).searchParams.has("inline")) {
22
+ "*": (reference, context) => {
23
+ if (!reference.searchParams.has("inline")) {
24
24
  return null
25
25
  }
26
26
  return (async () => {
27
- const urlInfo = urlGraph.getUrlInfo(reference.url)
28
- await cook({
29
- reference,
30
- urlInfo,
31
- })
32
- const specifier = DataUrl.stringify({
27
+ const urlInfo = context.urlGraph.getUrlInfo(reference.url)
28
+ await context.cook(urlInfo, { reference })
29
+ const specifier = DATA_URL.stringify({
33
30
  mediaType: urlInfo.contentType,
34
31
  base64Flag: true,
35
32
  data: Buffer.from(urlInfo.content).toString("base64"),