@jsenv/test 1.1.2 → 1.1.4

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 (50) hide show
  1. package/dist/jsenv_test.js +4 -2
  2. package/package.json +3 -3
  3. package/src/coverage/babel_plugin_instrument.js +15 -15
  4. package/src/coverage/coverage_reporter_html_directory.js +10 -10
  5. package/src/coverage/coverage_reporter_json_file.js +7 -7
  6. package/src/coverage/coverage_reporter_text_log.js +8 -8
  7. package/src/coverage/empty_coverage_factory.js +24 -24
  8. package/src/coverage/file_by_file_coverage.js +10 -10
  9. package/src/coverage/istanbul_coverage_composition.js +16 -16
  10. package/src/coverage/istanbul_coverage_map_from_coverage.js +8 -8
  11. package/src/coverage/list_files_not_covered.js +4 -4
  12. package/src/coverage/missing_coverage.js +17 -17
  13. package/src/coverage/report_to_coverage.js +52 -52
  14. package/src/coverage/v8_and_istanbul.js +17 -16
  15. package/src/coverage/v8_coverage.js +8 -8
  16. package/src/coverage/v8_coverage_composition.js +12 -12
  17. package/src/coverage/v8_coverage_node_directory.js +42 -42
  18. package/src/coverage/v8_coverage_to_istanbul.js +45 -45
  19. package/src/execution/execute.js +21 -21
  20. package/src/execution/execute_steps.js +129 -129
  21. package/src/execution/execute_test_plan.js +72 -68
  22. package/src/execution/execution_colors.js +2 -2
  23. package/src/execution/execution_steps.js +20 -20
  24. package/src/execution/gc.js +5 -5
  25. package/src/execution/logs_file_execution.js +126 -126
  26. package/src/execution/logs_file_execution.test.mjs +11 -11
  27. package/src/execution/run.js +51 -51
  28. package/src/execution/web_server_param.js +24 -24
  29. package/src/main.js +7 -7
  30. package/src/runtime_browsers/chromium.js +7 -7
  31. package/src/runtime_browsers/firefox.js +10 -10
  32. package/src/runtime_browsers/middleware_istanbul.js +23 -23
  33. package/src/runtime_browsers/middleware_js_supervisor.js +32 -32
  34. package/src/runtime_browsers/using_playwright.js +186 -186
  35. package/src/runtime_browsers/webkit.js +11 -11
  36. package/src/runtime_node/child_exec_options.js +43 -43
  37. package/src/runtime_node/controllable_child_process.mjs +47 -47
  38. package/src/runtime_node/controllable_worker_thread.mjs +37 -37
  39. package/src/runtime_node/exec_options.js +26 -26
  40. package/src/runtime_node/execute_using_dynamic_import.js +26 -26
  41. package/src/runtime_node/exit_codes.js +4 -4
  42. package/src/runtime_node/importmap_node_loader.mjs +24 -24
  43. package/src/runtime_node/importmap_node_loader_file_url.js +1 -1
  44. package/src/runtime_node/kill_process_tree.js +30 -30
  45. package/src/runtime_node/no_experimental_warnings.cjs +4 -4
  46. package/src/runtime_node/no_experimental_warnings_file_url.js +1 -1
  47. package/src/runtime_node/node_child_process.js +128 -128
  48. package/src/runtime_node/node_execution_performance.js +28 -28
  49. package/src/runtime_node/node_worker_thread.js +108 -108
  50. package/src/runtime_node/profiler_v8_coverage.js +21 -21
