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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (253) hide show
  1. package/dist/babel_helpers/AsyncGenerator/AsyncGenerator.js +95 -0
  2. package/dist/babel_helpers/AwaitValue/AwaitValue.js +3 -0
  3. package/dist/babel_helpers/applyDecoratorDescriptor/applyDecoratorDescriptor.js +29 -0
  4. package/dist/babel_helpers/arrayLikeToArray/arrayLikeToArray.js +9 -0
  5. package/dist/babel_helpers/arrayWithHoles/arrayWithHoles.js +4 -0
  6. package/dist/babel_helpers/arrayWithoutHoles/arrayWithoutHoles.js +5 -0
  7. package/dist/babel_helpers/assertThisInitialized/assertThisInitialized.js +8 -0
  8. package/dist/babel_helpers/asyncGeneratorDelegate/asyncGeneratorDelegate.js +52 -0
  9. package/dist/babel_helpers/asyncIterator/asyncIterator.js +78 -0
  10. package/dist/babel_helpers/asyncToGenerator/asyncToGenerator.js +39 -0
  11. package/dist/babel_helpers/awaitAsyncGenerator/awaitAsyncGenerator.js +4 -0
  12. package/dist/babel_helpers/classApplyDescriptorDestructureSet/classApplyDescriptorDestructureSet.js +24 -0
  13. package/dist/babel_helpers/classApplyDescriptorGet/classApplyDescriptorGet.js +7 -0
  14. package/dist/babel_helpers/classApplyDescriptorSet/classApplyDescriptorSet.js +14 -0
  15. package/dist/babel_helpers/classCallCheck/classCallCheck.js +5 -0
  16. package/dist/babel_helpers/classCheckPrivateStaticAccess/classCheckPrivateStaticAccess.js +5 -0
  17. package/dist/babel_helpers/classCheckPrivateStaticFieldDescriptor/classCheckPrivateStaticFieldDescriptor.js +6 -0
  18. package/dist/babel_helpers/classExtractFieldDescriptor/classExtractFieldDescriptor.js +8 -0
  19. package/dist/babel_helpers/classNameTDZError/classNameTDZError.js +4 -0
  20. package/dist/babel_helpers/classPrivateFieldDestructureSet/classPrivateFieldDestructureSet.js +6 -0
  21. package/dist/babel_helpers/classPrivateFieldGet/classPrivateFieldGet.js +6 -0
  22. package/dist/babel_helpers/classPrivateFieldLooseBase/classPrivateFieldLooseBase.js +7 -0
  23. package/dist/babel_helpers/classPrivateFieldLooseKey/classPrivateFieldLooseKey.js +5 -0
  24. package/dist/babel_helpers/classPrivateFieldSet/classPrivateFieldSet.js +7 -0
  25. package/dist/babel_helpers/classPrivateMethodGet/classPrivateMethodGet.js +7 -0
  26. package/dist/babel_helpers/classPrivateMethodSet/classPrivateMethodSet.js +3 -0
  27. package/dist/babel_helpers/classStaticPrivateFieldSpecGet/classStaticPrivateFieldSpecGet.js +8 -0
  28. package/dist/babel_helpers/classStaticPrivateFieldSpecSet/classStaticPrivateFieldSpecSet.js +9 -0
  29. package/dist/babel_helpers/classStaticPrivateMethodGet/classStaticPrivateMethodGet.js +5 -0
  30. package/dist/babel_helpers/classStaticPrivateMethodSet/classStaticPrivateMethodSet.js +3 -0
  31. package/dist/babel_helpers/construct/construct.js +15 -0
  32. package/dist/babel_helpers/createClass/createClass.js +18 -0
  33. package/dist/babel_helpers/createForOfIteratorHelper/createForOfIteratorHelper.js +63 -0
  34. package/dist/babel_helpers/createForOfIteratorHelperLoose/createForOfIteratorHelperLoose.js +22 -0
  35. package/dist/babel_helpers/createRawReactElement/createRawReactElement.js +50 -0
  36. package/dist/babel_helpers/createSuper/createSuper.js +22 -0
  37. package/dist/babel_helpers/decorate/decorate.js +622 -0
  38. package/dist/babel_helpers/defaults/defaults.js +14 -0
  39. package/dist/babel_helpers/defineEnumerableProperties/defineEnumerableProperties.js +26 -0
  40. package/dist/babel_helpers/defineProperty/defineProperty.js +19 -0
  41. package/dist/babel_helpers/extends/extends.js +16 -0
  42. package/dist/babel_helpers/get/get.js +21 -0
  43. package/dist/babel_helpers/getPrototypeOf/getPrototypeOf.js +2 -0
  44. package/dist/babel_helpers/inherits/inherits.js +21 -0
  45. package/dist/babel_helpers/inheritsLoose/inheritsLoose.js +6 -0
  46. package/dist/babel_helpers/initializerDefineProperty/initializerDefineProperty.js +10 -0
  47. package/dist/babel_helpers/initializerWarningHelper/initializerWarningHelper.js +3 -0
  48. package/dist/babel_helpers/instanceof/instanceof.js +7 -0
  49. package/dist/babel_helpers/interopRequireDefault/interopRequireDefault.js +5 -0
  50. package/dist/babel_helpers/interopRequireWildcard/interopRequireWildcard.js +49 -0
  51. package/dist/babel_helpers/isNativeFunction/isNativeFunction.js +4 -0
  52. package/dist/babel_helpers/isNativeReflectConstruct/isNativeReflectConstruct.js +21 -0
  53. package/dist/babel_helpers/iterableToArray/iterableToArray.js +3 -0
  54. package/dist/babel_helpers/iterableToArrayLimit/iterableToArrayLimit.js +38 -0
  55. package/dist/babel_helpers/iterableToArrayLimitLoose/iterableToArrayLimitLoose.js +13 -0
  56. package/dist/babel_helpers/jsx/jsx.js +49 -0
  57. package/dist/babel_helpers/maybeArrayLike/maybeArrayLike.js +10 -0
  58. package/dist/babel_helpers/newArrowCheck/newArrowCheck.js +5 -0
  59. package/dist/babel_helpers/nonIterableRest/nonIterableRest.js +3 -0
  60. package/dist/babel_helpers/nonIterableSpread/nonIterableSpread.js +3 -0
  61. package/dist/babel_helpers/objectDestructuringEmpty/objectDestructuringEmpty.js +3 -0
  62. package/dist/babel_helpers/objectSpread/objectSpread.js +22 -0
  63. package/dist/babel_helpers/objectSpread2/objectSpread2.js +41 -0
  64. package/dist/babel_helpers/objectWithoutProperties/objectWithoutProperties.js +20 -0
  65. package/dist/babel_helpers/objectWithoutPropertiesLoose/objectWithoutPropertiesLoose.js +15 -0
  66. package/dist/babel_helpers/possibleConstructorReturn/possibleConstructorReturn.js +10 -0
  67. package/dist/babel_helpers/readOnlyError/readOnlyError.js +4 -0
  68. package/dist/babel_helpers/readme.md +8 -0
  69. package/dist/babel_helpers/set/set.js +51 -0
  70. package/dist/babel_helpers/setPrototypeOf/setPrototypeOf.js +5 -0
  71. package/dist/babel_helpers/skipFirstGeneratorNext/skipFirstGeneratorNext.js +8 -0
  72. package/dist/babel_helpers/slicedToArray/slicedToArray.js +5 -0
  73. package/dist/babel_helpers/slicedToArrayLoose/slicedToArrayLoose.js +7 -0
  74. package/dist/babel_helpers/superPropBase/superPropBase.js +10 -0
  75. package/dist/babel_helpers/taggedTemplateLiteral/taggedTemplateLiteral.js +11 -0
  76. package/dist/babel_helpers/taggedTemplateLiteralLoose/taggedTemplateLiteralLoose.js +8 -0
  77. package/dist/babel_helpers/tdz/tdz.js +4 -0
  78. package/dist/babel_helpers/temporalRef/temporalRef.js +5 -0
  79. package/dist/babel_helpers/temporalUndefined/temporalUndefined.js +3 -0
  80. package/dist/babel_helpers/toArray/toArray.js +5 -0
  81. package/dist/babel_helpers/toConsumableArray/toConsumableArray.js +5 -0
  82. package/dist/babel_helpers/toPrimitive/toPrimitive.js +14 -0
  83. package/dist/babel_helpers/toPropertyKey/toPropertyKey.js +5 -0
  84. package/dist/babel_helpers/typeof/typeof.js +7 -0
  85. package/dist/babel_helpers/unsupportedIterableToArray/unsupportedIterableToArray.js +10 -0
  86. package/dist/babel_helpers/wrapAsyncGenerator/wrapAsyncGenerator.js +7 -0
  87. package/dist/babel_helpers/wrapNativeSuper/wrapNativeSuper.js +35 -0
  88. package/dist/babel_helpers/wrapRegExp/wrapRegExp.js +67 -0
  89. package/dist/babel_helpers/writeOnlyError/writeOnlyError.js +4 -0
  90. package/dist/html/explorer.html +557 -0
  91. package/dist/js/controllable_file.mjs +227 -0
  92. package/dist/js/event_source_client.js +324 -0
  93. package/dist/js/global_this.js +32 -0
  94. package/dist/js/html_supervisor_installer.js +522 -0
  95. package/dist/js/html_supervisor_setup.js +82 -0
  96. package/dist/js/import_meta_hot.js +84 -0
  97. package/dist/js/inline_content.js +8 -0
  98. package/dist/js/new_stylesheet.js +409 -0
  99. package/dist/js/regenerator_runtime.js +721 -0
  100. package/dist/js/s.js +429 -0
  101. package/dist/main.js +13418 -0
  102. package/dist/other/jsenv.png +0 -0
  103. package/dist/s.js +626 -0
  104. package/dist/s.js.map +204 -0
  105. package/package.json +55 -48
  106. package/readme.md +6 -14
  107. package/src/build/build.js +1074 -563
  108. package/src/build/build_urls_generator.js +65 -24
  109. package/src/build/graph_utils.js +31 -0
  110. package/src/build/{inject_version_mappings.js → inject_global_version_mappings.js} +49 -18
  111. package/src/build/inject_service_worker_urls.js +79 -0
  112. package/src/build/resync_ressource_hints.js +115 -0
  113. package/src/build/start_build_server.js +210 -0
  114. package/src/dev/plugins/explorer/client/explorer.html +1 -1
  115. package/src/dev/plugins/explorer/jsenv_plugin_explorer.js +9 -13
  116. package/src/dev/plugins/toolbar/jsenv_plugin_toolbar.js +3 -1
  117. package/src/dev/start_dev_server.js +165 -38
  118. package/src/execute/execute.js +35 -8
  119. package/src/execute/run.js +21 -57
  120. package/src/execute/runtimes/browsers/from_playwright.js +220 -150
  121. package/src/execute/runtimes/node/child_exec_options.js +1 -1
  122. package/src/execute/runtimes/node/controllable_file.mjs +26 -10
  123. package/src/execute/runtimes/node/kill_process_tree.js +2 -4
  124. package/src/execute/runtimes/node/node_execution_performance.js +67 -0
  125. package/src/execute/runtimes/node/node_process.js +288 -39
  126. package/src/main.js +27 -0
  127. package/src/omega/{runtime_support/features_compatibility.js → compat/features_compats.js} +30 -7
  128. package/src/omega/{runtime_support/runtime_support.js → compat/runtime_compat.js} +14 -16
  129. package/src/omega/errors.js +63 -67
  130. package/src/omega/fetched_content_compliance.js +24 -0
  131. package/src/omega/file_url_converter.js +9 -51
  132. package/src/omega/kitchen.js +605 -467
  133. package/src/omega/omega_server.js +2 -3
  134. package/src/omega/server/file_service.js +88 -41
  135. package/src/omega/server/user_agent.js +5 -6
  136. package/src/omega/url_graph/url_graph_load.js +31 -23
  137. package/src/omega/url_graph/url_graph_report.js +94 -51
  138. package/src/omega/url_graph/url_info_transformations.js +37 -17
  139. package/src/omega/url_graph.js +88 -19
  140. package/src/omega/url_specifier_encoding.js +59 -0
  141. package/src/omega/web_workers.js +42 -0
  142. package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/autoreload_preference.js +0 -0
  143. package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/event_source_client.js +19 -12
  144. package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/reload.js +0 -0
  145. package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/url_helpers.js +0 -0
  146. package/src/plugins/autoreload/dev_sse/jsenv_plugin_dev_sse_client.js +41 -0
  147. package/src/plugins/autoreload/dev_sse/jsenv_plugin_dev_sse_server.js +204 -0
  148. package/src/plugins/autoreload/jsenv_plugin_autoreload.js +25 -0
  149. package/src/plugins/autoreload/jsenv_plugin_hmr.js +35 -0
  150. package/src/plugins/bundling/css/bundle_css.js +140 -0
  151. package/src/plugins/bundling/js_classic_workers/bundle_js_classic_workers.js +13 -0
  152. package/src/plugins/bundling/js_module/bundle_js_module.js +343 -0
  153. package/src/plugins/bundling/jsenv_plugin_bundling.js +54 -0
  154. package/src/plugins/cache_control/jsenv_plugin_cache_control.js +34 -0
  155. package/src/{omega/core_plugins → plugins}/commonjs_globals/jsenv_plugin_commonjs_globals.js +54 -41
  156. package/src/plugins/file_urls/jsenv_plugin_file_urls.js +183 -0
  157. package/src/{omega/core_plugins → plugins}/html_supervisor/client/error_in_document.js +0 -0
  158. package/src/{omega/core_plugins → plugins}/html_supervisor/client/error_in_notification.js +0 -0
  159. package/src/plugins/html_supervisor/client/html_supervisor_installer.js +254 -0
  160. package/src/plugins/html_supervisor/client/html_supervisor_setup.js +82 -0
  161. package/src/{omega/core_plugins → plugins}/html_supervisor/client/perf_browser.js +0 -0
  162. package/src/{omega/core_plugins → plugins}/html_supervisor/client/uneval_exception.js +0 -0
  163. package/src/{omega/core_plugins → plugins}/html_supervisor/jsenv_plugin_html_supervisor.js +73 -55
  164. package/src/plugins/http_urls/jsenv_plugin_http_urls.js +12 -0
  165. package/src/{dev/plugins/autoreload → plugins/import_meta_hot}/babel_plugin_metadata_import_meta_hot.js +4 -5
  166. package/src/{dev/plugins/autoreload → plugins/import_meta_hot}/client/import_meta_hot.js +3 -1
  167. package/src/{dev/plugins/autoreload → plugins/import_meta_hot}/html_hot_dependencies.js +7 -4
  168. package/src/plugins/import_meta_hot/jsenv_plugin_import_meta_hot.js +100 -0
  169. package/src/{omega/core_plugins → plugins}/import_meta_scenarios/jsenv_plugin_import_meta_scenarios.js +33 -8
  170. package/src/plugins/import_meta_url/client/import_meta_url_browser.js +52 -0
  171. package/src/plugins/import_meta_url/client/import_meta_url_commonjs.mjs +9 -0
  172. package/src/{omega/core_plugins → plugins}/importmap/jsenv_plugin_importmap.js +40 -36
  173. package/src/plugins/inject_globals/inject_globals.js +57 -0
  174. package/src/plugins/inject_globals/jsenv_plugin_inject_globals.js +24 -0
  175. package/src/{omega/core_plugins → plugins}/inline/client/inline_content.js +0 -0
  176. package/src/{omega/core_plugins → plugins}/inline/jsenv_plugin_data_urls.js +22 -21
  177. package/src/plugins/inline/jsenv_plugin_html_inline_content.js +161 -0
  178. package/src/plugins/inline/jsenv_plugin_inline.js +36 -0
  179. package/src/{omega/core_plugins → plugins}/inline/jsenv_plugin_inline_query_param.js +8 -11
  180. package/src/plugins/inline/jsenv_plugin_js_inline_content.js +294 -0
  181. package/src/plugins/leading_slash/jsenv_plugin_leading_slash.js +13 -0
  182. package/src/plugins/minification/css/minify_css.js +9 -0
  183. package/src/plugins/minification/html/minify_html.js +13 -0
  184. package/src/{build/plugins/minify_js/jsenv_plugin_minify_js.js → plugins/minification/js/minify_js.js} +6 -22
  185. package/src/plugins/minification/jsenv_plugin_minification.js +78 -0
  186. package/src/plugins/minification/json/minify_json.js +8 -0
  187. package/src/plugins/node_esm_resolution/jsenv_plugin_node_esm_resolution.js +162 -0
  188. package/src/plugins/node_runtime/jsenv_plugin_node_runtime.js +12 -0
  189. package/src/{omega → plugins}/plugin_controller.js +57 -12
  190. package/src/plugins/plugins.js +89 -0
  191. package/src/plugins/transpilation/as_js_classic/client/s.js +429 -0
  192. package/src/plugins/transpilation/as_js_classic/helpers/babel_plugin_transform_import_meta_url.js +47 -0
  193. package/src/plugins/transpilation/as_js_classic/helpers/systemjs_old.js +43 -0
  194. package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic.js +211 -0
  195. package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic_html.js +304 -0
  196. package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic_workers.js +55 -0
  197. package/src/{omega/core_plugins → plugins/transpilation}/babel/global_this/babel_plugin_global_this_as_jsenv_import.js +0 -0
  198. package/src/{omega/core_plugins → plugins/transpilation}/babel/global_this/client/global_this.js +0 -0
  199. package/src/{omega/core_plugins → plugins/transpilation}/babel/helpers/babel_plugin_babel_helpers_as_jsenv_imports.js +0 -0
  200. package/src/{omega/core_plugins → plugins/transpilation}/babel/helpers/babel_plugin_structure.js +14 -17
  201. package/src/{omega/core_plugins → plugins/transpilation}/babel/helpers/babel_plugins_compatibility.js +0 -0
  202. package/src/{omega/core_plugins → plugins/transpilation}/babel/jsenv_plugin_babel.js +39 -32
  203. package/src/{omega/core_plugins → plugins/transpilation}/babel/new_stylesheet/babel_plugin_new_stylesheet_as_jsenv_import.js +30 -6
  204. package/src/{omega/core_plugins → plugins/transpilation}/babel/new_stylesheet/client/new_stylesheet.js +0 -0
  205. package/src/{omega/core_plugins → plugins/transpilation}/babel/regenerator_runtime/babel_plugin_regenerator_runtime_as_jsenv_import.js +0 -0
  206. package/src/{omega/core_plugins → plugins/transpilation}/babel/regenerator_runtime/client/regenerator_runtime.js +0 -0
  207. package/src/plugins/transpilation/babel/require_babel_plugin.js +8 -0
  208. package/src/plugins/transpilation/css_parcel/jsenv_plugin_css_parcel.js +18 -0
  209. package/src/plugins/transpilation/import_assertions/jsenv_plugin_import_assertions.js +184 -0
  210. package/src/plugins/transpilation/jsenv_plugin_top_level_await.js +79 -0
  211. package/src/plugins/transpilation/jsenv_plugin_transpilation.js +46 -0
  212. package/src/plugins/url_analysis/css/css_urls.js +49 -0
  213. package/src/plugins/url_analysis/html/html_urls.js +272 -0
  214. package/src/plugins/url_analysis/js/js_urls.js +68 -0
  215. package/src/plugins/url_analysis/jsenv_plugin_url_analysis.js +103 -0
  216. package/src/plugins/url_analysis/webmanifest/webmanifest_urls.js +20 -0
  217. package/src/{omega/core_plugins → plugins}/url_resolution/jsenv_plugin_url_resolution.js +9 -5
  218. package/src/plugins/url_version/jsenv_plugin_url_version.js +28 -0
  219. package/src/require_from_jsenv.js +3 -0
  220. package/src/test/execute_plan.js +85 -44
  221. package/src/test/execute_test_plan.js +37 -25
  222. package/src/test/execution_steps.js +2 -5
  223. package/src/test/logs_file_execution.js +56 -49
  224. package/main.js +0 -19
  225. package/src/build/plugins/bundle_js_module/jsenv_plugin_bundle_js_module.js +0 -227
  226. package/src/build/plugins/minify_html/jsenv_plugin_minify_html.js +0 -30
  227. package/src/dev/plugins/autoreload/client/event_source_connection.js +0 -195
  228. package/src/dev/plugins/autoreload/jsenv_plugin_autoreload.js +0 -374
  229. package/src/dev/plugins/autoreload/sse_service.js +0 -149
  230. package/src/execute/runtimes/node/controlled_process.js +0 -316
  231. package/src/omega/core_plugins/babel/new_stylesheet/client/.eslintrc.cjs +0 -24
  232. package/src/omega/core_plugins/file_urls/jsenv_plugin_file_urls.js +0 -67
  233. package/src/omega/core_plugins/filesystem_magic/jsenv_plugin_filesystem_magic.js +0 -58
  234. package/src/omega/core_plugins/html_supervisor/client/html_supervisor_installer.js +0 -168
  235. package/src/omega/core_plugins/html_supervisor/client/html_supervisor_setup.js +0 -77
  236. package/src/omega/core_plugins/import_assertions/helpers/babel_plugin_metadata_import_assertions.js +0 -98
  237. package/src/omega/core_plugins/import_assertions/helpers/json_module.js +0 -12
  238. package/src/omega/core_plugins/import_assertions/helpers/text_module.js +0 -6
  239. package/src/omega/core_plugins/import_assertions/jsenv_plugin_import_assertions.js +0 -211
  240. package/src/omega/core_plugins/inline/jsenv_plugin_inline.js +0 -13
  241. package/src/omega/core_plugins/inline/jsenv_plugin_js_and_css_inside_html.js +0 -142
  242. package/src/omega/core_plugins/inline/jsenv_plugin_new_inline_content.js +0 -207
  243. package/src/omega/core_plugins/leading_slash/jsenv_plugin_leading_slash.js +0 -12
  244. package/src/omega/core_plugins/node_esm_resolution/jsenv_plugin_node_esm_resolution.js +0 -77
  245. package/src/omega/core_plugins/url_version/jsenv_plugin_url_version.js +0 -50
  246. package/src/omega/core_plugins.js +0 -39
  247. package/src/omega/runtime_support/default_runtime_support.js +0 -13
  248. package/src/omega/url_graph/url_graph_sort.js +0 -29
  249. package/src/omega/url_mentions/css_url_mentions.js +0 -63
  250. package/src/omega/url_mentions/html_url_mentions.js +0 -185
  251. package/src/omega/url_mentions/js_module_url_mentions.js +0 -91
  252. package/src/omega/url_mentions/parse_url_mentions.js +0 -37
  253. package/src/omega/url_mentions/worker_classic_url_mentions.js +0 -37
