modestbench 0.1.0 → 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 +11 -0
- package/README.md +39 -31
- package/dist/bootstrap.cjs +10 -10
- 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 -5
- package/dist/bootstrap.js.map +1 -1
- package/dist/cli/commands/history.cjs +108 -266
- 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 -268
- package/dist/cli/commands/history.js.map +1 -1
- package/dist/cli/commands/run.cjs +18 -5
- 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 +18 -5
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/index.cjs +307 -91
- package/dist/cli/index.cjs.map +1 -1
- package/dist/cli/index.d.cts.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +308 -92
- package/dist/cli/index.js.map +1 -1
- package/dist/core/engine.cjs +8 -1
- package/dist/core/engine.cjs.map +1 -1
- package/dist/core/engine.d.cts +3 -0
- package/dist/core/engine.d.cts.map +1 -1
- package/dist/core/engine.d.ts +3 -0
- package/dist/core/engine.d.ts.map +1 -1
- package/dist/core/engine.js +8 -1
- package/dist/core/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/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 +15 -17
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +5 -5
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +5 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -9
- package/dist/index.js.map +1 -1
- package/dist/reporters/csv.cjs +2 -2
- 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 +1 -1
- 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 +2 -40
- package/dist/reporters/human.js.map +1 -1
- package/dist/reporters/json.cjs +2 -2
- 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 +1 -1
- package/dist/reporters/json.js.map +1 -1
- package/dist/reporters/simple.cjs +2 -2
- 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 +1 -1
- package/dist/reporters/simple.js.map +1 -1
- package/dist/{config/manager.cjs → services/config-manager.cjs} +2 -2
- 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} +2 -2
- package/dist/services/config-manager.js.map +1 -0
- package/dist/{core/loader.cjs → services/file-loader.cjs} +2 -2
- 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} +2 -2
- 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} +1 -1
- 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} +1 -1
- 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} +1 -1
- 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} +1 -1
- 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/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 +5 -4
- package/src/bootstrap.ts +5 -5
- package/src/cli/commands/history.ts +194 -342
- package/src/cli/commands/run.ts +32 -3
- package/src/cli/index.ts +361 -106
- package/src/core/engine.ts +9 -1
- package/src/core/output-path-resolver.ts +38 -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 +7 -11
- package/src/reporters/csv.ts +1 -1
- package/src/reporters/human.ts +2 -42
- package/src/reporters/json.ts +1 -1
- package/src/reporters/simple.ts +1 -1
- package/src/{config/manager.ts → services/config-manager.ts} +1 -1
- package/src/{core/loader.ts → services/file-loader.ts} +1 -1
- 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/types/cli.ts +3 -0
- 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/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/{storage/history.ts → services/history-storage.ts} +0 -0
- /package/src/{progress/manager.ts → services/progress-manager.ts} +0 -0
- /package/src/{reporters/registry.ts → services/reporter-registry.ts} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/run.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,qBAAoB;
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/run.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,qBAAoB;AAW9C;;GAEG;AACH,UAAU,UAAU;IAClB,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,UAAU,GAAG,WAAW,GAAG,SAAS,CAAC;IAC9C,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC5B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAC3B,SAAS,UAAU,EACnB,SAAS,UAAU,KAClB,OAAO,CAAC,MAAM,CA+JhB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/run.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,oBAAoB;
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/run.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,oBAAoB;AAW9C;;GAEG;AACH,UAAU,UAAU;IAClB,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,UAAU,GAAG,WAAW,GAAG,SAAS,CAAC;IAC9C,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC5B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAC3B,SAAS,UAAU,EACnB,SAAS,UAAU,KAClB,OAAO,CAAC,MAAM,CA+JhB,CAAC"}
|
package/dist/cli/commands/run.js
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { resolve } from 'node:path';
|
|
8
8
|
import { ErrorCodes } from "../../constants.js";
|
|
9
|
+
import { resolveOutputPath } from "../../core/output-path-resolver.js";
|
|
9
10
|
import { InvalidArgumentError, UnknownReporterError, } from "../../errors/index.js";
|
|
10
11
|
import { ExitCodes } from "../../types/cli.js";
|
|
11
12
|
/**
|
|
@@ -21,6 +22,13 @@ export const handleRunCommand = async (context, options) => {
|
|
|
21
22
|
// CLI messages on stderr should only be suppressed by explicit --quiet, not JSON-forced quiet
|
|
22
23
|
const showCliMessages = verbose && !options.quiet;
|
|
23
24
|
try {
|
|
25
|
+
// Validate --output-file usage
|
|
26
|
+
if (options.outputFile &&
|
|
27
|
+
options.reporters &&
|
|
28
|
+
options.reporters.length > 1) {
|
|
29
|
+
throw new InvalidArgumentError('--output-file can only be used with a single reporter. ' +
|
|
30
|
+
'Use --output <dir> for multiple reporters.');
|
|
31
|
+
}
|
|
24
32
|
// Step 1: Load and merge configuration
|
|
25
33
|
if (showCliMessages) {
|
|
26
34
|
console.error('Loading configuration...');
|
|
@@ -30,7 +38,7 @@ export const handleRunCommand = async (context, options) => {
|
|
|
30
38
|
if (showCliMessages) {
|
|
31
39
|
console.error('Setting up reporters...');
|
|
32
40
|
}
|
|
33
|
-
const reporters = await setupReporters(context, config, shouldBeQuiet, verbose, showCliMessages, options.quiet ?? false, options.outputDir, options.progress);
|
|
41
|
+
const reporters = await setupReporters(context, config, shouldBeQuiet, verbose, showCliMessages, options.quiet ?? false, options.outputDir, options.outputFile, options.progress);
|
|
34
42
|
// Step 3: Discovery phase
|
|
35
43
|
if (showCliMessages) {
|
|
36
44
|
console.error('Discovering benchmark files...');
|
|
@@ -94,10 +102,13 @@ export const handleRunCommand = async (context, options) => {
|
|
|
94
102
|
return handleResults(executionResult, options, shouldBeQuiet);
|
|
95
103
|
}
|
|
96
104
|
catch (error) {
|
|
97
|
-
// Re-throw
|
|
105
|
+
// Re-throw CLI errors so yargs fail handler can show help
|
|
98
106
|
if (error.code === ErrorCodes.FILE_DISCOVERY_FAILED) {
|
|
99
107
|
throw error;
|
|
100
108
|
}
|
|
109
|
+
if (error.code === ErrorCodes.CLI_INVALID_ARGUMENT) {
|
|
110
|
+
throw error;
|
|
111
|
+
}
|
|
101
112
|
if (!shouldBeQuiet) {
|
|
102
113
|
console.error(`Error: ${error instanceof Error ? error.message : String(error)}`);
|
|
103
114
|
}
|
|
@@ -199,7 +210,7 @@ const loadConfiguration = async (context, options) => {
|
|
|
199
210
|
/**
|
|
200
211
|
* Setup and configure reporters based on configuration
|
|
201
212
|
*/
|
|
202
|
-
const setupReporters = async (context, config, shouldBeQuiet, isVerbose, showCliMessages, explicitQuiet, explicitOutputDir, progressOption) => {
|
|
213
|
+
const setupReporters = async (context, config, shouldBeQuiet, isVerbose, showCliMessages, explicitQuiet, explicitOutputDir, explicitOutputFile, progressOption) => {
|
|
203
214
|
try {
|
|
204
215
|
const reporters = [];
|
|
205
216
|
const requestedReporters = config.reporters || ['human'];
|
|
@@ -225,18 +236,20 @@ const setupReporters = async (context, config, shouldBeQuiet, isVerbose, showCli
|
|
|
225
236
|
});
|
|
226
237
|
}
|
|
227
238
|
else if (reporterName === 'json') {
|
|
239
|
+
const outputPath = resolveOutputPath(outputDir, explicitOutputFile, 'results.json');
|
|
228
240
|
reporter = new JsonReporter({
|
|
229
|
-
...(
|
|
241
|
+
...(outputPath ? { outputPath } : {}),
|
|
230
242
|
prettyPrint: true,
|
|
231
243
|
quiet: shouldBeQuiet, // JSON uses shouldBeQuiet to avoid polluting stdout
|
|
232
244
|
verbose: isVerbose,
|
|
233
245
|
});
|
|
234
246
|
}
|
|
235
247
|
else if (reporterName === 'csv') {
|
|
248
|
+
const outputPath = resolveOutputPath(outputDir, explicitOutputFile, 'results.csv');
|
|
236
249
|
reporter = new CsvReporter({
|
|
237
250
|
includeHeaders: true,
|
|
238
251
|
includeMetadata: true,
|
|
239
|
-
...(
|
|
252
|
+
...(outputPath ? { outputPath } : {}),
|
|
240
253
|
quiet: explicitQuiet, // Only applies explicit --quiet flag; CSV output can coexist with progress messages on different streams
|
|
241
254
|
verbose: isVerbose,
|
|
242
255
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/cli/commands/run.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,OAAO,EAAE,UAAU,EAAE,2BAA2B;AAChD,OAAO,EACL,oBAAoB,EAEpB,oBAAoB,GACrB,8BAA8B;AAC/B,OAAO,EAAE,SAAS,EAAE,2BAA2B;
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/cli/commands/run.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.cjs
CHANGED
|
@@ -56,6 +56,7 @@ const main = async (argv, abortController) => {
|
|
|
56
56
|
const cli = (0, yargs_1.default)(args);
|
|
57
57
|
// Configure global options and commands
|
|
58
58
|
await cli
|
|
59
|
+
.scriptName('modestbench')
|
|
59
60
|
.option('config', {
|
|
60
61
|
alias: 'c',
|
|
61
62
|
description: 'Path to configuration file',
|
|
@@ -89,6 +90,7 @@ const main = async (argv, abortController) => {
|
|
|
89
90
|
})
|
|
90
91
|
.option('cwd', {
|
|
91
92
|
default: process.cwd(),
|
|
93
|
+
defaultDescription: '.',
|
|
92
94
|
description: 'Working directory',
|
|
93
95
|
global: true,
|
|
94
96
|
type: 'string',
|
|
@@ -132,6 +134,12 @@ const main = async (argv, abortController) => {
|
|
|
132
134
|
alias: 'o',
|
|
133
135
|
description: 'Output directory for reports',
|
|
134
136
|
type: 'string',
|
|
137
|
+
})
|
|
138
|
+
.option('output-file', {
|
|
139
|
+
alias: 'of',
|
|
140
|
+
description: 'Custom filename for reporter output (use with single reporter only)',
|
|
141
|
+
requiresArg: true,
|
|
142
|
+
type: 'string',
|
|
135
143
|
})
|
|
136
144
|
.option('iterations', {
|
|
137
145
|
alias: 'i',
|
|
@@ -234,6 +242,7 @@ const main = async (argv, abortController) => {
|
|
|
234
242
|
json: argv.json,
|
|
235
243
|
noColor: argv.noColor,
|
|
236
244
|
outputDir: argv.output,
|
|
245
|
+
outputFile: argv['output-file'],
|
|
237
246
|
pattern: argv.pattern,
|
|
238
247
|
progress: argv.progress,
|
|
239
248
|
quiet: argv.quiet,
|
|
@@ -246,103 +255,310 @@ const main = async (argv, abortController) => {
|
|
|
246
255
|
});
|
|
247
256
|
process.exit(exitCode);
|
|
248
257
|
})
|
|
249
|
-
.command('history
|
|
258
|
+
.command('history', 'View and manage benchmark history', (yargs) => {
|
|
250
259
|
return yargs
|
|
251
|
-
.
|
|
252
|
-
|
|
253
|
-
'
|
|
254
|
-
'
|
|
255
|
-
'
|
|
256
|
-
|
|
257
|
-
'
|
|
258
|
-
'
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
})
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
})
|
|
304
|
-
.
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
260
|
+
.command('list', 'List recent benchmark runs', (yargs) => {
|
|
261
|
+
return yargs
|
|
262
|
+
.option('since', {
|
|
263
|
+
description: 'Show runs since date (ISO 8601 or relative like "1 week ago")',
|
|
264
|
+
type: 'string',
|
|
265
|
+
})
|
|
266
|
+
.option('until', {
|
|
267
|
+
description: 'Show runs until date (ISO 8601 or relative like "1 day ago")',
|
|
268
|
+
type: 'string',
|
|
269
|
+
})
|
|
270
|
+
.option('pattern', {
|
|
271
|
+
description: 'Filter by benchmark name pattern',
|
|
272
|
+
type: 'string',
|
|
273
|
+
})
|
|
274
|
+
.option('tags', {
|
|
275
|
+
description: 'Filter by tags (comma-separated)',
|
|
276
|
+
type: 'array',
|
|
277
|
+
})
|
|
278
|
+
.option('limit', {
|
|
279
|
+
default: 10,
|
|
280
|
+
description: 'Maximum number of results',
|
|
281
|
+
type: 'number',
|
|
282
|
+
})
|
|
283
|
+
.option('format', {
|
|
284
|
+
choices: ['human', 'json', 'csv'],
|
|
285
|
+
default: 'human',
|
|
286
|
+
description: 'Output format',
|
|
287
|
+
type: 'string',
|
|
288
|
+
})
|
|
289
|
+
.example([
|
|
290
|
+
['$0 history list', 'List recent benchmark runs'],
|
|
291
|
+
[
|
|
292
|
+
'$0 history list --since "1 week ago"',
|
|
293
|
+
'List runs from last week',
|
|
294
|
+
],
|
|
295
|
+
['$0 history list --limit 20', 'List 20 most recent runs'],
|
|
296
|
+
['$0 history list --format json', 'List runs in JSON format'],
|
|
297
|
+
]);
|
|
298
|
+
}, async (argv) => {
|
|
299
|
+
const context = await createCliContext(argv, abortController);
|
|
300
|
+
const exitCode = await (0, history_js_1.handleListCommand)(context, {
|
|
301
|
+
cwd: argv.cwd,
|
|
302
|
+
format: argv.format,
|
|
303
|
+
limit: argv.limit,
|
|
304
|
+
pattern: argv.pattern,
|
|
305
|
+
quiet: Boolean(argv.quiet),
|
|
306
|
+
since: argv.since,
|
|
307
|
+
tags: argv.tags,
|
|
308
|
+
until: argv.until,
|
|
309
|
+
verbose: argv.verbose,
|
|
310
|
+
});
|
|
311
|
+
process.exit(exitCode);
|
|
312
|
+
})
|
|
313
|
+
.command('show <run-id>', 'Show detailed results for a specific run', (yargs) => {
|
|
314
|
+
return yargs
|
|
315
|
+
.positional('run-id', {
|
|
316
|
+
describe: 'ID of the benchmark run to show',
|
|
317
|
+
type: 'string',
|
|
318
|
+
})
|
|
319
|
+
.option('format', {
|
|
320
|
+
choices: ['human', 'json', 'csv'],
|
|
321
|
+
default: 'human',
|
|
322
|
+
description: 'Output format',
|
|
323
|
+
type: 'string',
|
|
324
|
+
})
|
|
325
|
+
.example([
|
|
326
|
+
[
|
|
327
|
+
'$0 history show abc123',
|
|
328
|
+
'Show detailed results for run abc123',
|
|
329
|
+
],
|
|
330
|
+
[
|
|
331
|
+
'$0 history show abc123 --format json',
|
|
332
|
+
'Show run in JSON format',
|
|
333
|
+
],
|
|
334
|
+
]);
|
|
335
|
+
}, async (argv) => {
|
|
336
|
+
const context = await createCliContext(argv, abortController);
|
|
337
|
+
const exitCode = await (0, history_js_1.handleShowCommand)(context, {
|
|
338
|
+
cwd: argv.cwd,
|
|
339
|
+
format: argv.format,
|
|
340
|
+
quiet: Boolean(argv.quiet),
|
|
341
|
+
runId: String(argv['run-id']),
|
|
342
|
+
verbose: argv.verbose,
|
|
343
|
+
});
|
|
344
|
+
process.exit(exitCode);
|
|
345
|
+
})
|
|
346
|
+
.command('compare <run-id1> <run-id2>', 'Compare two benchmark runs', (yargs) => {
|
|
347
|
+
return yargs
|
|
348
|
+
.positional('run-id1', {
|
|
349
|
+
describe: 'ID of the first benchmark run',
|
|
350
|
+
type: 'string',
|
|
351
|
+
})
|
|
352
|
+
.positional('run-id2', {
|
|
353
|
+
describe: 'ID of the second benchmark run',
|
|
354
|
+
type: 'string',
|
|
355
|
+
})
|
|
356
|
+
.option('format', {
|
|
357
|
+
choices: ['human', 'json'],
|
|
358
|
+
default: 'human',
|
|
359
|
+
description: 'Output format',
|
|
360
|
+
type: 'string',
|
|
361
|
+
})
|
|
362
|
+
.example([
|
|
363
|
+
['$0 history compare abc123 def456', 'Compare two runs'],
|
|
364
|
+
[
|
|
365
|
+
'$0 history compare abc123 def456 --format json',
|
|
366
|
+
'Compare in JSON format',
|
|
367
|
+
],
|
|
368
|
+
]);
|
|
369
|
+
}, async (argv) => {
|
|
370
|
+
const context = await createCliContext(argv, abortController);
|
|
371
|
+
const exitCode = await (0, history_js_1.handleCompareCommand)(context, {
|
|
372
|
+
cwd: argv.cwd,
|
|
373
|
+
format: argv.format,
|
|
374
|
+
quiet: Boolean(argv.quiet),
|
|
375
|
+
runId1: String(argv['run-id1']),
|
|
376
|
+
runId2: String(argv['run-id2']),
|
|
377
|
+
verbose: argv.verbose,
|
|
378
|
+
});
|
|
379
|
+
process.exit(exitCode);
|
|
380
|
+
})
|
|
381
|
+
.command('trends [pattern]', 'Show performance trends over time', (yargs) => {
|
|
382
|
+
return yargs
|
|
383
|
+
.positional('pattern', {
|
|
384
|
+
describe: 'Filter by benchmark name pattern',
|
|
385
|
+
type: 'string',
|
|
386
|
+
})
|
|
387
|
+
.option('since', {
|
|
388
|
+
description: 'Show trends since date (ISO 8601 or relative like "1 week ago")',
|
|
389
|
+
type: 'string',
|
|
390
|
+
})
|
|
391
|
+
.option('until', {
|
|
392
|
+
description: 'Show trends until date (ISO 8601 or relative like "1 day ago")',
|
|
393
|
+
type: 'string',
|
|
394
|
+
})
|
|
395
|
+
.option('tags', {
|
|
396
|
+
description: 'Filter by tags (comma-separated)',
|
|
397
|
+
type: 'array',
|
|
398
|
+
})
|
|
399
|
+
.option('limit', {
|
|
400
|
+
description: 'Maximum number of runs to analyze',
|
|
401
|
+
type: 'number',
|
|
402
|
+
})
|
|
403
|
+
.option('all', {
|
|
404
|
+
alias: 'a',
|
|
405
|
+
default: false,
|
|
406
|
+
description: 'Analyze all runs (ignore limit)',
|
|
407
|
+
type: 'boolean',
|
|
408
|
+
})
|
|
409
|
+
.option('format', {
|
|
410
|
+
choices: ['human', 'json'],
|
|
411
|
+
default: 'human',
|
|
412
|
+
description: 'Output format',
|
|
413
|
+
type: 'string',
|
|
414
|
+
})
|
|
415
|
+
.example([
|
|
416
|
+
[
|
|
417
|
+
'$0 history trends',
|
|
418
|
+
'Show performance trends for all benchmarks',
|
|
419
|
+
],
|
|
420
|
+
[
|
|
421
|
+
'$0 history trends --since "1 month ago"',
|
|
422
|
+
'Show trends from last month',
|
|
423
|
+
],
|
|
424
|
+
[
|
|
425
|
+
'$0 history trends "array-*"',
|
|
426
|
+
'Show trends for array benchmarks',
|
|
427
|
+
],
|
|
428
|
+
[
|
|
429
|
+
'$0 history trends --format json',
|
|
430
|
+
'Output trends in JSON format',
|
|
431
|
+
],
|
|
432
|
+
]);
|
|
433
|
+
}, async (argv) => {
|
|
434
|
+
const context = await createCliContext(argv, abortController);
|
|
435
|
+
const exitCode = await (0, history_js_1.handleTrendsCommand)(context, {
|
|
436
|
+
all: Boolean(argv.all),
|
|
437
|
+
cwd: argv.cwd,
|
|
438
|
+
format: argv.format,
|
|
439
|
+
limit: argv.limit,
|
|
440
|
+
pattern: argv.pattern,
|
|
441
|
+
quiet: Boolean(argv.quiet),
|
|
442
|
+
since: argv.since,
|
|
443
|
+
tags: argv.tags,
|
|
444
|
+
until: argv.until,
|
|
445
|
+
verbose: argv.verbose,
|
|
446
|
+
});
|
|
447
|
+
process.exit(exitCode);
|
|
448
|
+
})
|
|
449
|
+
.command('clean', 'Clean up old benchmark history', (yargs) => {
|
|
450
|
+
return yargs
|
|
451
|
+
.option('max-age', {
|
|
452
|
+
description: 'Remove runs older than this many days',
|
|
453
|
+
type: 'number',
|
|
454
|
+
})
|
|
455
|
+
.option('max-runs', {
|
|
456
|
+
description: 'Keep only this many most recent runs',
|
|
457
|
+
type: 'number',
|
|
458
|
+
})
|
|
459
|
+
.option('max-size', {
|
|
460
|
+
description: 'Keep history under this size in bytes',
|
|
461
|
+
type: 'number',
|
|
462
|
+
})
|
|
463
|
+
.option('confirm', {
|
|
464
|
+
default: false,
|
|
465
|
+
description: 'Confirm cleanup without prompting',
|
|
466
|
+
type: 'boolean',
|
|
467
|
+
})
|
|
468
|
+
.check((argv) => {
|
|
469
|
+
if (!argv['max-age'] &&
|
|
470
|
+
!argv['max-runs'] &&
|
|
471
|
+
!argv['max-size']) {
|
|
472
|
+
throw new Error('At least one cleanup criterion must be specified (--max-age, --max-runs, or --max-size)');
|
|
473
|
+
}
|
|
474
|
+
return true;
|
|
475
|
+
})
|
|
476
|
+
.example([
|
|
477
|
+
[
|
|
478
|
+
'$0 history clean --max-runs 50 --confirm',
|
|
479
|
+
'Keep only latest 50 runs',
|
|
480
|
+
],
|
|
481
|
+
[
|
|
482
|
+
'$0 history clean --max-age 30',
|
|
483
|
+
'Preview removing runs older than 30 days',
|
|
484
|
+
],
|
|
485
|
+
[
|
|
486
|
+
'$0 history clean --max-size 10485760',
|
|
487
|
+
'Keep history under 10MB',
|
|
488
|
+
],
|
|
489
|
+
]);
|
|
490
|
+
}, async (argv) => {
|
|
491
|
+
const context = await createCliContext(argv, abortController);
|
|
492
|
+
const exitCode = await (0, history_js_1.handleCleanCommand)(context, {
|
|
493
|
+
confirm: argv.confirm,
|
|
494
|
+
cwd: argv.cwd,
|
|
495
|
+
maxAge: argv['max-age'],
|
|
496
|
+
maxRuns: argv['max-runs'],
|
|
497
|
+
maxSize: argv['max-size'],
|
|
498
|
+
quiet: Boolean(argv.quiet),
|
|
499
|
+
verbose: argv.verbose,
|
|
500
|
+
});
|
|
501
|
+
process.exit(exitCode);
|
|
502
|
+
})
|
|
503
|
+
.command('export', 'Export benchmark history to a file', (yargs) => {
|
|
504
|
+
return yargs
|
|
505
|
+
.option('format', {
|
|
506
|
+
choices: ['json', 'csv'],
|
|
507
|
+
default: 'json',
|
|
508
|
+
description: 'Export format',
|
|
509
|
+
type: 'string',
|
|
510
|
+
})
|
|
511
|
+
.option('output', {
|
|
512
|
+
alias: 'o',
|
|
513
|
+
demandOption: true,
|
|
514
|
+
description: 'Output file path',
|
|
515
|
+
type: 'string',
|
|
516
|
+
})
|
|
517
|
+
.option('since', {
|
|
518
|
+
description: 'Export runs since date',
|
|
519
|
+
type: 'string',
|
|
520
|
+
})
|
|
521
|
+
.option('until', {
|
|
522
|
+
description: 'Export runs until date',
|
|
523
|
+
type: 'string',
|
|
524
|
+
})
|
|
525
|
+
.example([
|
|
526
|
+
[
|
|
527
|
+
'$0 history export -o history.json',
|
|
528
|
+
'Export all history to JSON',
|
|
529
|
+
],
|
|
530
|
+
[
|
|
531
|
+
'$0 history export -o history.csv --format csv',
|
|
532
|
+
'Export to CSV',
|
|
533
|
+
],
|
|
534
|
+
[
|
|
535
|
+
'$0 history export -o recent.json --since "1 week ago"',
|
|
536
|
+
'Export recent runs',
|
|
537
|
+
],
|
|
538
|
+
]);
|
|
539
|
+
}, async (argv) => {
|
|
540
|
+
const context = await createCliContext(argv, abortController);
|
|
541
|
+
const exitCode = await (0, history_js_1.handleExportCommand)(context, {
|
|
542
|
+
cwd: argv.cwd,
|
|
543
|
+
format: argv.format,
|
|
544
|
+
outputPath: argv.output,
|
|
545
|
+
quiet: Boolean(argv.quiet),
|
|
546
|
+
since: argv.since,
|
|
547
|
+
until: argv.until,
|
|
548
|
+
verbose: argv.verbose,
|
|
549
|
+
});
|
|
550
|
+
process.exit(exitCode);
|
|
551
|
+
})
|
|
552
|
+
.demandCommand(1, 'You must specify a history subcommand')
|
|
553
|
+
.strict()
|
|
317
554
|
.example([
|
|
318
555
|
['$0 history list', 'List recent benchmark runs'],
|
|
319
|
-
['$0 history show <run-id>', 'Show detailed results
|
|
556
|
+
['$0 history show <run-id>', 'Show detailed results'],
|
|
320
557
|
['$0 history compare <run-id1> <run-id2>', 'Compare two runs'],
|
|
321
|
-
['$0 history trends
|
|
558
|
+
['$0 history trends', 'Show performance trends'],
|
|
322
559
|
['$0 history clean --max-runs 50', 'Keep only latest 50 runs'],
|
|
323
|
-
['$0 history export
|
|
560
|
+
['$0 history export -o data.json', 'Export history'],
|
|
324
561
|
]);
|
|
325
|
-
}, async (argv) => {
|
|
326
|
-
const context = await createCliContext(argv, abortController);
|
|
327
|
-
const exitCode = await (0, history_js_1.handleHistoryCommand)(context, {
|
|
328
|
-
args: argv.args,
|
|
329
|
-
confirm: argv.confirm,
|
|
330
|
-
cwd: argv.cwd,
|
|
331
|
-
format: argv.format,
|
|
332
|
-
limit: argv.limit,
|
|
333
|
-
maxAge: argv.maxAge,
|
|
334
|
-
maxRuns: argv.maxRuns,
|
|
335
|
-
maxSize: argv.maxSize,
|
|
336
|
-
outputDir: argv.output,
|
|
337
|
-
pattern: argv.pattern,
|
|
338
|
-
quiet: Boolean(argv.quiet),
|
|
339
|
-
since: argv.since,
|
|
340
|
-
subcommand: argv.subcommand,
|
|
341
|
-
tags: argv.tags,
|
|
342
|
-
until: argv.until,
|
|
343
|
-
verbose: argv.verbose,
|
|
344
|
-
});
|
|
345
|
-
process.exit(exitCode);
|
|
346
562
|
})
|
|
347
563
|
.command('init [type]', 'Initialize a new benchmark project', (yargs) => {
|
|
348
564
|
return yargs
|