@vitest/coverage-v8 3.2.0-beta.1 → 3.2.0-beta.3

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.
package/dist/browser.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { cdp } from '@vitest/browser/context';
2
- import { l as loadProvider } from './load-provider-pEnu7lco.js';
2
+ import { l as loadProvider } from './load-provider-CdgAx3rL.js';
3
3
 
4
4
  const session = cdp();
5
5
  let enabled = false;
@@ -18,6 +18,7 @@ const mod = {
18
18
  async takeCoverage() {
19
19
  const coverage = await session.send("Profiler.takePreciseCoverage");
20
20
  const result = [];
21
+ // Reduce amount of data sent over rpc by doing some early result filtering
21
22
  for (const entry of coverage.result) {
22
23
  if (filterResult(entry)) {
23
24
  result.push({
@@ -28,7 +29,9 @@ const mod = {
28
29
  }
29
30
  return { result };
30
31
  },
31
- stopCoverage() {},
32
+ stopCoverage() {
33
+ // Browser mode should not stop coverage as same V8 instance is shared between tests
34
+ },
32
35
  async getProvider() {
33
36
  return loadProvider();
34
37
  }
@@ -49,9 +52,6 @@ function filterResult(coverage) {
49
52
  if (coverage.url === window.location.href) {
50
53
  return false;
51
54
  }
52
- if (coverage.url.includes("?browserv=") || coverage.url.includes("&browserv=")) {
53
- return false;
54
- }
55
55
  return true;
56
56
  }
57
57
 
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import inspector from 'node:inspector';
2
2
  import { fileURLToPath } from 'node:url';
3
3
  import { provider } from 'std-env';
4
- import { l as loadProvider } from './load-provider-pEnu7lco.js';
4
+ import { l as loadProvider } from './load-provider-CdgAx3rL.js';
5
5
 
6
6
  const session = new inspector.Session();
7
7
  let enabled = false;
@@ -1,3 +1,4 @@
1
+ // to not bundle the provider
1
2
  const name = "./provider.js";
2
3
  async function loadProvider() {
3
4
  const { V8CoverageProvider } = await import(
package/dist/provider.js CHANGED
@@ -2541,8 +2541,9 @@ new Set([
2541
2541
  "wasi"
2542
2542
  ]);
2543
2543
 
2544
- var version = "3.2.0-beta.1";
2544
+ var version = "3.2.0-beta.3";
2545
2545
 
2546
+ // Note that this needs to match the line ending as well
2546
2547
  const VITE_EXPORTS_LINE_PATTERN = /Object\.defineProperty\(__vite_ssr_exports__.*\n/g;
2547
2548
  const DECORATOR_METADATA_PATTERN = /_ts_metadata\("design:paramtypes", \[[^\]]*\]\),*/g;
2548
2549
  const FILE_PROTOCOL = "file://";
@@ -2572,6 +2573,7 @@ class V8CoverageProvider extends BaseCoverageProvider {
2572
2573
  await this.readCoverageFiles({
2573
2574
  onFileRead(coverage) {
2574
2575
  merged = mergeProcessCovs([merged, coverage]);
2576
+ // mergeProcessCovs sometimes loses startOffset, e.g. in vue
2575
2577
  merged.result.forEach((result) => {
2576
2578
  if (!result.startOffset) {
2577
2579
  const original = coverage.result.find((r) => r.url === result.url);
@@ -2581,12 +2583,16 @@ class V8CoverageProvider extends BaseCoverageProvider {
2581
2583
  },
2582
2584
  onFinished: async (project, transformMode) => {
2583
2585
  const converted = await this.convertCoverage(merged, project, transformMode);
2586
+ // Source maps can change based on projectName and transform mode.
2587
+ // Coverage transform re-uses source maps so we need to separate transforms from each other.
2584
2588
  const transformedCoverage = await transformCoverage(converted);
2585
2589
  coverageMap.merge(transformedCoverage);
2586
2590
  merged = { result: [] };
2587
2591
  },
2588
2592
  onDebug: debug
2589
2593
  });
2594
+ // Include untested files when all tests were run (not a single file re-run)
2595
+ // or if previous results are preserved by "cleanOnRerun: false"
2590
2596
  if (this.options.all && (allTestsRun || !this.options.cleanOnRerun)) {
2591
2597
  const coveredFiles = coverageMap.files();
2592
2598
  const untestedCoverage = await this.getUntestedFiles(coveredFiles);
@@ -2613,6 +2619,7 @@ class V8CoverageProvider extends BaseCoverageProvider {
2613
2619
  this.ctx.logger.log(c.blue(" % ") + c.dim("Coverage report from ") + c.yellow(this.name));
2614
2620
  }
2615
2621
  for (const reporter of this.options.reporter) {
2622
+ // Type assertion required for custom reporters
2616
2623
  reports.create(reporter[0], {
2617
2624
  skipFull: this.options.skipFull,
2618
2625
  projectRoot: this.ctx.config.root,
@@ -2689,9 +2696,11 @@ class V8CoverageProvider extends BaseCoverageProvider {
2689
2696
  ignoreClassMethods: this.options.ignoreClassMethods,
2690
2697
  wrapperLength,
2691
2698
  ignoreNode: (node, type) => {
2699
+ // SSR transformed imports
2692
2700
  if (type === "statement" && node.type === "AwaitExpression" && node.argument.type === "CallExpression" && node.argument.callee.type === "Identifier" && node.argument.callee.name === "__vite_ssr_import__") {
2693
2701
  return true;
2694
2702
  }
2703
+ // SSR transformed exports
2695
2704
  if (type === "statement" && node.type === "ExpressionStatement" && node.expression.type === "AssignmentExpression" && node.expression.left.type === "MemberExpression" && node.expression.left.object.type === "Identifier" && node.expression.left.object.name === "__vite_ssr_exports__") {
2696
2705
  return true;
2697
2706
  }
@@ -2718,10 +2727,13 @@ class V8CoverageProvider extends BaseCoverageProvider {
2718
2727
  const sourcesContent = map?.sourcesContent || [];
2719
2728
  if (!sourcesContent[0]) {
2720
2729
  sourcesContent[0] = await promises.readFile(filePath, "utf-8").catch(() => {
2730
+ // If file does not exist construct a dummy source for it.
2731
+ // These can be files that were generated dynamically during the test run and were removed after it.
2721
2732
  const length = findLongestFunctionLength(functions);
2722
2733
  return "/".repeat(length);
2723
2734
  });
2724
2735
  }
2736
+ // These can be uncovered files included by "all: true" or files that are loaded outside vite-node
2725
2737
  if (!map) {
2726
2738
  return {
2727
2739
  source: code || sourcesContent[0],
@@ -2766,6 +2778,8 @@ class V8CoverageProvider extends BaseCoverageProvider {
2766
2778
  if (transformMode === "browser") {
2767
2779
  if (result.url.startsWith("/@fs")) {
2768
2780
  result.url = `${FILE_PROTOCOL}${removeStartsWith(result.url, "/@fs")}`;
2781
+ } else if (result.url.startsWith(project.config.root)) {
2782
+ result.url = `${FILE_PROTOCOL}${result.url}`;
2769
2783
  } else {
2770
2784
  result.url = `${FILE_PROTOCOL}${project.config.root}${result.url}`;
2771
2785
  }
@@ -2821,6 +2835,7 @@ function excludeGeneratedCode(source, map) {
2821
2835
  trimmed.replaceAll(VITE_EXPORTS_LINE_PATTERN, "\n");
2822
2836
  trimmed.replaceAll(DECORATOR_METADATA_PATTERN, (match) => "\n".repeat(match.split("\n").length - 1));
2823
2837
  const trimmedMap = trimmed.generateMap({ hires: "boundary" });
2838
+ // A merged source map where the first one excludes generated parts
2824
2839
  const combinedMap = remapping([{
2825
2840
  ...trimmedMap,
2826
2841
  version: 3
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@vitest/coverage-v8",
3
3
  "type": "module",
4
- "version": "3.2.0-beta.1",
4
+ "version": "3.2.0-beta.3",
5
5
  "description": "V8 coverage provider for Vitest",
6
6
  "author": "Anthony Fu <anthonyfu117@hotmail.com>",
7
7
  "license": "MIT",
@@ -41,8 +41,8 @@
41
41
  "dist"
42
42
  ],
43
43
  "peerDependencies": {
44
- "@vitest/browser": "3.2.0-beta.1",
45
- "vitest": "3.2.0-beta.1"
44
+ "@vitest/browser": "3.2.0-beta.3",
45
+ "vitest": "3.2.0-beta.3"
46
46
  },
47
47
  "peerDependenciesMeta": {
48
48
  "@vitest/browser": {
@@ -53,7 +53,7 @@
53
53
  "@ampproject/remapping": "^2.3.0",
54
54
  "@bcoe/v8-coverage": "^1.0.2",
55
55
  "ast-v8-to-istanbul": "^0.3.1",
56
- "debug": "^4.4.0",
56
+ "debug": "^4.4.1",
57
57
  "istanbul-lib-coverage": "^3.2.2",
58
58
  "istanbul-lib-report": "^3.0.1",
59
59
  "istanbul-lib-source-maps": "^5.0.6",
@@ -73,9 +73,9 @@
73
73
  "@types/test-exclude": "^6.0.2",
74
74
  "pathe": "^2.0.3",
75
75
  "v8-to-istanbul": "^9.3.0",
76
- "@vitest/browser": "3.2.0-beta.1",
77
- "vitest": "3.2.0-beta.1",
78
- "vite-node": "3.2.0-beta.1"
76
+ "@vitest/browser": "3.2.0-beta.3",
77
+ "vitest": "3.2.0-beta.3",
78
+ "vite-node": "3.2.0-beta.3"
79
79
  },
80
80
  "scripts": {
81
81
  "build": "rimraf dist && rollup -c",