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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (253) hide show
  1. package/dist/babel_helpers/AsyncGenerator/AsyncGenerator.js +95 -0
  2. package/dist/babel_helpers/AwaitValue/AwaitValue.js +3 -0
  3. package/dist/babel_helpers/applyDecoratorDescriptor/applyDecoratorDescriptor.js +29 -0
  4. package/dist/babel_helpers/arrayLikeToArray/arrayLikeToArray.js +9 -0
  5. package/dist/babel_helpers/arrayWithHoles/arrayWithHoles.js +4 -0
  6. package/dist/babel_helpers/arrayWithoutHoles/arrayWithoutHoles.js +5 -0
  7. package/dist/babel_helpers/assertThisInitialized/assertThisInitialized.js +8 -0
  8. package/dist/babel_helpers/asyncGeneratorDelegate/asyncGeneratorDelegate.js +52 -0
  9. package/dist/babel_helpers/asyncIterator/asyncIterator.js +78 -0
  10. package/dist/babel_helpers/asyncToGenerator/asyncToGenerator.js +39 -0
  11. package/dist/babel_helpers/awaitAsyncGenerator/awaitAsyncGenerator.js +4 -0
  12. package/dist/babel_helpers/classApplyDescriptorDestructureSet/classApplyDescriptorDestructureSet.js +24 -0
  13. package/dist/babel_helpers/classApplyDescriptorGet/classApplyDescriptorGet.js +7 -0
  14. package/dist/babel_helpers/classApplyDescriptorSet/classApplyDescriptorSet.js +14 -0
  15. package/dist/babel_helpers/classCallCheck/classCallCheck.js +5 -0
  16. package/dist/babel_helpers/classCheckPrivateStaticAccess/classCheckPrivateStaticAccess.js +5 -0
  17. package/dist/babel_helpers/classCheckPrivateStaticFieldDescriptor/classCheckPrivateStaticFieldDescriptor.js +6 -0
  18. package/dist/babel_helpers/classExtractFieldDescriptor/classExtractFieldDescriptor.js +8 -0
  19. package/dist/babel_helpers/classNameTDZError/classNameTDZError.js +4 -0
  20. package/dist/babel_helpers/classPrivateFieldDestructureSet/classPrivateFieldDestructureSet.js +6 -0
  21. package/dist/babel_helpers/classPrivateFieldGet/classPrivateFieldGet.js +6 -0
  22. package/dist/babel_helpers/classPrivateFieldLooseBase/classPrivateFieldLooseBase.js +7 -0
  23. package/dist/babel_helpers/classPrivateFieldLooseKey/classPrivateFieldLooseKey.js +5 -0
  24. package/dist/babel_helpers/classPrivateFieldSet/classPrivateFieldSet.js +7 -0
  25. package/dist/babel_helpers/classPrivateMethodGet/classPrivateMethodGet.js +7 -0
  26. package/dist/babel_helpers/classPrivateMethodSet/classPrivateMethodSet.js +3 -0
  27. package/dist/babel_helpers/classStaticPrivateFieldSpecGet/classStaticPrivateFieldSpecGet.js +8 -0
  28. package/dist/babel_helpers/classStaticPrivateFieldSpecSet/classStaticPrivateFieldSpecSet.js +9 -0
  29. package/dist/babel_helpers/classStaticPrivateMethodGet/classStaticPrivateMethodGet.js +5 -0
  30. package/dist/babel_helpers/classStaticPrivateMethodSet/classStaticPrivateMethodSet.js +3 -0
  31. package/dist/babel_helpers/construct/construct.js +15 -0
  32. package/dist/babel_helpers/createClass/createClass.js +18 -0
  33. package/dist/babel_helpers/createForOfIteratorHelper/createForOfIteratorHelper.js +63 -0
  34. package/dist/babel_helpers/createForOfIteratorHelperLoose/createForOfIteratorHelperLoose.js +22 -0
  35. package/dist/babel_helpers/createRawReactElement/createRawReactElement.js +50 -0
  36. package/dist/babel_helpers/createSuper/createSuper.js +22 -0
  37. package/dist/babel_helpers/decorate/decorate.js +622 -0
  38. package/dist/babel_helpers/defaults/defaults.js +14 -0
  39. package/dist/babel_helpers/defineEnumerableProperties/defineEnumerableProperties.js +26 -0
  40. package/dist/babel_helpers/defineProperty/defineProperty.js +19 -0
  41. package/dist/babel_helpers/extends/extends.js +16 -0
  42. package/dist/babel_helpers/get/get.js +21 -0
  43. package/dist/babel_helpers/getPrototypeOf/getPrototypeOf.js +2 -0
  44. package/dist/babel_helpers/inherits/inherits.js +21 -0
  45. package/dist/babel_helpers/inheritsLoose/inheritsLoose.js +6 -0
  46. package/dist/babel_helpers/initializerDefineProperty/initializerDefineProperty.js +10 -0
  47. package/dist/babel_helpers/initializerWarningHelper/initializerWarningHelper.js +3 -0
  48. package/dist/babel_helpers/instanceof/instanceof.js +7 -0
  49. package/dist/babel_helpers/interopRequireDefault/interopRequireDefault.js +5 -0
  50. package/dist/babel_helpers/interopRequireWildcard/interopRequireWildcard.js +49 -0
  51. package/dist/babel_helpers/isNativeFunction/isNativeFunction.js +4 -0
  52. package/dist/babel_helpers/isNativeReflectConstruct/isNativeReflectConstruct.js +21 -0
  53. package/dist/babel_helpers/iterableToArray/iterableToArray.js +3 -0
  54. package/dist/babel_helpers/iterableToArrayLimit/iterableToArrayLimit.js +38 -0
  55. package/dist/babel_helpers/iterableToArrayLimitLoose/iterableToArrayLimitLoose.js +13 -0
  56. package/dist/babel_helpers/jsx/jsx.js +49 -0
  57. package/dist/babel_helpers/maybeArrayLike/maybeArrayLike.js +10 -0
  58. package/dist/babel_helpers/newArrowCheck/newArrowCheck.js +5 -0
  59. package/dist/babel_helpers/nonIterableRest/nonIterableRest.js +3 -0
  60. package/dist/babel_helpers/nonIterableSpread/nonIterableSpread.js +3 -0
  61. package/dist/babel_helpers/objectDestructuringEmpty/objectDestructuringEmpty.js +3 -0
  62. package/dist/babel_helpers/objectSpread/objectSpread.js +22 -0
  63. package/dist/babel_helpers/objectSpread2/objectSpread2.js +41 -0
  64. package/dist/babel_helpers/objectWithoutProperties/objectWithoutProperties.js +20 -0
  65. package/dist/babel_helpers/objectWithoutPropertiesLoose/objectWithoutPropertiesLoose.js +15 -0
  66. package/dist/babel_helpers/possibleConstructorReturn/possibleConstructorReturn.js +10 -0
  67. package/dist/babel_helpers/readOnlyError/readOnlyError.js +4 -0
  68. package/dist/babel_helpers/readme.md +8 -0
  69. package/dist/babel_helpers/set/set.js +51 -0
  70. package/dist/babel_helpers/setPrototypeOf/setPrototypeOf.js +5 -0
  71. package/dist/babel_helpers/skipFirstGeneratorNext/skipFirstGeneratorNext.js +8 -0
  72. package/dist/babel_helpers/slicedToArray/slicedToArray.js +5 -0
  73. package/dist/babel_helpers/slicedToArrayLoose/slicedToArrayLoose.js +7 -0
  74. package/dist/babel_helpers/superPropBase/superPropBase.js +10 -0
  75. package/dist/babel_helpers/taggedTemplateLiteral/taggedTemplateLiteral.js +11 -0
  76. package/dist/babel_helpers/taggedTemplateLiteralLoose/taggedTemplateLiteralLoose.js +8 -0
  77. package/dist/babel_helpers/tdz/tdz.js +4 -0
  78. package/dist/babel_helpers/temporalRef/temporalRef.js +5 -0
  79. package/dist/babel_helpers/temporalUndefined/temporalUndefined.js +3 -0
  80. package/dist/babel_helpers/toArray/toArray.js +5 -0
  81. package/dist/babel_helpers/toConsumableArray/toConsumableArray.js +5 -0
  82. package/dist/babel_helpers/toPrimitive/toPrimitive.js +14 -0
  83. package/dist/babel_helpers/toPropertyKey/toPropertyKey.js +5 -0
  84. package/dist/babel_helpers/typeof/typeof.js +7 -0
  85. package/dist/babel_helpers/unsupportedIterableToArray/unsupportedIterableToArray.js +10 -0
  86. package/dist/babel_helpers/wrapAsyncGenerator/wrapAsyncGenerator.js +7 -0
  87. package/dist/babel_helpers/wrapNativeSuper/wrapNativeSuper.js +35 -0
  88. package/dist/babel_helpers/wrapRegExp/wrapRegExp.js +67 -0
  89. package/dist/babel_helpers/writeOnlyError/writeOnlyError.js +4 -0
  90. package/dist/html/explorer.html +557 -0
  91. package/dist/js/controllable_file.mjs +227 -0
  92. package/dist/js/event_source_client.js +324 -0
  93. package/dist/js/global_this.js +32 -0
  94. package/dist/js/html_supervisor_installer.js +522 -0
  95. package/dist/js/html_supervisor_setup.js +82 -0
  96. package/dist/js/import_meta_hot.js +84 -0
  97. package/dist/js/inline_content.js +8 -0
  98. package/dist/js/new_stylesheet.js +409 -0
  99. package/dist/js/regenerator_runtime.js +721 -0
  100. package/dist/js/s.js +429 -0
  101. package/dist/main.js +13418 -0
  102. package/dist/other/jsenv.png +0 -0
  103. package/dist/s.js +626 -0
  104. package/dist/s.js.map +204 -0
  105. package/package.json +55 -48
  106. package/readme.md +6 -14
  107. package/src/build/build.js +1074 -563
  108. package/src/build/build_urls_generator.js +65 -24
  109. package/src/build/graph_utils.js +31 -0
  110. package/src/build/{inject_version_mappings.js → inject_global_version_mappings.js} +49 -18
  111. package/src/build/inject_service_worker_urls.js +79 -0
  112. package/src/build/resync_ressource_hints.js +115 -0
  113. package/src/build/start_build_server.js +210 -0
  114. package/src/dev/plugins/explorer/client/explorer.html +1 -1
  115. package/src/dev/plugins/explorer/jsenv_plugin_explorer.js +9 -13
  116. package/src/dev/plugins/toolbar/jsenv_plugin_toolbar.js +3 -1
  117. package/src/dev/start_dev_server.js +165 -38
  118. package/src/execute/execute.js +35 -8
  119. package/src/execute/run.js +21 -57
  120. package/src/execute/runtimes/browsers/from_playwright.js +220 -150
  121. package/src/execute/runtimes/node/child_exec_options.js +1 -1
  122. package/src/execute/runtimes/node/controllable_file.mjs +26 -10
  123. package/src/execute/runtimes/node/kill_process_tree.js +2 -4
  124. package/src/execute/runtimes/node/node_execution_performance.js +67 -0
  125. package/src/execute/runtimes/node/node_process.js +288 -39
  126. package/src/main.js +27 -0
  127. package/src/omega/{runtime_support/features_compatibility.js → compat/features_compats.js} +30 -7
  128. package/src/omega/{runtime_support/runtime_support.js → compat/runtime_compat.js} +14 -16
  129. package/src/omega/errors.js +63 -67
  130. package/src/omega/fetched_content_compliance.js +24 -0
  131. package/src/omega/file_url_converter.js +9 -51
  132. package/src/omega/kitchen.js +605 -467
  133. package/src/omega/omega_server.js +2 -3
  134. package/src/omega/server/file_service.js +88 -41
  135. package/src/omega/server/user_agent.js +5 -6
  136. package/src/omega/url_graph/url_graph_load.js +31 -23
  137. package/src/omega/url_graph/url_graph_report.js +94 -51
  138. package/src/omega/url_graph/url_info_transformations.js +37 -17
  139. package/src/omega/url_graph.js +88 -19
  140. package/src/omega/url_specifier_encoding.js +59 -0
  141. package/src/omega/web_workers.js +42 -0
  142. package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/autoreload_preference.js +0 -0
  143. package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/event_source_client.js +19 -12
  144. package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/reload.js +0 -0
  145. package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/url_helpers.js +0 -0
  146. package/src/plugins/autoreload/dev_sse/jsenv_plugin_dev_sse_client.js +41 -0
  147. package/src/plugins/autoreload/dev_sse/jsenv_plugin_dev_sse_server.js +204 -0
  148. package/src/plugins/autoreload/jsenv_plugin_autoreload.js +25 -0
  149. package/src/plugins/autoreload/jsenv_plugin_hmr.js +35 -0
  150. package/src/plugins/bundling/css/bundle_css.js +140 -0
  151. package/src/plugins/bundling/js_classic_workers/bundle_js_classic_workers.js +13 -0
  152. package/src/plugins/bundling/js_module/bundle_js_module.js +343 -0
  153. package/src/plugins/bundling/jsenv_plugin_bundling.js +54 -0
  154. package/src/plugins/cache_control/jsenv_plugin_cache_control.js +34 -0
  155. package/src/{omega/core_plugins → plugins}/commonjs_globals/jsenv_plugin_commonjs_globals.js +54 -41
  156. package/src/plugins/file_urls/jsenv_plugin_file_urls.js +183 -0
  157. package/src/{omega/core_plugins → plugins}/html_supervisor/client/error_in_document.js +0 -0
  158. package/src/{omega/core_plugins → plugins}/html_supervisor/client/error_in_notification.js +0 -0
  159. package/src/plugins/html_supervisor/client/html_supervisor_installer.js +254 -0
  160. package/src/plugins/html_supervisor/client/html_supervisor_setup.js +82 -0
  161. package/src/{omega/core_plugins → plugins}/html_supervisor/client/perf_browser.js +0 -0
  162. package/src/{omega/core_plugins → plugins}/html_supervisor/client/uneval_exception.js +0 -0
  163. package/src/{omega/core_plugins → plugins}/html_supervisor/jsenv_plugin_html_supervisor.js +73 -55
  164. package/src/plugins/http_urls/jsenv_plugin_http_urls.js +12 -0
  165. package/src/{dev/plugins/autoreload → plugins/import_meta_hot}/babel_plugin_metadata_import_meta_hot.js +4 -5
  166. package/src/{dev/plugins/autoreload → plugins/import_meta_hot}/client/import_meta_hot.js +3 -1
  167. package/src/{dev/plugins/autoreload → plugins/import_meta_hot}/html_hot_dependencies.js +7 -4
  168. package/src/plugins/import_meta_hot/jsenv_plugin_import_meta_hot.js +100 -0
  169. package/src/{omega/core_plugins → plugins}/import_meta_scenarios/jsenv_plugin_import_meta_scenarios.js +33 -8
  170. package/src/plugins/import_meta_url/client/import_meta_url_browser.js +52 -0
  171. package/src/plugins/import_meta_url/client/import_meta_url_commonjs.mjs +9 -0
  172. package/src/{omega/core_plugins → plugins}/importmap/jsenv_plugin_importmap.js +40 -36
  173. package/src/plugins/inject_globals/inject_globals.js +57 -0
  174. package/src/plugins/inject_globals/jsenv_plugin_inject_globals.js +24 -0
  175. package/src/{omega/core_plugins → plugins}/inline/client/inline_content.js +0 -0
  176. package/src/{omega/core_plugins → plugins}/inline/jsenv_plugin_data_urls.js +22 -21
  177. package/src/plugins/inline/jsenv_plugin_html_inline_content.js +161 -0
  178. package/src/plugins/inline/jsenv_plugin_inline.js +36 -0
  179. package/src/{omega/core_plugins → plugins}/inline/jsenv_plugin_inline_query_param.js +8 -11
  180. package/src/plugins/inline/jsenv_plugin_js_inline_content.js +294 -0
  181. package/src/plugins/leading_slash/jsenv_plugin_leading_slash.js +13 -0
  182. package/src/plugins/minification/css/minify_css.js +9 -0
  183. package/src/plugins/minification/html/minify_html.js +13 -0
  184. package/src/{build/plugins/minify_js/jsenv_plugin_minify_js.js → plugins/minification/js/minify_js.js} +6 -22
  185. package/src/plugins/minification/jsenv_plugin_minification.js +78 -0
  186. package/src/plugins/minification/json/minify_json.js +8 -0
  187. package/src/plugins/node_esm_resolution/jsenv_plugin_node_esm_resolution.js +162 -0
  188. package/src/plugins/node_runtime/jsenv_plugin_node_runtime.js +12 -0
  189. package/src/{omega → plugins}/plugin_controller.js +57 -12
  190. package/src/plugins/plugins.js +89 -0
  191. package/src/plugins/transpilation/as_js_classic/client/s.js +429 -0
  192. package/src/plugins/transpilation/as_js_classic/helpers/babel_plugin_transform_import_meta_url.js +47 -0
  193. package/src/plugins/transpilation/as_js_classic/helpers/systemjs_old.js +43 -0
  194. package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic.js +211 -0
  195. package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic_html.js +304 -0
  196. package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic_workers.js +55 -0
  197. package/src/{omega/core_plugins → plugins/transpilation}/babel/global_this/babel_plugin_global_this_as_jsenv_import.js +0 -0
  198. package/src/{omega/core_plugins → plugins/transpilation}/babel/global_this/client/global_this.js +0 -0
  199. package/src/{omega/core_plugins → plugins/transpilation}/babel/helpers/babel_plugin_babel_helpers_as_jsenv_imports.js +0 -0
  200. package/src/{omega/core_plugins → plugins/transpilation}/babel/helpers/babel_plugin_structure.js +14 -17
  201. package/src/{omega/core_plugins → plugins/transpilation}/babel/helpers/babel_plugins_compatibility.js +0 -0
  202. package/src/{omega/core_plugins → plugins/transpilation}/babel/jsenv_plugin_babel.js +39 -32
  203. package/src/{omega/core_plugins → plugins/transpilation}/babel/new_stylesheet/babel_plugin_new_stylesheet_as_jsenv_import.js +30 -6
  204. package/src/{omega/core_plugins → plugins/transpilation}/babel/new_stylesheet/client/new_stylesheet.js +0 -0
  205. package/src/{omega/core_plugins → plugins/transpilation}/babel/regenerator_runtime/babel_plugin_regenerator_runtime_as_jsenv_import.js +0 -0
  206. package/src/{omega/core_plugins → plugins/transpilation}/babel/regenerator_runtime/client/regenerator_runtime.js +0 -0
  207. package/src/plugins/transpilation/babel/require_babel_plugin.js +8 -0
  208. package/src/plugins/transpilation/css_parcel/jsenv_plugin_css_parcel.js +18 -0
  209. package/src/plugins/transpilation/import_assertions/jsenv_plugin_import_assertions.js +184 -0
  210. package/src/plugins/transpilation/jsenv_plugin_top_level_await.js +79 -0
  211. package/src/plugins/transpilation/jsenv_plugin_transpilation.js +46 -0
  212. package/src/plugins/url_analysis/css/css_urls.js +49 -0
  213. package/src/plugins/url_analysis/html/html_urls.js +272 -0
  214. package/src/plugins/url_analysis/js/js_urls.js +68 -0
  215. package/src/plugins/url_analysis/jsenv_plugin_url_analysis.js +103 -0
  216. package/src/plugins/url_analysis/webmanifest/webmanifest_urls.js +20 -0
  217. package/src/{omega/core_plugins → plugins}/url_resolution/jsenv_plugin_url_resolution.js +9 -5
  218. package/src/plugins/url_version/jsenv_plugin_url_version.js +28 -0
  219. package/src/require_from_jsenv.js +3 -0
  220. package/src/test/execute_plan.js +85 -44
  221. package/src/test/execute_test_plan.js +37 -25
  222. package/src/test/execution_steps.js +2 -5
  223. package/src/test/logs_file_execution.js +56 -49
  224. package/main.js +0 -19
  225. package/src/build/plugins/bundle_js_module/jsenv_plugin_bundle_js_module.js +0 -227
  226. package/src/build/plugins/minify_html/jsenv_plugin_minify_html.js +0 -30
  227. package/src/dev/plugins/autoreload/client/event_source_connection.js +0 -195
  228. package/src/dev/plugins/autoreload/jsenv_plugin_autoreload.js +0 -374
  229. package/src/dev/plugins/autoreload/sse_service.js +0 -149
  230. package/src/execute/runtimes/node/controlled_process.js +0 -316
  231. package/src/omega/core_plugins/babel/new_stylesheet/client/.eslintrc.cjs +0 -24
  232. package/src/omega/core_plugins/file_urls/jsenv_plugin_file_urls.js +0 -67
  233. package/src/omega/core_plugins/filesystem_magic/jsenv_plugin_filesystem_magic.js +0 -58
  234. package/src/omega/core_plugins/html_supervisor/client/html_supervisor_installer.js +0 -168
  235. package/src/omega/core_plugins/html_supervisor/client/html_supervisor_setup.js +0 -77
  236. package/src/omega/core_plugins/import_assertions/helpers/babel_plugin_metadata_import_assertions.js +0 -98
  237. package/src/omega/core_plugins/import_assertions/helpers/json_module.js +0 -12
  238. package/src/omega/core_plugins/import_assertions/helpers/text_module.js +0 -6
  239. package/src/omega/core_plugins/import_assertions/jsenv_plugin_import_assertions.js +0 -211
  240. package/src/omega/core_plugins/inline/jsenv_plugin_inline.js +0 -13
  241. package/src/omega/core_plugins/inline/jsenv_plugin_js_and_css_inside_html.js +0 -142
  242. package/src/omega/core_plugins/inline/jsenv_plugin_new_inline_content.js +0 -207
  243. package/src/omega/core_plugins/leading_slash/jsenv_plugin_leading_slash.js +0 -12
  244. package/src/omega/core_plugins/node_esm_resolution/jsenv_plugin_node_esm_resolution.js +0 -77
  245. package/src/omega/core_plugins/url_version/jsenv_plugin_url_version.js +0 -50
  246. package/src/omega/core_plugins.js +0 -39
  247. package/src/omega/runtime_support/default_runtime_support.js +0 -13
  248. package/src/omega/url_graph/url_graph_sort.js +0 -29
  249. package/src/omega/url_mentions/css_url_mentions.js +0 -63
  250. package/src/omega/url_mentions/html_url_mentions.js +0 -185
  251. package/src/omega/url_mentions/js_module_url_mentions.js +0 -91
  252. package/src/omega/url_mentions/parse_url_mentions.js +0 -37
  253. package/src/omega/url_mentions/worker_classic_url_mentions.js +0 -37
