@jsenv/core 27.0.0-alpha.3 → 27.0.0-alpha.32

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 (222) hide show
  1. package/main.js +4 -0
  2. package/package.json +17 -14
  3. package/readme.md +4 -12
  4. package/src/build/build.js +690 -429
  5. package/src/build/build_urls_generator.js +33 -21
  6. package/src/build/graph_utils.js +31 -0
  7. package/src/build/{inject_version_mappings.js → inject_global_version_mappings.js} +33 -15
  8. package/src/build/inject_service_worker_urls.js +79 -0
  9. package/src/build/resync_ressource_hints.js +68 -0
  10. package/src/build/start_build_server.js +201 -0
  11. package/src/dev/plugins/explorer/jsenv_plugin_explorer.js +2 -2
  12. package/src/dev/plugins/toolbar/jsenv_plugin_toolbar.js +3 -1
  13. package/src/dev/start_dev_server.js +58 -26
  14. package/src/execute/execute.js +30 -4
  15. package/src/execute/run.js +19 -56
  16. package/src/execute/runtimes/browsers/from_playwright.js +201 -147
  17. package/src/execute/runtimes/node/controllable_file.mjs +26 -10
  18. package/src/execute/runtimes/node/node_execution_performance.js +67 -0
  19. package/src/execute/runtimes/node/node_process.js +280 -39
  20. package/src/omega/{runtime_support/default_runtime_support.js → compat/default_runtime_compat.js} +3 -5
  21. package/src/omega/{runtime_support/features_compatibility.js → compat/features_compats.js} +66 -4
  22. package/src/omega/compat/runtime_compat.js +50 -0
  23. package/src/omega/errors.js +51 -58
  24. package/src/omega/fetched_content_compliance.js +24 -0
  25. package/src/omega/file_url_converter.js +8 -50
  26. package/src/omega/kitchen.js +409 -286
  27. package/src/omega/server/file_service.js +9 -11
  28. package/src/omega/url_graph/url_graph_load.js +14 -7
  29. package/src/omega/url_graph/url_graph_report.js +17 -15
  30. package/src/omega/url_graph.js +32 -10
  31. package/src/omega/web_workers.js +42 -0
  32. package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/autoreload_preference.js +0 -0
  33. package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/event_source_client.js +2 -2
  34. package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/reload.js +0 -0
  35. package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/url_helpers.js +0 -0
  36. package/src/plugins/autoreload/dev_sse/jsenv_plugin_dev_sse_client.js +41 -0
  37. package/src/{dev/plugins/autoreload/jsenv_plugin_autoreload.js → plugins/autoreload/dev_sse/jsenv_plugin_dev_sse_server.js} +27 -168
  38. package/src/plugins/autoreload/jsenv_plugin_autoreload.js +25 -0
  39. package/src/plugins/autoreload/jsenv_plugin_hmr.js +35 -0
  40. package/src/plugins/bundling/css/bundle_css.js +21 -0
  41. package/src/plugins/bundling/js_classic_workers/bundle_js_classic_workers.js +13 -0
  42. package/src/{build/plugins/bundle_js_module/jsenv_plugin_bundle_js_module.js → plugins/bundling/js_module/bundle_js_module.js} +120 -79
  43. package/src/plugins/bundling/jsenv_plugin_bundling.js +51 -0
  44. package/src/{omega/core_plugins → plugins}/commonjs_globals/jsenv_plugin_commonjs_globals.js +48 -41
  45. package/src/plugins/file_urls/jsenv_plugin_file_urls.js +66 -0
  46. package/src/{omega/core_plugins → plugins}/filesystem_magic/jsenv_plugin_filesystem_magic.js +7 -4
  47. package/src/{omega/core_plugins → plugins}/html_supervisor/client/error_in_document.js +0 -0
  48. package/src/{omega/core_plugins → plugins}/html_supervisor/client/error_in_notification.js +0 -0
  49. package/src/{omega/core_plugins → plugins}/html_supervisor/client/html_supervisor_installer.js +3 -2
  50. package/src/{omega/core_plugins → plugins}/html_supervisor/client/html_supervisor_setup.js +0 -0
  51. package/src/{omega/core_plugins → plugins}/html_supervisor/client/perf_browser.js +0 -0
  52. package/src/{omega/core_plugins → plugins}/html_supervisor/client/uneval_exception.js +0 -0
  53. package/src/{omega/core_plugins → plugins}/html_supervisor/jsenv_plugin_html_supervisor.js +38 -46
  54. package/src/plugins/http_urls/jsenv_plugin_http_urls.js +12 -0
  55. package/src/{dev/plugins/autoreload → plugins/import_meta_hot}/babel_plugin_metadata_import_meta_hot.js +4 -5
  56. package/src/{dev/plugins/autoreload → plugins/import_meta_hot}/client/import_meta_hot.js +3 -1
  57. package/src/{dev/plugins/autoreload → plugins/import_meta_hot}/html_hot_dependencies.js +2 -2
  58. package/src/plugins/import_meta_hot/jsenv_plugin_import_meta_hot.js +98 -0
  59. package/src/{omega/core_plugins → plugins}/import_meta_scenarios/jsenv_plugin_import_meta_scenarios.js +26 -8
  60. package/src/plugins/import_meta_url/client/import_meta_url_browser.js +52 -0
  61. package/src/plugins/import_meta_url/client/import_meta_url_commonjs.mjs +9 -0
  62. package/src/{omega/core_plugins → plugins}/importmap/jsenv_plugin_importmap.js +37 -31
  63. package/src/plugins/inject_globals/jsenv_plugin_inject_globals.js +25 -0
  64. package/src/{omega/core_plugins → plugins}/inline/client/inline_content.js +0 -0
  65. package/src/{omega/core_plugins → plugins}/inline/jsenv_plugin_data_urls.js +18 -14
  66. package/src/{omega/core_plugins/inline/jsenv_plugin_js_and_css_inside_html.js → plugins/inline/jsenv_plugin_html_inline_content.js} +61 -40
  67. package/src/plugins/inline/jsenv_plugin_inline.js +36 -0
  68. package/src/{omega/core_plugins → plugins}/inline/jsenv_plugin_inline_query_param.js +6 -6
  69. package/src/plugins/inline/jsenv_plugin_js_inline_content.js +263 -0
  70. package/src/plugins/leading_slash/jsenv_plugin_leading_slash.js +13 -0
  71. package/src/plugins/minification/css/minify_css.js +9 -0
  72. package/src/plugins/minification/html/minify_html.js +15 -0
  73. package/src/{build/plugins/minify_js/jsenv_plugin_minify_js.js → plugins/minification/js/minify_js.js} +6 -22
  74. package/src/plugins/minification/jsenv_plugin_minification.js +78 -0
  75. package/src/plugins/minification/json/minify_json.js +8 -0
  76. package/src/{omega/core_plugins → plugins}/node_esm_resolution/jsenv_plugin_node_esm_resolution.js +15 -15
  77. package/src/{omega → plugins}/plugin_controller.js +18 -10
  78. package/src/plugins/plugins.js +73 -0
  79. package/src/plugins/transpilation/as_js_classic/client/s.js +808 -0
  80. package/src/plugins/transpilation/as_js_classic/client/s.js.md +1 -0
  81. package/src/plugins/transpilation/as_js_classic/helpers/babel_plugin_transform_import_meta_url.js +47 -0
  82. package/src/plugins/transpilation/as_js_classic/helpers/systemjs_old.js +43 -0
  83. package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic.js +183 -0
  84. package/src/plugins/transpilation/as_js_classic/jsenv_plugin_script_type_module_as_classic.js +256 -0
  85. package/src/plugins/transpilation/as_js_classic/jsenv_plugin_workers_type_module_as_classic.js +139 -0
  86. package/src/{omega/core_plugins → plugins/transpilation}/babel/global_this/babel_plugin_global_this_as_jsenv_import.js +0 -0
  87. package/src/{omega/core_plugins → plugins/transpilation}/babel/global_this/client/global_this.js +0 -0
  88. package/src/{omega/core_plugins/babel/babel_helper → plugins/transpilation/babel/helpers}/babel_plugin_babel_helpers_as_jsenv_imports.js +1 -2
  89. package/src/plugins/transpilation/babel/helpers/babel_plugin_structure.js +161 -0
  90. package/src/{omega/core_plugins → plugins/transpilation}/babel/helpers/babel_plugins_compatibility.js +0 -0
  91. package/src/{omega/core_plugins → plugins/transpilation}/babel/jsenv_plugin_babel.js +38 -22
  92. package/src/{omega/core_plugins → plugins/transpilation}/babel/new_stylesheet/babel_plugin_new_stylesheet_as_jsenv_import.js +30 -6
  93. package/src/{omega/core_plugins → plugins/transpilation}/babel/new_stylesheet/client/.eslintrc.cjs +0 -0
  94. package/src/{omega/core_plugins → plugins/transpilation}/babel/new_stylesheet/client/new_stylesheet.js +0 -0
  95. package/src/{omega/core_plugins → plugins/transpilation}/babel/regenerator_runtime/babel_plugin_regenerator_runtime_as_jsenv_import.js +0 -0
  96. package/src/{omega/core_plugins → plugins/transpilation}/babel/regenerator_runtime/client/regenerator_runtime.js +0 -0
  97. package/src/plugins/transpilation/css_parcel/jsenv_plugin_css_parcel.js +18 -0
  98. package/src/plugins/transpilation/fetch_original_url_info.js +30 -0
  99. package/src/{omega/core_plugins → plugins/transpilation}/import_assertions/helpers/babel_plugin_metadata_import_assertions.js +0 -0
  100. package/src/plugins/transpilation/import_assertions/jsenv_plugin_import_assertions.js +225 -0
  101. package/src/plugins/transpilation/jsenv_plugin_top_level_await.js +37 -0
  102. package/src/plugins/transpilation/jsenv_plugin_transpilation.js +44 -0
  103. package/src/plugins/url_references/css/css_urls.js +49 -0
  104. package/src/plugins/url_references/html/html_urls.js +273 -0
  105. package/src/plugins/url_references/js/js_urls.js +163 -0
  106. package/src/plugins/url_references/jsenv_plugin_url_references.js +18 -0
  107. package/src/plugins/url_references/webmanifest/webmanifest_urls.js +17 -0
  108. package/src/{omega/core_plugins → plugins}/url_resolution/jsenv_plugin_url_resolution.js +12 -5
  109. package/src/{omega/core_plugins → plugins}/url_version/jsenv_plugin_url_version.js +8 -8
  110. package/src/test/execute_plan.js +25 -11
  111. package/src/test/execute_test_plan.js +14 -1
  112. package/src/test/logs_file_execution.js +8 -7
  113. package/src/build/plugins/minify_html/jsenv_plugin_minify_html.js +0 -30
  114. package/src/dev/plugins/autoreload/client/event_source_connection.js +0 -195
  115. package/src/dev/plugins/autoreload/sse_service.js +0 -149
  116. package/src/execute/runtimes/node/controlled_process.js +0 -316
  117. package/src/omega/core_plugins/babel/babel_helper/babel_helper_directory.js +0 -29
  118. package/src/omega/core_plugins/babel/babel_helper/client/.eslintrc.cjs +0 -24
  119. package/src/omega/core_plugins/babel/babel_helper/client/AsyncGenerator/AsyncGenerator.js +0 -81
  120. package/src/omega/core_plugins/babel/babel_helper/client/AwaitValue/AwaitValue.js +0 -3
  121. package/src/omega/core_plugins/babel/babel_helper/client/applyDecoratorDescriptor/applyDecoratorDescriptor.js +0 -33
  122. package/src/omega/core_plugins/babel/babel_helper/client/arrayLikeToArray/arrayLikeToArray.js +0 -7
  123. package/src/omega/core_plugins/babel/babel_helper/client/arrayWithHoles/arrayWithHoles.js +0 -4
  124. package/src/omega/core_plugins/babel/babel_helper/client/arrayWithoutHoles/arrayWithoutHoles.js +0 -6
  125. package/src/omega/core_plugins/babel/babel_helper/client/assertThisInitialized/assertThisInitialized.js +0 -7
  126. package/src/omega/core_plugins/babel/babel_helper/client/asyncGeneratorDelegate/asyncGeneratorDelegate.js +0 -40
  127. package/src/omega/core_plugins/babel/babel_helper/client/asyncIterator/asyncIterator.js +0 -65
  128. package/src/omega/core_plugins/babel/babel_helper/client/asyncToGenerator/asyncToGenerator.js +0 -34
  129. package/src/omega/core_plugins/babel/babel_helper/client/awaitAsyncGenerator/awaitAsyncGenerator.js +0 -5
  130. package/src/omega/core_plugins/babel/babel_helper/client/classApplyDescriptorDestructureSet/classApplyDescriptorDestructureSet.js +0 -20
  131. package/src/omega/core_plugins/babel/babel_helper/client/classApplyDescriptorGet/classApplyDescriptorGet.js +0 -6
  132. package/src/omega/core_plugins/babel/babel_helper/client/classApplyDescriptorSet/classApplyDescriptorSet.js +0 -13
  133. package/src/omega/core_plugins/babel/babel_helper/client/classCallCheck/classCallCheck.js +0 -5
  134. package/src/omega/core_plugins/babel/babel_helper/client/classCheckPrivateStaticAccess/classCheckPrivateStaticAccess.js +0 -5
  135. package/src/omega/core_plugins/babel/babel_helper/client/classCheckPrivateStaticFieldDescriptor/classCheckPrivateStaticFieldDescriptor.js +0 -6
  136. package/src/omega/core_plugins/babel/babel_helper/client/classExtractFieldDescriptor/classExtractFieldDescriptor.js +0 -7
  137. package/src/omega/core_plugins/babel/babel_helper/client/classNameTDZError/classNameTDZError.js +0 -4
  138. package/src/omega/core_plugins/babel/babel_helper/client/classPrivateFieldDestructureSet/classPrivateFieldDestructureSet.js +0 -7
  139. package/src/omega/core_plugins/babel/babel_helper/client/classPrivateFieldGet/classPrivateFieldGet.js +0 -7
  140. package/src/omega/core_plugins/babel/babel_helper/client/classPrivateFieldLooseBase/classPrivateFieldLooseBase.js +0 -6
  141. package/src/omega/core_plugins/babel/babel_helper/client/classPrivateFieldLooseKey/classPrivateFieldLooseKey.js +0 -5
  142. package/src/omega/core_plugins/babel/babel_helper/client/classPrivateFieldSet/classPrivateFieldSet.js +0 -8
  143. package/src/omega/core_plugins/babel/babel_helper/client/classPrivateMethodGet/classPrivateMethodGet.js +0 -6
  144. package/src/omega/core_plugins/babel/babel_helper/client/classPrivateMethodSet/classPrivateMethodSet.js +0 -3
  145. package/src/omega/core_plugins/babel/babel_helper/client/classStaticPrivateFieldSpecGet/classStaticPrivateFieldSpecGet.js +0 -9
  146. package/src/omega/core_plugins/babel/babel_helper/client/classStaticPrivateFieldSpecSet/classStaticPrivateFieldSpecSet.js +0 -15
  147. package/src/omega/core_plugins/babel/babel_helper/client/classStaticPrivateMethodGet/classStaticPrivateMethodGet.js +0 -6
  148. package/src/omega/core_plugins/babel/babel_helper/client/classStaticPrivateMethodSet/classStaticPrivateMethodSet.js +0 -3
  149. package/src/omega/core_plugins/babel/babel_helper/client/construct/construct.js +0 -16
  150. package/src/omega/core_plugins/babel/babel_helper/client/createClass/createClass.js +0 -15
  151. package/src/omega/core_plugins/babel/babel_helper/client/createForOfIteratorHelper/createForOfIteratorHelper.js +0 -60
  152. package/src/omega/core_plugins/babel/babel_helper/client/createForOfIteratorHelperLoose/createForOfIteratorHelperLoose.js +0 -23
  153. package/src/omega/core_plugins/babel/babel_helper/client/createRawReactElement/createRawReactElement.js +0 -50
  154. package/src/omega/core_plugins/babel/babel_helper/client/createSuper/createSuper.js +0 -22
  155. package/src/omega/core_plugins/babel/babel_helper/client/decorate/decorate.js +0 -403
  156. package/src/omega/core_plugins/babel/babel_helper/client/defaults/defaults.js +0 -11
  157. package/src/omega/core_plugins/babel/babel_helper/client/defineEnumerableProperties/defineEnumerableProperties.js +0 -23
  158. package/src/omega/core_plugins/babel/babel_helper/client/defineProperty/defineProperty.js +0 -18
  159. package/src/omega/core_plugins/babel/babel_helper/client/extends/extends.js +0 -14
  160. package/src/omega/core_plugins/babel/babel_helper/client/get/get.js +0 -19
  161. package/src/omega/core_plugins/babel/babel_helper/client/getPrototypeOf/getPrototypeOf.js +0 -4
  162. package/src/omega/core_plugins/babel/babel_helper/client/inherits/inherits.js +0 -19
  163. package/src/omega/core_plugins/babel/babel_helper/client/inheritsLoose/inheritsLoose.js +0 -7
  164. package/src/omega/core_plugins/babel/babel_helper/client/initializerDefineProperty/initializerDefineProperty.js +0 -10
  165. package/src/omega/core_plugins/babel/babel_helper/client/initializerWarningHelper/initializerWarningHelper.js +0 -6
  166. package/src/omega/core_plugins/babel/babel_helper/client/instanceof/instanceof.js +0 -6
  167. package/src/omega/core_plugins/babel/babel_helper/client/interopRequireDefault/interopRequireDefault.js +0 -3
  168. package/src/omega/core_plugins/babel/babel_helper/client/interopRequireWildcard/interopRequireWildcard.js +0 -37
  169. package/src/omega/core_plugins/babel/babel_helper/client/isNativeFunction/isNativeFunction.js +0 -4
  170. package/src/omega/core_plugins/babel/babel_helper/client/isNativeReflectConstruct/isNativeReflectConstruct.js +0 -21
  171. package/src/omega/core_plugins/babel/babel_helper/client/iterableToArray/iterableToArray.js +0 -7
  172. package/src/omega/core_plugins/babel/babel_helper/client/iterableToArrayLimit/iterableToArrayLimit.js +0 -36
  173. package/src/omega/core_plugins/babel/babel_helper/client/iterableToArrayLimitLoose/iterableToArrayLimitLoose.js +0 -10
  174. package/src/omega/core_plugins/babel/babel_helper/client/jsx/jsx.js +0 -50
  175. package/src/omega/core_plugins/babel/babel_helper/client/maybeArrayLike/maybeArrayLike.js +0 -10
  176. package/src/omega/core_plugins/babel/babel_helper/client/newArrowCheck/newArrowCheck.js +0 -5
  177. package/src/omega/core_plugins/babel/babel_helper/client/nonIterableRest/nonIterableRest.js +0 -5
  178. package/src/omega/core_plugins/babel/babel_helper/client/nonIterableSpread/nonIterableSpread.js +0 -5
  179. package/src/omega/core_plugins/babel/babel_helper/client/objectDestructuringEmpty/objectDestructuringEmpty.js +0 -3
  180. package/src/omega/core_plugins/babel/babel_helper/client/objectSpread/objectSpread.js +0 -23
  181. package/src/omega/core_plugins/babel/babel_helper/client/objectSpread2/objectSpread2.js +0 -41
  182. package/src/omega/core_plugins/babel/babel_helper/client/objectWithoutProperties/objectWithoutProperties.js +0 -19
  183. package/src/omega/core_plugins/babel/babel_helper/client/objectWithoutPropertiesLoose/objectWithoutPropertiesLoose.js +0 -13
  184. package/src/omega/core_plugins/babel/babel_helper/client/possibleConstructorReturn/possibleConstructorReturn.js +0 -10
  185. package/src/omega/core_plugins/babel/babel_helper/client/readOnlyError/readOnlyError.js +0 -4
  186. package/src/omega/core_plugins/babel/babel_helper/client/readme.md +0 -8
  187. package/src/omega/core_plugins/babel/babel_helper/client/set/set.js +0 -44
  188. package/src/omega/core_plugins/babel/babel_helper/client/setPrototypeOf/setPrototypeOf.js +0 -6
  189. package/src/omega/core_plugins/babel/babel_helper/client/skipFirstGeneratorNext/skipFirstGeneratorNext.js +0 -8
  190. package/src/omega/core_plugins/babel/babel_helper/client/slicedToArray/slicedToArray.js +0 -10
  191. package/src/omega/core_plugins/babel/babel_helper/client/slicedToArrayLoose/slicedToArrayLoose.js +0 -13
  192. package/src/omega/core_plugins/babel/babel_helper/client/superPropBase/superPropBase.js +0 -10
  193. package/src/omega/core_plugins/babel/babel_helper/client/taggedTemplateLiteral/taggedTemplateLiteral.js +0 -10
  194. package/src/omega/core_plugins/babel/babel_helper/client/taggedTemplateLiteralLoose/taggedTemplateLiteralLoose.js +0 -7
  195. package/src/omega/core_plugins/babel/babel_helper/client/tdz/tdz.js +0 -4
  196. package/src/omega/core_plugins/babel/babel_helper/client/temporalRef/temporalRef.js +0 -6
  197. package/src/omega/core_plugins/babel/babel_helper/client/temporalUndefined/temporalUndefined.js +0 -3
  198. package/src/omega/core_plugins/babel/babel_helper/client/toArray/toArray.js +0 -10
  199. package/src/omega/core_plugins/babel/babel_helper/client/toConsumableArray/toConsumableArray.js +0 -10
  200. package/src/omega/core_plugins/babel/babel_helper/client/toPrimitive/toPrimitive.js +0 -10
  201. package/src/omega/core_plugins/babel/babel_helper/client/toPropertyKey/toPropertyKey.js +0 -6
  202. package/src/omega/core_plugins/babel/babel_helper/client/typeof/typeof.js +0 -14
  203. package/src/omega/core_plugins/babel/babel_helper/client/unsupportedIterableToArray/unsupportedIterableToArray.js +0 -12
  204. package/src/omega/core_plugins/babel/babel_helper/client/wrapAsyncGenerator/wrapAsyncGenerator.js +0 -8
  205. package/src/omega/core_plugins/babel/babel_helper/client/wrapNativeSuper/wrapNativeSuper.js +0 -30
  206. package/src/omega/core_plugins/babel/babel_helper/client/wrapRegExp/wrapRegExp.js +0 -63
  207. package/src/omega/core_plugins/babel/babel_helper/client/writeOnlyError/writeOnlyError.js +0 -4
  208. package/src/omega/core_plugins/babel/helpers/babel_plugin_structure.js +0 -187
  209. package/src/omega/core_plugins/file_urls/jsenv_plugin_file_urls.js +0 -67
  210. package/src/omega/core_plugins/import_assertions/helpers/json_module.js +0 -12
  211. package/src/omega/core_plugins/import_assertions/helpers/text_module.js +0 -6
  212. package/src/omega/core_plugins/import_assertions/jsenv_plugin_import_assertions.js +0 -211
  213. package/src/omega/core_plugins/inline/jsenv_plugin_inline.js +0 -13
  214. package/src/omega/core_plugins/inline/jsenv_plugin_new_inline_content.js +0 -210
  215. package/src/omega/core_plugins/leading_slash/jsenv_plugin_leading_slash.js +0 -12
  216. package/src/omega/core_plugins.js +0 -39
  217. package/src/omega/runtime_support/runtime_support.js +0 -20
  218. package/src/omega/url_mentions/css_url_mentions.js +0 -63
  219. package/src/omega/url_mentions/html_url_mentions.js +0 -185
  220. package/src/omega/url_mentions/js_module_url_mentions.js +0 -91
  221. package/src/omega/url_mentions/parse_url_mentions.js +0 -37
  222. package/src/omega/url_mentions/worker_classic_url_mentions.js +0 -37
