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,523 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* ModestBench CLI Entry Point
|
|
5
|
+
*
|
|
6
|
+
* Command-line interface using yargs for command parsing and routing. Provides
|
|
7
|
+
* global options, help generation, and dependency injection setup.
|
|
8
|
+
*/
|
|
9
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
10
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
11
|
+
};
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.main = exports.cli = exports.ExitCodes = void 0;
|
|
14
|
+
const node_fs_1 = require("node:fs");
|
|
15
|
+
const node_url_1 = require("node:url");
|
|
16
|
+
const yargs_1 = __importDefault(require("yargs"));
|
|
17
|
+
const helpers_1 = require("yargs/helpers");
|
|
18
|
+
const bootstrap_js_1 = require("../bootstrap.cjs");
|
|
19
|
+
const index_js_1 = require("../core/engines/index.cjs");
|
|
20
|
+
const index_js_2 = require("../reporters/index.cjs");
|
|
21
|
+
// Import commands
|
|
22
|
+
const history_js_1 = require("./commands/history.cjs");
|
|
23
|
+
const init_js_1 = require("./commands/init.cjs");
|
|
24
|
+
const run_js_1 = require("./commands/run.cjs");
|
|
25
|
+
/**
|
|
26
|
+
* Exit codes for the CLI
|
|
27
|
+
*/
|
|
28
|
+
exports.ExitCodes = {
|
|
29
|
+
BENCHMARK_FAILURES: 1,
|
|
30
|
+
CONFIG_ERROR: 2,
|
|
31
|
+
DISCOVERY_ERROR: 3,
|
|
32
|
+
RUNTIME_ERROR: 5,
|
|
33
|
+
SUCCESS: 0,
|
|
34
|
+
UNKNOWN_ERROR: 99,
|
|
35
|
+
VALIDATION_ERROR: 4,
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Initialize and run the CLI
|
|
39
|
+
*/
|
|
40
|
+
const cli = (argv) => {
|
|
41
|
+
const abortController = new AbortController();
|
|
42
|
+
setupSignalHandlers(abortController);
|
|
43
|
+
(0, exports.main)(argv, abortController).catch((error) => {
|
|
44
|
+
console.error('CLI error:', error);
|
|
45
|
+
process.exit(exports.ExitCodes.UNKNOWN_ERROR);
|
|
46
|
+
});
|
|
47
|
+
};
|
|
48
|
+
exports.cli = cli;
|
|
49
|
+
/**
|
|
50
|
+
* Main CLI entry point
|
|
51
|
+
*/
|
|
52
|
+
const main = async (argv, abortController) => {
|
|
53
|
+
try {
|
|
54
|
+
const args = argv || (0, helpers_1.hideBin)(process.argv);
|
|
55
|
+
const cli = (0, yargs_1.default)(args);
|
|
56
|
+
// Configure global options and commands
|
|
57
|
+
await cli
|
|
58
|
+
.option('config', {
|
|
59
|
+
alias: 'c',
|
|
60
|
+
description: 'Path to configuration file',
|
|
61
|
+
global: true,
|
|
62
|
+
type: 'string',
|
|
63
|
+
})
|
|
64
|
+
.option('verbose', {
|
|
65
|
+
alias: 'v',
|
|
66
|
+
default: false,
|
|
67
|
+
description: 'Enable verbose output',
|
|
68
|
+
global: true,
|
|
69
|
+
type: 'boolean',
|
|
70
|
+
})
|
|
71
|
+
.option('no-color', {
|
|
72
|
+
default: false,
|
|
73
|
+
description: 'Disable colored output',
|
|
74
|
+
global: true,
|
|
75
|
+
type: 'boolean',
|
|
76
|
+
})
|
|
77
|
+
.option('progress', {
|
|
78
|
+
default: true,
|
|
79
|
+
description: 'Show animated progress bar',
|
|
80
|
+
global: true,
|
|
81
|
+
type: 'boolean',
|
|
82
|
+
})
|
|
83
|
+
.option('json', {
|
|
84
|
+
default: false,
|
|
85
|
+
description: 'Output results in JSON format',
|
|
86
|
+
global: true,
|
|
87
|
+
type: 'boolean',
|
|
88
|
+
})
|
|
89
|
+
.option('cwd', {
|
|
90
|
+
default: process.cwd(),
|
|
91
|
+
description: 'Working directory',
|
|
92
|
+
global: true,
|
|
93
|
+
type: 'string',
|
|
94
|
+
})
|
|
95
|
+
.help()
|
|
96
|
+
.alias('help', 'h')
|
|
97
|
+
.version()
|
|
98
|
+
.alias('version', 'V')
|
|
99
|
+
.strict()
|
|
100
|
+
.demandCommand(1, 'You must specify a command')
|
|
101
|
+
.recommendCommands()
|
|
102
|
+
.completion()
|
|
103
|
+
.wrap(Math.min(120, cli.terminalWidth()))
|
|
104
|
+
.command('run [pattern..]', 'Run benchmark files', (yargs) => {
|
|
105
|
+
return yargs
|
|
106
|
+
.positional('pattern', {
|
|
107
|
+
array: true,
|
|
108
|
+
default: [],
|
|
109
|
+
describe: 'File paths, directory paths, or glob patterns for benchmark files',
|
|
110
|
+
type: 'string',
|
|
111
|
+
})
|
|
112
|
+
.option('config', {
|
|
113
|
+
alias: 'c',
|
|
114
|
+
description: 'Path to configuration file',
|
|
115
|
+
type: 'string',
|
|
116
|
+
})
|
|
117
|
+
.option('reporters', {
|
|
118
|
+
alias: 'r',
|
|
119
|
+
coerce: (value) => {
|
|
120
|
+
// Handle comma-separated values
|
|
121
|
+
if (Array.isArray(value)) {
|
|
122
|
+
return value.flatMap((v) => v.split(',').map((s) => s.trim()));
|
|
123
|
+
}
|
|
124
|
+
return value.split(',').map((s) => s.trim());
|
|
125
|
+
},
|
|
126
|
+
default: ['human'],
|
|
127
|
+
description: 'Output reporters to use (human,json,csv)',
|
|
128
|
+
type: 'array',
|
|
129
|
+
})
|
|
130
|
+
.option('output', {
|
|
131
|
+
alias: 'o',
|
|
132
|
+
description: 'Output directory for reports',
|
|
133
|
+
type: 'string',
|
|
134
|
+
})
|
|
135
|
+
.option('iterations', {
|
|
136
|
+
alias: 'i',
|
|
137
|
+
description: 'Number of iterations per benchmark',
|
|
138
|
+
type: 'number',
|
|
139
|
+
})
|
|
140
|
+
.option('time', {
|
|
141
|
+
alias: 't',
|
|
142
|
+
description: 'Time budget per benchmark in milliseconds',
|
|
143
|
+
type: 'number',
|
|
144
|
+
})
|
|
145
|
+
.option('warmup', {
|
|
146
|
+
alias: 'w',
|
|
147
|
+
description: 'Number of warmup iterations',
|
|
148
|
+
type: 'number',
|
|
149
|
+
})
|
|
150
|
+
.option('limit-by', {
|
|
151
|
+
choices: ['time', 'iterations', 'any', 'all'],
|
|
152
|
+
description: 'How to limit benchmarks: time (time budget), iterations (sample count), any (either threshold), all (both thresholds)',
|
|
153
|
+
type: 'string',
|
|
154
|
+
})
|
|
155
|
+
.option('bail', {
|
|
156
|
+
alias: 'b',
|
|
157
|
+
default: false,
|
|
158
|
+
description: 'Stop on first failure',
|
|
159
|
+
type: 'boolean',
|
|
160
|
+
})
|
|
161
|
+
.option('exclude', {
|
|
162
|
+
coerce: (value) => {
|
|
163
|
+
// Handle comma-separated values
|
|
164
|
+
if (Array.isArray(value)) {
|
|
165
|
+
return value.flatMap((v) => v.split(',').map((s) => s.trim()));
|
|
166
|
+
}
|
|
167
|
+
return value.split(',').map((s) => s.trim());
|
|
168
|
+
},
|
|
169
|
+
description: 'Exclude patterns (comma-separated)',
|
|
170
|
+
type: 'array',
|
|
171
|
+
})
|
|
172
|
+
.option('timeout', {
|
|
173
|
+
description: 'Timeout per benchmark in milliseconds',
|
|
174
|
+
type: 'number',
|
|
175
|
+
})
|
|
176
|
+
.option('quiet', {
|
|
177
|
+
alias: 'q',
|
|
178
|
+
default: false,
|
|
179
|
+
description: 'Minimal output',
|
|
180
|
+
type: 'boolean',
|
|
181
|
+
})
|
|
182
|
+
.option('tags', {
|
|
183
|
+
coerce: (value) => {
|
|
184
|
+
// Handle comma-separated values
|
|
185
|
+
if (Array.isArray(value)) {
|
|
186
|
+
return value.flatMap((v) => v.split(',').map((s) => s.trim()));
|
|
187
|
+
}
|
|
188
|
+
return value.split(',').map((s) => s.trim());
|
|
189
|
+
},
|
|
190
|
+
description: 'Include only benchmarks with any of these tags',
|
|
191
|
+
type: 'array',
|
|
192
|
+
})
|
|
193
|
+
.option('exclude-tags', {
|
|
194
|
+
coerce: (value) => {
|
|
195
|
+
// Handle comma-separated values
|
|
196
|
+
if (Array.isArray(value)) {
|
|
197
|
+
return value.flatMap((v) => v.split(',').map((s) => s.trim()));
|
|
198
|
+
}
|
|
199
|
+
return value.split(',').map((s) => s.trim());
|
|
200
|
+
},
|
|
201
|
+
description: 'Exclude benchmarks with any of these tags',
|
|
202
|
+
type: 'array',
|
|
203
|
+
})
|
|
204
|
+
.option('engine', {
|
|
205
|
+
alias: 'e',
|
|
206
|
+
choices: ['tinybench', 'accurate'],
|
|
207
|
+
default: 'tinybench',
|
|
208
|
+
description: 'Benchmark engine: tinybench (default) or accurate (requires --allow-natives-syntax)',
|
|
209
|
+
type: 'string',
|
|
210
|
+
})
|
|
211
|
+
.example([
|
|
212
|
+
['$0 run', 'Run benchmarks in current directory and bench/'],
|
|
213
|
+
['$0 run benchmarks/', 'Run all benchmarks in a directory'],
|
|
214
|
+
['$0 run src/perf/', 'Run benchmarks in specific directory'],
|
|
215
|
+
['$0 run "src/**/*.bench.js"', 'Run specific glob pattern'],
|
|
216
|
+
['$0 run file1.bench.js file2.bench.js', 'Run specific files'],
|
|
217
|
+
['$0 run benchmarks/ tests/perf/', 'Run multiple directories'],
|
|
218
|
+
['$0 run --reporters json,csv', 'Use multiple reporters'],
|
|
219
|
+
['$0 run --iterations 1000', 'Set iteration count'],
|
|
220
|
+
['$0 run --engine accurate', 'Use high-accuracy engine'],
|
|
221
|
+
['$0 run --bail', 'Stop on first failure'],
|
|
222
|
+
]);
|
|
223
|
+
}, async (argv) => {
|
|
224
|
+
const context = await createCliContext(argv, abortController, argv.engine);
|
|
225
|
+
const exitCode = await (0, run_js_1.handleRunCommand)(context, {
|
|
226
|
+
bail: argv.bail,
|
|
227
|
+
config: argv.config,
|
|
228
|
+
cwd: argv.cwd,
|
|
229
|
+
engine: argv.engine,
|
|
230
|
+
exclude: argv.exclude,
|
|
231
|
+
excludeTags: argv['exclude-tags'],
|
|
232
|
+
iterations: argv.iterations,
|
|
233
|
+
json: argv.json,
|
|
234
|
+
noColor: argv.noColor,
|
|
235
|
+
outputDir: argv.output,
|
|
236
|
+
pattern: argv.pattern,
|
|
237
|
+
progress: argv.progress,
|
|
238
|
+
quiet: argv.quiet,
|
|
239
|
+
reporters: argv.reporters,
|
|
240
|
+
tags: argv.tags,
|
|
241
|
+
time: argv.time,
|
|
242
|
+
timeout: argv.timeout,
|
|
243
|
+
verbose: argv.verbose,
|
|
244
|
+
warmup: argv.warmup,
|
|
245
|
+
});
|
|
246
|
+
process.exit(exitCode);
|
|
247
|
+
})
|
|
248
|
+
.command('history <subcommand> [args..]', 'View and manage benchmark history', (yargs) => {
|
|
249
|
+
return yargs
|
|
250
|
+
.positional('subcommand', {
|
|
251
|
+
choices: [
|
|
252
|
+
'list',
|
|
253
|
+
'show',
|
|
254
|
+
'compare',
|
|
255
|
+
'trends',
|
|
256
|
+
'clean',
|
|
257
|
+
'export',
|
|
258
|
+
],
|
|
259
|
+
demandOption: true,
|
|
260
|
+
describe: 'History subcommand',
|
|
261
|
+
type: 'string',
|
|
262
|
+
})
|
|
263
|
+
.positional('args', {
|
|
264
|
+
array: true,
|
|
265
|
+
describe: 'Additional arguments for the subcommand',
|
|
266
|
+
type: 'string',
|
|
267
|
+
})
|
|
268
|
+
.option('since', {
|
|
269
|
+
description: 'Show runs since date (ISO 8601 or relative like "1 week ago")',
|
|
270
|
+
type: 'string',
|
|
271
|
+
})
|
|
272
|
+
.option('until', {
|
|
273
|
+
description: 'Show runs until date (ISO 8601 or relative like "1 day ago")',
|
|
274
|
+
type: 'string',
|
|
275
|
+
})
|
|
276
|
+
.option('pattern', {
|
|
277
|
+
description: 'Filter by benchmark name pattern',
|
|
278
|
+
type: 'string',
|
|
279
|
+
})
|
|
280
|
+
.option('tags', {
|
|
281
|
+
description: 'Filter by tags',
|
|
282
|
+
type: 'array',
|
|
283
|
+
})
|
|
284
|
+
.option('limit', {
|
|
285
|
+
default: 10,
|
|
286
|
+
description: 'Maximum number of results',
|
|
287
|
+
type: 'number',
|
|
288
|
+
})
|
|
289
|
+
.option('format', {
|
|
290
|
+
choices: ['human', 'json', 'csv'],
|
|
291
|
+
default: 'human',
|
|
292
|
+
description: 'Output format',
|
|
293
|
+
type: 'string',
|
|
294
|
+
})
|
|
295
|
+
.option('maxAge', {
|
|
296
|
+
description: 'Maximum age in days for cleanup',
|
|
297
|
+
type: 'number',
|
|
298
|
+
})
|
|
299
|
+
.option('maxRuns', {
|
|
300
|
+
description: 'Maximum number of runs to keep',
|
|
301
|
+
type: 'number',
|
|
302
|
+
})
|
|
303
|
+
.option('maxSize', {
|
|
304
|
+
description: 'Maximum storage size in bytes',
|
|
305
|
+
type: 'number',
|
|
306
|
+
})
|
|
307
|
+
.option('confirm', {
|
|
308
|
+
default: false,
|
|
309
|
+
description: 'Confirm cleanup operations',
|
|
310
|
+
type: 'boolean',
|
|
311
|
+
})
|
|
312
|
+
.option('output', {
|
|
313
|
+
description: 'Output file path',
|
|
314
|
+
type: 'string',
|
|
315
|
+
})
|
|
316
|
+
.example([
|
|
317
|
+
['$0 history list', 'List recent benchmark runs'],
|
|
318
|
+
['$0 history show <run-id>', 'Show detailed results for run'],
|
|
319
|
+
['$0 history compare <run-id1> <run-id2>', 'Compare two runs'],
|
|
320
|
+
['$0 history trends [pattern]', 'Show performance trends'],
|
|
321
|
+
['$0 history clean --max-runs 50', 'Keep only latest 50 runs'],
|
|
322
|
+
['$0 history export --format csv', 'Export to CSV'],
|
|
323
|
+
]);
|
|
324
|
+
}, async (argv) => {
|
|
325
|
+
const context = await createCliContext(argv, abortController);
|
|
326
|
+
const exitCode = await (0, history_js_1.handleHistoryCommand)(context, {
|
|
327
|
+
args: argv.args,
|
|
328
|
+
confirm: argv.confirm,
|
|
329
|
+
cwd: argv.cwd,
|
|
330
|
+
format: argv.format,
|
|
331
|
+
limit: argv.limit,
|
|
332
|
+
maxAge: argv.maxAge,
|
|
333
|
+
maxRuns: argv.maxRuns,
|
|
334
|
+
maxSize: argv.maxSize,
|
|
335
|
+
outputDir: argv.output,
|
|
336
|
+
pattern: argv.pattern,
|
|
337
|
+
quiet: Boolean(argv.quiet),
|
|
338
|
+
since: argv.since,
|
|
339
|
+
subcommand: argv.subcommand,
|
|
340
|
+
tags: argv.tags,
|
|
341
|
+
until: argv.until,
|
|
342
|
+
verbose: argv.verbose,
|
|
343
|
+
});
|
|
344
|
+
process.exit(exitCode);
|
|
345
|
+
})
|
|
346
|
+
.command('init [type]', 'Initialize a new benchmark project', (yargs) => {
|
|
347
|
+
return yargs
|
|
348
|
+
.positional('type', {
|
|
349
|
+
choices: ['basic', 'advanced', 'library'],
|
|
350
|
+
default: 'basic',
|
|
351
|
+
describe: 'Type of project to initialize',
|
|
352
|
+
type: 'string',
|
|
353
|
+
})
|
|
354
|
+
.option('examples', {
|
|
355
|
+
default: true,
|
|
356
|
+
description: 'Include example benchmark files',
|
|
357
|
+
type: 'boolean',
|
|
358
|
+
})
|
|
359
|
+
.option('config-type', {
|
|
360
|
+
choices: ['json', 'yaml', 'js', 'ts'],
|
|
361
|
+
default: 'json',
|
|
362
|
+
description: 'Configuration file format',
|
|
363
|
+
type: 'string',
|
|
364
|
+
})
|
|
365
|
+
.option('force', {
|
|
366
|
+
default: false,
|
|
367
|
+
description: 'Overwrite existing files',
|
|
368
|
+
type: 'boolean',
|
|
369
|
+
})
|
|
370
|
+
.option('yes', {
|
|
371
|
+
alias: 'y',
|
|
372
|
+
default: false,
|
|
373
|
+
description: 'Accept all prompts automatically',
|
|
374
|
+
type: 'boolean',
|
|
375
|
+
})
|
|
376
|
+
.option('quiet', {
|
|
377
|
+
alias: 'q',
|
|
378
|
+
default: false,
|
|
379
|
+
description: 'Minimal output',
|
|
380
|
+
type: 'boolean',
|
|
381
|
+
})
|
|
382
|
+
.example([
|
|
383
|
+
['$0 init', 'Initialize a basic project'],
|
|
384
|
+
[
|
|
385
|
+
'$0 init advanced --config-type ts',
|
|
386
|
+
'Initialize advanced project with TypeScript config',
|
|
387
|
+
],
|
|
388
|
+
[
|
|
389
|
+
'$0 init library --no-examples',
|
|
390
|
+
'Initialize library project without examples',
|
|
391
|
+
],
|
|
392
|
+
]);
|
|
393
|
+
}, async (argv) => {
|
|
394
|
+
const context = await createCliContext(argv, abortController);
|
|
395
|
+
const exitCode = await (0, init_js_1.handleInitCommand)(context, {
|
|
396
|
+
configType: argv['config-type'],
|
|
397
|
+
cwd: argv.cwd,
|
|
398
|
+
examples: argv.examples,
|
|
399
|
+
force: argv.force,
|
|
400
|
+
quiet: Boolean(argv.quiet),
|
|
401
|
+
type: argv.type,
|
|
402
|
+
verbose: argv.verbose,
|
|
403
|
+
yes: argv.yes,
|
|
404
|
+
});
|
|
405
|
+
process.exit(exitCode);
|
|
406
|
+
})
|
|
407
|
+
.fail((msg, err, yargsInstance) => {
|
|
408
|
+
if (err) {
|
|
409
|
+
console.error('Error:', err.message);
|
|
410
|
+
if (process.env.DEBUG) {
|
|
411
|
+
console.error(err.stack);
|
|
412
|
+
}
|
|
413
|
+
process.exit(exports.ExitCodes.RUNTIME_ERROR);
|
|
414
|
+
}
|
|
415
|
+
else {
|
|
416
|
+
console.error(msg);
|
|
417
|
+
console.error();
|
|
418
|
+
yargsInstance.showHelp();
|
|
419
|
+
process.exit(exports.ExitCodes.CONFIG_ERROR);
|
|
420
|
+
}
|
|
421
|
+
})
|
|
422
|
+
.parse();
|
|
423
|
+
}
|
|
424
|
+
catch (error) {
|
|
425
|
+
console.error('Unexpected error:', error instanceof Error ? error.message : String(error));
|
|
426
|
+
if (process.env.DEBUG) {
|
|
427
|
+
console.error(error);
|
|
428
|
+
}
|
|
429
|
+
process.exit(exports.ExitCodes.UNKNOWN_ERROR);
|
|
430
|
+
}
|
|
431
|
+
};
|
|
432
|
+
exports.main = main;
|
|
433
|
+
/**
|
|
434
|
+
* Create CLI context with dependency injection
|
|
435
|
+
*/
|
|
436
|
+
const createCliContext = async (options, abortController, engineType = 'tinybench') => {
|
|
437
|
+
try {
|
|
438
|
+
const dependencies = (0, bootstrap_js_1.bootstrap)();
|
|
439
|
+
// Select engine based on type
|
|
440
|
+
const engine = engineType === 'accurate'
|
|
441
|
+
? new index_js_1.AccurateEngine(dependencies)
|
|
442
|
+
: new index_js_1.TinybenchEngine(dependencies);
|
|
443
|
+
// Register built-in reporters
|
|
444
|
+
engine.registerReporter('human', new index_js_2.HumanReporter({
|
|
445
|
+
color: !options.noColor,
|
|
446
|
+
verbose: options.verbose,
|
|
447
|
+
}));
|
|
448
|
+
engine.registerReporter('json', new index_js_2.JsonReporter({
|
|
449
|
+
prettyPrint: true,
|
|
450
|
+
}));
|
|
451
|
+
engine.registerReporter('csv', new index_js_2.CsvReporter({
|
|
452
|
+
includeHeaders: true,
|
|
453
|
+
includeMetadata: true,
|
|
454
|
+
}));
|
|
455
|
+
engine.registerReporter('simple', new index_js_2.SimpleReporter({
|
|
456
|
+
verbose: options.verbose,
|
|
457
|
+
}));
|
|
458
|
+
return {
|
|
459
|
+
abortController,
|
|
460
|
+
configManager: engine.configManager,
|
|
461
|
+
engine,
|
|
462
|
+
errorManager: engine.errorManager,
|
|
463
|
+
historyStorage: engine.historyStorage,
|
|
464
|
+
options,
|
|
465
|
+
progressManager: engine.progressManager,
|
|
466
|
+
reporterRegistry: engine.reporterRegistry,
|
|
467
|
+
};
|
|
468
|
+
}
|
|
469
|
+
catch (error) {
|
|
470
|
+
console.error('Failed to initialize ModestBench:', error instanceof Error ? error.message : String(error));
|
|
471
|
+
process.exit(exports.ExitCodes.CONFIG_ERROR);
|
|
472
|
+
}
|
|
473
|
+
};
|
|
474
|
+
/**
|
|
475
|
+
* Handle process signals gracefully
|
|
476
|
+
*/
|
|
477
|
+
const setupSignalHandlers = (abortController) => {
|
|
478
|
+
let abortRequested = false;
|
|
479
|
+
const handleSignal = (signal) => {
|
|
480
|
+
if (abortRequested) {
|
|
481
|
+
// Second signal, force exit
|
|
482
|
+
console.log(`\nReceived ${signal} again, forcing exit...`);
|
|
483
|
+
process.exit(128 + (signal === 'SIGINT' ? 2 : signal === 'SIGQUIT' ? 3 : 15));
|
|
484
|
+
}
|
|
485
|
+
console.log(`\nReceived ${signal}, aborting benchmarks...`);
|
|
486
|
+
abortRequested = true;
|
|
487
|
+
abortController.abort();
|
|
488
|
+
// Give a short grace period for cleanup, then exit
|
|
489
|
+
setTimeout(() => {
|
|
490
|
+
console.log('\nBenchmark aborted.');
|
|
491
|
+
process.exit(128 + (signal === 'SIGINT' ? 2 : signal === 'SIGQUIT' ? 3 : 15));
|
|
492
|
+
}, 100);
|
|
493
|
+
};
|
|
494
|
+
process.on('SIGINT', () => handleSignal('SIGINT'));
|
|
495
|
+
process.on('SIGQUIT', () => handleSignal('SIGQUIT'));
|
|
496
|
+
process.on('SIGTERM', () => handleSignal('SIGTERM'));
|
|
497
|
+
process.on('uncaughtException', (error) => {
|
|
498
|
+
console.error('Uncaught exception:', error);
|
|
499
|
+
process.exit(exports.ExitCodes.RUNTIME_ERROR);
|
|
500
|
+
});
|
|
501
|
+
process.on('unhandledRejection', (reason, promise) => {
|
|
502
|
+
console.error('Unhandled rejection at:', promise, 'reason:', reason);
|
|
503
|
+
process.exit(exports.ExitCodes.RUNTIME_ERROR);
|
|
504
|
+
});
|
|
505
|
+
};
|
|
506
|
+
// Run CLI if this file is executed directly
|
|
507
|
+
const scriptPath = (0, node_url_1.fileURLToPath)(require("url").pathToFileURL(__filename));
|
|
508
|
+
const argPath = process.argv[1];
|
|
509
|
+
// Resolve both to real paths to handle symlinks (e.g. npm install ../package)
|
|
510
|
+
try {
|
|
511
|
+
const scriptRealPath = (0, node_fs_1.realpathSync)(scriptPath);
|
|
512
|
+
const argRealPath = argPath ? (0, node_fs_1.realpathSync)(argPath) : '';
|
|
513
|
+
if (scriptRealPath === argRealPath) {
|
|
514
|
+
(0, exports.cli)();
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
catch {
|
|
518
|
+
// If realpath fails (file doesn't exist), fall back to string comparison
|
|
519
|
+
if (require("url").pathToFileURL(__filename) === `file://${argPath}`) {
|
|
520
|
+
(0, exports.cli)();
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
//# 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,58 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* ModestBench CLI Entry Point
|
|
4
|
+
*
|
|
5
|
+
* Command-line interface using yargs for command parsing and routing. Provides
|
|
6
|
+
* global options, help generation, and dependency injection setup.
|
|
7
|
+
*/
|
|
8
|
+
import type { BenchmarkEngine, ConfigurationManager, ErrorManager, HistoryStorage, ProgressManager, ReporterRegistry } from "../types/index.cjs";
|
|
9
|
+
/**
|
|
10
|
+
* CLI context with initialized services
|
|
11
|
+
*/
|
|
12
|
+
export interface CliContext {
|
|
13
|
+
readonly abortController: AbortController;
|
|
14
|
+
readonly configManager: ConfigurationManager;
|
|
15
|
+
readonly engine: BenchmarkEngine;
|
|
16
|
+
readonly errorManager: ErrorManager;
|
|
17
|
+
readonly historyStorage: HistoryStorage;
|
|
18
|
+
readonly options: GlobalOptions;
|
|
19
|
+
readonly progressManager: ProgressManager;
|
|
20
|
+
readonly reporterRegistry: ReporterRegistry;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Global CLI options shared across all commands
|
|
24
|
+
*/
|
|
25
|
+
interface GlobalOptions {
|
|
26
|
+
/** Configuration file path */
|
|
27
|
+
config?: string | undefined;
|
|
28
|
+
/** Working directory */
|
|
29
|
+
cwd: string;
|
|
30
|
+
/** JSON output for machine parsing */
|
|
31
|
+
json: boolean;
|
|
32
|
+
/** Disable colored output */
|
|
33
|
+
noColor: boolean;
|
|
34
|
+
/** Enable verbose output */
|
|
35
|
+
verbose: boolean;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Exit codes for the CLI
|
|
39
|
+
*/
|
|
40
|
+
export declare const ExitCodes: {
|
|
41
|
+
readonly BENCHMARK_FAILURES: 1;
|
|
42
|
+
readonly CONFIG_ERROR: 2;
|
|
43
|
+
readonly DISCOVERY_ERROR: 3;
|
|
44
|
+
readonly RUNTIME_ERROR: 5;
|
|
45
|
+
readonly SUCCESS: 0;
|
|
46
|
+
readonly UNKNOWN_ERROR: 99;
|
|
47
|
+
readonly VALIDATION_ERROR: 4;
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Initialize and run the CLI
|
|
51
|
+
*/
|
|
52
|
+
export declare const cli: (argv?: string[]) => void;
|
|
53
|
+
/**
|
|
54
|
+
* Main CLI entry point
|
|
55
|
+
*/
|
|
56
|
+
export declare const main: (argv?: string[], abortController?: AbortController) => Promise<void>;
|
|
57
|
+
export {};
|
|
58
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA;;;;;GAKG;AASH,OAAO,KAAK,EACV,eAAe,EACf,oBAAoB,EACpB,YAAY,EACZ,cAAc,EACd,eAAe,EACf,gBAAgB,EACjB,2BAA0B;AAe3B;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAC1C,QAAQ,CAAC,aAAa,EAAE,oBAAoB,CAAC;IAC7C,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IACxC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAChC,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAC1C,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;CAC7C;AAED;;GAEG;AACH,UAAU,aAAa;IACrB,8BAA8B;IAC9B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,wBAAwB;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,sCAAsC;IACtC,IAAI,EAAE,OAAO,CAAC;IACd,6BAA6B;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,4BAA4B;IAC5B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,eAAO,MAAM,SAAS;;;;;;;;CAQZ,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,GAAG,GAAI,OAAO,MAAM,EAAE,KAAG,IAOrC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,IAAI,GACf,OAAO,MAAM,EAAE,EACf,kBAAkB,eAAe,KAChC,OAAO,CAAC,IAAI,CA8Zd,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* ModestBench CLI Entry Point
|
|
4
|
+
*
|
|
5
|
+
* Command-line interface using yargs for command parsing and routing. Provides
|
|
6
|
+
* global options, help generation, and dependency injection setup.
|
|
7
|
+
*/
|
|
8
|
+
import type { BenchmarkEngine, ConfigurationManager, ErrorManager, HistoryStorage, ProgressManager, ReporterRegistry } from "../types/index.js";
|
|
9
|
+
/**
|
|
10
|
+
* CLI context with initialized services
|
|
11
|
+
*/
|
|
12
|
+
export interface CliContext {
|
|
13
|
+
readonly abortController: AbortController;
|
|
14
|
+
readonly configManager: ConfigurationManager;
|
|
15
|
+
readonly engine: BenchmarkEngine;
|
|
16
|
+
readonly errorManager: ErrorManager;
|
|
17
|
+
readonly historyStorage: HistoryStorage;
|
|
18
|
+
readonly options: GlobalOptions;
|
|
19
|
+
readonly progressManager: ProgressManager;
|
|
20
|
+
readonly reporterRegistry: ReporterRegistry;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Global CLI options shared across all commands
|
|
24
|
+
*/
|
|
25
|
+
interface GlobalOptions {
|
|
26
|
+
/** Configuration file path */
|
|
27
|
+
config?: string | undefined;
|
|
28
|
+
/** Working directory */
|
|
29
|
+
cwd: string;
|
|
30
|
+
/** JSON output for machine parsing */
|
|
31
|
+
json: boolean;
|
|
32
|
+
/** Disable colored output */
|
|
33
|
+
noColor: boolean;
|
|
34
|
+
/** Enable verbose output */
|
|
35
|
+
verbose: boolean;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Exit codes for the CLI
|
|
39
|
+
*/
|
|
40
|
+
export declare const ExitCodes: {
|
|
41
|
+
readonly BENCHMARK_FAILURES: 1;
|
|
42
|
+
readonly CONFIG_ERROR: 2;
|
|
43
|
+
readonly DISCOVERY_ERROR: 3;
|
|
44
|
+
readonly RUNTIME_ERROR: 5;
|
|
45
|
+
readonly SUCCESS: 0;
|
|
46
|
+
readonly UNKNOWN_ERROR: 99;
|
|
47
|
+
readonly VALIDATION_ERROR: 4;
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Initialize and run the CLI
|
|
51
|
+
*/
|
|
52
|
+
export declare const cli: (argv?: string[]) => void;
|
|
53
|
+
/**
|
|
54
|
+
* Main CLI entry point
|
|
55
|
+
*/
|
|
56
|
+
export declare const main: (argv?: string[], abortController?: AbortController) => Promise<void>;
|
|
57
|
+
export {};
|
|
58
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA;;;;;GAKG;AASH,OAAO,KAAK,EACV,eAAe,EACf,oBAAoB,EACpB,YAAY,EACZ,cAAc,EACd,eAAe,EACf,gBAAgB,EACjB,0BAA0B;AAe3B;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAC1C,QAAQ,CAAC,aAAa,EAAE,oBAAoB,CAAC;IAC7C,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IACxC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAChC,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAC1C,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;CAC7C;AAED;;GAEG;AACH,UAAU,aAAa;IACrB,8BAA8B;IAC9B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,wBAAwB;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,sCAAsC;IACtC,IAAI,EAAE,OAAO,CAAC;IACd,6BAA6B;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,4BAA4B;IAC5B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,eAAO,MAAM,SAAS;;;;;;;;CAQZ,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,GAAG,GAAI,OAAO,MAAM,EAAE,KAAG,IAOrC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,IAAI,GACf,OAAO,MAAM,EAAE,EACf,kBAAkB,eAAe,KAChC,OAAO,CAAC,IAAI,CA8Zd,CAAC"}
|