@vitest/coverage-v8 2.1.0-beta.5 → 2.1.0-beta.6
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.d.ts +16 -0
- package/dist/browser.js +50 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +31 -42
- package/dist/load-provider-Bl5rgjsL.js +10 -0
- package/dist/provider.d.ts +1 -1
- package/dist/provider.js +52 -28
- package/package.json +15 -4
@@ -0,0 +1,16 @@
|
|
1
|
+
import { V8CoverageProvider } from './provider.js';
|
2
|
+
import 'istanbul-lib-coverage';
|
3
|
+
import 'vitest/coverage';
|
4
|
+
import 'vitest/node';
|
5
|
+
import 'vitest';
|
6
|
+
|
7
|
+
declare const _default: {
|
8
|
+
startCoverage(): Promise<void>;
|
9
|
+
takeCoverage(): Promise<{
|
10
|
+
result: any[];
|
11
|
+
}>;
|
12
|
+
stopCoverage(): Promise<void>;
|
13
|
+
getProvider(): Promise<V8CoverageProvider>;
|
14
|
+
};
|
15
|
+
|
16
|
+
export { _default as default };
|
package/dist/browser.js
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
import { cdp } from '@vitest/browser/context';
|
2
|
+
import { l as loadProvider } from './load-provider-Bl5rgjsL.js';
|
3
|
+
|
4
|
+
const session = cdp();
|
5
|
+
var browser = {
|
6
|
+
async startCoverage() {
|
7
|
+
await session.send("Profiler.enable");
|
8
|
+
await session.send("Profiler.startPreciseCoverage", {
|
9
|
+
callCount: true,
|
10
|
+
detailed: true
|
11
|
+
});
|
12
|
+
},
|
13
|
+
async takeCoverage() {
|
14
|
+
const coverage = await session.send("Profiler.takePreciseCoverage");
|
15
|
+
const result = [];
|
16
|
+
for (const entry of coverage.result) {
|
17
|
+
if (filterResult(entry)) {
|
18
|
+
result.push({
|
19
|
+
...entry,
|
20
|
+
url: decodeURIComponent(entry.url.replace(window.location.origin, ""))
|
21
|
+
});
|
22
|
+
}
|
23
|
+
}
|
24
|
+
return { result };
|
25
|
+
},
|
26
|
+
async stopCoverage() {
|
27
|
+
await session.send("Profiler.stopPreciseCoverage");
|
28
|
+
await session.send("Profiler.disable");
|
29
|
+
},
|
30
|
+
async getProvider() {
|
31
|
+
return loadProvider();
|
32
|
+
}
|
33
|
+
};
|
34
|
+
function filterResult(coverage) {
|
35
|
+
if (!coverage.url.startsWith(window.location.origin)) {
|
36
|
+
return false;
|
37
|
+
}
|
38
|
+
if (coverage.url.includes("/node_modules/")) {
|
39
|
+
return false;
|
40
|
+
}
|
41
|
+
if (coverage.url.includes("__vitest_browser__")) {
|
42
|
+
return false;
|
43
|
+
}
|
44
|
+
if (coverage.url.includes("__vitest__/assets")) {
|
45
|
+
return false;
|
46
|
+
}
|
47
|
+
return true;
|
48
|
+
}
|
49
|
+
|
50
|
+
export { browser as default };
|
package/dist/index.d.ts
CHANGED
@@ -2,8 +2,8 @@ import { Profiler } from 'node:inspector';
|
|
2
2
|
import { V8CoverageProvider } from './provider.js';
|
3
3
|
import 'istanbul-lib-coverage';
|
4
4
|
import 'vitest/coverage';
|
5
|
-
import 'vitest';
|
6
5
|
import 'vitest/node';
|
6
|
+
import 'vitest';
|
7
7
|
|
8
8
|
declare const _default: {
|
9
9
|
startCoverage(): void;
|
package/dist/index.js
CHANGED
@@ -1,34 +1,40 @@
|
|
1
1
|
import inspector from 'node:inspector';
|
2
2
|
import { provider } from 'std-env';
|
3
|
+
import { l as loadProvider } from './load-provider-Bl5rgjsL.js';
|
3
4
|
|
4
5
|
const session = new inspector.Session();
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
}
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
6
|
+
var index = {
|
7
|
+
startCoverage() {
|
8
|
+
session.connect();
|
9
|
+
session.post("Profiler.enable");
|
10
|
+
session.post("Profiler.startPreciseCoverage", {
|
11
|
+
callCount: true,
|
12
|
+
detailed: true
|
13
|
+
});
|
14
|
+
},
|
15
|
+
takeCoverage() {
|
16
|
+
return new Promise((resolve, reject) => {
|
17
|
+
session.post("Profiler.takePreciseCoverage", async (error, coverage) => {
|
18
|
+
if (error) {
|
19
|
+
return reject(error);
|
20
|
+
}
|
21
|
+
const result = coverage.result.filter(filterResult);
|
22
|
+
resolve({ result });
|
23
|
+
});
|
24
|
+
if (provider === "stackblitz") {
|
25
|
+
resolve({ result: [] });
|
18
26
|
}
|
19
|
-
const result = coverage.result.filter(filterResult);
|
20
|
-
resolve({ result });
|
21
27
|
});
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
}
|
28
|
+
},
|
29
|
+
stopCoverage() {
|
30
|
+
session.post("Profiler.stopPreciseCoverage");
|
31
|
+
session.post("Profiler.disable");
|
32
|
+
session.disconnect();
|
33
|
+
},
|
34
|
+
async getProvider() {
|
35
|
+
return loadProvider();
|
36
|
+
}
|
37
|
+
};
|
32
38
|
function filterResult(coverage) {
|
33
39
|
if (!coverage.url.startsWith("file://")) {
|
34
40
|
return false;
|
@@ -39,21 +45,4 @@ function filterResult(coverage) {
|
|
39
45
|
return true;
|
40
46
|
}
|
41
47
|
|
42
|
-
var index = {
|
43
|
-
startCoverage() {
|
44
|
-
return startCoverage();
|
45
|
-
},
|
46
|
-
takeCoverage() {
|
47
|
-
return takeCoverage();
|
48
|
-
},
|
49
|
-
stopCoverage() {
|
50
|
-
return stopCoverage();
|
51
|
-
},
|
52
|
-
async getProvider() {
|
53
|
-
const name = "./provider.js";
|
54
|
-
const { V8CoverageProvider } = await import(name);
|
55
|
-
return new V8CoverageProvider();
|
56
|
-
}
|
57
|
-
};
|
58
|
-
|
59
48
|
export { index as default };
|
package/dist/provider.d.ts
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
import { CoverageMap } from 'istanbul-lib-coverage';
|
2
2
|
import { BaseCoverageProvider } from 'vitest/coverage';
|
3
|
-
import { CoverageProvider, AfterSuiteRunMeta, ReportContext, ResolvedCoverageOptions } from 'vitest';
|
4
3
|
import { Vitest } from 'vitest/node';
|
4
|
+
import { CoverageProvider, AfterSuiteRunMeta, ReportContext, ResolvedCoverageOptions } from 'vitest';
|
5
5
|
|
6
6
|
interface TestExclude {
|
7
7
|
new (opts: {
|
package/dist/provider.js
CHANGED
@@ -2248,12 +2248,13 @@ function cleanUrl(url) {
|
|
2248
2248
|
"wasi"
|
2249
2249
|
]);
|
2250
2250
|
|
2251
|
-
var version = "2.1.0-beta.
|
2251
|
+
var version = "2.1.0-beta.6";
|
2252
2252
|
|
2253
2253
|
const WRAPPER_LENGTH = 185;
|
2254
2254
|
const VITE_EXPORTS_LINE_PATTERN = /Object\.defineProperty\(__vite_ssr_exports__.*\n/g;
|
2255
2255
|
const DECORATOR_METADATA_PATTERN = /_ts_metadata\("design:paramtypes", \[[^\]]*\]\),*/g;
|
2256
2256
|
const DEFAULT_PROJECT = Symbol.for("default-project");
|
2257
|
+
const FILE_PROTOCOL = "file://";
|
2257
2258
|
const debug = createDebug("vitest:coverage");
|
2258
2259
|
let uniqueId = 0;
|
2259
2260
|
class V8CoverageProvider extends BaseCoverageProvider {
|
@@ -2340,12 +2341,12 @@ Update your dependencies and make sure the versions match.`
|
|
2340
2341
|
* backwards compatibility is a breaking change.
|
2341
2342
|
*/
|
2342
2343
|
onAfterSuiteRun({ coverage, transformMode, projectName }) {
|
2343
|
-
if (transformMode !== "web" && transformMode !== "ssr") {
|
2344
|
+
if (transformMode !== "web" && transformMode !== "ssr" && transformMode !== "browser") {
|
2344
2345
|
throw new Error(`Invalid transform mode: ${transformMode}`);
|
2345
2346
|
}
|
2346
2347
|
let entry = this.coverageFiles.get(projectName || DEFAULT_PROJECT);
|
2347
2348
|
if (!entry) {
|
2348
|
-
entry = { web: [], ssr: [] };
|
2349
|
+
entry = { web: [], ssr: [], browser: [] };
|
2349
2350
|
this.coverageFiles.set(projectName || DEFAULT_PROJECT, entry);
|
2350
2351
|
}
|
2351
2352
|
const filename = resolve(
|
@@ -2362,18 +2363,11 @@ Update your dependencies and make sure the versions match.`
|
|
2362
2363
|
const total = this.pendingPromises.length;
|
2363
2364
|
await Promise.all(this.pendingPromises);
|
2364
2365
|
this.pendingPromises = [];
|
2365
|
-
for (const [
|
2366
|
-
|
2367
|
-
coveragePerProject
|
2368
|
-
] of this.coverageFiles.entries()) {
|
2369
|
-
for (const [transformMode, filenames] of Object.entries(
|
2370
|
-
coveragePerProject
|
2371
|
-
)) {
|
2366
|
+
for (const [projectName, coveragePerProject] of this.coverageFiles.entries()) {
|
2367
|
+
for (const [transformMode, filenames] of Object.entries(coveragePerProject)) {
|
2372
2368
|
let merged = { result: [] };
|
2373
|
-
|
2374
|
-
|
2375
|
-
this.options.processingConcurrency
|
2376
|
-
)) {
|
2369
|
+
const project = this.ctx.projects.find((p) => p.getName() === projectName) || this.ctx.getCoreWorkspaceProject();
|
2370
|
+
for (const chunk of this.toSlices(filenames, this.options.processingConcurrency)) {
|
2377
2371
|
if (debug.enabled) {
|
2378
2372
|
index += chunk.length;
|
2379
2373
|
debug("Covered files %d/%d", index, total);
|
@@ -2388,7 +2382,7 @@ Update your dependencies and make sure the versions match.`
|
|
2388
2382
|
}
|
2389
2383
|
const converted = await this.convertCoverage(
|
2390
2384
|
merged,
|
2391
|
-
|
2385
|
+
project,
|
2392
2386
|
transformMode
|
2393
2387
|
);
|
2394
2388
|
const transformedCoverage = await transformCoverage(converted);
|
@@ -2401,6 +2395,9 @@ Update your dependencies and make sure the versions match.`
|
|
2401
2395
|
const converted = await this.convertCoverage(untestedCoverage);
|
2402
2396
|
coverageMap.merge(await transformCoverage(converted));
|
2403
2397
|
}
|
2398
|
+
if (this.options.excludeAfterRemap) {
|
2399
|
+
coverageMap.filter((filename) => this.testExclude.shouldInstrument(filename));
|
2400
|
+
}
|
2404
2401
|
return coverageMap;
|
2405
2402
|
}
|
2406
2403
|
async reportCoverage(coverageMap, { allTestsRun }) {
|
@@ -2488,6 +2485,7 @@ Update your dependencies and make sure the versions match.`
|
|
2488
2485
|
const transformResults = normalizeTransformResults(
|
2489
2486
|
this.ctx.vitenode.fetchCache
|
2490
2487
|
);
|
2488
|
+
const transform = this.createUncoveredFileTransformer(this.ctx);
|
2491
2489
|
const allFiles = await this.testExclude.glob(this.ctx.config.root);
|
2492
2490
|
let includedFiles = allFiles.map(
|
2493
2491
|
(file) => resolve(this.ctx.config.root, file)
|
@@ -2512,7 +2510,8 @@ Update your dependencies and make sure the versions match.`
|
|
2512
2510
|
chunk.map(async (filename) => {
|
2513
2511
|
const { originalSource } = await this.getSources(
|
2514
2512
|
filename.href,
|
2515
|
-
transformResults
|
2513
|
+
transformResults,
|
2514
|
+
transform
|
2516
2515
|
);
|
2517
2516
|
const coverage = {
|
2518
2517
|
url: filename.href,
|
@@ -2545,13 +2544,13 @@ Update your dependencies and make sure the versions match.`
|
|
2545
2544
|
}
|
2546
2545
|
return merged;
|
2547
2546
|
}
|
2548
|
-
async getSources(url, transformResults, functions = []) {
|
2547
|
+
async getSources(url, transformResults, onTransform, functions = []) {
|
2549
2548
|
const filePath = normalize(fileURLToPath$1(url));
|
2550
2549
|
let isExecuted = true;
|
2551
2550
|
let transformResult = transformResults.get(filePath);
|
2552
2551
|
if (!transformResult) {
|
2553
2552
|
isExecuted = false;
|
2554
|
-
transformResult = await
|
2553
|
+
transformResult = await onTransform(removeStartsWith(url, FILE_PROTOCOL)).catch(() => void 0);
|
2555
2554
|
}
|
2556
2555
|
const map = transformResult?.map;
|
2557
2556
|
const code = transformResult?.code;
|
@@ -2587,19 +2586,37 @@ Update your dependencies and make sure the versions match.`
|
|
2587
2586
|
}
|
2588
2587
|
};
|
2589
2588
|
}
|
2590
|
-
async convertCoverage(coverage,
|
2591
|
-
|
2592
|
-
|
2589
|
+
async convertCoverage(coverage, project = this.ctx.getCoreWorkspaceProject(), transformMode) {
|
2590
|
+
let fetchCache = project.vitenode.fetchCache;
|
2591
|
+
if (transformMode) {
|
2592
|
+
fetchCache = transformMode === "browser" ? /* @__PURE__ */ new Map() : project.vitenode.fetchCaches[transformMode];
|
2593
|
+
}
|
2593
2594
|
const transformResults = normalizeTransformResults(fetchCache);
|
2594
|
-
|
2595
|
-
(
|
2596
|
-
|
2595
|
+
async function onTransform(filepath) {
|
2596
|
+
if (transformMode === "browser" && project.browser) {
|
2597
|
+
const result = await project.browser.vite.transformRequest(removeStartsWith(filepath, project.config.root));
|
2598
|
+
if (result) {
|
2599
|
+
return { ...result, code: `${result.code}// <inline-source-map>` };
|
2600
|
+
}
|
2601
|
+
}
|
2602
|
+
return project.vitenode.transformRequest(filepath);
|
2603
|
+
}
|
2604
|
+
const scriptCoverages = [];
|
2605
|
+
for (const result of coverage.result) {
|
2606
|
+
if (transformMode === "browser") {
|
2607
|
+
if (result.url.startsWith("/@fs")) {
|
2608
|
+
result.url = `${FILE_PROTOCOL}${removeStartsWith(result.url, "/@fs")}`;
|
2609
|
+
} else {
|
2610
|
+
result.url = `${FILE_PROTOCOL}${project.config.root}${result.url}`;
|
2611
|
+
}
|
2612
|
+
}
|
2613
|
+
if (this.testExclude.shouldInstrument(fileURLToPath$1(result.url))) {
|
2614
|
+
scriptCoverages.push(result);
|
2615
|
+
}
|
2616
|
+
}
|
2597
2617
|
const coverageMap = libCoverage.createCoverageMap({});
|
2598
2618
|
let index = 0;
|
2599
|
-
for (const chunk of this.toSlices(
|
2600
|
-
scriptCoverages,
|
2601
|
-
this.options.processingConcurrency
|
2602
|
-
)) {
|
2619
|
+
for (const chunk of this.toSlices(scriptCoverages, this.options.processingConcurrency)) {
|
2603
2620
|
if (debug.enabled) {
|
2604
2621
|
index += chunk.length;
|
2605
2622
|
debug("Converting %d/%d", index, scriptCoverages.length);
|
@@ -2609,6 +2626,7 @@ Update your dependencies and make sure the versions match.`
|
|
2609
2626
|
const sources = await this.getSources(
|
2610
2627
|
url,
|
2611
2628
|
transformResults,
|
2629
|
+
onTransform,
|
2612
2630
|
functions
|
2613
2631
|
);
|
2614
2632
|
const wrapperLength = sources.isExecuted ? WRAPPER_LENGTH : 0;
|
@@ -2673,5 +2691,11 @@ function normalizeTransformResults(fetchCache) {
|
|
2673
2691
|
}
|
2674
2692
|
return normalized;
|
2675
2693
|
}
|
2694
|
+
function removeStartsWith(filepath, start) {
|
2695
|
+
if (filepath.startsWith(start)) {
|
2696
|
+
return filepath.slice(start.length);
|
2697
|
+
}
|
2698
|
+
return filepath;
|
2699
|
+
}
|
2676
2700
|
|
2677
2701
|
export { V8CoverageProvider };
|
package/package.json
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"name": "@vitest/coverage-v8",
|
3
3
|
"type": "module",
|
4
|
-
"version": "2.1.0-beta.
|
4
|
+
"version": "2.1.0-beta.6",
|
5
5
|
"description": "V8 coverage provider for Vitest",
|
6
6
|
"author": "Anthony Fu <anthonyfu117@hotmail.com>",
|
7
7
|
"license": "MIT",
|
@@ -28,6 +28,10 @@
|
|
28
28
|
"types": "./dist/index.d.ts",
|
29
29
|
"default": "./dist/index.js"
|
30
30
|
},
|
31
|
+
"./browser": {
|
32
|
+
"types": "./dist/browser.d.ts",
|
33
|
+
"default": "./dist/browser.js"
|
34
|
+
},
|
31
35
|
"./*": "./*"
|
32
36
|
},
|
33
37
|
"main": "./dist/index.js",
|
@@ -37,7 +41,13 @@
|
|
37
41
|
"dist"
|
38
42
|
],
|
39
43
|
"peerDependencies": {
|
40
|
-
"vitest": "2.1.0-beta.
|
44
|
+
"@vitest/browser": "2.1.0-beta.6",
|
45
|
+
"vitest": "2.1.0-beta.6"
|
46
|
+
},
|
47
|
+
"peerDependenciesMeta": {
|
48
|
+
"@vitest/browser": {
|
49
|
+
"optional": true
|
50
|
+
}
|
41
51
|
},
|
42
52
|
"dependencies": {
|
43
53
|
"@ampproject/remapping": "^2.3.0",
|
@@ -61,8 +71,9 @@
|
|
61
71
|
"@types/istanbul-reports": "^3.0.4",
|
62
72
|
"pathe": "^1.1.2",
|
63
73
|
"v8-to-istanbul": "^9.3.0",
|
64
|
-
"vitest": "2.1.0-beta.
|
65
|
-
"vite-node": "2.1.0-beta.
|
74
|
+
"@vitest/browser": "2.1.0-beta.6",
|
75
|
+
"vite-node": "2.1.0-beta.6",
|
76
|
+
"vitest": "2.1.0-beta.6"
|
66
77
|
},
|
67
78
|
"scripts": {
|
68
79
|
"build": "rimraf dist && rollup -c",
|