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

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 +527 -307
  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} +108 -78
  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 +31 -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
@@ -1,42 +1,46 @@
1
1
  import { DataUrl } from "@jsenv/utils/urls/data_url.js"
2
- import { ContentType } from "@jsenv/utils/src/content_type.js"
2
+ import { CONTENT_TYPE } from "@jsenv/utils/content_type/content_type.js"
3
3
 
4
4
  export const jsenvPluginDataUrls = () => {
5
5
  return {
6
6
  name: "jsenv:data_urls",
7
7
  appliesDuring: "*",
8
- resolve: ({ specifier }) => {
9
- if (!specifier.startsWith("data:")) {
8
+ resolveUrl: (reference) => {
9
+ if (!reference.specifier.startsWith("data:")) {
10
10
  return null
11
11
  }
12
- return specifier
12
+ return reference.specifier
13
13
  },
14
- load: ({ url, data }) => {
15
- if (!url.startsWith("data:")) {
14
+ fetchUrlContent: (urlInfo) => {
15
+ if (!urlInfo.url.startsWith("data:")) {
16
16
  return null
17
17
  }
18
- const { contentType, base64Flag, data: urlData } = DataUrl.parse(url)
19
- data.base64Flag = base64Flag
18
+ const {
19
+ contentType,
20
+ base64Flag,
21
+ data: urlData,
22
+ } = DataUrl.parse(urlInfo.url)
23
+ urlInfo.data.base64Flag = base64Flag
20
24
  return {
21
25
  contentType,
22
26
  content: contentFromUrlData({ contentType, base64Flag, urlData }),
23
27
  }
24
28
  },
25
- formatReferencedUrl: (reference, { urlGraph, cook }) => {
26
- if (!reference.url.startsWith("data:")) {
29
+ formatUrl: (reference, context) => {
30
+ if (!reference.generatedUrl.startsWith("data:")) {
27
31
  return null
28
32
  }
29
33
  if (reference.type === "sourcemap_comment") {
30
34
  return null
31
35
  }
32
36
  return (async () => {
33
- const urlInfo = urlGraph.getUrlInfo(reference.url)
34
- await cook({
37
+ const urlInfo = context.urlGraph.getUrlInfo(reference.url)
38
+ await context.cook({
35
39
  reference,
36
40
  urlInfo,
37
41
  })
38
42
  if (urlInfo.originalContent === urlInfo.content) {
39
- return reference.url
43
+ return reference.generatedUrl
40
44
  }
41
45
  const specifier = DataUrl.stringify({
42
46
  contentType: urlInfo.contentType,
@@ -52,7 +56,7 @@ export const jsenvPluginDataUrls = () => {
52
56
  }
53
57
 
54
58
  const contentFromUrlData = ({ contentType, base64Flag, urlData }) => {
55
- if (ContentType.isTextual(contentType)) {
59
+ if (CONTENT_TYPE.isTextual(contentType)) {
56
60
  if (base64Flag) {
57
61
  return base64ToString(urlData)
58
62
  }
@@ -5,19 +5,19 @@ import {
5
5
  getHtmlNodeTextNode,
6
6
  htmlNodePosition,
7
7
  parseScriptNode,
8
- setHtmlNodeText,
8
+ setHtmlNodeGeneratedText,
9
9
  getHtmlNodeAttributeByName,
10
10
  } from "@jsenv/utils/html_ast/html_ast.js"
11
- import { injectQueryParams } from "@jsenv/utils/urls/url_utils.js"
12
11
  import { generateInlineContentUrl } from "@jsenv/utils/urls/inline_content_url_generator.js"
12
+ import { CONTENT_TYPE } from "@jsenv/utils/content_type/content_type.js"
13
13
 
14
- export const jsenvPluginJsAndCssInsideHtml = () => {
14
+ export const jsenvPluginHtmlInlineContent = ({ analyzeConvertedScripts }) => {
15
15
  return {
16
- name: "jsenv:js_and_css_inside_html",
16
+ name: "jsenv:html_inline_content",
17
17
  appliesDuring: "*",
18
- transform: {
19
- html: async ({ url, content }, { cook, referenceUtils }) => {
20
- const htmlAst = parseHtmlString(content)
18
+ transformUrlContent: {
19
+ html: async (urlInfo, context) => {
20
+ const htmlAst = parseHtmlString(urlInfo.content)
21
21
  const actions = []
22
22
  const handleInlineStyle = (node) => {
23
23
  if (node.nodeName !== "style") {
@@ -33,7 +33,7 @@ export const jsenvPluginJsAndCssInsideHtml = () => {
33
33
  preferOriginal: true,
34
34
  })
35
35
  const inlineStyleUrl = generateInlineContentUrl({
36
- url,
36
+ url: urlInfo.url,
37
37
  extension: ".css",
38
38
  line,
39
39
  column,
@@ -41,23 +41,27 @@ export const jsenvPluginJsAndCssInsideHtml = () => {
41
41
  columnEnd,
42
42
  })
43
43
  const [inlineStyleReference, inlineStyleUrlInfo] =
44
- referenceUtils.foundInline({
44
+ context.referenceUtils.foundInline({
45
45
  type: "link_href",
46
+ expectedType: "css",
46
47
  // we remove 1 to the line because imagine the following html:
47
48
  // <style>body { color: red; }</style>
48
49
  // -> content starts same line as <style>
49
50
  line: line - 1,
50
51
  column,
51
- isOriginal,
52
+ isOriginalPosition: isOriginal,
52
53
  specifier: inlineStyleUrl,
53
54
  contentType: "text/css",
54
55
  content: textNode.value,
55
56
  })
56
- await cook({
57
+ await context.cook({
57
58
  reference: inlineStyleReference,
58
59
  urlInfo: inlineStyleUrlInfo,
59
60
  })
60
- setHtmlNodeText(node, inlineStyleUrlInfo.content)
61
+ setHtmlNodeGeneratedText(node, {
62
+ generatedText: inlineStyleUrlInfo.content,
63
+ generatedBy: "jsenv:html_inline_content",
64
+ })
61
65
  })
62
66
  }
63
67
  const handleInlineScript = (node) => {
@@ -68,14 +72,19 @@ export const jsenvPluginJsAndCssInsideHtml = () => {
68
72
  if (!textNode) {
69
73
  return
70
74
  }
71
- const contentSrc = getHtmlNodeAttributeByName(node, "content-src")
72
- if (contentSrc) {
73
- // it's inline but there is a corresponding "src" somewhere
74
- // - for instance the importmap was inlined by importmap plugin
75
- // in that case the content is already cooked and can be kept as it is
76
- // - any other logic that would turn a remote script into some content
77
- // but don't want to cook the content
78
- return
75
+ // If the inline script was already handled by an other plugin, ignore it
76
+ // - we want to preserve inline scripts generated by html supervisor during dev
77
+ // - we want to avoid cooking twice a script during build
78
+ const generatedBy = getHtmlNodeAttributeByName(node, "generated-by")
79
+ if (generatedBy) {
80
+ if (generatedBy.value === "jsenv:script_type_module_as_classic") {
81
+ if (!analyzeConvertedScripts) {
82
+ return
83
+ }
84
+ }
85
+ if (generatedBy.value === "jsenv:html_supervisor") {
86
+ return
87
+ }
79
88
  }
80
89
  actions.push(async () => {
81
90
  const scriptCategory = parseScriptNode(node)
@@ -83,41 +92,57 @@ export const jsenvPluginJsAndCssInsideHtml = () => {
83
92
  htmlNodePosition.readNodePosition(node, {
84
93
  preferOriginal: true,
85
94
  })
95
+ // from MDN about [type] attribute:
96
+ // "Any other value: The embedded content is treated as a data block
97
+ // which won't be processed by the browser. Developers must use a valid MIME type
98
+ // that is not a JavaScript MIME type to denote data blocks.
99
+ // The src attribute will be ignored."
100
+ // https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script#attr-type
101
+ const isJs =
102
+ scriptCategory === "classic" || scriptCategory === "module"
103
+ const isImportmap = scriptCategory === "importmap"
104
+ const contentType = isJs
105
+ ? "text/javascript"
106
+ : isImportmap
107
+ ? "application/importmap+json"
108
+ : scriptCategory
109
+
86
110
  let inlineScriptUrl = generateInlineContentUrl({
87
- url,
88
- extension: scriptCategory === "importmap" ? ".importmap" : ".js",
111
+ url: urlInfo.url,
112
+ extension: CONTENT_TYPE.asFileExtension(contentType),
89
113
  line,
90
114
  column,
91
115
  lineEnd,
92
116
  columnEnd,
93
117
  })
94
- if (scriptCategory === "classic") {
95
- inlineScriptUrl = injectQueryParams(inlineScriptUrl, {
96
- js_classic: "",
97
- })
98
- }
99
118
  const [inlineScriptReference, inlineScriptUrlInfo] =
100
- referenceUtils.foundInline({
119
+ context.referenceUtils.foundInline({
101
120
  node,
102
121
  type: "script_src",
122
+ expectedType: {
123
+ classic: "js_classic",
124
+ module: "js_module",
125
+ importmap: "importmap",
126
+ }[scriptCategory],
103
127
  // we remove 1 to the line because imagine the following html:
104
128
  // <script>console.log('ok')</script>
105
129
  // -> content starts same line as <script>
106
130
  line: line - 1,
107
131
  column,
108
- isOriginal,
132
+ isOriginalPosition: isOriginal,
109
133
  specifier: inlineScriptUrl,
110
- contentType:
111
- scriptCategory === "importmap"
112
- ? "application/importmap+json"
113
- : "application/javascript",
134
+ contentType,
114
135
  content: textNode.value,
115
136
  })
116
- await cook({
137
+
138
+ await context.cook({
117
139
  reference: inlineScriptReference,
118
140
  urlInfo: inlineScriptUrlInfo,
119
141
  })
120
- setHtmlNodeText(node, inlineScriptUrlInfo.content)
142
+ setHtmlNodeGeneratedText(node, {
143
+ generatedText: inlineScriptUrlInfo.content,
144
+ generatedBy: "jsenv:html_inline_content",
145
+ })
121
146
  })
122
147
  }
123
148
  visitHtmlAst(htmlAst, (node) => {
@@ -127,11 +152,7 @@ export const jsenvPluginJsAndCssInsideHtml = () => {
127
152
  if (actions.length === 0) {
128
153
  return null
129
154
  }
130
- await Promise.all(
131
- actions.map(async (action) => {
132
- await action()
133
- }),
134
- )
155
+ await Promise.all(actions.map((action) => action()))
135
156
  const htmlModified = stringifyHtmlAst(htmlAst)
136
157
  return {
137
158
  content: htmlModified,
@@ -0,0 +1,36 @@
1
+ import { jsenvPluginHtmlInlineContent } from "./jsenv_plugin_html_inline_content.js"
2
+ import { jsenvPluginJsInlineContent } from "./jsenv_plugin_js_inline_content.js"
3
+ import { jsenvPluginDataUrls } from "./jsenv_plugin_data_urls.js"
4
+ import { jsenvPluginInlineQueryParam } from "./jsenv_plugin_inline_query_param.js"
5
+
6
+ export const jsenvPluginInline = ({
7
+ fetchInlineUrls = true,
8
+ analyzeConvertedScripts = false,
9
+ allowEscapeForVersioning = false,
10
+ } = {}) => {
11
+ return [
12
+ ...(fetchInlineUrls ? [jsenvPluginInlineUrls()] : []),
13
+ jsenvPluginHtmlInlineContent({ analyzeConvertedScripts }),
14
+ jsenvPluginJsInlineContent({ allowEscapeForVersioning }),
15
+ jsenvPluginDataUrls(),
16
+ jsenvPluginInlineQueryParam(),
17
+ ]
18
+ }
19
+
20
+ const jsenvPluginInlineUrls = () => {
21
+ return {
22
+ name: "jsenv:inline_urls",
23
+ appliesDuring: "*",
24
+ fetchUrlContent: (urlInfo) => {
25
+ if (!urlInfo.isInline) {
26
+ return null
27
+ }
28
+ return {
29
+ contentType: urlInfo.contentType,
30
+ // we want to fetch the original content otherwise we might re-cook
31
+ // content already cooked
32
+ content: urlInfo.originalContent,
33
+ }
34
+ },
35
+ }
36
+ }
@@ -4,7 +4,7 @@ export const jsenvPluginInlineQueryParam = () => {
4
4
  return {
5
5
  name: "jsenv:inline_query_param",
6
6
  appliesDuring: "*",
7
- formatReferencedUrl: {
7
+ formatUrl: {
8
8
  // <link> and <script> can be inlined in the html
9
9
  // this should be done during dev and postbuild but not build
10
10
  // so that the bundled file gets inlined and not the entry point
@@ -15,17 +15,17 @@ export const jsenvPluginInlineQueryParam = () => {
15
15
  // but maybe we should rather use ?object_url
16
16
  // or people could do this:
17
17
  // import workerText from './worker.js?text'
18
- // const blob = new Blob(workerText, { type: 'application/javascript' })
18
+ // const blob = new Blob(workerText, { type: 'text/javascript' })
19
19
  // window.URL.createObjectURL(blob)
20
20
  // in any case the recommended way is to use an url
21
21
  // to benefit from shared worker and reuse worker between tabs
22
- "*": (reference, { urlGraph, cook }) => {
23
- if (!new URL(reference.url).searchParams.has("inline")) {
22
+ "*": (reference, context) => {
23
+ if (!reference.searchParams.has("inline")) {
24
24
  return null
25
25
  }
26
26
  return (async () => {
27
- const urlInfo = urlGraph.getUrlInfo(reference.url)
28
- await cook({
27
+ const urlInfo = context.urlGraph.getUrlInfo(reference.url)
28
+ await context.cook({
29
29
  reference,
30
30
  urlInfo,
31
31
  })
@@ -0,0 +1,263 @@
1
+ import { CONTENT_TYPE } from "@jsenv/utils/content_type/content_type.js"
2
+ import { createMagicSource } from "@jsenv/utils/sourcemap/magic_source.js"
3
+ import { JS_QUOTES } from "@jsenv/utils/string/js_quotes.js"
4
+ import { applyBabelPlugins } from "@jsenv/utils/js_ast/apply_babel_plugins.js"
5
+ import { getTypePropertyNode } from "@jsenv/utils/js_ast/js_ast.js"
6
+ import { generateInlineContentUrl } from "@jsenv/utils/urls/inline_content_url_generator.js"
7
+
8
+ export const jsenvPluginJsInlineContent = ({ allowEscapeForVersioning }) => {
9
+ const parseAndTransformInlineContentCalls = async (urlInfo, context) => {
10
+ const { metadata } = await applyBabelPlugins({
11
+ babelPlugins: [babelPluginMetadataInlineContentCalls],
12
+ urlInfo,
13
+ })
14
+ const { inlineContentCalls } = metadata
15
+ if (inlineContentCalls.length === 0) {
16
+ return null
17
+ }
18
+ const magicSource = createMagicSource(urlInfo.content)
19
+ await inlineContentCalls.reduce(async (previous, inlineContentCall) => {
20
+ await previous
21
+ const inlineUrl = generateInlineContentUrl({
22
+ url: urlInfo.url,
23
+ extension: CONTENT_TYPE.asFileExtension(inlineContentCall.contentType),
24
+ line: inlineContentCall.line,
25
+ column: inlineContentCall.column,
26
+ lineEnd: inlineContentCall.lineEnd,
27
+ columnEnd: inlineContentCall.columnEnd,
28
+ })
29
+ let { quote } = inlineContentCall
30
+ if (
31
+ quote === "`" &&
32
+ !context.isSupportedOnCurrentClients("template_literals")
33
+ ) {
34
+ // if quote is "`" and template literals are not supported
35
+ // we'll use a regular string (single or double quote)
36
+ // when rendering the string
37
+ quote = JS_QUOTES.pickBest(inlineContentCall.content)
38
+ }
39
+ const [inlineReference, inlineUrlInfo] =
40
+ context.referenceUtils.foundInline({
41
+ type: "js_inline_content",
42
+ subtype: inlineContentCall.type, // "new_blob_first_arg", "new_inline_content_first_arg", "json_parse_first_arg"
43
+ isOriginalPosition: urlInfo.content === urlInfo.originalContent,
44
+ line: inlineContentCall.line,
45
+ column: inlineContentCall.column,
46
+ specifier: inlineUrl,
47
+ contentType: inlineContentCall.contentType,
48
+ content: inlineContentCall.content,
49
+ })
50
+ inlineUrlInfo.jsQuote = quote
51
+ inlineReference.escape = (value) =>
52
+ JS_QUOTES.escapeSpecialChars(value.slice(1, -1), { quote })
53
+ await context.cook({
54
+ reference: inlineReference,
55
+ urlInfo: inlineUrlInfo,
56
+ })
57
+ magicSource.replace({
58
+ start: inlineContentCall.start,
59
+ end: inlineContentCall.end,
60
+ replacement: JS_QUOTES.escapeSpecialChars(inlineUrlInfo.content, {
61
+ quote,
62
+ allowEscapeForVersioning,
63
+ }),
64
+ })
65
+ }, Promise.resolve())
66
+ return magicSource.toContentAndSourcemap()
67
+ }
68
+
69
+ return {
70
+ name: "jsenv:js_inline_content",
71
+ appliesDuring: "*",
72
+ transformUrlContent: {
73
+ js_classic: parseAndTransformInlineContentCalls,
74
+ js_module: parseAndTransformInlineContentCalls,
75
+ },
76
+ }
77
+ }
78
+
79
+ const babelPluginMetadataInlineContentCalls = () => {
80
+ return {
81
+ name: "metadata-inline-content-calls",
82
+ visitor: {
83
+ Program: (programPath, state) => {
84
+ const inlineContentCalls = []
85
+ programPath.traverse({
86
+ NewExpression: (path) => {
87
+ const inlineContentCall = analyzeNewInlineContentCall(path)
88
+ if (inlineContentCall) {
89
+ inlineContentCalls.push(inlineContentCall)
90
+ return
91
+ }
92
+ },
93
+ CallExpression: (path) => {
94
+ const jsonParseCall = analyzeJsonParseCall(path)
95
+ if (jsonParseCall) {
96
+ inlineContentCalls.push(jsonParseCall)
97
+ return
98
+ }
99
+ },
100
+ })
101
+ state.file.metadata.inlineContentCalls = inlineContentCalls
102
+ },
103
+ },
104
+ }
105
+ }
106
+
107
+ const analyzeNewInlineContentCall = (path) => {
108
+ const identifier = parseNewIdentifier(path)
109
+ if (!identifier) {
110
+ return null
111
+ }
112
+ const node = path.node
113
+ if (node.arguments.length !== 2) {
114
+ return null
115
+ }
116
+ const [firstArg, secondArg] = node.arguments
117
+ const typePropertyNode = getTypePropertyNode(secondArg)
118
+ if (!typePropertyNode || typePropertyNode.value.type !== "StringLiteral") {
119
+ return null
120
+ }
121
+ const contentType = typePropertyNode.value.value
122
+ const type = identifier.type
123
+ let nodeHoldingInlineContent
124
+ if (type === "new_inline_content") {
125
+ nodeHoldingInlineContent = firstArg
126
+ } else if (type === "new_blob") {
127
+ if (firstArg.type !== "ArrayExpression") {
128
+ return null
129
+ }
130
+ if (firstArg.elements.length !== 1) {
131
+ return null
132
+ }
133
+ nodeHoldingInlineContent = firstArg.elements[0]
134
+ }
135
+ const inlineContentInfo = extractInlineContentInfo(nodeHoldingInlineContent)
136
+ if (!inlineContentInfo) {
137
+ return null
138
+ }
139
+ return {
140
+ type:
141
+ type === "new_inline_content"
142
+ ? "new_inline_content_first_arg"
143
+ : "new_blob_first_arg",
144
+ contentType,
145
+ ...inlineContentInfo,
146
+ ...getNodePosition(nodeHoldingInlineContent),
147
+ }
148
+ }
149
+
150
+ const extractInlineContentInfo = (node) => {
151
+ if (node.type === "StringLiteral") {
152
+ return {
153
+ nodeType: "StringLiteral",
154
+ quote: node.extra.raw[0],
155
+ content: node.value,
156
+ }
157
+ }
158
+ if (node.type === "TemplateLiteral") {
159
+ const quasis = node.quasis
160
+ if (quasis.length !== 1) {
161
+ return null
162
+ }
163
+ const templateElementNode = quasis[0]
164
+ return {
165
+ nodeType: "TemplateLiteral",
166
+ quote: "`",
167
+ content: templateElementNode.value.cooked,
168
+ }
169
+ }
170
+ return null
171
+ }
172
+
173
+ const parseNewIdentifier = (path) => {
174
+ const node = path.node
175
+ if (node.callee.type === "Identifier") {
176
+ // terser rename import to use a shorter name
177
+ const name = getOriginalName(path, node.callee.name)
178
+ if (name === "InlineContent") {
179
+ return {
180
+ type: "new_inline_content",
181
+ }
182
+ }
183
+ if (name === "Blob") {
184
+ return {
185
+ type: "new_blob",
186
+ }
187
+ }
188
+ return null
189
+ }
190
+ if (node.callee.id) {
191
+ // terser might combine new InlineContent('') declaration and usage
192
+ if (node.callee.id.type !== "Identifier") {
193
+ return null
194
+ }
195
+ const name = getOriginalName(path, node.callee.id.name)
196
+ if (name === "InlineContent") {
197
+ return {
198
+ type: "new_inline_content",
199
+ }
200
+ }
201
+ }
202
+ return null
203
+ }
204
+
205
+ const analyzeJsonParseCall = (path) => {
206
+ const node = path.node
207
+ if (!isJSONParseCall(node)) {
208
+ return null
209
+ }
210
+ const inlineContentInfo = extractInlineContentInfo(node.arguments[0])
211
+ if (!inlineContentInfo) {
212
+ return null
213
+ }
214
+ return {
215
+ type: "json_parse_first_arg",
216
+ contentType: "application/json",
217
+ ...inlineContentInfo,
218
+ ...getNodePosition(node.arguments[0]),
219
+ }
220
+ }
221
+
222
+ const isJSONParseCall = (node) => {
223
+ const callee = node.callee
224
+ return (
225
+ callee.type === "MemberExpression" &&
226
+ callee.object.type === "Identifier" &&
227
+ callee.object.name === "JSON" &&
228
+ callee.property.type === "Identifier" &&
229
+ callee.property.name === "parse"
230
+ )
231
+ }
232
+
233
+ const getNodePosition = (node) => {
234
+ return {
235
+ start: node.start,
236
+ end: node.end,
237
+ line: node.loc.start.line,
238
+ column: node.loc.start.column,
239
+ lineEnd: node.loc.end.line,
240
+ columnEnd: node.loc.end.column,
241
+ }
242
+ }
243
+
244
+ const getOriginalName = (path, name) => {
245
+ const binding = path.scope.getBinding(name)
246
+ if (!binding) {
247
+ return name
248
+ }
249
+ if (binding.path.type === "ImportSpecifier") {
250
+ const importedName = binding.path.node.imported.name
251
+ if (name === importedName) {
252
+ return name
253
+ }
254
+ return getOriginalName(path, importedName)
255
+ }
256
+ if (binding.path.type === "VariableDeclarator") {
257
+ if (binding.path.node.init.type === "Identifier") {
258
+ const previousName = binding.path.node.init.name
259
+ return getOriginalName(path, previousName)
260
+ }
261
+ }
262
+ return name
263
+ }
@@ -0,0 +1,13 @@
1
+ export const jsenvPluginLeadingSlash = () => {
2
+ return {
3
+ name: "jsenv:leading_slash",
4
+ appliesDuring: "*",
5
+ resolveUrl: (reference, context) => {
6
+ if (reference.specifier[0] !== "/") {
7
+ return null
8
+ }
9
+ return new URL(reference.specifier.slice(1), context.rootDirectoryUrl)
10
+ .href
11
+ },
12
+ }
13
+ }
@@ -0,0 +1,9 @@
1
+ import { minifyWithParcel } from "@jsenv/utils/css_ast/parcel_css.js"
2
+
3
+ export const minifyCss = ({ cssUrlInfo, context }) => {
4
+ const { code, map } = minifyWithParcel(cssUrlInfo, context)
5
+ return {
6
+ content: String(code),
7
+ sourcemap: map,
8
+ }
9
+ }
@@ -0,0 +1,15 @@
1
+ import { createRequire } from "node:module"
2
+
3
+ const require = createRequire(import.meta.url)
4
+
5
+ // https://github.com/kangax/html-minifier#options-quick-reference
6
+ export const minifyHtml = ({ htmlUrlInfo, options } = {}) => {
7
+ const { collapseWhitespace = true, removeComments = true } = options
8
+
9
+ const { minify } = require("html-minifier")
10
+ const htmlMinified = minify(htmlUrlInfo.content, {
11
+ collapseWhitespace,
12
+ removeComments,
13
+ })
14
+ return htmlMinified
15
+ }
@@ -1,28 +1,11 @@
1
1
  // https://github.com/terser-js/terser#minify-options
2
2
 
3
- export const jsenvPluginMinifyJs = () => {
4
- const applyTerser = async (urlInfo) => {
5
- return minifyJs({
6
- url: urlInfo.url,
7
- content: urlInfo.content,
8
- sourcemap: urlInfo.sourcemap,
9
- isJsModule: urlInfo.type === "js_module",
10
- })
11
- }
12
-
13
- return {
14
- name: "jsenv:minify_js",
15
- appliesDuring: {
16
- build: true,
17
- },
18
- optimize: {
19
- js_classic: applyTerser,
20
- js_module: applyTerser,
21
- },
22
- }
23
- }
3
+ export const minifyJs = async ({ jsUrlInfo, options }) => {
4
+ const url = jsUrlInfo.url
5
+ const content = jsUrlInfo.content
6
+ const sourcemap = jsUrlInfo.sourcemap
7
+ const isJsModule = jsUrlInfo.type === "js_module"
24
8
 
25
- const minifyJs = async ({ url, content, sourcemap, isJsModule }) => {
26
9
  const { minify } = await import("terser")
27
10
  const terserResult = await minify(
28
11
  {
@@ -38,6 +21,7 @@ const minifyJs = async ({ url, content, sourcemap, isJsModule }) => {
38
21
  // We need to preserve "new InlineContent()" calls to be able to recognize them
39
22
  // after minification in order to version urls inside inline content text
40
23
  keep_fnames: /InlineContent/,
24
+ ...options,
41
25
  },
42
26
  )
43
27
  return {