@@ -2734,8 +2734,9 @@ const composeV8AndIstanbul = (v8FileByFileCoverage, istanbulFileByFileCoverage,
2734
2734
  if (v8Coverage) {
2735
2735
  if (coverageV8ConflictWarning) {
2736
2736
  console.warn(createDetailedMessage(`Coverage conflict on "${key}", found two coverage that cannot be merged together: v8 and istanbul. The istanbul coverage will be ignored.`, {
2737
- 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)`,
2738
- suggestion: "You can disable this warning with coverageV8ConflictWarning: false"
2737
+ "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)`,
2738
+ "suggestion": "disable this warning with coverageV8ConflictWarning: false",
2739
+ "suggestion 2": `force coverage using istanbul with coverageMethodForBrowsers: "istanbul"`
2739
2740
  }));
2740
2741
  }
2741
2742
  fileByFileCoverage[key] = v8Coverage;
@@ -4025,6 +4026,7 @@ const executeTestPlan = async ({
4025
4026
  "./**/src/**/*.tsx": true,
4026
4027
  "./**/tests/": false,
4027
4028
  "./**/*.test.html": false,
4029
+ "./**/*.test.html@*.js": false,
4028
4030
  "./**/*.test.js": false,
4029
4031
  "./**/*.test.mjs": false
4030
4032
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jsenv/test",
3
- "version": "1.1.2",
3
+ "version": "1.1.4",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -33,9 +33,9 @@
33
33
  "playwright": "1.x"
34
34
  },
35
35
  "dependencies": {
36
- "@jsenv/core": "35.0.3",
36
+ "@jsenv/core": "35.0.5",
37
37
  "@jsenv/abort": "4.2.4",
38
- "@jsenv/ast": "3.0.7",
38
+ "@jsenv/ast": "3.0.8",
39
39
  "@jsenv/filesystem": "4.2.3",
40
40
  "@jsenv/log": "3.3.4",
41
41
  "@jsenv/urls": "2.0.0",
@@ -1,27 +1,27 @@
1
- import { requireFromJsenv } from "@jsenv/core/src/helpers/require_from_jsenv.js"
1
+ import { requireFromJsenv } from "@jsenv/core/src/helpers/require_from_jsenv.js";
2
2
 
3
3
  // https://github.com/istanbuljs/babel-plugin-istanbul/blob/321740f7b25d803f881466ea819d870f7ed6a254/src/index.js
4
4
 
5
5
  export const babelPluginInstrument = (api, { useInlineSourceMaps = false }) => {
6
- const { programVisitor } = requireFromJsenv("istanbul-lib-instrument")
7
- const { types } = api
6
+ const { programVisitor } = requireFromJsenv("istanbul-lib-instrument");
7
+ const { types } = api;
8
8
 
9
9
  return {
10
10
  name: "transform-instrument",
11
11
  visitor: {
12
12
  Program: {
13
13
  enter(path) {
14
- const { file } = this
15
- const { opts } = file
16
- let inputSourceMap
14
+ const { file } = this;
15
+ const { opts } = file;
16
+ let inputSourceMap;
17
17
  if (useInlineSourceMaps) {
18
18
  // https://github.com/istanbuljs/babel-plugin-istanbul/commit/a9e15643d249a2985e4387e4308022053b2cd0ad#diff-1fdf421c05c1140f6d71444ea2b27638R65
19
19
  inputSourceMap =
20
20
  opts.inputSourceMap || file.inputMap
21
21
  ? file.inputMap.sourcemap
22
- : null
22
+ : null;
23
23
  } else {
24
- inputSourceMap = opts.inputSourceMap
24
+ inputSourceMap = opts.inputSourceMap;
25
25
  }
26
26
  this.__dv__ = programVisitor(
27
27
  types,
@@ -30,19 +30,19 @@ export const babelPluginInstrument = (api, { useInlineSourceMaps = false }) => {
30
30
  coverageVariable: "__coverage__",
31
31
  inputSourceMap,
32
32
  },
33
- )
34
- this.__dv__.enter(path)
33
+ );
34
+ this.__dv__.enter(path);
35
35
  },
36
36
 
37
37
  exit(path) {
38
38
  if (!this.__dv__) {
39
- return
39
+ return;
40
40
  }
41
- const object = this.__dv__.exit(path)
41
+ const object = this.__dv__.exit(path);
42
42
  // object got two properties: fileCoverage and sourceMappingURL
43
- this.file.metadata.coverage = object.fileCoverage
43
+ this.file.metadata.coverage = object.fileCoverage;
44
44
  },
45
45
  },
46
46
  },
47
- }
48
- }
47
+ };
48
+ };
@@ -1,8 +1,8 @@
1
- import { fileURLToPath } from "node:url"
2
- import { readFileSync } from "node:fs"
1
+ import { fileURLToPath } from "node:url";
2
+ import { readFileSync } from "node:fs";
3
3
 
