@paretools/test 0.9.0 → 0.10.0
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/README.md +35 -18
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/formatters.d.ts +1 -0
- package/dist/lib/formatters.d.ts.map +1 -1
- package/dist/lib/formatters.js +4 -0
- package/dist/lib/formatters.js.map +1 -1
- package/dist/lib/parsers/jest.d.ts +4 -0
- package/dist/lib/parsers/jest.d.ts.map +1 -1
- package/dist/lib/parsers/jest.js +39 -2
- package/dist/lib/parsers/jest.js.map +1 -1
- package/dist/lib/parsers/mocha.d.ts +4 -0
- package/dist/lib/parsers/mocha.d.ts.map +1 -1
- package/dist/lib/parsers/mocha.js +47 -2
- package/dist/lib/parsers/mocha.js.map +1 -1
- package/dist/lib/parsers/playwright.d.ts.map +1 -1
- package/dist/lib/parsers/playwright.js +1 -0
- package/dist/lib/parsers/playwright.js.map +1 -1
- package/dist/lib/parsers/pytest.d.ts +4 -0
- package/dist/lib/parsers/pytest.d.ts.map +1 -1
- package/dist/lib/parsers/pytest.js +35 -2
- package/dist/lib/parsers/pytest.js.map +1 -1
- package/dist/lib/parsers/vitest.d.ts +4 -0
- package/dist/lib/parsers/vitest.d.ts.map +1 -1
- package/dist/lib/parsers/vitest.js +39 -2
- package/dist/lib/parsers/vitest.js.map +1 -1
- package/dist/lib/timeouts.d.ts +3 -0
- package/dist/lib/timeouts.d.ts.map +1 -0
- package/dist/lib/timeouts.js +3 -0
- package/dist/lib/timeouts.js.map +1 -0
- package/dist/schemas/index.d.ts +17 -0
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +12 -0
- package/dist/schemas/index.js.map +1 -1
- package/dist/tools/coverage.d.ts +1 -1
- package/dist/tools/coverage.d.ts.map +1 -1
- package/dist/tools/coverage.js +103 -38
- package/dist/tools/coverage.js.map +1 -1
- package/dist/tools/playwright.d.ts.map +1 -1
- package/dist/tools/playwright.js +5 -15
- package/dist/tools/playwright.js.map +1 -1
- package/dist/tools/run.d.ts +3 -1
- package/dist/tools/run.d.ts.map +1 -1
- package/dist/tools/run.js +21 -18
- package/dist/tools/run.js.map +1 -1
- package/package.json +6 -3
package/README.md
CHANGED
|
@@ -7,12 +7,13 @@
|
|
|
7
7
|
|
|
8
8
|
Part of the [Pare](https://github.com/Dave-London/Pare) suite of MCP servers. Auto-detects pytest, jest, vitest, and mocha.
|
|
9
9
|
|
|
10
|
-
## Tools (
|
|
10
|
+
## Tools (3)
|
|
11
11
|
|
|
12
|
-
| Tool
|
|
13
|
-
|
|
|
14
|
-
| `run`
|
|
15
|
-
| `coverage`
|
|
12
|
+
| Tool | Description |
|
|
13
|
+
| ------------ | ------------------------------------------------------- |
|
|
14
|
+
| `run` | Run tests, returns pass/fail counts and failure details |
|
|
15
|
+
| `coverage` | Run tests with coverage, returns per-file summary |
|
|
16
|
+
| `playwright` | Run Playwright tests with structured pass/fail output |
|
|
16
17
|
|
|
17
18
|
## Quick Start
|
|
18
19
|
|
|
@@ -54,19 +55,35 @@ Add to your MCP client config:
|
|
|
54
55
|
}
|
|
55
56
|
```
|
|
56
57
|
|
|
57
|
-
##
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
58
|
+
## Timeout Policy
|
|
59
|
+
|
|
60
|
+
- Tool process timeout (`run`, `coverage`, `playwright`): `300_000ms` (5 minutes)
|
|
61
|
+
- Integration test MCP call timeout: `300_000ms`
|
|
62
|
+
- Vitest file/test timeout for this package: `300_000ms`
|
|
63
|
+
|
|
64
|
+
This package runs real downstream suites (including `@paretools/git` integration tests), so lower global limits like 120s can fail due to cumulative runtime on slower CI/Windows runners.
|
|
65
|
+
|
|
66
|
+
## Test Batching (Maintainers)
|
|
67
|
+
|
|
68
|
+
- `pnpm test:unit` runs fast parser/formatter/helper tests
|
|
69
|
+
- `pnpm test:integration` runs MCP integration + tool-params tests
|
|
70
|
+
- `pnpm test:fidelity` runs the long fidelity suite
|
|
71
|
+
|
|
72
|
+
The default `pnpm test` runs these batches sequentially for earlier failure and clearer triage.
|
|
73
|
+
|
|
74
|
+
## All Pare Servers (149 tools)
|
|
75
|
+
|
|
76
|
+
| Package | Tools | Wraps |
|
|
77
|
+
| -------------------------------------------------------------------- | --------------------------------------------------------------------------- | --------------------------------------- |
|
|
78
|
+
| [@paretools/git](https://www.npmjs.com/package/@paretools/git) | status, log, diff, branch, show, add, commit, push, pull, checkout | git |
|
|
79
|
+
| **@paretools/test** | run, coverage, playwright | pytest, jest, vitest, mocha, playwright |
|
|
80
|
+
| [@paretools/npm](https://www.npmjs.com/package/@paretools/npm) | install, audit, outdated, list, run, test, init | npm |
|
|
81
|
+
| [@paretools/build](https://www.npmjs.com/package/@paretools/build) | tsc, build, esbuild, vite-build, webpack | tsc, esbuild, vite, webpack |
|
|
82
|
+
| [@paretools/lint](https://www.npmjs.com/package/@paretools/lint) | lint, format-check, prettier-format, biome-check, biome-format | eslint, prettier, biome |
|
|
83
|
+
| [@paretools/python](https://www.npmjs.com/package/@paretools/python) | pip-install, mypy, ruff-check, pip-audit, pytest, uv-install, uv-run, black | pip, mypy, ruff, pytest, uv, black |
|
|
84
|
+
| [@paretools/docker](https://www.npmjs.com/package/@paretools/docker) | ps, build, logs, images, run, exec, compose-up, compose-down, pull | docker, docker compose |
|
|
85
|
+
| [@paretools/cargo](https://www.npmjs.com/package/@paretools/cargo) | build, test, clippy, run, add, remove, fmt, doc, check | cargo |
|
|
86
|
+
| [@paretools/go](https://www.npmjs.com/package/@paretools/go) | build, test, vet, run, mod-tidy, fmt, generate | go, gofmt |
|
|
70
87
|
|
|
71
88
|
## Compatible Clients
|
|
72
89
|
|
package/dist/index.js
CHANGED
|
@@ -3,7 +3,7 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
|
3
3
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
4
4
|
import { registerAllTools } from "./tools/index.js";
|
|
5
5
|
const server = new McpServer({ name: "@paretools/test", version: "0.8.1" }, {
|
|
6
|
-
instructions: "Structured test runner operations (run, coverage). Auto-detects pytest, jest, vitest, and mocha.
|
|
6
|
+
instructions: "Structured test runner operations (run, coverage). Auto-detects pytest, jest, vitest, and mocha. Returns typed JSON with structured pass/fail results and failure details.",
|
|
7
7
|
});
|
|
8
8
|
registerAllTools(server);
|
|
9
9
|
const transport = new StdioServerTransport();
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,OAAO,EAAE,EAC7C;IACE,YAAY,EACV,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,OAAO,EAAE,EAC7C;IACE,YAAY,EACV,4KAA4K;CAC/K,CACF,CAAC;AAEF,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAEzB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC"}
|
package/dist/lib/formatters.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatters.d.ts","sourceRoot":"","sources":["../../src/lib/formatters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE/E,mHAAmH;AACnH,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAYhD;AAED,kGAAkG;AAClG,wBAAgB,cAAc,CAAC,CAAC,EAAE,QAAQ,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"formatters.d.ts","sourceRoot":"","sources":["../../src/lib/formatters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE/E,mHAAmH;AACnH,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAYhD;AAED,kGAAkG;AAClG,wBAAgB,cAAc,CAAC,CAAC,EAAE,QAAQ,GAAG,MAAM,CAiBlD;AAID,uGAAuG;AACvG,MAAM,WAAW,cAAc;IAC7B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACrD;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,OAAO,GAAG,cAAc,CAS5D;AAED,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,cAAc,GAAG,MAAM,CAW9D;AAED,gFAAgF;AAChF,MAAM,WAAW,eAAe;IAC9B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE;QACP,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,QAAQ,GAAG,eAAe,CAO/D;AAED,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,eAAe,GAAG,MAAM,CAehE;AAID,qFAAqF;AACrF,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAelE;AAED,sGAAsG;AACtG,MAAM,WAAW,uBAAuB;IACtC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,QAAQ,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACpD;AAED,wBAAgB,0BAA0B,CAAC,CAAC,EAAE,gBAAgB,GAAG,uBAAuB,CAQvF;AAED,wBAAgB,6BAA6B,CAAC,CAAC,EAAE,uBAAuB,GAAG,MAAM,CAchF"}
|
package/dist/lib/formatters.js
CHANGED
|
@@ -13,6 +13,8 @@ export function formatTestRun(r) {
|
|
|
13
13
|
/** Formats structured coverage data into a human-readable summary with per-file line coverage. */
|
|
14
14
|
export function formatCoverage(c) {
|
|
15
15
|
const parts = [`Coverage (${c.framework}): ${c.summary.lines}% lines`];
|
|
16
|
+
if (c.summary.statements !== undefined)
|
|
17
|
+
parts[0] += `, ${c.summary.statements}% statements`;
|
|
16
18
|
if (c.summary.branches !== undefined)
|
|
17
19
|
parts[0] += `, ${c.summary.branches}% branches`;
|
|
18
20
|
if (c.summary.functions !== undefined)
|
|
@@ -55,6 +57,8 @@ export function compactCoverageMap(c) {
|
|
|
55
57
|
}
|
|
56
58
|
export function formatCoverageCompact(c) {
|
|
57
59
|
const parts = [`Coverage (${c.framework}): ${c.summary.lines}% lines`];
|
|
60
|
+
if (c.summary.statements !== undefined)
|
|
61
|
+
parts[0] += `, ${c.summary.statements}% statements`;
|
|
58
62
|
if (c.summary.branches !== undefined)
|
|
59
63
|
parts[0] += `, ${c.summary.branches}% branches`;
|
|
60
64
|
if (c.summary.functions !== undefined)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatters.js","sourceRoot":"","sources":["../../src/lib/formatters.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"formatters.js","sourceRoot":"","sources":["../../src/lib/formatters.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,4 +15,8 @@ export declare function parseJestJson(jsonStr: string): TestRun;
|
|
|
15
15
|
* ----------|---------|----------|---------|---------|
|
|
16
16
|
*/
|
|
17
17
|
export declare function parseJestCoverage(stdout: string): Coverage;
|
|
18
|
+
/**
|
|
19
|
+
* Parses Jest JSON summary coverage output (`coverage-summary.json`).
|
|
20
|
+
*/
|
|
21
|
+
export declare function parseJestCoverageJson(jsonStr: string): Coverage;
|
|
18
22
|
//# sourceMappingURL=jest.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jest.d.ts","sourceRoot":"","sources":["../../../src/lib/parsers/jest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"jest.d.ts","sourceRoot":"","sources":["../../../src/lib/parsers/jest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAoChE;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAkDtD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAoC1D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CAkC/D"}
|
package/dist/lib/parsers/jest.js
CHANGED
|
@@ -6,8 +6,15 @@ export function parseJestJson(jsonStr) {
|
|
|
6
6
|
const endTime = Date.now();
|
|
7
7
|
const duration = (endTime - data.startTime) / 1000;
|
|
8
8
|
const failures = [];
|
|
9
|
+
const tests = [];
|
|
9
10
|
for (const suite of data.testResults) {
|
|
10
11
|
for (const test of suite.testResults) {
|
|
12
|
+
tests.push({
|
|
13
|
+
name: test.fullName,
|
|
14
|
+
file: suite.testFilePath,
|
|
15
|
+
status: test.status === "failed" ? "failed" : test.status === "passed" ? "passed" : "skipped",
|
|
16
|
+
...(test.duration !== undefined ? { duration: test.duration / 1000 } : {}),
|
|
17
|
+
});
|
|
11
18
|
if (test.status === "failed") {
|
|
12
19
|
const message = test.failureMessages.join("\n").trim();
|
|
13
20
|
// Try to extract expected/actual from Jest's diff output
|
|
@@ -35,6 +42,7 @@ export function parseJestJson(jsonStr) {
|
|
|
35
42
|
duration: Math.round(duration * 100) / 100,
|
|
36
43
|
},
|
|
37
44
|
failures,
|
|
45
|
+
...(tests.length > 0 ? { tests } : {}),
|
|
38
46
|
};
|
|
39
47
|
}
|
|
40
48
|
/**
|
|
@@ -51,17 +59,18 @@ export function parseJestJson(jsonStr) {
|
|
|
51
59
|
export function parseJestCoverage(stdout) {
|
|
52
60
|
const lines = stdout.split("\n");
|
|
53
61
|
const files = [];
|
|
54
|
-
let summary = { lines: 0, branches: 0, functions: 0 };
|
|
62
|
+
let summary = { statements: 0, lines: 0, branches: 0, functions: 0 };
|
|
55
63
|
for (const line of lines) {
|
|
56
64
|
// Match coverage table rows: " file | stmts | branch | funcs | lines | uncovered"
|
|
57
65
|
const match = line.match(/\s*(.+?)\s*\|\s*([\d.]+)\s*\|\s*([\d.]+)\s*\|\s*([\d.]+)\s*\|\s*([\d.]+)\s*\|/);
|
|
58
66
|
if (!match)
|
|
59
67
|
continue;
|
|
60
|
-
const [, name, , branch, funcs, linePct] = match;
|
|
68
|
+
const [, name, stmts, branch, funcs, linePct] = match;
|
|
61
69
|
const trimName = name.trim();
|
|
62
70
|
if (trimName === "File" || trimName.match(/^-+$/))
|
|
63
71
|
continue;
|
|
64
72
|
const entry = {
|
|
73
|
+
statements: parseFloat(stmts),
|
|
65
74
|
lines: parseFloat(linePct),
|
|
66
75
|
branches: parseFloat(branch),
|
|
67
76
|
functions: parseFloat(funcs),
|
|
@@ -79,4 +88,32 @@ export function parseJestCoverage(stdout) {
|
|
|
79
88
|
files,
|
|
80
89
|
};
|
|
81
90
|
}
|
|
91
|
+
/**
|
|
92
|
+
* Parses Jest JSON summary coverage output (`coverage-summary.json`).
|
|
93
|
+
*/
|
|
94
|
+
export function parseJestCoverageJson(jsonStr) {
|
|
95
|
+
const parsed = JSON.parse(jsonStr);
|
|
96
|
+
const files = [];
|
|
97
|
+
let summary = { statements: 0, lines: 0, branches: 0, functions: 0 };
|
|
98
|
+
for (const [file, metrics] of Object.entries(parsed)) {
|
|
99
|
+
const entry = {
|
|
100
|
+
statements: metrics.statements?.pct ?? 0,
|
|
101
|
+
lines: metrics.lines?.pct ?? 0,
|
|
102
|
+
branches: metrics.branches?.pct ?? 0,
|
|
103
|
+
functions: metrics.functions?.pct ?? 0,
|
|
104
|
+
};
|
|
105
|
+
if (file === "total") {
|
|
106
|
+
summary = entry;
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
files.push({ file, ...entry });
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return {
|
|
113
|
+
framework: "jest",
|
|
114
|
+
summary,
|
|
115
|
+
files,
|
|
116
|
+
totalFiles: files.length,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
82
119
|
//# sourceMappingURL=jest.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jest.js","sourceRoot":"","sources":["../../../src/lib/parsers/jest.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"jest.js","sourceRoot":"","sources":["../../../src/lib/parsers/jest.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,4 +15,8 @@ export declare function parseMochaJson(jsonStr: string): TestRun;
|
|
|
15
15
|
* ----------|---------|----------|---------|---------|
|
|
16
16
|
*/
|
|
17
17
|
export declare function parseMochaCoverage(stdout: string): Coverage;
|
|
18
|
+
/**
|
|
19
|
+
* Parses nyc JSON summary coverage output (`coverage-summary.json`).
|
|
20
|
+
*/
|
|
21
|
+
export declare function parseMochaCoverageJson(jsonStr: string): Coverage;
|
|
18
22
|
//# sourceMappingURL=mocha.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mocha.d.ts","sourceRoot":"","sources":["../../../src/lib/parsers/mocha.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAuChE;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"mocha.d.ts","sourceRoot":"","sources":["../../../src/lib/parsers/mocha.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAuChE;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAkDvD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAmC3D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CAkChE"}
|
|
@@ -4,7 +4,22 @@
|
|
|
4
4
|
export function parseMochaJson(jsonStr) {
|
|
5
5
|
const data = JSON.parse(jsonStr);
|
|
6
6
|
const failures = [];
|
|
7
|
+
const tests = [];
|
|
8
|
+
for (const test of data.passes) {
|
|
9
|
+
tests.push({
|
|
10
|
+
name: test.fullTitle,
|
|
11
|
+
file: test.file,
|
|
12
|
+
status: "passed",
|
|
13
|
+
...(test.duration !== undefined ? { duration: test.duration / 1000 } : {}),
|
|
14
|
+
});
|
|
15
|
+
}
|
|
7
16
|
for (const test of data.failures) {
|
|
17
|
+
tests.push({
|
|
18
|
+
name: test.fullTitle,
|
|
19
|
+
file: test.file,
|
|
20
|
+
status: "failed",
|
|
21
|
+
...(test.duration !== undefined ? { duration: test.duration / 1000 } : {}),
|
|
22
|
+
});
|
|
8
23
|
const expected = test.err.expected !== undefined ? String(test.err.expected) : undefined;
|
|
9
24
|
const actual = test.err.actual !== undefined ? String(test.err.actual) : undefined;
|
|
10
25
|
failures.push({
|
|
@@ -28,6 +43,7 @@ export function parseMochaJson(jsonStr) {
|
|
|
28
43
|
duration: Math.round(durationSec * 100) / 100,
|
|
29
44
|
},
|
|
30
45
|
failures,
|
|
46
|
+
...(tests.length > 0 ? { tests } : {}),
|
|
31
47
|
};
|
|
32
48
|
}
|
|
33
49
|
/**
|
|
@@ -44,16 +60,17 @@ export function parseMochaJson(jsonStr) {
|
|
|
44
60
|
export function parseMochaCoverage(stdout) {
|
|
45
61
|
const lines = stdout.split("\n");
|
|
46
62
|
const files = [];
|
|
47
|
-
let summary = { lines: 0, branches: 0, functions: 0 };
|
|
63
|
+
let summary = { statements: 0, lines: 0, branches: 0, functions: 0 };
|
|
48
64
|
for (const line of lines) {
|
|
49
65
|
const match = line.match(/\s*(.+?)\s*\|\s*([\d.]+)\s*\|\s*([\d.]+)\s*\|\s*([\d.]+)\s*\|\s*([\d.]+)\s*\|/);
|
|
50
66
|
if (!match)
|
|
51
67
|
continue;
|
|
52
|
-
const [, name, , branch, funcs, linePct] = match;
|
|
68
|
+
const [, name, stmts, branch, funcs, linePct] = match;
|
|
53
69
|
const trimName = name.trim();
|
|
54
70
|
if (trimName === "File" || trimName.match(/^-+$/))
|
|
55
71
|
continue;
|
|
56
72
|
const entry = {
|
|
73
|
+
statements: parseFloat(stmts),
|
|
57
74
|
lines: parseFloat(linePct),
|
|
58
75
|
branches: parseFloat(branch),
|
|
59
76
|
functions: parseFloat(funcs),
|
|
@@ -71,4 +88,32 @@ export function parseMochaCoverage(stdout) {
|
|
|
71
88
|
files,
|
|
72
89
|
};
|
|
73
90
|
}
|
|
91
|
+
/**
|
|
92
|
+
* Parses nyc JSON summary coverage output (`coverage-summary.json`).
|
|
93
|
+
*/
|
|
94
|
+
export function parseMochaCoverageJson(jsonStr) {
|
|
95
|
+
const parsed = JSON.parse(jsonStr);
|
|
96
|
+
const files = [];
|
|
97
|
+
let summary = { statements: 0, lines: 0, branches: 0, functions: 0 };
|
|
98
|
+
for (const [file, metrics] of Object.entries(parsed)) {
|
|
99
|
+
const entry = {
|
|
100
|
+
statements: metrics.statements?.pct ?? 0,
|
|
101
|
+
lines: metrics.lines?.pct ?? 0,
|
|
102
|
+
branches: metrics.branches?.pct ?? 0,
|
|
103
|
+
functions: metrics.functions?.pct ?? 0,
|
|
104
|
+
};
|
|
105
|
+
if (file === "total") {
|
|
106
|
+
summary = entry;
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
files.push({ file, ...entry });
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return {
|
|
113
|
+
framework: "mocha",
|
|
114
|
+
summary,
|
|
115
|
+
files,
|
|
116
|
+
totalFiles: files.length,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
74
119
|
//# sourceMappingURL=mocha.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mocha.js","sourceRoot":"","sources":["../../../src/lib/parsers/mocha.ts"],"names":[],"mappings":"AAuCA;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAoB,CAAC;IAEpD,MAAM,QAAQ,GAAwB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"mocha.js","sourceRoot":"","sources":["../../../src/lib/parsers/mocha.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"playwright.d.ts","sourceRoot":"","sources":["../../../src/lib/parsers/playwright.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAGjB,MAAM,wBAAwB,CAAC;AA6ChC;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,
|
|
1
|
+
{"version":3,"file":"playwright.d.ts","sourceRoot":"","sources":["../../../src/lib/parsers/playwright.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAGjB,MAAM,wBAAwB,CAAC;AA6ChC;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,CA0HrE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"playwright.js","sourceRoot":"","sources":["../../../src/lib/parsers/playwright.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"playwright.js","sourceRoot":"","sources":["../../../src/lib/parsers/playwright.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,4 +23,8 @@ export declare function parsePytestOutput(stdout: string): TestRun;
|
|
|
23
23
|
* TOTAL 80 15 81%
|
|
24
24
|
*/
|
|
25
25
|
export declare function parsePytestCoverage(stdout: string): Coverage;
|
|
26
|
+
/**
|
|
27
|
+
* Parses coverage.py JSON output (`pytest --cov-report=json:<file>`) into structured data.
|
|
28
|
+
*/
|
|
29
|
+
export declare function parsePytestCoverageJson(jsonStr: string): Coverage;
|
|
26
30
|
//# sourceMappingURL=pytest.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pytest.d.ts","sourceRoot":"","sources":["../../../src/lib/parsers/pytest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAEhE;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"pytest.d.ts","sourceRoot":"","sources":["../../../src/lib/parsers/pytest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAEhE;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CA0EzD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAgC5D;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CA8BjE"}
|
|
@@ -18,6 +18,15 @@ export function parsePytestOutput(stdout) {
|
|
|
18
18
|
const duration = summaryMatch ? parseFloat(summaryMatch[5] || "0") : 0;
|
|
19
19
|
// Parse failures from short test summary
|
|
20
20
|
const failures = [];
|
|
21
|
+
const tests = [];
|
|
22
|
+
for (const line of lines) {
|
|
23
|
+
const m = line.match(/^(.+?)::(.+?)\s+(PASSED|FAILED|SKIPPED|XFAIL|XPASS)\b/);
|
|
24
|
+
if (!m)
|
|
25
|
+
continue;
|
|
26
|
+
const [, file, name, statusRaw] = m;
|
|
27
|
+
const status = statusRaw === "FAILED" ? "failed" : statusRaw === "PASSED" ? "passed" : "skipped";
|
|
28
|
+
tests.push({ file, name, status });
|
|
29
|
+
}
|
|
21
30
|
const summaryStart = lines.findIndex((l) => l.includes("short test summary info"));
|
|
22
31
|
const summaryEnd = lines.findIndex((l, i) => i > summaryStart && summaryStart >= 0 && l.match(/^=+ /));
|
|
23
32
|
if (summaryStart >= 0) {
|
|
@@ -56,6 +65,7 @@ export function parsePytestOutput(stdout) {
|
|
|
56
65
|
duration,
|
|
57
66
|
},
|
|
58
67
|
failures,
|
|
68
|
+
...(tests.length > 0 ? { tests } : {}),
|
|
59
69
|
};
|
|
60
70
|
}
|
|
61
71
|
/**
|
|
@@ -92,14 +102,37 @@ export function parsePytestCoverage(stdout) {
|
|
|
92
102
|
totalPct = pct;
|
|
93
103
|
}
|
|
94
104
|
else {
|
|
95
|
-
files.push({ file, lines: pct });
|
|
105
|
+
files.push({ file, statements: pct, lines: pct });
|
|
96
106
|
}
|
|
97
107
|
}
|
|
98
108
|
}
|
|
99
109
|
return {
|
|
100
110
|
framework: "pytest",
|
|
101
|
-
summary: { lines: totalPct },
|
|
111
|
+
summary: { statements: totalPct, lines: totalPct },
|
|
112
|
+
files,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Parses coverage.py JSON output (`pytest --cov-report=json:<file>`) into structured data.
|
|
117
|
+
*/
|
|
118
|
+
export function parsePytestCoverageJson(jsonStr) {
|
|
119
|
+
const data = JSON.parse(jsonStr);
|
|
120
|
+
const files = [];
|
|
121
|
+
for (const [file, info] of Object.entries(data.files ?? {})) {
|
|
122
|
+
const pct = info.summary?.percent_covered ?? 0;
|
|
123
|
+
files.push({
|
|
124
|
+
file,
|
|
125
|
+
statements: pct,
|
|
126
|
+
lines: pct,
|
|
127
|
+
uncoveredLines: info.missing_lines ?? undefined,
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
const totalPct = data.totals?.percent_covered ?? 0;
|
|
131
|
+
return {
|
|
132
|
+
framework: "pytest",
|
|
133
|
+
summary: { statements: totalPct, lines: totalPct },
|
|
102
134
|
files,
|
|
135
|
+
totalFiles: files.length,
|
|
103
136
|
};
|
|
104
137
|
}
|
|
105
138
|
//# sourceMappingURL=pytest.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pytest.js","sourceRoot":"","sources":["../../../src/lib/parsers/pytest.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAEjC,+DAA+D;IAC/D,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAC/B,yGAAyG,CAC1G,CAAC;IAEF,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxE,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEvE,yCAAyC;IACzC,MAAM,QAAQ,GAAwB,EAAE,CAAC;IACzC,MAAM,YAAY,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC,CAAC;IACnF,MAAM,UAAU,GAAG,KAAK,CAAC,SAAS,CAChC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,YAAY,IAAI,YAAY,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CACnE,CAAC;IAEF,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;QACtB,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAC3B,YAAY,GAAG,CAAC,EAChB,UAAU,GAAG,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CACnD,CAAC;QACF,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;YACnE,IAAI,KAAK,EAAE,CAAC;gBACV,QAAQ,CAAC,IAAI,CAAC;oBACZ,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;oBACd,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;oBAC1B,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;iBACzB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,uEAAuE;IACvE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QACxC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;YACnD,IAAI,KAAK,EAAE,CAAC;gBACV,QAAQ,CAAC,IAAI,CAAC;oBACZ,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;oBACd,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;oBACd,OAAO,EAAE,sDAAsD;iBAChE,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,SAAS,EAAE,QAAQ;QACnB,OAAO,EAAE;YACP,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO;YAChC,MAAM;YACN,MAAM;YACN,OAAO;YACP,QAAQ;SACT;QACD,QAAQ;
|
|
1
|
+
{"version":3,"file":"pytest.js","sourceRoot":"","sources":["../../../src/lib/parsers/pytest.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,4 +8,8 @@ export declare function parseVitestJson(jsonStr: string): TestRun;
|
|
|
8
8
|
* Parses Vitest text coverage output (uses c8/istanbul format, same as Jest).
|
|
9
9
|
*/
|
|
10
10
|
export declare function parseVitestCoverage(stdout: string): Coverage;
|
|
11
|
+
/**
|
|
12
|
+
* Parses Vitest JSON summary coverage output (`coverage-summary.json`).
|
|
13
|
+
*/
|
|
14
|
+
export declare function parseVitestCoverageJson(jsonStr: string): Coverage;
|
|
11
15
|
//# sourceMappingURL=vitest.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vitest.d.ts","sourceRoot":"","sources":["../../../src/lib/parsers/vitest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"vitest.d.ts","sourceRoot":"","sources":["../../../src/lib/parsers/vitest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAyBhE;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAkDxD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAmC5D;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CAkCjE"}
|
|
@@ -7,8 +7,15 @@ export function parseVitestJson(jsonStr) {
|
|
|
7
7
|
const endTime = Date.now();
|
|
8
8
|
const duration = (endTime - data.startTime) / 1000;
|
|
9
9
|
const failures = [];
|
|
10
|
+
const tests = [];
|
|
10
11
|
for (const suite of data.testResults) {
|
|
11
12
|
for (const test of suite.assertionResults) {
|
|
13
|
+
tests.push({
|
|
14
|
+
name: test.fullName,
|
|
15
|
+
file: suite.name,
|
|
16
|
+
status: test.status === "failed" ? "failed" : test.status === "passed" ? "passed" : "skipped",
|
|
17
|
+
...(test.duration !== undefined ? { duration: test.duration / 1000 } : {}),
|
|
18
|
+
});
|
|
12
19
|
if (test.status === "failed") {
|
|
13
20
|
const message = test.failureMessages.join("\n").trim();
|
|
14
21
|
// Vitest uses similar assertion format to Jest
|
|
@@ -36,6 +43,7 @@ export function parseVitestJson(jsonStr) {
|
|
|
36
43
|
duration: Math.round(duration * 100) / 100,
|
|
37
44
|
},
|
|
38
45
|
failures,
|
|
46
|
+
...(tests.length > 0 ? { tests } : {}),
|
|
39
47
|
};
|
|
40
48
|
}
|
|
41
49
|
/**
|
|
@@ -44,16 +52,17 @@ export function parseVitestJson(jsonStr) {
|
|
|
44
52
|
export function parseVitestCoverage(stdout) {
|
|
45
53
|
const lines = stdout.split("\n");
|
|
46
54
|
const files = [];
|
|
47
|
-
let summary = { lines: 0, branches: 0, functions: 0 };
|
|
55
|
+
let summary = { statements: 0, lines: 0, branches: 0, functions: 0 };
|
|
48
56
|
for (const line of lines) {
|
|
49
57
|
const match = line.match(/\s*(.+?)\s*\|\s*([\d.]+)\s*\|\s*([\d.]+)\s*\|\s*([\d.]+)\s*\|\s*([\d.]+)\s*\|/);
|
|
50
58
|
if (!match)
|
|
51
59
|
continue;
|
|
52
|
-
const [, name, , branch, funcs, linePct] = match;
|
|
60
|
+
const [, name, stmts, branch, funcs, linePct] = match;
|
|
53
61
|
const trimName = name.trim();
|
|
54
62
|
if (trimName === "File" || trimName.match(/^-+$/))
|
|
55
63
|
continue;
|
|
56
64
|
const entry = {
|
|
65
|
+
statements: parseFloat(stmts),
|
|
57
66
|
lines: parseFloat(linePct),
|
|
58
67
|
branches: parseFloat(branch),
|
|
59
68
|
functions: parseFloat(funcs),
|
|
@@ -71,4 +80,32 @@ export function parseVitestCoverage(stdout) {
|
|
|
71
80
|
files,
|
|
72
81
|
};
|
|
73
82
|
}
|
|
83
|
+
/**
|
|
84
|
+
* Parses Vitest JSON summary coverage output (`coverage-summary.json`).
|
|
85
|
+
*/
|
|
86
|
+
export function parseVitestCoverageJson(jsonStr) {
|
|
87
|
+
const parsed = JSON.parse(jsonStr);
|
|
88
|
+
const files = [];
|
|
89
|
+
let summary = { statements: 0, lines: 0, branches: 0, functions: 0 };
|
|
90
|
+
for (const [file, metrics] of Object.entries(parsed)) {
|
|
91
|
+
const entry = {
|
|
92
|
+
statements: metrics.statements?.pct ?? 0,
|
|
93
|
+
lines: metrics.lines?.pct ?? 0,
|
|
94
|
+
branches: metrics.branches?.pct ?? 0,
|
|
95
|
+
functions: metrics.functions?.pct ?? 0,
|
|
96
|
+
};
|
|
97
|
+
if (file === "total") {
|
|
98
|
+
summary = entry;
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
files.push({ file, ...entry });
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return {
|
|
105
|
+
framework: "vitest",
|
|
106
|
+
summary,
|
|
107
|
+
files,
|
|
108
|
+
totalFiles: files.length,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
74
111
|
//# sourceMappingURL=vitest.js.map
|