@@ -2,27 +2,21 @@
2
2
  * Things happening here
3
3
  * - html supervisor module injection
4
4
  * - scripts are wrapped to be supervised
5
- *
6
- * TODO:
7
- * - if ressource is referenced by ressource hint we should do sthing?
8
- * I think so when we inject ?js_classic
9
5
  */
10
6
 
11
- import { injectQueryParams } from "@jsenv/utils/urls/url_utils.js"
12
7
  import {
13
8
  parseHtmlString,
14
9
  stringifyHtmlAst,
15
10
  visitHtmlAst,
16
11
  getHtmlNodeAttributeByName,
17
12
  removeHtmlNodeAttributeByName,
18
- setHtmlNodeText,
19
- assignHtmlNodeAttributes,
20
13
  parseScriptNode,
21
14
  injectScriptAsEarlyAsPossible,
22
15
  createHtmlNode,
23
16
  htmlNodePosition,
24
- removeHtmlNodeText,
25
17
  getHtmlNodeTextNode,
18
+ removeHtmlNodeText,
19
+ setHtmlNodeGeneratedText,
26
20
  } from "@jsenv/utils/html_ast/html_ast.js"
27
21
  import { generateInlineContentUrl } from "@jsenv/utils/urls/inline_content_url_generator.js"
