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

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 (36) hide show
  1. package/dist/babel_helpers/applyDecs/applyDecs.js +756 -0
  2. package/dist/babel_helpers/construct/construct.js +1 -1
  3. package/dist/babel_helpers/extends/extends.js +1 -1
  4. package/dist/babel_helpers/get/get.js +1 -1
  5. package/dist/babel_helpers/getPrototypeOf/getPrototypeOf.js +1 -1
  6. package/dist/babel_helpers/identity/identity.js +3 -0
  7. package/dist/babel_helpers/setPrototypeOf/setPrototypeOf.js +2 -2
  8. package/dist/js/event_source_client.js +205 -1
  9. package/dist/main.js +852 -63
  10. package/package.json +9 -10
  11. package/src/build/start_build_server.js +29 -26
  12. package/src/dev/start_dev_server.js +34 -30
  13. package/src/execute/runtimes/browsers/from_playwright.js +3 -2
  14. package/src/helpers/event_source/event_source.js +197 -0
  15. package/src/helpers/event_source/sse_service.js +53 -0
  16. package/src/helpers/worker_reload.js +56 -0
  17. package/src/plugins/autoreload/dev_sse/client/event_source_client.js +1 -1
  18. package/src/plugins/autoreload/dev_sse/jsenv_plugin_dev_sse_server.js +1 -1
  19. package/src/test/coverage/babel_plugin_instrument.js +82 -0
  20. package/src/test/coverage/coverage_reporter_html_directory.js +36 -0
  21. package/src/test/coverage/coverage_reporter_json_file.js +22 -0
  22. package/src/test/coverage/coverage_reporter_text_log.js +19 -0
  23. package/src/test/coverage/empty_coverage_factory.js +52 -0
  24. package/src/test/coverage/file_by_file_coverage.js +26 -0
  25. package/src/test/coverage/istanbul_coverage_composition.js +28 -0
  26. package/src/test/coverage/istanbul_coverage_map_from_coverage.js +16 -0
  27. package/src/test/coverage/list_files_not_covered.js +15 -0
  28. package/src/test/coverage/missing_coverage.js +41 -0
  29. package/src/test/coverage/report_to_coverage.js +196 -0
  30. package/src/test/coverage/v8_and_istanbul.js +37 -0
  31. package/src/test/coverage/v8_coverage_composition.js +24 -0
  32. package/src/test/coverage/v8_coverage_from_directory.js +87 -0
  33. package/src/test/coverage/v8_coverage_to_istanbul.js +99 -0
  34. package/src/test/execute_plan.js +2 -2
  35. package/src/test/execute_test_plan.js +3 -3
  36. package/dist/babel_helpers/readme.md +0 -8
@@ -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
+ }
@@ -19,8 +19,8 @@ import {
19
19
  writeFileSync,
20
20
  } from "@jsenv/filesystem"
21
21
 
22
- import { babelPluginInstrument } from "@jsenv/utils/coverage/babel_plugin_instrument.js"
23
- import { reportToCoverage } from "@jsenv/utils/coverage/report_to_coverage.js"
22
+ import { babelPluginInstrument } from "./coverage/babel_plugin_instrument.js"
23
+ import { reportToCoverage } from "./coverage/report_to_coverage.js"
24
24
  import { createUrlGraph } from "@jsenv/core/src/omega/url_graph.js"
25
25
  import { getCorePlugins } from "@jsenv/core/src/plugins/plugins.js"
26
26
  import { createKitchen } from "@jsenv/core/src/omega/kitchen.js"
@@ -6,9 +6,9 @@ import {
6
6
  } from "@jsenv/filesystem"
7
7
  import { createLogger, createDetailedMessage } from "@jsenv/log"
8
8
 
9
- import { generateCoverageJsonFile } from "@jsenv/utils/coverage/coverage_reporter_json_file.js"
10
- import { generateCoverageHtmlDirectory } from "@jsenv/utils/coverage/coverage_reporter_html_directory.js"
11
- import { generateCoverageTextLog } from "@jsenv/utils/coverage/coverage_reporter_text_log.js"
9
+ import { generateCoverageJsonFile } from "./coverage/coverage_reporter_json_file.js"
10
+ import { generateCoverageHtmlDirectory } from "./coverage/coverage_reporter_html_directory.js"
11
+ import { generateCoverageTextLog } from "./coverage/coverage_reporter_text_log.js"
12
12
  import { executePlan } from "./execute_plan.js"
13
13
 
14
14
  export const defaultCoverageConfig = {
@@ -1,8 +0,0 @@
1
- # Babel helpers
2
-
3
- Babel helpers are copied in there to properly appear in sourcemap.
4
-
5
- - Last sync date: 31 January 2022
6
-
7
- - Helpers file: https://github.com/babel/babel/blob/main/packages/babel-helpers/src/helpers.ts
8
- - Individual helpers: https://github.com/babel/babel/tree/main/packages/babel-helpers/src/helpers