4
- import { requireFromJsenv } from "@jsenv/core/src/helpers/require_from_jsenv.js"
5
- import { istanbulCoverageMapFromCoverage } from "./istanbul_coverage_map_from_coverage.js"
4
+ import { requireFromJsenv } from "@jsenv/core/src/helpers/require_from_jsenv.js";
5
+ import { istanbulCoverageMapFromCoverage } from "./istanbul_coverage_map_from_coverage.js";
6
6
 
7
7
  export const generateCoverageHtmlDirectory = async (
8
8
  coverage,
@@ -13,20 +13,20 @@ export const generateCoverageHtmlDirectory = async (
13
13
  coverageReportSkipFull,
14
14
  },
15
15
  ) => {
16
- const libReport = requireFromJsenv("istanbul-lib-report")
17
- const reports = requireFromJsenv("istanbul-reports")
16
+ const libReport = requireFromJsenv("istanbul-lib-report");
17
+ const reports = requireFromJsenv("istanbul-reports");
18
18
 
19
19
  const context = libReport.createContext({
20
20
  dir: fileURLToPath(rootDirectoryUrl),
21
21
  coverageMap: istanbulCoverageMapFromCoverage(coverage),
22
22
  sourceFinder: (path) =>
23
23
  readFileSync(new URL(path, rootDirectoryUrl), "utf8"),
24
- })
24
+ });
25
25
 
26
26
  const report = reports.create("html", {
27
27
  skipEmpty: coverageReportSkipEmpty,
28
28
  skipFull: coverageReportSkipFull,
29
29
  subdir: coverageHtmlDirectoryRelativeUrl,
30
- })
31
- report.execute(context)
32
- }
30
+ });
31
+ report.execute(context);
32
+ };
@@ -1,17 +1,17 @@
1
- import { writeFile } from "@jsenv/filesystem"
2
- import { urlToFileSystemPath } from "@jsenv/urls"
3
- import { byteAsFileSize } from "@jsenv/log"
1
+ import { writeFile } from "@jsenv/filesystem";
2
+ import { urlToFileSystemPath } from "@jsenv/urls";
3
+ import { byteAsFileSize } from "@jsenv/log";
4
4
 
5
5
  export const generateCoverageJsonFile = async ({
6
6
  coverage,
7
7
  coverageJsonFileUrl,
8
8
  logger,
9
9
  }) => {
10
- const coverageAsText = JSON.stringify(coverage, null, " ")
10
+ const coverageAsText = JSON.stringify(coverage, null, " ");
11
11
  logger.info(
12
12
  `-> ${urlToFileSystemPath(coverageJsonFileUrl)} (${byteAsFileSize(
13
13
  Buffer.byteLength(coverageAsText),
14
14
  )})`,
15
- )
16
- await writeFile(coverageJsonFileUrl, coverageAsText)
17
- }
15
+ );
16
+ await writeFile(coverageJsonFileUrl, coverageAsText);
17
+ };
@@ -1,19 +1,19 @@
1
- import { requireFromJsenv } from "@jsenv/core/src/helpers/require_from_jsenv.js"
2
- import { istanbulCoverageMapFromCoverage } from "./istanbul_coverage_map_from_coverage.js"
1
+ import { requireFromJsenv } from "@jsenv/core/src/helpers/require_from_jsenv.js";
2
+ import { istanbulCoverageMapFromCoverage } from "./istanbul_coverage_map_from_coverage.js";
3
3
 