28
22
 
@@ -45,7 +39,7 @@ export const jsenvPluginHtmlSupervisor = ({
45
39
  dev: true,
46
40
  test: true,
47
41
  },
48
- transform: {
42
+ transformUrlContent: {
49
43
  html: ({ url, content }, { referenceUtils }) => {
50
44
  const htmlAst = parseHtmlString(content)
51
45
  const scriptsToSupervise = []
@@ -64,27 +58,22 @@ export const jsenvPluginHtmlSupervisor = ({
64
58
  lineEnd,
65
59
  columnEnd,
66
60
  })
67
- if (scriptCategory === "classic") {
68
- inlineScriptUrl = injectQueryParams(inlineScriptUrl, {
69
- js_classic: "",
70
- })
71
- }
72
61
  const [inlineScriptReference] = referenceUtils.foundInline({
73
62
  type: "script_src",
63
+ expectedType: { classic: "js_classic", module: "js_module" }[
64
+ scriptCategory
65
+ ],
74
66
  line: line - 1,
75
67
  column,
76
- isOriginal,
68
+ isOriginalPosition: isOriginal,
77
69
  specifier: inlineScriptUrl,
78
- contentType: "application/javascript",
70
+ contentType: "text/javascript",
79
71
  content: textNode.value,
80
72
  })
81
- assignHtmlNodeAttributes(node, {
82
- "src": inlineScriptReference.generatedSpecifier,
83
- "src-generated-from-inline-content": "",
84
- })
85
73
  removeHtmlNodeText(node)
86
74
  scriptsToSupervise.push({
87
75
  node,
76
+ isInline: true,
88
77
  type: scriptCategory,
89
78
  src: inlineScriptReference.generatedSpecifier,
90
79
  })
@@ -105,6 +94,7 @@ export const jsenvPluginHtmlSupervisor = ({
105
94
  const crossorigin = crossoriginAttribute
106
95
  ? crossoriginAttribute.value
107
96
  : undefined
97
+ removeHtmlNodeAttributeByName(node, "src")
108
98
  scriptsToSupervise.push({
109
99
  node,
110
100
  type: scriptCategory,
@@ -151,6 +141,7 @@ export const jsenvPluginHtmlSupervisor = ({
151
141
  }
152
142
  const [htmlSupervisorInstallerFileReference] = referenceUtils.inject({
153
143
  type: "js_import_export",
144
+ expectedType: "js_module",
154
145
  specifier: htmlSupervisorInstallerFileUrl,
155
146
  })
156
147
  injectScriptAsEarlyAsPossible(
@@ -159,25 +150,24 @@ export const jsenvPluginHtmlSupervisor = ({
159
150
  "tagName": "script",
160
151
  "type": "module",
161
152
  "textContent": `
162
- import { installHtmlSupervisor } from ${
163
- htmlSupervisorInstallerFileReference.generatedSpecifier
164
- }
165
- installHtmlSupervisor(${JSON.stringify(
166
- {
167
- logs,
168
- measurePerf,
169
- },
170
- null,
171
- " ",
172
- )})`,
153
+ import { installHtmlSupervisor } from ${
154
+ htmlSupervisorInstallerFileReference.generatedSpecifier
155
+ }
156
+ installHtmlSupervisor(${JSON.stringify(
157
+ {
158
+ logs,
159
+ measurePerf,
160
+ },
161
+ null,
162
+ " ",
163
+ )})`,
173
164
  "injected-by": "jsenv:html_supervisor",
174
165
  }),
175
166
  )
176
167
  const [htmlSupervisorSetupFileReference] = referenceUtils.inject({
177
168
  type: "script_src",
178
- specifier: injectQueryParams(htmlSupervisorSetupFileUrl, {
179
- js_classic: "",
180
- }),
169
+ expectedType: "js_classic",
170
+ specifier: htmlSupervisorSetupFileUrl,
181
171
  })
182
172
  injectScriptAsEarlyAsPossible(
183
173
  htmlAst,
@@ -188,14 +178,9 @@ installHtmlSupervisor(${JSON.stringify(
188
178
  }),
189
179
  )
190
180
  scriptsToSupervise.forEach(
191
- ({ node, type, src, integrity, crossorigin }) => {
192
- removeHtmlNodeAttributeByName(node, "src")
193
- assignHtmlNodeAttributes(node, {
194
- "content-src": src,
195
- })
196
- setHtmlNodeText(
197
- node,
198
- generateCodeToSuperviseScript({
181
+ ({ node, isInline, type, src, integrity, crossorigin }) => {
182
+ setHtmlNodeGeneratedText(node, {
183
+ generatedText: generateCodeToSuperviseScript({
199
184
  type,
200
185
  src,
201
186
  integrity,
@@ -203,7 +188,10 @@ installHtmlSupervisor(${JSON.stringify(
203
188
  htmlSupervisorInstallerSpecifier:
204
189
  htmlSupervisorInstallerFileReference.generatedSpecifier,
205
190
  }),
206
- )
191
+ generatedBy: "jsenv:html_supervisor",
192
+ generatedFromSrc: src,
193
+ generatedFromInlineContent: isInline,
194
+ })
207
195
  },
208
196
  )
209
197
  const htmlModified = stringifyHtmlAst(htmlAst)
@@ -226,8 +214,12 @@ const generateCodeToSuperviseScript = ({
226
214
  }) => {
227
215
  const paramsAsJson = JSON.stringify({ src, integrity, crossorigin })
228
216
  if (type === "module") {
229
- return `import { superviseScriptTypeModule } from ${htmlSupervisorInstallerSpecifier}
230
- superviseScriptTypeModule(${paramsAsJson})`
217
+ return `
218
+ import { superviseScriptTypeModule } from ${htmlSupervisorInstallerSpecifier}
219
+ superviseScriptTypeModule(${paramsAsJson})
220
+ `
231
221
  }
232
- return `window.__html_supervisor__.superviseScript(${paramsAsJson})`
222
+ return `
223
+ window.__html_supervisor__.superviseScript(${paramsAsJson})
224
+ `
233
225
  }
@@ -0,0 +1,12 @@
1
+ export const jsenvPluginHttpUrls = () => {
2
+ return {
3
+ name: "jsenv:http_urls",
4
+ appliesDuring: "*",
5
+ fetchUrlContent: (urlInfo) => {
6
+ if (urlInfo.url.startsWith("http") || urlInfo.url.startsWith("https")) {
7
+ return { external: true }
8
+ }
9
+ return null
10
+ },
11
+ }
12
+ }
@@ -16,13 +16,12 @@ export const babelPluginMetadataImportMetaHot = () => {
16
16
  }
17
17
  }
18
18
  const collectImportMetaProperties = (programPath) => {
19
- let importMetaHotDetected = false
19
+ const importMetaHotPaths = []
20
20
  let hotDecline = false
21
21
  let hotAcceptSelf = false
22
22
  let hotAcceptDependencies = []
23
23
  programPath.traverse({
24
24
  MemberExpression(path) {
25
- if (importMetaHotDetected) return
26
25
  const { node } = path
27
26
  const { object } = node
28
27
  if (object.type !== "MetaProperty") {
@@ -35,7 +34,7 @@ const collectImportMetaProperties = (programPath) => {
35
34
  const { property } = node
36
35
  const { name } = property
37
36
  if (name === "hot") {
38
- importMetaHotDetected = true
37
+ importMetaHotPaths.push(path)
39
38
  }
40
39
  },
41
40
  CallExpression(path) {
@@ -64,7 +63,7 @@ const collectImportMetaProperties = (programPath) => {
64
63
  )
65
64
  }
66
65
  return {
67
- specifierPath: firstArgPath.get(index),
66
+ specifierPath: firstArgPath.get(String(index)),
68
67
  }
69
68
  })
70
69
  return
@@ -79,7 +78,7 @@ const collectImportMetaProperties = (programPath) => {
79
78
  },
80
79
  })
81
80
  return {
82
- importMetaHotDetected,
81
+ importMetaHotPaths,
83
82
  hotDecline,
84
83
  hotAcceptSelf,
85
84
  hotAcceptDependencies,
@@ -40,7 +40,9 @@ export const createImportMetaHot = (importMetaUrl) => {
40
40
  })
41
41
  return
42
42
  }
43
- throw new Error(`invalid call to hot.accept()`)
43
+ throw new Error(
44
+ `invalid call to import.meta.hot.accept(), received ${firstArg}`,
45
+ )
44
46
  },
45
47
  dispose: (callback) => {
46
48
  addUrlMeta(url, {
@@ -53,7 +53,7 @@ export const collectHotDataFromHtmlAst = (htmlAst) => {
53
53
  })
54
54
  visitUrlSpecifierAttribute({
55
55
  node,
56
- attributeName: "content-href",
56
+ attributeName: "generated-from-href",
57
57
  hotAccepted,
58
58
  })
59
59
  }
@@ -65,7 +65,7 @@ export const collectHotDataFromHtmlAst = (htmlAst) => {
65
65
  })
66
66
  visitUrlSpecifierAttribute({
67
67
  node,
68
- attributeName: "content-src",
68
+ attributeName: "generated-from-src",
69
69
  hotAccepted,
70
70
  })
71
71
  }
@@ -0,0 +1,98 @@
1
+ import { createMagicSource } from "@jsenv/utils/sourcemap/magic_source.js"
2
+ import { parseHtmlString } from "@jsenv/utils/html_ast/html_ast.js"
3
+ import { applyBabelPlugins } from "@jsenv/utils/js_ast/apply_babel_plugins.js"
4
+
5
+ import { collectHotDataFromHtmlAst } from "./html_hot_dependencies.js"
6
+ import { babelPluginMetadataImportMetaHot } from "./babel_plugin_metadata_import_meta_hot.js"
7
+
8
+ const importMetaHotClientFileUrl = new URL(
9
+ "./client/import_meta_hot.js",
10
+ import.meta.url,
11
+ ).href
12
+
13
+ export const jsenvPluginImportMetaHot = () => {
14
+ return {
15
+ name: "jsenv:import_meta_hot",
16
+ appliesDuring: "*",
17
+ transformUrlContent: {
18
+ html: (htmlUrlInfo, context) => {
19
+ // during build we don't really care to parse html hot dependencies
20
+ if (context.scenario === "build") {
21
+ return
22
+ }
23
+ const htmlAst = parseHtmlString(htmlUrlInfo.content)
24
+ const { hotReferences } = collectHotDataFromHtmlAst(htmlAst)
25
+ htmlUrlInfo.data.hotDecline = false
26
+ htmlUrlInfo.data.hotAcceptSelf = false
27
+ htmlUrlInfo.data.hotAcceptDependencies = hotReferences.map(
28
+ ({ type, specifier }) => {
29
+ const [reference] = context.referenceUtils.found({
30
+ type,
31
+ specifier,
32
+ })
33
+ return reference.url
34
+ },
35
+ )
36
+ },
37
+ css: (cssUrlInfo) => {
38
+ cssUrlInfo.data.hotDecline = false
39
+ cssUrlInfo.data.hotAcceptSelf = false
40
+ cssUrlInfo.data.hotAcceptDependencies = []
41
+ },
42
+ js_module: async (urlInfo, context) => {
43
+ const { metadata } = await applyBabelPlugins({
44
+ babelPlugins: [babelPluginMetadataImportMetaHot],
45
+ urlInfo,
46
+ })
47
+ const {
48
+ importMetaHotPaths,
49
+ hotDecline,
50
+ hotAcceptSelf,
51
+ hotAcceptDependencies,
52
+ } = metadata
53
+ urlInfo.data.hotDecline = hotDecline
54
+ urlInfo.data.hotAcceptSelf = hotAcceptSelf
55
+ urlInfo.data.hotAcceptDependencies = hotAcceptDependencies
56
+ if (importMetaHotPaths.length === 0) {
57
+ return null
58
+ }
59
+ if (context.scenario === "build") {
60
+ return removeImportMetaHots(urlInfo, importMetaHotPaths)
61
+ }
62
+ return injectImportMetaHot(urlInfo, context)
63
+ },
64
+ },
65
+ }
66
+ }
67
+
68
+ const removeImportMetaHots = (urlInfo, importMetaHotPaths) => {
69
+ const magicSource = createMagicSource(urlInfo.content)
70
+ importMetaHotPaths.forEach((path) => {
71
+ magicSource.replace({
72
+ start: path.node.start,
73
+ end: path.node.end,
74
+ replacement: "undefined",
75
+ })
76
+ })
77
+ return magicSource.toContentAndSourcemap()
78
+ }
79
+
80
+ // For some reason using magic source here produce
81
+ // better sourcemap than doing the equivalent with babel
82
+ // I suspect it's because I was doing injectAstAfterImport(programPath, ast.program.body[0])
83
+ // which is likely not well supported by babel
84
+ const injectImportMetaHot = (urlInfo, context) => {
85
+ const [importMetaHotClientFileReference] = context.referenceUtils.inject({
86
+ parentUrl: urlInfo.url,
87
+ type: "js_import_export",
88
+ expectedType: "js_module",
89
+ specifier: importMetaHotClientFileUrl,
90
+ })
91
+ const magicSource = createMagicSource(urlInfo.content)
92
+ magicSource.prepend(
93
+ `import { createImportMetaHot } from ${importMetaHotClientFileReference.generatedSpecifier}
94
+ import.meta.hot = createImportMetaHot(import.meta.url)
95
+ `,
96
+ )
97
+ return magicSource.toContentAndSourcemap()
98
+ }
@@ -12,18 +12,15 @@
12
12
  import { applyBabelPlugins } from "@jsenv/utils/js_ast/apply_babel_plugins.js"
13
13
  import { createMagicSource } from "@jsenv/utils/sourcemap/magic_source.js"
14
14
 
15
- import { collectProgramImportMetas } from "@jsenv/utils/js_ast/program_import_metas.js"
16
-
17
15
  export const jsenvPluginImportMetaScenarios = () => {
18
16
  return {
19
17
  name: "jsenv:import_meta_scenario",
20
18
  appliesDuring: "*",
21
- transform: {
22
- js_module: async ({ url, content }, { scenario }) => {
19
+ transformUrlContent: {
20
+ js_module: async (urlInfo, { scenario }) => {
23
21
  const { metadata } = await applyBabelPlugins({
24
22
  babelPlugins: [babelPluginMetadataImportMetaScenarios],
25
- url,
26
- content,
23
+ urlInfo,
27
24
  })
28
25
  const { dev = [], test = [], build = [] } = metadata.importMetaScenarios
29
26
  const replacements = []
@@ -59,7 +56,7 @@ export const jsenvPluginImportMetaScenarios = () => {
59
56
  replace(path, "true")
60
57
  })
61
58
  }
62
- const magicSource = createMagicSource(content)
59
+ const magicSource = createMagicSource(urlInfo.content)
63
60
  replacements.forEach(({ path, value }) => {
64
61
  magicSource.replace({
65
62
  start: path.node.start,
@@ -78,7 +75,28 @@ const babelPluginMetadataImportMetaScenarios = () => {
78
75
  name: "metadata-import-meta-scenarios",
79
76
  visitor: {
80
77
  Program(programPath, state) {
81
- const importMetas = collectProgramImportMetas(programPath)
78
+ const importMetas = {}
79
+ programPath.traverse({
80
+ MemberExpression(path) {
81
+ const { node } = path
82
+ const { object } = node
83
+ if (object.type !== "MetaProperty") {
84
+ return
85
+ }
86
+ const { property: objectProperty } = object
87
+ if (objectProperty.name !== "meta") {
88
+ return
89
+ }
90
+ const { property } = node
91
+ const { name } = property
92
+ const importMetaPaths = importMetas[name]
93
+ if (importMetaPaths) {
94
+ importMetaPaths.push(path)
95
+ } else {
96
+ importMetas[name] = [path]
97
+ }
98
+ },
99
+ })
82
100
  state.file.metadata.importMetaScenarios = {
83
101
  dev: importMetas.dev,
84
102
  test: importMetas.test,
@@ -0,0 +1,52 @@
1
+ const getCurrentScriptSrc = () => {
2
+ const { currentScript } = document
3
+ if (currentScript) return currentScript.src
4
+
5
+ // https://github.com/amiller-gh/currentScript-polyfill
6
+
7
+ const scripts = Array.prototype.slice.call(
8
+ document.getElementsByTagName("script"),
9
+ )
10
+
11
+ const readyScript = scripts.find((script) => {
12
+ return script.readyState === "interactive"
13
+ })
14
+ if (readyScript) return readyScript
15
+
16
+ try {
17
+ throw new Error()
18
+ } catch (err) {
19
+ // Find the second match for the "at" string to get file src url from stack.
20
+ // Specifically works with the format of stack traces in IE.
21
+ const stackDetails = /.*at [^(]*\((.*):(.+):(.+)\)$/gi.exec(err.stack)
22
+ const scriptLocation = (stackDetails || [false])[1]
23
+ const line = (stackDetails || [false])[2]
24
+ const currentLocation = document.location.href.replace(
25
+ document.location.hash,
26
+ "",
27
+ )
28
+
29
+ if (scriptLocation === currentLocation) {
30
+ const source = document.documentElement.outerHTML
31
+ const codeRegExp = new RegExp(
32
+ `(?:[^\\n]+?\\n){0,${
33
+ line - 2
34
+ }}[^<]*<script>([\\d\\D]*?)<\\/script>[\\d\\D]*`,
35
+ "i",
36
+ )
37
+ const code = source.replace(codeRegExp, "$1").trim()
38
+
39
+ return scripts.find((script) => {
40
+ return script.innerHTML && script.innerHTML.trim() === code
41
+ })
42
+ }
43
+
44
+ return scripts.find((script) => {
45
+ return script.src === scriptLocation
46
+ })
47
+ }
48
+ }
49
+
50
+ const url = getCurrentScriptSrc()
51
+
52
+ export default url
@@ -0,0 +1,9 @@
1
+ /* global __filename */
2
+
3
+ const filenameContainsBackSlashes = __filename.indexOf("\\") > -1
4
+
5
+ const url = filenameContainsBackSlashes
6
+ ? `file:///${__filename.replace(/\\/g, "/")}`
7
+ : `file://${__filename}`
8
+
9
+ export default url
@@ -30,8 +30,7 @@ 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"
@@ -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,27 @@ 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
126
  line: line - 1,
131
127
  column,
132
- isOriginal,
128
+ isOriginalPosition: isOriginal,
133
129
  specifier: inlineImportmapUrl,
134
130
  contentType: "application/importmap+json",
135
131
  content: textNode.value,
136
132
  })
137
- await cook({
133
+ await context.cook({
138
134
  reference: inlineImportmapReference,
139
135
  urlInfo: inlineImportmapUrlInfo,
140
136
  })
141
- setHtmlNodeText(importmap, inlineImportmapUrlInfo.content)
142
- onHtmlImportmapParsed(JSON.parse(inlineImportmapUrlInfo.content), url)
137
+ setHtmlNodeGeneratedText(importmap, {
138
+ generatedText: inlineImportmapUrlInfo.content,
139
+ generatedBy: "jsenv:importmap",
140
+ })
141
+ onHtmlImportmapParsed(
142
+ JSON.parse(inlineImportmapUrlInfo.content),
143
+ htmlUrlInfo.url,
144
+ )
143
145
  }
144
146
  const handleImportmapWithSrc = async (importmap, src) => {
145
147
  // Browser would throw on remote importmap
@@ -147,35 +149,39 @@ export const jsenvPluginImportmap = () => {
147
149
  // We must precook the importmap to know its content and inline it into the HTML
148
150
  // In this situation the ref to the importmap was already discovered
149
151
  // when parsing the HTML
150
- const importmapReference = references.find(
151
- (reference) => reference.url === src,
152
+ const importmapReference =
153
+ context.referenceUtils.findByGeneratedSpecifier(src)
154
+ const importmapUrlInfo = context.urlGraph.getUrlInfo(
155
+ importmapReference.url,
152
156
  )
153
- const importmapUrlInfo = urlGraph.getUrlInfo(importmapReference.url)
154
- await cook({
157
+ await context.cook({
155
158
  reference: importmapReference,
156
159
  urlInfo: importmapUrlInfo,
157
160
  })
158
- onHtmlImportmapParsed(JSON.parse(importmapUrlInfo.content), url)
161
+ onHtmlImportmapParsed(
162
+ JSON.parse(importmapUrlInfo.content),
163
+ htmlUrlInfo.url,
164
+ )
159
165
  removeHtmlNodeAttributeByName(importmap, "src")
160
- assignHtmlNodeAttributes(importmap, {
161
- "content-src": src,
162
- "inlined-by": "jsenv:importmap",
166
+ setHtmlNodeGeneratedText(importmap, {
167
+ generatedText: importmapUrlInfo.content,
168
+ generatedBy: "jsenv:importmap",
169
+ generatedFromSrc: src,
163
170
  })
164
- setHtmlNodeText(importmap, importmapUrlInfo.content)
165
171
 
166
172
  const { line, column, lineEnd, columnEnd, isOriginal } =
167
173
  htmlNodePosition.readNodePosition(importmap, {
168
174
  preferOriginal: true,
169
175
  })
170
176
  const inlineImportmapUrl = generateInlineContentUrl({
171
- url,
177
+ url: htmlUrlInfo.url,
172
178
  extension: ".importmap",
173
179
  line,
174
180
  column,
175
181
  lineEnd,
176
182
  columnEnd,
177
183
  })
178
- referenceUtils.becomesInline(importmapReference, {
184
+ context.referenceUtils.becomesInline(importmapReference, {
179
185
  line: line - 1,
180
186
  column,
181
187
  isOriginal,
@@ -200,7 +206,7 @@ export const jsenvPluginImportmap = () => {
200
206
  // by "formatReferencedUrl" making the importmap presence useless.
201
207
  // In dev/test we keep importmap into the HTML to see it even if useless
202
208
  // Duing build we get rid of it
203
- if (scenario === "build") {
209
+ if (context.scenario === "build") {
204
210
  removeHtmlNode(importmap)
205
211
  }
206
212
  return {
@@ -0,0 +1,25 @@
1
+ import { createMagicSource } from "@jsenv/utils/sourcemap/magic_source.js"
2
+ import { isWebWorkerUrlInfo } from "@jsenv/core/src/omega/web_workers.js"
3
+
4
+ export const jsenvPluginInjectGlobals = (globals = {}) => {
5
+ if (Object.keys(globals).length === 0) {
6
+ return []
7
+ }
8
+ const injectGlobals = (urlInfo) => {
9
+ const magicSource = createMagicSource(urlInfo.content)
10
+ const globalName = isWebWorkerUrlInfo(urlInfo) ? "self" : "window"
11
+ magicSource.prepend(
12
+ `Object.assign(${globalName}, ${JSON.stringify(globals, null, " ")});`,
13
+ )
14
+ return magicSource.toContentAndSourcemap()
15
+ }
16
+
17
+ return {
18
+ name: "jsenv:inject_globals",
19
+ appliesDuring: "*",
20
+ transformUrlContent: {
21
+ js_classic: injectGlobals,
22
+ js_module: injectGlobals,
23
+ },
24
+ }
25
+ }