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/commands/init.ts
CHANGED
|
@@ -17,6 +17,11 @@ import { createInterface } from 'node:readline';
|
|
|
17
17
|
|
|
18
18
|
import type { CliContext } from '../index.js';
|
|
19
19
|
|
|
20
|
+
import {
|
|
21
|
+
InvalidArgumentError,
|
|
22
|
+
UnsupportedConfigFormatError,
|
|
23
|
+
} from '../../errors/index.js';
|
|
24
|
+
|
|
20
25
|
/**
|
|
21
26
|
* Init command options interface
|
|
22
27
|
*/
|
|
@@ -566,7 +571,9 @@ export default config;
|
|
|
566
571
|
break;
|
|
567
572
|
|
|
568
573
|
default:
|
|
569
|
-
throw new
|
|
574
|
+
throw new UnsupportedConfigFormatError(
|
|
575
|
+
`Unsupported config format: ${options.configType}`,
|
|
576
|
+
);
|
|
570
577
|
}
|
|
571
578
|
|
|
572
579
|
try {
|
|
@@ -575,8 +582,9 @@ export default config;
|
|
|
575
582
|
console.log(` ✓ ${filename}`);
|
|
576
583
|
}
|
|
577
584
|
} catch (error) {
|
|
578
|
-
throw new
|
|
585
|
+
throw new InvalidArgumentError(
|
|
579
586
|
`Failed to create config file: ${error instanceof Error ? error.message : String(error)}`,
|
|
587
|
+
{ cause: error },
|
|
580
588
|
);
|
|
581
589
|
}
|
|
582
590
|
};
|
|
@@ -600,8 +608,9 @@ const createDirectories = async (
|
|
|
600
608
|
console.log(` ✓ ${dir}/`);
|
|
601
609
|
}
|
|
602
610
|
} catch (error) {
|
|
603
|
-
throw new
|
|
611
|
+
throw new InvalidArgumentError(
|
|
604
612
|
`Failed to create directory ${dir}: ${error instanceof Error ? error.message : String(error)}`,
|
|
613
|
+
{ cause: error },
|
|
605
614
|
);
|
|
606
615
|
}
|
|
607
616
|
}
|
|
@@ -626,8 +635,9 @@ const createExampleBenchmarks = async (options: InitOptions): Promise<void> => {
|
|
|
626
635
|
console.log(` ✓ ${example.filename}`);
|
|
627
636
|
}
|
|
628
637
|
} catch (error) {
|
|
629
|
-
throw new
|
|
638
|
+
throw new InvalidArgumentError(
|
|
630
639
|
`Failed to create example ${name}: ${error instanceof Error ? error.message : String(error)}`,
|
|
640
|
+
{ cause: error },
|
|
631
641
|
);
|
|
632
642
|
}
|
|
633
643
|
}
|
package/src/cli/commands/run.ts
CHANGED
|
@@ -10,6 +10,13 @@ import { resolve } from 'node:path';
|
|
|
10
10
|
import type { BenchmarkRun } from '../../types/index.js';
|
|
11
11
|
import type { CliContext } from '../index.js';
|
|
12
12
|
|
|
13
|
+
import { ErrorCodes } from '../../constants.js';
|
|
14
|
+
import { resolveOutputPath } from '../../core/output-path-resolver.js';
|
|
15
|
+
import {
|
|
16
|
+
InvalidArgumentError,
|
|
17
|
+
type ModestBenchError,
|
|
18
|
+
UnknownReporterError,
|
|
19
|
+
} from '../../errors/index.js';
|
|
13
20
|
import { ExitCodes } from '../../types/cli.js';
|
|
14
21
|
|
|
15
22
|
/**
|
|
@@ -26,6 +33,7 @@ interface RunOptions {
|
|
|
26
33
|
json?: boolean | undefined;
|
|
27
34
|
noColor?: boolean | undefined;
|
|
28
35
|
outputDir?: string | undefined;
|
|
36
|
+
outputFile?: string | undefined;
|
|
29
37
|
pattern: string[];
|
|
30
38
|
progress?: boolean | undefined;
|
|
31
39
|
quiet?: boolean | undefined;
|
|
@@ -55,6 +63,18 @@ export const handleRunCommand = async (
|
|
|
55
63
|
const showCliMessages = verbose && !options.quiet;
|
|
56
64
|
|
|
57
65
|
try {
|
|
66
|
+
// Validate --output-file usage
|
|
67
|
+
if (
|
|
68
|
+
options.outputFile &&
|
|
69
|
+
options.reporters &&
|
|
70
|
+
options.reporters.length > 1
|
|
71
|
+
) {
|
|
72
|
+
throw new InvalidArgumentError(
|
|
73
|
+
'--output-file can only be used with a single reporter. ' +
|
|
74
|
+
'Use --output <dir> for multiple reporters.',
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
|
|
58
78
|
// Step 1: Load and merge configuration
|
|
59
79
|
if (showCliMessages) {
|
|
60
80
|
console.error('Loading configuration...');
|
|
@@ -73,6 +93,7 @@ export const handleRunCommand = async (
|
|
|
73
93
|
showCliMessages,
|
|
74
94
|
options.quiet ?? false,
|
|
75
95
|
options.outputDir,
|
|
96
|
+
options.outputFile,
|
|
76
97
|
options.progress,
|
|
77
98
|
);
|
|
78
99
|
|
|
@@ -155,8 +176,11 @@ export const handleRunCommand = async (
|
|
|
155
176
|
|
|
156
177
|
return handleResults(executionResult, options, shouldBeQuiet);
|
|
157
178
|
} catch (error) {
|
|
158
|
-
// Re-throw
|
|
159
|
-
if (error
|
|
179
|
+
// Re-throw CLI errors so yargs fail handler can show help
|
|
180
|
+
if ((error as ModestBenchError).code === ErrorCodes.FILE_DISCOVERY_FAILED) {
|
|
181
|
+
throw error;
|
|
182
|
+
}
|
|
183
|
+
if ((error as ModestBenchError).code === ErrorCodes.CLI_INVALID_ARGUMENT) {
|
|
160
184
|
throw error;
|
|
161
185
|
}
|
|
162
186
|
|
|
@@ -270,8 +294,13 @@ const loadConfiguration = async (context: CliContext, options: RunOptions) => {
|
|
|
270
294
|
|
|
271
295
|
return config;
|
|
272
296
|
} catch (error) {
|
|
273
|
-
throw
|
|
297
|
+
// Re-throw our custom errors
|
|
298
|
+
if ((error as ModestBenchError).code === ErrorCodes.CONFIG_LOAD_FAILED) {
|
|
299
|
+
throw error;
|
|
300
|
+
}
|
|
301
|
+
throw new InvalidArgumentError(
|
|
274
302
|
`Configuration error: ${error instanceof Error ? error.message : String(error)}`,
|
|
303
|
+
{ cause: error },
|
|
275
304
|
);
|
|
276
305
|
}
|
|
277
306
|
};
|
|
@@ -287,6 +316,7 @@ const setupReporters = async (
|
|
|
287
316
|
showCliMessages: boolean,
|
|
288
317
|
explicitQuiet: boolean,
|
|
289
318
|
explicitOutputDir?: string,
|
|
319
|
+
explicitOutputFile?: string,
|
|
290
320
|
progressOption?: boolean,
|
|
291
321
|
) => {
|
|
292
322
|
try {
|
|
@@ -317,17 +347,27 @@ const setupReporters = async (
|
|
|
317
347
|
verbose: isVerbose,
|
|
318
348
|
});
|
|
319
349
|
} else if (reporterName === 'json') {
|
|
350
|
+
const outputPath = resolveOutputPath(
|
|
351
|
+
outputDir,
|
|
352
|
+
explicitOutputFile,
|
|
353
|
+
'results.json',
|
|
354
|
+
);
|
|
320
355
|
reporter = new JsonReporter({
|
|
321
|
-
...(
|
|
356
|
+
...(outputPath ? { outputPath } : {}),
|
|
322
357
|
prettyPrint: true,
|
|
323
358
|
quiet: shouldBeQuiet, // JSON uses shouldBeQuiet to avoid polluting stdout
|
|
324
359
|
verbose: isVerbose,
|
|
325
360
|
});
|
|
326
361
|
} else if (reporterName === 'csv') {
|
|
362
|
+
const outputPath = resolveOutputPath(
|
|
363
|
+
outputDir,
|
|
364
|
+
explicitOutputFile,
|
|
365
|
+
'results.csv',
|
|
366
|
+
);
|
|
327
367
|
reporter = new CsvReporter({
|
|
328
368
|
includeHeaders: true,
|
|
329
369
|
includeMetadata: true,
|
|
330
|
-
...(
|
|
370
|
+
...(outputPath ? { outputPath } : {}),
|
|
331
371
|
quiet: explicitQuiet, // Only applies explicit --quiet flag; CSV output can coexist with progress messages on different streams
|
|
332
372
|
verbose: isVerbose,
|
|
333
373
|
});
|
|
@@ -341,7 +381,7 @@ const setupReporters = async (
|
|
|
341
381
|
reporter = context.reporterRegistry.get(reporterName);
|
|
342
382
|
if (!reporter) {
|
|
343
383
|
const availableReporters = ['human', 'json', 'csv', 'simple'];
|
|
344
|
-
throw new
|
|
384
|
+
throw new UnknownReporterError(
|
|
345
385
|
`Unknown reporter: ${reporterName}. Available: ${availableReporters.join(', ')}`,
|
|
346
386
|
);
|
|
347
387
|
}
|
|
@@ -356,8 +396,13 @@ const setupReporters = async (
|
|
|
356
396
|
|
|
357
397
|
return reporters;
|
|
358
398
|
} catch (error) {
|
|
359
|
-
throw
|
|
399
|
+
// Re-throw our custom errors
|
|
400
|
+
if ((error as ModestBenchError).code === ErrorCodes.REPORTER_UNKNOWN) {
|
|
401
|
+
throw error;
|
|
402
|
+
}
|
|
403
|
+
throw new InvalidArgumentError(
|
|
360
404
|
`Reporter setup error: ${error instanceof Error ? error.message : String(error)}`,
|
|
405
|
+
{ cause: error },
|
|
361
406
|
);
|
|
362
407
|
}
|
|
363
408
|
};
|