@jsenv/core 27.0.0-alpha.9 → 27.0.0-alpha.92

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 (277) hide show
  1. package/dist/babel_helpers/AsyncGenerator/AsyncGenerator.js +95 -0
  2. package/dist/babel_helpers/AwaitValue/AwaitValue.js +3 -0
  3. package/dist/babel_helpers/applyDecoratorDescriptor/applyDecoratorDescriptor.js +29 -0
  4. package/dist/babel_helpers/applyDecs/applyDecs.js +756 -0
  5. package/dist/babel_helpers/arrayLikeToArray/arrayLikeToArray.js +9 -0
  6. package/dist/babel_helpers/arrayWithHoles/arrayWithHoles.js +4 -0
  7. package/dist/babel_helpers/arrayWithoutHoles/arrayWithoutHoles.js +5 -0
  8. package/dist/babel_helpers/assertThisInitialized/assertThisInitialized.js +8 -0
  9. package/dist/babel_helpers/asyncGeneratorDelegate/asyncGeneratorDelegate.js +52 -0
  10. package/dist/babel_helpers/asyncIterator/asyncIterator.js +78 -0
  11. package/dist/babel_helpers/asyncToGenerator/asyncToGenerator.js +39 -0
  12. package/dist/babel_helpers/awaitAsyncGenerator/awaitAsyncGenerator.js +4 -0
  13. package/dist/babel_helpers/classApplyDescriptorDestructureSet/classApplyDescriptorDestructureSet.js +24 -0
  14. package/dist/babel_helpers/classApplyDescriptorGet/classApplyDescriptorGet.js +7 -0
  15. package/dist/babel_helpers/classApplyDescriptorSet/classApplyDescriptorSet.js +14 -0
  16. package/dist/babel_helpers/classCallCheck/classCallCheck.js +5 -0
  17. package/dist/babel_helpers/classCheckPrivateStaticAccess/classCheckPrivateStaticAccess.js +5 -0
  18. package/dist/babel_helpers/classCheckPrivateStaticFieldDescriptor/classCheckPrivateStaticFieldDescriptor.js +6 -0
  19. package/dist/babel_helpers/classExtractFieldDescriptor/classExtractFieldDescriptor.js +8 -0
  20. package/dist/babel_helpers/classNameTDZError/classNameTDZError.js +4 -0
  21. package/dist/babel_helpers/classPrivateFieldDestructureSet/classPrivateFieldDestructureSet.js +6 -0
  22. package/dist/babel_helpers/classPrivateFieldGet/classPrivateFieldGet.js +6 -0
  23. package/dist/babel_helpers/classPrivateFieldLooseBase/classPrivateFieldLooseBase.js +7 -0
  24. package/dist/babel_helpers/classPrivateFieldLooseKey/classPrivateFieldLooseKey.js +5 -0
  25. package/dist/babel_helpers/classPrivateFieldSet/classPrivateFieldSet.js +7 -0
  26. package/dist/babel_helpers/classPrivateMethodGet/classPrivateMethodGet.js +7 -0
  27. package/dist/babel_helpers/classPrivateMethodSet/classPrivateMethodSet.js +3 -0
  28. package/dist/babel_helpers/classStaticPrivateFieldSpecGet/classStaticPrivateFieldSpecGet.js +8 -0
  29. package/dist/babel_helpers/classStaticPrivateFieldSpecSet/classStaticPrivateFieldSpecSet.js +9 -0
  30. package/dist/babel_helpers/classStaticPrivateMethodGet/classStaticPrivateMethodGet.js +5 -0
  31. package/dist/babel_helpers/classStaticPrivateMethodSet/classStaticPrivateMethodSet.js +3 -0
  32. package/dist/babel_helpers/construct/construct.js +15 -0
  33. package/dist/babel_helpers/createClass/createClass.js +18 -0
  34. package/dist/babel_helpers/createForOfIteratorHelper/createForOfIteratorHelper.js +63 -0
  35. package/dist/babel_helpers/createForOfIteratorHelperLoose/createForOfIteratorHelperLoose.js +22 -0
  36. package/dist/babel_helpers/createRawReactElement/createRawReactElement.js +50 -0
  37. package/dist/babel_helpers/createSuper/createSuper.js +22 -0
  38. package/dist/babel_helpers/decorate/decorate.js +622 -0
  39. package/dist/babel_helpers/defaults/defaults.js +14 -0
  40. package/dist/babel_helpers/defineEnumerableProperties/defineEnumerableProperties.js +26 -0
  41. package/dist/babel_helpers/defineProperty/defineProperty.js +19 -0
  42. package/dist/babel_helpers/extends/extends.js +16 -0
  43. package/dist/babel_helpers/get/get.js +21 -0
  44. package/dist/babel_helpers/getPrototypeOf/getPrototypeOf.js +2 -0
  45. package/dist/babel_helpers/identity/identity.js +3 -0
  46. package/dist/babel_helpers/inherits/inherits.js +21 -0
  47. package/dist/babel_helpers/inheritsLoose/inheritsLoose.js +6 -0
  48. package/dist/babel_helpers/initializerDefineProperty/initializerDefineProperty.js +10 -0
  49. package/dist/babel_helpers/initializerWarningHelper/initializerWarningHelper.js +3 -0
  50. package/dist/babel_helpers/instanceof/instanceof.js +7 -0
  51. package/dist/babel_helpers/interopRequireDefault/interopRequireDefault.js +5 -0
  52. package/dist/babel_helpers/interopRequireWildcard/interopRequireWildcard.js +49 -0
  53. package/dist/babel_helpers/isNativeFunction/isNativeFunction.js +4 -0
  54. package/dist/babel_helpers/isNativeReflectConstruct/isNativeReflectConstruct.js +21 -0
  55. package/dist/babel_helpers/iterableToArray/iterableToArray.js +3 -0
  56. package/dist/babel_helpers/iterableToArrayLimit/iterableToArrayLimit.js +38 -0
  57. package/dist/babel_helpers/iterableToArrayLimitLoose/iterableToArrayLimitLoose.js +13 -0
  58. package/dist/babel_helpers/jsx/jsx.js +49 -0
  59. package/dist/babel_helpers/maybeArrayLike/maybeArrayLike.js +10 -0
  60. package/dist/babel_helpers/newArrowCheck/newArrowCheck.js +5 -0
  61. package/dist/babel_helpers/nonIterableRest/nonIterableRest.js +3 -0
  62. package/dist/babel_helpers/nonIterableSpread/nonIterableSpread.js +3 -0
  63. package/dist/babel_helpers/objectDestructuringEmpty/objectDestructuringEmpty.js +3 -0
  64. package/dist/babel_helpers/objectSpread/objectSpread.js +22 -0
  65. package/dist/babel_helpers/objectSpread2/objectSpread2.js +41 -0
  66. package/dist/babel_helpers/objectWithoutProperties/objectWithoutProperties.js +20 -0
  67. package/dist/babel_helpers/objectWithoutPropertiesLoose/objectWithoutPropertiesLoose.js +15 -0
  68. package/dist/babel_helpers/possibleConstructorReturn/possibleConstructorReturn.js +10 -0
  69. package/dist/babel_helpers/readOnlyError/readOnlyError.js +4 -0
  70. package/dist/babel_helpers/set/set.js +51 -0
  71. package/dist/babel_helpers/setPrototypeOf/setPrototypeOf.js +5 -0
  72. package/dist/babel_helpers/skipFirstGeneratorNext/skipFirstGeneratorNext.js +8 -0
  73. package/dist/babel_helpers/slicedToArray/slicedToArray.js +5 -0
  74. package/dist/babel_helpers/slicedToArrayLoose/slicedToArrayLoose.js +7 -0
  75. package/dist/babel_helpers/superPropBase/superPropBase.js +10 -0
  76. package/dist/babel_helpers/taggedTemplateLiteral/taggedTemplateLiteral.js +11 -0
  77. package/dist/babel_helpers/taggedTemplateLiteralLoose/taggedTemplateLiteralLoose.js +8 -0
  78. package/dist/babel_helpers/tdz/tdz.js +4 -0
  79. package/dist/babel_helpers/temporalRef/temporalRef.js +5 -0
  80. package/dist/babel_helpers/temporalUndefined/temporalUndefined.js +3 -0
  81. package/dist/babel_helpers/toArray/toArray.js +5 -0
  82. package/dist/babel_helpers/toConsumableArray/toConsumableArray.js +5 -0
  83. package/dist/babel_helpers/toPrimitive/toPrimitive.js +14 -0
  84. package/dist/babel_helpers/toPropertyKey/toPropertyKey.js +5 -0
  85. package/dist/babel_helpers/typeof/typeof.js +7 -0
  86. package/dist/babel_helpers/unsupportedIterableToArray/unsupportedIterableToArray.js +10 -0
  87. package/dist/babel_helpers/wrapAsyncGenerator/wrapAsyncGenerator.js +7 -0
  88. package/dist/babel_helpers/wrapNativeSuper/wrapNativeSuper.js +35 -0
  89. package/dist/babel_helpers/wrapRegExp/wrapRegExp.js +67 -0
  90. package/dist/babel_helpers/writeOnlyError/writeOnlyError.js +4 -0
  91. package/dist/html/explorer.html +557 -0
  92. package/dist/js/controllable_file.mjs +227 -0
  93. package/dist/js/event_source_client.js +528 -0
  94. package/dist/js/global_this.js +32 -0
  95. package/dist/js/html_supervisor_installer.js +522 -0
  96. package/dist/js/html_supervisor_setup.js +82 -0
  97. package/dist/js/import_meta_hot.js +84 -0
  98. package/dist/js/inline_content.js +8 -0
  99. package/dist/js/new_stylesheet.js +409 -0
  100. package/dist/js/regenerator_runtime.js +721 -0
  101. package/dist/js/s.js +429 -0
  102. package/dist/js/uneval.js +804 -0
  103. package/dist/main.js +25163 -0
  104. package/dist/other/jsenv.png +0 -0
  105. package/dist/s.js +626 -0
  106. package/dist/s.js.map +205 -0
  107. package/package.json +61 -57
  108. package/readme.md +6 -14
  109. package/src/build/build.js +1040 -551
  110. package/src/build/build_urls_generator.js +65 -25
  111. package/src/build/graph_utils.js +31 -0
  112. package/src/build/inject_global_version_mappings.js +93 -0
  113. package/src/build/inject_service_worker_urls.js +79 -0
  114. package/src/build/resync_ressource_hints.js +114 -0
  115. package/src/build/start_build_server.js +217 -0
  116. package/src/build/version_generator.js +60 -0
  117. package/src/dev/plugins/explorer/client/explorer.html +1 -1
  118. package/src/dev/plugins/explorer/jsenv_plugin_explorer.js +9 -14
  119. package/src/dev/plugins/toolbar/client/util/fetching.js +1 -1
  120. package/src/dev/plugins/toolbar/jsenv_plugin_toolbar.js +6 -4
  121. package/src/dev/start_dev_server.js +173 -38
  122. package/src/execute/execute.js +35 -8
  123. package/src/execute/run.js +21 -57
  124. package/src/execute/runtimes/browsers/from_playwright.js +224 -153
  125. package/src/execute/runtimes/node/child_exec_options.js +1 -1
  126. package/src/execute/runtimes/node/controllable_file.mjs +26 -10
  127. package/src/execute/runtimes/node/kill_process_tree.js +2 -4
  128. package/src/execute/runtimes/node/node_execution_performance.js +67 -0
  129. package/src/execute/runtimes/node/node_process.js +288 -39
  130. package/src/helpers/command/command.js +73 -0
  131. package/src/{dev/plugins/autoreload/client/event_source_connection.js → helpers/event_source/event_source.js} +2 -0
  132. package/src/helpers/event_source/sse_service.js +53 -0
  133. package/src/helpers/worker_reload.js +57 -0
  134. package/src/main.js +27 -0
  135. package/src/omega/{runtime_support/features_compatibility.js → compat/features_compats.js} +30 -7
  136. package/src/omega/{runtime_support/runtime_support.js → compat/runtime_compat.js} +16 -17
  137. package/src/omega/errors.js +63 -67
  138. package/src/omega/fetched_content_compliance.js +24 -0
  139. package/src/omega/file_url_converter.js +9 -51
  140. package/src/omega/kitchen.js +607 -466
  141. package/src/omega/omega_server.js +2 -3
  142. package/src/omega/server/file_service.js +88 -41
  143. package/src/omega/server/user_agent.js +5 -5
  144. package/src/omega/url_graph/{url_graph_sort.js → sort_by_dependencies.js} +3 -5
  145. package/src/omega/url_graph/url_graph_load.js +31 -23
  146. package/src/omega/url_graph/url_graph_report.js +94 -51
  147. package/src/omega/url_graph/url_info_transformations.js +54 -24
  148. package/src/omega/url_graph.js +88 -19
  149. package/src/omega/url_specifier_encoding.js +59 -0
  150. package/src/omega/web_workers.js +42 -0
  151. package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/autoreload_preference.js +0 -0
  152. package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/event_source_client.js +19 -12
  153. package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/reload.js +6 -3
  154. package/src/{dev/plugins/autoreload → plugins/autoreload/dev_sse}/client/url_helpers.js +0 -0
  155. package/src/plugins/autoreload/dev_sse/jsenv_plugin_dev_sse_client.js +41 -0
  156. package/src/plugins/autoreload/dev_sse/jsenv_plugin_dev_sse_server.js +204 -0
  157. package/src/plugins/autoreload/jsenv_plugin_autoreload.js +25 -0
  158. package/src/plugins/autoreload/jsenv_plugin_hmr.js +35 -0
  159. package/src/plugins/bundling/css/bundle_css.js +140 -0
  160. package/src/plugins/bundling/js_classic_workers/bundle_js_classic_workers.js +13 -0
  161. package/src/plugins/bundling/js_module/bundle_js_module.js +362 -0
  162. package/src/plugins/bundling/jsenv_plugin_bundling.js +54 -0
  163. package/src/plugins/cache_control/jsenv_plugin_cache_control.js +34 -0
  164. package/src/{omega/core_plugins → plugins}/commonjs_globals/jsenv_plugin_commonjs_globals.js +56 -43
  165. package/src/plugins/file_urls/jsenv_plugin_file_urls.js +190 -0
  166. package/src/{omega/core_plugins → plugins}/html_supervisor/client/error_in_document.js +0 -0
  167. package/src/{omega/core_plugins → plugins}/html_supervisor/client/error_in_notification.js +0 -0
  168. package/src/plugins/html_supervisor/client/html_supervisor_installer.js +254 -0
  169. package/src/plugins/html_supervisor/client/html_supervisor_setup.js +82 -0
  170. package/src/{omega/core_plugins → plugins}/html_supervisor/client/perf_browser.js +0 -0
  171. package/src/{omega/core_plugins → plugins}/html_supervisor/client/uneval_exception.js +0 -0
  172. package/src/plugins/html_supervisor/jsenv_plugin_html_supervisor.js +239 -0
  173. package/src/plugins/http_urls/jsenv_plugin_http_urls.js +16 -0
  174. package/src/{dev/plugins/autoreload → plugins/import_meta_hot}/babel_plugin_metadata_import_meta_hot.js +4 -5
  175. package/src/{dev/plugins/autoreload → plugins/import_meta_hot}/client/import_meta_hot.js +3 -1
  176. package/src/{dev/plugins/autoreload → plugins/import_meta_hot}/html_hot_dependencies.js +15 -18
  177. package/src/plugins/import_meta_hot/jsenv_plugin_import_meta_hot.js +100 -0
  178. package/src/{omega/core_plugins → plugins}/import_meta_scenarios/jsenv_plugin_import_meta_scenarios.js +35 -10
  179. package/src/plugins/import_meta_url/client/import_meta_url_browser.js +52 -0
  180. package/src/plugins/import_meta_url/client/import_meta_url_commonjs.mjs +9 -0
  181. package/src/{omega/core_plugins → plugins}/importmap/jsenv_plugin_importmap.js +56 -54
  182. package/src/plugins/inject_globals/inject_globals.js +57 -0
  183. package/src/plugins/inject_globals/jsenv_plugin_inject_globals.js +24 -0
  184. package/src/{omega/core_plugins → plugins}/inline/client/inline_content.js +0 -0
  185. package/src/{omega/core_plugins → plugins}/inline/jsenv_plugin_data_urls.js +22 -21
  186. package/src/plugins/inline/jsenv_plugin_html_inline_content.js +159 -0
  187. package/src/plugins/inline/jsenv_plugin_inline.js +36 -0
  188. package/src/{omega/core_plugins → plugins}/inline/jsenv_plugin_inline_query_param.js +8 -11
  189. package/src/plugins/inline/jsenv_plugin_js_inline_content.js +294 -0
  190. package/src/plugins/leading_slash/jsenv_plugin_leading_slash.js +13 -0
  191. package/src/plugins/minification/css/minify_css.js +9 -0
  192. package/src/plugins/minification/html/minify_html.js +13 -0
  193. package/src/{build/plugins/minify_js/jsenv_plugin_minify_js.js → plugins/minification/js/minify_js.js} +6 -22
  194. package/src/plugins/minification/jsenv_plugin_minification.js +78 -0
  195. package/src/plugins/minification/json/minify_json.js +8 -0
  196. package/src/plugins/node_esm_resolution/jsenv_plugin_node_esm_resolution.js +162 -0
  197. package/src/plugins/node_runtime/jsenv_plugin_node_runtime.js +12 -0
  198. package/src/{omega → plugins}/plugin_controller.js +57 -12
  199. package/src/plugins/plugins.js +91 -0
  200. package/src/plugins/transpilation/as_js_classic/client/s.js +429 -0
  201. package/src/plugins/transpilation/as_js_classic/helpers/babel_plugin_transform_import_meta_url.js +47 -0
  202. package/src/plugins/transpilation/as_js_classic/helpers/systemjs_old.js +43 -0
  203. package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic.js +209 -0
  204. package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic_html.js +282 -0
  205. package/src/plugins/transpilation/as_js_classic/jsenv_plugin_as_js_classic_workers.js +55 -0
  206. package/src/{omega/core_plugins → plugins/transpilation}/babel/global_this/babel_plugin_global_this_as_jsenv_import.js +2 -3
  207. package/src/{omega/core_plugins → plugins/transpilation}/babel/global_this/client/global_this.js +0 -0
  208. package/src/{omega/core_plugins → plugins/transpilation}/babel/helpers/babel_plugin_babel_helpers_as_jsenv_imports.js +3 -4
  209. package/src/{omega/core_plugins → plugins/transpilation}/babel/helpers/babel_plugin_structure.js +14 -17
  210. package/src/{omega/core_plugins → plugins/transpilation}/babel/helpers/babel_plugins_compatibility.js +0 -0
  211. package/src/{omega/core_plugins → plugins/transpilation}/babel/jsenv_plugin_babel.js +40 -33
  212. package/src/{omega/core_plugins → plugins/transpilation}/babel/new_stylesheet/babel_plugin_new_stylesheet_as_jsenv_import.js +32 -9
  213. package/src/{omega/core_plugins → plugins/transpilation}/babel/new_stylesheet/client/new_stylesheet.js +0 -0
  214. package/src/{omega/core_plugins → plugins/transpilation}/babel/regenerator_runtime/babel_plugin_regenerator_runtime_as_jsenv_import.js +2 -3
  215. package/src/{omega/core_plugins → plugins/transpilation}/babel/regenerator_runtime/client/regenerator_runtime.js +0 -0
  216. package/src/plugins/transpilation/babel/require_babel_plugin.js +8 -0
  217. package/src/plugins/transpilation/css_parcel/jsenv_plugin_css_parcel.js +18 -0
  218. package/src/plugins/transpilation/import_assertions/jsenv_plugin_import_assertions.js +184 -0
  219. package/src/plugins/transpilation/jsenv_plugin_top_level_await.js +80 -0
  220. package/src/plugins/transpilation/jsenv_plugin_transpilation.js +46 -0
  221. package/src/plugins/url_analysis/css/css_urls.js +48 -0
  222. package/src/plugins/url_analysis/html/html_urls.js +257 -0
  223. package/src/plugins/url_analysis/js/js_urls.js +69 -0
  224. package/src/plugins/url_analysis/jsenv_plugin_url_analysis.js +110 -0
  225. package/src/plugins/url_analysis/webmanifest/webmanifest_urls.js +20 -0
  226. package/src/{omega/core_plugins → plugins}/url_resolution/jsenv_plugin_url_resolution.js +9 -5
  227. package/src/plugins/url_version/jsenv_plugin_url_version.js +28 -0
  228. package/src/require_from_jsenv.js +3 -0
  229. package/src/test/coverage/babel_plugin_instrument.js +82 -0
  230. package/src/test/coverage/coverage_reporter_html_directory.js +36 -0
  231. package/src/test/coverage/coverage_reporter_json_file.js +22 -0
  232. package/src/test/coverage/coverage_reporter_text_log.js +19 -0
  233. package/src/test/coverage/empty_coverage_factory.js +52 -0
  234. package/src/test/coverage/file_by_file_coverage.js +25 -0
  235. package/src/test/coverage/istanbul_coverage_composition.js +28 -0
  236. package/src/test/coverage/istanbul_coverage_map_from_coverage.js +16 -0
  237. package/src/test/coverage/list_files_not_covered.js +15 -0
  238. package/src/test/coverage/missing_coverage.js +41 -0
  239. package/src/test/coverage/report_to_coverage.js +196 -0
  240. package/src/test/coverage/v8_and_istanbul.js +37 -0
  241. package/src/test/coverage/v8_coverage_composition.js +24 -0
  242. package/src/test/coverage/v8_coverage_from_directory.js +87 -0
  243. package/src/test/coverage/v8_coverage_to_istanbul.js +99 -0
  244. package/src/test/execute_plan.js +87 -46
  245. package/src/test/execute_test_plan.js +40 -28
  246. package/src/test/execution_steps.js +2 -5
  247. package/src/test/logs_file_execution.js +56 -49
  248. package/main.js +0 -19
  249. package/src/build/inject_version_mappings.js +0 -62
  250. package/src/build/plugins/bundle_js_module/jsenv_plugin_bundle_js_module.js +0 -227
  251. package/src/build/plugins/minify_html/jsenv_plugin_minify_html.js +0 -30
  252. package/src/dev/plugins/autoreload/jsenv_plugin_autoreload.js +0 -374
  253. package/src/dev/plugins/autoreload/sse_service.js +0 -149
  254. package/src/execute/runtimes/node/controlled_process.js +0 -316
  255. package/src/omega/core_plugins/babel/new_stylesheet/client/.eslintrc.cjs +0 -24
  256. package/src/omega/core_plugins/file_urls/jsenv_plugin_file_urls.js +0 -67
  257. package/src/omega/core_plugins/filesystem_magic/jsenv_plugin_filesystem_magic.js +0 -58
  258. package/src/omega/core_plugins/html_supervisor/client/html_supervisor_installer.js +0 -168
  259. package/src/omega/core_plugins/html_supervisor/client/html_supervisor_setup.js +0 -77
  260. package/src/omega/core_plugins/html_supervisor/jsenv_plugin_html_supervisor.js +0 -233
  261. package/src/omega/core_plugins/import_assertions/helpers/babel_plugin_metadata_import_assertions.js +0 -98
  262. package/src/omega/core_plugins/import_assertions/helpers/json_module.js +0 -12
  263. package/src/omega/core_plugins/import_assertions/helpers/text_module.js +0 -6
  264. package/src/omega/core_plugins/import_assertions/jsenv_plugin_import_assertions.js +0 -211
  265. package/src/omega/core_plugins/inline/jsenv_plugin_inline.js +0 -13
  266. package/src/omega/core_plugins/inline/jsenv_plugin_js_and_css_inside_html.js +0 -142
  267. package/src/omega/core_plugins/inline/jsenv_plugin_new_inline_content.js +0 -207
  268. package/src/omega/core_plugins/leading_slash/jsenv_plugin_leading_slash.js +0 -12
  269. package/src/omega/core_plugins/node_esm_resolution/jsenv_plugin_node_esm_resolution.js +0 -77
  270. package/src/omega/core_plugins/url_version/jsenv_plugin_url_version.js +0 -50
  271. package/src/omega/core_plugins.js +0 -39
  272. package/src/omega/runtime_support/default_runtime_support.js +0 -13
  273. package/src/omega/url_mentions/css_url_mentions.js +0 -63
  274. package/src/omega/url_mentions/html_url_mentions.js +0 -185
  275. package/src/omega/url_mentions/js_module_url_mentions.js +0 -91
  276. package/src/omega/url_mentions/parse_url_mentions.js +0 -37
  277. package/src/omega/url_mentions/worker_classic_url_mentions.js +0 -37
