@jsenv/core 26.0.1 → 27.0.0-alpha.10

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 (465) hide show
  1. package/main.js +17 -24
  2. package/package.json +35 -71
  3. package/readme.md +30 -37
  4. package/src/build/build.js +867 -0
  5. package/src/build/build_urls_generator.js +73 -0
  6. package/src/build/inject_service_worker_urls.js +25 -0
  7. package/src/build/inject_version_mappings.js +63 -0
  8. package/src/build/plugins/bundle_js_module/jsenv_plugin_bundle_js_module.js +227 -0
  9. package/src/build/plugins/minify_html/jsenv_plugin_minify_html.js +30 -0
  10. package/src/build/plugins/minify_js/jsenv_plugin_minify_js.js +47 -0
  11. package/src/dev/plugins/autoreload/babel_plugin_metadata_import_meta_hot.js +98 -0
  12. package/src/dev/plugins/autoreload/client/autoreload_preference.js +11 -0
  13. package/src/dev/plugins/autoreload/client/event_source_client.js +186 -0
  14. package/src/{internal/dev_server/event_source_client → dev/plugins/autoreload/client}/event_source_connection.js +21 -25
  15. package/src/dev/plugins/autoreload/client/import_meta_hot.js +80 -0
  16. package/src/dev/plugins/autoreload/client/reload.js +101 -0
  17. package/src/dev/plugins/autoreload/client/url_helpers.js +20 -0
  18. package/src/dev/plugins/autoreload/html_hot_dependencies.js +156 -0
  19. package/src/dev/plugins/autoreload/jsenv_plugin_autoreload.js +374 -0
  20. package/src/dev/plugins/autoreload/sse_service.js +149 -0
  21. package/src/dev/plugins/explorer/client/explorer.html +607 -0
  22. package/src/{internal → dev/plugins/explorer/client}/jsenv.png +0 -0
  23. package/src/dev/plugins/explorer/jsenv_plugin_explorer.js +74 -0
  24. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/animation/toolbar_animation.js +0 -0
  25. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/eventsource/eventsource.css +2 -2
  26. package/src/dev/plugins/toolbar/client/eventsource/toolbar_eventsource.js +57 -0
  27. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/execution/execution.css +0 -0
  28. package/src/dev/plugins/toolbar/client/execution/toolbar_execution.js +88 -0
  29. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/focus/focus.css +0 -0
  30. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/focus/toolbar_focus.js +0 -0
  31. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/jsenv_logo.svg +0 -0
  32. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/notification/toolbar_notification.js +0 -0
  33. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/responsive/overflow_menu.css +0 -0
  34. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/responsive/toolbar_responsive.js +0 -0
  35. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/settings/settings.css +0 -0
  36. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/settings/toolbar_settings.js +1 -0
  37. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/theme/jsenv_theme.css +1 -15
  38. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/theme/light_theme.css +0 -17
  39. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/theme/toolbar_theme.js +0 -0
  40. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/toolbar.html +40 -199
  41. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/toolbar_injector.js +8 -28
  42. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/toolbar_main.css +0 -24
  43. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/toolbar_main.js +10 -56
  44. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/tooltip/tooltip.css +1 -1
  45. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/tooltip/tooltip.js +0 -0
  46. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/util/animation.js +0 -0
  47. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/util/dom.js +0 -0
  48. package/src/{internal/browser_utils → dev/plugins/toolbar/client/util}/fetch_using_xhr.js +0 -0
  49. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/util/fetching.js +2 -4
  50. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/util/iframe_to_parent_href.js +0 -0
  51. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/util/jsenv_logger.js +0 -0
  52. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/util/preferences.js +0 -0
  53. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/util/responsive.js +0 -0
  54. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/util/util.js +0 -0
  55. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/variant/variant.js +0 -0
  56. package/src/dev/plugins/toolbar/jsenv_plugin_toolbar.js +62 -0
  57. package/src/dev/start_dev_server.js +108 -0
  58. package/src/execute/execute.js +138 -0
  59. package/src/execute/run.js +208 -0
  60. package/src/execute/runtimes/browsers/chromium.js +8 -0
  61. package/src/execute/runtimes/browsers/firefox.js +7 -0
  62. package/src/execute/runtimes/browsers/from_playwright.js +464 -0
  63. package/src/{browser_runtimes.js → execute/runtimes/browsers/webkit.js} +4 -18
  64. package/src/{internal/node_launcher/child_process_options.js → execute/runtimes/node/child_exec_options.js} +25 -36
  65. package/src/{internal/node_launcher/node_controllable_file.mjs → execute/runtimes/node/controllable_file.mjs} +1 -18
  66. package/src/{internal/node_launcher/node_controllable_process.js → execute/runtimes/node/controlled_process.js} +128 -150
  67. package/src/execute/runtimes/node/exec_options.js +44 -0
  68. package/src/{internal/node_launcher → execute/runtimes/node}/kill_process_tree.js +3 -1
  69. package/src/execute/runtimes/node/node_process.js +92 -0
  70. package/src/execute/runtimes/node/node_worker_thread.js +28 -0
  71. package/src/omega/core_plugins/babel/global_this/babel_plugin_global_this_as_jsenv_import.js +35 -0
  72. package/{helpers/global-this/global-this.js → src/omega/core_plugins/babel/global_this/client/global_this.js} +0 -0
  73. package/src/{internal/compile_server/js → omega/core_plugins/babel/helpers}/babel_plugin_babel_helpers_as_jsenv_imports.js +15 -20
  74. package/src/omega/core_plugins/babel/helpers/babel_plugin_structure.js +176 -0
  75. package/src/{internal/features → omega/core_plugins/babel/helpers}/babel_plugins_compatibility.js +1 -24
  76. package/src/omega/core_plugins/babel/jsenv_plugin_babel.js +111 -0
  77. package/src/omega/core_plugins/babel/new_stylesheet/babel_plugin_new_stylesheet_as_jsenv_import.js +117 -0
  78. package/{helpers/babel → src/omega/core_plugins/babel/new_stylesheet/client}/.eslintrc.cjs +1 -1
  79. package/{helpers/new_stylesheet → src/omega/core_plugins/babel/new_stylesheet/client}/new_stylesheet.js +0 -0
  80. package/src/omega/core_plugins/babel/regenerator_runtime/babel_plugin_regenerator_runtime_as_jsenv_import.js +34 -0
  81. package/{helpers/regenerator-runtime/regenerator-runtime.js → src/omega/core_plugins/babel/regenerator_runtime/client/regenerator_runtime.js} +0 -0
  82. package/src/omega/core_plugins/commonjs_globals/jsenv_plugin_commonjs_globals.js +169 -0
  83. package/src/omega/core_plugins/file_urls/jsenv_plugin_file_urls.js +67 -0
  84. package/src/omega/core_plugins/filesystem_magic/jsenv_plugin_filesystem_magic.js +58 -0
  85. package/src/{internal/browser_client → omega/core_plugins/html_supervisor/client}/error_in_document.js +10 -16
  86. package/src/{internal/browser_client → omega/core_plugins/html_supervisor/client}/error_in_notification.js +0 -0
  87. package/src/omega/core_plugins/html_supervisor/client/html_supervisor_installer.js +168 -0
  88. package/src/omega/core_plugins/html_supervisor/client/html_supervisor_setup.js +77 -0
  89. package/src/{internal/browser_client → omega/core_plugins/html_supervisor/client}/perf_browser.js +0 -0
  90. package/src/{internal/runtime_client → omega/core_plugins/html_supervisor/client}/uneval_exception.js +0 -0
  91. package/src/omega/core_plugins/html_supervisor/jsenv_plugin_html_supervisor.js +233 -0
  92. package/src/omega/core_plugins/import_assertions/helpers/babel_plugin_metadata_import_assertions.js +98 -0
  93. package/src/{internal/building/import_assertions → omega/core_plugins/import_assertions/helpers}/json_module.js +3 -2
  94. package/src/omega/core_plugins/import_assertions/helpers/text_module.js +6 -0
  95. package/src/omega/core_plugins/import_assertions/jsenv_plugin_import_assertions.js +211 -0
  96. package/src/omega/core_plugins/import_meta_scenarios/jsenv_plugin_import_meta_scenarios.js +90 -0
  97. package/src/omega/core_plugins/importmap/jsenv_plugin_importmap.js +212 -0
  98. package/src/omega/core_plugins/inject_globals/jsenv_plugin_inject_globals.js +27 -0
  99. package/src/omega/core_plugins/inline/client/inline_content.js +6 -0
  100. package/src/omega/core_plugins/inline/jsenv_plugin_data_urls.js +70 -0
  101. package/src/omega/core_plugins/inline/jsenv_plugin_inline.js +13 -0
  102. package/src/omega/core_plugins/inline/jsenv_plugin_inline_query_param.js +42 -0
  103. package/src/omega/core_plugins/inline/jsenv_plugin_js_and_css_inside_html.js +142 -0
  104. package/src/omega/core_plugins/inline/jsenv_plugin_new_inline_content.js +207 -0
  105. package/src/omega/core_plugins/leading_slash/jsenv_plugin_leading_slash.js +12 -0
  106. package/src/omega/core_plugins/node_esm_resolution/jsenv_plugin_node_esm_resolution.js +77 -0
  107. package/src/omega/core_plugins/url_resolution/jsenv_plugin_url_resolution.js +28 -0
  108. package/src/omega/core_plugins/url_version/jsenv_plugin_url_version.js +50 -0
  109. package/src/omega/core_plugins.js +42 -0
  110. package/src/omega/errors.js +168 -0
  111. package/src/omega/file_url_converter.js +21 -0
  112. package/src/omega/kitchen.js +776 -0
  113. package/src/omega/omega_server.js +129 -0
  114. package/src/omega/plugin_controller.js +240 -0
  115. package/src/omega/runtime_support/default_runtime_support.js +13 -0
  116. package/src/omega/runtime_support/features_compatibility.js +130 -0
  117. package/src/omega/runtime_support/runtime_support.js +52 -0
  118. package/src/omega/server/file_service.js +155 -0
  119. package/src/omega/server/user_agent.js +22 -0
  120. package/src/omega/url_graph/url_graph_load.js +69 -0
  121. package/src/omega/url_graph/url_graph_report.js +151 -0
  122. package/src/omega/url_graph/url_graph_sort.js +29 -0
  123. package/src/omega/url_graph/url_info_transformations.js +161 -0
  124. package/src/omega/url_graph.js +133 -0
  125. package/src/omega/url_mentions/css_url_mentions.js +63 -0
  126. package/src/omega/url_mentions/html_url_mentions.js +185 -0
  127. package/src/omega/url_mentions/js_module_url_mentions.js +91 -0
  128. package/src/omega/url_mentions/parse_url_mentions.js +37 -0
  129. package/src/omega/url_mentions/worker_classic_url_mentions.js +37 -0
  130. package/src/{internal/executing → test}/execute_plan.js +156 -211
  131. package/src/{execute_test_plan.js → test/execute_test_plan.js} +36 -81
  132. package/src/{internal/executing → test}/execution_colors.js +0 -0
  133. package/src/{internal/executing → test}/execution_steps.js +2 -8
  134. package/src/{internal/executing → test}/gc.js +0 -0
  135. package/src/test/logs_file_execution.js +223 -0
  136. package/dist/browser_client/asset-manifest.json +0 -4
  137. package/dist/browser_client/browser_client_fb33eaa4.js +0 -5320
  138. package/dist/browser_client/browser_client_fb33eaa4.js.map +0 -1089
  139. package/dist/build_manifest.js +0 -12
  140. package/dist/compile_proxy/asset-manifest.json +0 -4
  141. package/dist/compile_proxy/compile_proxy.html__inline__20_651d1e7b.js.map +0 -343
  142. package/dist/compile_proxy/compile_proxy_62f952c4.html +0 -2245
  143. package/dist/event_source_client/asset-manifest.json +0 -4
  144. package/dist/event_source_client/event_source_client_69f48287.js +0 -354
  145. package/dist/event_source_client/event_source_client_69f48287.js.map +0 -128
  146. package/dist/redirector/asset-manifest.json +0 -4
  147. package/dist/redirector/redirector.html__inline__12_171e07b4.js.map +0 -349
  148. package/dist/redirector/redirector_8117ec92.html +0 -2290
  149. package/dist/toolbar/asset-manifest.json +0 -13
  150. package/dist/toolbar/assets/compilation.css_7421bd55.map +0 -12
  151. package/dist/toolbar/assets/eventsource.css_c0c71e7b.map +0 -12
  152. package/dist/toolbar/assets/execution.css_f3377c10.map +0 -12
  153. package/dist/toolbar/assets/focus.css_896f3e45.map +0 -12
  154. package/dist/toolbar/assets/light_theme.css_5bff0336.map +0 -12
  155. package/dist/toolbar/assets/overflow_menu.css_9a0fc3d8.map +0 -12
  156. package/dist/toolbar/assets/settings.css_942b5a9e.map +0 -12
  157. package/dist/toolbar/assets/toolbar_main.css_b1c67dd7.map +0 -28
  158. package/dist/toolbar/assets/tooltip.css_a94a8bdd.map +0 -12
  159. package/dist/toolbar/toolbar_b0c9100c.html +0 -4976
  160. package/dist/toolbar/toolbar_main_f54c1bb0.js.map +0 -776
  161. package/dist/toolbar_injector/asset-manifest.json +0 -5
  162. package/dist/toolbar_injector/assets/jsenv_logo_192011c2.svg +0 -95
  163. package/dist/toolbar_injector/toolbar_injector_65b501eb.js +0 -976
  164. package/dist/toolbar_injector/toolbar_injector_65b501eb.js.map +0 -294
  165. package/helpers/babel/AsyncGenerator/AsyncGenerator.js +0 -81
  166. package/helpers/babel/AwaitValue/AwaitValue.js +0 -3
  167. package/helpers/babel/applyDecoratorDescriptor/applyDecoratorDescriptor.js +0 -33
  168. package/helpers/babel/arrayLikeToArray/arrayLikeToArray.js +0 -7
  169. package/helpers/babel/arrayWithHoles/arrayWithHoles.js +0 -4
  170. package/helpers/babel/arrayWithoutHoles/arrayWithoutHoles.js +0 -6
  171. package/helpers/babel/assertThisInitialized/assertThisInitialized.js +0 -7
  172. package/helpers/babel/asyncGeneratorDelegate/asyncGeneratorDelegate.js +0 -40
  173. package/helpers/babel/asyncIterator/asyncIterator.js +0 -65
  174. package/helpers/babel/asyncToGenerator/asyncToGenerator.js +0 -34
  175. package/helpers/babel/awaitAsyncGenerator/awaitAsyncGenerator.js +0 -5
  176. package/helpers/babel/classApplyDescriptorDestructureSet/classApplyDescriptorDestructureSet.js +0 -20
  177. package/helpers/babel/classApplyDescriptorGet/classApplyDescriptorGet.js +0 -6
  178. package/helpers/babel/classApplyDescriptorSet/classApplyDescriptorSet.js +0 -13
  179. package/helpers/babel/classCallCheck/classCallCheck.js +0 -5
  180. package/helpers/babel/classCheckPrivateStaticAccess/classCheckPrivateStaticAccess.js +0 -5
  181. package/helpers/babel/classCheckPrivateStaticFieldDescriptor/classCheckPrivateStaticFieldDescriptor.js +0 -6
  182. package/helpers/babel/classExtractFieldDescriptor/classExtractFieldDescriptor.js +0 -7
  183. package/helpers/babel/classNameTDZError/classNameTDZError.js +0 -4
  184. package/helpers/babel/classPrivateFieldDestructureSet/classPrivateFieldDestructureSet.js +0 -7
  185. package/helpers/babel/classPrivateFieldGet/classPrivateFieldGet.js +0 -7
  186. package/helpers/babel/classPrivateFieldLooseBase/classPrivateFieldLooseBase.js +0 -6
  187. package/helpers/babel/classPrivateFieldLooseKey/classPrivateFieldLooseKey.js +0 -5
  188. package/helpers/babel/classPrivateFieldSet/classPrivateFieldSet.js +0 -8
  189. package/helpers/babel/classPrivateMethodGet/classPrivateMethodGet.js +0 -6
  190. package/helpers/babel/classPrivateMethodSet/classPrivateMethodSet.js +0 -3
  191. package/helpers/babel/classStaticPrivateFieldSpecGet/classStaticPrivateFieldSpecGet.js +0 -9
  192. package/helpers/babel/classStaticPrivateFieldSpecSet/classStaticPrivateFieldSpecSet.js +0 -15
  193. package/helpers/babel/classStaticPrivateMethodGet/classStaticPrivateMethodGet.js +0 -6
  194. package/helpers/babel/classStaticPrivateMethodSet/classStaticPrivateMethodSet.js +0 -3
  195. package/helpers/babel/construct/construct.js +0 -16
  196. package/helpers/babel/createClass/createClass.js +0 -15
  197. package/helpers/babel/createForOfIteratorHelper/createForOfIteratorHelper.js +0 -60
  198. package/helpers/babel/createForOfIteratorHelperLoose/createForOfIteratorHelperLoose.js +0 -23
  199. package/helpers/babel/createRawReactElement/createRawReactElement.js +0 -50
  200. package/helpers/babel/createSuper/createSuper.js +0 -22
  201. package/helpers/babel/decorate/decorate.js +0 -403
  202. package/helpers/babel/defaults/defaults.js +0 -11
  203. package/helpers/babel/defineEnumerableProperties/defineEnumerableProperties.js +0 -23
  204. package/helpers/babel/defineProperty/defineProperty.js +0 -18
  205. package/helpers/babel/extends/extends.js +0 -14
  206. package/helpers/babel/get/get.js +0 -19
  207. package/helpers/babel/getPrototypeOf/getPrototypeOf.js +0 -4
  208. package/helpers/babel/inherits/inherits.js +0 -19
  209. package/helpers/babel/inheritsLoose/inheritsLoose.js +0 -7
  210. package/helpers/babel/initializerDefineProperty/initializerDefineProperty.js +0 -10
  211. package/helpers/babel/initializerWarningHelper/initializerWarningHelper.js +0 -6
  212. package/helpers/babel/instanceof/instanceof.js +0 -6
  213. package/helpers/babel/interopRequireDefault/interopRequireDefault.js +0 -3
  214. package/helpers/babel/interopRequireWildcard/interopRequireWildcard.js +0 -37
  215. package/helpers/babel/isNativeFunction/isNativeFunction.js +0 -4
  216. package/helpers/babel/isNativeReflectConstruct/isNativeReflectConstruct.js +0 -21
  217. package/helpers/babel/iterableToArray/iterableToArray.js +0 -7
  218. package/helpers/babel/iterableToArrayLimit/iterableToArrayLimit.js +0 -36
  219. package/helpers/babel/iterableToArrayLimitLoose/iterableToArrayLimitLoose.js +0 -10
  220. package/helpers/babel/jsx/jsx.js +0 -50
  221. package/helpers/babel/maybeArrayLike/maybeArrayLike.js +0 -10
  222. package/helpers/babel/newArrowCheck/newArrowCheck.js +0 -5
  223. package/helpers/babel/nonIterableRest/nonIterableRest.js +0 -5
  224. package/helpers/babel/nonIterableSpread/nonIterableSpread.js +0 -5
  225. package/helpers/babel/objectDestructuringEmpty/objectDestructuringEmpty.js +0 -3
  226. package/helpers/babel/objectSpread/objectSpread.js +0 -23
  227. package/helpers/babel/objectSpread2/objectSpread2.js +0 -41
  228. package/helpers/babel/objectWithoutProperties/objectWithoutProperties.js +0 -19
  229. package/helpers/babel/objectWithoutPropertiesLoose/objectWithoutPropertiesLoose.js +0 -13
  230. package/helpers/babel/possibleConstructorReturn/possibleConstructorReturn.js +0 -10
  231. package/helpers/babel/readOnlyError/readOnlyError.js +0 -4
  232. package/helpers/babel/readme.md +0 -8
  233. package/helpers/babel/set/set.js +0 -44
  234. package/helpers/babel/setPrototypeOf/setPrototypeOf.js +0 -6
  235. package/helpers/babel/skipFirstGeneratorNext/skipFirstGeneratorNext.js +0 -8
  236. package/helpers/babel/slicedToArray/slicedToArray.js +0 -10
  237. package/helpers/babel/slicedToArrayLoose/slicedToArrayLoose.js +0 -13
  238. package/helpers/babel/superPropBase/superPropBase.js +0 -10
  239. package/helpers/babel/taggedTemplateLiteral/taggedTemplateLiteral.js +0 -10
  240. package/helpers/babel/taggedTemplateLiteralLoose/taggedTemplateLiteralLoose.js +0 -7
  241. package/helpers/babel/tdz/tdz.js +0 -4
  242. package/helpers/babel/temporalRef/temporalRef.js +0 -6
  243. package/helpers/babel/temporalUndefined/temporalUndefined.js +0 -3
  244. package/helpers/babel/toArray/toArray.js +0 -10
  245. package/helpers/babel/toConsumableArray/toConsumableArray.js +0 -10
  246. package/helpers/babel/toPrimitive/toPrimitive.js +0 -10
  247. package/helpers/babel/toPropertyKey/toPropertyKey.js +0 -6
  248. package/helpers/babel/typeof/typeof.js +0 -14
  249. package/helpers/babel/unsupportedIterableToArray/unsupportedIterableToArray.js +0 -12
  250. package/helpers/babel/wrapAsyncGenerator/wrapAsyncGenerator.js +0 -8
  251. package/helpers/babel/wrapNativeSuper/wrapNativeSuper.js +0 -30
  252. package/helpers/babel/wrapRegExp/wrapRegExp.js +0 -63
  253. package/helpers/babel/writeOnlyError/writeOnlyError.js +0 -4
  254. package/helpers/import-meta/import-meta-url-commonjs.js +0 -9
  255. package/helpers/import-meta/import-meta-url-global.js +0 -54
  256. package/src/build_project.js +0 -336
  257. package/src/commonjs_to_js_module.js +0 -180
  258. package/src/dev_server.js +0 -302
  259. package/src/execute.js +0 -184
  260. package/src/import_using_child_process.js +0 -68
  261. package/src/internal/browser_client/browser_client.js +0 -220
  262. package/src/internal/browser_client/browser_client_factory.js +0 -144
  263. package/src/internal/browser_client/browser_error_stack_remap.js +0 -43
  264. package/src/internal/browser_client/browser_system.js +0 -216
  265. package/src/internal/browser_client/module_namespace_transfer.js +0 -90
  266. package/src/internal/browser_detection/browser_detection.js +0 -65
  267. package/src/internal/browser_detection/detect_android.js +0 -13
  268. package/src/internal/browser_detection/detect_chrome.js +0 -28
  269. package/src/internal/browser_detection/detect_edge.js +0 -13
  270. package/src/internal/browser_detection/detect_electron.js +0 -1
  271. package/src/internal/browser_detection/detect_firefox.js +0 -17
  272. package/src/internal/browser_detection/detect_internet_explorer.js +0 -14
  273. package/src/internal/browser_detection/detect_ios.js +0 -19
  274. package/src/internal/browser_detection/detect_opera.js +0 -27
  275. package/src/internal/browser_detection/detect_safari.js +0 -13
  276. package/src/internal/browser_detection/user_agent_data.js +0 -25
  277. package/src/internal/browser_detection/util.js +0 -13
  278. package/src/internal/browser_launcher/browser_runtime_profile.js +0 -81
  279. package/src/internal/browser_launcher/execute_html_file.js +0 -355
  280. package/src/internal/browser_launcher/from_playwright.js +0 -320
  281. package/src/internal/browser_launcher/page_errors_and_logs.js +0 -77
  282. package/src/internal/browser_utils/fetch_and_eval.js +0 -27
  283. package/src/internal/browser_utils/fetch_and_eval_using_script.js +0 -47
  284. package/src/internal/browser_utils/fetch_browser.js +0 -34
  285. package/src/internal/browser_utils/fetch_json.js +0 -7
  286. package/src/internal/building/build_logs.js +0 -134
  287. package/src/internal/building/build_stats.js +0 -100
  288. package/src/internal/building/build_url_generator.js +0 -153
  289. package/src/internal/building/build_using_rollup.js +0 -359
  290. package/src/internal/building/css/apply_post_css.js +0 -55
  291. package/src/internal/building/css/jsenv_parse_css.js +0 -260
  292. package/src/internal/building/css/move_css_urls.js +0 -44
  293. package/src/internal/building/css/parse_css_urls.js +0 -38
  294. package/src/internal/building/css/postcss_plugin_url_visitor.js +0 -245
  295. package/src/internal/building/css/replace_css_urls.js +0 -68
  296. package/src/internal/building/global_format/es_to_system.js +0 -34
  297. package/src/internal/building/html/html_node_mutations.js +0 -29
  298. package/src/internal/building/html/html_scan.js +0 -70
  299. package/src/internal/building/html/jsenv_parse_html.js +0 -813
  300. package/src/internal/building/html/minify_html.js +0 -7
  301. package/src/internal/building/import_assertions/css_module.js +0 -43
  302. package/src/internal/building/import_references.js +0 -80
  303. package/src/internal/building/importmap/jsenv_parse_importmap.js +0 -28
  304. package/src/internal/building/js/babel_plugin_inline_worker_imports.js +0 -96
  305. package/src/internal/building/js/jsenv_parse_js.js +0 -122
  306. package/src/internal/building/js/minify_js.js +0 -33
  307. package/src/internal/building/js/transform_worker.js +0 -55
  308. package/src/internal/building/json/jsenv_parse_json.js +0 -11
  309. package/src/internal/building/parse_ressource.js +0 -207
  310. package/src/internal/building/ressource_builder.js +0 -1098
  311. package/src/internal/building/ressource_builder_util.js +0 -194
  312. package/src/internal/building/rollup_plugin_jsenv.js +0 -1965
  313. package/src/internal/building/sort_pathnames.js +0 -10
  314. package/src/internal/building/sourcemap/sourcemap_loader.js +0 -70
  315. package/src/internal/building/svg/jsenv_parse_svg.js +0 -112
  316. package/src/internal/building/url_fetcher.js +0 -85
  317. package/src/internal/building/url_loader.js +0 -127
  318. package/src/internal/building/url_trace.js +0 -229
  319. package/src/internal/building/url_versioning/resolve_import_url_helper.js +0 -12
  320. package/src/internal/building/url_versioning/url_versioning.js +0 -65
  321. package/src/internal/building/webmanifest/jsenv_parse_webmanifest.js +0 -48
  322. package/src/internal/compile_server/commonjs/rollup_plugin_commonjs_named_exports.js +0 -187
  323. package/src/internal/compile_server/compile_file.js +0 -273
  324. package/src/internal/compile_server/compile_server.js +0 -519
  325. package/src/internal/compile_server/compiled_file_service.js +0 -264
  326. package/src/internal/compile_server/html/html_ast.js +0 -534
  327. package/src/internal/compile_server/html/html_source_file_service.js +0 -453
  328. package/src/internal/compile_server/html/jsenv_compile_html.js +0 -674
  329. package/src/internal/compile_server/importmap/jsenv_compile_importmap.js +0 -28
  330. package/src/internal/compile_server/js/ansi_to_html.js +0 -9
  331. package/src/internal/compile_server/js/babelHelper.js +0 -145
  332. package/src/internal/compile_server/js/babel_parse_error.js +0 -9
  333. package/src/internal/compile_server/js/babel_plugin_global_this_as_jsenv_import.js +0 -34
  334. package/src/internal/compile_server/js/babel_plugin_import_assertions.js +0 -121
  335. package/src/internal/compile_server/js/babel_plugin_import_metadata.js +0 -18
  336. package/src/internal/compile_server/js/babel_plugin_import_visitor.js +0 -84
  337. package/src/internal/compile_server/js/babel_plugin_new_stylesheet_as_jsenv_import.js +0 -113
  338. package/src/internal/compile_server/js/babel_plugin_proxy_external_imports.js +0 -31
  339. package/src/internal/compile_server/js/babel_plugin_regenerator_runtime_as_jsenv_import.js +0 -48
  340. package/src/internal/compile_server/js/babel_plugin_replace_expressions.js +0 -101
  341. package/src/internal/compile_server/js/babel_plugin_systemjs_prepend.js +0 -23
  342. package/src/internal/compile_server/js/babel_plugin_transform_import_meta.js +0 -134
  343. package/src/internal/compile_server/js/babel_plugins.js +0 -37
  344. package/src/internal/compile_server/js/generateBabelHelper.js +0 -36
  345. package/src/internal/compile_server/js/js_transformer.js +0 -195
  346. package/src/internal/compile_server/js/jsenv_compile_js.js +0 -62
  347. package/src/internal/compile_server/js/load_babel_plugin_map_from_file.js +0 -49
  348. package/src/internal/compile_server/jsenv_directory/comparison_utils.js +0 -27
  349. package/src/internal/compile_server/jsenv_directory/compilation_result.js +0 -243
  350. package/src/internal/compile_server/jsenv_directory/compilation_result_from_build.js +0 -184
  351. package/src/internal/compile_server/jsenv_directory/compile_asset.js +0 -24
  352. package/src/internal/compile_server/jsenv_directory/compile_context.js +0 -60
  353. package/src/internal/compile_server/jsenv_directory/compile_profile.js +0 -217
  354. package/src/internal/compile_server/jsenv_directory/file_lock_registry.js +0 -24
  355. package/src/internal/compile_server/jsenv_directory/file_lock_registry.test.js +0 -47
  356. package/src/internal/compile_server/jsenv_directory/fs_optimized_for_cache.js +0 -57
  357. package/src/internal/compile_server/jsenv_directory/jsenv_directory.js +0 -183
  358. package/src/internal/compile_server/jsenv_directory/reuse_or_create_compiled_file.js +0 -269
  359. package/src/internal/compile_server/jsenv_directory/update_compile_cache.js +0 -131
  360. package/src/internal/compile_server/jsenv_directory/validate_compile_cache.js +0 -264
  361. package/src/internal/compile_server/sse_service/sse_service.js +0 -369
  362. package/src/internal/coverage/babel_plugin_instrument.js +0 -90
  363. package/src/internal/coverage/coverage_reporter_html_directory.js +0 -37
  364. package/src/internal/coverage/coverage_reporter_json_file.js +0 -22
  365. package/src/internal/coverage/coverage_reporter_text_log.js +0 -20
  366. package/src/internal/coverage/empty_coverage_factory.js +0 -70
  367. package/src/internal/coverage/file_by_file_coverage.js +0 -28
  368. package/src/internal/coverage/istanbul_coverage_composition.js +0 -28
  369. package/src/internal/coverage/istanbul_coverage_map_from_coverage.js +0 -16
  370. package/src/internal/coverage/list_files_not_covered.js +0 -20
  371. package/src/internal/coverage/missing_coverage.js +0 -46
  372. package/src/internal/coverage/report_to_coverage.js +0 -198
  373. package/src/internal/coverage/v8_and_istanbul.js +0 -38
  374. package/src/internal/coverage/v8_coverage_composition.js +0 -23
  375. package/src/internal/coverage/v8_coverage_from_directory.js +0 -86
  376. package/src/internal/coverage/v8_coverage_to_istanbul.js +0 -100
  377. package/src/internal/data_url.js +0 -54
  378. package/src/internal/dev_server/event_source_client/event_source_client.js +0 -63
  379. package/src/internal/dev_server/event_source_client/file_changes.js +0 -82
  380. package/src/internal/dev_server/event_source_client/livereload_preference.js +0 -13
  381. package/src/internal/dev_server/exploring/exploring.css +0 -237
  382. package/src/internal/dev_server/exploring/exploring.html +0 -79
  383. package/src/internal/dev_server/exploring/exploring.js +0 -243
  384. package/src/internal/dev_server/exploring/fetch_exploring_json.js +0 -19
  385. package/src/internal/dev_server/toolbar/compilation/compilation.css +0 -23
  386. package/src/internal/dev_server/toolbar/compilation/toolbar_compilation.js +0 -202
  387. package/src/internal/dev_server/toolbar/eventsource/toolbar_eventsource.js +0 -83
  388. package/src/internal/dev_server/toolbar/execution/toolbar_execution.js +0 -91
  389. package/src/internal/error_stack_remap/install_error_stack_remapping.js +0 -142
  390. package/src/internal/error_stack_remap/remap_call_site.js +0 -315
  391. package/src/internal/error_stack_remap/remap_stack.js +0 -218
  392. package/src/internal/error_stack_remap/stringify_stack.js +0 -9
  393. package/src/internal/executing/launch_and_execute.js +0 -458
  394. package/src/internal/executing/logs_file_execution.js +0 -160
  395. package/src/internal/executing/logs_plan_summary.js +0 -144
  396. package/src/internal/features/browser_feature_detection/browser_feature_detect_dynamic_import.js +0 -20
  397. package/src/internal/features/browser_feature_detection/browser_feature_detect_import_assertions_css.js +0 -23
  398. package/src/internal/features/browser_feature_detection/browser_feature_detect_import_assertions_json.js +0 -25
  399. package/src/internal/features/browser_feature_detection/browser_feature_detect_importmap.js +0 -37
  400. package/src/internal/features/browser_feature_detection/browser_feature_detect_new_stylesheet.js +0 -9
  401. package/src/internal/features/browser_feature_detection/browser_feature_detect_top_level_await.js +0 -14
  402. package/src/internal/features/browser_feature_detection/browser_feature_detection.js +0 -89
  403. package/src/internal/features/browser_feature_detection/compile_proxy.html +0 -27
  404. package/src/internal/features/browser_feature_detection/execute_with_script_module.js +0 -24
  405. package/src/internal/features/features_compat_from_runtime.js +0 -38
  406. package/src/internal/features/features_compat_from_runtime_support.js +0 -31
  407. package/src/internal/features/features_compatibility.js +0 -37
  408. package/src/internal/features/node_feature_detection/feature_detect_dynamic_import.mjs +0 -5
  409. package/src/internal/features/node_feature_detection/feature_detect_top_level_await.mjs +0 -1
  410. package/src/internal/features/node_feature_detection/node_feature_detect_dynamic_import.js +0 -5
  411. package/src/internal/features/node_feature_detection/node_feature_detect_top_level_await.js +0 -16
  412. package/src/internal/features/node_feature_detection/node_feature_detection.js +0 -66
  413. package/src/internal/fetching.js +0 -28
  414. package/src/internal/import_resolution/default_extension.js +0 -40
  415. package/src/internal/import_resolution/import_resolver_importmap.js +0 -64
  416. package/src/internal/import_resolution/import_resolver_node.js +0 -254
  417. package/src/internal/import_resolution/importmap_default.js +0 -37
  418. package/src/internal/jsenv_builds.js +0 -19
  419. package/src/internal/jsenv_params_assertions.js +0 -12
  420. package/src/internal/jsenv_remote_directory.js +0 -156
  421. package/src/internal/logs/byte.js +0 -10
  422. package/src/internal/logs/byte_as_file_size.js +0 -9
  423. package/src/internal/logs/ms_as_duration.js +0 -12
  424. package/src/internal/memoize.js +0 -24
  425. package/src/internal/node_launcher/eval_source.js +0 -6
  426. package/src/internal/node_launcher/fetch_source.js +0 -8
  427. package/src/internal/node_launcher/node_error_stack_remap.js +0 -22
  428. package/src/internal/node_launcher/node_execution_dynamic_import.js +0 -75
  429. package/src/internal/node_launcher/node_execution_performance.js +0 -67
  430. package/src/internal/node_launcher/node_execution_systemjs.js +0 -125
  431. package/src/internal/node_launcher/node_runtime_report.js +0 -77
  432. package/src/internal/node_launcher/node_system.js +0 -192
  433. package/src/internal/node_launcher/perf_node.js +0 -13
  434. package/src/internal/node_launcher/process_options.js +0 -46
  435. package/src/internal/node_launcher/value_install.js +0 -14
  436. package/src/internal/origin_directory_converter.js +0 -62
  437. package/src/internal/promise_race.js +0 -19
  438. package/src/internal/redirector/redirector.html +0 -40
  439. package/src/internal/regexp_escape.js +0 -34
  440. package/src/internal/require.js +0 -3
  441. package/src/internal/response_validation.js +0 -130
  442. package/src/internal/runtime_client/module_registration.js +0 -207
  443. package/src/internal/runtime_client/s.js +0 -864
  444. package/src/internal/runtime_client/s.js.md +0 -1
  445. package/src/internal/runtime_support/jsenv_runtime_support.js +0 -15
  446. package/src/internal/runtime_support/runtime_support.js +0 -70
  447. package/src/internal/semantic_versioning/compare_versions.js +0 -28
  448. package/src/internal/semantic_versioning/highest_version.js +0 -11
  449. package/src/internal/semantic_versioning/is_above.js +0 -5
  450. package/src/internal/semantic_versioning/is_below.js +0 -5
  451. package/src/internal/semantic_versioning/is_equal.js +0 -3
  452. package/src/internal/semantic_versioning/lowest_version.js +0 -11
  453. package/src/internal/semantic_versioning/version_from_value.js +0 -42
  454. package/src/internal/sourcemap_utils.js +0 -112
  455. package/src/internal/template_string_escape.js +0 -20
  456. package/src/internal/url_conversion.js +0 -313
  457. package/src/internal/url_utils.js +0 -33
  458. package/src/internal/url_utils.test.js +0 -39
  459. package/src/internal/windows_file_path_utils.js +0 -16
  460. package/src/jsenv_file_urls.js +0 -35
  461. package/src/jsenv_service_worker_finalizer.js +0 -55
  462. package/src/json_to_js_module.js +0 -13
  463. package/src/node_runtime.js +0 -227
  464. package/src/require_using_child_process.js +0 -67
  465. package/src/text_to_js_module.js +0 -13
