modestbench 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +45 -0
- package/LICENSE.md +55 -0
- package/README.md +699 -0
- package/dist/bootstrap.cjs +37 -0
- package/dist/bootstrap.cjs.map +1 -0
- package/dist/bootstrap.d.cts +17 -0
- package/dist/bootstrap.d.cts.map +1 -0
- package/dist/bootstrap.d.ts +17 -0
- package/dist/bootstrap.d.ts.map +1 -0
- package/dist/bootstrap.js +33 -0
- package/dist/bootstrap.js.map +1 -0
- package/dist/cli/commands/history.cjs +459 -0
- package/dist/cli/commands/history.cjs.map +1 -0
- package/dist/cli/commands/history.d.cts +34 -0
- package/dist/cli/commands/history.d.cts.map +1 -0
- package/dist/cli/commands/history.d.ts +34 -0
- package/dist/cli/commands/history.d.ts.map +1 -0
- package/dist/cli/commands/history.js +422 -0
- package/dist/cli/commands/history.js.map +1 -0
- package/dist/cli/commands/init.cjs +566 -0
- package/dist/cli/commands/init.cjs.map +1 -0
- package/dist/cli/commands/init.d.cts +26 -0
- package/dist/cli/commands/init.d.cts.map +1 -0
- package/dist/cli/commands/init.d.ts +26 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +562 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/run.cjs +285 -0
- package/dist/cli/commands/run.cjs.map +1 -0
- package/dist/cli/commands/run.d.cts +37 -0
- package/dist/cli/commands/run.d.cts.map +1 -0
- package/dist/cli/commands/run.d.ts +37 -0
- package/dist/cli/commands/run.d.ts.map +1 -0
- package/dist/cli/commands/run.js +248 -0
- package/dist/cli/commands/run.js.map +1 -0
- package/dist/cli/index.cjs +523 -0
- package/dist/cli/index.cjs.map +1 -0
- package/dist/cli/index.d.cts +58 -0
- package/dist/cli/index.d.cts.map +1 -0
- package/dist/cli/index.d.ts +58 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +515 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/config/manager.cjs +370 -0
- package/dist/config/manager.cjs.map +1 -0
- package/dist/config/manager.d.cts +46 -0
- package/dist/config/manager.d.cts.map +1 -0
- package/dist/config/manager.d.ts +46 -0
- package/dist/config/manager.d.ts.map +1 -0
- package/dist/config/manager.js +333 -0
- package/dist/config/manager.js.map +1 -0
- package/dist/config/schema.cjs +182 -0
- package/dist/config/schema.cjs.map +1 -0
- package/dist/config/schema.d.cts +51 -0
- package/dist/config/schema.d.cts.map +1 -0
- package/dist/config/schema.d.ts +51 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +145 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/constants.cjs +22 -0
- package/dist/constants.cjs.map +1 -0
- package/dist/constants.d.cts +10 -0
- package/dist/constants.d.cts.map +1 -0
- package/dist/constants.d.ts +10 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +19 -0
- package/dist/constants.js.map +1 -0
- package/dist/core/benchmark-schema.cjs +135 -0
- package/dist/core/benchmark-schema.cjs.map +1 -0
- package/dist/core/benchmark-schema.d.cts +139 -0
- package/dist/core/benchmark-schema.d.cts.map +1 -0
- package/dist/core/benchmark-schema.d.ts +139 -0
- package/dist/core/benchmark-schema.d.ts.map +1 -0
- package/dist/core/benchmark-schema.js +132 -0
- package/dist/core/benchmark-schema.js.map +1 -0
- package/dist/core/engine.cjs +669 -0
- package/dist/core/engine.cjs.map +1 -0
- package/dist/core/engine.d.cts +128 -0
- package/dist/core/engine.d.cts.map +1 -0
- package/dist/core/engine.d.ts +128 -0
- package/dist/core/engine.d.ts.map +1 -0
- package/dist/core/engine.js +632 -0
- package/dist/core/engine.js.map +1 -0
- package/dist/core/engines/accurate-engine.cjs +292 -0
- package/dist/core/engines/accurate-engine.cjs.map +1 -0
- package/dist/core/engines/accurate-engine.d.cts +63 -0
- package/dist/core/engines/accurate-engine.d.cts.map +1 -0
- package/dist/core/engines/accurate-engine.d.ts +63 -0
- package/dist/core/engines/accurate-engine.d.ts.map +1 -0
- package/dist/core/engines/accurate-engine.js +288 -0
- package/dist/core/engines/accurate-engine.js.map +1 -0
- package/dist/core/engines/index.cjs +21 -0
- package/dist/core/engines/index.cjs.map +1 -0
- package/dist/core/engines/index.d.cts +16 -0
- package/dist/core/engines/index.d.cts.map +1 -0
- package/dist/core/engines/index.d.ts +16 -0
- package/dist/core/engines/index.d.ts.map +1 -0
- package/dist/core/engines/index.js +16 -0
- package/dist/core/engines/index.js.map +1 -0
- package/dist/core/engines/tinybench-engine.cjs +286 -0
- package/dist/core/engines/tinybench-engine.cjs.map +1 -0
- package/dist/core/engines/tinybench-engine.d.cts +18 -0
- package/dist/core/engines/tinybench-engine.d.cts.map +1 -0
- package/dist/core/engines/tinybench-engine.d.ts +18 -0
- package/dist/core/engines/tinybench-engine.d.ts.map +1 -0
- package/dist/core/engines/tinybench-engine.js +282 -0
- package/dist/core/engines/tinybench-engine.js.map +1 -0
- package/dist/core/error-manager.cjs +303 -0
- package/dist/core/error-manager.cjs.map +1 -0
- package/dist/core/error-manager.d.cts +77 -0
- package/dist/core/error-manager.d.cts.map +1 -0
- package/dist/core/error-manager.d.ts +77 -0
- package/dist/core/error-manager.d.ts.map +1 -0
- package/dist/core/error-manager.js +299 -0
- package/dist/core/error-manager.js.map +1 -0
- package/dist/core/loader.cjs +287 -0
- package/dist/core/loader.cjs.map +1 -0
- package/dist/core/loader.d.cts +55 -0
- package/dist/core/loader.d.cts.map +1 -0
- package/dist/core/loader.d.ts +55 -0
- package/dist/core/loader.d.ts.map +1 -0
- package/dist/core/loader.js +250 -0
- package/dist/core/loader.js.map +1 -0
- package/dist/core/stats-utils.cjs +99 -0
- package/dist/core/stats-utils.cjs.map +1 -0
- package/dist/core/stats-utils.d.cts +50 -0
- package/dist/core/stats-utils.d.cts.map +1 -0
- package/dist/core/stats-utils.d.ts +50 -0
- package/dist/core/stats-utils.d.ts.map +1 -0
- package/dist/core/stats-utils.js +94 -0
- package/dist/core/stats-utils.js.map +1 -0
- package/dist/index.cjs +64 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +22 -0
- package/dist/index.d.cts.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -0
- package/dist/progress/manager.cjs +325 -0
- package/dist/progress/manager.cjs.map +1 -0
- package/dist/progress/manager.d.cts +125 -0
- package/dist/progress/manager.d.cts.map +1 -0
- package/dist/progress/manager.d.ts +125 -0
- package/dist/progress/manager.d.ts.map +1 -0
- package/dist/progress/manager.js +321 -0
- package/dist/progress/manager.js.map +1 -0
- package/dist/reporters/csv.cjs +250 -0
- package/dist/reporters/csv.cjs.map +1 -0
- package/dist/reporters/csv.d.cts +92 -0
- package/dist/reporters/csv.d.cts.map +1 -0
- package/dist/reporters/csv.d.ts +92 -0
- package/dist/reporters/csv.d.ts.map +1 -0
- package/dist/reporters/csv.js +246 -0
- package/dist/reporters/csv.js.map +1 -0
- package/dist/reporters/human.cjs +516 -0
- package/dist/reporters/human.cjs.map +1 -0
- package/dist/reporters/human.d.cts +86 -0
- package/dist/reporters/human.d.cts.map +1 -0
- package/dist/reporters/human.d.ts +86 -0
- package/dist/reporters/human.d.ts.map +1 -0
- package/dist/reporters/human.js +509 -0
- package/dist/reporters/human.js.map +1 -0
- package/dist/reporters/index.cjs +17 -0
- package/dist/reporters/index.cjs.map +1 -0
- package/dist/reporters/index.d.cts +10 -0
- package/dist/reporters/index.d.cts.map +1 -0
- package/dist/reporters/index.d.ts +10 -0
- package/dist/reporters/index.d.ts.map +1 -0
- package/dist/reporters/index.js +10 -0
- package/dist/reporters/index.js.map +1 -0
- package/dist/reporters/json.cjs +215 -0
- package/dist/reporters/json.cjs.map +1 -0
- package/dist/reporters/json.d.cts +79 -0
- package/dist/reporters/json.d.cts.map +1 -0
- package/dist/reporters/json.d.ts +79 -0
- package/dist/reporters/json.d.ts.map +1 -0
- package/dist/reporters/json.js +211 -0
- package/dist/reporters/json.js.map +1 -0
- package/dist/reporters/registry.cjs +255 -0
- package/dist/reporters/registry.cjs.map +1 -0
- package/dist/reporters/registry.d.cts +155 -0
- package/dist/reporters/registry.d.cts.map +1 -0
- package/dist/reporters/registry.d.ts +155 -0
- package/dist/reporters/registry.d.ts.map +1 -0
- package/dist/reporters/registry.js +249 -0
- package/dist/reporters/registry.js.map +1 -0
- package/dist/reporters/simple.cjs +328 -0
- package/dist/reporters/simple.cjs.map +1 -0
- package/dist/reporters/simple.d.cts +51 -0
- package/dist/reporters/simple.d.cts.map +1 -0
- package/dist/reporters/simple.d.ts +51 -0
- package/dist/reporters/simple.d.ts.map +1 -0
- package/dist/reporters/simple.js +321 -0
- package/dist/reporters/simple.js.map +1 -0
- package/dist/schema/modestbench-config.schema.json +162 -0
- package/dist/storage/history.cjs +456 -0
- package/dist/storage/history.cjs.map +1 -0
- package/dist/storage/history.d.cts +99 -0
- package/dist/storage/history.d.cts.map +1 -0
- package/dist/storage/history.d.ts +99 -0
- package/dist/storage/history.d.ts.map +1 -0
- package/dist/storage/history.js +452 -0
- package/dist/storage/history.js.map +1 -0
- package/dist/types/cli.cjs +21 -0
- package/dist/types/cli.cjs.map +1 -0
- package/dist/types/cli.d.cts +296 -0
- package/dist/types/cli.d.cts.map +1 -0
- package/dist/types/cli.d.ts +296 -0
- package/dist/types/cli.d.ts.map +1 -0
- package/dist/types/cli.js +18 -0
- package/dist/types/cli.js.map +1 -0
- package/dist/types/core.cjs +14 -0
- package/dist/types/core.cjs.map +1 -0
- package/dist/types/core.d.cts +380 -0
- package/dist/types/core.d.cts.map +1 -0
- package/dist/types/core.d.ts +380 -0
- package/dist/types/core.d.ts.map +1 -0
- package/dist/types/core.js +13 -0
- package/dist/types/core.js.map +1 -0
- package/dist/types/index.cjs +27 -0
- package/dist/types/index.cjs.map +1 -0
- package/dist/types/index.d.cts +11 -0
- package/dist/types/index.d.cts.map +1 -0
- package/dist/types/index.d.ts +11 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +11 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/interfaces.cjs +10 -0
- package/dist/types/interfaces.cjs.map +1 -0
- package/dist/types/interfaces.d.cts +381 -0
- package/dist/types/interfaces.d.cts.map +1 -0
- package/dist/types/interfaces.d.ts +381 -0
- package/dist/types/interfaces.d.ts.map +1 -0
- package/dist/types/interfaces.js +9 -0
- package/dist/types/interfaces.js.map +1 -0
- package/dist/types/utility.cjs +92 -0
- package/dist/types/utility.cjs.map +1 -0
- package/dist/types/utility.d.cts +330 -0
- package/dist/types/utility.d.cts.map +1 -0
- package/dist/types/utility.d.ts +330 -0
- package/dist/types/utility.d.ts.map +1 -0
- package/dist/types/utility.js +78 -0
- package/dist/types/utility.js.map +1 -0
- package/package.json +211 -0
- package/src/bootstrap.ts +35 -0
- package/src/cli/commands/history.ts +569 -0
- package/src/cli/commands/init.ts +658 -0
- package/src/cli/commands/run.ts +346 -0
- package/src/cli/index.ts +642 -0
- package/src/config/manager.ts +387 -0
- package/src/config/schema.ts +188 -0
- package/src/constants.ts +21 -0
- package/src/core/benchmark-schema.ts +185 -0
- package/src/core/engine.ts +888 -0
- package/src/core/engines/accurate-engine.ts +408 -0
- package/src/core/engines/index.ts +16 -0
- package/src/core/engines/tinybench-engine.ts +335 -0
- package/src/core/error-manager.ts +372 -0
- package/src/core/loader.ts +324 -0
- package/src/core/stats-utils.ts +135 -0
- package/src/index.ts +46 -0
- package/src/progress/manager.ts +415 -0
- package/src/reporters/csv.ts +368 -0
- package/src/reporters/human.ts +707 -0
- package/src/reporters/index.ts +10 -0
- package/src/reporters/json.ts +302 -0
- package/src/reporters/registry.ts +349 -0
- package/src/reporters/simple.ts +459 -0
- package/src/storage/history.ts +600 -0
- package/src/types/cli.ts +312 -0
- package/src/types/core.ts +414 -0
- package/src/types/index.ts +18 -0
- package/src/types/interfaces.ts +451 -0
- package/src/types/utility.ts +446 -0
|
@@ -0,0 +1,370 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ModestBench Configuration Manager
|
|
4
|
+
*
|
|
5
|
+
* Handles loading, merging, and validation of configuration from multiple
|
|
6
|
+
* sources. Supports CLI arguments, config files (JSON/YAML/JS/TS), and
|
|
7
|
+
* defaults.
|
|
8
|
+
*/
|
|
9
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
12
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
13
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
14
|
+
}
|
|
15
|
+
Object.defineProperty(o, k2, desc);
|
|
16
|
+
}) : (function(o, m, k, k2) {
|
|
17
|
+
if (k2 === undefined) k2 = k;
|
|
18
|
+
o[k2] = m[k];
|
|
19
|
+
}));
|
|
20
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
21
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
22
|
+
}) : function(o, v) {
|
|
23
|
+
o["default"] = v;
|
|
24
|
+
});
|
|
25
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
26
|
+
var ownKeys = function(o) {
|
|
27
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
28
|
+
var ar = [];
|
|
29
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
30
|
+
return ar;
|
|
31
|
+
};
|
|
32
|
+
return ownKeys(o);
|
|
33
|
+
};
|
|
34
|
+
return function (mod) {
|
|
35
|
+
if (mod && mod.__esModule) return mod;
|
|
36
|
+
var result = {};
|
|
37
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
38
|
+
__setModuleDefault(result, mod);
|
|
39
|
+
return result;
|
|
40
|
+
};
|
|
41
|
+
})();
|
|
42
|
+
var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
|
|
43
|
+
if (typeof path === "string" && /^\.\.?\//.test(path)) {
|
|
44
|
+
return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
|
|
45
|
+
return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
return path;
|
|
49
|
+
};
|
|
50
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
51
|
+
exports.ModestBenchConfigurationManager = void 0;
|
|
52
|
+
const cosmiconfig_1 = require("cosmiconfig");
|
|
53
|
+
const node_path_1 = require("node:path");
|
|
54
|
+
const schema_js_1 = require("./schema.cjs");
|
|
55
|
+
/**
|
|
56
|
+
* Get the default reporter based on TTY status and environment
|
|
57
|
+
*/
|
|
58
|
+
const getDefaultReporter = () => {
|
|
59
|
+
// Use simple reporter when stdout is not a TTY and color is not forced
|
|
60
|
+
if (!process.stdout.isTTY && !isColorForced()) {
|
|
61
|
+
return 'simple';
|
|
62
|
+
}
|
|
63
|
+
return 'human';
|
|
64
|
+
};
|
|
65
|
+
/**
|
|
66
|
+
* Check if color output has been forced via environment variables
|
|
67
|
+
*/
|
|
68
|
+
const isColorForced = () => {
|
|
69
|
+
return (process.env.FORCE_COLOR !== undefined &&
|
|
70
|
+
process.env.FORCE_COLOR !== '0' &&
|
|
71
|
+
process.env.NO_COLOR === undefined);
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* Default configuration values Using minimal values to reduce test overhead
|
|
75
|
+
* while maintaining functionality
|
|
76
|
+
*/
|
|
77
|
+
const DEFAULT_CONFIG = {
|
|
78
|
+
bail: false,
|
|
79
|
+
exclude: ['node_modules/**', '.git/**'],
|
|
80
|
+
excludeTags: [],
|
|
81
|
+
iterations: 100, // Sufficient iterations for reliable statistics
|
|
82
|
+
limitBy: 'iterations', // Default to limiting by iteration count
|
|
83
|
+
metadata: {},
|
|
84
|
+
outputDir: './benchmark-results',
|
|
85
|
+
pattern: '**/*.bench.{js,ts,mjs,cjs,mts,cts}',
|
|
86
|
+
quiet: false,
|
|
87
|
+
reporterConfig: {},
|
|
88
|
+
reporters: [getDefaultReporter()],
|
|
89
|
+
tags: [],
|
|
90
|
+
thresholds: {},
|
|
91
|
+
time: 1000, // 1 second minimum for tinybench to gather samples
|
|
92
|
+
timeout: 30000, // 30 seconds
|
|
93
|
+
verbose: false, // No verbose output by default
|
|
94
|
+
warmup: 0, // No warmup by default for test speed
|
|
95
|
+
};
|
|
96
|
+
/**
|
|
97
|
+
* Configuration precedence order (highest to lowest):
|
|
98
|
+
*
|
|
99
|
+
* 1. CLI arguments
|
|
100
|
+
* 2. Config file
|
|
101
|
+
* 3. Default values
|
|
102
|
+
*/
|
|
103
|
+
class ModestBenchConfigurationManager {
|
|
104
|
+
/**
|
|
105
|
+
* Apply smart defaults for limitBy based on which flags were provided
|
|
106
|
+
*/
|
|
107
|
+
static applySmartDefaults(merged, cliArgs, fileConfig) {
|
|
108
|
+
// If limitBy was explicitly provided in CLI or file, use it
|
|
109
|
+
if (cliArgs['limit-by'] || cliArgs.limitBy || fileConfig.limitBy) {
|
|
110
|
+
return merged;
|
|
111
|
+
}
|
|
112
|
+
// Determine if user explicitly provided time or iterations
|
|
113
|
+
const userProvidedTime = 'time' in cliArgs || 't' in cliArgs;
|
|
114
|
+
const userProvidedIterations = 'iterations' in cliArgs || 'i' in cliArgs;
|
|
115
|
+
let smartDefault;
|
|
116
|
+
if (userProvidedTime && userProvidedIterations) {
|
|
117
|
+
// Both provided → stop at whichever comes first
|
|
118
|
+
smartDefault = 'any';
|
|
119
|
+
}
|
|
120
|
+
else if (userProvidedTime) {
|
|
121
|
+
// Only time → limit by time
|
|
122
|
+
smartDefault = 'time';
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
// Only iterations (or neither) → limit by iterations
|
|
126
|
+
smartDefault = 'iterations';
|
|
127
|
+
}
|
|
128
|
+
return {
|
|
129
|
+
...merged,
|
|
130
|
+
limitBy: smartDefault,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Get default configuration values
|
|
135
|
+
*/
|
|
136
|
+
getDefaults() {
|
|
137
|
+
return { ...DEFAULT_CONFIG };
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Load configuration from various sources with precedence
|
|
141
|
+
*/
|
|
142
|
+
async load(configPath, cliArgs) {
|
|
143
|
+
try {
|
|
144
|
+
// Create a fresh explorer for each load to avoid module caching issues
|
|
145
|
+
const explorer = this.createExplorer();
|
|
146
|
+
// 1. Load config file using cosmiconfig
|
|
147
|
+
let result;
|
|
148
|
+
if (configPath) {
|
|
149
|
+
const resolvedPath = (0, node_path_1.resolve)(configPath);
|
|
150
|
+
// For .js/.mjs/.cjs files, add cache busting to the import to avoid Node's module cache
|
|
151
|
+
if (resolvedPath.endsWith('.js') ||
|
|
152
|
+
resolvedPath.endsWith('.mjs') ||
|
|
153
|
+
resolvedPath.endsWith('.cjs')) {
|
|
154
|
+
// Clear Node's module cache for this file to ensure fresh load
|
|
155
|
+
const moduleUrl = `${resolvedPath}?t=${Date.now()}`;
|
|
156
|
+
try {
|
|
157
|
+
const module = (await Promise.resolve(`${__rewriteRelativeImportExtension(moduleUrl)}`).then(s => __importStar(require(s))));
|
|
158
|
+
result = {
|
|
159
|
+
config: module.default || module,
|
|
160
|
+
filepath: resolvedPath,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
// Fall back to explorer.load if cache busting fails
|
|
165
|
+
result = await explorer.load(resolvedPath);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
result = await explorer.load(resolvedPath);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
result = await explorer.search();
|
|
174
|
+
}
|
|
175
|
+
const fileConfig = (result?.config || {});
|
|
176
|
+
// 2. Merge: defaults <- file <- CLI args
|
|
177
|
+
const normalizedCliArgs = cliArgs ? this.normalizeCliArgs(cliArgs) : {};
|
|
178
|
+
const merged = this.merge(DEFAULT_CONFIG, fileConfig, normalizedCliArgs);
|
|
179
|
+
// 2.5. Apply smart defaults for limitBy if not explicitly provided
|
|
180
|
+
const finalConfig = ModestBenchConfigurationManager.applySmartDefaults(merged, cliArgs || {}, fileConfig);
|
|
181
|
+
// 3. Validate final configuration
|
|
182
|
+
const validation = this.validate(finalConfig);
|
|
183
|
+
if (!validation.valid) {
|
|
184
|
+
throw new Error(`Configuration validation failed: ${validation.errors.map((e) => e.message).join(', ')}`);
|
|
185
|
+
}
|
|
186
|
+
return finalConfig;
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
throw new Error(`Failed to load configuration: ${error instanceof Error ? error.message : String(error)}`);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Merge multiple configuration objects with precedence
|
|
194
|
+
*/
|
|
195
|
+
merge(...configs) {
|
|
196
|
+
let result = {};
|
|
197
|
+
for (const config of configs) {
|
|
198
|
+
result = {
|
|
199
|
+
...result,
|
|
200
|
+
...config,
|
|
201
|
+
// Special handling for arrays - replace rather than merge
|
|
202
|
+
// Allow empty arrays to override defaults (for pattern defaulting in loader)
|
|
203
|
+
...(config.pattern !== undefined && {
|
|
204
|
+
pattern: Array.isArray(config.pattern)
|
|
205
|
+
? [...config.pattern]
|
|
206
|
+
: config.pattern,
|
|
207
|
+
}),
|
|
208
|
+
...(config.exclude && { exclude: [...config.exclude] }),
|
|
209
|
+
...(config.excludeTags && { excludeTags: [...config.excludeTags] }),
|
|
210
|
+
...(config.reporters && { reporters: [...config.reporters] }),
|
|
211
|
+
...(config.tags && { tags: [...config.tags] }),
|
|
212
|
+
// Deep merge for objects
|
|
213
|
+
...(config.reporterConfig && {
|
|
214
|
+
reporterConfig: {
|
|
215
|
+
...result.reporterConfig,
|
|
216
|
+
...config.reporterConfig,
|
|
217
|
+
},
|
|
218
|
+
}),
|
|
219
|
+
...(config.metadata && {
|
|
220
|
+
metadata: { ...result.metadata, ...config.metadata },
|
|
221
|
+
}),
|
|
222
|
+
...(config.thresholds && {
|
|
223
|
+
thresholds: { ...result.thresholds, ...config.thresholds },
|
|
224
|
+
}),
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
return { ...DEFAULT_CONFIG, ...result };
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Validate configuration object using Zod schema
|
|
231
|
+
*/
|
|
232
|
+
validate(config) {
|
|
233
|
+
const errors = [];
|
|
234
|
+
const warnings = [];
|
|
235
|
+
// Use Zod schema validation
|
|
236
|
+
const result = (0, schema_js_1.safeParseConfig)(config);
|
|
237
|
+
if (!result.success) {
|
|
238
|
+
// Convert Zod errors to ValidationError format
|
|
239
|
+
for (const issue of result.error.issues) {
|
|
240
|
+
const path = issue.path.join('.');
|
|
241
|
+
errors.push({
|
|
242
|
+
code: `INVALID_${path.toUpperCase().replace(/\./g, '_') || 'CONFIG'}`,
|
|
243
|
+
file: 'configuration',
|
|
244
|
+
message: `${path ? `${path}: ` : ''}${issue.message}`,
|
|
245
|
+
severity: 'error',
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
// Additional logical validations and warnings
|
|
250
|
+
if (result.success) {
|
|
251
|
+
const validConfig = result.data;
|
|
252
|
+
// Warn about empty reporters
|
|
253
|
+
if (validConfig.reporters.length === 0) {
|
|
254
|
+
warnings.push({
|
|
255
|
+
code: 'NO_REPORTERS',
|
|
256
|
+
file: 'configuration',
|
|
257
|
+
message: 'no reporters specified, using default human reporter',
|
|
258
|
+
severity: 'warning',
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
// Warn about potentially long runtime
|
|
262
|
+
if (validConfig.iterations > 1000 && validConfig.time > 60000) {
|
|
263
|
+
warnings.push({
|
|
264
|
+
code: 'LONG_RUNTIME_WARNING',
|
|
265
|
+
file: 'configuration',
|
|
266
|
+
message: 'high iterations and time values may result in very long benchmark runs',
|
|
267
|
+
severity: 'warning',
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
return {
|
|
272
|
+
errors,
|
|
273
|
+
files: ['configuration'],
|
|
274
|
+
valid: errors.length === 0,
|
|
275
|
+
warnings,
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Create a cosmiconfig explorer for loading configuration files
|
|
280
|
+
*/
|
|
281
|
+
createExplorer() {
|
|
282
|
+
return (0, cosmiconfig_1.cosmiconfig)('modestbench', {
|
|
283
|
+
cache: false, // Disable caching to prevent cross-contamination between different config files
|
|
284
|
+
loaders: {
|
|
285
|
+
'.ts': async (filepath) => {
|
|
286
|
+
// Use cosmiconfig-typescript-loader to load TypeScript files
|
|
287
|
+
// This works without tsx in the import chain
|
|
288
|
+
const { TypeScriptLoader: createTypeScriptLoader } = await Promise.resolve().then(() => __importStar(require('cosmiconfig-typescript-loader')));
|
|
289
|
+
const loader = createTypeScriptLoader();
|
|
290
|
+
const { readFile } = await Promise.resolve().then(() => __importStar(require('node:fs/promises')));
|
|
291
|
+
const content = await readFile(filepath, 'utf-8');
|
|
292
|
+
return (await loader(filepath, content));
|
|
293
|
+
},
|
|
294
|
+
},
|
|
295
|
+
searchPlaces: [
|
|
296
|
+
'package.json',
|
|
297
|
+
'.modestbenchrc',
|
|
298
|
+
'.modestbenchrc.json',
|
|
299
|
+
'.modestbenchrc.yaml',
|
|
300
|
+
'.modestbenchrc.yml',
|
|
301
|
+
'.modestbenchrc.js',
|
|
302
|
+
'.modestbenchrc.mjs',
|
|
303
|
+
'.modestbenchrc.cjs',
|
|
304
|
+
'modestbench.config.json',
|
|
305
|
+
'modestbench.config.yaml',
|
|
306
|
+
'modestbench.config.yml',
|
|
307
|
+
'modestbench.config.js',
|
|
308
|
+
'modestbench.config.mjs',
|
|
309
|
+
'modestbench.config.cjs',
|
|
310
|
+
'modestbench.config.ts',
|
|
311
|
+
],
|
|
312
|
+
});
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Normalize CLI arguments to configuration format
|
|
316
|
+
*/
|
|
317
|
+
normalizeCliArgs(cliArgs) {
|
|
318
|
+
const normalized = {};
|
|
319
|
+
// Map CLI argument names to config property names
|
|
320
|
+
const argMap = {
|
|
321
|
+
bail: 'bail',
|
|
322
|
+
exclude: 'exclude',
|
|
323
|
+
'exclude-tags': 'excludeTags',
|
|
324
|
+
excludeTags: 'excludeTags',
|
|
325
|
+
i: 'iterations',
|
|
326
|
+
iterations: 'iterations',
|
|
327
|
+
'limit-by': 'limitBy',
|
|
328
|
+
limitBy: 'limitBy',
|
|
329
|
+
o: 'outputDir',
|
|
330
|
+
output: 'outputDir',
|
|
331
|
+
'output-dir': 'outputDir',
|
|
332
|
+
pattern: 'pattern',
|
|
333
|
+
q: 'quiet',
|
|
334
|
+
quiet: 'quiet',
|
|
335
|
+
r: 'reporters',
|
|
336
|
+
reporters: 'reporters',
|
|
337
|
+
t: 'time',
|
|
338
|
+
tags: 'tags',
|
|
339
|
+
time: 'time',
|
|
340
|
+
timeout: 'timeout',
|
|
341
|
+
v: 'verbose',
|
|
342
|
+
verbose: 'verbose',
|
|
343
|
+
w: 'warmup',
|
|
344
|
+
warmup: 'warmup',
|
|
345
|
+
};
|
|
346
|
+
for (const [cliKey, configKey] of Object.entries(argMap)) {
|
|
347
|
+
if (cliKey in cliArgs && cliArgs[cliKey] !== undefined) {
|
|
348
|
+
const value = cliArgs[cliKey];
|
|
349
|
+
// Handle array arguments that might come as strings
|
|
350
|
+
if (configKey === 'exclude' ||
|
|
351
|
+
configKey === 'excludeTags' ||
|
|
352
|
+
configKey === 'reporters' ||
|
|
353
|
+
configKey === 'tags') {
|
|
354
|
+
if (typeof value === 'string') {
|
|
355
|
+
normalized[configKey] = value.split(',').map((s) => s.trim());
|
|
356
|
+
}
|
|
357
|
+
else if (Array.isArray(value)) {
|
|
358
|
+
normalized[configKey] = value;
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
else {
|
|
362
|
+
normalized[configKey] = value;
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
return normalized;
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
exports.ModestBenchConfigurationManager = ModestBenchConfigurationManager;
|
|
370
|
+
//# sourceMappingURL=manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/config/manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ModestBench Configuration Manager
|
|
3
|
+
*
|
|
4
|
+
* Handles loading, merging, and validation of configuration from multiple
|
|
5
|
+
* sources. Supports CLI arguments, config files (JSON/YAML/JS/TS), and
|
|
6
|
+
* defaults.
|
|
7
|
+
*/
|
|
8
|
+
import type { ConfigurationManager, ModestBenchConfig, ValidationResult } from "../types/index.cjs";
|
|
9
|
+
/**
|
|
10
|
+
* Configuration precedence order (highest to lowest):
|
|
11
|
+
*
|
|
12
|
+
* 1. CLI arguments
|
|
13
|
+
* 2. Config file
|
|
14
|
+
* 3. Default values
|
|
15
|
+
*/
|
|
16
|
+
export declare class ModestBenchConfigurationManager implements ConfigurationManager {
|
|
17
|
+
/**
|
|
18
|
+
* Apply smart defaults for limitBy based on which flags were provided
|
|
19
|
+
*/
|
|
20
|
+
static applySmartDefaults(merged: ModestBenchConfig, cliArgs: Record<string, unknown>, fileConfig: Partial<ModestBenchConfig>): ModestBenchConfig;
|
|
21
|
+
/**
|
|
22
|
+
* Get default configuration values
|
|
23
|
+
*/
|
|
24
|
+
getDefaults(): ModestBenchConfig;
|
|
25
|
+
/**
|
|
26
|
+
* Load configuration from various sources with precedence
|
|
27
|
+
*/
|
|
28
|
+
load(configPath?: string, cliArgs?: Record<string, unknown>): Promise<ModestBenchConfig>;
|
|
29
|
+
/**
|
|
30
|
+
* Merge multiple configuration objects with precedence
|
|
31
|
+
*/
|
|
32
|
+
merge(...configs: Partial<ModestBenchConfig>[]): ModestBenchConfig;
|
|
33
|
+
/**
|
|
34
|
+
* Validate configuration object using Zod schema
|
|
35
|
+
*/
|
|
36
|
+
validate(config: ModestBenchConfig): ValidationResult;
|
|
37
|
+
/**
|
|
38
|
+
* Create a cosmiconfig explorer for loading configuration files
|
|
39
|
+
*/
|
|
40
|
+
private createExplorer;
|
|
41
|
+
/**
|
|
42
|
+
* Normalize CLI arguments to configuration format
|
|
43
|
+
*/
|
|
44
|
+
private normalizeCliArgs;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/config/manager.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EACV,oBAAoB,EACpB,iBAAiB,EAEjB,gBAAgB,EAEjB,2BAA0B;AAkD3B;;;;;;GAMG;AACH,qBAAa,+BAAgC,YAAW,oBAAoB;IAC1E;;OAEG;WACW,kBAAkB,CAC9B,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,UAAU,EAAE,OAAO,CAAC,iBAAiB,CAAC,GACrC,iBAAiB;IA6BpB;;OAEG;IACH,WAAW,IAAI,iBAAiB;IAIhC;;OAEG;IACG,IAAI,CACR,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,iBAAiB,CAAC;IAkE7B;;OAEG;IACH,KAAK,CAAC,GAAG,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC,EAAE,GAAG,iBAAiB;IAqClE;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,iBAAiB,GAAG,gBAAgB;IAsDrD;;OAEG;IACH,OAAO,CAAC,cAAc;IAoCtB;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAyDzB"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ModestBench Configuration Manager
|
|
3
|
+
*
|
|
4
|
+
* Handles loading, merging, and validation of configuration from multiple
|
|
5
|
+
* sources. Supports CLI arguments, config files (JSON/YAML/JS/TS), and
|
|
6
|
+
* defaults.
|
|
7
|
+
*/
|
|
8
|
+
import type { ConfigurationManager, ModestBenchConfig, ValidationResult } from "../types/index.js";
|
|
9
|
+
/**
|
|
10
|
+
* Configuration precedence order (highest to lowest):
|
|
11
|
+
*
|
|
12
|
+
* 1. CLI arguments
|
|
13
|
+
* 2. Config file
|
|
14
|
+
* 3. Default values
|
|
15
|
+
*/
|
|
16
|
+
export declare class ModestBenchConfigurationManager implements ConfigurationManager {
|
|
17
|
+
/**
|
|
18
|
+
* Apply smart defaults for limitBy based on which flags were provided
|
|
19
|
+
*/
|
|
20
|
+
static applySmartDefaults(merged: ModestBenchConfig, cliArgs: Record<string, unknown>, fileConfig: Partial<ModestBenchConfig>): ModestBenchConfig;
|
|
21
|
+
/**
|
|
22
|
+
* Get default configuration values
|
|
23
|
+
*/
|
|
24
|
+
getDefaults(): ModestBenchConfig;
|
|
25
|
+
/**
|
|
26
|
+
* Load configuration from various sources with precedence
|
|
27
|
+
*/
|
|
28
|
+
load(configPath?: string, cliArgs?: Record<string, unknown>): Promise<ModestBenchConfig>;
|
|
29
|
+
/**
|
|
30
|
+
* Merge multiple configuration objects with precedence
|
|
31
|
+
*/
|
|
32
|
+
merge(...configs: Partial<ModestBenchConfig>[]): ModestBenchConfig;
|
|
33
|
+
/**
|
|
34
|
+
* Validate configuration object using Zod schema
|
|
35
|
+
*/
|
|
36
|
+
validate(config: ModestBenchConfig): ValidationResult;
|
|
37
|
+
/**
|
|
38
|
+
* Create a cosmiconfig explorer for loading configuration files
|
|
39
|
+
*/
|
|
40
|
+
private createExplorer;
|
|
41
|
+
/**
|
|
42
|
+
* Normalize CLI arguments to configuration format
|
|
43
|
+
*/
|
|
44
|
+
private normalizeCliArgs;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/config/manager.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EACV,oBAAoB,EACpB,iBAAiB,EAEjB,gBAAgB,EAEjB,0BAA0B;AAkD3B;;;;;;GAMG;AACH,qBAAa,+BAAgC,YAAW,oBAAoB;IAC1E;;OAEG;WACW,kBAAkB,CAC9B,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,UAAU,EAAE,OAAO,CAAC,iBAAiB,CAAC,GACrC,iBAAiB;IA6BpB;;OAEG;IACH,WAAW,IAAI,iBAAiB;IAIhC;;OAEG;IACG,IAAI,CACR,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,iBAAiB,CAAC;IAkE7B;;OAEG;IACH,KAAK,CAAC,GAAG,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC,EAAE,GAAG,iBAAiB;IAqClE;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,iBAAiB,GAAG,gBAAgB;IAsDrD;;OAEG;IACH,OAAO,CAAC,cAAc;IAoCtB;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAyDzB"}
|