@@ -2,38 +2,33 @@
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
- import { generateInlineContentUrl } from "@jsenv/utils/urls/inline_content_url_generator.js"
21
+ import { generateInlineContentUrl } from "@jsenv/urls"
28
22
 
29
23
  export const jsenvPluginHtmlSupervisor = ({
30
24
  logs = false,
31
25
  measurePerf = false,
32
- } = {}) => {
26
+ }) => {
33
27
  const htmlSupervisorSetupFileUrl = new URL(
34
- "./client/html_supervisor_setup.js",
28
+ "./client/html_supervisor_setup.js?js_classic",
35
29
  import.meta.url,
36
30
  ).href
31
+
37
32
  const htmlSupervisorInstallerFileUrl = new URL(
38
33
  "./client/html_supervisor_installer.js",
39
34
  import.meta.url,
@@ -45,7 +40,7 @@ export const jsenvPluginHtmlSupervisor = ({
45
40
  dev: true,
46
41
  test: true,
47
42
  },
48
- transform: {
43
+ transformUrlContent: {
49
44
  html: ({ url, content }, { referenceUtils }) => {
50
45
  const htmlAst = parseHtmlString(content)
51
46
  const scriptsToSupervise = []
@@ -64,27 +59,22 @@ export const jsenvPluginHtmlSupervisor = ({
64
59
  lineEnd,
65
60
  columnEnd,
66
61
  })
67
- if (scriptCategory === "classic") {
68
- inlineScriptUrl = injectQueryParams(inlineScriptUrl, {
69
- js_classic: "",
70
- })
71
- }
72
62
  const [inlineScriptReference] = referenceUtils.foundInline({
73
63
  type: "script_src",
74
- line: line - 1,
75
- column,
76
- isOriginal,
64
+ expectedType: { classic: "js_classic", module: "js_module" }[
65
+ scriptCategory
66
+ ],
67
+ isOriginalPosition: isOriginal,
68
+ specifierLine: line - 1,
69
+ specifierColumn: column,
77
70
  specifier: inlineScriptUrl,
78
- contentType: "application/javascript",
71
+ contentType: "text/javascript",
79
72
  content: textNode.value,
80
73
  })
81
- assignHtmlNodeAttributes(node, {
82
- "src": inlineScriptReference.generatedSpecifier,
83
- "src-generated-from-inline-content": "",
84
- })
85
74
  removeHtmlNodeText(node)
86
75
  scriptsToSupervise.push({
87
76
  node,
77
+ isInline: true,
88
78
  type: scriptCategory,
89
79
  src: inlineScriptReference.generatedSpecifier,
90
80
  })
@@ -105,10 +95,17 @@ export const jsenvPluginHtmlSupervisor = ({
105
95
  const crossorigin = crossoriginAttribute
106
96
  ? crossoriginAttribute.value
107
97
  : undefined
98
+ const deferAttribute = getHtmlNodeAttributeByName(node, "crossorigin")
99
+ const defer = deferAttribute ? deferAttribute.value : undefined
100
+ const asyncAttribute = getHtmlNodeAttributeByName(node, "crossorigin")
101
+ const async = asyncAttribute ? asyncAttribute.value : undefined
102
+ removeHtmlNodeAttributeByName(node, "src")
108
103
  scriptsToSupervise.push({
109
104
  node,
110
105
  type: scriptCategory,
111
106
  src: srcAttribute.value,
107
+ defer,
108
+ async,
112
109
  integrity,
113
110
  crossorigin,
114
111
  })
@@ -146,11 +143,9 @@ export const jsenvPluginHtmlSupervisor = ({
146
143
  return
147
144
  }
148
145
  })
149
- if (scriptsToSupervise.length === 0) {
150
- return null
151
- }
152
146
  const [htmlSupervisorInstallerFileReference] = referenceUtils.inject({
153
147
  type: "js_import_export",
148
+ expectedType: "js_module",
154
149
  specifier: htmlSupervisorInstallerFileUrl,
155
150
  })
156
151
  injectScriptAsEarlyAsPossible(
@@ -159,25 +154,24 @@ export const jsenvPluginHtmlSupervisor = ({
159
154
  "tagName": "script",
160
155
  "type": "module",
161
156
  "textContent": `
162
- import { installHtmlSupervisor } from ${
163
- htmlSupervisorInstallerFileReference.generatedSpecifier
164
- }
165
- installHtmlSupervisor(${JSON.stringify(
166
- {
167
- logs,
168
- measurePerf,
169
- },
170
- null,
171
- " ",
172
- )})`,
157
+ import { installHtmlSupervisor } from ${
158
+ htmlSupervisorInstallerFileReference.generatedSpecifier
159
+ }
160
+ installHtmlSupervisor(${JSON.stringify(
161
+ {
162
+ logs,
163
+ measurePerf,
164
+ },
165
+ null,
166
+ " ",
167
+ )})`,
173
168
  "injected-by": "jsenv:html_supervisor",
174
169
  }),
175
170
  )
176
171
  const [htmlSupervisorSetupFileReference] = referenceUtils.inject({
177
172
  type: "script_src",
178
- specifier: injectQueryParams(htmlSupervisorSetupFileUrl, {
179
- js_classic: "",
180
- }),
173
+ expectedType: "js_classic",
174
+ specifier: htmlSupervisorSetupFileUrl,
181
175
  })
182
176
  injectScriptAsEarlyAsPossible(
183
177
  htmlAst,
@@ -188,22 +182,32 @@ installHtmlSupervisor(${JSON.stringify(
188
182
  }),
189
183
  )
190
184
  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({
185
+ ({
186
+ node,
187
+ isInline,
188
+ type,
189
+ src,
190
+ defer,
191
+ async,
192
+ integrity,
193
+ crossorigin,
194
+ }) => {
195
+ setHtmlNodeGeneratedText(node, {
196
+ generatedText: generateCodeToSuperviseScript({
199
197
  type,
200
198
  src,
199
+ isInline,
200
+ defer,
201
+ async,
201
202
  integrity,
202
203
  crossorigin,
203
204
  htmlSupervisorInstallerSpecifier:
204
205
  htmlSupervisorInstallerFileReference.generatedSpecifier,
205
206
  }),
206
- )
207
+ generatedBy: "jsenv:html_supervisor",
208
+ generatedFromSrc: src,
209
+ generatedFromInlineContent: isInline,
210
+ })
207
211
  },
208
212
  )
209
213
  const htmlModified = stringifyHtmlAst(htmlAst)
@@ -220,14 +224,28 @@ installHtmlSupervisor(${JSON.stringify(
220
224
  const generateCodeToSuperviseScript = ({
221
225
  type,
222
226
  src,
227
+ isInline,
228
+ defer,
229
+ async,
223
230
  integrity,
224
231
  crossorigin,
225
232
  htmlSupervisorInstallerSpecifier,
226
233
  }) => {
227
- const paramsAsJson = JSON.stringify({ src, integrity, crossorigin })
234
+ const paramsAsJson = JSON.stringify({
235
+ src,
236
+ isInline,
237
+ defer,
238
+ async,
239
+ integrity,
240
+ crossorigin,
241
+ })
228
242
  if (type === "module") {
229
- return `import { superviseScriptTypeModule } from ${htmlSupervisorInstallerSpecifier}
230
- superviseScriptTypeModule(${paramsAsJson})`
243
+ return `
244
+ import { superviseScriptTypeModule } from ${htmlSupervisorInstallerSpecifier}
245
+ superviseScriptTypeModule(${paramsAsJson})
246
+ `
231
247
  }
232
- return `window.__html_supervisor__.superviseScript(${paramsAsJson})`
248
+ return `
249
+ window.__html_supervisor__.superviseScript(${paramsAsJson})
250
+ `
233
251
  }
@@ -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 { shouldHandle: false }
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
  }
@@ -103,7 +103,7 @@ export const collectHotDataFromHtmlAst = (htmlAst) => {
103
103
  }
104
104
  iterate(htmlAst, {})
105
105
 
106
- return { hotReferences }
106
+ return hotReferences
107
107
  }
108
108
 
109
109
  const nodeNamesWithHref = ["link", "a", "image", "use"]
@@ -125,7 +125,7 @@ const getNodeContext = (node) => {
125
125
 
126
126
  const htmlNodeCanHotReload = (node) => {
127
127
  if (node.nodeName === "link") {
128
- const { isStylesheet, isRessourceHint } = parseLinkNode(node)
128
+ const { isStylesheet, isRessourceHint, rel } = parseLinkNode(node)
129
129
  if (isStylesheet) {
130
130
  // stylesheets can be hot replaced by default
131
131
  return true
@@ -135,6 +135,9 @@ const htmlNodeCanHotReload = (node) => {
135
135
  // but we won't do anything (if the ressource is deleted we should?)
136
136
  return true
137
137
  }
138
+ if (rel === "icon") {
139
+ return true
140
+ }
138
141
  return false
139
142
  }
140
143
  return [
@@ -0,0 +1,100 @@
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
+ import { collectHotDataFromHtmlAst } from "./html_hot_dependencies.js"
5
+ import { babelPluginMetadataImportMetaHot } from "./babel_plugin_metadata_import_meta_hot.js"
6
+
7
+ export const jsenvPluginImportMetaHot = () => {
8
+ const importMetaHotClientFileUrl = new URL(
9
+ "./client/import_meta_hot.js",
10
+ import.meta.url,
11
+ ).href
12
+
13
+ return {
14
+ name: "jsenv:import_meta_hot",
15
+ appliesDuring: "*",
16
+ transformUrlContent: {
17
+ html: (htmlUrlInfo, context) => {
18
+ // during build we don't really care to parse html hot dependencies
19
+ if (context.scenario === "build") {
20
+ return
21
+ }
22
+ const htmlAst = parseHtmlString(htmlUrlInfo.content)
23
+ const hotReferences = collectHotDataFromHtmlAst(htmlAst)
24
+ htmlUrlInfo.data.hotDecline = false
25
+ htmlUrlInfo.data.hotAcceptSelf = false
26
+ htmlUrlInfo.data.hotAcceptDependencies = hotReferences.map(
27
+ ({ type, specifier }) => {
28
+ const [reference] = context.referenceUtils.found({
29
+ type,
30
+ specifier,
31
+ })
32
+ return reference.url
33
+ },
34
+ )
35
+ },
36
+ css: (cssUrlInfo) => {
37
+ cssUrlInfo.data.hotDecline = false
38
+ cssUrlInfo.data.hotAcceptSelf = false
39
+ cssUrlInfo.data.hotAcceptDependencies = []
40
+ },
41
+ js_module: async (urlInfo, context) => {
42
+ if (!urlInfo.content.includes("import.meta.hot")) {
43
+ return null
44
+ }
45
+ const { metadata } = await applyBabelPlugins({
46
+ babelPlugins: [babelPluginMetadataImportMetaHot],
47
+ urlInfo,
48
+ })
49
+ const {
50
+ importMetaHotPaths,
51
+ hotDecline,
52
+ hotAcceptSelf,
53
+ hotAcceptDependencies,
54
+ } = metadata
55
+ urlInfo.data.hotDecline = hotDecline
56
+ urlInfo.data.hotAcceptSelf = hotAcceptSelf
57
+ urlInfo.data.hotAcceptDependencies = hotAcceptDependencies
58
+ if (importMetaHotPaths.length === 0) {
59
+ return null
60
+ }
61
+ if (context.scenario === "build") {
62
+ return removeImportMetaHots(urlInfo, importMetaHotPaths)
63
+ }
64
+ return injectImportMetaHot(urlInfo, context, importMetaHotClientFileUrl)
65
+ },
66
+ },
67
+ }
68
+ }
69
+
70
+ const removeImportMetaHots = (urlInfo, importMetaHotPaths) => {
71
+ const magicSource = createMagicSource(urlInfo.content)
72
+ importMetaHotPaths.forEach((path) => {
73
+ magicSource.replace({
74
+ start: path.node.start,
75
+ end: path.node.end,
76
+ replacement: "undefined",
77
+ })
78
+ })
79
+ return magicSource.toContentAndSourcemap()
80
+ }
81
+
82
+ // For some reason using magic source here produce
83
+ // better sourcemap than doing the equivalent with babel
84
+ // I suspect it's because I was doing injectAstAfterImport(programPath, ast.program.body[0])
85
+ // which is likely not well supported by babel
86
+ const injectImportMetaHot = (urlInfo, context, importMetaHotClientFileUrl) => {
87
+ const [importMetaHotClientFileReference] = context.referenceUtils.inject({
88
+ parentUrl: urlInfo.url,
89
+ type: "js_import_export",
90
+ expectedType: "js_module",
91
+ specifier: importMetaHotClientFileUrl,
92
+ })
93
+ const magicSource = createMagicSource(urlInfo.content)
94
+ magicSource.prepend(
95
+ `import { createImportMetaHot } from ${importMetaHotClientFileReference.generatedSpecifier}
96
+ import.meta.hot = createImportMetaHot(import.meta.url)
97
+ `,
98
+ )
99
+ return magicSource.toContentAndSourcemap()
100
+ }
@@ -12,18 +12,22 @@
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 }) => {
21
+ if (
22
+ !urlInfo.content.includes("import.meta.dev") &&
23
+ !urlInfo.content.includes("import.meta.test") &&
24
+ !urlInfo.content.includes("import.meta.build")
25
+ ) {
26
+ return null
27
+ }
23
28
  const { metadata } = await applyBabelPlugins({
24
29
  babelPlugins: [babelPluginMetadataImportMetaScenarios],
25
- url,
26
- content,
30
+ urlInfo,
27
31
  })
28
32
  const { dev = [], test = [], build = [] } = metadata.importMetaScenarios
29
33
  const replacements = []
@@ -59,7 +63,7 @@ export const jsenvPluginImportMetaScenarios = () => {
59
63
  replace(path, "true")
60
64
  })
61
65
  }
62
- const magicSource = createMagicSource(content)
66
+ const magicSource = createMagicSource(urlInfo.content)
63
67
  replacements.forEach(({ path, value }) => {
64
68
  magicSource.replace({
65
69
  start: path.node.start,
@@ -78,7 +82,28 @@ const babelPluginMetadataImportMetaScenarios = () => {
78
82
  name: "metadata-import-meta-scenarios",
79
83
  visitor: {
80
84
  Program(programPath, state) {
81
- const importMetas = collectProgramImportMetas(programPath)
85
+ const importMetas = {}
86
+ programPath.traverse({
87
+ MemberExpression(path) {
88
+ const { node } = path
89
+ const { object } = node
90
+ if (object.type !== "MetaProperty") {
91
+ return
92
+ }
93
+ const { property: objectProperty } = object
94
+ if (objectProperty.name !== "meta") {
95
+ return
96
+ }
97
+ const { property } = node
98
+ const { name } = property
99
+ const importMetaPaths = importMetas[name]
100
+ if (importMetaPaths) {
101
+ importMetaPaths.push(path)
102
+ } else {
103
+ importMetas[name] = [path]
104
+ }
105
+ },
106
+ })
82
107
  state.file.metadata.importMetaScenarios = {
83
108
  dev: importMetas.dev,
84
109
  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