4
4
  export const generateCoverageTextLog = (
5
5
  coverage,
6
6
  { coverageReportSkipEmpty, coverageReportSkipFull },
7
7
  ) => {
8
- const libReport = requireFromJsenv("istanbul-lib-report")
9
- const reports = requireFromJsenv("istanbul-reports")
8
+ const libReport = requireFromJsenv("istanbul-lib-report");
9
+ const reports = requireFromJsenv("istanbul-reports");
10
10
 
11
11
  const context = libReport.createContext({
12
12
  coverageMap: istanbulCoverageMapFromCoverage(coverage),
13
- })
13
+ });
14
14
  const report = reports.create("text", {
15
15
  skipEmpty: coverageReportSkipEmpty,
16
16
  skipFull: coverageReportSkipFull,
17
- })
18
- report.execute(context)
19
- }
17
+ });
18
+ report.execute(context);
19
+ };
@@ -1,52 +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
- import { requireFromJsenv } from "@jsenv/core/src/helpers/require_from_jsenv.js"
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
+ import { requireFromJsenv } from "@jsenv/core/src/helpers/require_from_jsenv.js";
6
6
 
7
- import { babelPluginInstrument } from "./babel_plugin_instrument.js"
7
+ import { babelPluginInstrument } from "./babel_plugin_instrument.js";
8
8
 
9
9
  export const relativeUrlToEmptyCoverage = async (
10
10
  relativeUrl,
11
11
  { signal, rootDirectoryUrl },
12
12
  ) => {
13
- const operation = Abort.startOperation()
14
- operation.addAbortSignal(signal)
13
+ const operation = Abort.startOperation();
14
+ operation.addAbortSignal(signal);
15
15
 
16
16
  try {
17
- const fileUrl = resolveUrl(relativeUrl, rootDirectoryUrl)
18
- const content = await readFile(fileUrl, { as: "string" })
17
+ const fileUrl = resolveUrl(relativeUrl, rootDirectoryUrl);
18
+ const content = await readFile(fileUrl, { as: "string" });
19
19
 
20
- operation.throwIfAborted()
20
+ operation.throwIfAborted();
21
21
  const { metadata } = await applyBabelPlugins({
22
22
  babelPlugins: [babelPluginInstrument],
23
23
  urlInfo: {
24
24
  originalUrl: fileUrl,
25
25
  content,
26
26
  },
27
- })
28
- const { coverage } = metadata
27
+ });
28
+ const { coverage } = metadata;
29
29
  if (!coverage) {
30
- throw new Error(`missing coverage for file`)
30
+ throw new Error(`missing coverage for file`);
31
31
  }
32
32
  // https://github.com/gotwarlost/istanbul/blob/bc84c315271a5dd4d39bcefc5925cfb61a3d174a/lib/command/common/run-with-cover.js#L229
33
33
  Object.keys(coverage.s).forEach(function (key) {
34
- coverage.s[key] = 0
35
- })
36
- return coverage
34
+ coverage.s[key] = 0;
35
+ });
36
+ return coverage;
37
37
  } catch (e) {
38
38
  if (e && e.code === "PARSE_ERROR") {
39
39
  // return an empty coverage for that file when
40
40
  // it contains a syntax error
41
- return createEmptyCoverage(relativeUrl)
41
+ return createEmptyCoverage(relativeUrl);
42
42
  }
43
- throw e
43
+ throw e;
44
44
  } finally {
45
- await operation.end()
45
+ await operation.end();
46
46
  }
47
- }
47
+ };
48
48
 
49
49
  const createEmptyCoverage = (relativeUrl) => {
50
- const { createFileCoverage } = requireFromJsenv("istanbul-lib-coverage")
51
- return createFileCoverage(relativeUrl).toJSON()
52
- }
50
+ const { createFileCoverage } = requireFromJsenv("istanbul-lib-coverage");
51
+ return createFileCoverage(relativeUrl).toJSON();
52
+ };
@@ -2,24 +2,24 @@ import {
2
2
  urlToRelativeUrl,
3
3
  fileSystemPathToUrl,
4
4
  isFileSystemPath,
5
- } from "@jsenv/urls"
5
+ } from "@jsenv/urls";
6
6
 
