modestbench 0.0.3 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +26 -0
- package/README.md +39 -31
- package/dist/bootstrap.cjs +10 -12
- package/dist/bootstrap.cjs.map +1 -1
- package/dist/bootstrap.d.cts.map +1 -1
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +5 -7
- package/dist/bootstrap.js.map +1 -1
- package/dist/cli/commands/history.cjs +108 -265
- package/dist/cli/commands/history.cjs.map +1 -1
- package/dist/cli/commands/history.d.cts +75 -12
- package/dist/cli/commands/history.d.cts.map +1 -1
- package/dist/cli/commands/history.d.ts +75 -12
- package/dist/cli/commands/history.d.ts.map +1 -1
- package/dist/cli/commands/history.js +105 -267
- package/dist/cli/commands/history.js.map +1 -1
- package/dist/cli/commands/init.cjs +5 -4
- package/dist/cli/commands/init.cjs.map +1 -1
- package/dist/cli/commands/init.d.cts.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +5 -4
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/run.cjs +32 -9
- package/dist/cli/commands/run.cjs.map +1 -1
- package/dist/cli/commands/run.d.cts +1 -0
- package/dist/cli/commands/run.d.cts.map +1 -1
- package/dist/cli/commands/run.d.ts +1 -0
- package/dist/cli/commands/run.d.ts.map +1 -1
- package/dist/cli/commands/run.js +32 -9
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/index.cjs +336 -103
- package/dist/cli/index.cjs.map +1 -1
- package/dist/cli/index.d.cts +1 -2
- package/dist/cli/index.d.cts.map +1 -1
- package/dist/cli/index.d.ts +1 -2
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +332 -99
- package/dist/cli/index.js.map +1 -1
- package/dist/constants.cjs +53 -1
- package/dist/constants.cjs.map +1 -1
- package/dist/constants.d.cts +36 -0
- package/dist/constants.d.cts.map +1 -1
- package/dist/constants.d.ts +36 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +52 -0
- package/dist/constants.js.map +1 -1
- package/dist/core/engine.cjs +23 -43
- package/dist/core/engine.cjs.map +1 -1
- package/dist/core/engine.d.cts +4 -3
- package/dist/core/engine.d.cts.map +1 -1
- package/dist/core/engine.d.ts +4 -3
- package/dist/core/engine.d.ts.map +1 -1
- package/dist/core/engine.js +23 -43
- package/dist/core/engine.js.map +1 -1
- package/dist/core/engines/accurate-engine.cjs +2 -1
- package/dist/core/engines/accurate-engine.cjs.map +1 -1
- package/dist/core/engines/accurate-engine.d.cts.map +1 -1
- package/dist/core/engines/accurate-engine.d.ts.map +1 -1
- package/dist/core/engines/accurate-engine.js +2 -1
- package/dist/core/engines/accurate-engine.js.map +1 -1
- package/dist/core/engines/tinybench-engine.cjs +6 -5
- package/dist/core/engines/tinybench-engine.cjs.map +1 -1
- package/dist/core/engines/tinybench-engine.d.cts.map +1 -1
- package/dist/core/engines/tinybench-engine.d.ts.map +1 -1
- package/dist/core/engines/tinybench-engine.js +6 -5
- package/dist/core/engines/tinybench-engine.js.map +1 -1
- package/dist/core/output-path-resolver.cjs +34 -0
- package/dist/core/output-path-resolver.cjs.map +1 -0
- package/dist/core/output-path-resolver.d.cts +10 -0
- package/dist/core/output-path-resolver.d.cts.map +1 -0
- package/dist/core/output-path-resolver.d.ts +10 -0
- package/dist/core/output-path-resolver.d.ts.map +1 -0
- package/dist/core/output-path-resolver.js +30 -0
- package/dist/core/output-path-resolver.js.map +1 -0
- package/dist/errors/base.cjs +130 -0
- package/dist/errors/base.cjs.map +1 -0
- package/dist/errors/base.d.cts +97 -0
- package/dist/errors/base.d.cts.map +1 -0
- package/dist/errors/base.d.ts +97 -0
- package/dist/errors/base.d.ts.map +1 -0
- package/dist/errors/base.js +124 -0
- package/dist/errors/base.js.map +1 -0
- package/dist/errors/cli.cjs +58 -0
- package/dist/errors/cli.cjs.map +1 -0
- package/dist/errors/cli.d.cts +44 -0
- package/dist/errors/cli.d.cts.map +1 -0
- package/dist/errors/cli.d.ts +44 -0
- package/dist/errors/cli.d.ts.map +1 -0
- package/dist/errors/cli.js +52 -0
- package/dist/errors/cli.js.map +1 -0
- package/dist/errors/configuration.cjs +48 -0
- package/dist/errors/configuration.cjs.map +1 -0
- package/dist/errors/configuration.d.cts +41 -0
- package/dist/errors/configuration.d.cts.map +1 -0
- package/dist/errors/configuration.d.ts +41 -0
- package/dist/errors/configuration.d.ts.map +1 -0
- package/dist/errors/configuration.js +41 -0
- package/dist/errors/configuration.js.map +1 -0
- package/dist/errors/execution.cjs +65 -0
- package/dist/errors/execution.cjs.map +1 -0
- package/dist/errors/execution.d.cts +56 -0
- package/dist/errors/execution.d.cts.map +1 -0
- package/dist/errors/execution.d.ts +56 -0
- package/dist/errors/execution.d.ts.map +1 -0
- package/dist/errors/execution.js +56 -0
- package/dist/errors/execution.js.map +1 -0
- package/dist/errors/file.cjs +56 -0
- package/dist/errors/file.cjs.map +1 -0
- package/dist/errors/file.d.cts +48 -0
- package/dist/errors/file.d.cts.map +1 -0
- package/dist/errors/file.d.ts +48 -0
- package/dist/errors/file.d.ts.map +1 -0
- package/dist/errors/file.js +48 -0
- package/dist/errors/file.js.map +1 -0
- package/dist/errors/index.cjs +59 -0
- package/dist/errors/index.cjs.map +1 -0
- package/dist/errors/index.d.cts +16 -0
- package/dist/errors/index.d.cts.map +1 -0
- package/dist/errors/index.d.ts +16 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +24 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/errors/reporter.cjs +38 -0
- package/dist/errors/reporter.cjs.map +1 -0
- package/dist/errors/reporter.d.cts +32 -0
- package/dist/errors/reporter.d.cts.map +1 -0
- package/dist/errors/reporter.d.ts +32 -0
- package/dist/errors/reporter.d.ts.map +1 -0
- package/dist/errors/reporter.js +32 -0
- package/dist/errors/reporter.js.map +1 -0
- package/dist/errors/storage.cjs +55 -0
- package/dist/errors/storage.cjs.map +1 -0
- package/dist/errors/storage.d.cts +47 -0
- package/dist/errors/storage.d.cts.map +1 -0
- package/dist/errors/storage.d.ts +47 -0
- package/dist/errors/storage.d.ts.map +1 -0
- package/dist/errors/storage.js +47 -0
- package/dist/errors/storage.js.map +1 -0
- package/dist/errors/validation.cjs +38 -0
- package/dist/errors/validation.cjs.map +1 -0
- package/dist/errors/validation.d.cts +32 -0
- package/dist/errors/validation.d.cts.map +1 -0
- package/dist/errors/validation.d.ts +32 -0
- package/dist/errors/validation.d.ts.map +1 -0
- package/dist/errors/validation.js +32 -0
- package/dist/errors/validation.js.map +1 -0
- package/dist/formatters/history/base.cjs +9 -0
- package/dist/formatters/history/base.cjs.map +1 -0
- package/dist/formatters/history/base.d.cts +26 -0
- package/dist/formatters/history/base.d.cts.map +1 -0
- package/dist/formatters/history/base.d.ts +26 -0
- package/dist/formatters/history/base.d.ts.map +1 -0
- package/dist/formatters/history/base.js +8 -0
- package/dist/formatters/history/base.js.map +1 -0
- package/dist/formatters/history/compare.cjs +127 -0
- package/dist/formatters/history/compare.cjs.map +1 -0
- package/dist/formatters/history/compare.d.cts +21 -0
- package/dist/formatters/history/compare.d.cts.map +1 -0
- package/dist/formatters/history/compare.d.ts +21 -0
- package/dist/formatters/history/compare.d.ts.map +1 -0
- package/dist/formatters/history/compare.js +123 -0
- package/dist/formatters/history/compare.js.map +1 -0
- package/dist/formatters/history/list.cjs +74 -0
- package/dist/formatters/history/list.cjs.map +1 -0
- package/dist/formatters/history/list.d.cts +25 -0
- package/dist/formatters/history/list.d.cts.map +1 -0
- package/dist/formatters/history/list.d.ts +25 -0
- package/dist/formatters/history/list.d.ts.map +1 -0
- package/dist/formatters/history/list.js +70 -0
- package/dist/formatters/history/list.js.map +1 -0
- package/dist/formatters/history/show.cjs +98 -0
- package/dist/formatters/history/show.cjs.map +1 -0
- package/dist/formatters/history/show.d.cts +21 -0
- package/dist/formatters/history/show.d.cts.map +1 -0
- package/dist/formatters/history/show.d.ts +21 -0
- package/dist/formatters/history/show.d.ts.map +1 -0
- package/dist/formatters/history/show.js +94 -0
- package/dist/formatters/history/show.js.map +1 -0
- package/dist/formatters/history/trends.cjs +194 -0
- package/dist/formatters/history/trends.cjs.map +1 -0
- package/dist/formatters/history/trends.d.cts +22 -0
- package/dist/formatters/history/trends.d.cts.map +1 -0
- package/dist/formatters/history/trends.d.ts +22 -0
- package/dist/formatters/history/trends.d.ts.map +1 -0
- package/dist/formatters/history/trends.js +190 -0
- package/dist/formatters/history/trends.js.map +1 -0
- package/dist/formatters/history/visualization.cjs +79 -0
- package/dist/formatters/history/visualization.cjs.map +1 -0
- package/dist/formatters/history/visualization.d.cts +24 -0
- package/dist/formatters/history/visualization.d.cts.map +1 -0
- package/dist/formatters/history/visualization.d.ts +24 -0
- package/dist/formatters/history/visualization.d.ts.map +1 -0
- package/dist/formatters/history/visualization.js +74 -0
- package/dist/formatters/history/visualization.js.map +1 -0
- package/dist/index.cjs +17 -20
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +6 -6
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +6 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -11
- package/dist/index.js.map +1 -1
- package/dist/reporters/csv.cjs +5 -4
- package/dist/reporters/csv.cjs.map +1 -1
- package/dist/reporters/csv.d.cts +1 -1
- package/dist/reporters/csv.d.cts.map +1 -1
- package/dist/reporters/csv.d.ts +1 -1
- package/dist/reporters/csv.d.ts.map +1 -1
- package/dist/reporters/csv.js +4 -3
- package/dist/reporters/csv.js.map +1 -1
- package/dist/reporters/human.cjs +24 -62
- package/dist/reporters/human.cjs.map +1 -1
- package/dist/reporters/human.d.cts +1 -1
- package/dist/reporters/human.d.cts.map +1 -1
- package/dist/reporters/human.d.ts +1 -1
- package/dist/reporters/human.d.ts.map +1 -1
- package/dist/reporters/human.js +3 -41
- package/dist/reporters/human.js.map +1 -1
- package/dist/reporters/json.cjs +5 -4
- package/dist/reporters/json.cjs.map +1 -1
- package/dist/reporters/json.d.cts +1 -1
- package/dist/reporters/json.d.cts.map +1 -1
- package/dist/reporters/json.d.ts +1 -1
- package/dist/reporters/json.d.ts.map +1 -1
- package/dist/reporters/json.js +4 -3
- package/dist/reporters/json.js.map +1 -1
- package/dist/reporters/simple.cjs +3 -3
- package/dist/reporters/simple.cjs.map +1 -1
- package/dist/reporters/simple.d.cts +1 -1
- package/dist/reporters/simple.d.cts.map +1 -1
- package/dist/reporters/simple.d.ts +1 -1
- package/dist/reporters/simple.d.ts.map +1 -1
- package/dist/reporters/simple.js +2 -2
- package/dist/reporters/simple.js.map +1 -1
- package/dist/{config/manager.cjs → services/config-manager.cjs} +10 -4
- package/dist/services/config-manager.cjs.map +1 -0
- package/dist/{config/manager.d.cts → services/config-manager.d.cts} +1 -1
- package/dist/services/config-manager.d.cts.map +1 -0
- package/dist/{config/manager.d.ts → services/config-manager.d.ts} +1 -1
- package/dist/services/config-manager.d.ts.map +1 -0
- package/dist/{config/manager.js → services/config-manager.js} +10 -4
- package/dist/services/config-manager.js.map +1 -0
- package/dist/{core/loader.cjs → services/file-loader.cjs} +18 -7
- package/dist/services/file-loader.cjs.map +1 -0
- package/dist/{core/loader.d.cts → services/file-loader.d.cts} +1 -1
- package/dist/services/file-loader.d.cts.map +1 -0
- package/dist/{core/loader.d.ts → services/file-loader.d.ts} +1 -1
- package/dist/services/file-loader.d.ts.map +1 -0
- package/dist/{core/loader.js → services/file-loader.js} +18 -7
- package/dist/services/file-loader.js.map +1 -0
- package/dist/services/history/comparison.cjs +124 -0
- package/dist/services/history/comparison.cjs.map +1 -0
- package/dist/services/history/comparison.d.cts +18 -0
- package/dist/services/history/comparison.d.cts.map +1 -0
- package/dist/services/history/comparison.d.ts +18 -0
- package/dist/services/history/comparison.d.ts.map +1 -0
- package/dist/services/history/comparison.js +120 -0
- package/dist/services/history/comparison.js.map +1 -0
- package/dist/services/history/models.cjs +9 -0
- package/dist/services/history/models.cjs.map +1 -0
- package/dist/services/history/models.d.cts +139 -0
- package/dist/services/history/models.d.cts.map +1 -0
- package/dist/services/history/models.d.ts +139 -0
- package/dist/services/history/models.d.ts.map +1 -0
- package/dist/services/history/models.js +8 -0
- package/dist/services/history/models.js.map +1 -0
- package/dist/services/history/query.cjs +97 -0
- package/dist/services/history/query.cjs.map +1 -0
- package/dist/services/history/query.d.cts +38 -0
- package/dist/services/history/query.d.cts.map +1 -0
- package/dist/services/history/query.d.ts +38 -0
- package/dist/services/history/query.d.ts.map +1 -0
- package/dist/services/history/query.js +92 -0
- package/dist/services/history/query.js.map +1 -0
- package/dist/services/history/trend-analysis.cjs +187 -0
- package/dist/services/history/trend-analysis.cjs.map +1 -0
- package/dist/services/history/trend-analysis.d.cts +34 -0
- package/dist/services/history/trend-analysis.d.cts.map +1 -0
- package/dist/services/history/trend-analysis.d.ts +34 -0
- package/dist/services/history/trend-analysis.d.ts.map +1 -0
- package/dist/services/history/trend-analysis.js +179 -0
- package/dist/services/history/trend-analysis.js.map +1 -0
- package/dist/{storage/history.cjs → services/history-storage.cjs} +33 -12
- package/dist/services/history-storage.cjs.map +1 -0
- package/dist/{storage/history.d.cts → services/history-storage.d.cts} +1 -1
- package/dist/services/history-storage.d.cts.map +1 -0
- package/dist/{storage/history.d.ts → services/history-storage.d.ts} +1 -1
- package/dist/services/history-storage.d.ts.map +1 -0
- package/dist/{storage/history.js → services/history-storage.js} +33 -12
- package/dist/services/history-storage.js.map +1 -0
- package/dist/{progress/manager.cjs → services/progress-manager.cjs} +1 -1
- package/dist/services/progress-manager.cjs.map +1 -0
- package/dist/{progress/manager.d.cts → services/progress-manager.d.cts} +1 -1
- package/dist/services/progress-manager.d.cts.map +1 -0
- package/dist/{progress/manager.d.ts → services/progress-manager.d.ts} +1 -1
- package/dist/services/progress-manager.d.ts.map +1 -0
- package/dist/{progress/manager.js → services/progress-manager.js} +1 -1
- package/dist/services/progress-manager.js.map +1 -0
- package/dist/{reporters/registry.cjs → services/reporter-registry.cjs} +4 -3
- package/dist/services/reporter-registry.cjs.map +1 -0
- package/dist/{reporters/registry.d.cts → services/reporter-registry.d.cts} +1 -1
- package/dist/services/reporter-registry.d.cts.map +1 -0
- package/dist/{reporters/registry.d.ts → services/reporter-registry.d.ts} +1 -1
- package/dist/services/reporter-registry.d.ts.map +1 -0
- package/dist/{reporters/registry.js → services/reporter-registry.js} +4 -3
- package/dist/services/reporter-registry.js.map +1 -0
- package/dist/types/cli.d.cts +3 -0
- package/dist/types/cli.d.cts.map +1 -1
- package/dist/types/cli.d.ts +3 -0
- package/dist/types/cli.d.ts.map +1 -1
- package/dist/types/interfaces.d.cts +1 -34
- package/dist/types/interfaces.d.cts.map +1 -1
- package/dist/types/interfaces.d.ts +1 -34
- package/dist/types/interfaces.d.ts.map +1 -1
- package/dist/utils/ansi.cjs +61 -0
- package/dist/utils/ansi.cjs.map +1 -0
- package/dist/utils/ansi.d.cts +53 -0
- package/dist/utils/ansi.d.cts.map +1 -0
- package/dist/utils/ansi.d.ts +53 -0
- package/dist/utils/ansi.d.ts.map +1 -0
- package/dist/utils/ansi.js +57 -0
- package/dist/utils/ansi.js.map +1 -0
- package/package.json +10 -8
- package/src/bootstrap.ts +5 -7
- package/src/cli/commands/history.ts +195 -341
- package/src/cli/commands/init.ts +14 -4
- package/src/cli/commands/run.ts +52 -7
- package/src/cli/index.ts +393 -119
- package/src/constants.ts +60 -0
- package/src/core/engine.ts +40 -48
- package/src/core/engines/accurate-engine.ts +4 -1
- package/src/core/engines/tinybench-engine.ts +12 -5
- package/src/core/output-path-resolver.ts +38 -0
- package/src/errors/base.ts +152 -0
- package/src/errors/cli.ts +59 -0
- package/src/errors/configuration.ts +45 -0
- package/src/errors/execution.ts +62 -0
- package/src/errors/file.ts +53 -0
- package/src/errors/index.ts +71 -0
- package/src/errors/reporter.ts +35 -0
- package/src/errors/storage.ts +52 -0
- package/src/errors/validation.ts +35 -0
- package/src/formatters/history/base.ts +28 -0
- package/src/formatters/history/compare.ts +186 -0
- package/src/formatters/history/list.ts +101 -0
- package/src/formatters/history/show.ts +155 -0
- package/src/formatters/history/trends.ts +281 -0
- package/src/formatters/history/visualization.ts +93 -0
- package/src/index.ts +10 -14
- package/src/reporters/csv.ts +5 -3
- package/src/reporters/human.ts +3 -43
- package/src/reporters/json.ts +5 -3
- package/src/reporters/simple.ts +2 -2
- package/src/{config/manager.ts → services/config-manager.ts} +13 -3
- package/src/{core/loader.ts → services/file-loader.ts} +28 -6
- package/src/services/history/comparison.ts +130 -0
- package/src/services/history/models.ts +148 -0
- package/src/services/history/query.ts +116 -0
- package/src/services/history/trend-analysis.ts +238 -0
- package/src/{storage/history.ts → services/history-storage.ts} +58 -11
- package/src/{reporters/registry.ts → services/reporter-registry.ts} +9 -2
- package/src/types/cli.ts +3 -0
- package/src/types/interfaces.ts +0 -43
- package/src/utils/ansi.ts +59 -0
- package/dist/config/manager.cjs.map +0 -1
- package/dist/config/manager.d.cts.map +0 -1
- package/dist/config/manager.d.ts.map +0 -1
- package/dist/config/manager.js.map +0 -1
- package/dist/core/error-manager.cjs +0 -303
- package/dist/core/error-manager.cjs.map +0 -1
- package/dist/core/error-manager.d.cts +0 -77
- package/dist/core/error-manager.d.cts.map +0 -1
- package/dist/core/error-manager.d.ts +0 -77
- package/dist/core/error-manager.d.ts.map +0 -1
- package/dist/core/error-manager.js +0 -299
- package/dist/core/error-manager.js.map +0 -1
- package/dist/core/loader.cjs.map +0 -1
- package/dist/core/loader.d.cts.map +0 -1
- package/dist/core/loader.d.ts.map +0 -1
- package/dist/core/loader.js.map +0 -1
- package/dist/progress/manager.cjs.map +0 -1
- package/dist/progress/manager.d.cts.map +0 -1
- package/dist/progress/manager.d.ts.map +0 -1
- package/dist/progress/manager.js.map +0 -1
- package/dist/reporters/registry.cjs.map +0 -1
- package/dist/reporters/registry.d.cts.map +0 -1
- package/dist/reporters/registry.d.ts.map +0 -1
- package/dist/reporters/registry.js.map +0 -1
- package/dist/storage/history.cjs.map +0 -1
- package/dist/storage/history.d.cts.map +0 -1
- package/dist/storage/history.d.ts.map +0 -1
- package/dist/storage/history.js.map +0 -1
- package/src/core/error-manager.ts +0 -372
- /package/src/{progress/manager.ts → services/progress-manager.ts} +0 -0
package/src/cli/index.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
|
|
2
3
|
/**
|
|
3
4
|
* ModestBench CLI Entry Point
|
|
4
5
|
*
|
|
@@ -16,7 +17,6 @@ import { hideBin } from 'yargs/helpers';
|
|
|
16
17
|
import type {
|
|
17
18
|
BenchmarkEngine,
|
|
18
19
|
ConfigurationManager,
|
|
19
|
-
ErrorManager,
|
|
20
20
|
HistoryStorage,
|
|
21
21
|
ProgressManager,
|
|
22
22
|
ReporterRegistry,
|
|
@@ -24,6 +24,7 @@ import type {
|
|
|
24
24
|
|
|
25
25
|
import { bootstrap } from '../bootstrap.js';
|
|
26
26
|
import { AccurateEngine, TinybenchEngine } from '../core/engines/index.js';
|
|
27
|
+
import { isModestBenchError, UnknownError } from '../errors/index.js';
|
|
27
28
|
import {
|
|
28
29
|
CsvReporter,
|
|
29
30
|
HumanReporter,
|
|
@@ -31,7 +32,14 @@ import {
|
|
|
31
32
|
SimpleReporter,
|
|
32
33
|
} from '../reporters/index.js';
|
|
33
34
|
// Import commands
|
|
34
|
-
import {
|
|
35
|
+
import {
|
|
36
|
+
handleCleanCommand,
|
|
37
|
+
handleCompareCommand,
|
|
38
|
+
handleExportCommand,
|
|
39
|
+
handleListCommand,
|
|
40
|
+
handleShowCommand,
|
|
41
|
+
handleTrendsCommand,
|
|
42
|
+
} from './commands/history.js';
|
|
35
43
|
import { handleInitCommand as initCommand } from './commands/init.js';
|
|
36
44
|
import { handleRunCommand as runCommand } from './commands/run.js';
|
|
37
45
|
|
|
@@ -42,7 +50,6 @@ export interface CliContext {
|
|
|
42
50
|
readonly abortController: AbortController;
|
|
43
51
|
readonly configManager: ConfigurationManager;
|
|
44
52
|
readonly engine: BenchmarkEngine;
|
|
45
|
-
readonly errorManager: ErrorManager;
|
|
46
53
|
readonly historyStorage: HistoryStorage;
|
|
47
54
|
readonly options: GlobalOptions;
|
|
48
55
|
readonly progressManager: ProgressManager;
|
|
@@ -104,6 +111,7 @@ export const main = async (
|
|
|
104
111
|
|
|
105
112
|
// Configure global options and commands
|
|
106
113
|
await cli
|
|
114
|
+
.scriptName('modestbench')
|
|
107
115
|
.option('config', {
|
|
108
116
|
alias: 'c',
|
|
109
117
|
description: 'Path to configuration file',
|
|
@@ -137,6 +145,7 @@ export const main = async (
|
|
|
137
145
|
})
|
|
138
146
|
.option('cwd', {
|
|
139
147
|
default: process.cwd(),
|
|
148
|
+
defaultDescription: '.',
|
|
140
149
|
description: 'Working directory',
|
|
141
150
|
global: true,
|
|
142
151
|
type: 'string',
|
|
@@ -187,6 +196,13 @@ export const main = async (
|
|
|
187
196
|
description: 'Output directory for reports',
|
|
188
197
|
type: 'string',
|
|
189
198
|
})
|
|
199
|
+
.option('output-file', {
|
|
200
|
+
alias: 'of',
|
|
201
|
+
description:
|
|
202
|
+
'Custom filename for reporter output (use with single reporter only)',
|
|
203
|
+
requiresArg: true,
|
|
204
|
+
type: 'string',
|
|
205
|
+
})
|
|
190
206
|
.option('iterations', {
|
|
191
207
|
alias: 'i',
|
|
192
208
|
description: 'Number of iterations per benchmark',
|
|
@@ -301,6 +317,7 @@ export const main = async (
|
|
|
301
317
|
json: argv.json,
|
|
302
318
|
noColor: argv.noColor,
|
|
303
319
|
outputDir: argv.output,
|
|
320
|
+
outputFile: argv['output-file'],
|
|
304
321
|
pattern: argv.pattern,
|
|
305
322
|
progress: argv.progress,
|
|
306
323
|
quiet: argv.quiet,
|
|
@@ -314,111 +331,349 @@ export const main = async (
|
|
|
314
331
|
process.exit(exitCode);
|
|
315
332
|
},
|
|
316
333
|
)
|
|
317
|
-
.command(
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
'
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
'
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
}
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
334
|
+
.command('history', 'View and manage benchmark history', (yargs) => {
|
|
335
|
+
return yargs
|
|
336
|
+
.command(
|
|
337
|
+
'list',
|
|
338
|
+
'List recent benchmark runs',
|
|
339
|
+
(yargs) => {
|
|
340
|
+
return yargs
|
|
341
|
+
.option('since', {
|
|
342
|
+
description:
|
|
343
|
+
'Show runs since date (ISO 8601 or relative like "1 week ago")',
|
|
344
|
+
type: 'string',
|
|
345
|
+
})
|
|
346
|
+
.option('until', {
|
|
347
|
+
description:
|
|
348
|
+
'Show runs until date (ISO 8601 or relative like "1 day ago")',
|
|
349
|
+
type: 'string',
|
|
350
|
+
})
|
|
351
|
+
.option('pattern', {
|
|
352
|
+
description: 'Filter by benchmark name pattern',
|
|
353
|
+
type: 'string',
|
|
354
|
+
})
|
|
355
|
+
.option('tags', {
|
|
356
|
+
description: 'Filter by tags (comma-separated)',
|
|
357
|
+
type: 'array',
|
|
358
|
+
})
|
|
359
|
+
.option('limit', {
|
|
360
|
+
default: 10,
|
|
361
|
+
description: 'Maximum number of results',
|
|
362
|
+
type: 'number',
|
|
363
|
+
})
|
|
364
|
+
.option('format', {
|
|
365
|
+
choices: ['human', 'json', 'csv'] as const,
|
|
366
|
+
default: 'human' as const,
|
|
367
|
+
description: 'Output format',
|
|
368
|
+
type: 'string',
|
|
369
|
+
})
|
|
370
|
+
.example([
|
|
371
|
+
['$0 history list', 'List recent benchmark runs'],
|
|
372
|
+
[
|
|
373
|
+
'$0 history list --since "1 week ago"',
|
|
374
|
+
'List runs from last week',
|
|
375
|
+
],
|
|
376
|
+
['$0 history list --limit 20', 'List 20 most recent runs'],
|
|
377
|
+
['$0 history list --format json', 'List runs in JSON format'],
|
|
378
|
+
]);
|
|
379
|
+
},
|
|
380
|
+
async (argv) => {
|
|
381
|
+
const context = await createCliContext(argv, abortController!);
|
|
382
|
+
const exitCode = await handleListCommand(context, {
|
|
383
|
+
cwd: argv.cwd,
|
|
384
|
+
format: argv.format,
|
|
385
|
+
limit: argv.limit,
|
|
386
|
+
pattern: argv.pattern,
|
|
387
|
+
quiet: Boolean(argv.quiet),
|
|
388
|
+
since: argv.since,
|
|
389
|
+
tags: argv.tags as string[] | undefined,
|
|
390
|
+
until: argv.until,
|
|
391
|
+
verbose: argv.verbose,
|
|
392
|
+
});
|
|
393
|
+
process.exit(exitCode);
|
|
394
|
+
},
|
|
395
|
+
)
|
|
396
|
+
.command(
|
|
397
|
+
'show <run-id>',
|
|
398
|
+
'Show detailed results for a specific run',
|
|
399
|
+
(yargs) => {
|
|
400
|
+
return yargs
|
|
401
|
+
.positional('run-id', {
|
|
402
|
+
describe: 'ID of the benchmark run to show',
|
|
403
|
+
type: 'string',
|
|
404
|
+
})
|
|
405
|
+
.option('format', {
|
|
406
|
+
choices: ['human', 'json', 'csv'] as const,
|
|
407
|
+
default: 'human' as const,
|
|
408
|
+
description: 'Output format',
|
|
409
|
+
type: 'string',
|
|
410
|
+
})
|
|
411
|
+
.example([
|
|
412
|
+
[
|
|
413
|
+
'$0 history show abc123',
|
|
414
|
+
'Show detailed results for run abc123',
|
|
415
|
+
],
|
|
416
|
+
[
|
|
417
|
+
'$0 history show abc123 --format json',
|
|
418
|
+
'Show run in JSON format',
|
|
419
|
+
],
|
|
420
|
+
]);
|
|
421
|
+
},
|
|
422
|
+
async (argv) => {
|
|
423
|
+
const context = await createCliContext(argv, abortController!);
|
|
424
|
+
const exitCode = await handleShowCommand(context, {
|
|
425
|
+
cwd: argv.cwd,
|
|
426
|
+
format: argv.format,
|
|
427
|
+
quiet: Boolean(argv.quiet),
|
|
428
|
+
runId: String(argv['run-id']),
|
|
429
|
+
verbose: argv.verbose,
|
|
430
|
+
});
|
|
431
|
+
process.exit(exitCode);
|
|
432
|
+
},
|
|
433
|
+
)
|
|
434
|
+
.command(
|
|
435
|
+
'compare <run-id1> <run-id2>',
|
|
436
|
+
'Compare two benchmark runs',
|
|
437
|
+
(yargs) => {
|
|
438
|
+
return yargs
|
|
439
|
+
.positional('run-id1', {
|
|
440
|
+
describe: 'ID of the first benchmark run',
|
|
441
|
+
type: 'string',
|
|
442
|
+
})
|
|
443
|
+
.positional('run-id2', {
|
|
444
|
+
describe: 'ID of the second benchmark run',
|
|
445
|
+
type: 'string',
|
|
446
|
+
})
|
|
447
|
+
.option('format', {
|
|
448
|
+
choices: ['human', 'json'] as const,
|
|
449
|
+
default: 'human' as const,
|
|
450
|
+
description: 'Output format',
|
|
451
|
+
type: 'string',
|
|
452
|
+
})
|
|
453
|
+
.example([
|
|
454
|
+
['$0 history compare abc123 def456', 'Compare two runs'],
|
|
455
|
+
[
|
|
456
|
+
'$0 history compare abc123 def456 --format json',
|
|
457
|
+
'Compare in JSON format',
|
|
458
|
+
],
|
|
459
|
+
]);
|
|
460
|
+
},
|
|
461
|
+
async (argv) => {
|
|
462
|
+
const context = await createCliContext(argv, abortController!);
|
|
463
|
+
const exitCode = await handleCompareCommand(context, {
|
|
464
|
+
cwd: argv.cwd,
|
|
465
|
+
format: argv.format,
|
|
466
|
+
quiet: Boolean(argv.quiet),
|
|
467
|
+
runId1: String(argv['run-id1']),
|
|
468
|
+
runId2: String(argv['run-id2']),
|
|
469
|
+
verbose: argv.verbose,
|
|
470
|
+
});
|
|
471
|
+
process.exit(exitCode);
|
|
472
|
+
},
|
|
473
|
+
)
|
|
474
|
+
.command(
|
|
475
|
+
'trends [pattern]',
|
|
476
|
+
'Show performance trends over time',
|
|
477
|
+
(yargs) => {
|
|
478
|
+
return yargs
|
|
479
|
+
.positional('pattern', {
|
|
480
|
+
describe: 'Filter by benchmark name pattern',
|
|
481
|
+
type: 'string',
|
|
482
|
+
})
|
|
483
|
+
.option('since', {
|
|
484
|
+
description:
|
|
485
|
+
'Show trends since date (ISO 8601 or relative like "1 week ago")',
|
|
486
|
+
type: 'string',
|
|
487
|
+
})
|
|
488
|
+
.option('until', {
|
|
489
|
+
description:
|
|
490
|
+
'Show trends until date (ISO 8601 or relative like "1 day ago")',
|
|
491
|
+
type: 'string',
|
|
492
|
+
})
|
|
493
|
+
.option('tags', {
|
|
494
|
+
description: 'Filter by tags (comma-separated)',
|
|
495
|
+
type: 'array',
|
|
496
|
+
})
|
|
497
|
+
.option('limit', {
|
|
498
|
+
description: 'Maximum number of runs to analyze',
|
|
499
|
+
type: 'number',
|
|
500
|
+
})
|
|
501
|
+
.option('all', {
|
|
502
|
+
alias: 'a',
|
|
503
|
+
default: false,
|
|
504
|
+
description: 'Analyze all runs (ignore limit)',
|
|
505
|
+
type: 'boolean',
|
|
506
|
+
})
|
|
507
|
+
.option('format', {
|
|
508
|
+
choices: ['human', 'json'] as const,
|
|
509
|
+
default: 'human' as const,
|
|
510
|
+
description: 'Output format',
|
|
511
|
+
type: 'string',
|
|
512
|
+
})
|
|
513
|
+
.example([
|
|
514
|
+
[
|
|
515
|
+
'$0 history trends',
|
|
516
|
+
'Show performance trends for all benchmarks',
|
|
517
|
+
],
|
|
518
|
+
[
|
|
519
|
+
'$0 history trends --since "1 month ago"',
|
|
520
|
+
'Show trends from last month',
|
|
521
|
+
],
|
|
522
|
+
[
|
|
523
|
+
'$0 history trends "array-*"',
|
|
524
|
+
'Show trends for array benchmarks',
|
|
525
|
+
],
|
|
526
|
+
[
|
|
527
|
+
'$0 history trends --format json',
|
|
528
|
+
'Output trends in JSON format',
|
|
529
|
+
],
|
|
530
|
+
]);
|
|
531
|
+
},
|
|
532
|
+
async (argv) => {
|
|
533
|
+
const context = await createCliContext(argv, abortController!);
|
|
534
|
+
const exitCode = await handleTrendsCommand(context, {
|
|
535
|
+
all: Boolean(argv.all),
|
|
536
|
+
cwd: argv.cwd,
|
|
537
|
+
format: argv.format,
|
|
538
|
+
limit: argv.limit,
|
|
539
|
+
pattern: argv.pattern,
|
|
540
|
+
quiet: Boolean(argv.quiet),
|
|
541
|
+
since: argv.since,
|
|
542
|
+
tags: argv.tags as string[] | undefined,
|
|
543
|
+
until: argv.until,
|
|
544
|
+
verbose: argv.verbose,
|
|
545
|
+
});
|
|
546
|
+
process.exit(exitCode);
|
|
547
|
+
},
|
|
548
|
+
)
|
|
549
|
+
.command(
|
|
550
|
+
'clean',
|
|
551
|
+
'Clean up old benchmark history',
|
|
552
|
+
(yargs) => {
|
|
553
|
+
return yargs
|
|
554
|
+
.option('max-age', {
|
|
555
|
+
description: 'Remove runs older than this many days',
|
|
556
|
+
type: 'number',
|
|
557
|
+
})
|
|
558
|
+
.option('max-runs', {
|
|
559
|
+
description: 'Keep only this many most recent runs',
|
|
560
|
+
type: 'number',
|
|
561
|
+
})
|
|
562
|
+
.option('max-size', {
|
|
563
|
+
description: 'Keep history under this size in bytes',
|
|
564
|
+
type: 'number',
|
|
565
|
+
})
|
|
566
|
+
.option('confirm', {
|
|
567
|
+
default: false,
|
|
568
|
+
description: 'Confirm cleanup without prompting',
|
|
569
|
+
type: 'boolean',
|
|
570
|
+
})
|
|
571
|
+
.check((argv) => {
|
|
572
|
+
if (
|
|
573
|
+
!argv['max-age'] &&
|
|
574
|
+
!argv['max-runs'] &&
|
|
575
|
+
!argv['max-size']
|
|
576
|
+
) {
|
|
577
|
+
throw new Error(
|
|
578
|
+
'At least one cleanup criterion must be specified (--max-age, --max-runs, or --max-size)',
|
|
579
|
+
);
|
|
580
|
+
}
|
|
581
|
+
return true;
|
|
582
|
+
})
|
|
583
|
+
.example([
|
|
584
|
+
[
|
|
585
|
+
'$0 history clean --max-runs 50 --confirm',
|
|
586
|
+
'Keep only latest 50 runs',
|
|
587
|
+
],
|
|
588
|
+
[
|
|
589
|
+
'$0 history clean --max-age 30',
|
|
590
|
+
'Preview removing runs older than 30 days',
|
|
591
|
+
],
|
|
592
|
+
[
|
|
593
|
+
'$0 history clean --max-size 10485760',
|
|
594
|
+
'Keep history under 10MB',
|
|
595
|
+
],
|
|
596
|
+
]);
|
|
597
|
+
},
|
|
598
|
+
async (argv) => {
|
|
599
|
+
const context = await createCliContext(argv, abortController!);
|
|
600
|
+
const exitCode = await handleCleanCommand(context, {
|
|
601
|
+
confirm: argv.confirm,
|
|
602
|
+
cwd: argv.cwd,
|
|
603
|
+
maxAge: argv['max-age'],
|
|
604
|
+
maxRuns: argv['max-runs'],
|
|
605
|
+
maxSize: argv['max-size'],
|
|
606
|
+
quiet: Boolean(argv.quiet),
|
|
607
|
+
verbose: argv.verbose,
|
|
608
|
+
});
|
|
609
|
+
process.exit(exitCode);
|
|
610
|
+
},
|
|
611
|
+
)
|
|
612
|
+
.command(
|
|
613
|
+
'export',
|
|
614
|
+
'Export benchmark history to a file',
|
|
615
|
+
(yargs) => {
|
|
616
|
+
return yargs
|
|
617
|
+
.option('format', {
|
|
618
|
+
choices: ['json', 'csv'] as const,
|
|
619
|
+
default: 'json' as const,
|
|
620
|
+
description: 'Export format',
|
|
621
|
+
type: 'string',
|
|
622
|
+
})
|
|
623
|
+
.option('output', {
|
|
624
|
+
alias: 'o',
|
|
625
|
+
demandOption: true,
|
|
626
|
+
description: 'Output file path',
|
|
627
|
+
type: 'string',
|
|
628
|
+
})
|
|
629
|
+
.option('since', {
|
|
630
|
+
description: 'Export runs since date',
|
|
631
|
+
type: 'string',
|
|
632
|
+
})
|
|
633
|
+
.option('until', {
|
|
634
|
+
description: 'Export runs until date',
|
|
635
|
+
type: 'string',
|
|
636
|
+
})
|
|
637
|
+
.example([
|
|
638
|
+
[
|
|
639
|
+
'$0 history export -o history.json',
|
|
640
|
+
'Export all history to JSON',
|
|
641
|
+
],
|
|
642
|
+
[
|
|
643
|
+
'$0 history export -o history.csv --format csv',
|
|
644
|
+
'Export to CSV',
|
|
645
|
+
],
|
|
646
|
+
[
|
|
647
|
+
'$0 history export -o recent.json --since "1 week ago"',
|
|
648
|
+
'Export recent runs',
|
|
649
|
+
],
|
|
650
|
+
]);
|
|
651
|
+
},
|
|
652
|
+
async (argv) => {
|
|
653
|
+
const context = await createCliContext(argv, abortController!);
|
|
654
|
+
const exitCode = await handleExportCommand(context, {
|
|
655
|
+
cwd: argv.cwd,
|
|
656
|
+
format: argv.format,
|
|
657
|
+
outputPath: argv.output,
|
|
658
|
+
quiet: Boolean(argv.quiet),
|
|
659
|
+
since: argv.since,
|
|
660
|
+
until: argv.until,
|
|
661
|
+
verbose: argv.verbose,
|
|
662
|
+
});
|
|
663
|
+
process.exit(exitCode);
|
|
664
|
+
},
|
|
665
|
+
)
|
|
666
|
+
.demandCommand(1, 'You must specify a history subcommand')
|
|
667
|
+
.strict()
|
|
668
|
+
.example([
|
|
669
|
+
['$0 history list', 'List recent benchmark runs'],
|
|
670
|
+
['$0 history show <run-id>', 'Show detailed results'],
|
|
671
|
+
['$0 history compare <run-id1> <run-id2>', 'Compare two runs'],
|
|
672
|
+
['$0 history trends', 'Show performance trends'],
|
|
673
|
+
['$0 history clean --max-runs 50', 'Keep only latest 50 runs'],
|
|
674
|
+
['$0 history export -o data.json', 'Export history'],
|
|
675
|
+
]);
|
|
676
|
+
})
|
|
422
677
|
.command(
|
|
423
678
|
'init [type]',
|
|
424
679
|
'Initialize a new benchmark project',
|
|
@@ -571,7 +826,6 @@ const createCliContext = async (
|
|
|
571
826
|
abortController,
|
|
572
827
|
configManager: engine.configManager,
|
|
573
828
|
engine,
|
|
574
|
-
errorManager: engine.errorManager,
|
|
575
829
|
historyStorage: engine.historyStorage,
|
|
576
830
|
options,
|
|
577
831
|
progressManager: engine.progressManager,
|
|
@@ -596,9 +850,7 @@ const setupSignalHandlers = (abortController: AbortController): void => {
|
|
|
596
850
|
if (abortRequested) {
|
|
597
851
|
// Second signal, force exit
|
|
598
852
|
console.log(`\nReceived ${signal} again, forcing exit...`);
|
|
599
|
-
process.exit(
|
|
600
|
-
128 + (signal === 'SIGINT' ? 2 : signal === 'SIGQUIT' ? 3 : 15),
|
|
601
|
-
);
|
|
853
|
+
process.exit(computeExitCode(signal));
|
|
602
854
|
}
|
|
603
855
|
|
|
604
856
|
console.log(`\nReceived ${signal}, aborting benchmarks...`);
|
|
@@ -608,9 +860,7 @@ const setupSignalHandlers = (abortController: AbortController): void => {
|
|
|
608
860
|
// Give a short grace period for cleanup, then exit
|
|
609
861
|
setTimeout(() => {
|
|
610
862
|
console.log('\nBenchmark aborted.');
|
|
611
|
-
process.exit(
|
|
612
|
-
128 + (signal === 'SIGINT' ? 2 : signal === 'SIGQUIT' ? 3 : 15),
|
|
613
|
-
);
|
|
863
|
+
process.exit(computeExitCode(signal));
|
|
614
864
|
}, 100);
|
|
615
865
|
};
|
|
616
866
|
|
|
@@ -618,13 +868,27 @@ const setupSignalHandlers = (abortController: AbortController): void => {
|
|
|
618
868
|
process.on('SIGQUIT', () => handleSignal('SIGQUIT'));
|
|
619
869
|
process.on('SIGTERM', () => handleSignal('SIGTERM'));
|
|
620
870
|
|
|
621
|
-
process.
|
|
622
|
-
|
|
871
|
+
process.once('uncaughtException', (error) => {
|
|
872
|
+
// Wrap non-ModestBench errors with UnknownError
|
|
873
|
+
const wrappedError: Error = isModestBenchError(error)
|
|
874
|
+
? error
|
|
875
|
+
: new UnknownError(
|
|
876
|
+
error instanceof Error ? error.message : String(error),
|
|
877
|
+
{ cause: error },
|
|
878
|
+
);
|
|
879
|
+
console.error(wrappedError.toString());
|
|
623
880
|
process.exit(ExitCodes.RUNTIME_ERROR);
|
|
624
881
|
});
|
|
625
882
|
|
|
626
|
-
process.
|
|
627
|
-
|
|
883
|
+
process.once('unhandledRejection', (reason) => {
|
|
884
|
+
// Wrap non-ModestBench errors with UnknownError
|
|
885
|
+
const wrappedError: Error = isModestBenchError(reason)
|
|
886
|
+
? (reason as Error)
|
|
887
|
+
: new UnknownError(
|
|
888
|
+
reason instanceof Error ? reason.message : String(reason),
|
|
889
|
+
{ cause: reason },
|
|
890
|
+
);
|
|
891
|
+
console.error(wrappedError.toString());
|
|
628
892
|
process.exit(ExitCodes.RUNTIME_ERROR);
|
|
629
893
|
});
|
|
630
894
|
};
|
|
@@ -647,3 +911,13 @@ try {
|
|
|
647
911
|
cli();
|
|
648
912
|
}
|
|
649
913
|
}
|
|
914
|
+
|
|
915
|
+
/**
|
|
916
|
+
* Compute the exit code based on the signal
|
|
917
|
+
*
|
|
918
|
+
* @param signal - The signal that caused the exit
|
|
919
|
+
* @returns The exit code
|
|
920
|
+
*/
|
|
921
|
+
const computeExitCode = (signal: string): number => {
|
|
922
|
+
return 128 + (signal === 'SIGINT' ? 2 : signal === 'SIGQUIT' ? 3 : 15);
|
|
923
|
+
};
|
package/src/constants.ts
CHANGED
|
@@ -19,3 +19,63 @@ export const BENCHMARK_FILE_PATTERN = `.bench.{${Array.from(
|
|
|
19
19
|
)
|
|
20
20
|
.map((ext) => ext.slice(1))
|
|
21
21
|
.join(',')}}`;
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Error codes for all ModestBench errors
|
|
25
|
+
*
|
|
26
|
+
* Use these constants to check error types instead of instanceof checks.
|
|
27
|
+
*/
|
|
28
|
+
export const ErrorCodes = {
|
|
29
|
+
//#region cli-errors
|
|
30
|
+
CLI_INVALID_ARGUMENT: 'ERR_MB_CLI_INVALID_ARGUMENT',
|
|
31
|
+
CLI_INVALID_DATE_FORMAT: 'ERR_MB_CLI_INVALID_DATE_FORMAT',
|
|
32
|
+
//#endregion
|
|
33
|
+
|
|
34
|
+
//#region config-errors
|
|
35
|
+
CONFIG_LOAD_FAILED: 'ERR_MB_CONFIG_LOAD_FAILED',
|
|
36
|
+
CONFIG_NOT_FOUND: 'ERR_MB_CONFIG_NOT_FOUND',
|
|
37
|
+
CONFIG_UNSUPPORTED_FORMAT: 'ERR_MB_CONFIG_UNSUPPORTED_FORMAT',
|
|
38
|
+
CONFIG_VALIDATION_FAILED: 'ERR_MB_CONFIG_VALIDATION_FAILED',
|
|
39
|
+
//#endregion
|
|
40
|
+
|
|
41
|
+
//#region execution-errors
|
|
42
|
+
EXECUTION_BENCHMARK_FAILED: 'ERR_MB_EXECUTION_BENCHMARK_FAILED',
|
|
43
|
+
EXECUTION_SETUP_FAILED: 'ERR_MB_EXECUTION_SETUP_FAILED',
|
|
44
|
+
EXECUTION_TASK_FAILED: 'ERR_MB_EXECUTION_TASK_FAILED',
|
|
45
|
+
EXECUTION_TEARDOWN_FAILED: 'ERR_MB_EXECUTION_TEARDOWN_FAILED',
|
|
46
|
+
EXECUTION_TIMEOUT: 'ERR_MB_EXECUTION_TIMEOUT',
|
|
47
|
+
EXECUTION_TOO_FAST: 'ERR_MB_EXECUTION_TOO_FAST',
|
|
48
|
+
//#endregion
|
|
49
|
+
|
|
50
|
+
//#region file-errors
|
|
51
|
+
FILE_DISCOVERY_FAILED: 'ERR_MB_FILE_DISCOVERY_FAILED',
|
|
52
|
+
FILE_LOAD_FAILED: 'ERR_MB_FILE_LOAD_FAILED',
|
|
53
|
+
FILE_NOT_FOUND: 'ERR_MB_FILE_NOT_FOUND',
|
|
54
|
+
FILE_PERMISSION_DENIED: 'ERR_MB_FILE_PERMISSION_DENIED',
|
|
55
|
+
FILE_UNSUPPORTED_EXTENSION: 'ERR_MB_FILE_UNSUPPORTED_EXTENSION',
|
|
56
|
+
//#endregion
|
|
57
|
+
|
|
58
|
+
//#region reporter-errors
|
|
59
|
+
REPORTER_ALREADY_REGISTERED: 'ERR_MB_REPORTER_ALREADY_REGISTERED',
|
|
60
|
+
REPORTER_OUTPUT_FAILED: 'ERR_MB_REPORTER_OUTPUT_FAILED',
|
|
61
|
+
REPORTER_UNKNOWN: 'ERR_MB_REPORTER_UNKNOWN',
|
|
62
|
+
//#endregion
|
|
63
|
+
|
|
64
|
+
//#region storage-errors
|
|
65
|
+
STORAGE_CORRUPTION: 'ERR_MB_STORAGE_CORRUPTION',
|
|
66
|
+
STORAGE_EXPORT_UNSUPPORTED: 'ERR_MB_STORAGE_EXPORT_UNSUPPORTED',
|
|
67
|
+
STORAGE_FAILED: 'ERR_MB_STORAGE_FAILED',
|
|
68
|
+
STORAGE_INDEX_CORRUPTION: 'ERR_MB_STORAGE_INDEX_CORRUPTION',
|
|
69
|
+
STORAGE_INSUFFICIENT_SPACE: 'ERR_MB_STORAGE_INSUFFICIENT_SPACE',
|
|
70
|
+
//#endregion
|
|
71
|
+
|
|
72
|
+
//#region misc-errors
|
|
73
|
+
UNKNOWN: 'ERR_MB_UNKNOWN',
|
|
74
|
+
//#endregion
|
|
75
|
+
|
|
76
|
+
//#region validation-errors
|
|
77
|
+
VALIDATION_SCHEMA_FAILED: 'ERR_MB_VALIDATION_SCHEMA_FAILED',
|
|
78
|
+
VALIDATION_STRUCTURE_INVALID: 'ERR_MB_VALIDATION_STRUCTURE_INVALID',
|
|
79
|
+
VALIDATION_TYPE_FAILED: 'ERR_MB_VALIDATION_TYPE_FAILED',
|
|
80
|
+
//#endregion
|
|
81
|
+
} as const;
|