@vitest/coverage-v8 3.1.2 → 3.2.0-beta.1
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/provider.d.ts +1 -0
- package/dist/provider.js +52 -26
- package/package.json +7 -6
package/dist/provider.d.ts
CHANGED
@@ -18,6 +18,7 @@ declare class V8CoverageProvider extends BaseCoverageProvider<ResolvedCoverageOp
|
|
18
18
|
generateReports(coverageMap: CoverageMap, allTestsRun?: boolean): Promise<void>;
|
19
19
|
parseConfigModule(configFilePath: string): Promise<ProxifiedModule<any>>;
|
20
20
|
private getUntestedFiles;
|
21
|
+
private v8ToIstanbul;
|
21
22
|
private getSources;
|
22
23
|
private convertCoverage;
|
23
24
|
}
|
package/dist/provider.js
CHANGED
@@ -2,6 +2,7 @@ import { promises } from 'node:fs';
|
|
2
2
|
import { pathToFileURL, fileURLToPath } from 'node:url';
|
3
3
|
import remapping from '@ampproject/remapping';
|
4
4
|
import { mergeProcessCovs } from '@bcoe/v8-coverage';
|
5
|
+
import astV8ToIstanbul from 'ast-v8-to-istanbul';
|
5
6
|
import createDebug from 'debug';
|
6
7
|
import libCoverage from 'istanbul-lib-coverage';
|
7
8
|
import libReport from 'istanbul-lib-report';
|
@@ -20,6 +21,7 @@ import require$$9 from 'fs';
|
|
20
21
|
import require$$11 from 'module';
|
21
22
|
import { builtinModules } from 'node:module';
|
22
23
|
import { BaseCoverageProvider } from 'vitest/coverage';
|
24
|
+
import { parseAstAsync } from 'vitest/node';
|
23
25
|
|
24
26
|
const _DRIVE_LETTER_START_RE = /^[A-Za-z]:\//;
|
25
27
|
function normalizeWindowsPath(input = "") {
|
@@ -2539,7 +2541,7 @@ new Set([
|
|
2539
2541
|
"wasi"
|
2540
2542
|
]);
|
2541
2543
|
|
2542
|
-
var version = "3.1
|
2544
|
+
var version = "3.2.0-beta.1";
|
2543
2545
|
|
2544
2546
|
const VITE_EXPORTS_LINE_PATTERN = /Object\.defineProperty\(__vite_ssr_exports__.*\n/g;
|
2545
2547
|
const DECORATOR_METADATA_PATTERN = /_ts_metadata\("design:paramtypes", \[[^\]]*\]\),*/g;
|
@@ -2648,22 +2650,15 @@ class V8CoverageProvider extends BaseCoverageProvider {
|
|
2648
2650
|
timeout = setTimeout(() => debug(c.bgRed(`File "${filename.pathname}" is taking longer than 3s`)), 3e3);
|
2649
2651
|
}
|
2650
2652
|
const sources = await this.getSources(filename.href, transformResults, transform);
|
2651
|
-
|
2652
|
-
|
2653
|
-
|
2654
|
-
|
2655
|
-
|
2656
|
-
|
2657
|
-
|
2658
|
-
|
2659
|
-
|
2660
|
-
isBlockCoverage: true,
|
2661
|
-
functionName: "(empty-report)"
|
2662
|
-
}]);
|
2663
|
-
} catch (error) {
|
2664
|
-
this.ctx.logger.error(`Failed to convert coverage for uncovered ${filename.href}.\n`, error);
|
2665
|
-
}
|
2666
|
-
coverageMap.merge(converter.toIstanbul());
|
2653
|
+
coverageMap.merge(await this.v8ToIstanbul(filename.href, 0, sources, [{
|
2654
|
+
ranges: [{
|
2655
|
+
startOffset: 0,
|
2656
|
+
endOffset: sources.originalSource.length,
|
2657
|
+
count: 0
|
2658
|
+
}],
|
2659
|
+
isBlockCoverage: true,
|
2660
|
+
functionName: "(empty-report)"
|
2661
|
+
}]));
|
2667
2662
|
if (debug.enabled) {
|
2668
2663
|
clearTimeout(timeout);
|
2669
2664
|
const diff = performance.now() - start;
|
@@ -2674,6 +2669,44 @@ class V8CoverageProvider extends BaseCoverageProvider {
|
|
2674
2669
|
}
|
2675
2670
|
return coverageMap;
|
2676
2671
|
}
|
2672
|
+
async v8ToIstanbul(filename, wrapperLength, sources, functions) {
|
2673
|
+
if (this.options.experimentalAstAwareRemapping) {
|
2674
|
+
let ast;
|
2675
|
+
try {
|
2676
|
+
ast = await parseAstAsync(sources.source);
|
2677
|
+
} catch (error) {
|
2678
|
+
this.ctx.logger.error(`Failed to parse ${filename}. Excluding it from coverage.\n`, error);
|
2679
|
+
return {};
|
2680
|
+
}
|
2681
|
+
return await astV8ToIstanbul({
|
2682
|
+
code: sources.source,
|
2683
|
+
sourceMap: sources.sourceMap?.sourcemap,
|
2684
|
+
ast,
|
2685
|
+
coverage: {
|
2686
|
+
functions,
|
2687
|
+
url: filename
|
2688
|
+
},
|
2689
|
+
ignoreClassMethods: this.options.ignoreClassMethods,
|
2690
|
+
wrapperLength,
|
2691
|
+
ignoreNode: (node, type) => {
|
2692
|
+
if (type === "statement" && node.type === "AwaitExpression" && node.argument.type === "CallExpression" && node.argument.callee.type === "Identifier" && node.argument.callee.name === "__vite_ssr_import__") {
|
2693
|
+
return true;
|
2694
|
+
}
|
2695
|
+
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
|
+
return true;
|
2697
|
+
}
|
2698
|
+
}
|
2699
|
+
});
|
2700
|
+
}
|
2701
|
+
const converter = v8ToIstanbul(filename, wrapperLength, sources, undefined, this.options.ignoreEmptyLines);
|
2702
|
+
await converter.load();
|
2703
|
+
try {
|
2704
|
+
converter.applyCoverage(functions);
|
2705
|
+
} catch (error) {
|
2706
|
+
this.ctx.logger.error(`Failed to convert coverage for ${filename}.\n`, error);
|
2707
|
+
}
|
2708
|
+
return converter.toIstanbul();
|
2709
|
+
}
|
2677
2710
|
async getSources(url, transformResults, onTransform, functions = []) {
|
2678
2711
|
const filePath = normalize(fileURLToPath(url));
|
2679
2712
|
let transformResult = transformResults.get(filePath);
|
@@ -2686,7 +2719,7 @@ class V8CoverageProvider extends BaseCoverageProvider {
|
|
2686
2719
|
if (!sourcesContent[0]) {
|
2687
2720
|
sourcesContent[0] = await promises.readFile(filePath, "utf-8").catch(() => {
|
2688
2721
|
const length = findLongestFunctionLength(functions);
|
2689
|
-
return "
|
2722
|
+
return "/".repeat(length);
|
2690
2723
|
});
|
2691
2724
|
}
|
2692
2725
|
if (!map) {
|
@@ -2756,14 +2789,7 @@ class V8CoverageProvider extends BaseCoverageProvider {
|
|
2756
2789
|
timeout = setTimeout(() => debug(c.bgRed(`File "${fileURLToPath(url)}" is taking longer than 3s`)), 3e3);
|
2757
2790
|
}
|
2758
2791
|
const sources = await this.getSources(url, transformResults, onTransform, functions);
|
2759
|
-
|
2760
|
-
await converter.load();
|
2761
|
-
try {
|
2762
|
-
converter.applyCoverage(functions);
|
2763
|
-
} catch (error) {
|
2764
|
-
this.ctx.logger.error(`Failed to convert coverage for ${url}.\n`, error);
|
2765
|
-
}
|
2766
|
-
coverageMap.merge(converter.toIstanbul());
|
2792
|
+
coverageMap.merge(await this.v8ToIstanbul(url, startOffset, sources, functions));
|
2767
2793
|
if (debug.enabled) {
|
2768
2794
|
clearTimeout(timeout);
|
2769
2795
|
const diff = performance.now() - start;
|
package/package.json
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"name": "@vitest/coverage-v8",
|
3
3
|
"type": "module",
|
4
|
-
"version": "3.1
|
4
|
+
"version": "3.2.0-beta.1",
|
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.1
|
45
|
-
"vitest": "3.1
|
44
|
+
"@vitest/browser": "3.2.0-beta.1",
|
45
|
+
"vitest": "3.2.0-beta.1"
|
46
46
|
},
|
47
47
|
"peerDependenciesMeta": {
|
48
48
|
"@vitest/browser": {
|
@@ -52,6 +52,7 @@
|
|
52
52
|
"dependencies": {
|
53
53
|
"@ampproject/remapping": "^2.3.0",
|
54
54
|
"@bcoe/v8-coverage": "^1.0.2",
|
55
|
+
"ast-v8-to-istanbul": "^0.3.1",
|
55
56
|
"debug": "^4.4.0",
|
56
57
|
"istanbul-lib-coverage": "^3.2.2",
|
57
58
|
"istanbul-lib-report": "^3.0.1",
|
@@ -72,9 +73,9 @@
|
|
72
73
|
"@types/test-exclude": "^6.0.2",
|
73
74
|
"pathe": "^2.0.3",
|
74
75
|
"v8-to-istanbul": "^9.3.0",
|
75
|
-
"@vitest/browser": "3.1
|
76
|
-
"vitest": "3.1
|
77
|
-
"vite-node": "3.1
|
76
|
+
"@vitest/browser": "3.2.0-beta.1",
|
77
|
+
"vitest": "3.2.0-beta.1",
|
78
|
+
"vite-node": "3.2.0-beta.1"
|
78
79
|
},
|
79
80
|
"scripts": {
|
80
81
|
"build": "rimraf dist && rollup -c",
|