7
7
  export const normalizeFileByFileCoveragePaths = (
8
8
  fileByFileCoverage,
9
9
  rootDirectoryUrl,
10
10
  ) => {
11
- const fileByFileNormalized = {}
11
+ const fileByFileNormalized = {};
12
12
  Object.keys(fileByFileCoverage).forEach((key) => {
13
- const fileCoverage = fileByFileCoverage[key]
14
- const { path } = fileCoverage
13
+ const fileCoverage = fileByFileCoverage[key];
14
+ const { path } = fileCoverage;
15
15
  const url = isFileSystemPath(path)
16
16
  ? fileSystemPathToUrl(path)
17
- : new URL(path, rootDirectoryUrl).href
18
- const relativeUrl = urlToRelativeUrl(url, rootDirectoryUrl)
17
+ : new URL(path, rootDirectoryUrl).href;
18
+ const relativeUrl = urlToRelativeUrl(url, rootDirectoryUrl);
19
19
  fileByFileNormalized[`./${relativeUrl}`] = {
20
20
  ...fileCoverage,
21
21
  path: `./${relativeUrl}`,
22
- }
23
- })
24
- return fileByFileNormalized
25
- }
22
+ };
23
+ });
24
+ return fileByFileNormalized;
25
+ };
@@ -1,28 +1,28 @@
1
- import { requireFromJsenv } from "@jsenv/core/src/helpers/require_from_jsenv.js"
1
+ import { requireFromJsenv } from "@jsenv/core/src/helpers/require_from_jsenv.js";
2
2
 
3
3
  export const composeTwoFileByFileIstanbulCoverages = (
4
4
  firstFileByFileIstanbulCoverage,
5
5
  secondFileByFileIstanbulCoverage,
6
6
  ) => {
7
- const fileByFileIstanbulCoverage = {}
7
+ const fileByFileIstanbulCoverage = {};
8
8
  Object.keys(firstFileByFileIstanbulCoverage).forEach((key) => {
9
- fileByFileIstanbulCoverage[key] = firstFileByFileIstanbulCoverage[key]
10
- })
9
+ fileByFileIstanbulCoverage[key] = firstFileByFileIstanbulCoverage[key];
10
+ });
11
11
  Object.keys(secondFileByFileIstanbulCoverage).forEach((key) => {
12
- const firstCoverage = firstFileByFileIstanbulCoverage[key]
13
- const secondCoverage = secondFileByFileIstanbulCoverage[key]
12
+ const firstCoverage = firstFileByFileIstanbulCoverage[key];
13
+ const secondCoverage = secondFileByFileIstanbulCoverage[key];
14
14
  fileByFileIstanbulCoverage[key] = firstCoverage
15
15
  ? merge(firstCoverage, secondCoverage)
16
- : secondCoverage
17
- })
16
+ : secondCoverage;
17
+ });
18
18
 
19
- return fileByFileIstanbulCoverage
20
- }
19
+ return fileByFileIstanbulCoverage;
20
+ };
21
21
 
22
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
- }
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
+ };
@@ -1,16 +1,16 @@
1
- import { requireFromJsenv } from "@jsenv/core/src/helpers/require_from_jsenv.js"
1
+ import { requireFromJsenv } from "@jsenv/core/src/helpers/require_from_jsenv.js";
2
2
 
3
3
  export const istanbulCoverageMapFromCoverage = (coverage) => {
4
- const { createCoverageMap } = requireFromJsenv("istanbul-lib-coverage")
4
+ const { createCoverageMap } = requireFromJsenv("istanbul-lib-coverage");
5
5
 
6
- const coverageAdjusted = {}
6
+ const coverageAdjusted = {};
7
7
  Object.keys(coverage).forEach((key) => {
8
8
  coverageAdjusted[key.slice(2)] = {
9
9
  ...coverage[key],
10
10
  path: key.slice(2),
11
- }
12
- })
11
+ };
12
+ });
13
13
 
