zeitzeuge 0.3.5 → 0.4.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/dist/cli.js +85 -1
- package/dist/output/report.d.ts +2 -0
- package/dist/output/report.d.ts.map +1 -1
- package/dist/output/terminal.d.ts +5 -0
- package/dist/output/terminal.d.ts.map +1 -1
- package/dist/vitest/index.d.ts +2 -0
- package/dist/vitest/index.d.ts.map +1 -1
- package/dist/vitest/index.js +252 -8
- package/dist/vitest/metrics.d.ts +82 -0
- package/dist/vitest/metrics.d.ts.map +1 -0
- package/dist/vitest/reporter.d.ts.map +1 -1
- package/dist/vitest/types.d.ts +2 -0
- package/dist/vitest/types.d.ts.map +1 -1
- package/dist/vitest/workspace.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -1509,6 +1509,47 @@ function printFindingsVitest(findings) {
|
|
|
1509
1509
|
};
|
|
1510
1510
|
console.log(`${indent}${pc.dim("Summary:")} ${pc.red(`${counts.critical} critical`)}, ${pc.yellow(`${counts.warning} warning`)}, ${pc.green(`${counts.info} info`)}`);
|
|
1511
1511
|
}
|
|
1512
|
+
function printMetricsSummary(metrics) {
|
|
1513
|
+
const indent = " ";
|
|
1514
|
+
const s = metrics.suite;
|
|
1515
|
+
const c = metrics.cpu;
|
|
1516
|
+
console.log(`${indent}${pc.bold("Suite")}`);
|
|
1517
|
+
console.log(`${indent} Total: ${formatMs(s.totalDuration)} · ` + `${s.totalTests} tests (${s.passCount} pass, ${s.failCount} fail) · ` + `Setup: ${formatMs(s.totalSetupTime)}`);
|
|
1518
|
+
console.log(`${indent} Avg: ${formatMs(s.averageTestDuration)} · ` + `Median: ${formatMs(s.medianTestDuration)} · ` + `P95: ${formatMs(s.p95TestDuration)} · ` + `Slowest: ${formatMs(s.slowestTestDuration)}`);
|
|
1519
|
+
if (s.slowestFile) {
|
|
1520
|
+
console.log(`${indent} Slowest file: ${s.slowestFile} (${formatMs(s.slowestFileDuration)})`);
|
|
1521
|
+
}
|
|
1522
|
+
if (c.gcTime > 0 || c.applicationTime > 0) {
|
|
1523
|
+
console.log("");
|
|
1524
|
+
console.log(`${indent}${pc.bold("CPU Breakdown")}`);
|
|
1525
|
+
console.log(`${indent} Application: ${formatMs(c.applicationTime)} (${c.applicationPercent}%) · ` + `Dependencies: ${formatMs(c.dependencyTime)} (${c.dependencyPercent}%) · ` + `Test/Framework: ${formatMs(c.testFrameworkTime)} (${c.testFrameworkPercent}%)`);
|
|
1526
|
+
console.log(`${indent} GC: ${formatMs(c.gcTime)} (${c.gcPercentage}%) · ` + `Idle: ${formatMs(c.idleTime)} (${c.idlePercentage}%)`);
|
|
1527
|
+
}
|
|
1528
|
+
if (metrics.hotFunctions.length > 0) {
|
|
1529
|
+
console.log("");
|
|
1530
|
+
console.log(`${indent}${pc.bold("Top Hot Functions")}`);
|
|
1531
|
+
const top5 = metrics.hotFunctions.slice(0, 5);
|
|
1532
|
+
for (const fn of top5) {
|
|
1533
|
+
const category = fn.sourceCategory !== "unknown" ? pc.dim(` [${fn.sourceCategory}]`) : "";
|
|
1534
|
+
console.log(`${indent} ${formatMs(fn.selfTime)} (${fn.selfPercent}%) ${fn.functionName}${category}`);
|
|
1535
|
+
if (fn.scriptUrl) {
|
|
1536
|
+
console.log(pc.dim(`${indent} ${fn.scriptUrl}:${fn.lineNumber}`));
|
|
1537
|
+
}
|
|
1538
|
+
}
|
|
1539
|
+
}
|
|
1540
|
+
if (metrics.heap) {
|
|
1541
|
+
console.log("");
|
|
1542
|
+
console.log(`${indent}${pc.bold("Heap")}: ${formatBytes2(metrics.heap.totalAllocatedBytes)} allocated`);
|
|
1543
|
+
}
|
|
1544
|
+
console.log("");
|
|
1545
|
+
}
|
|
1546
|
+
function formatMs(ms) {
|
|
1547
|
+
if (ms < 1)
|
|
1548
|
+
return `${(ms * 1000).toFixed(0)}µs`;
|
|
1549
|
+
if (ms < 1000)
|
|
1550
|
+
return `${ms.toFixed(0)}ms`;
|
|
1551
|
+
return `${(ms / 1000).toFixed(2)}s`;
|
|
1552
|
+
}
|
|
1512
1553
|
function printCaptureInfo(heapSummary, trace) {
|
|
1513
1554
|
console.log(pc.dim(`Heap: ${formatBytes2(heapSummary.metadata.totalSize)} | ` + `Nodes: ${heapSummary.metadata.nodeCount.toLocaleString()} | ` + `Requests: ${trace.networkRequests.length} | ` + `Long tasks: ${trace.metrics.longTasks.length}`));
|
|
1514
1555
|
}
|
|
@@ -1645,7 +1686,7 @@ function writeTestReport(outputPath, options) {
|
|
|
1645
1686
|
return outputPath;
|
|
1646
1687
|
}
|
|
1647
1688
|
function generateTestMarkdown(options) {
|
|
1648
|
-
const { version, findings, testTiming, profiles } = options;
|
|
1689
|
+
const { version, findings, testTiming, profiles, metrics } = options;
|
|
1649
1690
|
const now = new Date;
|
|
1650
1691
|
const sections = [];
|
|
1651
1692
|
sections.push(`# Vitest Performance Report`);
|
|
@@ -1660,6 +1701,42 @@ function generateTestMarkdown(options) {
|
|
|
1660
1701
|
const gcPercentage = totalDuration > 0 ? (totalGcTime / totalDuration * 100).toFixed(2) : "0";
|
|
1661
1702
|
sections.push(`**Test run** ${totalTests} tests across ${totalFiles} files · ` + `**Total duration** ${(totalDuration / 1000).toFixed(2)}s · ` + `**Slowest file** ${slowest ? `${slowest.file} (${(slowest.duration / 1000).toFixed(2)}s)` : "—"} · ` + `**GC overhead** ${gcPercentage}% (${totalGcTime.toFixed(0)}ms)`);
|
|
1662
1703
|
sections.push("");
|
|
1704
|
+
if (metrics) {
|
|
1705
|
+
sections.push(`## Performance Metrics`);
|
|
1706
|
+
sections.push("");
|
|
1707
|
+
sections.push(`| Metric | Value |`);
|
|
1708
|
+
sections.push(`|--------|-------|`);
|
|
1709
|
+
sections.push(`| Total Duration | ${fmtMs(metrics.suite.totalDuration)} |`);
|
|
1710
|
+
sections.push(`| Tests | ${metrics.suite.totalTests} (${metrics.suite.passCount} pass, ${metrics.suite.failCount} fail) |`);
|
|
1711
|
+
sections.push(`| Setup Time | ${fmtMs(metrics.suite.totalSetupTime)} |`);
|
|
1712
|
+
sections.push(`| Avg Test Duration | ${fmtMs(metrics.suite.averageTestDuration)} |`);
|
|
1713
|
+
sections.push(`| Median Test Duration | ${fmtMs(metrics.suite.medianTestDuration)} |`);
|
|
1714
|
+
sections.push(`| P95 Test Duration | ${fmtMs(metrics.suite.p95TestDuration)} |`);
|
|
1715
|
+
sections.push(`| Slowest Test | ${fmtMs(metrics.suite.slowestTestDuration)} (\`${metrics.suite.slowestTestName}\`) |`);
|
|
1716
|
+
sections.push("");
|
|
1717
|
+
if (metrics.cpu.applicationTime > 0 || metrics.cpu.gcTime > 0) {
|
|
1718
|
+
sections.push(`### CPU Time Breakdown`);
|
|
1719
|
+
sections.push("");
|
|
1720
|
+
sections.push(`| Category | Time | % |`);
|
|
1721
|
+
sections.push(`|----------|------|---|`);
|
|
1722
|
+
sections.push(`| Application Code | ${fmtMs(metrics.cpu.applicationTime)} | ${metrics.cpu.applicationPercent}% |`);
|
|
1723
|
+
sections.push(`| Dependencies | ${fmtMs(metrics.cpu.dependencyTime)} | ${metrics.cpu.dependencyPercent}% |`);
|
|
1724
|
+
sections.push(`| Test/Framework | ${fmtMs(metrics.cpu.testFrameworkTime)} | ${metrics.cpu.testFrameworkPercent}% |`);
|
|
1725
|
+
sections.push(`| GC | ${fmtMs(metrics.cpu.gcTime)} | ${metrics.cpu.gcPercentage}% |`);
|
|
1726
|
+
sections.push(`| Idle | ${fmtMs(metrics.cpu.idleTime)} | ${metrics.cpu.idlePercentage}% |`);
|
|
1727
|
+
sections.push("");
|
|
1728
|
+
}
|
|
1729
|
+
if (metrics.hotFunctions.length > 0) {
|
|
1730
|
+
sections.push(`### Top Hot Functions`);
|
|
1731
|
+
sections.push("");
|
|
1732
|
+
sections.push(`| Function | Self Time | % | Category |`);
|
|
1733
|
+
sections.push(`|----------|-----------|---|----------|`);
|
|
1734
|
+
for (const fn of metrics.hotFunctions.slice(0, 10)) {
|
|
1735
|
+
sections.push(`| \`${fn.functionName}\` | ${fmtMs(fn.selfTime)} | ${fn.selfPercent}% | ${fn.sourceCategory} |`);
|
|
1736
|
+
}
|
|
1737
|
+
sections.push("");
|
|
1738
|
+
}
|
|
1739
|
+
}
|
|
1663
1740
|
const counts = {
|
|
1664
1741
|
critical: findings.filter((f) => f.severity === "critical").length,
|
|
1665
1742
|
warning: findings.filter((f) => f.severity === "warning").length,
|
|
@@ -1716,6 +1793,13 @@ function generateTestMarkdown(options) {
|
|
|
1716
1793
|
return sections.join(`
|
|
1717
1794
|
`);
|
|
1718
1795
|
}
|
|
1796
|
+
function fmtMs(ms) {
|
|
1797
|
+
if (ms < 1)
|
|
1798
|
+
return `${(ms * 1000).toFixed(0)}µs`;
|
|
1799
|
+
if (ms < 1000)
|
|
1800
|
+
return `${ms.toFixed(0)}ms`;
|
|
1801
|
+
return `${(ms / 1000).toFixed(2)}s`;
|
|
1802
|
+
}
|
|
1719
1803
|
|
|
1720
1804
|
// src/cli.ts
|
|
1721
1805
|
import { readFileSync } from "node:fs";
|
package/dist/output/report.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Finding, HeapSummary, TraceResult } from '../types.js';
|
|
2
2
|
import type { TestFileTiming, CorrelatedProfile } from '../vitest/types.js';
|
|
3
|
+
import type { PerformanceMetrics } from '../vitest/metrics.js';
|
|
3
4
|
export interface ReportOptions {
|
|
4
5
|
url: string;
|
|
5
6
|
version: string;
|
|
@@ -12,6 +13,7 @@ export interface TestReportOptions {
|
|
|
12
13
|
findings: Finding[];
|
|
13
14
|
testTiming: TestFileTiming[];
|
|
14
15
|
profiles: CorrelatedProfile[];
|
|
16
|
+
metrics?: PerformanceMetrics;
|
|
15
17
|
}
|
|
16
18
|
/**
|
|
17
19
|
* Generate a Markdown performance report and write it to disk.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/output/report.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/output/report.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAmC/D,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,WAAW,EAAE,WAAW,CAAC;IACzB,KAAK,EAAE,WAAW,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,OAAO,CAAC,EAAE,kBAAkB,CAAC;CAC9B;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM,CAI9E;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CA+G/D;AAID;;;GAGG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAItF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CA8JvE"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type Ora } from 'ora';
|
|
2
2
|
import type { Finding, HeapSummary, TraceResult } from '../types.js';
|
|
3
|
+
import type { PerformanceMetrics } from '../vitest/metrics.js';
|
|
3
4
|
/**
|
|
4
5
|
* Print the zeitzeuge header with version and target URL.
|
|
5
6
|
*/
|
|
@@ -16,6 +17,10 @@ export declare function printFindings(findings: Finding[]): void;
|
|
|
16
17
|
* Print findings in a compact format (optimized for Vitest logs).
|
|
17
18
|
*/
|
|
18
19
|
export declare function printFindingsVitest(findings: Finding[]): void;
|
|
20
|
+
/**
|
|
21
|
+
* Print a summary of the current run's performance metrics.
|
|
22
|
+
*/
|
|
23
|
+
export declare function printMetricsSummary(metrics: PerformanceMetrics): void;
|
|
19
24
|
/**
|
|
20
25
|
* Print capture info summary (heap + trace).
|
|
21
26
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../src/output/terminal.ts"],"names":[],"mappings":"AACA,OAAY,EAAE,KAAK,GAAG,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../src/output/terminal.ts"],"names":[],"mappings":"AACA,OAAY,EAAE,KAAK,GAAG,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAwC/D;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAU9D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAE/C;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,CAoEvD;AAyBD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,CAsD7D;AAID;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI,CA8DrE;AASD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CASnF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAQ5D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAG7C;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIjD"}
|
package/dist/vitest/index.d.ts
CHANGED
|
@@ -14,4 +14,6 @@
|
|
|
14
14
|
*/
|
|
15
15
|
export { zeitzeuge } from './plugin.js';
|
|
16
16
|
export type { ZeitZeugeVitestOptions, SourceCategory } from './types.js';
|
|
17
|
+
export type { PerformanceMetrics, SuiteMetrics, CpuMetrics, FileMetric, TestMetric, HotFunctionMetric, } from './metrics.js';
|
|
18
|
+
export { computeMetrics } from './metrics.js';
|
|
17
19
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vitest/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vitest/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACzE,YAAY,EACV,kBAAkB,EAClB,YAAY,EACZ,UAAU,EACV,UAAU,EACV,UAAU,EACV,iBAAiB,GAClB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/vitest/index.js
CHANGED
|
@@ -719,7 +719,7 @@ import { tmpdir } from "node:os";
|
|
|
719
719
|
var SOURCE_INCLUSION_THRESHOLD = 1;
|
|
720
720
|
var SLOW_TEST_THRESHOLD = 100;
|
|
721
721
|
async function createVitestWorkspace(options) {
|
|
722
|
-
const { testTiming, profiles, heapProfiles, testSources, sourcePaths } = options;
|
|
722
|
+
const { testTiming, profiles, heapProfiles, testSources, sourcePaths, metrics } = options;
|
|
723
723
|
const files = {};
|
|
724
724
|
const totalTests = testTiming.reduce((s, t) => s + t.testCount, 0);
|
|
725
725
|
const totalDuration = testTiming.reduce((s, t) => s + t.duration, 0);
|
|
@@ -821,6 +821,9 @@ async function createVitestWorkspace(options) {
|
|
|
821
821
|
functionCount: data.functionCount
|
|
822
822
|
})).sort((a, b) => b.selfTime - a.selfTime);
|
|
823
823
|
files["/scripts/dependencies.json"] = JSON.stringify(depScriptSummary, null, 2);
|
|
824
|
+
if (metrics) {
|
|
825
|
+
files["/metrics/current.json"] = JSON.stringify(metrics, null, 2);
|
|
826
|
+
}
|
|
824
827
|
for (const [filePath, source] of testSources) {
|
|
825
828
|
const filename = filePath.split("/").pop() ?? filePath;
|
|
826
829
|
files[`/tests/${filename}`] = source;
|
|
@@ -1096,6 +1099,47 @@ function printFindingsVitest(findings) {
|
|
|
1096
1099
|
};
|
|
1097
1100
|
console.log(`${indent}${pc.dim("Summary:")} ${pc.red(`${counts.critical} critical`)}, ${pc.yellow(`${counts.warning} warning`)}, ${pc.green(`${counts.info} info`)}`);
|
|
1098
1101
|
}
|
|
1102
|
+
function printMetricsSummary(metrics) {
|
|
1103
|
+
const indent = " ";
|
|
1104
|
+
const s = metrics.suite;
|
|
1105
|
+
const c = metrics.cpu;
|
|
1106
|
+
console.log(`${indent}${pc.bold("Suite")}`);
|
|
1107
|
+
console.log(`${indent} Total: ${formatMs(s.totalDuration)} · ` + `${s.totalTests} tests (${s.passCount} pass, ${s.failCount} fail) · ` + `Setup: ${formatMs(s.totalSetupTime)}`);
|
|
1108
|
+
console.log(`${indent} Avg: ${formatMs(s.averageTestDuration)} · ` + `Median: ${formatMs(s.medianTestDuration)} · ` + `P95: ${formatMs(s.p95TestDuration)} · ` + `Slowest: ${formatMs(s.slowestTestDuration)}`);
|
|
1109
|
+
if (s.slowestFile) {
|
|
1110
|
+
console.log(`${indent} Slowest file: ${s.slowestFile} (${formatMs(s.slowestFileDuration)})`);
|
|
1111
|
+
}
|
|
1112
|
+
if (c.gcTime > 0 || c.applicationTime > 0) {
|
|
1113
|
+
console.log("");
|
|
1114
|
+
console.log(`${indent}${pc.bold("CPU Breakdown")}`);
|
|
1115
|
+
console.log(`${indent} Application: ${formatMs(c.applicationTime)} (${c.applicationPercent}%) · ` + `Dependencies: ${formatMs(c.dependencyTime)} (${c.dependencyPercent}%) · ` + `Test/Framework: ${formatMs(c.testFrameworkTime)} (${c.testFrameworkPercent}%)`);
|
|
1116
|
+
console.log(`${indent} GC: ${formatMs(c.gcTime)} (${c.gcPercentage}%) · ` + `Idle: ${formatMs(c.idleTime)} (${c.idlePercentage}%)`);
|
|
1117
|
+
}
|
|
1118
|
+
if (metrics.hotFunctions.length > 0) {
|
|
1119
|
+
console.log("");
|
|
1120
|
+
console.log(`${indent}${pc.bold("Top Hot Functions")}`);
|
|
1121
|
+
const top5 = metrics.hotFunctions.slice(0, 5);
|
|
1122
|
+
for (const fn of top5) {
|
|
1123
|
+
const category = fn.sourceCategory !== "unknown" ? pc.dim(` [${fn.sourceCategory}]`) : "";
|
|
1124
|
+
console.log(`${indent} ${formatMs(fn.selfTime)} (${fn.selfPercent}%) ${fn.functionName}${category}`);
|
|
1125
|
+
if (fn.scriptUrl) {
|
|
1126
|
+
console.log(pc.dim(`${indent} ${fn.scriptUrl}:${fn.lineNumber}`));
|
|
1127
|
+
}
|
|
1128
|
+
}
|
|
1129
|
+
}
|
|
1130
|
+
if (metrics.heap) {
|
|
1131
|
+
console.log("");
|
|
1132
|
+
console.log(`${indent}${pc.bold("Heap")}: ${formatBytes(metrics.heap.totalAllocatedBytes)} allocated`);
|
|
1133
|
+
}
|
|
1134
|
+
console.log("");
|
|
1135
|
+
}
|
|
1136
|
+
function formatMs(ms) {
|
|
1137
|
+
if (ms < 1)
|
|
1138
|
+
return `${(ms * 1000).toFixed(0)}µs`;
|
|
1139
|
+
if (ms < 1000)
|
|
1140
|
+
return `${ms.toFixed(0)}ms`;
|
|
1141
|
+
return `${(ms / 1000).toFixed(2)}s`;
|
|
1142
|
+
}
|
|
1099
1143
|
function printCaptureInfo(heapSummary, trace) {
|
|
1100
1144
|
console.log(pc.dim(`Heap: ${formatBytes(heapSummary.metadata.totalSize)} | ` + `Nodes: ${heapSummary.metadata.nodeCount.toLocaleString()} | ` + `Requests: ${trace.networkRequests.length} | ` + `Long tasks: ${trace.metrics.longTasks.length}`));
|
|
1101
1145
|
}
|
|
@@ -1232,7 +1276,7 @@ function writeTestReport(outputPath, options) {
|
|
|
1232
1276
|
return outputPath;
|
|
1233
1277
|
}
|
|
1234
1278
|
function generateTestMarkdown(options) {
|
|
1235
|
-
const { version, findings, testTiming, profiles } = options;
|
|
1279
|
+
const { version, findings, testTiming, profiles, metrics } = options;
|
|
1236
1280
|
const now = new Date;
|
|
1237
1281
|
const sections = [];
|
|
1238
1282
|
sections.push(`# Vitest Performance Report`);
|
|
@@ -1247,6 +1291,42 @@ function generateTestMarkdown(options) {
|
|
|
1247
1291
|
const gcPercentage = totalDuration > 0 ? (totalGcTime / totalDuration * 100).toFixed(2) : "0";
|
|
1248
1292
|
sections.push(`**Test run** ${totalTests} tests across ${totalFiles} files · ` + `**Total duration** ${(totalDuration / 1000).toFixed(2)}s · ` + `**Slowest file** ${slowest ? `${slowest.file} (${(slowest.duration / 1000).toFixed(2)}s)` : "—"} · ` + `**GC overhead** ${gcPercentage}% (${totalGcTime.toFixed(0)}ms)`);
|
|
1249
1293
|
sections.push("");
|
|
1294
|
+
if (metrics) {
|
|
1295
|
+
sections.push(`## Performance Metrics`);
|
|
1296
|
+
sections.push("");
|
|
1297
|
+
sections.push(`| Metric | Value |`);
|
|
1298
|
+
sections.push(`|--------|-------|`);
|
|
1299
|
+
sections.push(`| Total Duration | ${fmtMs(metrics.suite.totalDuration)} |`);
|
|
1300
|
+
sections.push(`| Tests | ${metrics.suite.totalTests} (${metrics.suite.passCount} pass, ${metrics.suite.failCount} fail) |`);
|
|
1301
|
+
sections.push(`| Setup Time | ${fmtMs(metrics.suite.totalSetupTime)} |`);
|
|
1302
|
+
sections.push(`| Avg Test Duration | ${fmtMs(metrics.suite.averageTestDuration)} |`);
|
|
1303
|
+
sections.push(`| Median Test Duration | ${fmtMs(metrics.suite.medianTestDuration)} |`);
|
|
1304
|
+
sections.push(`| P95 Test Duration | ${fmtMs(metrics.suite.p95TestDuration)} |`);
|
|
1305
|
+
sections.push(`| Slowest Test | ${fmtMs(metrics.suite.slowestTestDuration)} (\`${metrics.suite.slowestTestName}\`) |`);
|
|
1306
|
+
sections.push("");
|
|
1307
|
+
if (metrics.cpu.applicationTime > 0 || metrics.cpu.gcTime > 0) {
|
|
1308
|
+
sections.push(`### CPU Time Breakdown`);
|
|
1309
|
+
sections.push("");
|
|
1310
|
+
sections.push(`| Category | Time | % |`);
|
|
1311
|
+
sections.push(`|----------|------|---|`);
|
|
1312
|
+
sections.push(`| Application Code | ${fmtMs(metrics.cpu.applicationTime)} | ${metrics.cpu.applicationPercent}% |`);
|
|
1313
|
+
sections.push(`| Dependencies | ${fmtMs(metrics.cpu.dependencyTime)} | ${metrics.cpu.dependencyPercent}% |`);
|
|
1314
|
+
sections.push(`| Test/Framework | ${fmtMs(metrics.cpu.testFrameworkTime)} | ${metrics.cpu.testFrameworkPercent}% |`);
|
|
1315
|
+
sections.push(`| GC | ${fmtMs(metrics.cpu.gcTime)} | ${metrics.cpu.gcPercentage}% |`);
|
|
1316
|
+
sections.push(`| Idle | ${fmtMs(metrics.cpu.idleTime)} | ${metrics.cpu.idlePercentage}% |`);
|
|
1317
|
+
sections.push("");
|
|
1318
|
+
}
|
|
1319
|
+
if (metrics.hotFunctions.length > 0) {
|
|
1320
|
+
sections.push(`### Top Hot Functions`);
|
|
1321
|
+
sections.push("");
|
|
1322
|
+
sections.push(`| Function | Self Time | % | Category |`);
|
|
1323
|
+
sections.push(`|----------|-----------|---|----------|`);
|
|
1324
|
+
for (const fn of metrics.hotFunctions.slice(0, 10)) {
|
|
1325
|
+
sections.push(`| \`${fn.functionName}\` | ${fmtMs(fn.selfTime)} | ${fn.selfPercent}% | ${fn.sourceCategory} |`);
|
|
1326
|
+
}
|
|
1327
|
+
sections.push("");
|
|
1328
|
+
}
|
|
1329
|
+
}
|
|
1250
1330
|
const counts = {
|
|
1251
1331
|
critical: findings.filter((f) => f.severity === "critical").length,
|
|
1252
1332
|
warning: findings.filter((f) => f.severity === "warning").length,
|
|
@@ -1303,6 +1383,13 @@ function generateTestMarkdown(options) {
|
|
|
1303
1383
|
return sections.join(`
|
|
1304
1384
|
`);
|
|
1305
1385
|
}
|
|
1386
|
+
function fmtMs(ms) {
|
|
1387
|
+
if (ms < 1)
|
|
1388
|
+
return `${(ms * 1000).toFixed(0)}µs`;
|
|
1389
|
+
if (ms < 1000)
|
|
1390
|
+
return `${ms.toFixed(0)}ms`;
|
|
1391
|
+
return `${(ms / 1000).toFixed(2)}s`;
|
|
1392
|
+
}
|
|
1306
1393
|
|
|
1307
1394
|
// src/vitest/classify.ts
|
|
1308
1395
|
import { resolve, relative } from "node:path";
|
|
@@ -1357,10 +1444,158 @@ function classifyScript(scriptUrl, projectRoot, testFiles) {
|
|
|
1357
1444
|
}
|
|
1358
1445
|
return "unknown";
|
|
1359
1446
|
}
|
|
1447
|
+
|
|
1448
|
+
// src/vitest/metrics.ts
|
|
1449
|
+
function computeMetrics(testTiming, profiles, heapProfiles, projectRoot) {
|
|
1450
|
+
const allTestDurations = testTiming.flatMap((t) => t.tests.map((tc) => tc.duration)).sort((a, b) => a - b);
|
|
1451
|
+
const totalDuration = testTiming.reduce((s, t) => s + t.duration, 0);
|
|
1452
|
+
const totalTests = testTiming.reduce((s, t) => s + t.testCount, 0);
|
|
1453
|
+
const passCount = testTiming.reduce((s, t) => s + t.passCount, 0);
|
|
1454
|
+
const failCount = testTiming.reduce((s, t) => s + t.failCount, 0);
|
|
1455
|
+
const totalSetupTime = testTiming.reduce((s, t) => s + t.setupTime, 0);
|
|
1456
|
+
const averageTestDuration = totalTests > 0 ? totalDuration / totalTests : 0;
|
|
1457
|
+
const medianTestDuration = percentile(allTestDurations, 50);
|
|
1458
|
+
const p95TestDuration = percentile(allTestDurations, 95);
|
|
1459
|
+
const slowestTest = allTestDurations.length > 0 ? testTiming.flatMap((t) => t.tests.map((tc) => ({ ...tc, file: t.file }))).reduce((a, b) => a.duration > b.duration ? a : b) : null;
|
|
1460
|
+
const slowestFile = testTiming.length > 0 ? testTiming.reduce((a, b) => a.duration > b.duration ? a : b) : null;
|
|
1461
|
+
const suite = {
|
|
1462
|
+
totalDuration: round4(totalDuration),
|
|
1463
|
+
totalTests,
|
|
1464
|
+
passCount,
|
|
1465
|
+
failCount,
|
|
1466
|
+
totalSetupTime: round4(totalSetupTime),
|
|
1467
|
+
averageTestDuration: round4(averageTestDuration),
|
|
1468
|
+
medianTestDuration: round4(medianTestDuration),
|
|
1469
|
+
p95TestDuration: round4(p95TestDuration),
|
|
1470
|
+
slowestTestDuration: round4(slowestTest?.duration ?? 0),
|
|
1471
|
+
slowestTestName: slowestTest?.name ?? "",
|
|
1472
|
+
slowestFileDuration: round4(slowestFile?.duration ?? 0),
|
|
1473
|
+
slowestFile: relativize(slowestFile?.file ?? "", projectRoot)
|
|
1474
|
+
};
|
|
1475
|
+
const cpu = computeCpuMetrics(profiles);
|
|
1476
|
+
const files = {};
|
|
1477
|
+
for (const timing of testTiming) {
|
|
1478
|
+
const relPath = relativize(timing.file, projectRoot);
|
|
1479
|
+
const profile = profiles.find((p) => p.testFile === timing.file);
|
|
1480
|
+
files[relPath] = {
|
|
1481
|
+
duration: round4(timing.duration),
|
|
1482
|
+
testCount: timing.testCount,
|
|
1483
|
+
setupTime: round4(timing.setupTime),
|
|
1484
|
+
gcPercentage: round4(profile?.summary.gcPercentage ?? 0)
|
|
1485
|
+
};
|
|
1486
|
+
}
|
|
1487
|
+
const tests = {};
|
|
1488
|
+
for (const timing of testTiming) {
|
|
1489
|
+
const relPath = relativize(timing.file, projectRoot);
|
|
1490
|
+
for (const test of timing.tests) {
|
|
1491
|
+
const key = `${relPath}::${test.name}`;
|
|
1492
|
+
tests[key] = {
|
|
1493
|
+
duration: round4(test.duration),
|
|
1494
|
+
status: test.status
|
|
1495
|
+
};
|
|
1496
|
+
}
|
|
1497
|
+
}
|
|
1498
|
+
const merged = mergeHotFunctions(profiles);
|
|
1499
|
+
const hotFunctions = merged.slice(0, 20).map((fn) => ({
|
|
1500
|
+
key: `${fn.scriptUrl}:${fn.functionName}:${fn.lineNumber}`,
|
|
1501
|
+
functionName: fn.functionName,
|
|
1502
|
+
scriptUrl: relativize(fn.scriptUrl, projectRoot),
|
|
1503
|
+
lineNumber: fn.lineNumber,
|
|
1504
|
+
selfTime: round4(fn.selfTime),
|
|
1505
|
+
selfPercent: round4(fn.selfPercent),
|
|
1506
|
+
sourceCategory: fn.sourceCategory ?? "unknown"
|
|
1507
|
+
}));
|
|
1508
|
+
const heap = heapProfiles && heapProfiles.length > 0 ? {
|
|
1509
|
+
totalAllocatedBytes: heapProfiles.reduce((s, hp) => s + hp.summary.totalAllocatedBytes, 0)
|
|
1510
|
+
} : undefined;
|
|
1511
|
+
return {
|
|
1512
|
+
version: 1,
|
|
1513
|
+
timestamp: new Date().toISOString(),
|
|
1514
|
+
suite,
|
|
1515
|
+
cpu,
|
|
1516
|
+
files,
|
|
1517
|
+
tests,
|
|
1518
|
+
hotFunctions,
|
|
1519
|
+
heap
|
|
1520
|
+
};
|
|
1521
|
+
}
|
|
1522
|
+
function computeCpuMetrics(profiles) {
|
|
1523
|
+
if (profiles.length === 0) {
|
|
1524
|
+
return {
|
|
1525
|
+
gcPercentage: 0,
|
|
1526
|
+
gcTime: 0,
|
|
1527
|
+
idlePercentage: 0,
|
|
1528
|
+
idleTime: 0,
|
|
1529
|
+
applicationTime: 0,
|
|
1530
|
+
applicationPercent: 0,
|
|
1531
|
+
dependencyTime: 0,
|
|
1532
|
+
dependencyPercent: 0,
|
|
1533
|
+
testFrameworkTime: 0,
|
|
1534
|
+
testFrameworkPercent: 0
|
|
1535
|
+
};
|
|
1536
|
+
}
|
|
1537
|
+
const totalProfileDuration = profiles.reduce((s, p) => s + p.summary.duration, 0);
|
|
1538
|
+
const totalGcTime = profiles.reduce((s, p) => s + p.summary.duration * p.summary.gcPercentage / 100, 0);
|
|
1539
|
+
const gcPercentage = totalProfileDuration > 0 ? totalGcTime / totalProfileDuration * 100 : 0;
|
|
1540
|
+
const totalIdleTime = profiles.reduce((s, p) => s + p.summary.duration * p.summary.idlePercentage / 100, 0);
|
|
1541
|
+
const idlePercentage = totalProfileDuration > 0 ? totalIdleTime / totalProfileDuration * 100 : 0;
|
|
1542
|
+
let applicationTime = 0;
|
|
1543
|
+
let dependencyTime = 0;
|
|
1544
|
+
let testFrameworkTime = 0;
|
|
1545
|
+
for (const profile of profiles) {
|
|
1546
|
+
for (const script of profile.summary.scriptBreakdown) {
|
|
1547
|
+
switch (script.sourceCategory) {
|
|
1548
|
+
case "application":
|
|
1549
|
+
applicationTime += script.selfTime;
|
|
1550
|
+
break;
|
|
1551
|
+
case "dependency":
|
|
1552
|
+
dependencyTime += script.selfTime;
|
|
1553
|
+
break;
|
|
1554
|
+
case "test":
|
|
1555
|
+
case "framework":
|
|
1556
|
+
testFrameworkTime += script.selfTime;
|
|
1557
|
+
break;
|
|
1558
|
+
}
|
|
1559
|
+
}
|
|
1560
|
+
}
|
|
1561
|
+
const applicationPercent = totalProfileDuration > 0 ? applicationTime / totalProfileDuration * 100 : 0;
|
|
1562
|
+
const dependencyPercent = totalProfileDuration > 0 ? dependencyTime / totalProfileDuration * 100 : 0;
|
|
1563
|
+
const testFrameworkPercent = totalProfileDuration > 0 ? testFrameworkTime / totalProfileDuration * 100 : 0;
|
|
1564
|
+
return {
|
|
1565
|
+
gcPercentage: round4(gcPercentage),
|
|
1566
|
+
gcTime: round4(totalGcTime),
|
|
1567
|
+
idlePercentage: round4(idlePercentage),
|
|
1568
|
+
idleTime: round4(totalIdleTime),
|
|
1569
|
+
applicationTime: round4(applicationTime),
|
|
1570
|
+
applicationPercent: round4(applicationPercent),
|
|
1571
|
+
dependencyTime: round4(dependencyTime),
|
|
1572
|
+
dependencyPercent: round4(dependencyPercent),
|
|
1573
|
+
testFrameworkTime: round4(testFrameworkTime),
|
|
1574
|
+
testFrameworkPercent: round4(testFrameworkPercent)
|
|
1575
|
+
};
|
|
1576
|
+
}
|
|
1577
|
+
function percentile(sortedValues, p) {
|
|
1578
|
+
if (sortedValues.length === 0)
|
|
1579
|
+
return 0;
|
|
1580
|
+
const idx = Math.ceil(p / 100 * sortedValues.length) - 1;
|
|
1581
|
+
return sortedValues[Math.max(0, idx)];
|
|
1582
|
+
}
|
|
1583
|
+
function round4(n) {
|
|
1584
|
+
return Math.round(n * 100) / 100;
|
|
1585
|
+
}
|
|
1586
|
+
function relativize(filePath, projectRoot) {
|
|
1587
|
+
if (!projectRoot || !filePath)
|
|
1588
|
+
return filePath;
|
|
1589
|
+
if (filePath.startsWith(projectRoot)) {
|
|
1590
|
+
const rel = filePath.slice(projectRoot.length);
|
|
1591
|
+
return rel.startsWith("/") ? rel.slice(1) : rel;
|
|
1592
|
+
}
|
|
1593
|
+
return filePath;
|
|
1594
|
+
}
|
|
1360
1595
|
// package.json
|
|
1361
1596
|
var package_default = {
|
|
1362
1597
|
name: "zeitzeuge",
|
|
1363
|
-
version: "0.3.
|
|
1598
|
+
version: "0.3.5",
|
|
1364
1599
|
description: "A deepagent to witnessing slowdowns in your test runs.",
|
|
1365
1600
|
keywords: [
|
|
1366
1601
|
"analysis",
|
|
@@ -1380,7 +1615,8 @@ var package_default = {
|
|
|
1380
1615
|
zeitzeuge: "./dist/cli.js"
|
|
1381
1616
|
},
|
|
1382
1617
|
files: [
|
|
1383
|
-
"dist"
|
|
1618
|
+
"dist",
|
|
1619
|
+
"vitest.d.ts"
|
|
1384
1620
|
],
|
|
1385
1621
|
type: "module",
|
|
1386
1622
|
module: "src/cli.ts",
|
|
@@ -1534,7 +1770,7 @@ class ZeitZeugeReporter {
|
|
|
1534
1770
|
try {
|
|
1535
1771
|
await this.runAnalysis(scopedModules);
|
|
1536
1772
|
} catch (err) {
|
|
1537
|
-
const message = err instanceof Error ? err.message :
|
|
1773
|
+
const message = err instanceof Error ? err.message : JSON.stringify(err ?? "Unknown error");
|
|
1538
1774
|
console.error(chalk.red(`
|
|
1539
1775
|
[zeitzeuge] Analysis failed: ${message}
|
|
1540
1776
|
`));
|
|
@@ -1564,6 +1800,11 @@ class ZeitZeugeReporter {
|
|
|
1564
1800
|
if (this.options.verbose && heapProfiles.length > 0) {
|
|
1565
1801
|
console.log(`[zeitzeuge] ${heapProfiles.length} heap profile(s) collected`);
|
|
1566
1802
|
}
|
|
1803
|
+
const metrics = computeMetrics(testTiming, profiles, heapProfiles, this.options.projectRoot);
|
|
1804
|
+
console.log(chalk.cyan(`
|
|
1805
|
+
zeitzeuge: Performance Metrics
|
|
1806
|
+
`));
|
|
1807
|
+
printMetricsSummary(metrics);
|
|
1567
1808
|
const testSources = this.readTestSources(testTiming);
|
|
1568
1809
|
const sourcePaths = this.readHotFunctionSources(profiles);
|
|
1569
1810
|
const wsSpinner = this.isCI ? null : createSafeSpinner({ text: "zeitzeuge: Building analysis workspace...", color: "cyan" });
|
|
@@ -1573,7 +1814,8 @@ class ZeitZeugeReporter {
|
|
|
1573
1814
|
heapProfiles,
|
|
1574
1815
|
testSources,
|
|
1575
1816
|
sourcePaths,
|
|
1576
|
-
projectRoot: this.options.projectRoot
|
|
1817
|
+
projectRoot: this.options.projectRoot,
|
|
1818
|
+
metrics
|
|
1577
1819
|
});
|
|
1578
1820
|
wsSpinner?.succeed("zeitzeuge: Workspace ready");
|
|
1579
1821
|
if (this.options.analyzeOnFinish) {
|
|
@@ -1593,7 +1835,8 @@ zeitzeuge: Performance Analysis
|
|
|
1593
1835
|
version,
|
|
1594
1836
|
findings,
|
|
1595
1837
|
testTiming,
|
|
1596
|
-
profiles
|
|
1838
|
+
profiles,
|
|
1839
|
+
metrics
|
|
1597
1840
|
});
|
|
1598
1841
|
console.log(chalk.dim(`
|
|
1599
1842
|
Report written to ${reportPath}
|
|
@@ -1900,5 +2143,6 @@ function zeitzeuge(options = {}) {
|
|
|
1900
2143
|
};
|
|
1901
2144
|
}
|
|
1902
2145
|
export {
|
|
1903
|
-
zeitzeuge
|
|
2146
|
+
zeitzeuge,
|
|
2147
|
+
computeMetrics
|
|
1904
2148
|
};
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Performance metrics computation for Vitest test runs.
|
|
3
|
+
*
|
|
4
|
+
* Computes a structured set of metrics from test timing and CPU/heap profile
|
|
5
|
+
* data so users can see where time is spent at a glance.
|
|
6
|
+
*/
|
|
7
|
+
import type { TestFileTiming, CorrelatedProfile, CorrelatedHeapProfile } from './types.js';
|
|
8
|
+
/** Suite-level aggregate metrics. */
|
|
9
|
+
export interface SuiteMetrics {
|
|
10
|
+
totalDuration: number;
|
|
11
|
+
totalTests: number;
|
|
12
|
+
passCount: number;
|
|
13
|
+
failCount: number;
|
|
14
|
+
totalSetupTime: number;
|
|
15
|
+
averageTestDuration: number;
|
|
16
|
+
medianTestDuration: number;
|
|
17
|
+
p95TestDuration: number;
|
|
18
|
+
slowestTestDuration: number;
|
|
19
|
+
slowestTestName: string;
|
|
20
|
+
slowestFileDuration: number;
|
|
21
|
+
slowestFile: string;
|
|
22
|
+
}
|
|
23
|
+
/** CPU profile-derived metrics. */
|
|
24
|
+
export interface CpuMetrics {
|
|
25
|
+
gcPercentage: number;
|
|
26
|
+
gcTime: number;
|
|
27
|
+
idlePercentage: number;
|
|
28
|
+
idleTime: number;
|
|
29
|
+
applicationTime: number;
|
|
30
|
+
applicationPercent: number;
|
|
31
|
+
dependencyTime: number;
|
|
32
|
+
dependencyPercent: number;
|
|
33
|
+
testFrameworkTime: number;
|
|
34
|
+
testFrameworkPercent: number;
|
|
35
|
+
}
|
|
36
|
+
/** Per-file metric entry. */
|
|
37
|
+
export interface FileMetric {
|
|
38
|
+
duration: number;
|
|
39
|
+
testCount: number;
|
|
40
|
+
setupTime: number;
|
|
41
|
+
gcPercentage: number;
|
|
42
|
+
}
|
|
43
|
+
/** Per-test metric entry. */
|
|
44
|
+
export interface TestMetric {
|
|
45
|
+
duration: number;
|
|
46
|
+
status: 'pass' | 'fail' | 'skip';
|
|
47
|
+
}
|
|
48
|
+
/** Summary of a hot function for metrics display. */
|
|
49
|
+
export interface HotFunctionMetric {
|
|
50
|
+
/** Stable key: "scriptUrl:functionName:lineNumber" */
|
|
51
|
+
key: string;
|
|
52
|
+
functionName: string;
|
|
53
|
+
scriptUrl: string;
|
|
54
|
+
lineNumber: number;
|
|
55
|
+
selfTime: number;
|
|
56
|
+
selfPercent: number;
|
|
57
|
+
sourceCategory: string;
|
|
58
|
+
}
|
|
59
|
+
/** Complete performance metrics snapshot for a test run. */
|
|
60
|
+
export interface PerformanceMetrics {
|
|
61
|
+
/** Schema version for forward compatibility. */
|
|
62
|
+
version: 1;
|
|
63
|
+
/** ISO timestamp when the metrics were captured. */
|
|
64
|
+
timestamp: string;
|
|
65
|
+
suite: SuiteMetrics;
|
|
66
|
+
cpu: CpuMetrics;
|
|
67
|
+
/** Per-file metrics, keyed by relative file path. */
|
|
68
|
+
files: Record<string, FileMetric>;
|
|
69
|
+
/** Per-test metrics, keyed by "file::testName". */
|
|
70
|
+
tests: Record<string, TestMetric>;
|
|
71
|
+
/** Top hot functions (up to 20). */
|
|
72
|
+
hotFunctions: HotFunctionMetric[];
|
|
73
|
+
/** Heap metrics (only present if heap profiling was enabled). */
|
|
74
|
+
heap?: {
|
|
75
|
+
totalAllocatedBytes: number;
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Compute performance metrics from a test run's collected data.
|
|
80
|
+
*/
|
|
81
|
+
export declare function computeMetrics(testTiming: TestFileTiming[], profiles: CorrelatedProfile[], heapProfiles?: CorrelatedHeapProfile[], projectRoot?: string): PerformanceMetrics;
|
|
82
|
+
//# sourceMappingURL=metrics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/vitest/metrics.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EACjB,qBAAqB,EACtB,MAAM,YAAY,CAAC;AAKpB,qCAAqC;AACrC,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,mCAAmC;AACnC,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED,6BAA6B;AAC7B,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,6BAA6B;AAC7B,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;CAClC;AAED,qDAAqD;AACrD,MAAM,WAAW,iBAAiB;IAChC,sDAAsD;IACtD,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,4DAA4D;AAC5D,MAAM,WAAW,kBAAkB;IACjC,gDAAgD;IAChD,OAAO,EAAE,CAAC,CAAC;IACX,oDAAoD;IACpD,SAAS,EAAE,MAAM,CAAC;IAElB,KAAK,EAAE,YAAY,CAAC;IACpB,GAAG,EAAE,UAAU,CAAC;IAEhB,qDAAqD;IACrD,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAClC,mDAAmD;IACnD,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAClC,oCAAoC;IACpC,YAAY,EAAE,iBAAiB,EAAE,CAAC;IAElC,iEAAiE;IACjE,IAAI,CAAC,EAAE;QACL,mBAAmB,EAAE,MAAM,CAAC;KAC7B,CAAC;CACH;AAID;;GAEG;AACH,wBAAgB,cAAc,CAC5B,UAAU,EAAE,cAAc,EAAE,EAC5B,QAAQ,EAAE,iBAAiB,EAAE,EAC7B,YAAY,CAAC,EAAE,qBAAqB,EAAE,EACtC,WAAW,CAAC,EAAE,MAAM,GACnB,kBAAkB,CAqGpB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../../src/vitest/reporter.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../../src/vitest/reporter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA0BH,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,OAAO,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,mEAAmE;IACnE,WAAW,EAAE,MAAM,CAAC;IACpB,wEAAwE;IACxE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAoED;;;;;GAKG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,OAAO,CAAkB;IAEjC,iEAAiE;IACjE,OAAO,CAAC,cAAc,CAAgB;IAEtC,uDAAuD;IACvD,OAAO,CAAC,IAAI,CAAoB;gBAEpB,OAAO,EAAE,eAAe;IAIpC,OAAO,CAAC,sBAAsB;IAU9B;;;OAGG;IACH,iBAAiB,CAAC,UAAU,EAAE,GAAG,GAAG,IAAI;IAQxC;;OAEG;IACG,YAAY,CAAC,WAAW,EAAE,aAAa,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;YAyBpD,WAAW;IAyHzB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAwCzB;;OAEG;IACH,OAAO,CAAC,aAAa;IAwBrB;;;;;;OAMG;IACH,OAAO,CAAC,uBAAuB;IA2F/B;;;;OAIG;IACH,OAAO,CAAC,2BAA2B;IAsEnC;;OAEG;IACH,OAAO,CAAC,eAAe;IAiBvB;;;;;;OAMG;IACH,OAAO,CAAC,sBAAsB;IAoC9B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAUzB;;OAEG;IACH,OAAO,CAAC,UAAU;CAGnB"}
|
package/dist/vitest/types.d.ts
CHANGED
|
@@ -227,5 +227,7 @@ export interface VitestWorkspaceOptions {
|
|
|
227
227
|
sourcePaths?: Map<string, string>;
|
|
228
228
|
/** Project root for resolving relative paths */
|
|
229
229
|
projectRoot?: string;
|
|
230
|
+
/** Computed performance metrics for the current run. */
|
|
231
|
+
metrics?: import('./metrics.js').PerformanceMetrics;
|
|
230
232
|
}
|
|
231
233
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/vitest/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/vitest/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../src/vitest/workspace.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAqB,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAKrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEzF,MAAM,WAAW,qBAAqB;IACpC,2CAA2C;IAC3C,OAAO,EAAE,eAAe,CAAC;IACzB,iDAAiD;IACjD,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAQD;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,qBAAqB,CAAC,
|
|
1
|
+
{"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../src/vitest/workspace.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAqB,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAKrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEzF,MAAM,WAAW,qBAAqB;IACpC,2CAA2C;IAC3C,OAAO,EAAE,eAAe,CAAC;IACzB,iDAAiD;IACjD,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAQD;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,qBAAqB,CAAC,CA0NhC;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,GAAG,WAAW,EAAE,CA+B9E"}
|