@@ -0,0 +1,52 @@
1
+ import { readFile } from "@jsenv/filesystem"
2
+ import { resolveUrl } from "@jsenv/urls"
3
+ import { Abort } from "@jsenv/abort"
4
+ import { applyBabelPlugins } from "@jsenv/ast"
5
+
6
+ import { requireFromJsenv } from "@jsenv/core/src/require_from_jsenv.js"
7
+ import { babelPluginInstrument } from "./babel_plugin_instrument.js"
8
+
9
+ export const relativeUrlToEmptyCoverage = async (
10
+ relativeUrl,
11
+ { signal, rootDirectoryUrl },
12
+ ) => {
13
+ const operation = Abort.startOperation()
14
+ operation.addAbortSignal(signal)
15
+
16
+ try {
17
+ const fileUrl = resolveUrl(relativeUrl, rootDirectoryUrl)
18
+ const content = await readFile(fileUrl, { as: "string" })
19
+
20
+ operation.throwIfAborted()
21
+ const { metadata } = await applyBabelPlugins({
22
+ babelPlugins: [[babelPluginInstrument, { rootDirectoryUrl }]],
23
+ urlInfo: {
24
+ originalUrl: fileUrl,
25
+ content,
26
+ },
27
+ })
28
+ const { coverage } = metadata
29
+ if (!coverage) {
30
+ throw new Error(`missing coverage for file`)
31
+ }
32
+ // https://github.com/gotwarlost/istanbul/blob/bc84c315271a5dd4d39bcefc5925cfb61a3d174a/lib/command/common/run-with-cover.js#L229
33
+ Object.keys(coverage.s).forEach(function (key) {
34
+ coverage.s[key] = 0
35
+ })
36
+ return coverage
37
+ } catch (e) {
38
+ if (e && e.code === "PARSE_ERROR") {
39
+ // return an empty coverage for that file when
40
+ // it contains a syntax error
41
+ return createEmptyCoverage(relativeUrl)
42
+ }
43
+ throw e
44
+ } finally {
45
+ await operation.end()
46
+ }
47
+ }
48
+
49
+ const createEmptyCoverage = (relativeUrl) => {
50
+ const { createFileCoverage } = requireFromJsenv("istanbul-lib-coverage")
51
+ return createFileCoverage(relativeUrl).toJSON()
52
+ }
@@ -0,0 +1,25 @@
1
+ import {
2
+ urlToRelativeUrl,
3
+ fileSystemPathToUrl,
4
+ isFileSystemPath,
5
+ } from "@jsenv/urls"
6
+
7
+ export const normalizeFileByFileCoveragePaths = (
8
+ fileByFileCoverage,
9
+ rootDirectoryUrl,
10
+ ) => {
11
+ const fileByFileNormalized = {}
12
+ Object.keys(fileByFileCoverage).forEach((key) => {
13
+ const fileCoverage = fileByFileCoverage[key]
14
+ const { path } = fileCoverage
15
+ const url = isFileSystemPath(path)
16
+ ? fileSystemPathToUrl(path)
17
+ : new URL(path, rootDirectoryUrl).href
18
+ const relativeUrl = urlToRelativeUrl(url, rootDirectoryUrl)
19
+ fileByFileNormalized[`./${relativeUrl}`] = {
20
+ ...fileCoverage,
21
+ path: `./${relativeUrl}`,
22
+ }
23
+ })
24
+ return fileByFileNormalized
25
+ }
@@ -0,0 +1,28 @@
1
+ import { requireFromJsenv } from "@jsenv/core/src/require_from_jsenv.js"
2
+
3
+ export const composeTwoFileByFileIstanbulCoverages = (
4
+ firstFileByFileIstanbulCoverage,
5
+ secondFileByFileIstanbulCoverage,
6
+ ) => {
7
+ const fileByFileIstanbulCoverage = {}
8
+ Object.keys(firstFileByFileIstanbulCoverage).forEach((key) => {
9
+ fileByFileIstanbulCoverage[key] = firstFileByFileIstanbulCoverage[key]
10
+ })
11
+ Object.keys(secondFileByFileIstanbulCoverage).forEach((key) => {
12
+ const firstCoverage = firstFileByFileIstanbulCoverage[key]
13
+ const secondCoverage = secondFileByFileIstanbulCoverage[key]
14
+ fileByFileIstanbulCoverage[key] = firstCoverage
15
+ ? merge(firstCoverage, secondCoverage)
16
+ : secondCoverage
17
+ })
18
+
19
+ return fileByFileIstanbulCoverage
20
+ }
21
+
22
+ const merge = (firstIstanbulCoverage, secondIstanbulCoverage) => {
23
+ const { createFileCoverage } = requireFromJsenv("istanbul-lib-coverage")
24
+ const istanbulFileCoverageObject = createFileCoverage(firstIstanbulCoverage)
25
+ istanbulFileCoverageObject.merge(secondIstanbulCoverage)
26
+ const istanbulCoverage = istanbulFileCoverageObject.toJSON()
27
+ return istanbulCoverage
28
+ }
@@ -0,0 +1,16 @@
1
+ import { requireFromJsenv } from "@jsenv/core/src/require_from_jsenv.js"
2
+
3
+ export const istanbulCoverageMapFromCoverage = (coverage) => {
4
+ const { createCoverageMap } = requireFromJsenv("istanbul-lib-coverage")
5
+
6
+ const coverageAdjusted = {}
7
+ Object.keys(coverage).forEach((key) => {
8
+ coverageAdjusted[key.slice(2)] = {
9
+ ...coverage[key],
10
+ path: key.slice(2),
11
+ }
12
+ })
13
+
14
+ const coverageMap = createCoverageMap(coverageAdjusted)
15
+ return coverageMap
16
+ }
@@ -0,0 +1,15 @@
1
+ import { collectFiles } from "@jsenv/filesystem"
2
+
3
+ export const listRelativeFileUrlToCover = async ({
4
+ signal,
5
+ rootDirectoryUrl,
6
+ coverageConfig,
7
+ }) => {
8
+ const matchingFileResultArray = await collectFiles({
9
+ signal,
10
+ directoryUrl: rootDirectoryUrl,
11
+ associations: { cover: coverageConfig },
12
+ predicate: ({ cover }) => cover,
13
+ })
14
+ return matchingFileResultArray.map(({ relativeUrl }) => relativeUrl)
15
+ }
@@ -0,0 +1,41 @@
1
+ import { Abort } from "@jsenv/abort"
2
+
3
+ import { listRelativeFileUrlToCover } from "./list_files_not_covered.js"
4
+ import { relativeUrlToEmptyCoverage } from "./empty_coverage_factory.js"
5
+
6
+ export const getMissingFileByFileCoverage = async ({
7
+ signal,
8
+ rootDirectoryUrl,
9
+ coverageConfig,
10
+ fileByFileCoverage,
11
+ }) => {
12
+ const relativeUrlsToCover = await listRelativeFileUrlToCover({
13
+ signal,
14
+ rootDirectoryUrl,
15
+ coverageConfig,
16
+ })
17
+ const relativeUrlsMissing = relativeUrlsToCover.filter((relativeUrlToCover) =>
18
+ Object.keys(fileByFileCoverage).every((key) => {
19
+ return key !== `./${relativeUrlToCover}`
20
+ }),
21
+ )
22
+
23
+ const operation = Abort.startOperation()
24
+ operation.addAbortSignal(signal)
25
+ const missingFileByFileCoverage = {}
26
+ await relativeUrlsMissing.reduce(async (previous, relativeUrlMissing) => {
27
+ operation.throwIfAborted()
28
+ await previous
29
+ await operation.withSignal(async (signal) => {
30
+ const emptyCoverage = await relativeUrlToEmptyCoverage(
31
+ relativeUrlMissing,
32
+ {
33
+ signal,
34
+ rootDirectoryUrl,
35
+ },
36
+ )
37
+ missingFileByFileCoverage[`./${relativeUrlMissing}`] = emptyCoverage
38
+ })
39
+ }, Promise.resolve())
40
+ return missingFileByFileCoverage
41
+ }
@@ -0,0 +1,196 @@
1
+ import { readFile } from "@jsenv/filesystem"
2
+ import { Abort } from "@jsenv/abort"
3
+
4
+ import {
5
+ visitNodeV8Directory,
6
+ filterV8Coverage,
7
+ } from "./v8_coverage_from_directory.js"
8
+ import { composeTwoV8Coverages } from "./v8_coverage_composition.js"
9
+ import { composeTwoFileByFileIstanbulCoverages } from "./istanbul_coverage_composition.js"
10
+ import { v8CoverageToIstanbul } from "./v8_coverage_to_istanbul.js"
11
+ import { composeV8AndIstanbul } from "./v8_and_istanbul.js"
12
+ import { normalizeFileByFileCoveragePaths } from "./file_by_file_coverage.js"
13
+ import { getMissingFileByFileCoverage } from "./missing_coverage.js"
14
+
15
+ export const reportToCoverage = async (
16
+ report,
17
+ {
18
+ signal,
19
+ logger,
20
+ rootDirectoryUrl,
21
+ coverageConfig,
22
+ coverageIncludeMissing,
23
+ urlShouldBeCovered,
24
+ coverageForceIstanbul,
25
+ coverageV8ConflictWarning,
26
+ },
27
+ ) => {
28
+ // collect v8 and istanbul coverage from executions
29
+ let { v8Coverage, fileByFileIstanbulCoverage } = await getCoverageFromReport({
30
+ signal,
31
+ report,
32
+ onMissing: ({ file, executionResult, executionName }) => {
33
+ // several reasons not to have coverage here:
34
+ // 1. the file we executed did not import an instrumented file.
35
+ // - a test file without import
36
+ // - a test file importing only file excluded from coverage
37
+ // - a coverDescription badly configured so that we don't realize
38
+ // a file should be covered
39
+
40
+ // 2. the file we wanted to executed timedout
41
+ // - infinite loop
42
+ // - too extensive operation
43
+ // - a badly configured or too low allocatedMs for that execution.
44
+
45
+ // 3. the file we wanted to execute contains syntax-error
46
+
47
+ // in any scenario we are fine because
48
+ // coverDescription will generate empty coverage for files
49
+ // that were suppose to be coverage but were not.
50
+ if (
51
+ executionResult.status === "completed" &&
52
+ executionResult.runtimeName !== "node" &&
53
+ !process.env.NODE_V8_COVERAGE
54
+ ) {
55
+ logger.warn(
56
+ `No execution.coverageFileUrl from execution named "${executionName}" of ${file}`,
57
+ )
58
+ }
59
+ },
60
+ })
61
+
62
+ if (!coverageForceIstanbul && process.env.NODE_V8_COVERAGE) {
63
+ await visitNodeV8Directory({
64
+ logger,
65
+ signal,
66
+ NODE_V8_COVERAGE: process.env.NODE_V8_COVERAGE,
67
+ onV8Coverage: (nodeV8Coverage) => {
68
+ const nodeV8CoverageLight = filterV8Coverage(nodeV8Coverage, {
69
+ urlShouldBeCovered,
70
+ })
71
+ v8Coverage = v8Coverage
72
+ ? composeTwoV8Coverages(v8Coverage, nodeV8CoverageLight)
73
+ : nodeV8CoverageLight
74
+ },
75
+ })
76
+ }
77
+
78
+ // try to merge v8 with istanbul, if any
79
+ let fileByFileCoverage
80
+ if (v8Coverage) {
81
+ let v8FileByFileCoverage = await v8CoverageToIstanbul(v8Coverage, {
82
+ signal,
83
+ })
84
+
85
+ v8FileByFileCoverage = normalizeFileByFileCoveragePaths(
86
+ v8FileByFileCoverage,
87
+ rootDirectoryUrl,
88
+ )
89
+
90
+ if (fileByFileIstanbulCoverage) {
91
+ fileByFileIstanbulCoverage = normalizeFileByFileCoveragePaths(
92
+ fileByFileIstanbulCoverage,
93
+ rootDirectoryUrl,
94
+ )
95
+ fileByFileCoverage = composeV8AndIstanbul(
96
+ v8FileByFileCoverage,
97
+ fileByFileIstanbulCoverage,
98
+ { coverageV8ConflictWarning },
99
+ )
100
+ } else {
101
+ fileByFileCoverage = v8FileByFileCoverage
102
+ }
103
+ }
104
+ // get istanbul only
105
+ else if (fileByFileIstanbulCoverage) {
106
+ fileByFileCoverage = normalizeFileByFileCoveragePaths(
107
+ fileByFileIstanbulCoverage,
108
+ rootDirectoryUrl,
109
+ )
110
+ }
111
+ // no coverage found in execution (or zero file where executed)
112
+ else {
113
+ fileByFileCoverage = {}
114
+ }
115
+
116
+ // now add coverage for file not covered
117
+ if (coverageIncludeMissing) {
118
+ const missingFileByFileCoverage = await getMissingFileByFileCoverage({
119
+ signal,
120
+ rootDirectoryUrl,
121
+ coverageConfig,
122
+ fileByFileCoverage,
123
+ })
124
+ Object.assign(
125
+ fileByFileCoverage,
126
+ normalizeFileByFileCoveragePaths(
127
+ missingFileByFileCoverage,
128
+ rootDirectoryUrl,
129
+ ),
130
+ )
131
+ }
132
+
133
+ return fileByFileCoverage
134
+ }
135
+
136
+ const getCoverageFromReport = async ({ signal, report, onMissing }) => {
137
+ const operation = Abort.startOperation()
138
+ operation.addAbortSignal(signal)
139
+
140
+ try {
141
+ let v8Coverage
142
+ let fileByFileIstanbulCoverage
143
+
144
+ // collect v8 and istanbul coverage from executions
145
+ await Object.keys(report).reduce(async (previous, file) => {
146
+ operation.throwIfAborted()
147
+ await previous
148
+
149
+ const executionResultForFile = report[file]
150
+ await Object.keys(executionResultForFile).reduce(
151
+ async (previous, executionName) => {
152
+ operation.throwIfAborted()
153
+ await previous
154
+
155
+ const executionResultForFileOnRuntime =
156
+ executionResultForFile[executionName]
157
+ const { coverageFileUrl } = executionResultForFileOnRuntime
158
+ if (!coverageFileUrl) {
159
+ onMissing({
160
+ executionName,
161
+ file,
162
+ executionResult: executionResultForFileOnRuntime,
163
+ })
164
+ return
165
+ }
166
+
167
+ const executionCoverage = await readFile(coverageFileUrl, {
168
+ as: "json",
169
+ })
170
+ if (isV8Coverage(executionCoverage)) {
171
+ v8Coverage = v8Coverage
172
+ ? composeTwoV8Coverages(v8Coverage, executionCoverage)
173
+ : executionCoverage
174
+ } else {
175
+ fileByFileIstanbulCoverage = fileByFileIstanbulCoverage
176
+ ? composeTwoFileByFileIstanbulCoverages(
177
+ fileByFileIstanbulCoverage,
178
+ executionCoverage,
179
+ )
180
+ : executionCoverage
181
+ }
182
+ },
183
+ Promise.resolve(),
184
+ )
185
+ }, Promise.resolve())
186
+
187
+ return {
188
+ v8Coverage,
189
+ fileByFileIstanbulCoverage,
190
+ }
191
+ } finally {
192
+ await operation.end()
193
+ }
194
+ }
195
+
196
+ const isV8Coverage = (coverage) => Boolean(coverage.result)
@@ -0,0 +1,37 @@
1
+ import { createDetailedMessage } from "@jsenv/log"
2
+
3
+ export const composeV8AndIstanbul = (
4
+ v8FileByFileCoverage,
5
+ istanbulFileByFileCoverage,
6
+ { coverageV8ConflictWarning },
7
+ ) => {
8
+ const fileByFileCoverage = {}
9
+ const v8Files = Object.keys(v8FileByFileCoverage)
10
+ const istanbulFiles = Object.keys(istanbulFileByFileCoverage)
11
+
12
+ v8Files.forEach((key) => {
13
+ fileByFileCoverage[key] = v8FileByFileCoverage[key]
14
+ })
15
+ istanbulFiles.forEach((key) => {
16
+ const v8Coverage = v8FileByFileCoverage[key]
17
+ if (v8Coverage) {
18
+ if (coverageV8ConflictWarning) {
19
+ console.warn(
20
+ createDetailedMessage(
21
+ `Coverage conflict on "${key}", found two coverage that cannot be merged together: v8 and istanbul. The istanbul coverage will be ignored.`,
22
+ {
23
+ details: `This happens when a file is executed on a runtime using v8 coverage (node or chromium) and on runtime using istanbul coverage (firefox or webkit)`,
24
+ suggestion:
25
+ "You can disable this warning with coverageV8ConflictWarning: false",
26
+ },
27
+ ),
28
+ )
29
+ }
30
+ fileByFileCoverage[key] = v8Coverage
31
+ } else {
32
+ fileByFileCoverage[key] = istanbulFileByFileCoverage[key]
33
+ }
34
+ })
35
+
36
+ return fileByFileCoverage
37
+ }
@@ -0,0 +1,24 @@
1
+ import { requireFromJsenv } from "@jsenv/core/src/require_from_jsenv.js"
2
+
3
+ export const composeTwoV8Coverages = (firstV8Coverage, secondV8Coverage) => {
4
+ if (secondV8Coverage.result.length === 0) {
5
+ return firstV8Coverage
6
+ }
7
+
8
+ // eslint-disable-next-line import/no-unresolved
9
+ const { mergeProcessCovs } = requireFromJsenv("@c88/v8-coverage")
10
+ // "mergeProcessCovs" do not preserves source-map-cache during the merge
11
+ // so we store sourcemap cache now
12
+ const sourceMapCache = {}
13
+ const visit = (coverageReport) => {
14
+ if (coverageReport["source-map-cache"]) {
15
+ Object.assign(sourceMapCache, coverageReport["source-map-cache"])
16
+ }
17
+ }
18
+ visit(firstV8Coverage)
19
+ visit(secondV8Coverage)
20
+ const v8Coverage = mergeProcessCovs([firstV8Coverage, secondV8Coverage])
21
+ v8Coverage["source-map-cache"] = sourceMapCache
22
+
23
+ return v8Coverage
24
+ }
@@ -0,0 +1,87 @@
1
+ import {
2
+ assertAndNormalizeDirectoryUrl,
3
+ readDirectory,
4
+ readFile,
5
+ } from "@jsenv/filesystem"
6
+ import { resolveUrl } from "@jsenv/urls"
7
+ import { createDetailedMessage } from "@jsenv/log"
8
+ import { Abort } from "@jsenv/abort"
9
+
10
+ export const visitNodeV8Directory = async ({
11
+ logger,
12
+ signal,
13
+ NODE_V8_COVERAGE,
14
+ onV8Coverage,
15
+ maxMsWaitingForNodeToWriteCoverageFile = 2000,
16
+ }) => {
17
+ const operation = Abort.startOperation()
18
+ operation.addAbortSignal(signal)
19
+
20
+ const tryReadDirectory = async () => {
21
+ const dirContent = await readDirectory(NODE_V8_COVERAGE)
22
+ if (dirContent.length > 0) {
23
+ return dirContent
24
+ }
25
+ logger.warn(`v8 coverage directory is empty at ${NODE_V8_COVERAGE}`)
26
+ return dirContent
27
+ }
28
+
29
+ try {
30
+ operation.throwIfAborted()
31
+ const dirContent = await tryReadDirectory()
32
+
33
+ const coverageDirectoryUrl =
34
+ assertAndNormalizeDirectoryUrl(NODE_V8_COVERAGE)
35
+ await dirContent.reduce(async (previous, dirEntry) => {
36
+ operation.throwIfAborted()
37
+ await previous
38
+
39
+ const dirEntryUrl = resolveUrl(dirEntry, coverageDirectoryUrl)
40
+ const tryReadJsonFile = async (timeSpentTrying = 0) => {
41
+ const fileContent = await readFile(dirEntryUrl, { as: "string" })
42
+ if (fileContent === "") {
43
+ if (timeSpentTrying < 400) {
44
+ await new Promise((resolve) => setTimeout(resolve, 200))
45
+ return tryReadJsonFile(timeSpentTrying + 200)
46
+ }
47
+ console.warn(`Coverage JSON file is empty at ${dirEntryUrl}`)
48
+ return null
49
+ }
50
+
51
+ try {
52
+ const fileAsJson = JSON.parse(fileContent)
53
+ return fileAsJson
54
+ } catch (e) {
55
+ if (timeSpentTrying < maxMsWaitingForNodeToWriteCoverageFile) {
56
+ await new Promise((resolve) => setTimeout(resolve, 200))
57
+ return tryReadJsonFile(timeSpentTrying + 200)
58
+ }
59
+ console.warn(
60
+ createDetailedMessage(`Error while reading coverage file`, {
61
+ "error stack": e.stack,
62
+ "file": dirEntryUrl,
63
+ }),
64
+ )
65
+ return null
66
+ }
67
+ }
68
+
69
+ const fileContent = await tryReadJsonFile()
70
+ if (fileContent) {
71
+ onV8Coverage(fileContent)
72
+ }
73
+ }, Promise.resolve())
74
+ } finally {
75
+ await operation.end()
76
+ }
77
+ }
78
+
79
+ export const filterV8Coverage = (v8Coverage, { urlShouldBeCovered }) => {
80
+ const v8CoverageFiltered = {
81
+ ...v8Coverage,
82
+ result: v8Coverage.result.filter((fileReport) =>
83
+ urlShouldBeCovered(fileReport.url),
84
+ ),
85
+ }
86
+ return v8CoverageFiltered
87
+ }
@@ -0,0 +1,99 @@
1
+ import { urlToFileSystemPath } from "@jsenv/urls"
2
+ import { Abort } from "@jsenv/abort"
3
+
4
+ import { requireFromJsenv } from "@jsenv/core/src/require_from_jsenv.js"
5
+ import { composeTwoFileByFileIstanbulCoverages } from "./istanbul_coverage_composition.js"
6
+
7
+ export const v8CoverageToIstanbul = async (v8Coverage, { signal }) => {
8
+ const operation = Abort.startOperation()
9
+ operation.addAbortSignal(signal)
10
+
11
+ try {
12
+ const v8ToIstanbul = requireFromJsenv("v8-to-istanbul")
13
+ const sourcemapCache = v8Coverage["source-map-cache"]
14
+ let istanbulCoverageComposed = null
15
+
16
+ await v8Coverage.result.reduce(async (previous, fileV8Coverage) => {
17
+ operation.throwIfAborted()
18
+ await previous
19
+
20
+ const { source } = fileV8Coverage
21
+ let sources
22
+ // when v8 coverage comes from playwright (chromium) v8Coverage.source is set
23
+ if (typeof source === "string") {
24
+ sources = { source }
25
+ }
26
+ // when v8 coverage comes from Node.js, the source can be read from sourcemapCache
27
+ else if (sourcemapCache) {
28
+ sources = sourcesFromSourceMapCache(fileV8Coverage.url, sourcemapCache)
29
+ }
30
+ const path = urlToFileSystemPath(fileV8Coverage.url)
31
+
32
+ const converter = v8ToIstanbul(
33
+ path,
34
+ // wrapperLength is undefined we don't need it
35
+ // https://github.com/istanbuljs/v8-to-istanbul/blob/2b54bc97c5edf8a37b39a171ec29134ba9bfd532/lib/v8-to-istanbul.js#L27
36
+ undefined,
37
+ sources,
38
+ )
39
+ await converter.load()
40
+
41
+ converter.applyCoverage(fileV8Coverage.functions)
42
+ const istanbulCoverage = converter.toIstanbul()
43
+
44
+ istanbulCoverageComposed = istanbulCoverageComposed
45
+ ? composeTwoFileByFileIstanbulCoverages(
46
+ istanbulCoverageComposed,
47
+ istanbulCoverage,
48
+ )
49
+ : istanbulCoverage
50
+ }, Promise.resolve())
51
+
52
+ if (!istanbulCoverageComposed) {
53
+ return {}
54
+ }
55
+ istanbulCoverageComposed = markAsConvertedFromV8(istanbulCoverageComposed)
56
+ return istanbulCoverageComposed
57
+ } finally {
58
+ await operation.end()
59
+ }
60
+ }
61
+
62
+ const markAsConvertedFromV8 = (fileByFileCoverage) => {
63
+ const fileByFileMarked = {}
64
+ Object.keys(fileByFileCoverage).forEach((key) => {
65
+ const fileCoverage = fileByFileCoverage[key]
66
+ fileByFileMarked[key] = {
67
+ ...fileCoverage,
68
+ fromV8: true,
69
+ }
70
+ })
71
+ return fileByFileMarked
72
+ }
73
+
74
+ const sourcesFromSourceMapCache = (url, sourceMapCache) => {
75
+ const sourceMapAndLineLengths = sourceMapCache[url]
76
+ if (!sourceMapAndLineLengths) {
77
+ return {}
78
+ }
79
+
80
+ const { data, lineLengths } = sourceMapAndLineLengths
81
+ // See: https://github.com/nodejs/node/pull/34305
82
+ if (!data) {
83
+ return undefined
84
+ }
85
+
86
+ const sources = {
87
+ sourcemap: data,
88
+ ...(lineLengths ? { source: sourcesFromLineLengths(lineLengths) } : {}),
89
+ }
90
+ return sources
91
+ }
92
+
93
+ const sourcesFromLineLengths = (lineLengths) => {
94
+ let source = ""
95
+ lineLengths.forEach((length) => {
96
+ source += `${"".padEnd(length, ".")}\n`
97
+ })
98
+ return source
99
+ }