@jsenv/core 26.0.1 → 27.0.0-alpha.2

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 +737 -0
  5. package/src/build/build_urls_generator.js +64 -0
  6. package/src/build/inject_version_mappings.js +62 -0
  7. package/src/build/plugins/bundle_js_module/jsenv_plugin_bundle_js_module.js +225 -0
  8. package/src/build/plugins/minify_html/jsenv_plugin_minify_html.js +30 -0
  9. package/src/build/plugins/minify_js/jsenv_plugin_minify_js.js +47 -0
  10. package/src/dev/plugins/autoreload/babel_plugin_metadata_import_meta_hot.js +98 -0
  11. package/src/dev/plugins/autoreload/client/autoreload_preference.js +11 -0
  12. package/src/dev/plugins/autoreload/client/event_source_client.js +186 -0
  13. package/src/{internal/dev_server/event_source_client → dev/plugins/autoreload/client}/event_source_connection.js +21 -25
  14. package/src/dev/plugins/autoreload/client/import_meta_hot.js +80 -0
  15. package/src/dev/plugins/autoreload/client/reload.js +101 -0
  16. package/src/dev/plugins/autoreload/client/url_helpers.js +20 -0
  17. package/src/dev/plugins/autoreload/html_hot_dependencies.js +156 -0
  18. package/src/dev/plugins/autoreload/jsenv_plugin_autoreload.js +374 -0
  19. package/src/dev/plugins/autoreload/sse_service.js +149 -0
  20. package/src/dev/plugins/explorer/client/explorer.html +607 -0
  21. package/src/{internal → dev/plugins/explorer/client}/jsenv.png +0 -0
  22. package/src/dev/plugins/explorer/jsenv_plugin_explorer.js +74 -0
  23. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/animation/toolbar_animation.js +0 -0
  24. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/eventsource/eventsource.css +2 -2
  25. package/src/dev/plugins/toolbar/client/eventsource/toolbar_eventsource.js +57 -0
  26. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/execution/execution.css +0 -0
  27. package/src/dev/plugins/toolbar/client/execution/toolbar_execution.js +88 -0
  28. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/focus/focus.css +0 -0
  29. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/focus/toolbar_focus.js +0 -0
  30. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/jsenv_logo.svg +0 -0
  31. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/notification/toolbar_notification.js +0 -0
  32. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/responsive/overflow_menu.css +0 -0
  33. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/responsive/toolbar_responsive.js +0 -0
  34. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/settings/settings.css +0 -0
  35. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/settings/toolbar_settings.js +1 -0
  36. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/theme/jsenv_theme.css +1 -15
  37. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/theme/light_theme.css +0 -17
  38. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/theme/toolbar_theme.js +0 -0
  39. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/toolbar.html +40 -199
  40. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/toolbar_injector.js +8 -28
  41. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/toolbar_main.css +0 -24
  42. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/toolbar_main.js +10 -56
  43. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/tooltip/tooltip.css +1 -1
  44. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/tooltip/tooltip.js +0 -0
  45. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/util/animation.js +0 -0
  46. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/util/dom.js +0 -0
  47. package/src/{internal/browser_utils → dev/plugins/toolbar/client/util}/fetch_using_xhr.js +0 -0
  48. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/util/fetching.js +2 -4
  49. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/util/iframe_to_parent_href.js +0 -0
  50. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/util/jsenv_logger.js +0 -0
  51. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/util/preferences.js +0 -0
  52. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/util/responsive.js +0 -0
  53. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/util/util.js +0 -0
  54. package/src/{internal/dev_server/toolbar → dev/plugins/toolbar/client}/variant/variant.js +0 -0
  55. package/src/dev/plugins/toolbar/jsenv_plugin_toolbar.js +62 -0
  56. package/src/dev/start_dev_server.js +105 -0
  57. package/src/execute/execute.js +132 -0
  58. package/src/execute/run.js +208 -0
  59. package/src/execute/runtimes/browsers/chromium.js +8 -0
  60. package/src/execute/runtimes/browsers/firefox.js +7 -0
  61. package/src/execute/runtimes/browsers/from_playwright.js +464 -0
  62. package/src/{browser_runtimes.js → execute/runtimes/browsers/webkit.js} +4 -18
  63. package/src/{internal/node_launcher/child_process_options.js → execute/runtimes/node/child_exec_options.js} +25 -36
  64. package/src/{internal/node_launcher/node_controllable_file.mjs → execute/runtimes/node/controllable_file.mjs} +1 -18
  65. package/src/{internal/node_launcher/node_controllable_process.js → execute/runtimes/node/controlled_process.js} +128 -150
  66. package/src/execute/runtimes/node/exec_options.js +44 -0
  67. package/src/{internal/node_launcher → execute/runtimes/node}/kill_process_tree.js +3 -1
  68. package/src/execute/runtimes/node/node_process.js +92 -0
  69. package/src/execute/runtimes/node/node_worker_thread.js +28 -0
  70. package/src/omega/core_plugins/babel/babel_helper/babel_helper_directory.js +29 -0
  71. package/src/{internal/compile_server/js → omega/core_plugins/babel/babel_helper}/babel_plugin_babel_helpers_as_jsenv_imports.js +15 -19
  72. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/.eslintrc.cjs +0 -0
  73. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/AsyncGenerator/AsyncGenerator.js +0 -0
  74. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/AwaitValue/AwaitValue.js +0 -0
  75. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/applyDecoratorDescriptor/applyDecoratorDescriptor.js +0 -0
  76. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/arrayLikeToArray/arrayLikeToArray.js +0 -0
  77. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/arrayWithHoles/arrayWithHoles.js +0 -0
  78. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/arrayWithoutHoles/arrayWithoutHoles.js +0 -0
  79. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/assertThisInitialized/assertThisInitialized.js +0 -0
  80. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/asyncGeneratorDelegate/asyncGeneratorDelegate.js +0 -0
  81. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/asyncIterator/asyncIterator.js +0 -0
  82. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/asyncToGenerator/asyncToGenerator.js +0 -0
  83. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/awaitAsyncGenerator/awaitAsyncGenerator.js +0 -0
  84. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/classApplyDescriptorDestructureSet/classApplyDescriptorDestructureSet.js +0 -0
  85. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/classApplyDescriptorGet/classApplyDescriptorGet.js +0 -0
  86. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/classApplyDescriptorSet/classApplyDescriptorSet.js +0 -0
  87. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/classCallCheck/classCallCheck.js +0 -0
  88. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/classCheckPrivateStaticAccess/classCheckPrivateStaticAccess.js +0 -0
  89. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/classCheckPrivateStaticFieldDescriptor/classCheckPrivateStaticFieldDescriptor.js +0 -0
  90. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/classExtractFieldDescriptor/classExtractFieldDescriptor.js +0 -0
  91. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/classNameTDZError/classNameTDZError.js +0 -0
  92. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/classPrivateFieldDestructureSet/classPrivateFieldDestructureSet.js +0 -0
  93. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/classPrivateFieldGet/classPrivateFieldGet.js +0 -0
  94. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/classPrivateFieldLooseBase/classPrivateFieldLooseBase.js +0 -0
  95. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/classPrivateFieldLooseKey/classPrivateFieldLooseKey.js +0 -0
  96. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/classPrivateFieldSet/classPrivateFieldSet.js +0 -0
  97. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/classPrivateMethodGet/classPrivateMethodGet.js +0 -0
  98. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/classPrivateMethodSet/classPrivateMethodSet.js +0 -0
  99. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/classStaticPrivateFieldSpecGet/classStaticPrivateFieldSpecGet.js +0 -0
  100. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/classStaticPrivateFieldSpecSet/classStaticPrivateFieldSpecSet.js +0 -0
  101. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/classStaticPrivateMethodGet/classStaticPrivateMethodGet.js +0 -0
  102. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/classStaticPrivateMethodSet/classStaticPrivateMethodSet.js +0 -0
  103. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/construct/construct.js +0 -0
  104. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/createClass/createClass.js +0 -0
  105. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/createForOfIteratorHelper/createForOfIteratorHelper.js +0 -0
  106. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/createForOfIteratorHelperLoose/createForOfIteratorHelperLoose.js +0 -0
  107. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/createRawReactElement/createRawReactElement.js +0 -0
  108. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/createSuper/createSuper.js +0 -0
  109. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/decorate/decorate.js +0 -0
  110. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/defaults/defaults.js +0 -0
  111. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/defineEnumerableProperties/defineEnumerableProperties.js +0 -0
  112. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/defineProperty/defineProperty.js +0 -0
  113. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/extends/extends.js +0 -0
  114. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/get/get.js +0 -0
  115. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/getPrototypeOf/getPrototypeOf.js +0 -0
  116. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/inherits/inherits.js +0 -0
  117. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/inheritsLoose/inheritsLoose.js +0 -0
  118. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/initializerDefineProperty/initializerDefineProperty.js +0 -0
  119. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/initializerWarningHelper/initializerWarningHelper.js +0 -0
  120. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/instanceof/instanceof.js +0 -0
  121. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/interopRequireDefault/interopRequireDefault.js +0 -0
  122. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/interopRequireWildcard/interopRequireWildcard.js +0 -0
  123. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/isNativeFunction/isNativeFunction.js +0 -0
  124. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/isNativeReflectConstruct/isNativeReflectConstruct.js +0 -0
  125. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/iterableToArray/iterableToArray.js +0 -0
  126. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/iterableToArrayLimit/iterableToArrayLimit.js +0 -0
  127. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/iterableToArrayLimitLoose/iterableToArrayLimitLoose.js +0 -0
  128. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/jsx/jsx.js +0 -0
  129. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/maybeArrayLike/maybeArrayLike.js +0 -0
  130. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/newArrowCheck/newArrowCheck.js +0 -0
  131. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/nonIterableRest/nonIterableRest.js +0 -0
  132. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/nonIterableSpread/nonIterableSpread.js +0 -0
  133. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/objectDestructuringEmpty/objectDestructuringEmpty.js +0 -0
  134. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/objectSpread/objectSpread.js +0 -0
  135. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/objectSpread2/objectSpread2.js +0 -0
  136. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/objectWithoutProperties/objectWithoutProperties.js +0 -0
  137. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/objectWithoutPropertiesLoose/objectWithoutPropertiesLoose.js +0 -0
  138. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/possibleConstructorReturn/possibleConstructorReturn.js +0 -0
  139. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/readOnlyError/readOnlyError.js +0 -0
  140. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/readme.md +0 -0
  141. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/set/set.js +0 -0
  142. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/setPrototypeOf/setPrototypeOf.js +0 -0
  143. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/skipFirstGeneratorNext/skipFirstGeneratorNext.js +0 -0
  144. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/slicedToArray/slicedToArray.js +0 -0
  145. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/slicedToArrayLoose/slicedToArrayLoose.js +0 -0
  146. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/superPropBase/superPropBase.js +0 -0
  147. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/taggedTemplateLiteral/taggedTemplateLiteral.js +0 -0
  148. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/taggedTemplateLiteralLoose/taggedTemplateLiteralLoose.js +0 -0
  149. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/tdz/tdz.js +0 -0
  150. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/temporalRef/temporalRef.js +0 -0
  151. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/temporalUndefined/temporalUndefined.js +0 -0
  152. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/toArray/toArray.js +0 -0
  153. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/toConsumableArray/toConsumableArray.js +0 -0
  154. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/toPrimitive/toPrimitive.js +0 -0
  155. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/toPropertyKey/toPropertyKey.js +0 -0
  156. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/typeof/typeof.js +0 -0
  157. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/unsupportedIterableToArray/unsupportedIterableToArray.js +0 -0
  158. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/wrapAsyncGenerator/wrapAsyncGenerator.js +0 -0
  159. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/wrapNativeSuper/wrapNativeSuper.js +0 -0
  160. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/wrapRegExp/wrapRegExp.js +0 -0
  161. package/{helpers/babel → src/omega/core_plugins/babel/babel_helper/client}/writeOnlyError/writeOnlyError.js +0 -0
  162. package/src/omega/core_plugins/babel/global_this/babel_plugin_global_this_as_jsenv_import.js +35 -0
  163. package/{helpers/global-this/global-this.js → src/omega/core_plugins/babel/global_this/client/global_this.js} +0 -0
  164. package/src/omega/core_plugins/babel/helpers/babel_plugin_structure.js +187 -0
  165. package/src/{internal/features → omega/core_plugins/babel/helpers}/babel_plugins_compatibility.js +1 -24
  166. package/src/omega/core_plugins/babel/jsenv_plugin_babel.js +97 -0
  167. package/src/omega/core_plugins/babel/new_stylesheet/babel_plugin_new_stylesheet_as_jsenv_import.js +117 -0
  168. package/src/omega/core_plugins/babel/new_stylesheet/client/.eslintrc.cjs +24 -0
  169. package/{helpers/new_stylesheet → src/omega/core_plugins/babel/new_stylesheet/client}/new_stylesheet.js +0 -0
  170. package/src/omega/core_plugins/babel/regenerator_runtime/babel_plugin_regenerator_runtime_as_jsenv_import.js +34 -0
  171. package/{helpers/regenerator-runtime/regenerator-runtime.js → src/omega/core_plugins/babel/regenerator_runtime/client/regenerator_runtime.js} +0 -0
  172. package/src/omega/core_plugins/commonjs_globals/jsenv_plugin_commonjs_globals.js +169 -0
  173. package/src/omega/core_plugins/file_urls/jsenv_plugin_file_urls.js +67 -0
  174. package/src/omega/core_plugins/filesystem_magic/jsenv_plugin_filesystem_magic.js +58 -0
  175. package/src/{internal/browser_client → omega/core_plugins/html_supervisor/client}/error_in_document.js +10 -16
  176. package/src/{internal/browser_client → omega/core_plugins/html_supervisor/client}/error_in_notification.js +0 -0
  177. package/src/omega/core_plugins/html_supervisor/client/html_supervisor_installer.js +168 -0
  178. package/src/omega/core_plugins/html_supervisor/client/html_supervisor_setup.js +77 -0
  179. package/src/{internal/browser_client → omega/core_plugins/html_supervisor/client}/perf_browser.js +0 -0
  180. package/src/{internal/runtime_client → omega/core_plugins/html_supervisor/client}/uneval_exception.js +0 -0
  181. package/src/omega/core_plugins/html_supervisor/jsenv_plugin_html_supervisor.js +233 -0
  182. package/src/omega/core_plugins/import_assertions/helpers/babel_plugin_metadata_import_assertions.js +98 -0
  183. package/src/{internal/building/import_assertions → omega/core_plugins/import_assertions/helpers}/json_module.js +3 -2
  184. package/src/omega/core_plugins/import_assertions/helpers/text_module.js +6 -0
  185. package/src/omega/core_plugins/import_assertions/jsenv_plugin_import_assertions.js +211 -0
  186. package/src/omega/core_plugins/import_meta_scenarios/jsenv_plugin_import_meta_scenarios.js +80 -0
  187. package/src/omega/core_plugins/importmap/jsenv_plugin_importmap.js +212 -0
  188. package/src/omega/core_plugins/inline/client/inline_content.js +6 -0
  189. package/src/omega/core_plugins/inline/jsenv_plugin_data_urls.js +70 -0
  190. package/src/omega/core_plugins/inline/jsenv_plugin_inline.js +13 -0
  191. package/src/omega/core_plugins/inline/jsenv_plugin_inline_query_param.js +42 -0
  192. package/src/omega/core_plugins/inline/jsenv_plugin_js_and_css_inside_html.js +142 -0
  193. package/src/omega/core_plugins/inline/jsenv_plugin_new_inline_content.js +210 -0
  194. package/src/omega/core_plugins/leading_slash/jsenv_plugin_leading_slash.js +12 -0
  195. package/src/omega/core_plugins/node_esm_resolution/jsenv_plugin_node_esm_resolution.js +77 -0
  196. package/src/omega/core_plugins/url_resolution/jsenv_plugin_url_resolution.js +28 -0
  197. package/src/omega/core_plugins/url_version/jsenv_plugin_url_version.js +50 -0
  198. package/src/omega/core_plugins.js +39 -0
  199. package/src/omega/errors.js +168 -0
  200. package/src/omega/file_url_converter.js +63 -0
  201. package/src/omega/kitchen.js +777 -0
  202. package/src/omega/omega_server.js +129 -0
  203. package/src/omega/plugin_controller.js +240 -0
  204. package/src/omega/runtime_support/default_runtime_support.js +13 -0
  205. package/src/omega/runtime_support/features_compatibility.js +91 -0
  206. package/src/omega/runtime_support/runtime_support.js +20 -0
  207. package/src/omega/server/file_service.js +155 -0
  208. package/src/omega/server/user_agent.js +22 -0
  209. package/src/omega/url_graph/url_graph_load.js +68 -0
  210. package/src/omega/url_graph/url_graph_report.js +151 -0
  211. package/src/omega/url_graph/url_graph_sort.js +29 -0
  212. package/src/omega/url_graph/url_info_transformations.js +161 -0
  213. package/src/omega/url_graph.js +132 -0
  214. package/src/omega/url_mentions/css_url_mentions.js +63 -0
  215. package/src/omega/url_mentions/html_url_mentions.js +185 -0
  216. package/src/omega/url_mentions/js_module_url_mentions.js +91 -0
  217. package/src/omega/url_mentions/parse_url_mentions.js +37 -0
  218. package/src/omega/url_mentions/worker_classic_url_mentions.js +37 -0
  219. package/src/{internal/executing → test}/execute_plan.js +154 -211
  220. package/src/{execute_test_plan.js → test/execute_test_plan.js} +26 -81
  221. package/src/{internal/executing → test}/execution_colors.js +0 -0
  222. package/src/{internal/executing → test}/execution_steps.js +2 -8
  223. package/src/{internal/executing → test}/gc.js +0 -0
  224. package/src/test/logs_file_execution.js +223 -0
  225. package/dist/browser_client/asset-manifest.json +0 -4
  226. package/dist/browser_client/browser_client_fb33eaa4.js +0 -5320
  227. package/dist/browser_client/browser_client_fb33eaa4.js.map +0 -1089
  228. package/dist/build_manifest.js +0 -12
  229. package/dist/compile_proxy/asset-manifest.json +0 -4
  230. package/dist/compile_proxy/compile_proxy.html__inline__20_651d1e7b.js.map +0 -343
  231. package/dist/compile_proxy/compile_proxy_62f952c4.html +0 -2245
  232. package/dist/event_source_client/asset-manifest.json +0 -4
  233. package/dist/event_source_client/event_source_client_69f48287.js +0 -354
  234. package/dist/event_source_client/event_source_client_69f48287.js.map +0 -128
  235. package/dist/redirector/asset-manifest.json +0 -4
  236. package/dist/redirector/redirector.html__inline__12_171e07b4.js.map +0 -349
  237. package/dist/redirector/redirector_8117ec92.html +0 -2290
  238. package/dist/toolbar/asset-manifest.json +0 -13
  239. package/dist/toolbar/assets/compilation.css_7421bd55.map +0 -12
  240. package/dist/toolbar/assets/eventsource.css_c0c71e7b.map +0 -12
  241. package/dist/toolbar/assets/execution.css_f3377c10.map +0 -12
  242. package/dist/toolbar/assets/focus.css_896f3e45.map +0 -12
  243. package/dist/toolbar/assets/light_theme.css_5bff0336.map +0 -12
  244. package/dist/toolbar/assets/overflow_menu.css_9a0fc3d8.map +0 -12
  245. package/dist/toolbar/assets/settings.css_942b5a9e.map +0 -12
  246. package/dist/toolbar/assets/toolbar_main.css_b1c67dd7.map +0 -28
  247. package/dist/toolbar/assets/tooltip.css_a94a8bdd.map +0 -12
  248. package/dist/toolbar/toolbar_b0c9100c.html +0 -4976
  249. package/dist/toolbar/toolbar_main_f54c1bb0.js.map +0 -776
  250. package/dist/toolbar_injector/asset-manifest.json +0 -5
  251. package/dist/toolbar_injector/assets/jsenv_logo_192011c2.svg +0 -95
  252. package/dist/toolbar_injector/toolbar_injector_65b501eb.js +0 -976
  253. package/dist/toolbar_injector/toolbar_injector_65b501eb.js.map +0 -294
  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,737 @@
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 { createUrlVersionGenerator } from "@jsenv/utils/urls/url_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 { createBuilUrlsGenerator } from "./build_urls_generator.js"
42
+ import { injectVersionMappings } from "./inject_version_mappings.js"
43
+ import { jsenvPluginBundleJsModule } from "./plugins/bundle_js_module/jsenv_plugin_bundle_js_module.js"
44
+ import { jsenvPluginMinifyJs } from "./plugins/minify_js/jsenv_plugin_minify_js.js"
45
+ import { jsenvPluginMinifyHtml } from "./plugins/minify_html/jsenv_plugin_minify_html.js"
46
+
47
+ export const build = async ({
48
+ signal = new AbortController().signal,
49
+ logLevel = "info",
50
+ rootDirectoryUrl,
51
+ buildDirectoryUrl,
52
+ entryPoints = {},
53
+ // for now it's here but I think preview will become an other script
54
+ // that will just pass different options to build project
55
+ // and this function will be agnostic about "preview" concept
56
+ isPreview = false,
57
+ plugins = [],
58
+ htmlSupervisor,
59
+ nodeEsmResolution,
60
+ fileSystemMagicResolution,
61
+ babel,
62
+ runtimeSupport = defaultRuntimeSupport,
63
+ sourcemaps = isPreview ? "file" : false,
64
+
65
+ bundling = true,
66
+ minify = true,
67
+ versioning = "filename", // "filename", "search_param", "none"
68
+ lineBreakNormalization = process.platform === "win32",
69
+
70
+ writeOnFileSystem = true,
71
+ buildDirectoryClean = true,
72
+ baseUrl = "/",
73
+ }) => {
74
+ const logger = createLogger({ logLevel })
75
+ rootDirectoryUrl = assertAndNormalizeDirectoryUrl(rootDirectoryUrl)
76
+ buildDirectoryUrl = assertAndNormalizeDirectoryUrl(buildDirectoryUrl)
77
+ assertEntryPoints({ entryPoints })
78
+ if (!["filename", "search_param", "none"].includes(versioning)) {
79
+ throw new Error(
80
+ `Unexpected "versioning": must be "filename", "search_param" or "none"; got ${versioning}`,
81
+ )
82
+ }
83
+
84
+ const entryPointKeys = Object.keys(entryPoints)
85
+ if (entryPointKeys.length === 1) {
86
+ logger.info(`
87
+ build ${entryPointKeys[0]}`)
88
+ } else {
89
+ logger.info(`
90
+ build ${entryPointKeys.length} entry points`)
91
+ }
92
+ const rawGraph = createUrlGraph()
93
+ const prebuildTask = createTaskLog(logger, "prebuild")
94
+ let urlCount = 0
95
+ const rawGraphKitchen = createKitchen({
96
+ signal,
97
+ logger,
98
+ rootDirectoryUrl,
99
+ urlGraph: rawGraph,
100
+ plugins: [
101
+ ...plugins,
102
+ {
103
+ name: "jsenv:build_log",
104
+ appliesDuring: { build: true },
105
+ cooked: () => {
106
+ urlCount++
107
+ prebuildTask.setRightText(urlCount)
108
+ },
109
+ },
110
+ ...getCorePlugins({
111
+ htmlSupervisor,
112
+ nodeEsmResolution,
113
+ fileSystemMagicResolution,
114
+ babel,
115
+ }),
116
+ jsenvPluginBundleJsModule(),
117
+ ...(minify ? [jsenvPluginMinifyJs(), jsenvPluginMinifyHtml()] : []),
118
+ ],
119
+ scenario: "build",
120
+ sourcemaps,
121
+ })
122
+ const loadEntryFiles = (cookEntryFile) => {
123
+ Object.keys(entryPoints).forEach((key) => {
124
+ cookEntryFile({
125
+ trace: `"${key}" in entryPoints parameter`,
126
+ type: "entry_point",
127
+ specifier: key,
128
+ })
129
+ })
130
+ }
131
+ try {
132
+ await loadUrlGraph({
133
+ urlGraph: rawGraph,
134
+ kitchen: rawGraphKitchen,
135
+ outDirectoryUrl: new URL(`.jsenv/build/`, rootDirectoryUrl),
136
+ runtimeSupport,
137
+ startLoading: loadEntryFiles,
138
+ })
139
+ } catch (e) {
140
+ prebuildTask.fail()
141
+ throw e
142
+ }
143
+ // here we can perform many checks such as ensuring ressource hints are used
144
+ prebuildTask.done()
145
+ logger.debug(
146
+ `raw graph urls:
147
+ ${Object.keys(rawGraph.urlInfos).join("\n")}`,
148
+ )
149
+
150
+ const bundleUrlInfos = {}
151
+ if (bundling) {
152
+ const bundlers = {}
153
+ rawGraphKitchen.pluginController.plugins.forEach((plugin) => {
154
+ const bundle = plugin.bundle
155
+ if (!bundle) {
156
+ return
157
+ }
158
+ if (typeof bundle !== "object") {
159
+ throw new Error(
160
+ `bundle must be an object, found "${bundle}" on plugin named "${plugin.name}"`,
161
+ )
162
+ }
163
+ Object.keys(bundle).forEach((type) => {
164
+ const bundlerForThatType = bundlers[type]
165
+ if (bundlerForThatType) {
166
+ // first plugin to define a bundle hook wins
167
+ return
168
+ }
169
+ bundlers[type] = {
170
+ plugin,
171
+ bundleFunction: bundle[type],
172
+ urlInfos: [],
173
+ }
174
+ })
175
+ })
176
+ const addToBundlerIfAny = (rawUrlInfo) => {
177
+ const bundler = bundlers[rawUrlInfo.type]
178
+ if (bundler) {
179
+ bundler.urlInfos.push(rawUrlInfo)
180
+ return
181
+ }
182
+ }
183
+ Object.keys(rawGraph.urlInfos).forEach((rawUrl) => {
184
+ const rawUrlInfo = rawGraph.getUrlInfo(rawUrl)
185
+ if (!rawUrlInfo.data.isEntryPoint) {
186
+ return
187
+ }
188
+ addToBundlerIfAny(rawUrlInfo)
189
+ if (rawUrlInfo.type === "html") {
190
+ rawUrlInfo.dependencies.forEach((dependencyUrl) => {
191
+ const dependencyUrlInfo = rawGraph.getUrlInfo(dependencyUrl)
192
+ if (dependencyUrlInfo.isInline) {
193
+ if (dependencyUrlInfo.type === "js_module") {
194
+ // bundle inline script type module deps
195
+ dependencyUrlInfo.references.forEach((inlineScriptRef) => {
196
+ if (inlineScriptRef.type === "js_import_export") {
197
+ addToBundlerIfAny(rawGraph.getUrlInfo(inlineScriptRef.url))
198
+ }
199
+ })
200
+ }
201
+ // inline content cannot be bundled
202
+ return
203
+ }
204
+ addToBundlerIfAny(dependencyUrlInfo)
205
+ })
206
+ return
207
+ }
208
+ })
209
+ await Object.keys(bundlers).reduce(async (previous, type) => {
210
+ await previous
211
+ const bundler = bundlers[type]
212
+ const urlInfosToBundle = bundler.urlInfos
213
+ if (urlInfosToBundle.length === 0) {
214
+ return
215
+ }
216
+ const bundleTask = createTaskLog(logger, `bundle "${type}"`)
217
+ try {
218
+ const bundlerGeneratedUrlInfos =
219
+ await rawGraphKitchen.pluginController.callAsyncHook(
220
+ {
221
+ plugin: bundler.plugin,
222
+ hookName: "bundle",
223
+ value: bundler.bundleFunction,
224
+ },
225
+ urlInfosToBundle,
226
+ {
227
+ signal,
228
+ logger,
229
+ rootDirectoryUrl,
230
+ buildDirectoryUrl,
231
+ urlGraph: rawGraph,
232
+ runtimeSupport,
233
+ sourcemaps,
234
+ },
235
+ )
236
+ Object.keys(bundlerGeneratedUrlInfos).forEach((url) => {
237
+ const bundleUrlInfo = bundlerGeneratedUrlInfos[url]
238
+ const rawUrlInfo = rawGraph.getUrlInfo(url)
239
+ bundleUrlInfos[url] = {
240
+ type,
241
+ ...bundleUrlInfo,
242
+ data: {
243
+ ...(rawUrlInfo ? rawUrlInfo.data : {}),
244
+ ...bundleUrlInfo.data,
245
+ fromBundle: true,
246
+ },
247
+ }
248
+ })
249
+ } catch (e) {
250
+ bundleTask.fail()
251
+ throw e
252
+ }
253
+ bundleTask.done()
254
+ }, Promise.resolve())
255
+ }
256
+
257
+ const buildUrlsGenerator = createBuilUrlsGenerator({
258
+ buildDirectoryUrl,
259
+ })
260
+ const rawUrls = {}
261
+ const buildUrls = {}
262
+ const finalGraph = createUrlGraph()
263
+ const optimizeHooks = rawGraphKitchen.pluginController.addHook("optimize")
264
+ const finalGraphKitchen = createKitchen({
265
+ logger,
266
+ rootDirectoryUrl,
267
+ urlGraph: finalGraph,
268
+ // Inline content, such as <script> inside html, is transformed during the previous phase.
269
+ // If we read the inline content it would be considered as the original content.
270
+ // - It could be "fixed" by taking into account sourcemap and consider sourcemap sources
271
+ // as the original content.
272
+ // - But it would not work when sourcemap are not generated
273
+ // - would be a bit slower
274
+ // - So instead of reading the inline content directly, we search into raw graph
275
+ // to get "originalContent" and "sourcemap"
276
+ loadInlineUrlInfos: (finalUrlInfo) => {
277
+ const rawUrl = finalUrlInfo.data.rawUrl
278
+ const bundleUrlInfo = bundleUrlInfos[rawUrl]
279
+ const urlInfo = bundleUrlInfo || finalUrlInfo
280
+ const rawUrlInfo = rawGraph.getUrlInfo(rawUrl)
281
+ return {
282
+ originalContent: rawUrlInfo ? rawUrlInfo.originalContent : undefined,
283
+ sourcemap: bundleUrlInfo
284
+ ? bundleUrlInfo.sourcemap
285
+ : rawUrlInfo
286
+ ? rawUrlInfo.sourcemap
287
+ : undefined,
288
+ contentType: urlInfo.contentType,
289
+ content: urlInfo.content,
290
+ }
291
+ },
292
+ plugins: [
293
+ jsenvPluginInline(),
294
+ {
295
+ name: "jsenv:postbuild",
296
+ appliesDuring: { build: true },
297
+ resolve: (reference) => {
298
+ if (reference.specifier[0] === "/") {
299
+ const url = new URL(reference.specifier.slice(1), rootDirectoryUrl)
300
+ .href
301
+ return url
302
+ }
303
+ const parentUrlInfo = finalGraph.getUrlInfo(reference.parentUrl)
304
+ if (parentUrlInfo && parentUrlInfo.data.fromBundle) {
305
+ // code generated by rollup contains specifier relative
306
+ // to the generated file.
307
+ // This file does not exists yet we must resolve against the raw url, not the build url
308
+ const parentRawUrl = parentUrlInfo.data.rawUrl
309
+ const rawUrl = new URL(reference.specifier, parentRawUrl).href
310
+ return rawUrl
311
+ }
312
+ return new URL(reference.specifier, reference.parentUrl).href
313
+ },
314
+ normalize: (reference) => {
315
+ if (!reference.url.startsWith("file:")) {
316
+ return null
317
+ }
318
+ // already a build url
319
+ const rawUrl = rawUrls[reference.url]
320
+ if (rawUrl) {
321
+ reference.data.rawUrl = rawUrl
322
+ return reference.url
323
+ }
324
+ const bundleUrlInfo = bundleUrlInfos[reference.url]
325
+ // from rollup or postcss
326
+ if (bundleUrlInfo) {
327
+ const buildUrl = buildUrlsGenerator.generate(
328
+ reference.url,
329
+ bundleUrlInfo,
330
+ )
331
+ reference.data.rawUrl = reference.url
332
+ rawUrls[buildUrl] = reference.url
333
+ return buildUrl
334
+ }
335
+ const rawUrlInfo = rawGraph.getUrlInfo(reference.url)
336
+ // files from root directory but not given to rollup nor postcss
337
+ if (rawUrlInfo) {
338
+ const buildUrl = buildUrlsGenerator.generate(
339
+ reference.url,
340
+ rawUrlInfo,
341
+ )
342
+ reference.data.rawUrl = reference.url
343
+ rawUrls[buildUrl] = reference.url
344
+ return buildUrl
345
+ }
346
+ if (reference.isInline) {
347
+ const rawUrl = Object.keys(rawGraph.urlInfos).find((url) => {
348
+ const rawUrlInfo = rawGraph.urlInfos[url]
349
+ if (!rawUrlInfo.isInline) {
350
+ return false
351
+ }
352
+ if (rawUrlInfo.content === reference.content) {
353
+ return true
354
+ }
355
+ return false
356
+ })
357
+ if (!rawUrl) {
358
+ throw new Error(`cannot find raw url`)
359
+ }
360
+ const rawUrlInfo = rawGraph.getUrlInfo(rawUrl)
361
+ const parentUrlInfo = finalGraph.getUrlInfo(reference.parentUrl)
362
+ const buildUrl = buildUrlsGenerator.generate(
363
+ reference.url,
364
+ rawUrlInfo,
365
+ parentUrlInfo,
366
+ )
367
+ rawUrls[buildUrl] = reference.url
368
+ reference.data.rawUrl = rawUrl
369
+ return buildUrl
370
+ }
371
+ if (reference.type === "sourcemap_comment") {
372
+ // inherit parent build url
373
+ return generateSourcemapUrl(reference.parentUrl)
374
+ }
375
+ // files generated during the final graph (sourcemaps)
376
+ // const finalUrlInfo = finalGraph.getUrlInfo(url)
377
+ const buildUrl = buildUrlsGenerator.generate(reference.url, {
378
+ data: {},
379
+ type: "asset",
380
+ })
381
+ return buildUrl
382
+ },
383
+ formatReferencedUrl: (reference) => {
384
+ if (!reference.url.startsWith("file:")) {
385
+ return null
386
+ }
387
+ if (!urlIsInsideOf(reference.url, buildDirectoryUrl)) {
388
+ throw new Error(
389
+ `urls should be inside build directory at this stage, found "${reference.url}"`,
390
+ )
391
+ }
392
+ // if a file is in the same directory we could prefer the relative notation
393
+ // but to keep things simple let's keep the notation relative to baseUrl for now
394
+ const specifier = `${baseUrl}${urlToRelativeUrl(
395
+ reference.url,
396
+ buildDirectoryUrl,
397
+ )}`
398
+ buildUrls[specifier] = reference.url
399
+ return specifier
400
+ },
401
+ load: (finalUrlInfo) => {
402
+ const rawUrl = finalUrlInfo.data.rawUrl
403
+ const bundleUrlInfo = bundleUrlInfos[rawUrl]
404
+ const urlInfo = bundleUrlInfo || rawGraph.getUrlInfo(rawUrl)
405
+ return {
406
+ data: bundleUrlInfo ? bundleUrlInfo.data : undefined,
407
+ originalContent: urlInfo.originalContent,
408
+ contentType: urlInfo.contentType,
409
+ content: urlInfo.content,
410
+ sourcemap: urlInfo.sourcemap,
411
+ }
412
+ },
413
+ transform: {
414
+ html: (urlInfo) => {
415
+ const htmlAst = parseHtmlString(urlInfo.content, {
416
+ storeOriginalPositions: false,
417
+ })
418
+ return {
419
+ content: stringifyHtmlAst(htmlAst, {
420
+ removeOriginalPositionAttributes: true,
421
+ }),
422
+ }
423
+ },
424
+ },
425
+ },
426
+ {
427
+ name: "jsenv:optimize",
428
+ appliesDuring: { build: true },
429
+ transform: async (urlInfo, context) => {
430
+ if (optimizeHooks.length) {
431
+ await rawGraphKitchen.pluginController.callAsyncHooks(
432
+ "optimize",
433
+ urlInfo,
434
+ context,
435
+ async (optimizeReturnValue) => {
436
+ await finalGraphKitchen.urlInfoTransformer.applyFinalTransformations(
437
+ urlInfo,
438
+ optimizeReturnValue,
439
+ )
440
+ },
441
+ )
442
+ }
443
+ },
444
+ },
445
+ ],
446
+ scenario: "build",
447
+ sourcemaps,
448
+ })
449
+ const buildTask = createTaskLog(logger, "build")
450
+ try {
451
+ await loadUrlGraph({
452
+ urlGraph: finalGraph,
453
+ kitchen: finalGraphKitchen,
454
+ outDirectoryUrl: new URL(".jsenv/postbuild/", rootDirectoryUrl),
455
+ runtimeSupport,
456
+ startLoading: loadEntryFiles,
457
+ })
458
+ } catch (e) {
459
+ buildTask.fail()
460
+ throw e
461
+ }
462
+ buildTask.done()
463
+
464
+ logger.debug(
465
+ `graph urls pre-versioning:
466
+ ${Object.keys(finalGraph.urlInfos).join("\n")}`,
467
+ )
468
+ if (versioning !== "none") {
469
+ const versioningTask = createTaskLog(logger, "inject version in urls")
470
+ try {
471
+ const urlsSorted = sortUrlGraphByDependencies(finalGraph)
472
+ urlsSorted.forEach((url) => {
473
+ if (url.startsWith("data:")) {
474
+ return
475
+ }
476
+ const urlInfo = finalGraph.getUrlInfo(url)
477
+ if (urlInfo.type === "sourcemap") {
478
+ return
479
+ }
480
+ if (urlInfo.isInline) {
481
+ return
482
+ }
483
+ const urlVersionGenerator = createUrlVersionGenerator()
484
+ urlVersionGenerator.augmentWithContent({
485
+ content: urlInfo.content,
486
+ contentType: urlInfo.contentType,
487
+ lineBreakNormalization,
488
+ })
489
+ urlInfo.dependencies.forEach((dependencyUrl) => {
490
+ const dependencyUrlInfo = finalGraph.getUrlInfo(dependencyUrl)
491
+ if (dependencyUrlInfo.isInline) {
492
+ // this content is part of the file, no need to take into account twice
493
+ return
494
+ }
495
+ if (dependencyUrlInfo.data.version) {
496
+ urlVersionGenerator.augmentWithDependencyVersion(
497
+ dependencyUrlInfo.data.version,
498
+ )
499
+ } else {
500
+ // because all dependencies are know, if the dependency has no version
501
+ // it means there is a circular dependency between this file
502
+ // and it's dependency
503
+ // in that case we'll use the dependency content
504
+ urlVersionGenerator.augmentWithContent({
505
+ content: dependencyUrlInfo.content,
506
+ contentType: dependencyUrlInfo.contentType,
507
+ lineBreakNormalization,
508
+ })
509
+ }
510
+ })
511
+ urlInfo.data.version = urlVersionGenerator.generate()
512
+ urlInfo.data.versionedUrl = injectVersionIntoBuildUrl({
513
+ buildUrl: urlInfo.url,
514
+ version: urlInfo.data.version,
515
+ versioning,
516
+ })
517
+ })
518
+ const versionMappings = {}
519
+ const usedVersionMappings = []
520
+ const versioningKitchen = createKitchen({
521
+ logger,
522
+ rootDirectoryUrl: buildDirectoryUrl,
523
+ urlGraph: finalGraph,
524
+ loadInlineUrlInfos: (versionedUrlInfo) => {
525
+ const rawUrlInfo = rawGraph.getUrlInfo(versionedUrlInfo.data.rawUrl)
526
+ const finalUrlInfo = finalGraph.getUrlInfo(versionedUrlInfo.url)
527
+ return {
528
+ originalContent: rawUrlInfo
529
+ ? rawUrlInfo.originalContent
530
+ : undefined,
531
+ sourcemap: finalUrlInfo ? finalUrlInfo.sourcemap : undefined,
532
+ contentType: versionedUrlInfo.contentType,
533
+ content: versionedUrlInfo.content,
534
+ }
535
+ },
536
+ plugins: [
537
+ jsenvPluginInline({
538
+ allowEscapeForVersioning: true,
539
+ }),
540
+ {
541
+ name: "jsenv:versioning",
542
+ appliesDuring: { build: true },
543
+ resolve: ({ parentUrl, specifier }) => {
544
+ const buildUrl = buildUrls[specifier]
545
+ if (buildUrl) {
546
+ return buildUrl
547
+ }
548
+ const url = new URL(specifier, parentUrl).href
549
+ return url
550
+ },
551
+ formatReferencedUrl: (reference) => {
552
+ if (reference.isInline) {
553
+ return null
554
+ }
555
+ // specifier comes from "normalize" hook done a bit earlier in this file
556
+ // we want to get back their build url to access their infos
557
+ const referencedUrlInfo = finalGraph.getUrlInfo(reference.url)
558
+ if (referencedUrlInfo.data.isEntryPoint) {
559
+ return reference.specifier
560
+ }
561
+ // data:* urls and so on
562
+ if (!referencedUrlInfo.url.startsWith("file:")) {
563
+ return null
564
+ }
565
+ const versionedUrl = referencedUrlInfo.data.versionedUrl
566
+ if (!versionedUrl) {
567
+ // happens for sourcemap
568
+ return `${baseUrl}${urlToRelativeUrl(
569
+ referencedUrlInfo.url,
570
+ buildDirectoryUrl,
571
+ )}`
572
+ }
573
+ const versionedSpecifier = `${baseUrl}${urlToRelativeUrl(
574
+ versionedUrl,
575
+ buildDirectoryUrl,
576
+ )}`
577
+ versionMappings[reference.specifier] = versionedSpecifier
578
+ const parentUrlInfo = finalGraph.getUrlInfo(reference.parentUrl)
579
+ if (parentUrlInfo.jsQuote) {
580
+ // the url is inline inside js quotes
581
+ usedVersionMappings.push(reference.specifier)
582
+ return () =>
583
+ `${parentUrlInfo.jsQuote}+__v__(${JSON.stringify(
584
+ reference.specifier,
585
+ )})+${parentUrlInfo.jsQuote}`
586
+ }
587
+ if (
588
+ reference.type === "js_import_meta_url_pattern" ||
589
+ reference.subtype === "import_dynamic"
590
+ ) {
591
+ usedVersionMappings.push(reference.specifier)
592
+ return () => `__v__(${JSON.stringify(reference.specifier)})`
593
+ }
594
+ return versionedSpecifier
595
+ },
596
+ load: ({ url }) => {
597
+ const urlInfo = finalGraph.getUrlInfo(url)
598
+ return {
599
+ originalContent: urlInfo.originalContent,
600
+ contentType: urlInfo.contentType,
601
+ content: urlInfo.content,
602
+ sourcemap: urlInfo.sourcemap,
603
+ }
604
+ },
605
+ },
606
+ ],
607
+ scenario: "build",
608
+ sourcemaps,
609
+ })
610
+ // arrange state before reloading all files
611
+ Object.keys(finalGraph.urlInfos).forEach((url) => {
612
+ const urlInfo = finalGraph.urlInfos[url]
613
+ urlInfo.data.promise = null
614
+ })
615
+ await loadUrlGraph({
616
+ urlGraph: finalGraph,
617
+ kitchen: versioningKitchen,
618
+ runtimeSupport,
619
+ startLoading: loadEntryFiles,
620
+ })
621
+ if (usedVersionMappings.length) {
622
+ const versionMappingsNeeded = {}
623
+ usedVersionMappings.forEach((specifier) => {
624
+ versionMappingsNeeded[specifier] = versionMappings[specifier]
625
+ })
626
+ await Promise.all(
627
+ Object.keys(finalGraph.urlInfos).map(async (buildUrl) => {
628
+ const buildUrlInfo = finalGraph.getUrlInfo(buildUrl)
629
+ if (!buildUrlInfo.data.isEntryPoint) {
630
+ return
631
+ }
632
+ await injectVersionMappings(buildUrlInfo, {
633
+ kitchen: finalGraphKitchen,
634
+ versionMappings: versionMappingsNeeded,
635
+ })
636
+ }),
637
+ )
638
+ }
639
+ } catch (e) {
640
+ versioningTask.fail()
641
+ throw e
642
+ }
643
+ versioningTask.done()
644
+ }
645
+
646
+ const buildFileContents = {}
647
+ const buildInlineFileContents = {}
648
+ const buildManifest = {}
649
+ Object.keys(finalGraph.urlInfos).forEach((url) => {
650
+ if (!url.startsWith("file:")) {
651
+ return
652
+ }
653
+ const buildUrlInfo = finalGraph.getUrlInfo(url)
654
+ const versionedUrl = buildUrlInfo.data.versionedUrl
655
+ const useVersionedUrl = versionedUrl && !buildUrlInfo.data.isEntryPoint
656
+ const buildUrl = useVersionedUrl ? versionedUrl : buildUrlInfo.url
657
+ if (!urlIsInsideOf(buildUrl, buildDirectoryUrl)) {
658
+ throw new Error(`build url outside build directory`)
659
+ }
660
+ const buildRelativeUrl = urlToRelativeUrl(buildUrl, buildDirectoryUrl)
661
+ if (buildUrlInfo.isInline) {
662
+ buildInlineFileContents[buildRelativeUrl] = buildUrlInfo.content
663
+ } else {
664
+ buildFileContents[buildRelativeUrl] = buildUrlInfo.content
665
+ }
666
+ if (useVersionedUrl) {
667
+ const buildRelativeUrlWithoutVersioning = urlToRelativeUrl(
668
+ buildUrlInfo.url,
669
+ buildDirectoryUrl,
670
+ )
671
+ buildManifest[buildRelativeUrlWithoutVersioning] = buildRelativeUrl
672
+ }
673
+ })
674
+ logger.debug(
675
+ `graph urls post-versioning:
676
+ ${Object.keys(finalGraph.urlInfos).join("\n")}`,
677
+ )
678
+
679
+ if (writeOnFileSystem) {
680
+ if (buildDirectoryClean) {
681
+ await ensureEmptyDirectory(buildDirectoryUrl)
682
+ }
683
+ const buildRelativeUrls = Object.keys(buildFileContents)
684
+ await Promise.all(
685
+ buildRelativeUrls.map(async (buildRelativeUrl) => {
686
+ await writeFile(
687
+ new URL(buildRelativeUrl, buildDirectoryUrl),
688
+ buildFileContents[buildRelativeUrl],
689
+ )
690
+ }),
691
+ )
692
+ }
693
+ logger.info(createUrlGraphSummary(finalGraph, { title: "build files" }))
694
+ return {
695
+ buildFileContents,
696
+ buildInlineFileContents,
697
+ buildManifest,
698
+ }
699
+ }
700
+
701
+ const injectVersionIntoBuildUrl = ({ buildUrl, version, versioning }) => {
702
+ if (versioning === "search_param") {
703
+ return injectQueryParams(buildUrl, {
704
+ v: version,
705
+ })
706
+ }
707
+ const basename = urlToBasename(buildUrl)
708
+ const extension = urlToExtension(buildUrl)
709
+ const versionedFilename = `${basename}-${version}${extension}`
710
+ const versionedUrl = setUrlFilename(buildUrl, versionedFilename)
711
+ return versionedUrl
712
+ }
713
+
714
+ const assertEntryPoints = ({ entryPoints }) => {
715
+ if (typeof entryPoints !== "object" || entryPoints === null) {
716
+ throw new TypeError(`entryPoints must be an object, got ${entryPoints}`)
717
+ }
718
+ const keys = Object.keys(entryPoints)
719
+ keys.forEach((key) => {
720
+ if (!key.startsWith("./")) {
721
+ throw new TypeError(
722
+ `unexpected key in entryPoints, all keys must start with ./ but found ${key}`,
723
+ )
724
+ }
725
+ const value = entryPoints[key]
726
+ if (typeof value !== "string") {
727
+ throw new TypeError(
728
+ `unexpected value in entryPoints, all values must be strings found ${value} for key ${key}`,
729
+ )
730
+ }
731
+ if (value.includes("/")) {
732
+ throw new TypeError(
733
+ `unexpected value in entryPoints, all values must be plain strings (no "/") but found ${value} for key ${key}`,
734
+ )
735
+ }
736
+ })
737
+ }