modestbench 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +45 -0
- package/LICENSE.md +55 -0
- package/README.md +699 -0
- package/dist/bootstrap.cjs +37 -0
- package/dist/bootstrap.cjs.map +1 -0
- package/dist/bootstrap.d.cts +17 -0
- package/dist/bootstrap.d.cts.map +1 -0
- package/dist/bootstrap.d.ts +17 -0
- package/dist/bootstrap.d.ts.map +1 -0
- package/dist/bootstrap.js +33 -0
- package/dist/bootstrap.js.map +1 -0
- package/dist/cli/commands/history.cjs +459 -0
- package/dist/cli/commands/history.cjs.map +1 -0
- package/dist/cli/commands/history.d.cts +34 -0
- package/dist/cli/commands/history.d.cts.map +1 -0
- package/dist/cli/commands/history.d.ts +34 -0
- package/dist/cli/commands/history.d.ts.map +1 -0
- package/dist/cli/commands/history.js +422 -0
- package/dist/cli/commands/history.js.map +1 -0
- package/dist/cli/commands/init.cjs +566 -0
- package/dist/cli/commands/init.cjs.map +1 -0
- package/dist/cli/commands/init.d.cts +26 -0
- package/dist/cli/commands/init.d.cts.map +1 -0
- package/dist/cli/commands/init.d.ts +26 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +562 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/run.cjs +285 -0
- package/dist/cli/commands/run.cjs.map +1 -0
- package/dist/cli/commands/run.d.cts +37 -0
- package/dist/cli/commands/run.d.cts.map +1 -0
- package/dist/cli/commands/run.d.ts +37 -0
- package/dist/cli/commands/run.d.ts.map +1 -0
- package/dist/cli/commands/run.js +248 -0
- package/dist/cli/commands/run.js.map +1 -0
- package/dist/cli/index.cjs +523 -0
- package/dist/cli/index.cjs.map +1 -0
- package/dist/cli/index.d.cts +58 -0
- package/dist/cli/index.d.cts.map +1 -0
- package/dist/cli/index.d.ts +58 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +515 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/config/manager.cjs +370 -0
- package/dist/config/manager.cjs.map +1 -0
- package/dist/config/manager.d.cts +46 -0
- package/dist/config/manager.d.cts.map +1 -0
- package/dist/config/manager.d.ts +46 -0
- package/dist/config/manager.d.ts.map +1 -0
- package/dist/config/manager.js +333 -0
- package/dist/config/manager.js.map +1 -0
- package/dist/config/schema.cjs +182 -0
- package/dist/config/schema.cjs.map +1 -0
- package/dist/config/schema.d.cts +51 -0
- package/dist/config/schema.d.cts.map +1 -0
- package/dist/config/schema.d.ts +51 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +145 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/constants.cjs +22 -0
- package/dist/constants.cjs.map +1 -0
- package/dist/constants.d.cts +10 -0
- package/dist/constants.d.cts.map +1 -0
- package/dist/constants.d.ts +10 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +19 -0
- package/dist/constants.js.map +1 -0
- package/dist/core/benchmark-schema.cjs +135 -0
- package/dist/core/benchmark-schema.cjs.map +1 -0
- package/dist/core/benchmark-schema.d.cts +139 -0
- package/dist/core/benchmark-schema.d.cts.map +1 -0
- package/dist/core/benchmark-schema.d.ts +139 -0
- package/dist/core/benchmark-schema.d.ts.map +1 -0
- package/dist/core/benchmark-schema.js +132 -0
- package/dist/core/benchmark-schema.js.map +1 -0
- package/dist/core/engine.cjs +669 -0
- package/dist/core/engine.cjs.map +1 -0
- package/dist/core/engine.d.cts +128 -0
- package/dist/core/engine.d.cts.map +1 -0
- package/dist/core/engine.d.ts +128 -0
- package/dist/core/engine.d.ts.map +1 -0
- package/dist/core/engine.js +632 -0
- package/dist/core/engine.js.map +1 -0
- package/dist/core/engines/accurate-engine.cjs +292 -0
- package/dist/core/engines/accurate-engine.cjs.map +1 -0
- package/dist/core/engines/accurate-engine.d.cts +63 -0
- package/dist/core/engines/accurate-engine.d.cts.map +1 -0
- package/dist/core/engines/accurate-engine.d.ts +63 -0
- package/dist/core/engines/accurate-engine.d.ts.map +1 -0
- package/dist/core/engines/accurate-engine.js +288 -0
- package/dist/core/engines/accurate-engine.js.map +1 -0
- package/dist/core/engines/index.cjs +21 -0
- package/dist/core/engines/index.cjs.map +1 -0
- package/dist/core/engines/index.d.cts +16 -0
- package/dist/core/engines/index.d.cts.map +1 -0
- package/dist/core/engines/index.d.ts +16 -0
- package/dist/core/engines/index.d.ts.map +1 -0
- package/dist/core/engines/index.js +16 -0
- package/dist/core/engines/index.js.map +1 -0
- package/dist/core/engines/tinybench-engine.cjs +286 -0
- package/dist/core/engines/tinybench-engine.cjs.map +1 -0
- package/dist/core/engines/tinybench-engine.d.cts +18 -0
- package/dist/core/engines/tinybench-engine.d.cts.map +1 -0
- package/dist/core/engines/tinybench-engine.d.ts +18 -0
- package/dist/core/engines/tinybench-engine.d.ts.map +1 -0
- package/dist/core/engines/tinybench-engine.js +282 -0
- package/dist/core/engines/tinybench-engine.js.map +1 -0
- package/dist/core/error-manager.cjs +303 -0
- package/dist/core/error-manager.cjs.map +1 -0
- package/dist/core/error-manager.d.cts +77 -0
- package/dist/core/error-manager.d.cts.map +1 -0
- package/dist/core/error-manager.d.ts +77 -0
- package/dist/core/error-manager.d.ts.map +1 -0
- package/dist/core/error-manager.js +299 -0
- package/dist/core/error-manager.js.map +1 -0
- package/dist/core/loader.cjs +287 -0
- package/dist/core/loader.cjs.map +1 -0
- package/dist/core/loader.d.cts +55 -0
- package/dist/core/loader.d.cts.map +1 -0
- package/dist/core/loader.d.ts +55 -0
- package/dist/core/loader.d.ts.map +1 -0
- package/dist/core/loader.js +250 -0
- package/dist/core/loader.js.map +1 -0
- package/dist/core/stats-utils.cjs +99 -0
- package/dist/core/stats-utils.cjs.map +1 -0
- package/dist/core/stats-utils.d.cts +50 -0
- package/dist/core/stats-utils.d.cts.map +1 -0
- package/dist/core/stats-utils.d.ts +50 -0
- package/dist/core/stats-utils.d.ts.map +1 -0
- package/dist/core/stats-utils.js +94 -0
- package/dist/core/stats-utils.js.map +1 -0
- package/dist/index.cjs +64 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +22 -0
- package/dist/index.d.cts.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -0
- package/dist/progress/manager.cjs +325 -0
- package/dist/progress/manager.cjs.map +1 -0
- package/dist/progress/manager.d.cts +125 -0
- package/dist/progress/manager.d.cts.map +1 -0
- package/dist/progress/manager.d.ts +125 -0
- package/dist/progress/manager.d.ts.map +1 -0
- package/dist/progress/manager.js +321 -0
- package/dist/progress/manager.js.map +1 -0
- package/dist/reporters/csv.cjs +250 -0
- package/dist/reporters/csv.cjs.map +1 -0
- package/dist/reporters/csv.d.cts +92 -0
- package/dist/reporters/csv.d.cts.map +1 -0
- package/dist/reporters/csv.d.ts +92 -0
- package/dist/reporters/csv.d.ts.map +1 -0
- package/dist/reporters/csv.js +246 -0
- package/dist/reporters/csv.js.map +1 -0
- package/dist/reporters/human.cjs +516 -0
- package/dist/reporters/human.cjs.map +1 -0
- package/dist/reporters/human.d.cts +86 -0
- package/dist/reporters/human.d.cts.map +1 -0
- package/dist/reporters/human.d.ts +86 -0
- package/dist/reporters/human.d.ts.map +1 -0
- package/dist/reporters/human.js +509 -0
- package/dist/reporters/human.js.map +1 -0
- package/dist/reporters/index.cjs +17 -0
- package/dist/reporters/index.cjs.map +1 -0
- package/dist/reporters/index.d.cts +10 -0
- package/dist/reporters/index.d.cts.map +1 -0
- package/dist/reporters/index.d.ts +10 -0
- package/dist/reporters/index.d.ts.map +1 -0
- package/dist/reporters/index.js +10 -0
- package/dist/reporters/index.js.map +1 -0
- package/dist/reporters/json.cjs +215 -0
- package/dist/reporters/json.cjs.map +1 -0
- package/dist/reporters/json.d.cts +79 -0
- package/dist/reporters/json.d.cts.map +1 -0
- package/dist/reporters/json.d.ts +79 -0
- package/dist/reporters/json.d.ts.map +1 -0
- package/dist/reporters/json.js +211 -0
- package/dist/reporters/json.js.map +1 -0
- package/dist/reporters/registry.cjs +255 -0
- package/dist/reporters/registry.cjs.map +1 -0
- package/dist/reporters/registry.d.cts +155 -0
- package/dist/reporters/registry.d.cts.map +1 -0
- package/dist/reporters/registry.d.ts +155 -0
- package/dist/reporters/registry.d.ts.map +1 -0
- package/dist/reporters/registry.js +249 -0
- package/dist/reporters/registry.js.map +1 -0
- package/dist/reporters/simple.cjs +328 -0
- package/dist/reporters/simple.cjs.map +1 -0
- package/dist/reporters/simple.d.cts +51 -0
- package/dist/reporters/simple.d.cts.map +1 -0
- package/dist/reporters/simple.d.ts +51 -0
- package/dist/reporters/simple.d.ts.map +1 -0
- package/dist/reporters/simple.js +321 -0
- package/dist/reporters/simple.js.map +1 -0
- package/dist/schema/modestbench-config.schema.json +162 -0
- package/dist/storage/history.cjs +456 -0
- package/dist/storage/history.cjs.map +1 -0
- package/dist/storage/history.d.cts +99 -0
- package/dist/storage/history.d.cts.map +1 -0
- package/dist/storage/history.d.ts +99 -0
- package/dist/storage/history.d.ts.map +1 -0
- package/dist/storage/history.js +452 -0
- package/dist/storage/history.js.map +1 -0
- package/dist/types/cli.cjs +21 -0
- package/dist/types/cli.cjs.map +1 -0
- package/dist/types/cli.d.cts +296 -0
- package/dist/types/cli.d.cts.map +1 -0
- package/dist/types/cli.d.ts +296 -0
- package/dist/types/cli.d.ts.map +1 -0
- package/dist/types/cli.js +18 -0
- package/dist/types/cli.js.map +1 -0
- package/dist/types/core.cjs +14 -0
- package/dist/types/core.cjs.map +1 -0
- package/dist/types/core.d.cts +380 -0
- package/dist/types/core.d.cts.map +1 -0
- package/dist/types/core.d.ts +380 -0
- package/dist/types/core.d.ts.map +1 -0
- package/dist/types/core.js +13 -0
- package/dist/types/core.js.map +1 -0
- package/dist/types/index.cjs +27 -0
- package/dist/types/index.cjs.map +1 -0
- package/dist/types/index.d.cts +11 -0
- package/dist/types/index.d.cts.map +1 -0
- package/dist/types/index.d.ts +11 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +11 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/interfaces.cjs +10 -0
- package/dist/types/interfaces.cjs.map +1 -0
- package/dist/types/interfaces.d.cts +381 -0
- package/dist/types/interfaces.d.cts.map +1 -0
- package/dist/types/interfaces.d.ts +381 -0
- package/dist/types/interfaces.d.ts.map +1 -0
- package/dist/types/interfaces.js +9 -0
- package/dist/types/interfaces.js.map +1 -0
- package/dist/types/utility.cjs +92 -0
- package/dist/types/utility.cjs.map +1 -0
- package/dist/types/utility.d.cts +330 -0
- package/dist/types/utility.d.cts.map +1 -0
- package/dist/types/utility.d.ts +330 -0
- package/dist/types/utility.d.ts.map +1 -0
- package/dist/types/utility.js +78 -0
- package/dist/types/utility.js.map +1 -0
- package/package.json +211 -0
- package/src/bootstrap.ts +35 -0
- package/src/cli/commands/history.ts +569 -0
- package/src/cli/commands/init.ts +658 -0
- package/src/cli/commands/run.ts +346 -0
- package/src/cli/index.ts +642 -0
- package/src/config/manager.ts +387 -0
- package/src/config/schema.ts +188 -0
- package/src/constants.ts +21 -0
- package/src/core/benchmark-schema.ts +185 -0
- package/src/core/engine.ts +888 -0
- package/src/core/engines/accurate-engine.ts +408 -0
- package/src/core/engines/index.ts +16 -0
- package/src/core/engines/tinybench-engine.ts +335 -0
- package/src/core/error-manager.ts +372 -0
- package/src/core/loader.ts +324 -0
- package/src/core/stats-utils.ts +135 -0
- package/src/index.ts +46 -0
- package/src/progress/manager.ts +415 -0
- package/src/reporters/csv.ts +368 -0
- package/src/reporters/human.ts +707 -0
- package/src/reporters/index.ts +10 -0
- package/src/reporters/json.ts +302 -0
- package/src/reporters/registry.ts +349 -0
- package/src/reporters/simple.ts +459 -0
- package/src/storage/history.ts +600 -0
- package/src/types/cli.ts +312 -0
- package/src/types/core.ts +414 -0
- package/src/types/index.ts +18 -0
- package/src/types/interfaces.ts +451 -0
- package/src/types/utility.ts +446 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ModestBench Simple Console Reporter
|
|
3
|
+
*
|
|
4
|
+
* Provides plain text output without colors, ANSI codes, or decorative
|
|
5
|
+
* elements. Ideal for CI/CD environments, piping, or non-TTY outputs.
|
|
6
|
+
*/
|
|
7
|
+
import type { BenchmarkRun, FileResult, ProgressState, SuiteResult, TaskResult } from "../types/index.js";
|
|
8
|
+
import { BaseReporter } from "./registry.js";
|
|
9
|
+
/**
|
|
10
|
+
* Simple console reporter with plain text output (no colors or progress bars)
|
|
11
|
+
*/
|
|
12
|
+
export declare class SimpleReporter extends BaseReporter {
|
|
13
|
+
private currentFile;
|
|
14
|
+
private currentSuite;
|
|
15
|
+
private failures;
|
|
16
|
+
private readonly quiet;
|
|
17
|
+
private startTime;
|
|
18
|
+
private suiteResults;
|
|
19
|
+
private readonly verbose;
|
|
20
|
+
constructor(options?: {
|
|
21
|
+
quiet?: boolean;
|
|
22
|
+
verbose?: boolean;
|
|
23
|
+
});
|
|
24
|
+
onEnd(run: BenchmarkRun): void;
|
|
25
|
+
onError(error: Error): void;
|
|
26
|
+
onFileEnd(result: FileResult): void;
|
|
27
|
+
onFileStart(file: string): void;
|
|
28
|
+
onProgress(_state: ProgressState): void;
|
|
29
|
+
onStart(run: BenchmarkRun): void;
|
|
30
|
+
onSuiteEnd(result: SuiteResult): void;
|
|
31
|
+
onSuiteStart(suite: string): void;
|
|
32
|
+
onTaskResult(result: TaskResult): void;
|
|
33
|
+
onTaskStart(task: string): void;
|
|
34
|
+
/**
|
|
35
|
+
* Format bytes in human-readable format
|
|
36
|
+
*/
|
|
37
|
+
private formatBytes;
|
|
38
|
+
/**
|
|
39
|
+
* Format file path - show relative path if within CWD, otherwise absolute
|
|
40
|
+
*/
|
|
41
|
+
private formatPath;
|
|
42
|
+
/**
|
|
43
|
+
* Simple pluralization helper
|
|
44
|
+
*/
|
|
45
|
+
private pluralize;
|
|
46
|
+
/**
|
|
47
|
+
* Print all task results in a suite with aligned columns
|
|
48
|
+
*/
|
|
49
|
+
private printAlignedSuiteResults;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=simple.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simple.d.ts","sourceRoot":"","sources":["../../src/reporters/simple.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EACV,YAAY,EACZ,UAAU,EACV,aAAa,EACb,WAAW,EACX,UAAU,EACX,0BAA0B;AAE3B,OAAO,EAAE,YAAY,EAAE,sBAAsB;AAY7C;;GAEG;AACH,qBAAa,cAAe,SAAQ,YAAY;IAC9C,OAAO,CAAC,WAAW,CAAM;IAEzB,OAAO,CAAC,YAAY,CAAM;IAE1B,OAAO,CAAC,QAAQ,CAKR;IAER,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAU;IAEhC,OAAO,CAAC,SAAS,CAAK;IAEtB,OAAO,CAAC,YAAY,CAAoB;IAExC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;gBAGhC,OAAO,GAAE;QACP,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,OAAO,CAAC,EAAE,OAAO,CAAC;KACd;IAQR,KAAK,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI;IA4D9B,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAY3B,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IA4BnC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAW/B,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAKvC,OAAO,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI;IAiChC,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IA0BrC,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAkBjC,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAStC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAW/B;;OAEG;IACH,OAAO,CAAC,WAAW;IAanB;;OAEG;IACH,OAAO,CAAC,UAAU;IAYlB;;OAEG;IACH,OAAO,CAAC,SAAS;IAIjB;;OAEG;IACH,OAAO,CAAC,wBAAwB;CA4IjC"}
|
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ModestBench Simple Console Reporter
|
|
3
|
+
*
|
|
4
|
+
* Provides plain text output without colors, ANSI codes, or decorative
|
|
5
|
+
* elements. Ideal for CI/CD environments, piping, or non-TTY outputs.
|
|
6
|
+
*/
|
|
7
|
+
import path from 'node:path';
|
|
8
|
+
import { BaseReporter } from "./registry.js";
|
|
9
|
+
/**
|
|
10
|
+
* Basic symbols for plain text output
|
|
11
|
+
*/
|
|
12
|
+
const symbols = {
|
|
13
|
+
approx: '≈',
|
|
14
|
+
checkmark: '√',
|
|
15
|
+
cross: '×',
|
|
16
|
+
plusMinus: '±',
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Simple console reporter with plain text output (no colors or progress bars)
|
|
20
|
+
*/
|
|
21
|
+
export class SimpleReporter extends BaseReporter {
|
|
22
|
+
currentFile = '';
|
|
23
|
+
currentSuite = '';
|
|
24
|
+
failures = [];
|
|
25
|
+
quiet;
|
|
26
|
+
startTime = 0;
|
|
27
|
+
suiteResults = [];
|
|
28
|
+
verbose;
|
|
29
|
+
constructor(options = {}) {
|
|
30
|
+
super('simple', options);
|
|
31
|
+
this.verbose = options.verbose ?? false;
|
|
32
|
+
this.quiet = options.quiet ?? false;
|
|
33
|
+
}
|
|
34
|
+
onEnd(run) {
|
|
35
|
+
if (this.quiet) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
const duration = Date.now() - this.startTime;
|
|
39
|
+
const totalFiles = run.files.length;
|
|
40
|
+
// Calculate totals across all files
|
|
41
|
+
let totalSuites = 0;
|
|
42
|
+
let totalPassed = 0;
|
|
43
|
+
let totalFailed = 0;
|
|
44
|
+
for (const file of run.files) {
|
|
45
|
+
totalSuites += file.suites.length;
|
|
46
|
+
for (const suite of file.suites) {
|
|
47
|
+
totalPassed += suite.tasks.filter((t) => !t.error).length;
|
|
48
|
+
totalFailed += suite.tasks.filter((t) => t.error).length;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// Results header
|
|
52
|
+
console.log('== Results');
|
|
53
|
+
console.log();
|
|
54
|
+
if (totalFailed > 0) {
|
|
55
|
+
console.log(`${symbols.cross} Failed: ${totalFailed}`);
|
|
56
|
+
console.log(`${symbols.checkmark} Passed: ${totalPassed}`);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
console.log(`${symbols.checkmark} All tests passed: ${totalPassed}`);
|
|
60
|
+
}
|
|
61
|
+
console.log(`- Files: ${totalFiles}`);
|
|
62
|
+
console.log(`- Suites: ${totalSuites}`);
|
|
63
|
+
console.log(`${symbols.approx} Duration: ${this.formatDuration(duration * 1e6)}`);
|
|
64
|
+
console.log();
|
|
65
|
+
if (totalFailed > 0) {
|
|
66
|
+
console.log(`${symbols.cross.repeat(3)} Some benchmarks failed`);
|
|
67
|
+
// Display failed tasks with details
|
|
68
|
+
if (this.failures.length > 0) {
|
|
69
|
+
console.log();
|
|
70
|
+
console.log('Failed Tasks:');
|
|
71
|
+
console.log();
|
|
72
|
+
for (const failure of this.failures) {
|
|
73
|
+
const displayPath = this.formatPath(failure.file);
|
|
74
|
+
console.log(` ${displayPath} > ${failure.suite} > ${failure.task}`);
|
|
75
|
+
console.log(` ${failure.error}`);
|
|
76
|
+
console.log();
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
console.log('All benchmarks completed successfully!');
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
onError(error) {
|
|
85
|
+
if (this.quiet) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
console.error(`${symbols.cross.repeat(3)} Error:`, error.message);
|
|
89
|
+
if (this.verbose && error.stack) {
|
|
90
|
+
console.error(error.stack);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
onFileEnd(result) {
|
|
94
|
+
if (this.quiet) {
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
const totalTasks = result.suites.reduce((sum, suite) => sum + suite.tasks.length, 0);
|
|
98
|
+
const totalPassed = result.suites.reduce((sum, suite) => sum + suite.tasks.filter((t) => !t.error).length, 0);
|
|
99
|
+
const totalFailed = totalTasks - totalPassed;
|
|
100
|
+
if (totalFailed > 0) {
|
|
101
|
+
console.log(` ${symbols.cross} ${totalFailed} failed, ${totalPassed} passed`);
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
console.log(` ${symbols.checkmark} ${totalPassed > 1 ? 'All ' : ''}${totalPassed} ${this.pluralize('task', totalPassed)} passed`);
|
|
105
|
+
}
|
|
106
|
+
console.log();
|
|
107
|
+
}
|
|
108
|
+
onFileStart(file) {
|
|
109
|
+
this.currentFile = file;
|
|
110
|
+
if (this.quiet) {
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
const displayPath = this.formatPath(file);
|
|
114
|
+
console.log(`-- ${displayPath}`);
|
|
115
|
+
}
|
|
116
|
+
onProgress(_state) {
|
|
117
|
+
// Simple reporter does not display progress bars
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
onStart(run) {
|
|
121
|
+
this.startTime = Date.now();
|
|
122
|
+
this.failures = []; // Reset failures for new run
|
|
123
|
+
if (this.quiet) {
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
console.log('modestbench');
|
|
127
|
+
console.log();
|
|
128
|
+
if (run.environment) {
|
|
129
|
+
console.log(` node.js: ${run.environment.nodeVersion}`);
|
|
130
|
+
console.log(` platform: ${run.environment.platform} ${run.environment.arch}`);
|
|
131
|
+
console.log(` cpu: ${run.environment.cpu.model} (${run.environment.cpu.cores} cores)`);
|
|
132
|
+
console.log(` mem: ${this.formatBytes(run.environment.memory.total)}`);
|
|
133
|
+
console.log();
|
|
134
|
+
}
|
|
135
|
+
if (run.git) {
|
|
136
|
+
console.log(` Git: ${run.git.commit}`);
|
|
137
|
+
}
|
|
138
|
+
if (run.ci) {
|
|
139
|
+
console.log(` CI: ${run.ci.provider}`);
|
|
140
|
+
console.log();
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
onSuiteEnd(result) {
|
|
144
|
+
if (this.quiet) {
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
// Print all buffered task results with aligned columns
|
|
148
|
+
this.printAlignedSuiteResults();
|
|
149
|
+
// Skip displaying summary for the implicit "default" suite
|
|
150
|
+
if (result.name === 'default') {
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
const passed = result.tasks.filter((t) => !t.error).length;
|
|
154
|
+
const failed = result.tasks.filter((t) => t.error).length;
|
|
155
|
+
if (failed > 0) {
|
|
156
|
+
console.log(` ${symbols.cross} ${failed} failed, ${passed} passed`);
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
console.log(` ${symbols.checkmark} ${passed} ${this.pluralize('task', passed)} passed`);
|
|
160
|
+
}
|
|
161
|
+
console.log();
|
|
162
|
+
}
|
|
163
|
+
onSuiteStart(suite) {
|
|
164
|
+
this.currentSuite = suite;
|
|
165
|
+
if (this.quiet) {
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
this.suiteResults = []; // Reset buffer for new suite
|
|
169
|
+
// Skip displaying the implicit "default" suite header
|
|
170
|
+
if (suite === 'default') {
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
console.log();
|
|
174
|
+
console.log(` -- ${suite}`);
|
|
175
|
+
}
|
|
176
|
+
onTaskResult(result) {
|
|
177
|
+
if (this.quiet) {
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
// Buffer the result for later printing with proper alignment
|
|
181
|
+
this.suiteResults.push(result);
|
|
182
|
+
}
|
|
183
|
+
onTaskStart(task) {
|
|
184
|
+
if (this.quiet) {
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
// Only show static markers in verbose mode
|
|
188
|
+
if (this.verbose) {
|
|
189
|
+
console.log(` - ${task}`);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Format bytes in human-readable format
|
|
194
|
+
*/
|
|
195
|
+
formatBytes(bytes) {
|
|
196
|
+
const units = ['B', 'KB', 'MB', 'GB', 'TB'];
|
|
197
|
+
let size = bytes;
|
|
198
|
+
let unitIndex = 0;
|
|
199
|
+
while (size >= 1024 && unitIndex < units.length - 1) {
|
|
200
|
+
size /= 1024;
|
|
201
|
+
unitIndex++;
|
|
202
|
+
}
|
|
203
|
+
return `${size.toFixed(1)} ${units[unitIndex]}`;
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Format file path - show relative path if within CWD, otherwise absolute
|
|
207
|
+
*/
|
|
208
|
+
formatPath(filePath) {
|
|
209
|
+
const cwd = process.cwd();
|
|
210
|
+
const absolutePath = path.resolve(filePath);
|
|
211
|
+
// Check if the file is within the current working directory
|
|
212
|
+
if (absolutePath.startsWith(cwd + path.sep) || absolutePath === cwd) {
|
|
213
|
+
return path.relative(cwd, absolutePath);
|
|
214
|
+
}
|
|
215
|
+
return absolutePath;
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Simple pluralization helper
|
|
219
|
+
*/
|
|
220
|
+
pluralize(str, count) {
|
|
221
|
+
return count === 1 ? str : `${str}s`;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Print all task results in a suite with aligned columns
|
|
225
|
+
*/
|
|
226
|
+
printAlignedSuiteResults() {
|
|
227
|
+
if (this.suiteResults.length === 0) {
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
const MAX_NAME_WIDTH = 60;
|
|
231
|
+
const BASE_INDENT = ' '; // 4 spaces
|
|
232
|
+
const separator = '-'; // Simple text separator instead of bullet
|
|
233
|
+
const formatted = this.suiteResults.map((result) => {
|
|
234
|
+
const status = result.error ? symbols.cross : symbols.checkmark;
|
|
235
|
+
const name = result.name.trim();
|
|
236
|
+
const nameLength = name.length;
|
|
237
|
+
if (result.error) {
|
|
238
|
+
return {
|
|
239
|
+
durationLen: 0,
|
|
240
|
+
durationStr: '',
|
|
241
|
+
error: true,
|
|
242
|
+
errorMessage: result.error?.message || String(result.error),
|
|
243
|
+
iterations: 0,
|
|
244
|
+
name,
|
|
245
|
+
nameLength,
|
|
246
|
+
opsPerSecLen: 0,
|
|
247
|
+
opsPerSecStr: '',
|
|
248
|
+
rmeLen: 0,
|
|
249
|
+
rmeStr: '',
|
|
250
|
+
status,
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
const duration = this.formatDuration(result.mean * 1e9);
|
|
254
|
+
const opsPerSec = this.formatOpsPerSecond(result.opsPerSecond);
|
|
255
|
+
const rme = this.formatPercentage(result.marginOfError * 100);
|
|
256
|
+
return {
|
|
257
|
+
durationLen: duration.length,
|
|
258
|
+
durationStr: duration,
|
|
259
|
+
error: false,
|
|
260
|
+
iterations: result.iterations,
|
|
261
|
+
name,
|
|
262
|
+
nameLength,
|
|
263
|
+
opsPerSecLen: opsPerSec.length,
|
|
264
|
+
opsPerSecStr: opsPerSec,
|
|
265
|
+
rmeLen: rme.length,
|
|
266
|
+
rmeStr: rme,
|
|
267
|
+
status,
|
|
268
|
+
};
|
|
269
|
+
});
|
|
270
|
+
// Find max widths
|
|
271
|
+
const nonWrappingTasks = formatted.filter((t) => t.nameLength <= MAX_NAME_WIDTH);
|
|
272
|
+
const maxNameLen = nonWrappingTasks.length > 0
|
|
273
|
+
? Math.max(...nonWrappingTasks.map((t) => t.nameLength))
|
|
274
|
+
: 40; // Default if all tasks wrap
|
|
275
|
+
const maxDurationLen = Math.max(...formatted.filter((t) => !t.error).map((t) => t.durationLen), 0);
|
|
276
|
+
const maxRmeLen = Math.max(...formatted.filter((t) => !t.error).map((t) => t.rmeLen), 0);
|
|
277
|
+
const maxOpsLen = Math.max(...formatted.filter((t) => !t.error).map((t) => t.opsPerSecLen), 0);
|
|
278
|
+
// Calculate the position where numbers start for unwrapped lines
|
|
279
|
+
// BASE_INDENT (4) + status (1 char) + space (1) + maxNameLen + ": " (2) = 8 + maxNameLen
|
|
280
|
+
const numbersStartPos = BASE_INDENT.length + 2 + maxNameLen + 2;
|
|
281
|
+
// Print each task with aligned columns
|
|
282
|
+
for (const task of formatted) {
|
|
283
|
+
if (task.error) {
|
|
284
|
+
// Track failure for end summary
|
|
285
|
+
this.failures.push({
|
|
286
|
+
error: task.errorMessage || 'Unknown error',
|
|
287
|
+
file: this.currentFile,
|
|
288
|
+
suite: this.currentSuite,
|
|
289
|
+
task: task.name,
|
|
290
|
+
});
|
|
291
|
+
console.log(`${BASE_INDENT}${task.status} ${task.name} FAILED`);
|
|
292
|
+
}
|
|
293
|
+
else if (task.nameLength > MAX_NAME_WIDTH) {
|
|
294
|
+
// Long name - wrap to next line, but align numbers with unwrapped lines
|
|
295
|
+
console.log(`${BASE_INDENT}${task.status} ${task.name}:`);
|
|
296
|
+
// Calculate padding to align with unwrapped lines
|
|
297
|
+
// We need to get to numbersStartPos from the beginning of the line
|
|
298
|
+
const leadingPad = ' '.repeat(numbersStartPos);
|
|
299
|
+
const durationPad = ' '.repeat(maxDurationLen - task.durationLen);
|
|
300
|
+
const rmePad = ' '.repeat(maxRmeLen - task.rmeLen);
|
|
301
|
+
const opsPad = ' '.repeat(maxOpsLen - task.opsPerSecLen);
|
|
302
|
+
console.log(`${leadingPad}${durationPad}${task.durationStr} ${separator} ${symbols.plusMinus}${rmePad}${task.rmeStr} ${separator} ${opsPad}${task.opsPerSecStr}`);
|
|
303
|
+
if (this.verbose && task.iterations > 0) {
|
|
304
|
+
console.log(` ${task.iterations} iterations`);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
else {
|
|
308
|
+
// Normal length - align on same line
|
|
309
|
+
const namePad = ' '.repeat(maxNameLen - task.nameLength);
|
|
310
|
+
const durationPad = ' '.repeat(maxDurationLen - task.durationLen);
|
|
311
|
+
const rmePad = ' '.repeat(maxRmeLen - task.rmeLen);
|
|
312
|
+
const opsPad = ' '.repeat(maxOpsLen - task.opsPerSecLen);
|
|
313
|
+
console.log(`${BASE_INDENT}${task.status} ${task.name}${namePad}: ${durationPad}${task.durationStr} ${separator} ${symbols.plusMinus}${rmePad}${task.rmeStr} ${separator} ${opsPad}${task.opsPerSecStr}`);
|
|
314
|
+
if (this.verbose && task.iterations > 0) {
|
|
315
|
+
console.log(` ${task.iterations} iterations`);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
//# sourceMappingURL=simple.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simple.js","sourceRoot":"","sources":["../../src/reporters/simple.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$id": "https://github.com/boneskull/modestbench/schema/config.json",
|
|
3
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
4
|
+
"type": "object",
|
|
5
|
+
"properties": {
|
|
6
|
+
"$schema": {
|
|
7
|
+
"description": "JSON Schema reference for IDE support (not used by ModestBench)",
|
|
8
|
+
"type": "string"
|
|
9
|
+
},
|
|
10
|
+
"bail": {
|
|
11
|
+
"description": "Stop benchmark execution on first failure",
|
|
12
|
+
"type": "boolean"
|
|
13
|
+
},
|
|
14
|
+
"exclude": {
|
|
15
|
+
"description": "Glob patterns to exclude from benchmark file discovery (e.g., \"node_modules/**\", \".git/**\")",
|
|
16
|
+
"type": "array",
|
|
17
|
+
"items": {
|
|
18
|
+
"type": "string"
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"excludeTags": {
|
|
22
|
+
"description": "Tags to exclude from benchmark execution. Benchmarks matching any of these tags will be skipped.",
|
|
23
|
+
"type": "array",
|
|
24
|
+
"items": {
|
|
25
|
+
"type": "string"
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
"iterations": {
|
|
29
|
+
"description": "Default number of iterations to run for each benchmark task. Higher values provide more accurate statistics but take longer to execute.",
|
|
30
|
+
"type": "integer",
|
|
31
|
+
"exclusiveMinimum": 0,
|
|
32
|
+
"maximum": 9007199254740991
|
|
33
|
+
},
|
|
34
|
+
"limitBy": {
|
|
35
|
+
"description": "How to limit benchmark execution: \"time\" stops after time limit, \"iterations\" stops after iteration count, \"any\" stops at whichever comes first, \"all\" runs until both limits are reached",
|
|
36
|
+
"type": "string",
|
|
37
|
+
"enum": [
|
|
38
|
+
"time",
|
|
39
|
+
"iterations",
|
|
40
|
+
"any",
|
|
41
|
+
"all"
|
|
42
|
+
]
|
|
43
|
+
},
|
|
44
|
+
"metadata": {
|
|
45
|
+
"description": "Custom metadata to attach to benchmark runs. Can include project name, version, environment details, etc.",
|
|
46
|
+
"type": "object",
|
|
47
|
+
"propertyNames": {
|
|
48
|
+
"type": "string"
|
|
49
|
+
},
|
|
50
|
+
"additionalProperties": {}
|
|
51
|
+
},
|
|
52
|
+
"outputDir": {
|
|
53
|
+
"description": "Directory path where benchmark results and reports will be written",
|
|
54
|
+
"type": "string",
|
|
55
|
+
"minLength": 1
|
|
56
|
+
},
|
|
57
|
+
"pattern": {
|
|
58
|
+
"description": "Glob pattern(s) for discovering benchmark files. Can be a single pattern string or array of patterns (e.g., \"**/*.bench.{cjs,cts,js,mjs,mts,ts}\")",
|
|
59
|
+
"anyOf": [
|
|
60
|
+
{
|
|
61
|
+
"type": "string",
|
|
62
|
+
"minLength": 1
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"type": "array",
|
|
66
|
+
"items": {
|
|
67
|
+
"type": "string",
|
|
68
|
+
"minLength": 1
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
]
|
|
72
|
+
},
|
|
73
|
+
"quiet": {
|
|
74
|
+
"description": "Run in quiet mode with minimal console output (only errors and final results)",
|
|
75
|
+
"type": "boolean"
|
|
76
|
+
},
|
|
77
|
+
"reporterConfig": {
|
|
78
|
+
"description": "Configuration options specific to individual reporters, keyed by reporter name",
|
|
79
|
+
"type": "object",
|
|
80
|
+
"propertyNames": {
|
|
81
|
+
"type": "string"
|
|
82
|
+
},
|
|
83
|
+
"additionalProperties": {}
|
|
84
|
+
},
|
|
85
|
+
"reporters": {
|
|
86
|
+
"description": "List of reporter names to use for output. Available reporters: \"human\", \"json\", \"csv\"",
|
|
87
|
+
"minItems": 1,
|
|
88
|
+
"type": "array",
|
|
89
|
+
"items": {
|
|
90
|
+
"type": "string"
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
"tags": {
|
|
94
|
+
"description": "Tags to filter which benchmarks to run. If empty, all benchmarks are included. Only benchmarks with matching tags will execute.",
|
|
95
|
+
"type": "array",
|
|
96
|
+
"items": {
|
|
97
|
+
"type": "string"
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
"thresholds": {
|
|
101
|
+
"description": "Performance assertion thresholds for benchmark validation",
|
|
102
|
+
"title": "Threshold Configuration",
|
|
103
|
+
"type": "object",
|
|
104
|
+
"properties": {
|
|
105
|
+
"maxMarginOfError": {
|
|
106
|
+
"description": "Maximum allowed margin of error as a percentage",
|
|
107
|
+
"type": "number",
|
|
108
|
+
"exclusiveMinimum": 0
|
|
109
|
+
},
|
|
110
|
+
"maxMean": {
|
|
111
|
+
"description": "Maximum allowed mean execution time in nanoseconds",
|
|
112
|
+
"type": "number",
|
|
113
|
+
"exclusiveMinimum": 0
|
|
114
|
+
},
|
|
115
|
+
"maxP95": {
|
|
116
|
+
"description": "Maximum allowed 95th percentile execution time in nanoseconds",
|
|
117
|
+
"type": "number",
|
|
118
|
+
"exclusiveMinimum": 0
|
|
119
|
+
},
|
|
120
|
+
"maxP99": {
|
|
121
|
+
"description": "Maximum allowed 99th percentile execution time in nanoseconds",
|
|
122
|
+
"type": "number",
|
|
123
|
+
"exclusiveMinimum": 0
|
|
124
|
+
},
|
|
125
|
+
"maxStdDev": {
|
|
126
|
+
"description": "Maximum allowed standard deviation in nanoseconds",
|
|
127
|
+
"type": "number",
|
|
128
|
+
"exclusiveMinimum": 0
|
|
129
|
+
},
|
|
130
|
+
"minOpsPerSecond": {
|
|
131
|
+
"description": "Minimum required operations per second",
|
|
132
|
+
"type": "number",
|
|
133
|
+
"exclusiveMinimum": 0
|
|
134
|
+
}
|
|
135
|
+
},
|
|
136
|
+
"additionalProperties": false
|
|
137
|
+
},
|
|
138
|
+
"time": {
|
|
139
|
+
"description": "Maximum time to spend on each benchmark task in milliseconds. Tasks will run at least until this duration or iteration count is reached, depending on limitBy setting.",
|
|
140
|
+
"type": "integer",
|
|
141
|
+
"exclusiveMinimum": 0,
|
|
142
|
+
"maximum": 9007199254740991
|
|
143
|
+
},
|
|
144
|
+
"timeout": {
|
|
145
|
+
"description": "Timeout for individual benchmark tasks in milliseconds. Tasks exceeding this duration will be terminated and marked as failed.",
|
|
146
|
+
"type": "integer",
|
|
147
|
+
"exclusiveMinimum": 0,
|
|
148
|
+
"maximum": 9007199254740991
|
|
149
|
+
},
|
|
150
|
+
"verbose": {
|
|
151
|
+
"description": "Enable verbose output. Provides more detailed console output including progress, intermediate results, and diagnostic information",
|
|
152
|
+
"type": "boolean"
|
|
153
|
+
},
|
|
154
|
+
"warmup": {
|
|
155
|
+
"description": "Number of warmup iterations to run before measurement begins. Warmup helps stabilize performance by allowing JIT compilation and caching to occur.",
|
|
156
|
+
"type": "integer",
|
|
157
|
+
"minimum": 0,
|
|
158
|
+
"maximum": 9007199254740991
|
|
159
|
+
}
|
|
160
|
+
},
|
|
161
|
+
"additionalProperties": false
|
|
162
|
+
}
|