14
- const coverageMap = createCoverageMap(coverageAdjusted)
15
- return coverageMap
16
- }
14
+ const coverageMap = createCoverageMap(coverageAdjusted);
15
+ return coverageMap;
16
+ };
@@ -1,4 +1,4 @@
1
- import { collectFiles } from "@jsenv/filesystem"
1
+ import { collectFiles } from "@jsenv/filesystem";
2
2
 
3
3
  export const listRelativeFileUrlToCover = async ({
4
4
  signal,
@@ -10,6 +10,6 @@ export const listRelativeFileUrlToCover = async ({
10
10
  directoryUrl: rootDirectoryUrl,
11
11
  associations: { cover: coverageConfig },
12
12
  predicate: ({ cover }) => cover,
13
- })
14
- return matchingFileResultArray.map(({ relativeUrl }) => relativeUrl)
15
- }
13
+ });
14
+ return matchingFileResultArray.map(({ relativeUrl }) => relativeUrl);
15
+ };
@@ -1,7 +1,7 @@
1
- import { Abort } from "@jsenv/abort"
1
+ import { Abort } from "@jsenv/abort";
2
2
 
3
- import { listRelativeFileUrlToCover } from "./list_files_not_covered.js"
4
- import { relativeUrlToEmptyCoverage } from "./empty_coverage_factory.js"
3
+ import { listRelativeFileUrlToCover } from "./list_files_not_covered.js";
4
+ import { relativeUrlToEmptyCoverage } from "./empty_coverage_factory.js";
5
5
 
6
6
  export const getMissingFileByFileCoverage = async ({
7
7
  signal,
@@ -13,19 +13,19 @@ export const getMissingFileByFileCoverage = async ({
13
13
  signal,
14
14
  rootDirectoryUrl,
15
15
  coverageConfig,
16
- })
16
+ });
17
17
  const relativeUrlsMissing = relativeUrlsToCover.filter((relativeUrlToCover) =>
18
18
  Object.keys(fileByFileCoverage).every((key) => {
19
- return key !== `./${relativeUrlToCover}`
19
+ return key !== `./${relativeUrlToCover}`;
20
20
  }),
21
- )
21
+ );
22
22
 
23
- const operation = Abort.startOperation()
24
- operation.addAbortSignal(signal)
25
- const missingFileByFileCoverage = {}
23
+ const operation = Abort.startOperation();
24
+ operation.addAbortSignal(signal);
25
+ const missingFileByFileCoverage = {};
26
26
  await relativeUrlsMissing.reduce(async (previous, relativeUrlMissing) => {
27
- operation.throwIfAborted()
28
- await previous
27
+ operation.throwIfAborted();
28
+ await previous;
29
29
  await operation.withSignal(async (signal) => {
30
30
  const emptyCoverage = await relativeUrlToEmptyCoverage(
31
31
  relativeUrlMissing,
@@ -33,9 +33,9 @@ export const getMissingFileByFileCoverage = async ({
33
33
  signal,
34
34
  rootDirectoryUrl,
35
35
  },
36
- )
37
- missingFileByFileCoverage[`./${relativeUrlMissing}`] = emptyCoverage
38
- })
39
- }, Promise.resolve())
40
- return missingFileByFileCoverage
41
- }
36
+ );
37
+ missingFileByFileCoverage[`./${relativeUrlMissing}`] = emptyCoverage;
38
+ });
39
+ }, Promise.resolve());
40
+ return missingFileByFileCoverage;
41
+ };
@@ -1,14 +1,14 @@
1
- import { readFileSync } from "node:fs"
2
- import { Abort } from "@jsenv/abort"
3
-
4
- import { filterV8Coverage } from "./v8_coverage.js"
5
- import { readNodeV8CoverageDirectory } from "./v8_coverage_node_directory.js"
6
- import { composeTwoV8Coverages } from "./v8_coverage_composition.js"
7
- import { composeTwoFileByFileIstanbulCoverages } from "./istanbul_coverage_composition.js"
8
- import { v8CoverageToIstanbul } from "./v8_coverage_to_istanbul.js"
9
- import { composeV8AndIstanbul } from "./v8_and_istanbul.js"
10
- import { normalizeFileByFileCoveragePaths } from "./file_by_file_coverage.js"
11
- import { getMissingFileByFileCoverage } from "./missing_coverage.js"
1
+ import { readFileSync } from "node:fs";
2
+ import { Abort } from "@jsenv/abort";
3
+
4
+ import { filterV8Coverage } from "./v8_coverage.js";
5
+ import { readNodeV8CoverageDirectory } from "./v8_coverage_node_directory.js";
6
+ import { composeTwoV8Coverages } from "./v8_coverage_composition.js";
7
+ import { composeTwoFileByFileIstanbulCoverages } from "./istanbul_coverage_composition.js";
8
+ import { v8CoverageToIstanbul } from "./v8_coverage_to_istanbul.js";
9
+ import { composeV8AndIstanbul } from "./v8_and_istanbul.js";
10
+ import { normalizeFileByFileCoveragePaths } from "./file_by_file_coverage.js";
11
+ import { getMissingFileByFileCoverage } from "./missing_coverage.js";
12
12
 
