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,255 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ModestBench Reporter Registry
|
|
4
|
+
*
|
|
5
|
+
* Plugin-based system for managing benchmark output formatters. Supports
|
|
6
|
+
* registration, retrieval, and lifecycle management of reporters.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.ModestBenchReporterRegistry = exports.CompositeReporter = exports.BaseReporter = void 0;
|
|
10
|
+
/**
|
|
11
|
+
* Base abstract reporter class providing common functionality
|
|
12
|
+
*/
|
|
13
|
+
class BaseReporter {
|
|
14
|
+
name;
|
|
15
|
+
options;
|
|
16
|
+
constructor(name, options = {}) {
|
|
17
|
+
this.name = name;
|
|
18
|
+
this.options = options;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Get reporter name
|
|
22
|
+
*/
|
|
23
|
+
getName() {
|
|
24
|
+
return this.name;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Get reporter options
|
|
28
|
+
*/
|
|
29
|
+
getOptions() {
|
|
30
|
+
return { ...this.options };
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Utility method to format duration in human-readable format
|
|
34
|
+
*/
|
|
35
|
+
formatDuration(nanoseconds) {
|
|
36
|
+
if (nanoseconds < 1000) {
|
|
37
|
+
return `${nanoseconds.toFixed(2)}ns`;
|
|
38
|
+
}
|
|
39
|
+
else if (nanoseconds < 1000000) {
|
|
40
|
+
return `${(nanoseconds / 1000).toFixed(2)}μs`;
|
|
41
|
+
}
|
|
42
|
+
else if (nanoseconds < 1000000000) {
|
|
43
|
+
return `${(nanoseconds / 1000000).toFixed(2)}ms`;
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
return `${(nanoseconds / 1000000000).toFixed(2)}s`;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Utility method to format operations per second
|
|
51
|
+
*/
|
|
52
|
+
formatOpsPerSecond(opsPerSecond) {
|
|
53
|
+
if (opsPerSecond < 1000) {
|
|
54
|
+
return `${opsPerSecond.toFixed(2)} ops/sec`;
|
|
55
|
+
}
|
|
56
|
+
else if (opsPerSecond < 1000000) {
|
|
57
|
+
return `${(opsPerSecond / 1000).toFixed(2)}K ops/sec`;
|
|
58
|
+
}
|
|
59
|
+
else if (opsPerSecond < 1000000000) {
|
|
60
|
+
return `${(opsPerSecond / 1000000).toFixed(2)}M ops/sec`;
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
return `${(opsPerSecond / 1000000000).toFixed(2)}B ops/sec`;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Utility method to format percentage
|
|
68
|
+
*/
|
|
69
|
+
formatPercentage(value) {
|
|
70
|
+
return `${value.toFixed(2)}%`;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Utility method to safely handle async operations
|
|
74
|
+
*/
|
|
75
|
+
async safeAsync(operation) {
|
|
76
|
+
try {
|
|
77
|
+
return await operation();
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
await this.onError(error instanceof Error ? error : new Error(String(error)));
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
exports.BaseReporter = BaseReporter;
|
|
86
|
+
/**
|
|
87
|
+
* Composite reporter that broadcasts events to multiple reporters
|
|
88
|
+
*/
|
|
89
|
+
class CompositeReporter extends BaseReporter {
|
|
90
|
+
reporters;
|
|
91
|
+
constructor(reporters) {
|
|
92
|
+
super('composite', {});
|
|
93
|
+
this.reporters = [...reporters];
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Add a reporter to the composite
|
|
97
|
+
*/
|
|
98
|
+
addReporter(reporter) {
|
|
99
|
+
this.reporters.push(reporter);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Get all reporters in the composite
|
|
103
|
+
*/
|
|
104
|
+
getReporters() {
|
|
105
|
+
return [...this.reporters];
|
|
106
|
+
}
|
|
107
|
+
async onEnd(run) {
|
|
108
|
+
await this.broadcastAsync('onEnd', run);
|
|
109
|
+
}
|
|
110
|
+
async onError(error) {
|
|
111
|
+
await this.broadcastAsync('onError', error);
|
|
112
|
+
}
|
|
113
|
+
async onFileEnd(result) {
|
|
114
|
+
await this.broadcastAsync('onFileEnd', result);
|
|
115
|
+
}
|
|
116
|
+
async onFileStart(file) {
|
|
117
|
+
await this.broadcastAsync('onFileStart', file);
|
|
118
|
+
}
|
|
119
|
+
async onProgress(state) {
|
|
120
|
+
await this.broadcastAsync('onProgress', state);
|
|
121
|
+
}
|
|
122
|
+
async onStart(run) {
|
|
123
|
+
await this.broadcastAsync('onStart', run);
|
|
124
|
+
}
|
|
125
|
+
async onSuiteEnd(result) {
|
|
126
|
+
await this.broadcastAsync('onSuiteEnd', result);
|
|
127
|
+
}
|
|
128
|
+
async onSuiteStart(suite) {
|
|
129
|
+
await this.broadcastAsync('onSuiteStart', suite);
|
|
130
|
+
}
|
|
131
|
+
async onTaskResult(result) {
|
|
132
|
+
await this.broadcastAsync('onTaskResult', result);
|
|
133
|
+
}
|
|
134
|
+
async onTaskStart(task) {
|
|
135
|
+
await this.broadcastAsync('onTaskStart', task);
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Remove a reporter from the composite
|
|
139
|
+
*/
|
|
140
|
+
removeReporter(reporter) {
|
|
141
|
+
const index = this.reporters.indexOf(reporter);
|
|
142
|
+
if (index >= 0) {
|
|
143
|
+
this.reporters.splice(index, 1);
|
|
144
|
+
return true;
|
|
145
|
+
}
|
|
146
|
+
return false;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Broadcast an event to all reporters with error handling
|
|
150
|
+
*/
|
|
151
|
+
async broadcastAsync(method, ...args) {
|
|
152
|
+
const promises = this.reporters.map(async (reporter) => {
|
|
153
|
+
try {
|
|
154
|
+
const reporterMethod = reporter[method];
|
|
155
|
+
if (typeof reporterMethod === 'function') {
|
|
156
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call
|
|
157
|
+
const result = reporterMethod(...args);
|
|
158
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
159
|
+
if (result && typeof result.then === 'function') {
|
|
160
|
+
await result;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
catch (error) {
|
|
165
|
+
// Handle reporter-specific errors without affecting others
|
|
166
|
+
console.error(`Reporter error in ${reporter.constructor.name}.${method}:`, error);
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
await Promise.all(promises);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
exports.CompositeReporter = CompositeReporter;
|
|
173
|
+
/**
|
|
174
|
+
* Reporter registry implementation for managing multiple reporters
|
|
175
|
+
*/
|
|
176
|
+
class ModestBenchReporterRegistry {
|
|
177
|
+
reporters = new Map();
|
|
178
|
+
/**
|
|
179
|
+
* Clear all registered reporters
|
|
180
|
+
*/
|
|
181
|
+
clear() {
|
|
182
|
+
this.reporters.clear();
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Get a reporter by name
|
|
186
|
+
*/
|
|
187
|
+
get(name) {
|
|
188
|
+
return this.reporters.get(name);
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Get all registered reporters
|
|
192
|
+
*/
|
|
193
|
+
getAll() {
|
|
194
|
+
const result = {};
|
|
195
|
+
this.reporters.forEach((reporter, name) => {
|
|
196
|
+
result[name] = reporter;
|
|
197
|
+
});
|
|
198
|
+
return result;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Get multiple reporters by names
|
|
202
|
+
*/
|
|
203
|
+
getByNames(names) {
|
|
204
|
+
const result = [];
|
|
205
|
+
const missing = [];
|
|
206
|
+
for (const name of names) {
|
|
207
|
+
const reporter = this.reporters.get(name);
|
|
208
|
+
if (reporter) {
|
|
209
|
+
result.push(reporter);
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
missing.push(name);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
if (missing.length > 0) {
|
|
216
|
+
throw new Error(`Unknown reporters: ${missing.join(', ')}. Available: ${Array.from(this.reporters.keys()).join(', ')}`);
|
|
217
|
+
}
|
|
218
|
+
return result;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Get list of registered reporter names
|
|
222
|
+
*/
|
|
223
|
+
getNames() {
|
|
224
|
+
return Array.from(this.reporters.keys());
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Check if a reporter is registered
|
|
228
|
+
*/
|
|
229
|
+
has(name) {
|
|
230
|
+
return this.reporters.has(name);
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Register a reporter with a unique name
|
|
234
|
+
*/
|
|
235
|
+
register(name, reporter) {
|
|
236
|
+
if (this.reporters.has(name)) {
|
|
237
|
+
throw new Error(`Reporter with name "${name}" is already registered`);
|
|
238
|
+
}
|
|
239
|
+
this.reporters.set(name, reporter);
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Get count of registered reporters
|
|
243
|
+
*/
|
|
244
|
+
size() {
|
|
245
|
+
return this.reporters.size;
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Unregister a reporter
|
|
249
|
+
*/
|
|
250
|
+
unregister(name) {
|
|
251
|
+
return this.reporters.delete(name);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
exports.ModestBenchReporterRegistry = ModestBenchReporterRegistry;
|
|
255
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/reporters/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ModestBench Reporter Registry
|
|
3
|
+
*
|
|
4
|
+
* Plugin-based system for managing benchmark output formatters. Supports
|
|
5
|
+
* registration, retrieval, and lifecycle management of reporters.
|
|
6
|
+
*/
|
|
7
|
+
import type { BenchmarkRun, FileResult, ProgressState, Reporter, ReporterRegistry, SuiteResult, TaskResult } from "../types/index.cjs";
|
|
8
|
+
/**
|
|
9
|
+
* Base abstract reporter class providing common functionality
|
|
10
|
+
*/
|
|
11
|
+
export declare abstract class BaseReporter implements Reporter {
|
|
12
|
+
protected readonly name: string;
|
|
13
|
+
protected readonly options: Record<string, unknown>;
|
|
14
|
+
constructor(name: string, options?: Record<string, unknown>);
|
|
15
|
+
/**
|
|
16
|
+
* Get reporter name
|
|
17
|
+
*/
|
|
18
|
+
getName(): string;
|
|
19
|
+
/**
|
|
20
|
+
* Get reporter options
|
|
21
|
+
*/
|
|
22
|
+
getOptions(): Record<string, unknown>;
|
|
23
|
+
/**
|
|
24
|
+
* Called when benchmark run completes
|
|
25
|
+
*/
|
|
26
|
+
abstract onEnd(run: BenchmarkRun): Promise<void> | void;
|
|
27
|
+
/**
|
|
28
|
+
* Called when an error occurs
|
|
29
|
+
*/
|
|
30
|
+
abstract onError(error: Error): Promise<void> | void;
|
|
31
|
+
/**
|
|
32
|
+
* Called when a file completes
|
|
33
|
+
*/
|
|
34
|
+
abstract onFileEnd(result: FileResult): Promise<void> | void;
|
|
35
|
+
/**
|
|
36
|
+
* Called when a file starts execution
|
|
37
|
+
*/
|
|
38
|
+
abstract onFileStart(file: string): Promise<void> | void;
|
|
39
|
+
/**
|
|
40
|
+
* Called for progress updates
|
|
41
|
+
*/
|
|
42
|
+
abstract onProgress(state: ProgressState): Promise<void> | void;
|
|
43
|
+
/**
|
|
44
|
+
* Called when benchmark run starts
|
|
45
|
+
*/
|
|
46
|
+
abstract onStart(run: BenchmarkRun): Promise<void> | void;
|
|
47
|
+
/**
|
|
48
|
+
* Called when a suite completes
|
|
49
|
+
*/
|
|
50
|
+
abstract onSuiteEnd(result: SuiteResult): Promise<void> | void;
|
|
51
|
+
/**
|
|
52
|
+
* Called when a suite starts execution
|
|
53
|
+
*/
|
|
54
|
+
abstract onSuiteStart(suite: string): Promise<void> | void;
|
|
55
|
+
/**
|
|
56
|
+
* Called when a task completes
|
|
57
|
+
*/
|
|
58
|
+
abstract onTaskResult(result: TaskResult): Promise<void> | void;
|
|
59
|
+
/**
|
|
60
|
+
* Called when a task starts execution
|
|
61
|
+
*/
|
|
62
|
+
abstract onTaskStart(task: string): Promise<void> | void;
|
|
63
|
+
/**
|
|
64
|
+
* Utility method to format duration in human-readable format
|
|
65
|
+
*/
|
|
66
|
+
protected formatDuration(nanoseconds: number): string;
|
|
67
|
+
/**
|
|
68
|
+
* Utility method to format operations per second
|
|
69
|
+
*/
|
|
70
|
+
protected formatOpsPerSecond(opsPerSecond: number): string;
|
|
71
|
+
/**
|
|
72
|
+
* Utility method to format percentage
|
|
73
|
+
*/
|
|
74
|
+
protected formatPercentage(value: number): string;
|
|
75
|
+
/**
|
|
76
|
+
* Utility method to safely handle async operations
|
|
77
|
+
*/
|
|
78
|
+
protected safeAsync<T>(operation: () => Promise<T>): Promise<null | T>;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Composite reporter that broadcasts events to multiple reporters
|
|
82
|
+
*/
|
|
83
|
+
export declare class CompositeReporter extends BaseReporter {
|
|
84
|
+
private readonly reporters;
|
|
85
|
+
constructor(reporters: Reporter[]);
|
|
86
|
+
/**
|
|
87
|
+
* Add a reporter to the composite
|
|
88
|
+
*/
|
|
89
|
+
addReporter(reporter: Reporter): void;
|
|
90
|
+
/**
|
|
91
|
+
* Get all reporters in the composite
|
|
92
|
+
*/
|
|
93
|
+
getReporters(): Reporter[];
|
|
94
|
+
onEnd(run: BenchmarkRun): Promise<void>;
|
|
95
|
+
onError(error: Error): Promise<void>;
|
|
96
|
+
onFileEnd(result: FileResult): Promise<void>;
|
|
97
|
+
onFileStart(file: string): Promise<void>;
|
|
98
|
+
onProgress(state: ProgressState): Promise<void>;
|
|
99
|
+
onStart(run: BenchmarkRun): Promise<void>;
|
|
100
|
+
onSuiteEnd(result: SuiteResult): Promise<void>;
|
|
101
|
+
onSuiteStart(suite: string): Promise<void>;
|
|
102
|
+
onTaskResult(result: TaskResult): Promise<void>;
|
|
103
|
+
onTaskStart(task: string): Promise<void>;
|
|
104
|
+
/**
|
|
105
|
+
* Remove a reporter from the composite
|
|
106
|
+
*/
|
|
107
|
+
removeReporter(reporter: Reporter): boolean;
|
|
108
|
+
/**
|
|
109
|
+
* Broadcast an event to all reporters with error handling
|
|
110
|
+
*/
|
|
111
|
+
private broadcastAsync;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Reporter registry implementation for managing multiple reporters
|
|
115
|
+
*/
|
|
116
|
+
export declare class ModestBenchReporterRegistry implements ReporterRegistry {
|
|
117
|
+
private readonly reporters;
|
|
118
|
+
/**
|
|
119
|
+
* Clear all registered reporters
|
|
120
|
+
*/
|
|
121
|
+
clear(): void;
|
|
122
|
+
/**
|
|
123
|
+
* Get a reporter by name
|
|
124
|
+
*/
|
|
125
|
+
get(name: string): Reporter | undefined;
|
|
126
|
+
/**
|
|
127
|
+
* Get all registered reporters
|
|
128
|
+
*/
|
|
129
|
+
getAll(): Record<string, Reporter>;
|
|
130
|
+
/**
|
|
131
|
+
* Get multiple reporters by names
|
|
132
|
+
*/
|
|
133
|
+
getByNames(names: string[]): Reporter[];
|
|
134
|
+
/**
|
|
135
|
+
* Get list of registered reporter names
|
|
136
|
+
*/
|
|
137
|
+
getNames(): string[];
|
|
138
|
+
/**
|
|
139
|
+
* Check if a reporter is registered
|
|
140
|
+
*/
|
|
141
|
+
has(name: string): boolean;
|
|
142
|
+
/**
|
|
143
|
+
* Register a reporter with a unique name
|
|
144
|
+
*/
|
|
145
|
+
register(name: string, reporter: Reporter): void;
|
|
146
|
+
/**
|
|
147
|
+
* Get count of registered reporters
|
|
148
|
+
*/
|
|
149
|
+
size(): number;
|
|
150
|
+
/**
|
|
151
|
+
* Unregister a reporter
|
|
152
|
+
*/
|
|
153
|
+
unregister(name: string): boolean;
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/reporters/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ModestBench Reporter Registry
|
|
3
|
+
*
|
|
4
|
+
* Plugin-based system for managing benchmark output formatters. Supports
|
|
5
|
+
* registration, retrieval, and lifecycle management of reporters.
|
|
6
|
+
*/
|
|
7
|
+
import type { BenchmarkRun, FileResult, ProgressState, Reporter, ReporterRegistry, SuiteResult, TaskResult } from "../types/index.js";
|
|
8
|
+
/**
|
|
9
|
+
* Base abstract reporter class providing common functionality
|
|
10
|
+
*/
|
|
11
|
+
export declare abstract class BaseReporter implements Reporter {
|
|
12
|
+
protected readonly name: string;
|
|
13
|
+
protected readonly options: Record<string, unknown>;
|
|
14
|
+
constructor(name: string, options?: Record<string, unknown>);
|
|
15
|
+
/**
|
|
16
|
+
* Get reporter name
|
|
17
|
+
*/
|
|
18
|
+
getName(): string;
|
|
19
|
+
/**
|
|
20
|
+
* Get reporter options
|
|
21
|
+
*/
|
|
22
|
+
getOptions(): Record<string, unknown>;
|
|
23
|
+
/**
|
|
24
|
+
* Called when benchmark run completes
|
|
25
|
+
*/
|
|
26
|
+
abstract onEnd(run: BenchmarkRun): Promise<void> | void;
|
|
27
|
+
/**
|
|
28
|
+
* Called when an error occurs
|
|
29
|
+
*/
|
|
30
|
+
abstract onError(error: Error): Promise<void> | void;
|
|
31
|
+
/**
|
|
32
|
+
* Called when a file completes
|
|
33
|
+
*/
|
|
34
|
+
abstract onFileEnd(result: FileResult): Promise<void> | void;
|
|
35
|
+
/**
|
|
36
|
+
* Called when a file starts execution
|
|
37
|
+
*/
|
|
38
|
+
abstract onFileStart(file: string): Promise<void> | void;
|
|
39
|
+
/**
|
|
40
|
+
* Called for progress updates
|
|
41
|
+
*/
|
|
42
|
+
abstract onProgress(state: ProgressState): Promise<void> | void;
|
|
43
|
+
/**
|
|
44
|
+
* Called when benchmark run starts
|
|
45
|
+
*/
|
|
46
|
+
abstract onStart(run: BenchmarkRun): Promise<void> | void;
|
|
47
|
+
/**
|
|
48
|
+
* Called when a suite completes
|
|
49
|
+
*/
|
|
50
|
+
abstract onSuiteEnd(result: SuiteResult): Promise<void> | void;
|
|
51
|
+
/**
|
|
52
|
+
* Called when a suite starts execution
|
|
53
|
+
*/
|
|
54
|
+
abstract onSuiteStart(suite: string): Promise<void> | void;
|
|
55
|
+
/**
|
|
56
|
+
* Called when a task completes
|
|
57
|
+
*/
|
|
58
|
+
abstract onTaskResult(result: TaskResult): Promise<void> | void;
|
|
59
|
+
/**
|
|
60
|
+
* Called when a task starts execution
|
|
61
|
+
*/
|
|
62
|
+
abstract onTaskStart(task: string): Promise<void> | void;
|
|
63
|
+
/**
|
|
64
|
+
* Utility method to format duration in human-readable format
|
|
65
|
+
*/
|
|
66
|
+
protected formatDuration(nanoseconds: number): string;
|
|
67
|
+
/**
|
|
68
|
+
* Utility method to format operations per second
|
|
69
|
+
*/
|
|
70
|
+
protected formatOpsPerSecond(opsPerSecond: number): string;
|
|
71
|
+
/**
|
|
72
|
+
* Utility method to format percentage
|
|
73
|
+
*/
|
|
74
|
+
protected formatPercentage(value: number): string;
|
|
75
|
+
/**
|
|
76
|
+
* Utility method to safely handle async operations
|
|
77
|
+
*/
|
|
78
|
+
protected safeAsync<T>(operation: () => Promise<T>): Promise<null | T>;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Composite reporter that broadcasts events to multiple reporters
|
|
82
|
+
*/
|
|
83
|
+
export declare class CompositeReporter extends BaseReporter {
|
|
84
|
+
private readonly reporters;
|
|
85
|
+
constructor(reporters: Reporter[]);
|
|
86
|
+
/**
|
|
87
|
+
* Add a reporter to the composite
|
|
88
|
+
*/
|
|
89
|
+
addReporter(reporter: Reporter): void;
|
|
90
|
+
/**
|
|
91
|
+
* Get all reporters in the composite
|
|
92
|
+
*/
|
|
93
|
+
getReporters(): Reporter[];
|
|
94
|
+
onEnd(run: BenchmarkRun): Promise<void>;
|
|
95
|
+
onError(error: Error): Promise<void>;
|
|
96
|
+
onFileEnd(result: FileResult): Promise<void>;
|
|
97
|
+
onFileStart(file: string): Promise<void>;
|
|
98
|
+
onProgress(state: ProgressState): Promise<void>;
|
|
99
|
+
onStart(run: BenchmarkRun): Promise<void>;
|
|
100
|
+
onSuiteEnd(result: SuiteResult): Promise<void>;
|
|
101
|
+
onSuiteStart(suite: string): Promise<void>;
|
|
102
|
+
onTaskResult(result: TaskResult): Promise<void>;
|
|
103
|
+
onTaskStart(task: string): Promise<void>;
|
|
104
|
+
/**
|
|
105
|
+
* Remove a reporter from the composite
|
|
106
|
+
*/
|
|
107
|
+
removeReporter(reporter: Reporter): boolean;
|
|
108
|
+
/**
|
|
109
|
+
* Broadcast an event to all reporters with error handling
|
|
110
|
+
*/
|
|
111
|
+
private broadcastAsync;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Reporter registry implementation for managing multiple reporters
|
|
115
|
+
*/
|
|
116
|
+
export declare class ModestBenchReporterRegistry implements ReporterRegistry {
|
|
117
|
+
private readonly reporters;
|
|
118
|
+
/**
|
|
119
|
+
* Clear all registered reporters
|
|
120
|
+
*/
|
|
121
|
+
clear(): void;
|
|
122
|
+
/**
|
|
123
|
+
* Get a reporter by name
|
|
124
|
+
*/
|
|
125
|
+
get(name: string): Reporter | undefined;
|
|
126
|
+
/**
|
|
127
|
+
* Get all registered reporters
|
|
128
|
+
*/
|
|
129
|
+
getAll(): Record<string, Reporter>;
|
|
130
|
+
/**
|
|
131
|
+
* Get multiple reporters by names
|
|
132
|
+
*/
|
|
133
|
+
getByNames(names: string[]): Reporter[];
|
|
134
|
+
/**
|
|
135
|
+
* Get list of registered reporter names
|
|
136
|
+
*/
|
|
137
|
+
getNames(): string[];
|
|
138
|
+
/**
|
|
139
|
+
* Check if a reporter is registered
|
|
140
|
+
*/
|
|
141
|
+
has(name: string): boolean;
|
|
142
|
+
/**
|
|
143
|
+
* Register a reporter with a unique name
|
|
144
|
+
*/
|
|
145
|
+
register(name: string, reporter: Reporter): void;
|
|
146
|
+
/**
|
|
147
|
+
* Get count of registered reporters
|
|
148
|
+
*/
|
|
149
|
+
size(): number;
|
|
150
|
+
/**
|
|
151
|
+
* Unregister a reporter
|
|
152
|
+
*/
|
|
153
|
+
unregister(name: string): boolean;
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/reporters/registry.ts"],"names":[],"mappings":"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"}
|