@@ -0,0 +1,867 @@
1
+ /*
2
+ * Things hapenning here:
3
+ * 1. load raw build files
4
+ * 2. bundle files
5
+ * 3. optimize files (minify mostly)
6
+ * 4. urls versioning
7
+ */
8
+
9
+ import {
10
+ assertAndNormalizeDirectoryUrl,
11
+ ensureEmptyDirectory,
12
+ urlIsInsideOf,
13
+ urlToBasename,
14
+ urlToExtension,
15
+ urlToRelativeUrl,
16
+ writeFile,
17
+ } from "@jsenv/filesystem"
18
+ import { createLogger } from "@jsenv/logger"
19
+
20
+ import { createTaskLog } from "@jsenv/utils/logs/task_log.js"
21
+ import {
22
+ injectQueryParams,
23
+ setUrlFilename,
24
+ } from "@jsenv/utils/urls/url_utils.js"
25
+ import { createVersionGenerator } from "@jsenv/utils/versioning/version_generator.js"
26
+ import { generateSourcemapUrl } from "@jsenv/utils/sourcemap/sourcemap_utils.js"
27
+ import {
28
+ parseHtmlString,
29
+ stringifyHtmlAst,
30
+ } from "@jsenv/utils/html_ast/html_ast.js"
31
+
32
+ import { defaultRuntimeSupport } from "../omega/runtime_support/default_runtime_support.js"
33
+ import { jsenvPluginInline } from "../omega/core_plugins/inline/jsenv_plugin_inline.js"
34
+ import { createUrlGraph } from "../omega/url_graph.js"
35
+ import { getCorePlugins } from "../omega/core_plugins.js"
36
+ import { createKitchen } from "../omega/kitchen.js"
37
+ import { loadUrlGraph } from "../omega/url_graph/url_graph_load.js"
38
+ import { createUrlGraphSummary } from "../omega/url_graph/url_graph_report.js"
39
+ import { sortUrlGraphByDependencies } from "../omega/url_graph/url_graph_sort.js"
40
+
41
+ import { jsenvPluginBundleJsModule } from "./plugins/bundle_js_module/jsenv_plugin_bundle_js_module.js"
42
+ import { jsenvPluginMinifyJs } from "./plugins/minify_js/jsenv_plugin_minify_js.js"
43
+ import { jsenvPluginMinifyHtml } from "./plugins/minify_html/jsenv_plugin_minify_html.js"
44
+ import { createBuilUrlsGenerator } from "./build_urls_generator.js"
45
+ import { injectVersionMappings } from "./inject_version_mappings.js"
46
+ import { injectServiceWorkerUrls } from "./inject_service_worker_urls.js"
47
+
48
+ export const build = async ({
49
+ signal = new AbortController().signal,
50
+ logLevel = "info",
51
+ rootDirectoryUrl,
52
+ buildDirectoryUrl,
53
+ entryPoints = {},
54
+ // for now it's here but I think preview will become an other script
55
+ // that will just pass different options to build project
56
+ // and this function will be agnostic about "preview" concept
57
+ isPreview = false,
58
+ plugins = [],
59
+ htmlSupervisor,
60
+ nodeEsmResolution,
61
+ fileSystemMagicResolution,
62
+ babel,
63
+ injectedGlobals,
64
+ runtimeSupport = defaultRuntimeSupport,
65
+ sourcemaps = isPreview ? "file" : false,
66
+
67
+ bundling = true,
68
+ minify = true,
69
+ versioning = "filename", // "filename", "search_param", "none"
70
+ lineBreakNormalization = process.platform === "win32",
71
+
72
+ writeOnFileSystem = true,
73
+ buildDirectoryClean = true,
74
+ baseUrl = "/",
75
+ assetManifest = true,
76
+ assetManifestFileRelativeUrl = "asset-manifest.json",
77
+ }) => {
78
+ const logger = createLogger({ logLevel })
79
+ rootDirectoryUrl = assertAndNormalizeDirectoryUrl(rootDirectoryUrl)
80
+ buildDirectoryUrl = assertAndNormalizeDirectoryUrl(buildDirectoryUrl)
81
+ assertEntryPoints({ entryPoints })
82
+ if (!["filename", "search_param", "none"].includes(versioning)) {
83
+ throw new Error(
84
+ `Unexpected "versioning": must be "filename", "search_param" or "none"; got ${versioning}`,
85
+ )
86
+ }
87
+
88
+ const entryPointKeys = Object.keys(entryPoints)
89
+ if (entryPointKeys.length === 1) {
90
+ logger.info(`
91
+ build "${entryPointKeys[0]}"`)
92
+ } else {
93
+ logger.info(`
94
+ build ${entryPointKeys.length} entry points`)
95
+ }
96
+ const rawGraph = createUrlGraph()
97
+ const prebuildTask = createTaskLog(logger, "prebuild")
98
+ let urlCount = 0
99
+ const rawGraphKitchen = createKitchen({
100
+ signal,
101
+ logger,
102
+ rootDirectoryUrl,
103
+ urlGraph: rawGraph,
104
+ plugins: [
105
+ ...plugins,
106
+ {
107
+ name: "jsenv:build_log",
108
+ appliesDuring: { build: true },
109
+ cooked: () => {
110
+ urlCount++
111
+ prebuildTask.setRightText(urlCount)
112
+ },
113
+ },
114
+ ...getCorePlugins({
115
+ htmlSupervisor,
116
+ nodeEsmResolution,
117
+ fileSystemMagicResolution,
118
+ babel,
119
+ injectedGlobals,
120
+ }),
121
+ jsenvPluginBundleJsModule(),
122
+ ...(minify ? [jsenvPluginMinifyJs(), jsenvPluginMinifyHtml()] : []),
123
+ ],
124
+ scenario: "build",
125
+ sourcemaps,
126
+ })
127
+ const entryUrls = []
128
+ try {
129
+ await loadUrlGraph({
130
+ urlGraph: rawGraph,
131
+ kitchen: rawGraphKitchen,
132
+ outDirectoryUrl: new URL(`.jsenv/build/`, rootDirectoryUrl),
133
+ runtimeSupport,
134
+ startLoading: (cookEntryFile) => {
135
+ Object.keys(entryPoints).forEach((key) => {
136
+ const [, entryUrlInfo] = cookEntryFile({
137
+ trace: `"${key}" in entryPoints parameter`,
138
+ type: "entry_point",
139
+ specifier: key,
140
+ })
141
+ entryUrls.push(entryUrlInfo.url)
142
+ })
143
+ },
144
+ })
145
+ } catch (e) {
146
+ prebuildTask.fail()
147
+ throw e
148
+ }
149
+ // here we can perform many checks such as ensuring ressource hints are used
150
+ prebuildTask.done()
151
+ logger.debug(
152
+ `raw graph urls:
153
+ ${Object.keys(rawGraph.urlInfos).join("\n")}`,
154
+ )
155
+
156
+ const bundleUrlInfos = {}
157
+ if (bundling) {
158
+ const bundlers = {}
159
+ rawGraphKitchen.pluginController.plugins.forEach((plugin) => {
160
+ const bundle = plugin.bundle
161
+ if (!bundle) {
162
+ return
163
+ }
164
+ if (typeof bundle !== "object") {
165
+ throw new Error(
166
+ `bundle must be an object, found "${bundle}" on plugin named "${plugin.name}"`,
167
+ )
168
+ }
169
+ Object.keys(bundle).forEach((type) => {
170
+ const bundlerForThatType = bundlers[type]
171
+ if (bundlerForThatType) {
172
+ // first plugin to define a bundle hook wins
173
+ return
174
+ }
175
+ bundlers[type] = {
176
+ plugin,
177
+ bundleFunction: bundle[type],
178
+ urlInfos: [],
179
+ }
180
+ })
181
+ })
182
+ const addToBundlerIfAny = (rawUrlInfo) => {
183
+ const bundler = bundlers[rawUrlInfo.type]
184
+ if (bundler) {
185
+ bundler.urlInfos.push(rawUrlInfo)
186
+ return
187
+ }
188
+ }
189
+ GRAPH.forEach(rawGraph, (rawUrlInfo) => {
190
+ if (rawUrlInfo.data.isEntryPoint) {
191
+ addToBundlerIfAny(rawUrlInfo)
192
+ if (rawUrlInfo.type === "html") {
193
+ rawUrlInfo.dependencies.forEach((dependencyUrl) => {
194
+ const dependencyUrlInfo = rawGraph.getUrlInfo(dependencyUrl)
195
+ if (dependencyUrlInfo.isInline) {
196
+ if (dependencyUrlInfo.type === "js_module") {
197
+ // bundle inline script type module deps
198
+ dependencyUrlInfo.references.forEach((inlineScriptRef) => {
199
+ if (inlineScriptRef.type === "js_import_export") {
200
+ addToBundlerIfAny(rawGraph.getUrlInfo(inlineScriptRef.url))
201
+ }
202
+ })
203
+ }
204
+ // inline content cannot be bundled
205
+ return
206
+ }
207
+ addToBundlerIfAny(dependencyUrlInfo)
208
+ })
209
+ return
210
+ }
211
+ }
212
+ // File referenced with new URL('./file.js', import.meta.url)
213
+ // are entry points that can be bundled
214
+ // For instance we will bundle service worker/workers detected like this
215
+ if (rawUrlInfo.type === "js_module") {
216
+ rawUrlInfo.references.forEach((reference) => {
217
+ if (reference.type === "js_import_meta_url_pattern") {
218
+ const urlInfo = rawGraph.getUrlInfo(reference.url)
219
+ addToBundlerIfAny(urlInfo)
220
+ }
221
+ })
222
+ }
223
+ })
224
+ await Object.keys(bundlers).reduce(async (previous, type) => {
225
+ await previous
226
+ const bundler = bundlers[type]
227
+ const urlInfosToBundle = bundler.urlInfos
228
+ if (urlInfosToBundle.length === 0) {
229
+ return
230
+ }
231
+ const bundleTask = createTaskLog(logger, `bundle "${type}"`)
232
+ try {
233
+ const bundlerGeneratedUrlInfos =
234
+ await rawGraphKitchen.pluginController.callAsyncHook(
235
+ {
236
+ plugin: bundler.plugin,
237
+ hookName: "bundle",
238
+ value: bundler.bundleFunction,
239
+ },
240
+ urlInfosToBundle,
241
+ {
242
+ signal,
243
+ logger,
244
+ rootDirectoryUrl,
245
+ buildDirectoryUrl,
246
+ urlGraph: rawGraph,
247
+ runtimeSupport,
248
+ sourcemaps,
249
+ },
250
+ )
251
+ Object.keys(bundlerGeneratedUrlInfos).forEach((url) => {
252
+ const bundleUrlInfo = bundlerGeneratedUrlInfos[url]
253
+ const rawUrlInfo = rawGraph.getUrlInfo(url)
254
+ bundleUrlInfos[url] = {
255
+ type,
256
+ subtype: rawUrlInfo ? rawUrlInfo.subtype : undefined,
257
+ ...bundleUrlInfo,
258
+ data: {
259
+ ...(rawUrlInfo ? rawUrlInfo.data : {}),
260
+ ...bundleUrlInfo.data,
261
+ fromBundle: true,
262
+ },
263
+ }
264
+ })
265
+ } catch (e) {
266
+ bundleTask.fail()
267
+ throw e
268
+ }
269
+ bundleTask.done()
270
+ }, Promise.resolve())
271
+ }
272
+
273
+ const buildUrlsGenerator = createBuilUrlsGenerator({
274
+ buildDirectoryUrl,
275
+ })
276
+ const rawUrls = {}
277
+ const buildUrls = {}
278
+ const finalGraph = createUrlGraph()
279
+ const optimizeHooks = rawGraphKitchen.pluginController.addHook("optimize")
280
+ const finalGraphKitchen = createKitchen({
281
+ logger,
282
+ rootDirectoryUrl,
283
+ urlGraph: finalGraph,
284
+ // Inline content, such as <script> inside html, is transformed during the previous phase.
285
+ // If we read the inline content it would be considered as the original content.
286
+ // - It could be "fixed" by taking into account sourcemap and consider sourcemap sources
287
+ // as the original content.
288
+ // - But it would not work when sourcemap are not generated
289
+ // - would be a bit slower
290
+ // - So instead of reading the inline content directly, we search into raw graph
291
+ // to get "originalContent" and "sourcemap"
292
+ loadInlineUrlInfos: (finalUrlInfo) => {
293
+ const rawUrl = finalUrlInfo.data.rawUrl
294
+ const bundleUrlInfo = bundleUrlInfos[rawUrl]
295
+ const urlInfo = bundleUrlInfo || finalUrlInfo
296
+ const rawUrlInfo = rawGraph.getUrlInfo(rawUrl)
297
+ return {
298
+ originalContent: rawUrlInfo ? rawUrlInfo.originalContent : undefined,
299
+ sourcemap: bundleUrlInfo
300
+ ? bundleUrlInfo.sourcemap
301
+ : rawUrlInfo
302
+ ? rawUrlInfo.sourcemap
303
+ : undefined,
304
+ contentType: urlInfo.contentType,
305
+ content: urlInfo.content,
306
+ }
307
+ },
308
+ plugins: [
309
+ jsenvPluginInline(),
310
+ {
311
+ name: "jsenv:postbuild",
312
+ appliesDuring: { build: true },
313
+ resolve: (reference) => {
314
+ if (reference.specifier[0] === "/") {
315
+ const url = new URL(reference.specifier.slice(1), rootDirectoryUrl)
316
+ .href
317
+ return url
318
+ }
319
+ const parentUrlInfo = finalGraph.getUrlInfo(reference.parentUrl)
320
+ if (parentUrlInfo && parentUrlInfo.data.fromBundle) {
321
+ // code generated by rollup contains specifier relative
322
+ // to the generated file.
323
+ // This file does not exists yet we must resolve against the raw url, not the build url
324
+ const parentRawUrl = parentUrlInfo.data.rawUrl
325
+ const rawUrl = new URL(reference.specifier, parentRawUrl).href
326
+ return rawUrl
327
+ }
328
+ return new URL(reference.specifier, reference.parentUrl).href
329
+ },
330
+ normalize: (reference) => {
331
+ if (!reference.url.startsWith("file:")) {
332
+ return null
333
+ }
334
+ // already a build url
335
+ const rawUrl = rawUrls[reference.url]
336
+ if (rawUrl) {
337
+ reference.data.rawUrl = rawUrl
338
+ return reference.url
339
+ }
340
+ const bundleUrlInfo = bundleUrlInfos[reference.url]
341
+ // from rollup or postcss
342
+ if (bundleUrlInfo) {
343
+ const buildUrl = buildUrlsGenerator.generate(
344
+ reference.url,
345
+ bundleUrlInfo,
346
+ )
347
+ reference.data.rawUrl = reference.url
348
+ rawUrls[buildUrl] = reference.url
349
+ return buildUrl
350
+ }
351
+ const rawUrlInfo = rawGraph.getUrlInfo(reference.url)
352
+ // files from root directory but not given to rollup nor postcss
353
+ if (rawUrlInfo) {
354
+ const buildUrl = buildUrlsGenerator.generate(
355
+ reference.url,
356
+ rawUrlInfo,
357
+ )
358
+ reference.data.rawUrl = reference.url
359
+ rawUrls[buildUrl] = reference.url
360
+ return buildUrl
361
+ }
362
+ if (reference.isInline) {
363
+ const rawUrlInfo = GRAPH.find(rawGraph, (rawUrlInfo) => {
364
+ if (!rawUrlInfo.isInline) {
365
+ return false
366
+ }
367
+ if (rawUrlInfo.content === reference.content) {
368
+ return true
369
+ }
370
+ return false
371
+ })
372
+ if (!rawUrlInfo) {
373
+ throw new Error(`cannot find raw url`)
374
+ }
375
+ const parentUrlInfo = finalGraph.getUrlInfo(reference.parentUrl)
376
+ const buildUrl = buildUrlsGenerator.generate(
377
+ reference.url,
378
+ rawUrlInfo,
379
+ parentUrlInfo,
380
+ )
381
+ rawUrls[buildUrl] = reference.url
382
+ reference.data.rawUrl = rawUrlInfo.url
383
+ return buildUrl
384
+ }
385
+ if (reference.type === "sourcemap_comment") {
386
+ // inherit parent build url
387
+ return generateSourcemapUrl(reference.parentUrl)
388
+ }
389
+ // files generated during the final graph (sourcemaps)
390
+ // const finalUrlInfo = finalGraph.getUrlInfo(url)
391
+ const buildUrl = buildUrlsGenerator.generate(reference.url, {
392
+ data: {},
393
+ type: "asset",
394
+ })
395
+ return buildUrl
396
+ },
397
+ formatReferencedUrl: (reference) => {
398
+ if (!reference.url.startsWith("file:")) {
399
+ return null
400
+ }
401
+ if (!urlIsInsideOf(reference.url, buildDirectoryUrl)) {
402
+ throw new Error(
403
+ `urls should be inside build directory at this stage, found "${reference.url}"`,
404
+ )
405
+ }
406
+ // if a file is in the same directory we could prefer the relative notation
407
+ // but to keep things simple let's keep the notation relative to baseUrl for now
408
+ const specifier = `${baseUrl}${urlToRelativeUrl(
409
+ reference.url,
410
+ buildDirectoryUrl,
411
+ )}`
412
+ buildUrls[specifier] = reference.url
413
+ return specifier
414
+ },
415
+ load: (finalUrlInfo) => {
416
+ const rawUrl = finalUrlInfo.data.rawUrl
417
+ const bundleUrlInfo = bundleUrlInfos[rawUrl]
418
+ const urlInfo = bundleUrlInfo || rawGraph.getUrlInfo(rawUrl)
419
+ finalUrlInfo.subtype = urlInfo.subtype
420
+ return {
421
+ data: bundleUrlInfo ? bundleUrlInfo.data : undefined,
422
+ originalContent: urlInfo.originalContent,
423
+ contentType: urlInfo.contentType,
424
+ content: urlInfo.content,
425
+ sourcemap: urlInfo.sourcemap,
426
+ }
427
+ },
428
+ transform: {
429
+ html: (urlInfo) => {
430
+ const htmlAst = parseHtmlString(urlInfo.content, {
431
+ storeOriginalPositions: false,
432
+ })
433
+ return {
434
+ content: stringifyHtmlAst(htmlAst, {
435
+ removeOriginalPositionAttributes: true,
436
+ }),
437
+ }
438
+ },
439
+ },
440
+ },
441
+ {
442
+ name: "jsenv:optimize",
443
+ appliesDuring: { build: true },
444
+ transform: async (urlInfo, context) => {
445
+ if (optimizeHooks.length) {
446
+ await rawGraphKitchen.pluginController.callAsyncHooks(
447
+ "optimize",
448
+ urlInfo,
449
+ context,
450
+ async (optimizeReturnValue) => {
451
+ await finalGraphKitchen.urlInfoTransformer.applyFinalTransformations(
452
+ urlInfo,
453
+ optimizeReturnValue,
454
+ )
455
+ },
456
+ )
457
+ }
458
+ },
459
+ },
460
+ ],
461
+ scenario: "build",
462
+ sourcemaps,
463
+ })
464
+ const buildTask = createTaskLog(logger, "build")
465
+ const postBuildEntryUrls = []
466
+ try {
467
+ await loadUrlGraph({
468
+ urlGraph: finalGraph,
469
+ kitchen: finalGraphKitchen,
470
+ outDirectoryUrl: new URL(".jsenv/postbuild/", rootDirectoryUrl),
471
+ runtimeSupport,
472
+ startLoading: (cookEntryFile) => {
473
+ entryUrls.forEach((entryUrl) => {
474
+ const [, postBuildEntryUrlInfo] = cookEntryFile({
475
+ trace: `entryPoint`,
476
+ type: "entry_point",
477
+ specifier: entryUrl,
478
+ })
479
+ postBuildEntryUrls.push(postBuildEntryUrlInfo.url)
480
+ })
481
+ },
482
+ })
483
+ } catch (e) {
484
+ buildTask.fail()
485
+ throw e
486
+ }
487
+ buildTask.done()
488
+
489
+ logger.debug(
490
+ `graph urls pre-versioning:
491
+ ${Object.keys(finalGraph.urlInfos).join("\n")}`,
492
+ )
493
+ if (versioning !== "none") {
494
+ const versioningTask = createTaskLog(logger, "inject version in urls")
495
+ try {
496
+ const urlsSorted = sortUrlGraphByDependencies(finalGraph)
497
+ urlsSorted.forEach((url) => {
498
+ if (url.startsWith("data:")) {
499
+ return
500
+ }
501
+ const urlInfo = finalGraph.getUrlInfo(url)
502
+ if (urlInfo.type === "sourcemap") {
503
+ return
504
+ }
505
+ if (urlInfo.isInline) {
506
+ return
507
+ }
508
+ const versionGenerator = createVersionGenerator()
509
+ versionGenerator.augmentWithContent({
510
+ content: urlInfo.content,
511
+ contentType: urlInfo.contentType,
512
+ lineBreakNormalization,
513
+ })
514
+ urlInfo.dependencies.forEach((dependencyUrl) => {
515
+ const dependencyUrlInfo = finalGraph.getUrlInfo(dependencyUrl)
516
+ if (dependencyUrlInfo.isInline) {
517
+ // this content is part of the file, no need to take into account twice
518
+ return
519
+ }
520
+ if (dependencyUrlInfo.data.version) {
521
+ versionGenerator.augmentWithDependencyVersion(
522
+ dependencyUrlInfo.data.version,
523
+ )
524
+ } else {
525
+ // because all dependencies are know, if the dependency has no version
526
+ // it means there is a circular dependency between this file
527
+ // and it's dependency
528
+ // in that case we'll use the dependency content
529
+ versionGenerator.augmentWithContent({
530
+ content: dependencyUrlInfo.content,
531
+ contentType: dependencyUrlInfo.contentType,
532
+ lineBreakNormalization,
533
+ })
534
+ }
535
+ })
536
+ urlInfo.data.version = versionGenerator.generate()
537
+ urlInfo.data.versionedUrl = injectVersionIntoBuildUrl({
538
+ buildUrl: urlInfo.url,
539
+ version: urlInfo.data.version,
540
+ versioning,
541
+ })
542
+ })
543
+ const versionMappings = {}
544
+ const usedVersionMappings = []
545
+ const versioningKitchen = createKitchen({
546
+ logger,
547
+ rootDirectoryUrl: buildDirectoryUrl,
548
+ urlGraph: finalGraph,
549
+ loadInlineUrlInfos: (versionedUrlInfo) => {
550
+ const rawUrlInfo = rawGraph.getUrlInfo(versionedUrlInfo.data.rawUrl)
551
+ const finalUrlInfo = finalGraph.getUrlInfo(versionedUrlInfo.url)
552
+ return {
553
+ originalContent: rawUrlInfo
554
+ ? rawUrlInfo.originalContent
555
+ : undefined,
556
+ sourcemap: finalUrlInfo ? finalUrlInfo.sourcemap : undefined,
557
+ contentType: versionedUrlInfo.contentType,
558
+ content: versionedUrlInfo.content,
559
+ }
560
+ },
561
+ plugins: [
562
+ jsenvPluginInline({
563
+ allowEscapeForVersioning: true,
564
+ }),
565
+ {
566
+ name: "jsenv:versioning",
567
+ appliesDuring: { build: true },
568
+ resolve: (reference) => {
569
+ const buildUrl = buildUrls[reference.specifier]
570
+ if (buildUrl) {
571
+ return buildUrl
572
+ }
573
+ const url = new URL(reference.specifier, reference.parentUrl).href
574
+ return url
575
+ },
576
+ formatReferencedUrl: (reference) => {
577
+ if (reference.isInline) {
578
+ return null
579
+ }
580
+ // specifier comes from "normalize" hook done a bit earlier in this file
581
+ // we want to get back their build url to access their infos
582
+ const referencedUrlInfo = finalGraph.getUrlInfo(reference.url)
583
+ if (
584
+ referencedUrlInfo.data.isEntryPoint ||
585
+ referencedUrlInfo.subtype === "service_worker" ||
586
+ referencedUrlInfo.type === "webmanifest"
587
+ ) {
588
+ return reference.specifier
589
+ }
590
+ // data:* urls and so on
591
+ if (!referencedUrlInfo.url.startsWith("file:")) {
592
+ return null
593
+ }
594
+ const versionedUrl = referencedUrlInfo.data.versionedUrl
595
+ if (!versionedUrl) {
596
+ // happens for sourcemap
597
+ return `${baseUrl}${urlToRelativeUrl(
598
+ referencedUrlInfo.url,
599
+ buildDirectoryUrl,
600
+ )}`
601
+ }
602
+ const versionedSpecifier = `${baseUrl}${urlToRelativeUrl(
603
+ versionedUrl,
604
+ buildDirectoryUrl,
605
+ )}`
606
+ versionMappings[reference.specifier] = versionedSpecifier
607
+ const parentUrlInfo = finalGraph.getUrlInfo(reference.parentUrl)
608
+ if (parentUrlInfo.jsQuote) {
609
+ // the url is inline inside js quotes
610
+ usedVersionMappings.push(reference.specifier)
611
+ return () =>
612
+ `${parentUrlInfo.jsQuote}+__v__(${JSON.stringify(
613
+ reference.specifier,
614
+ )})+${parentUrlInfo.jsQuote}`
615
+ }
616
+ if (
617
+ reference.type === "js_import_meta_url_pattern" ||
618
+ reference.subtype === "import_dynamic"
619
+ ) {
620
+ usedVersionMappings.push(reference.specifier)
621
+ return () => `__v__(${JSON.stringify(reference.specifier)})`
622
+ }
623
+ return versionedSpecifier
624
+ },
625
+ load: (finalUrlInfo) => {
626
+ return {
627
+ originalContent: finalUrlInfo.originalContent,
628
+ contentType: finalUrlInfo.contentType,
629
+ content: finalUrlInfo.content,
630
+ sourcemap: finalUrlInfo.sourcemap,
631
+ }
632
+ },
633
+ },
634
+ ],
635
+ scenario: "build",
636
+ sourcemaps,
637
+ })
638
+ // arrange state before reloading all files
639
+ GRAPH.forEach(finalGraph, (finalUrlInfo) => {
640
+ finalUrlInfo.data.promise = null
641
+ })
642
+ await loadUrlGraph({
643
+ urlGraph: finalGraph,
644
+ kitchen: versioningKitchen,
645
+ runtimeSupport,
646
+ startLoading: (cookEntryFile) => {
647
+ postBuildEntryUrls.forEach((postBuildEntryUrl) => {
648
+ cookEntryFile({
649
+ trace: `entryPoint`,
650
+ type: "entry_point",
651
+ specifier: postBuildEntryUrl,
652
+ })
653
+ })
654
+ },
655
+ })
656
+ if (usedVersionMappings.length) {
657
+ const versionMappingsNeeded = {}
658
+ usedVersionMappings.forEach((specifier) => {
659
+ versionMappingsNeeded[specifier] = versionMappings[specifier]
660
+ })
661
+ await Promise.all(
662
+ GRAPH.map(finalGraph, async (urlInfo) => {
663
+ if (!urlInfo.data.isEntryPoint) {
664
+ return
665
+ }
666
+ await injectVersionMappings({
667
+ urlInfo,
668
+ kitchen: finalGraphKitchen,
669
+ versionMappings: versionMappingsNeeded,
670
+ })
671
+ }),
672
+ )
673
+ }
674
+ } catch (e) {
675
+ versioningTask.fail()
676
+ throw e
677
+ }
678
+ versioningTask.done()
679
+ }
680
+
681
+ GRAPH.forEach(finalGraph, (urlInfo) => {
682
+ if (!urlInfo.url.startsWith("file:")) {
683
+ return
684
+ }
685
+ const version = urlInfo.data.version
686
+ const useVersionedUrl =
687
+ !urlInfo.data.isEntryPoint &&
688
+ urlInfo.subtype !== "service_worker" &&
689
+ urlInfo.type !== "webmanifest" &&
690
+ version
691
+ const buildUrl = useVersionedUrl ? urlInfo.data.versionedUrl : urlInfo.url
692
+ if (!urlIsInsideOf(buildUrl, buildDirectoryUrl)) {
693
+ throw new Error(`build url outside build directory`)
694
+ }
695
+ const buildRelativeUrl = urlToRelativeUrl(buildUrl, buildDirectoryUrl)
696
+ urlInfo.data.buildUrl = buildUrl
697
+ urlInfo.data.buildUrlIsVersioned = useVersionedUrl
698
+ urlInfo.data.buildRelativeUrl = buildRelativeUrl
699
+ })
700
+
701
+ const hasServiceWorker = Boolean(
702
+ GRAPH.find(
703
+ finalGraph,
704
+ (finalUrlInfo) => finalUrlInfo.subtype === "service_worker",
705
+ ),
706
+ )
707
+ if (hasServiceWorker) {
708
+ const serviceWorkerUrls = {}
709
+ GRAPH.forEach(finalGraph, (urlInfo) => {
710
+ if (!urlInfo.url.startsWith("file:")) {
711
+ return
712
+ }
713
+ if (urlInfo.isInline) {
714
+ return
715
+ }
716
+ if (urlInfo.data.buildUrlIsVersioned) {
717
+ serviceWorkerUrls[urlInfo.data.buildRelativeUrl] = {
718
+ versioned: true,
719
+ }
720
+ return
721
+ }
722
+ if (!urlInfo.data.version) {
723
+ // when url is not versioned we compute a "version" for that url anyway
724
+ // so that service worker source still changes and navigator
725
+ // detect there is a change
726
+ const versionGenerator = createVersionGenerator()
727
+ versionGenerator.augmentWithContent({
728
+ content: urlInfo.content,
729
+ contentType: urlInfo.contentType,
730
+ lineBreakNormalization,
731
+ })
732
+ const version = versionGenerator.generate()
733
+ urlInfo.data.version = version
734
+ }
735
+ serviceWorkerUrls[urlInfo.data.buildRelativeUrl] = {
736
+ versioned: false,
737
+ version: urlInfo.data.version,
738
+ }
739
+ })
740
+ await Promise.all(
741
+ GRAPH.map(finalGraph, async (urlInfo) => {
742
+ if (urlInfo.subtype !== "service_worker") {
743
+ return
744
+ }
745
+ await injectServiceWorkerUrls({
746
+ urlInfo,
747
+ kitchen: finalGraphKitchen,
748
+ serviceWorkerUrls,
749
+ })
750
+ }),
751
+ )
752
+ }
753
+
754
+ const buildManifest = {}
755
+ const buildFileContents = {}
756
+ const buildInlineFileContents = {}
757
+ GRAPH.forEach(finalGraph, (urlInfo) => {
758
+ const { buildUrlIsVersioned, buildRelativeUrl } = urlInfo.data
759
+ if (urlInfo.isInline) {
760
+ buildInlineFileContents[buildRelativeUrl] = urlInfo.content
761
+ } else {
762
+ buildFileContents[buildRelativeUrl] = urlInfo.content
763
+ }
764
+ if (buildUrlIsVersioned) {
765
+ const buildRelativeUrlWithoutVersioning = urlToRelativeUrl(
766
+ urlInfo.url,
767
+ buildDirectoryUrl,
768
+ )
769
+ buildManifest[buildRelativeUrlWithoutVersioning] = buildRelativeUrl
770
+ }
771
+ })
772
+
773
+ logger.debug(
774
+ `graph urls post-versioning:
775
+ ${Object.keys(finalGraph.urlInfos).join("\n")}`,
776
+ )
777
+
778
+ if (writeOnFileSystem) {
779
+ if (buildDirectoryClean) {
780
+ await ensureEmptyDirectory(buildDirectoryUrl)
781
+ }
782
+ const buildRelativeUrls = Object.keys(buildFileContents)
783
+ await Promise.all(
784
+ buildRelativeUrls.map(async (buildRelativeUrl) => {
785
+ await writeFile(
786
+ new URL(buildRelativeUrl, buildDirectoryUrl),
787
+ buildFileContents[buildRelativeUrl],
788
+ )
789
+ }),
790
+ )
791
+ if (
792
+ versioning !== "none" &&
793
+ assetManifest &&
794
+ Object.keys(buildManifest).length
795
+ ) {
796
+ await writeFile(
797
+ new URL(assetManifestFileRelativeUrl, buildDirectoryUrl),
798
+ JSON.stringify(buildManifest, null, " "),
799
+ )
800
+ }
801
+ }
802
+ logger.info(createUrlGraphSummary(finalGraph, { title: "build files" }))
803
+ return {
804
+ buildFileContents,
805
+ buildInlineFileContents,
806
+ buildManifest,
807
+ }
808
+ }
809
+
810
+ const GRAPH = {
811
+ map: (graph, callback) => {
812
+ return Object.keys(graph.urlInfos).map((url) => {
813
+ return callback(graph.urlInfos[url])
814
+ })
815
+ },
816
+
817
+ forEach: (graph, callback) => {
818
+ Object.keys(graph.urlInfos).forEach((url) => {
819
+ callback(graph.urlInfos[url], url)
820
+ })
821
+ },
822
+
823
+ find: (graph, callback) => {
824
+ const urlFound = Object.keys(graph.urlInfos).find((url) => {
825
+ return callback(graph.urlInfos[url])
826
+ })
827
+ return graph.urlInfos[urlFound]
828
+ },
829
+ }
830
+
831
+ const injectVersionIntoBuildUrl = ({ buildUrl, version, versioning }) => {
832
+ if (versioning === "search_param") {
833
+ return injectQueryParams(buildUrl, {
834
+ v: version,
835
+ })
836
+ }
837
+ const basename = urlToBasename(buildUrl)
838
+ const extension = urlToExtension(buildUrl)
839
+ const versionedFilename = `${basename}-${version}${extension}`
840
+ const versionedUrl = setUrlFilename(buildUrl, versionedFilename)
841
+ return versionedUrl
842
+ }
843
+
844
+ const assertEntryPoints = ({ entryPoints }) => {
845
+ if (typeof entryPoints !== "object" || entryPoints === null) {
846
+ throw new TypeError(`entryPoints must be an object, got ${entryPoints}`)
847
+ }
848
+ const keys = Object.keys(entryPoints)
849
+ keys.forEach((key) => {
850
+ if (!key.startsWith("./")) {
851
+ throw new TypeError(
852
+ `unexpected key in entryPoints, all keys must start with ./ but found ${key}`,
853
+ )
854
+ }
855
+ const value = entryPoints[key]
856
+ if (typeof value !== "string") {
857
+ throw new TypeError(
858
+ `unexpected value in entryPoints, all values must be strings found ${value} for key ${key}`,
859
+ )
860
+ }
861
+ if (value.includes("/")) {
862
+ throw new TypeError(
863
+ `unexpected value in entryPoints, all values must be plain strings (no "/") but found ${value} for key ${key}`,
864
+ )
865
+ }
866
+ })
867
+ }