13
13
  export const reportToCoverage = async (
14
14
  report,
@@ -51,10 +51,10 @@ export const reportToCoverage = async (
51
51
  ) {
52
52
  logger.warn(
53
53
  `"${executionName}" execution of ${file} did not properly write coverage into ${executionResult.coverageFileUrl}`,
54
- )
54
+ );
55
55
  }
56
56
  },
57
- })
57
+ });
58
58
 
59
59
  if (coverageMethodForNodeJs === "NODE_V8_COVERAGE") {
60
60
  await readNodeV8CoverageDirectory({
@@ -64,38 +64,38 @@ export const reportToCoverage = async (
64
64
  const nodeV8CoverageLight = await filterV8Coverage(nodeV8Coverage, {
65
65
  rootDirectoryUrl,
66
66
  coverageConfig,
67
- })
67
+ });
68
68
  v8Coverage = v8Coverage
69
69
  ? composeTwoV8Coverages(v8Coverage, nodeV8CoverageLight)
70
- : nodeV8CoverageLight
70
+ : nodeV8CoverageLight;
71
71
  },
72
- })
72
+ });
73
73
  }
74
74
 
75
75
  // try to merge v8 with istanbul, if any
76
- let fileByFileCoverage
76
+ let fileByFileCoverage;
77
77
  if (v8Coverage) {
78
78
  let v8FileByFileCoverage = await v8CoverageToIstanbul(v8Coverage, {
79
79
  signal,
80
- })
80
+ });
81
81
 
82
82
  v8FileByFileCoverage = normalizeFileByFileCoveragePaths(
83
83
  v8FileByFileCoverage,
84
84
  rootDirectoryUrl,
85
- )
85
+ );
86
86
 
87
87
  if (fileByFileIstanbulCoverage) {
88
88
  fileByFileIstanbulCoverage = normalizeFileByFileCoveragePaths(
89
89
  fileByFileIstanbulCoverage,
90
90
  rootDirectoryUrl,
91
- )
91
+ );
92
92
  fileByFileCoverage = composeV8AndIstanbul(
93
93
  v8FileByFileCoverage,
94
94
  fileByFileIstanbulCoverage,
95
95
  { coverageV8ConflictWarning },
96
- )
96
+ );
97
97
  } else {
98
- fileByFileCoverage = v8FileByFileCoverage
98
+ fileByFileCoverage = v8FileByFileCoverage;
99
99
  }
100
100
  }
101
101
  // get istanbul only
@@ -103,11 +103,11 @@ export const reportToCoverage = async (
103
103
  fileByFileCoverage = normalizeFileByFileCoveragePaths(
104
104
  fileByFileIstanbulCoverage,
105
105
  rootDirectoryUrl,
106
- )
106
+ );
107
107
  }
108
108
  // no coverage found in execution (or zero file where executed)
