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,299 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ModestBench Error Manager
|
|
3
|
+
*
|
|
4
|
+
* Handles execution errors with context tracking, categorization, and provides
|
|
5
|
+
* structured error information for graceful degradation.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Error code mappings for different error types and contexts
|
|
9
|
+
*/
|
|
10
|
+
const ERROR_CODES = {
|
|
11
|
+
// Benchmark file errors
|
|
12
|
+
BENCH_001: 'Benchmark file syntax error',
|
|
13
|
+
BENCH_002: 'Invalid benchmark structure',
|
|
14
|
+
BENCH_003: 'Missing dependency',
|
|
15
|
+
BENCH_004: 'Timeout exceeded',
|
|
16
|
+
BENCH_005: 'Memory limit exceeded',
|
|
17
|
+
// Configuration errors
|
|
18
|
+
CONFIG_001: 'Invalid configuration file',
|
|
19
|
+
CONFIG_002: 'Missing required option',
|
|
20
|
+
// Execution errors
|
|
21
|
+
EXEC_001: 'Task execution failed',
|
|
22
|
+
EXEC_002: 'Setup function failed',
|
|
23
|
+
EXEC_003: 'Teardown function failed',
|
|
24
|
+
EXEC_004: 'Memory leak detected',
|
|
25
|
+
// File system errors
|
|
26
|
+
FILE_001: 'File not found',
|
|
27
|
+
FILE_002: 'Permission denied',
|
|
28
|
+
FILE_003: 'Invalid file format',
|
|
29
|
+
// History storage errors
|
|
30
|
+
HIST_001: 'History data corruption',
|
|
31
|
+
HIST_002: 'Disk space insufficient',
|
|
32
|
+
HIST_003: 'Index corruption',
|
|
33
|
+
// System errors
|
|
34
|
+
SYS_001: 'Out of memory',
|
|
35
|
+
SYS_002: 'Process crashed',
|
|
36
|
+
SYS_003: 'System resource unavailable',
|
|
37
|
+
// Unknown errors
|
|
38
|
+
UNKNOWN: 'Unknown error',
|
|
39
|
+
// Validation errors
|
|
40
|
+
VALID_001: 'Schema validation failed',
|
|
41
|
+
VALID_002: 'Type validation failed',
|
|
42
|
+
VALID_003: 'Range validation failed',
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Recoverable error types that shouldn't stop entire execution
|
|
46
|
+
*/
|
|
47
|
+
const RECOVERABLE_ERRORS = new Set([
|
|
48
|
+
'BENCH_003', // Missing dependency (can skip specific benchmark)
|
|
49
|
+
'EXEC_001', // Task execution failed (can continue with other tasks)
|
|
50
|
+
'FILE_001', // File not found (can continue with other files)
|
|
51
|
+
'VALID_002', // Type validation failed (can skip invalid items)
|
|
52
|
+
'VALID_003', // Range validation failed (can skip invalid items)
|
|
53
|
+
]);
|
|
54
|
+
/**
|
|
55
|
+
* Default error manager implementation
|
|
56
|
+
*/
|
|
57
|
+
export class ModestBenchErrorManager {
|
|
58
|
+
errors = [];
|
|
59
|
+
handlers = [];
|
|
60
|
+
maxRecentErrors = 50;
|
|
61
|
+
/**
|
|
62
|
+
* Clear error history
|
|
63
|
+
*/
|
|
64
|
+
clearStats() {
|
|
65
|
+
this.errors = [];
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Format error for display
|
|
69
|
+
*/
|
|
70
|
+
formatError(error) {
|
|
71
|
+
const { code, context, message } = error;
|
|
72
|
+
let formatted = `[${code}] ${message}`;
|
|
73
|
+
// Add context information
|
|
74
|
+
const contextParts = [];
|
|
75
|
+
if (context.file) {
|
|
76
|
+
contextParts.push(`file: ${context.file}`);
|
|
77
|
+
}
|
|
78
|
+
if (context.suite) {
|
|
79
|
+
contextParts.push(`suite: ${context.suite}`);
|
|
80
|
+
}
|
|
81
|
+
if (context.task) {
|
|
82
|
+
contextParts.push(`task: ${context.task}`);
|
|
83
|
+
}
|
|
84
|
+
if (contextParts.length > 0) {
|
|
85
|
+
formatted += ` (${contextParts.join(', ')})`;
|
|
86
|
+
}
|
|
87
|
+
formatted += ` at ${context.timestamp.toISOString()}`;
|
|
88
|
+
return formatted;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Get error code for a given error
|
|
92
|
+
*/
|
|
93
|
+
getErrorCode(error, context) {
|
|
94
|
+
// Check for specific error patterns
|
|
95
|
+
const message = error.message.toLowerCase();
|
|
96
|
+
const name = error.name.toLowerCase();
|
|
97
|
+
// File system errors
|
|
98
|
+
if (message.includes('enoent') || message.includes('no such file')) {
|
|
99
|
+
return 'FILE_001';
|
|
100
|
+
}
|
|
101
|
+
if (message.includes('eacces') || message.includes('permission denied')) {
|
|
102
|
+
return 'FILE_002';
|
|
103
|
+
}
|
|
104
|
+
// Memory errors
|
|
105
|
+
if (message.includes('out of memory') || name.includes('rangeerror')) {
|
|
106
|
+
return 'SYS_001';
|
|
107
|
+
}
|
|
108
|
+
// Timeout errors
|
|
109
|
+
if (message.includes('timeout') || name.includes('timeout')) {
|
|
110
|
+
return 'BENCH_004';
|
|
111
|
+
}
|
|
112
|
+
// Syntax errors in benchmark files
|
|
113
|
+
if (name.includes('syntaxerror') && context.phase === 'loading') {
|
|
114
|
+
return 'BENCH_001';
|
|
115
|
+
}
|
|
116
|
+
// Validation errors
|
|
117
|
+
if (context.phase === 'validation') {
|
|
118
|
+
if (message.includes('schema') || message.includes('structure')) {
|
|
119
|
+
return 'VALID_001';
|
|
120
|
+
}
|
|
121
|
+
if (message.includes('type')) {
|
|
122
|
+
return 'VALID_002';
|
|
123
|
+
}
|
|
124
|
+
if (message.includes('range') || message.includes('limit')) {
|
|
125
|
+
return 'VALID_003';
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// Configuration errors
|
|
129
|
+
if (context.phase === 'discovery' && message.includes('config')) {
|
|
130
|
+
return 'CONFIG_001';
|
|
131
|
+
}
|
|
132
|
+
// Execution phase errors
|
|
133
|
+
if (context.phase === 'execution') {
|
|
134
|
+
if (context.task) {
|
|
135
|
+
return 'EXEC_001';
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
if (context.phase === 'setup') {
|
|
139
|
+
return 'EXEC_002';
|
|
140
|
+
}
|
|
141
|
+
if (context.phase === 'teardown') {
|
|
142
|
+
return 'EXEC_003';
|
|
143
|
+
}
|
|
144
|
+
// Storage errors
|
|
145
|
+
if (message.includes('disk') && message.includes('space')) {
|
|
146
|
+
return 'HIST_002';
|
|
147
|
+
}
|
|
148
|
+
if (message.includes('corrupt') || message.includes('invalid json')) {
|
|
149
|
+
return 'HIST_001';
|
|
150
|
+
}
|
|
151
|
+
// Default to unknown
|
|
152
|
+
return 'UNKNOWN';
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Get error count by phase
|
|
156
|
+
*/
|
|
157
|
+
getErrorCountByPhase(phase) {
|
|
158
|
+
return this.errors.filter((error) => error.context.phase === phase).length;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Get human-readable description for error code
|
|
162
|
+
*/
|
|
163
|
+
getErrorDescription(code) {
|
|
164
|
+
return ERROR_CODES[code] || 'Unknown error';
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Get all error handlers (for testing)
|
|
168
|
+
*/
|
|
169
|
+
getHandlers() {
|
|
170
|
+
return [...this.handlers];
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Get recent errors for a specific phase
|
|
174
|
+
*/
|
|
175
|
+
getRecentErrorsForPhase(phase, limit = 10) {
|
|
176
|
+
return this.errors
|
|
177
|
+
.filter((error) => error.context.phase === phase)
|
|
178
|
+
.slice(-limit);
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Get error statistics
|
|
182
|
+
*/
|
|
183
|
+
getStats() {
|
|
184
|
+
const byPhase = {
|
|
185
|
+
cleanup: 0,
|
|
186
|
+
discovery: 0,
|
|
187
|
+
execution: 0,
|
|
188
|
+
loading: 0,
|
|
189
|
+
reporting: 0,
|
|
190
|
+
setup: 0,
|
|
191
|
+
teardown: 0,
|
|
192
|
+
validation: 0,
|
|
193
|
+
};
|
|
194
|
+
const byType = {};
|
|
195
|
+
let firstError;
|
|
196
|
+
let lastError;
|
|
197
|
+
for (const error of this.errors) {
|
|
198
|
+
// Count by phase
|
|
199
|
+
byPhase[error.context.phase]++;
|
|
200
|
+
// Count by type (error code)
|
|
201
|
+
const type = error.code;
|
|
202
|
+
byType[type] = (byType[type] || 0) + 1;
|
|
203
|
+
// Track timestamps
|
|
204
|
+
const timestamp = error.processedAt;
|
|
205
|
+
if (!firstError || timestamp < firstError) {
|
|
206
|
+
firstError = timestamp;
|
|
207
|
+
}
|
|
208
|
+
if (!lastError || timestamp > lastError) {
|
|
209
|
+
lastError = timestamp;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
const result = {
|
|
213
|
+
byPhase,
|
|
214
|
+
byType,
|
|
215
|
+
...(firstError && { firstError }),
|
|
216
|
+
...(lastError && { lastError }),
|
|
217
|
+
recent: this.errors.slice(-this.maxRecentErrors),
|
|
218
|
+
total: this.errors.length,
|
|
219
|
+
};
|
|
220
|
+
return result;
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Handle an execution error
|
|
224
|
+
*/
|
|
225
|
+
handleError(error, context) {
|
|
226
|
+
const code = this.getErrorCode(error, context);
|
|
227
|
+
const recoverable = this.isRecoverableByCode(code);
|
|
228
|
+
const executionError = {
|
|
229
|
+
code,
|
|
230
|
+
context,
|
|
231
|
+
message: this.createMessage(error, context, code),
|
|
232
|
+
originalError: error,
|
|
233
|
+
processedAt: new Date(),
|
|
234
|
+
recoverable,
|
|
235
|
+
...(error.stack && { stack: error.stack }),
|
|
236
|
+
};
|
|
237
|
+
// Store error for statistics
|
|
238
|
+
this.errors.push(executionError);
|
|
239
|
+
// Keep only recent errors to prevent memory leaks
|
|
240
|
+
if (this.errors.length > this.maxRecentErrors * 2) {
|
|
241
|
+
this.errors = this.errors.slice(-this.maxRecentErrors);
|
|
242
|
+
}
|
|
243
|
+
// Notify handlers
|
|
244
|
+
for (const handler of this.handlers) {
|
|
245
|
+
try {
|
|
246
|
+
handler(executionError);
|
|
247
|
+
}
|
|
248
|
+
catch (handlerError) {
|
|
249
|
+
// Don't let handler errors break error handling
|
|
250
|
+
console.error('Error in error handler:', handlerError);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
return executionError;
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Check if an error is recoverable
|
|
257
|
+
*/
|
|
258
|
+
isRecoverable(error) {
|
|
259
|
+
return error.recoverable;
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Register error handler callback
|
|
263
|
+
*/
|
|
264
|
+
onError(handler) {
|
|
265
|
+
this.handlers.push(handler);
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Remove error handler
|
|
269
|
+
*/
|
|
270
|
+
removeHandler(handler) {
|
|
271
|
+
const index = this.handlers.indexOf(handler);
|
|
272
|
+
if (index >= 0) {
|
|
273
|
+
this.handlers.splice(index, 1);
|
|
274
|
+
return true;
|
|
275
|
+
}
|
|
276
|
+
return false;
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Create human-readable error message
|
|
280
|
+
*/
|
|
281
|
+
createMessage(error, context, code) {
|
|
282
|
+
const baseMessage = this.getErrorDescription(code);
|
|
283
|
+
const originalMessage = error.message;
|
|
284
|
+
// If the original message is more descriptive, use it
|
|
285
|
+
if (originalMessage &&
|
|
286
|
+
originalMessage !== baseMessage &&
|
|
287
|
+
!originalMessage.includes('[object')) {
|
|
288
|
+
return `${baseMessage}: ${originalMessage}`;
|
|
289
|
+
}
|
|
290
|
+
return baseMessage;
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Check if error is recoverable by code
|
|
294
|
+
*/
|
|
295
|
+
isRecoverableByCode(code) {
|
|
296
|
+
return RECOVERABLE_ERRORS.has(code);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
//# sourceMappingURL=error-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-manager.js","sourceRoot":"","sources":["../../src/core/error-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ModestBench File Loader
|
|
4
|
+
*
|
|
5
|
+
* Handles discovery, loading, and validation of benchmark files. Supports glob
|
|
6
|
+
* pattern matching and file structure validation.
|
|
7
|
+
*/
|
|
8
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
15
|
+
}) : (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
o[k2] = m[k];
|
|
18
|
+
}));
|
|
19
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
20
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
21
|
+
}) : function(o, v) {
|
|
22
|
+
o["default"] = v;
|
|
23
|
+
});
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
|
|
42
|
+
if (typeof path === "string" && /^\.\.?\//.test(path)) {
|
|
43
|
+
return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
|
|
44
|
+
return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
return path;
|
|
48
|
+
};
|
|
49
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
50
|
+
exports.BenchmarkFileLoader = void 0;
|
|
51
|
+
const glob_1 = require("glob");
|
|
52
|
+
const promises_1 = require("node:fs/promises");
|
|
53
|
+
const node_path_1 = require("node:path");
|
|
54
|
+
const constants_js_1 = require("../constants.cjs");
|
|
55
|
+
const benchmark_schema_js_1 = require("./benchmark-schema.cjs");
|
|
56
|
+
/**
|
|
57
|
+
* Implementation of FileLoader for benchmark files
|
|
58
|
+
*/
|
|
59
|
+
class BenchmarkFileLoader {
|
|
60
|
+
supportedExtensions = constants_js_1.BENCHMARK_FILE_EXTENSIONS;
|
|
61
|
+
/**
|
|
62
|
+
* Discover benchmark files using glob patterns or explicit file paths
|
|
63
|
+
*/
|
|
64
|
+
async discover(pattern, exclude = []) {
|
|
65
|
+
try {
|
|
66
|
+
let patterns = Array.isArray(pattern) ? pattern : [pattern];
|
|
67
|
+
// Handle empty patterns - use sensible defaults
|
|
68
|
+
if (patterns.length === 0) {
|
|
69
|
+
patterns = [
|
|
70
|
+
`*${constants_js_1.BENCHMARK_FILE_PATTERN}`, // top-level current directory
|
|
71
|
+
`bench/*${constants_js_1.BENCHMARK_FILE_PATTERN}`, // top-level bench/ directory
|
|
72
|
+
];
|
|
73
|
+
}
|
|
74
|
+
// Expand directory paths to recursive glob patterns
|
|
75
|
+
const expandedPatterns = [];
|
|
76
|
+
for (const p of patterns) {
|
|
77
|
+
try {
|
|
78
|
+
const stats = await (0, promises_1.stat)(p);
|
|
79
|
+
if (stats.isDirectory()) {
|
|
80
|
+
// Directory: search recursively
|
|
81
|
+
expandedPatterns.push(`${p}/**/*${constants_js_1.BENCHMARK_FILE_PATTERN}`);
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
// File or doesn't exist: use as-is (glob will handle it)
|
|
85
|
+
expandedPatterns.push(p);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
// Path doesn't exist, treat as glob pattern
|
|
90
|
+
expandedPatterns.push(p);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
const allFiles = new Set();
|
|
94
|
+
// Process each pattern
|
|
95
|
+
for (const p of expandedPatterns) {
|
|
96
|
+
const files = await (0, glob_1.glob)(p, {
|
|
97
|
+
absolute: true,
|
|
98
|
+
ignore: exclude,
|
|
99
|
+
nodir: true,
|
|
100
|
+
});
|
|
101
|
+
// Add discovered files to the set (automatic deduplication)
|
|
102
|
+
for (const file of files) {
|
|
103
|
+
allFiles.add(file);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// Filter to supported file extensions
|
|
107
|
+
const supportedFiles = Array.from(allFiles).filter((file) => {
|
|
108
|
+
const ext = (0, node_path_1.extname)(file);
|
|
109
|
+
return this.supportedExtensions.has(ext);
|
|
110
|
+
});
|
|
111
|
+
return supportedFiles.sort();
|
|
112
|
+
}
|
|
113
|
+
catch (error) {
|
|
114
|
+
throw new Error(`File discovery failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Load a single benchmark file
|
|
119
|
+
*/
|
|
120
|
+
async load(filePath) {
|
|
121
|
+
try {
|
|
122
|
+
// Basic file checks (existence, extension)
|
|
123
|
+
const basicValidation = await this.validate(filePath);
|
|
124
|
+
if (!basicValidation.valid) {
|
|
125
|
+
throw new Error(`Invalid benchmark file: ${basicValidation.errors.map((e) => e.message).join(', ')}`);
|
|
126
|
+
}
|
|
127
|
+
// Read file content
|
|
128
|
+
const content = await (0, promises_1.readFile)(filePath, 'utf-8');
|
|
129
|
+
// Get file stats for metadata
|
|
130
|
+
const stats = await (0, promises_1.stat)(filePath);
|
|
131
|
+
// Load the module using dynamic import
|
|
132
|
+
const ext = (0, node_path_1.extname)(filePath);
|
|
133
|
+
let module;
|
|
134
|
+
if (ext === '.ts' || ext === '.mts' || ext === '.cts') {
|
|
135
|
+
// For TypeScript files, use cosmiconfig-typescript-loader
|
|
136
|
+
const { TypeScriptLoader: createTypeScriptLoader } = await Promise.resolve().then(() => __importStar(require('cosmiconfig-typescript-loader')));
|
|
137
|
+
const loader = createTypeScriptLoader();
|
|
138
|
+
module = (await loader(filePath, content));
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
// Use native dynamic import for JavaScript files with cache busting
|
|
142
|
+
// Add timestamp to prevent module caching issues across multiple loads
|
|
143
|
+
const timestamp = Date.now();
|
|
144
|
+
module = (await Promise.resolve(`${__rewriteRelativeImportExtension(`${filePath}?t=${timestamp}`)}`).then(s => __importStar(require(s))));
|
|
145
|
+
}
|
|
146
|
+
const exports = module.default || module;
|
|
147
|
+
// Validate the loaded exports structure with Zod
|
|
148
|
+
const structureValidation = this.validateExports(filePath, exports);
|
|
149
|
+
if (!structureValidation.valid || !structureValidation.data) {
|
|
150
|
+
throw new Error(`Invalid benchmark structure: ${structureValidation.errors.map((e) => e.message).join(', ')}`);
|
|
151
|
+
}
|
|
152
|
+
// Use the transformed/normalized data from Zod
|
|
153
|
+
// (this ensures shorthand functions are properly wrapped)
|
|
154
|
+
const normalizedExports = structureValidation.data;
|
|
155
|
+
// Analyze exports for metadata (simplified - structure already validated)
|
|
156
|
+
const hasDefaultExport = module.default !== undefined;
|
|
157
|
+
const exportNames = Object.keys(module);
|
|
158
|
+
return {
|
|
159
|
+
content,
|
|
160
|
+
exports: normalizedExports,
|
|
161
|
+
filePath,
|
|
162
|
+
metadata: {
|
|
163
|
+
exportNames,
|
|
164
|
+
hasDefaultExport,
|
|
165
|
+
mtime: stats.mtime,
|
|
166
|
+
size: stats.size,
|
|
167
|
+
},
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
catch (error) {
|
|
171
|
+
throw new Error(`Failed to load file ${filePath}: ${error instanceof Error ? error.message : String(error)}`);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Load multiple files in parallel
|
|
176
|
+
*/
|
|
177
|
+
async loadAll(filePaths) {
|
|
178
|
+
try {
|
|
179
|
+
const loadPromises = filePaths.map((filePath) => this.load(filePath));
|
|
180
|
+
return await Promise.all(loadPromises);
|
|
181
|
+
}
|
|
182
|
+
catch (error) {
|
|
183
|
+
throw new Error(`Failed to load files: ${error instanceof Error ? error.message : String(error)}`);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Validate benchmark file (basic checks only - file existence and extension)
|
|
188
|
+
* Structure validation happens after loading in the load() method
|
|
189
|
+
*/
|
|
190
|
+
async validate(filePath) {
|
|
191
|
+
const errors = [];
|
|
192
|
+
const warnings = [];
|
|
193
|
+
try {
|
|
194
|
+
// Check file existence
|
|
195
|
+
try {
|
|
196
|
+
await (0, promises_1.access)(filePath);
|
|
197
|
+
}
|
|
198
|
+
catch {
|
|
199
|
+
errors.push({
|
|
200
|
+
code: 'FILE_NOT_FOUND',
|
|
201
|
+
file: filePath,
|
|
202
|
+
message: 'File does not exist',
|
|
203
|
+
severity: 'error',
|
|
204
|
+
});
|
|
205
|
+
return { errors, files: [], valid: false, warnings };
|
|
206
|
+
}
|
|
207
|
+
// Check file extension
|
|
208
|
+
const ext = (0, node_path_1.extname)(filePath);
|
|
209
|
+
if (!this.supportedExtensions.has(ext)) {
|
|
210
|
+
errors.push({
|
|
211
|
+
code: 'UNSUPPORTED_EXTENSION',
|
|
212
|
+
file: filePath,
|
|
213
|
+
message: `Unsupported file extension: ${ext}. Supported extensions: ${Array.from(this.supportedExtensions).join(', ')}`,
|
|
214
|
+
severity: 'error',
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
return {
|
|
218
|
+
errors,
|
|
219
|
+
files: [filePath],
|
|
220
|
+
valid: errors.length === 0,
|
|
221
|
+
warnings,
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
catch (error) {
|
|
225
|
+
errors.push({
|
|
226
|
+
code: 'VALIDATION_ERROR',
|
|
227
|
+
file: filePath,
|
|
228
|
+
message: `Validation failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
229
|
+
severity: 'error',
|
|
230
|
+
});
|
|
231
|
+
return {
|
|
232
|
+
errors,
|
|
233
|
+
files: [filePath],
|
|
234
|
+
valid: false,
|
|
235
|
+
warnings,
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Watch for file changes (placeholder implementation)
|
|
241
|
+
*/
|
|
242
|
+
watch(_pattern, _callback) {
|
|
243
|
+
// TODO: Implement file watching with chokidar or similar
|
|
244
|
+
// For now, return a no-op watcher
|
|
245
|
+
return {
|
|
246
|
+
close() {
|
|
247
|
+
// No-op
|
|
248
|
+
},
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Validate the structure of loaded exports using Zod schema Returns the
|
|
253
|
+
* transformed/normalized data if validation succeeds
|
|
254
|
+
*/
|
|
255
|
+
validateExports(filePath, exports) {
|
|
256
|
+
const errors = [];
|
|
257
|
+
const warnings = [];
|
|
258
|
+
try {
|
|
259
|
+
const result = benchmark_schema_js_1.benchmarkFileSchema.safeParse(exports);
|
|
260
|
+
if (!result.success) {
|
|
261
|
+
for (const issue of result.error.issues) {
|
|
262
|
+
const path = issue.path.length > 0 ? `${issue.path.join('.')}: ` : '';
|
|
263
|
+
errors.push({
|
|
264
|
+
code: 'INVALID_STRUCTURE',
|
|
265
|
+
file: filePath,
|
|
266
|
+
message: `${path}${issue.message}`,
|
|
267
|
+
severity: 'error',
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
return { errors, valid: false, warnings };
|
|
271
|
+
}
|
|
272
|
+
// Return the transformed data (with shorthand functions normalized)
|
|
273
|
+
return { data: result.data, errors, valid: true, warnings };
|
|
274
|
+
}
|
|
275
|
+
catch (error) {
|
|
276
|
+
errors.push({
|
|
277
|
+
code: 'VALIDATION_ERROR',
|
|
278
|
+
file: filePath,
|
|
279
|
+
message: `Structure validation failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
280
|
+
severity: 'error',
|
|
281
|
+
});
|
|
282
|
+
return { errors, valid: false, warnings };
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
exports.BenchmarkFileLoader = BenchmarkFileLoader;
|
|
287
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/core/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ModestBench File Loader
|
|
3
|
+
*
|
|
4
|
+
* Handles discovery, loading, and validation of benchmark files. Supports glob
|
|
5
|
+
* pattern matching and file structure validation.
|
|
6
|
+
*/
|
|
7
|
+
import type { BenchmarkFile, FileLoader, ValidationResult } from "../types/index.cjs";
|
|
8
|
+
/**
|
|
9
|
+
* File change notification for watch functionality
|
|
10
|
+
*/
|
|
11
|
+
interface FileChange {
|
|
12
|
+
readonly filePath: string;
|
|
13
|
+
readonly timestamp: Date;
|
|
14
|
+
readonly type: 'added' | 'deleted' | 'modified';
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* File watcher interface
|
|
18
|
+
*/
|
|
19
|
+
interface FileWatcher {
|
|
20
|
+
close(): void;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Implementation of FileLoader for benchmark files
|
|
24
|
+
*/
|
|
25
|
+
export declare class BenchmarkFileLoader implements FileLoader {
|
|
26
|
+
private readonly supportedExtensions;
|
|
27
|
+
/**
|
|
28
|
+
* Discover benchmark files using glob patterns or explicit file paths
|
|
29
|
+
*/
|
|
30
|
+
discover(pattern: string | string[], exclude?: string[]): Promise<string[]>;
|
|
31
|
+
/**
|
|
32
|
+
* Load a single benchmark file
|
|
33
|
+
*/
|
|
34
|
+
load(filePath: string): Promise<BenchmarkFile>;
|
|
35
|
+
/**
|
|
36
|
+
* Load multiple files in parallel
|
|
37
|
+
*/
|
|
38
|
+
loadAll(filePaths: string[]): Promise<BenchmarkFile[]>;
|
|
39
|
+
/**
|
|
40
|
+
* Validate benchmark file (basic checks only - file existence and extension)
|
|
41
|
+
* Structure validation happens after loading in the load() method
|
|
42
|
+
*/
|
|
43
|
+
validate(filePath: string): Promise<ValidationResult>;
|
|
44
|
+
/**
|
|
45
|
+
* Watch for file changes (placeholder implementation)
|
|
46
|
+
*/
|
|
47
|
+
watch(_pattern: string, _callback: (changes: FileChange[]) => void): FileWatcher;
|
|
48
|
+
/**
|
|
49
|
+
* Validate the structure of loaded exports using Zod schema Returns the
|
|
50
|
+
* transformed/normalized data if validation succeeds
|
|
51
|
+
*/
|
|
52
|
+
private validateExports;
|
|
53
|
+
}
|
|
54
|
+
export {};
|
|
55
|
+
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/core/loader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAEV,aAAa,EACb,UAAU,EAEV,gBAAgB,EAEjB,2BAA0B;AAQ3B;;GAEG;AACH,UAAU,UAAU;IAClB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,UAAU,CAAC;CACjD;AAED;;GAEG;AACH,UAAU,WAAW;IACnB,KAAK,IAAI,IAAI,CAAC;CACf;AAED;;GAEG;AACH,qBAAa,mBAAoB,YAAW,UAAU;IACpD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA6B;IAEjE;;OAEG;IACG,QAAQ,CACZ,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAC1B,OAAO,GAAE,MAAM,EAAO,GACrB,OAAO,CAAC,MAAM,EAAE,CAAC;IA4DpB;;OAEG;IACG,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IA4EpD;;OAEG;IACG,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAW5D;;;OAGG;IACG,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAoD3D;;OAEG;IACH,KAAK,CACH,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,IAAI,GACzC,WAAW;IAUd;;;OAGG;IACH,OAAO,CAAC,eAAe;CAwCxB"}
|