@@ -1,207 +0,0 @@
1
- /*
2
- * Needs to be updated so that it sill works in the following cases:
3
- * - templates literals transformed to regular stuff by babel
4
- * - tagged name renamed by rollup
5
- * - the template named is minified by terser
6
- * In the cases above I must remain capable to recoginize the template literal
7
- * to be able to update the urls inside (and even version the urls)
8
- * because url versioning happens after minification it can be challenging
9
- *
10
- * TODO: use "keep_classnames" https://github.com/terser/terser#compress-options
11
- * so that new InlineContent can be recognized after minification
12
- */
13
-
14
- import { createMagicSource } from "@jsenv/utils/sourcemap/magic_source.js"
15
- import { JS_QUOTES } from "@jsenv/utils/string/js_quotes.js"
16
- import { applyBabelPlugins } from "@jsenv/utils/js_ast/apply_babel_plugins.js"
17
- import { generateInlineContentUrl } from "@jsenv/utils/urls/inline_content_url_generator.js"
18
-
19
- export const jsenvPluginNewInlineContent = ({ allowEscapeForVersioning }) => {
20
- return {
21
- name: "jsenv:new_inline_content",
22
- appliesDuring: "*",
23
- transform: {
24
- js_module: async (
25
- { url, generatedUrl, content, originalContent },
26
- { referenceUtils, cook, isSupportedOnRuntime },
27
- ) => {
28
- const { metadata } = await applyBabelPlugins({
29
- babelPlugins: [babelPluginMetadataInlineContentCalls],
30
- url,
31
- generatedUrl,
32
- content,
33
- })
34
- const { inlineContentCalls } = metadata
35
- if (inlineContentCalls.length === 0) {
36
- return null
37
- }
38
- const magicSource = createMagicSource(content)
39
- await inlineContentCalls.reduce(async (previous, inlineContentCall) => {
40
- await previous
41
- const inlineUrl = generateInlineContentUrl({
42
- url,
43
- extension: {
44
- "application/json": ".json",
45
- "text/css": ".css",
46
- "text/plain": ".txt",
47
- "application/octet-stream": "",
48
- }[inlineContentCall.contentType],
49
- line: inlineContentCall.line,
50
- column: inlineContentCall.column,
51
- lineEnd: inlineContentCall.lineEnd,
52
- columnEnd: inlineContentCall.columnEnd,
53
- })
54
- let { quote } = inlineContentCall
55
- if (quote === "`" && !isSupportedOnRuntime("template_literals")) {
56
- // if quote is "`" and template literals are not supported
57
- // we'll use a regular string (single or double quote)
58
- // when rendering the string
59
- quote = JS_QUOTES.pickBest(inlineContentCall.content)
60
- }
61
- const [inlineReference, inlineUrlInfo] = referenceUtils.foundInline({
62
- type: "js_inline_content",
63
- isOriginal: content === originalContent,
64
- line: inlineContentCall.line,
65
- column: inlineContentCall.column,
66
- specifier: inlineUrl,
67
- contentType: inlineContentCall.contentType,
68
- content: inlineContentCall.content,
69
- })
70
- inlineUrlInfo.jsQuote = quote
71
- inlineReference.escape = (value) =>
72
- JS_QUOTES.escapeSpecialChars(value.slice(1, -1), { quote })
73
- await cook({
74
- reference: inlineReference,
75
- urlInfo: inlineUrlInfo,
76
- })
77
- magicSource.replace({
78
- start: inlineContentCall.start,
79
- end: inlineContentCall.end,
80
- replacement: JS_QUOTES.escapeSpecialChars(inlineUrlInfo.content, {
81
- quote,
82
- allowEscapeForVersioning,
83
- }),
84
- })
85
- }, Promise.resolve())
86
- return magicSource.toContentAndSourcemap()
87
- },
88
- },
89
- }
90
- }
91
-
92
- const babelPluginMetadataInlineContentCalls = () => {
93
- return {
94
- name: "metadata-inline-content-calls",
95
- visitor: {
96
- Program: (programPath, state) => {
97
- const inlineContentCalls = []
98
- programPath.traverse({
99
- NewExpression: (path) => {
100
- const newInlineContentCall = parseAsNewInlineContentCall(path)
101
- if (newInlineContentCall) {
102
- inlineContentCalls.push(newInlineContentCall)
103
- }
104
- },
105
- })
106
- state.file.metadata.inlineContentCalls = inlineContentCalls
107
- },
108
- },
109
- }
110
- }
111
-
112
- const parseAsNewInlineContentCall = (path) => {
113
- const node = path.node
114
- if (node.callee.type === "Identifier") {
115
- // terser rename import to use a shorter name
116
- const name = getOriginalName(path, node.callee.name)
117
- if (name !== "InlineContent") {
118
- return null
119
- }
120
- } else if (node.callee.id) {
121
- // terser might combine new InlineContent('') declaration and usage
122
- if (node.callee.id.type !== "Identifier") {
123
- return null
124
- }
125
- const name = getOriginalName(path, node.callee.id.name)
126
- if (name !== "InlineContent") {
127
- return null
128
- }
129
- }
130
- if (node.arguments.length !== 2) {
131
- return null
132
- }
133
- const [firstArg, secondArg] = node.arguments
134
- if (secondArg.type !== "ObjectExpression") {
135
- return null
136
- }
137
- const typePropertyNode = secondArg.properties.find((property) => {
138
- return (
139
- property.key.type === "Identifier" &&
140
- property.key.name === "type" &&
141
- property.type === "ObjectProperty" &&
142
- property.value.type === "StringLiteral"
143
- )
144
- })
145
- if (!typePropertyNode) {
146
- return null
147
- }
148
- const type = typePropertyNode.value.value
149
- if (firstArg.type === "StringLiteral") {
150
- const position = getNodePosition(firstArg)
151
- return {
152
- nodeType: "StringLiteral",
153
- quote: firstArg.extra.raw[0],
154
- contentType: type,
155
- content: firstArg.value,
156
- ...position,
157
- }
158
- }
159
- if (firstArg.type === "TemplateLiteral") {
160
- const quasis = firstArg.quasis
161
- if (quasis.length !== 1) {
162
- return null
163
- }
164
- const templateElementNode = quasis[0]
165
- const position = getNodePosition(firstArg)
166
- return {
167
- nodeType: "TemplateLiteral",
168
- quote: "`",
169
- contentType: type,
170
- content: templateElementNode.value.cooked,
171
- ...position,
172
- }
173
- }
174
- return null
175
- }
176
-
177
- const getNodePosition = (node) => {
178
- return {
179
- start: node.start,
180
- end: node.end,
181
- line: node.loc.start.line,
182
- column: node.loc.start.column,
183
- lineEnd: node.loc.end.line,
184
- columnEnd: node.loc.end.column,
185
- }
186
- }
187
-
188
- const getOriginalName = (path, name) => {
189
- const binding = path.scope.getBinding(name)
190
- if (!binding) {
191
- return name
192
- }
193
- if (binding.path.type === "ImportSpecifier") {
194
- const importedName = binding.path.node.imported.name
195
- if (name === importedName) {
196
- return name
197
- }
198
- return getOriginalName(path, importedName)
199
- }
200
- if (binding.path.type === "VariableDeclarator") {
201
- if (binding.path.node.init.type === "Identifier") {
202
- const previousName = binding.path.node.init.name
203
- return getOriginalName(path, previousName)
204
- }
205
- }
206
- return name
207
- }
@@ -1,12 +0,0 @@
1
- export const jsenvPluginLeadingSlash = () => {
2
- return {
3
- name: "jsenv:leading_slash",
4
- appliesDuring: "*",
5
- resolve: ({ specifier }, { rootDirectoryUrl }) => {
6
- if (specifier[0] !== "/") {
7
- return null
8
- }
9
- return new URL(specifier.slice(1), rootDirectoryUrl).href
10
- },
11
- }
12
- }
@@ -1,77 +0,0 @@
1
- /*
2
- * - should I restore eventual search params lost during node esm resolution
3
- * - what about symlinks?
4
- * It feels like I should apply symlink (when we don't want to preserve them)
5
- * once a file:/// url is found, regardless
6
- * if that comes from node resolution or anything else (not even magic resolution)
7
- * it should likely be an other plugin happening after the others
8
- */
9
-
10
- import {
11
- applyNodeEsmResolution,
12
- lookupPackageScope,
13
- readPackageJson,
14
- } from "@jsenv/node-esm-resolution"
15
-
16
- export const jsenvPluginNodeEsmResolution = ({
17
- // https://nodejs.org/api/esm.html#resolver-algorithm-specification
18
- packageConditions = ["browser", "import"],
19
- } = {}) => {
20
- const nodeEsmResolution = {
21
- name: "jsenv:node_esm_resolve",
22
- appliesDuring: "*",
23
- resolve: {
24
- js_import_export: ({ parentUrl, specifier }) => {
25
- const { url } = applyNodeEsmResolution({
26
- conditions: packageConditions,
27
- parentUrl,
28
- specifier,
29
- })
30
- return url
31
- },
32
- },
33
- load: ({ url }) => {
34
- if (url.startsWith("file:///@ignore/")) {
35
- return {
36
- content: "export default {}",
37
- }
38
- }
39
- return null
40
- },
41
- }
42
-
43
- const packageVersionInUrl = {
44
- name: "jsenv:package_url_version",
45
- appliesDuring: {
46
- dev: true,
47
- test: true,
48
- },
49
- transformReferencedUrl: ({ url }, { rootDirectoryUrl }) => {
50
- if (!url.startsWith("file:")) {
51
- return null
52
- }
53
- // without this check a file inside a project without package.json
54
- // could be considered as a node module if there is a ancestor package.json
55
- // but we want to version only node modules
56
- if (!url.includes("/node_modules/")) {
57
- return null
58
- }
59
- const urlObject = new URL(url)
60
- if (urlObject.searchParams.has("v")) {
61
- return null
62
- }
63
- const packageUrl = lookupPackageScope(url)
64
- if (!packageUrl) {
65
- return null
66
- }
67
- if (packageUrl === rootDirectoryUrl) {
68
- return null
69
- }
70
- const packageVersion = readPackageJson(packageUrl).version
71
- urlObject.searchParams.set("v", packageVersion)
72
- return urlObject.href
73
- },
74
- }
75
-
76
- return [nodeEsmResolution, packageVersionInUrl]
77
- }
@@ -1,50 +0,0 @@
1
- export const jsenvPluginUrlVersion = ({
2
- longTermCache = false, // will become true once things get more stable
3
- } = {}) => {
4
- return {
5
- name: "jsenv:url_version",
6
- appliesDuring: "*", // maybe only during dev?
7
- normalize: ({ url }) => {
8
- // "v" search param goal is to enable long-term cache
9
- // for server response headers
10
- // it is also used by hmr to bypass browser cache
11
- // this goal is achieved when we reach this part of the code
12
- // We get rid of this params so that urlGraph and other parts of the code
13
- // recognize the url (it is not considered as a different url)
14
- const urlObject = new URL(url)
15
- urlObject.searchParams.delete("v")
16
- return urlObject.href
17
- },
18
- transformReferencedUrl: ({ url, data }) => {
19
- if (!data.version) {
20
- return null
21
- }
22
- const urlObject = new URL(url)
23
- if (urlObject.searchParams.has("v")) {
24
- return null
25
- }
26
- urlObject.searchParams.set("v", data.version)
27
- return urlObject.href
28
- },
29
- augmentResponse: ({ url }) => {
30
- if (!longTermCache) {
31
- return null
32
- }
33
- const urlObject = new URL(url)
34
- if (!urlObject.searchParams.has("v")) {
35
- return null
36
- }
37
- if (urlObject.searchParams.has("hmr")) {
38
- return null
39
- }
40
- // When url is versioned put it in browser cache for 30 days
41
- return {
42
- headers: {
43
- "cache-control": `private,max-age=${SECONDS_IN_30_DAYS},immutable`,
44
- },
45
- }
46
- },
47
- }
48
- }
49
-
50
- const SECONDS_IN_30_DAYS = 60 * 60 * 24 * 30
@@ -1,39 +0,0 @@
1
- import { jsenvPluginLeadingSlash } from "./core_plugins/leading_slash/jsenv_plugin_leading_slash.js"
2
- import { jsenvPluginImportmap } from "./core_plugins/importmap/jsenv_plugin_importmap.js"
3
- import { jsenvPluginUrlResolution } from "./core_plugins/url_resolution/jsenv_plugin_url_resolution.js"
4
- import { jsenvPluginNodeEsmResolution } from "./core_plugins/node_esm_resolution/jsenv_plugin_node_esm_resolution.js"
5
- import { jsenvPluginUrlVersion } from "./core_plugins/url_version/jsenv_plugin_url_version.js"
6
- import { jsenvPluginFileUrls } from "./core_plugins/file_urls/jsenv_plugin_file_urls.js"
7
- import { jsenvPluginFileSystemMagic } from "./core_plugins/filesystem_magic/jsenv_plugin_filesystem_magic.js"
8
- import { jsenvPluginInline } from "./core_plugins/inline/jsenv_plugin_inline.js"
9
- import { jsenvPluginHtmlSupervisor } from "./core_plugins/html_supervisor/jsenv_plugin_html_supervisor.js"
10
- import { jsenvPluginCommonJsGlobals } from "./core_plugins/commonjs_globals/jsenv_plugin_commonjs_globals.js"
11
- import { jsenvPluginImportAssertions } from "./core_plugins/import_assertions/jsenv_plugin_import_assertions.js"
12
- import { jsenvPluginImportMetaScenarios } from "./core_plugins/import_meta_scenarios/jsenv_plugin_import_meta_scenarios.js"
13
- import { jsenvPluginBabel } from "./core_plugins/babel/jsenv_plugin_babel.js"
14
-
15
- export const getCorePlugins = ({
16
- htmlSupervisor,
17
- nodeEsmResolution,
18
- fileSystemMagicResolution,
19
- babel,
20
- } = {}) => {
21
- const asFewAsPossible = false // useful during dev
22
- return [
23
- ...(asFewAsPossible ? [] : [jsenvPluginImportAssertions()]),
24
- ...(asFewAsPossible ? [] : [jsenvPluginHtmlSupervisor(htmlSupervisor)]), // before inline as it turns inline <script> into <script src>
25
- ...(asFewAsPossible ? [] : [jsenvPluginInline()]), // before "file urls" to resolve and load inline urls
26
- jsenvPluginImportmap(), // before node esm to handle bare specifiers before node esm
27
- jsenvPluginFileUrls(),
28
- jsenvPluginLeadingSlash(),
29
- jsenvPluginNodeEsmResolution(nodeEsmResolution), // before url resolution to handle "js_import_export" resolution
30
- jsenvPluginUrlResolution(),
31
- ...(asFewAsPossible
32
- ? []
33
- : [jsenvPluginFileSystemMagic(fileSystemMagicResolution)]),
34
- jsenvPluginUrlVersion(),
35
- ...(asFewAsPossible ? [] : [jsenvPluginCommonJsGlobals()]),
36
- ...(asFewAsPossible ? [] : [jsenvPluginImportMetaScenarios()]),
37
- jsenvPluginBabel(babel),
38
- ]
39
- }
@@ -1,13 +0,0 @@
1
- // correspond to dynamic import
2
- export const defaultRuntimeSupport = {
3
- // android: "8",
4
- chrome: "63",
5
- edge: "79",
6
- electron: "8.1",
7
- firefox: "67",
8
- ios: "11",
9
- opera: "50",
10
- safari: "11.3",
11
- node: "13.2",
12
- samsung: "8.0",
13
- }
@@ -1,29 +0,0 @@
1
- export const sortUrlGraphByDependencies = (urlGraph) => {
2
- const { urlInfos } = urlGraph
3
-
4
- const visited = []
5
- const sorted = []
6
- const circular = []
7
- const visit = (url) => {
8
- const isSorted = sorted.includes(url)
9
- if (isSorted) {
10
- return
11
- }
12
- const isVisited = visited.includes(url)
13
- if (isVisited) {
14
- circular.push(url)
15
- sorted.push(url)
16
- } else {
17
- visited.push(url)
18
- urlInfos[url].dependencies.forEach((dependencyUrl) => {
19
- visit(dependencyUrl, url)
20
- })
21
- sorted.push(url)
22
- }
23
- }
24
- Object.keys(urlInfos).forEach((url) => {
25
- visit(url)
26
- })
27
- sorted.circular = circular
28
- return sorted
29
- }
@@ -1,63 +0,0 @@
1
- /*
2
- * https://github.com/parcel-bundler/parcel/blob/v2/packages/transformers/css/src/CSSTransformer.js
3
- */
4
-
5
- import { applyPostCss } from "@jsenv/utils/css_ast/apply_post_css.js"
6
- import { postCssPluginUrlVisitor } from "@jsenv/utils/css_ast/postcss_plugin_url_visitor.js"
7
- import { replaceCssUrls } from "@jsenv/utils/css_ast/replace_css_urls.js"
8
-
9
- export const parseCssUrlMentions = async ({ url, content }) => {
10
- const cssUrlMentions = []
11
- await applyPostCss({
12
- sourcemaps: false,
13
- plugins: [
14
- postCssPluginUrlVisitor({
15
- urlVisitor: ({ type, url, specifier, urlNode }) => {
16
- cssUrlMentions.push({
17
- type: `css_${type}`,
18
- specifier,
19
- start: urlNode.sourceIndex,
20
- end: urlNode.sourceEndIndex,
21
- url,
22
- })
23
- },
24
- }),
25
- ],
26
- url,
27
- content,
28
- })
29
- return {
30
- urlMentions: cssUrlMentions,
31
- replaceUrls: async (getReplacement) => {
32
- // we can't use magic source because urlMention.start/end do not match the url specifier
33
- // const magicSource = createMagicSource({ url, content })
34
- // cssUrlMentions.forEach((urlMention) => {
35
- // magicSource.replace({
36
- // start: urlMention.start,
37
- // end: urlMention.end,
38
- // replacement: JSON.stringify(transformUrlMention(urlMention)),
39
- // })
40
- // })
41
- // return magicSource.toContentAndSourcemap()
42
- const result = await replaceCssUrls({
43
- url,
44
- content,
45
- urlVisitor: ({ url, replace }) => {
46
- const cssUrlMention = cssUrlMentions.find(
47
- (urlMention) => urlMention.url === url,
48
- )
49
- if (cssUrlMention) {
50
- const replacement = getReplacement(cssUrlMention)
51
- if (replacement) {
52
- replace(replacement)
53
- }
54
- }
55
- },
56
- })
57
- return {
58
- content: result.content,
59
- sourcemap: result.map,
60
- }
61
- },
62
- }
63
- }
@@ -1,185 +0,0 @@
1
- import {
2
- parseHtmlString,
3
- stringifyHtmlAst,
4
- getHtmlNodeAttributeByName,
5
- htmlNodePosition,
6
- visitHtmlAst,
7
- } from "@jsenv/utils/html_ast/html_ast.js"
8
- import { htmlAttributeSrcSet } from "@jsenv/utils/html_ast/html_attribute_src_set.js"
9
-
10
- export const parseHtmlUrlMentions = ({ url, content, scenario }) => {
11
- const htmlAst = parseHtmlString(content, {
12
- storeOriginalPositions: scenario !== "build",
13
- })
14
- const htmlUrlMentions = collectHtmlUrlMentions({ url, htmlAst })
15
- return {
16
- urlMentions: htmlUrlMentions,
17
- replaceUrls: (getReplacement) => {
18
- htmlUrlMentions.forEach((urlMention) => {
19
- const replacement = getReplacement(urlMention)
20
- if (replacement) {
21
- urlMention.attribute.value = replacement
22
- }
23
- })
24
- return {
25
- content: stringifyHtmlAst(htmlAst),
26
- }
27
- },
28
- }
29
- }
30
-
31
- const collectHtmlUrlMentions = ({ url, htmlAst }) => {
32
- const htmlUrlMentions = []
33
- const addDependency = ({ type, node, attribute, specifier }) => {
34
- const injected = Boolean(getHtmlNodeAttributeByName(node, "injected-by"))
35
- const srcGeneratedFromInlineContent = Boolean(
36
- getHtmlNodeAttributeByName(node, "src-generated-from-inline-content"),
37
- )
38
- let position
39
- if (srcGeneratedFromInlineContent) {
40
- // when generated from inline content,
41
- // line, column is not "src" nor "content-src" but "original-position"
42
- position = htmlNodePosition.readNodePosition(node)
43
- } else {
44
- position = htmlNodePosition.readAttributePosition(node, attribute.name)
45
- }
46
- const { line, column, originalLine, originalColumn } = position
47
- htmlUrlMentions.push({
48
- type,
49
- htmlNode: node,
50
- attribute,
51
- injected,
52
- srcGeneratedFromInlineContent,
53
- specifier,
54
- line,
55
- column,
56
- originalLine,
57
- originalColumn,
58
- })
59
- }
60
- const onNode = (node) => {
61
- if (node.nodeName === "link") {
62
- visitAttributeAsUrlSpecifier({
63
- type: "link_href",
64
- node,
65
- attributeName: "href",
66
- })
67
- return
68
- }
69
- // if (node.nodeName === "style") {
70
- // // styles.push(node)
71
- // return
72
- // }
73
- if (node.nodeName === "script") {
74
- visitAttributeAsUrlSpecifier({
75
- type: "script_src",
76
- node,
77
- attributeName: "src",
78
- })
79
- return
80
- }
81
- if (node.nodeName === "a") {
82
- visitAttributeAsUrlSpecifier({
83
- type: "a_href",
84
- node,
85
- attributeName: "href",
86
- })
87
- }
88
- if (node.nodeName === "iframe") {
89
- visitAttributeAsUrlSpecifier({
90
- type: "iframe_src",
91
- node,
92
- attributeName: "src",
93
- })
94
- }
95
- if (node.nodeName === "img") {
96
- visitAttributeAsUrlSpecifier({
97
- type: "img_src",
98
- node,
99
- attributeName: "src",
100
- })
101
- visitSrcset({
102
- type: "img_srcset",
103
- node,
104
- })
105
- return
106
- }
107
- if (node.nodeName === "source") {
108
- visitAttributeAsUrlSpecifier({
109
- type: "source_src",
110
- node,
111
- attributeName: "src",
112
- })
113
- visitSrcset({
114
- type: "source_srcset",
115
- node,
116
- })
117
- return
118
- }
119
- // svg <image> tag
120
- if (node.nodeName === "image") {
121
- visitAttributeAsUrlSpecifier({
122
- type: "image_href",
123
- node,
124
- attributeName: "href",
125
- })
126
- return
127
- }
128
- if (node.nodeName === "use") {
129
- visitAttributeAsUrlSpecifier({
130
- type: "use_href",
131
- node,
132
- attributeName: "href",
133
- })
134
- return
135
- }
136
- }
137
- const visitAttributeAsUrlSpecifier = ({ type, node, attributeName }) => {
138
- const attribute = getHtmlNodeAttributeByName(node, attributeName)
139
- const value = attribute ? attribute.value : undefined
140
- if (value) {
141
- const inlinedBy = getHtmlNodeAttributeByName(node, "inlined-by")
142
- if (inlinedBy) {
143
- // during build the importmap is inlined
144
- // and shoud not be considered as a dependency anymore
145
- return
146
- }
147
- addDependency({
148
- type,
149
- node,
150
- attribute,
151
- specifier:
152
- attributeName === "content-src" ? new URL(value, url).href : value,
153
- })
154
- } else if (attributeName === "src") {
155
- visitAttributeAsUrlSpecifier({
156
- type,
157
- node,
158
- attributeName: "content-src",
159
- })
160
- } else if (attributeName === "href") {
161
- visitAttributeAsUrlSpecifier({
162
- type,
163
- node,
164
- attributeName: "content-href",
165
- })
166
- }
167
- }
168
- const visitSrcset = ({ type, node }) => {
169
- const srcsetAttribute = getHtmlNodeAttributeByName(node, "srcset")
170
- const srcset = srcsetAttribute ? srcsetAttribute.value : undefined
171
- if (srcset) {
172
- const srcCandidates = htmlAttributeSrcSet.parse(srcset)
173
- srcCandidates.forEach((srcCandidate) => {
174
- addDependency({
175
- type,
176
- node,
177
- attribute: srcsetAttribute,
178
- specifier: srcCandidate.specifier,
179
- })
180
- })
181
- }
182
- }
183
- visitHtmlAst(htmlAst, onNode)
184
- return htmlUrlMentions
185
- }