@10up/block-renderer-benchmark 0.1.4

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.
Files changed (77) hide show
  1. package/dist/analysis/comparison.d.ts +29 -0
  2. package/dist/analysis/comparison.d.ts.map +1 -0
  3. package/dist/analysis/comparison.js +94 -0
  4. package/dist/analysis/comparison.js.map +1 -0
  5. package/dist/analysis/index.d.ts +6 -0
  6. package/dist/analysis/index.d.ts.map +1 -0
  7. package/dist/analysis/index.js +6 -0
  8. package/dist/analysis/index.js.map +1 -0
  9. package/dist/analysis/regression.d.ts +34 -0
  10. package/dist/analysis/regression.d.ts.map +1 -0
  11. package/dist/analysis/regression.js +63 -0
  12. package/dist/analysis/regression.js.map +1 -0
  13. package/dist/cli/commands/compare.d.ts +9 -0
  14. package/dist/cli/commands/compare.d.ts.map +1 -0
  15. package/dist/cli/commands/compare.js +142 -0
  16. package/dist/cli/commands/compare.js.map +1 -0
  17. package/dist/cli/commands/report.d.ts +9 -0
  18. package/dist/cli/commands/report.d.ts.map +1 -0
  19. package/dist/cli/commands/report.js +158 -0
  20. package/dist/cli/commands/report.js.map +1 -0
  21. package/dist/cli/commands/run.d.ts +9 -0
  22. package/dist/cli/commands/run.d.ts.map +1 -0
  23. package/dist/cli/commands/run.js +107 -0
  24. package/dist/cli/commands/run.js.map +1 -0
  25. package/dist/cli/index.d.ts +8 -0
  26. package/dist/cli/index.d.ts.map +1 -0
  27. package/dist/cli/index.js +165 -0
  28. package/dist/cli/index.js.map +1 -0
  29. package/dist/index.d.ts +16 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +19 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/reporters/console-reporter.d.ts +47 -0
  34. package/dist/reporters/console-reporter.d.ts.map +1 -0
  35. package/dist/reporters/console-reporter.js +191 -0
  36. package/dist/reporters/console-reporter.js.map +1 -0
  37. package/dist/reporters/index.d.ts +6 -0
  38. package/dist/reporters/index.d.ts.map +1 -0
  39. package/dist/reporters/index.js +6 -0
  40. package/dist/reporters/index.js.map +1 -0
  41. package/dist/reporters/markdown-reporter.d.ts +32 -0
  42. package/dist/reporters/markdown-reporter.d.ts.map +1 -0
  43. package/dist/reporters/markdown-reporter.js +133 -0
  44. package/dist/reporters/markdown-reporter.js.map +1 -0
  45. package/dist/runner/benchmark-runner.d.ts +37 -0
  46. package/dist/runner/benchmark-runner.d.ts.map +1 -0
  47. package/dist/runner/benchmark-runner.js +133 -0
  48. package/dist/runner/benchmark-runner.js.map +1 -0
  49. package/dist/runner/index.d.ts +6 -0
  50. package/dist/runner/index.d.ts.map +1 -0
  51. package/dist/runner/index.js +6 -0
  52. package/dist/runner/index.js.map +1 -0
  53. package/dist/runner/timing.d.ts +43 -0
  54. package/dist/runner/timing.d.ts.map +1 -0
  55. package/dist/runner/timing.js +115 -0
  56. package/dist/runner/timing.js.map +1 -0
  57. package/dist/runner/vitest-reporter.d.ts +38 -0
  58. package/dist/runner/vitest-reporter.d.ts.map +1 -0
  59. package/dist/runner/vitest-reporter.js +134 -0
  60. package/dist/runner/vitest-reporter.js.map +1 -0
  61. package/dist/storage/index.d.ts +6 -0
  62. package/dist/storage/index.d.ts.map +1 -0
  63. package/dist/storage/index.js +6 -0
  64. package/dist/storage/index.js.map +1 -0
  65. package/dist/storage/json-storage.d.ts +59 -0
  66. package/dist/storage/json-storage.d.ts.map +1 -0
  67. package/dist/storage/json-storage.js +142 -0
  68. package/dist/storage/json-storage.js.map +1 -0
  69. package/dist/storage/sqlite-storage.d.ts +72 -0
  70. package/dist/storage/sqlite-storage.d.ts.map +1 -0
  71. package/dist/storage/sqlite-storage.js +305 -0
  72. package/dist/storage/sqlite-storage.js.map +1 -0
  73. package/dist/types.d.ts +253 -0
  74. package/dist/types.d.ts.map +1 -0
  75. package/dist/types.js +21 -0
  76. package/dist/types.js.map +1 -0
  77. package/package.json +79 -0
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Run benchmarks command
3
+ */
4
+ import { spawn } from 'child_process';
5
+ import * as path from 'path';
6
+ import * as fs from 'fs';
7
+ import { DEFAULT_BASELINE_PATH } from '../../storage/json-storage.js';
8
+ /**
9
+ * Find the project root (where package.json with workspaces is)
10
+ */
11
+ function findProjectRoot() {
12
+ let dir = process.cwd();
13
+ while (dir !== path.dirname(dir)) {
14
+ const pkgPath = path.join(dir, 'package.json');
15
+ if (fs.existsSync(pkgPath)) {
16
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
17
+ if (pkg.workspaces || fs.existsSync(path.join(dir, 'pnpm-workspace.yaml'))) {
18
+ return dir;
19
+ }
20
+ }
21
+ dir = path.dirname(dir);
22
+ }
23
+ return process.cwd();
24
+ }
25
+ /**
26
+ * Run the benchmark command
27
+ */
28
+ export async function runCommand(options) {
29
+ const projectRoot = findProjectRoot();
30
+ const benchmarkPackages = ['renderer', 'block-schemas', 'theme-json'];
31
+ // Filter packages if specified
32
+ const packages = options.package
33
+ ? benchmarkPackages.filter((p) => p === options.package)
34
+ : benchmarkPackages;
35
+ if (packages.length === 0) {
36
+ console.error(`Unknown package: ${options.package}`);
37
+ console.error(`Available packages: ${benchmarkPackages.join(', ')}`);
38
+ process.exit(1);
39
+ }
40
+ console.log('Running benchmarks...\n');
41
+ // Run vitest bench for each package
42
+ for (const pkg of packages) {
43
+ console.log(`\n=== ${pkg} ===\n`);
44
+ const pkgDir = path.join(projectRoot, 'packages', pkg);
45
+ const benchDir = path.join(pkgDir, 'src', '__benchmarks__');
46
+ if (!fs.existsSync(benchDir)) {
47
+ console.log(`No benchmarks found for ${pkg}`);
48
+ continue;
49
+ }
50
+ // Build args for vitest bench
51
+ const vitestArgs = ['vitest', 'bench', '--run'];
52
+ if (options.filter) {
53
+ vitestArgs.push('--testNamePattern', options.filter);
54
+ }
55
+ // Run vitest bench
56
+ await runVitest(pkgDir, vitestArgs, options.verbose || false);
57
+ }
58
+ console.log('\nBenchmarks complete!');
59
+ // Note about baseline update
60
+ if (options.baseline) {
61
+ console.log('\nTo update baseline, run the benchmarks and manually copy results.');
62
+ console.log(`Baseline path: ${path.join(projectRoot, DEFAULT_BASELINE_PATH)}`);
63
+ }
64
+ }
65
+ /**
66
+ * Run vitest in a package directory
67
+ */
68
+ function runVitest(cwd, args, verbose) {
69
+ return new Promise((resolve) => {
70
+ const proc = spawn('npx', args, {
71
+ cwd,
72
+ stdio: verbose ? 'inherit' : ['pipe', 'pipe', 'pipe'],
73
+ shell: true,
74
+ });
75
+ let stdout = '';
76
+ let stderr = '';
77
+ if (!verbose) {
78
+ proc.stdout?.on('data', (data) => {
79
+ stdout += data.toString();
80
+ });
81
+ proc.stderr?.on('data', (data) => {
82
+ stderr += data.toString();
83
+ });
84
+ }
85
+ proc.on('close', (code) => {
86
+ if (!verbose && stdout) {
87
+ console.log(stdout);
88
+ }
89
+ if (code === 0) {
90
+ resolve();
91
+ }
92
+ else {
93
+ if (!verbose && stderr) {
94
+ console.error(stderr);
95
+ }
96
+ // Don't reject on non-zero exit, just resolve
97
+ // Benchmarks might not have all dependencies yet
98
+ resolve();
99
+ }
100
+ });
101
+ proc.on('error', (err) => {
102
+ console.error(`Failed to run vitest: ${err.message}`);
103
+ resolve();
104
+ });
105
+ });
106
+ }
107
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/cli/commands/run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Benchmark CLI
4
+ *
5
+ * Command-line interface for running benchmarks and comparing results.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA;;;;GAIG"}
@@ -0,0 +1,165 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Benchmark CLI
4
+ *
5
+ * Command-line interface for running benchmarks and comparing results.
6
+ */
7
+ import { runCommand } from './commands/run.js';
8
+ import { compareCommand } from './commands/compare.js';
9
+ import { reportCommand } from './commands/report.js';
10
+ function parseArgs() {
11
+ const args = process.argv.slice(2);
12
+ const result = { command: 'help' };
13
+ if (args.length === 0) {
14
+ return result;
15
+ }
16
+ const command = args[0];
17
+ if (['run', 'compare', 'report', 'help'].includes(command)) {
18
+ result.command = command;
19
+ }
20
+ else if (command === '--help' || command === '-h') {
21
+ result.command = 'help';
22
+ return result;
23
+ }
24
+ for (let i = 1; i < args.length; i++) {
25
+ const arg = args[i];
26
+ switch (arg) {
27
+ case '--package':
28
+ case '-p':
29
+ result.package = args[++i];
30
+ break;
31
+ case '--filter':
32
+ case '-f':
33
+ result.filter = args[++i];
34
+ break;
35
+ case '--baseline':
36
+ case '-b':
37
+ result.baseline = args[++i];
38
+ break;
39
+ case '--current':
40
+ case '-c':
41
+ result.current = args[++i];
42
+ break;
43
+ case '--threshold':
44
+ case '-t':
45
+ result.threshold = parseFloat(args[++i]);
46
+ break;
47
+ case '--format':
48
+ result.format = args[++i];
49
+ break;
50
+ case '--output':
51
+ case '-o':
52
+ result.output = args[++i];
53
+ break;
54
+ case '--update-baseline':
55
+ result.updateBaseline = true;
56
+ break;
57
+ case '--json':
58
+ result.json = true;
59
+ break;
60
+ case '--db':
61
+ result.dbPath = args[++i];
62
+ break;
63
+ case '--history':
64
+ result.history = parseInt(args[++i], 10);
65
+ break;
66
+ case '--fail-on-regression':
67
+ result.failOnRegression = true;
68
+ break;
69
+ case '--verbose':
70
+ case '-v':
71
+ result.verbose = true;
72
+ break;
73
+ }
74
+ }
75
+ return result;
76
+ }
77
+ function printHelp() {
78
+ console.log(`
79
+ benchmark - Performance benchmarking for block-renderer
80
+
81
+ Usage: benchmark <command> [options]
82
+
83
+ Commands:
84
+ run Run benchmarks
85
+ compare Compare benchmark results against baseline
86
+ report Generate a benchmark report
87
+
88
+ Run Options:
89
+ -p, --package <name> Only benchmark specific package
90
+ -f, --filter <pattern> Filter benchmarks by name pattern
91
+ --update-baseline Update baseline JSON after run
92
+ --json Output results as JSON
93
+ --db <path> Path to SQLite database
94
+ -v, --verbose Verbose output
95
+
96
+ Compare Options:
97
+ -b, --baseline <path> Baseline to compare against (file path or 'latest')
98
+ -c, --current <path> Current results to compare (default: latest run)
99
+ -t, --threshold <n> Regression threshold percentage (default: 10)
100
+ --format <fmt> Output format: console, markdown, json
101
+ -o, --output <path> Output file path
102
+ --fail-on-regression Exit with code 1 if regression detected
103
+
104
+ Report Options:
105
+ --history <n> Number of runs to include (default: 10)
106
+ --format <fmt> Output format: console, markdown, json
107
+ -o, --output <path> Output file path
108
+
109
+ Examples:
110
+ # Run all benchmarks
111
+ benchmark run
112
+
113
+ # Run benchmarks for renderer package only
114
+ benchmark run --package renderer
115
+
116
+ # Run and update baseline
117
+ benchmark run --update-baseline
118
+
119
+ # Compare current with baseline
120
+ benchmark compare --baseline benchmarks/baselines/baseline.json
121
+
122
+ # Generate markdown report
123
+ benchmark report --format markdown --output report.md
124
+ `);
125
+ }
126
+ async function main() {
127
+ const args = parseArgs();
128
+ switch (args.command) {
129
+ case 'run':
130
+ await runCommand({
131
+ package: args.package,
132
+ filter: args.filter,
133
+ baseline: args.updateBaseline,
134
+ json: args.json,
135
+ dbPath: args.dbPath,
136
+ verbose: args.verbose,
137
+ });
138
+ break;
139
+ case 'compare':
140
+ await compareCommand({
141
+ baseline: args.baseline || 'benchmarks/baselines/baseline.json',
142
+ current: args.current,
143
+ threshold: args.threshold,
144
+ format: args.format,
145
+ output: args.output,
146
+ failOnRegression: args.failOnRegression,
147
+ });
148
+ break;
149
+ case 'report':
150
+ await reportCommand({
151
+ history: args.history,
152
+ format: args.format,
153
+ output: args.output,
154
+ });
155
+ break;
156
+ case 'help':
157
+ default:
158
+ printHelp();
159
+ }
160
+ }
161
+ main().catch((error) => {
162
+ console.error('Error:', error);
163
+ process.exit(1);
164
+ });
165
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @10up/block-renderer-benchmark
3
+ *
4
+ * Performance benchmarking for block-renderer
5
+ */
6
+ export type { TimingStats, MemoryStats, BenchmarkMeasurement, EnvironmentInfo, GitInfo, BenchmarkRun, BenchmarkConfig, BaselineEntry, BaselineFile, ComparisonResult, ComparisonSummary, RegressionThresholds, RunOptions, CompareOptions, ReportOptions, } from './types.js';
7
+ export { DEFAULT_BENCHMARK_CONFIG, DEFAULT_REGRESSION_THRESHOLDS, } from './types.js';
8
+ export { runBenchmark, runBenchmarks, collectTimingStats } from './runner/benchmark-runner.js';
9
+ export { calculateStats, percentile } from './runner/timing.js';
10
+ export { JsonStorage } from './storage/json-storage.js';
11
+ export { SqliteStorage } from './storage/sqlite-storage.js';
12
+ export { compareMeasurements, compareBaselines, summarizeComparison } from './analysis/comparison.js';
13
+ export { detectRegression, detectImprovement } from './analysis/regression.js';
14
+ export { ConsoleReporter } from './reporters/console-reporter.js';
15
+ export { MarkdownReporter } from './reporters/markdown-reporter.js';
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY,EACV,WAAW,EACX,WAAW,EACX,oBAAoB,EACpB,eAAe,EACf,OAAO,EACP,YAAY,EACZ,eAAe,EACf,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,UAAU,EACV,cAAc,EACd,aAAa,GACd,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,wBAAwB,EACxB,6BAA6B,GAC9B,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAC/F,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGhE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAG5D,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACtG,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAG/E,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @10up/block-renderer-benchmark
3
+ *
4
+ * Performance benchmarking for block-renderer
5
+ */
6
+ export { DEFAULT_BENCHMARK_CONFIG, DEFAULT_REGRESSION_THRESHOLDS, } from './types.js';
7
+ // Runner
8
+ export { runBenchmark, runBenchmarks, collectTimingStats } from './runner/benchmark-runner.js';
9
+ export { calculateStats, percentile } from './runner/timing.js';
10
+ // Storage
11
+ export { JsonStorage } from './storage/json-storage.js';
12
+ export { SqliteStorage } from './storage/sqlite-storage.js';
13
+ // Analysis
14
+ export { compareMeasurements, compareBaselines, summarizeComparison } from './analysis/comparison.js';
15
+ export { detectRegression, detectImprovement } from './analysis/regression.js';
16
+ // Reporters
17
+ export { ConsoleReporter } from './reporters/console-reporter.js';
18
+ export { MarkdownReporter } from './reporters/markdown-reporter.js';
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAqBH,OAAO,EACL,wBAAwB,EACxB,6BAA6B,GAC9B,MAAM,YAAY,CAAC;AAEpB,SAAS;AACT,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAC/F,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhE,UAAU;AACV,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D,WAAW;AACX,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACtG,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE/E,YAAY;AACZ,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Console reporter for benchmark results
3
+ */
4
+ import type { BenchmarkRun, BenchmarkMeasurement, ComparisonSummary } from '../types.js';
5
+ /**
6
+ * Console reporter for benchmark output
7
+ */
8
+ export declare class ConsoleReporter {
9
+ constructor(_useColors?: boolean);
10
+ /**
11
+ * Report a benchmark run
12
+ */
13
+ reportRun(run: BenchmarkRun): void;
14
+ /**
15
+ * Report individual measurements
16
+ */
17
+ reportMeasurements(measurements: BenchmarkMeasurement[]): void;
18
+ /**
19
+ * Report a comparison summary
20
+ */
21
+ reportComparison(summary: ComparisonSummary): void;
22
+ /**
23
+ * Print a header
24
+ */
25
+ private printHeader;
26
+ /**
27
+ * Print table header for measurements
28
+ */
29
+ private printTableHeader;
30
+ /**
31
+ * Print table header for comparisons
32
+ */
33
+ private printComparisonTableHeader;
34
+ /**
35
+ * Print a measurement row
36
+ */
37
+ private printMeasurement;
38
+ /**
39
+ * Print a comparison result row
40
+ */
41
+ private printComparisonResult;
42
+ /**
43
+ * Pad columns to fixed widths
44
+ */
45
+ private padColumns;
46
+ }
47
+ //# sourceMappingURL=console-reporter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"console-reporter.d.ts","sourceRoot":"","sources":["../../src/reporters/console-reporter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,oBAAoB,EACpB,iBAAiB,EAElB,MAAM,aAAa,CAAC;AAkCrB;;GAEG;AACH,qBAAa,eAAe;gBACd,UAAU,CAAC,EAAE,OAAO;IAIhC;;OAEG;IACH,SAAS,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI;IAoClC;;OAEG;IACH,kBAAkB,CAAC,YAAY,EAAE,oBAAoB,EAAE,GAAG,IAAI;IAU9D;;OAEG;IACH,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IA6ClD;;OAEG;IACH,OAAO,CAAC,WAAW;IAOnB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAMxB;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAMlC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAcxB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAe7B;;OAEG;IACH,OAAO,CAAC,UAAU;CAInB"}
@@ -0,0 +1,191 @@
1
+ /**
2
+ * Console reporter for benchmark results
3
+ */
4
+ import { formatMs, formatChange } from '../runner/timing.js';
5
+ /**
6
+ * ANSI color codes for terminal output
7
+ */
8
+ const colors = {
9
+ reset: '\x1b[0m',
10
+ bold: '\x1b[1m',
11
+ dim: '\x1b[2m',
12
+ red: '\x1b[31m',
13
+ green: '\x1b[32m',
14
+ yellow: '\x1b[33m',
15
+ blue: '\x1b[34m',
16
+ cyan: '\x1b[36m',
17
+ };
18
+ /**
19
+ * Check if colors are supported
20
+ */
21
+ function supportsColor() {
22
+ return process.stdout.isTTY && !process.env.NO_COLOR;
23
+ }
24
+ /**
25
+ * Apply color if supported
26
+ */
27
+ function color(text, colorCode) {
28
+ if (supportsColor()) {
29
+ return `${colorCode}${text}${colors.reset}`;
30
+ }
31
+ return text;
32
+ }
33
+ /**
34
+ * Console reporter for benchmark output
35
+ */
36
+ export class ConsoleReporter {
37
+ constructor(_useColors) {
38
+ // Colors are determined dynamically by supportsColor()
39
+ }
40
+ /**
41
+ * Report a benchmark run
42
+ */
43
+ reportRun(run) {
44
+ this.printHeader('Benchmark Results');
45
+ console.log();
46
+ // Environment info
47
+ console.log(color('Environment:', colors.bold));
48
+ console.log(` Node.js: ${run.environment.nodeVersion}`);
49
+ console.log(` Platform: ${run.environment.platform} (${run.environment.arch})`);
50
+ console.log(` CPUs: ${run.environment.cpuCount}`);
51
+ if (run.git) {
52
+ console.log();
53
+ console.log(color('Git:', colors.bold));
54
+ console.log(` Commit: ${run.git.commitHash.substring(0, 7)}`);
55
+ console.log(` Branch: ${run.git.branch}`);
56
+ if (run.git.isDirty) {
57
+ console.log(color(' (working directory has uncommitted changes)', colors.yellow));
58
+ }
59
+ }
60
+ console.log();
61
+ console.log(color('Results:', colors.bold));
62
+ console.log();
63
+ // Table header
64
+ this.printTableHeader();
65
+ // Results
66
+ for (const measurement of run.measurements) {
67
+ this.printMeasurement(measurement);
68
+ }
69
+ console.log();
70
+ console.log(`Total duration: ${formatMs(run.duration)}`);
71
+ }
72
+ /**
73
+ * Report individual measurements
74
+ */
75
+ reportMeasurements(measurements) {
76
+ this.printHeader('Benchmark Results');
77
+ console.log();
78
+ this.printTableHeader();
79
+ for (const measurement of measurements) {
80
+ this.printMeasurement(measurement);
81
+ }
82
+ }
83
+ /**
84
+ * Report a comparison summary
85
+ */
86
+ reportComparison(summary) {
87
+ this.printHeader('Benchmark Comparison');
88
+ console.log();
89
+ // Summary counts
90
+ console.log(color('Summary:', colors.bold));
91
+ console.log(` Total benchmarks: ${summary.total}`);
92
+ console.log(` ${color('Regressions:', colors.red)} ${summary.regressions}`);
93
+ console.log(` ${color('Improvements:', colors.green)} ${summary.improvements}`);
94
+ console.log(` Unchanged: ${summary.unchanged}`);
95
+ console.log();
96
+ // Regressions
97
+ if (summary.regressions > 0) {
98
+ console.log(color('Regressions:', colors.red + colors.bold));
99
+ console.log();
100
+ this.printComparisonTableHeader();
101
+ for (const result of summary.results.filter((r) => r.isRegression)) {
102
+ this.printComparisonResult(result);
103
+ }
104
+ console.log();
105
+ }
106
+ // Improvements
107
+ if (summary.improvements > 0) {
108
+ console.log(color('Improvements:', colors.green + colors.bold));
109
+ console.log();
110
+ this.printComparisonTableHeader();
111
+ for (const result of summary.results.filter((r) => r.isImprovement)) {
112
+ this.printComparisonResult(result);
113
+ }
114
+ console.log();
115
+ }
116
+ // Unchanged (only show if verbose or no changes)
117
+ if (summary.unchanged > 0 && (summary.regressions === 0 && summary.improvements === 0)) {
118
+ console.log(color('Unchanged:', colors.dim));
119
+ console.log();
120
+ this.printComparisonTableHeader();
121
+ for (const result of summary.results.filter((r) => r.status === 'unchanged')) {
122
+ this.printComparisonResult(result);
123
+ }
124
+ }
125
+ }
126
+ /**
127
+ * Print a header
128
+ */
129
+ printHeader(text) {
130
+ const line = '='.repeat(text.length + 4);
131
+ console.log(color(line, colors.cyan));
132
+ console.log(color(` ${text} `, colors.cyan + colors.bold));
133
+ console.log(color(line, colors.cyan));
134
+ }
135
+ /**
136
+ * Print table header for measurements
137
+ */
138
+ printTableHeader() {
139
+ const header = this.padColumns(['Benchmark', 'Mean', 'Median', 'P95', 'Min', 'Max', 'Ops/s']);
140
+ console.log(color(header, colors.dim));
141
+ console.log(color('-'.repeat(100), colors.dim));
142
+ }
143
+ /**
144
+ * Print table header for comparisons
145
+ */
146
+ printComparisonTableHeader() {
147
+ const header = this.padColumns(['Benchmark', 'Baseline', 'Current', 'Change', 'Status']);
148
+ console.log(color(header, colors.dim));
149
+ console.log(color('-'.repeat(90), colors.dim));
150
+ }
151
+ /**
152
+ * Print a measurement row
153
+ */
154
+ printMeasurement(m) {
155
+ const opsPerSec = m.opsPerSecond ? `${m.opsPerSecond.toFixed(0)}` : '-';
156
+ const row = this.padColumns([
157
+ m.name,
158
+ formatMs(m.timing.mean),
159
+ formatMs(m.timing.median),
160
+ formatMs(m.timing.p95),
161
+ formatMs(m.timing.min),
162
+ formatMs(m.timing.max),
163
+ opsPerSec,
164
+ ]);
165
+ console.log(row);
166
+ }
167
+ /**
168
+ * Print a comparison result row
169
+ */
170
+ printComparisonResult(r) {
171
+ const changeStr = formatChange(r.meanChange);
172
+ const statusColor = r.isRegression ? colors.red : r.isImprovement ? colors.green : colors.dim;
173
+ const statusIcon = r.isRegression ? 'SLOWER' : r.isImprovement ? 'FASTER' : 'SAME';
174
+ const row = this.padColumns([
175
+ r.name,
176
+ formatMs(r.baseline.mean),
177
+ formatMs(r.current.mean),
178
+ color(changeStr, statusColor),
179
+ color(statusIcon, statusColor),
180
+ ]);
181
+ console.log(row);
182
+ }
183
+ /**
184
+ * Pad columns to fixed widths
185
+ */
186
+ padColumns(columns) {
187
+ const widths = [40, 12, 12, 12, 12, 12, 10];
188
+ return columns.map((col, i) => col.padEnd(widths[i] || 12)).join(' ');
189
+ }
190
+ }
191
+ //# sourceMappingURL=console-reporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"console-reporter.js","sourceRoot":"","sources":["../../src/reporters/console-reporter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Reporters module exports
3
+ */
4
+ export { ConsoleReporter } from './console-reporter.js';
5
+ export { MarkdownReporter } from './markdown-reporter.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/reporters/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Reporters module exports
3
+ */
4
+ export { ConsoleReporter } from './console-reporter.js';
5
+ export { MarkdownReporter } from './markdown-reporter.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/reporters/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Markdown reporter for benchmark results
3
+ *
4
+ * Generates markdown output suitable for GitHub PR comments
5
+ */
6
+ import type { BenchmarkRun, BenchmarkMeasurement, ComparisonSummary, GitInfo } from '../types.js';
7
+ /**
8
+ * Markdown reporter for benchmark output
9
+ */
10
+ export declare class MarkdownReporter {
11
+ /**
12
+ * Generate a full benchmark report as markdown
13
+ */
14
+ reportRun(run: BenchmarkRun): string;
15
+ /**
16
+ * Generate a comparison report as markdown
17
+ */
18
+ reportComparison(summary: ComparisonSummary, gitInfo?: GitInfo): string;
19
+ /**
20
+ * Format a comparison row with status emoji
21
+ */
22
+ private formatComparisonRow;
23
+ /**
24
+ * Generate a simple table of measurements
25
+ */
26
+ reportMeasurements(measurements: BenchmarkMeasurement[]): string;
27
+ /**
28
+ * Generate a historical trend report
29
+ */
30
+ reportTrend(history: BenchmarkMeasurement[], benchmarkName: string): string;
31
+ }
32
+ //# sourceMappingURL=markdown-reporter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown-reporter.d.ts","sourceRoot":"","sources":["../../src/reporters/markdown-reporter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,oBAAoB,EACpB,iBAAiB,EAEjB,OAAO,EACR,MAAM,aAAa,CAAC;AAGrB;;GAEG;AACH,qBAAa,gBAAgB;IAC3B;;OAEG;IACH,SAAS,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM;IA8BpC;;OAEG;IACH,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM;IAiEvE;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAK3B;;OAEG;IACH,kBAAkB,CAAC,YAAY,EAAE,oBAAoB,EAAE,GAAG,MAAM;IAchE;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,oBAAoB,EAAE,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM;CAkB5E"}