109
109
  else {
110
- fileByFileCoverage = {}
110
+ fileByFileCoverage = {};
111
111
  }
112
112
 
113
113
  // now add coverage for file not covered
@@ -117,82 +117,82 @@ export const reportToCoverage = async (
117
117
  rootDirectoryUrl,
118
118
  coverageConfig,
119
119
  fileByFileCoverage,
120
- })
120
+ });
121
121
  Object.assign(
122
122
  fileByFileCoverage,
123
123
  normalizeFileByFileCoveragePaths(
124
124
  missingFileByFileCoverage,
125
125
  rootDirectoryUrl,
126
126
  ),
127
- )
127
+ );
128
128
  }
129
129
 
130
- return fileByFileCoverage
131
- }
130
+ return fileByFileCoverage;
131
+ };
132
132
 
133
133
  const getCoverageFromReport = async ({ signal, report, onMissing }) => {
134
- const operation = Abort.startOperation()
135
- operation.addAbortSignal(signal)
134
+ const operation = Abort.startOperation();
135
+ operation.addAbortSignal(signal);
136
136
 
137
137
  try {
138
- let v8Coverage
139
- let fileByFileIstanbulCoverage
138
+ let v8Coverage;
139
+ let fileByFileIstanbulCoverage;
140
140
 
141
141
  // collect v8 and istanbul coverage from executions
142
142
  await Object.keys(report).reduce(async (previous, file) => {
143
- operation.throwIfAborted()
144
- await previous
143
+ operation.throwIfAborted();
144
+ await previous;
145
145
 
146
- const executionResultForFile = report[file]
146
+ const executionResultForFile = report[file];
147
147
  await Object.keys(executionResultForFile).reduce(
148
148
  async (previous, executionName) => {
149
- operation.throwIfAborted()
150
- await previous
149
+ operation.throwIfAborted();
150
+ await previous;
151
151
 
152
152
  const executionResultForFileOnRuntime =
153
- executionResultForFile[executionName]
154
- const { coverageFileUrl } = executionResultForFileOnRuntime
155
- let executionCoverage
153
+ executionResultForFile[executionName];
154
+ const { coverageFileUrl } = executionResultForFileOnRuntime;
155
+ let executionCoverage;
156
156
  try {
157
157
  executionCoverage = JSON.parse(
158
158
  String(readFileSync(new URL(coverageFileUrl))),
159
- )
159
+ );
160
160
  } catch (e) {
161
161
  if (e.code === "ENOENT" || e.name === "SyntaxError") {
162
162
  onMissing({
163
163
  executionName,
164
164
  file,
165
165
  executionResult: executionResultForFileOnRuntime,
166
- })
167
- return
166
+ });
167
+ return;
168
168
  }
169
- throw e
169
+ throw e;
170
170
  }
171
171
 
172
172
  if (isV8Coverage(executionCoverage)) {
173
173
  v8Coverage = v8Coverage
174
174
  ? composeTwoV8Coverages(v8Coverage, executionCoverage)
175
- : executionCoverage
175
+ : executionCoverage;
176
176
  } else {
177
177
  fileByFileIstanbulCoverage = fileByFileIstanbulCoverage
178
178
  ? composeTwoFileByFileIstanbulCoverages(
179
179
  fileByFileIstanbulCoverage,
180
180
  executionCoverage,
181
181
  )
182
- : executionCoverage
182
+ : executionCoverage;
183
183
  }
184
184
  },
185
185
  Promise.resolve(),
186
- )
187
- }, Promise.resolve())
186
+ );
187
+ }, Promise.resolve());
188
188
 
189
189
  return {
190
190
  v8Coverage,
191
191
  fileByFileIstanbulCoverage,
192
- }
192
+ };
193
193
  } finally {
194
- await operation.end()
194
+ await operation.end();
195
195
  }
196
- }
196
+ };
197
197
 
198
- const isV8Coverage = (coverage) => Boolean(coverage.result)
198
+ const isV8Coverage = (coverage) => Boolean(coverage.result);