driftdetect-core 0.1.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/dist/analyzers/ast-analyzer.d.ts +251 -0
- package/dist/analyzers/ast-analyzer.d.ts.map +1 -0
- package/dist/analyzers/ast-analyzer.js +548 -0
- package/dist/analyzers/ast-analyzer.js.map +1 -0
- package/dist/analyzers/flow-analyzer.d.ts +241 -0
- package/dist/analyzers/flow-analyzer.d.ts.map +1 -0
- package/dist/analyzers/flow-analyzer.js +1219 -0
- package/dist/analyzers/flow-analyzer.js.map +1 -0
- package/dist/analyzers/index.d.ts +18 -0
- package/dist/analyzers/index.d.ts.map +1 -0
- package/dist/analyzers/index.js +19 -0
- package/dist/analyzers/index.js.map +1 -0
- package/dist/analyzers/semantic-analyzer.d.ts +252 -0
- package/dist/analyzers/semantic-analyzer.d.ts.map +1 -0
- package/dist/analyzers/semantic-analyzer.js +1182 -0
- package/dist/analyzers/semantic-analyzer.js.map +1 -0
- package/dist/analyzers/type-analyzer.d.ts +289 -0
- package/dist/analyzers/type-analyzer.d.ts.map +1 -0
- package/dist/analyzers/type-analyzer.js +1269 -0
- package/dist/analyzers/type-analyzer.js.map +1 -0
- package/dist/analyzers/types.d.ts +537 -0
- package/dist/analyzers/types.d.ts.map +1 -0
- package/dist/analyzers/types.js +11 -0
- package/dist/analyzers/types.js.map +1 -0
- package/dist/config/config-loader.d.ts +166 -0
- package/dist/config/config-loader.d.ts.map +1 -0
- package/dist/config/config-loader.js +429 -0
- package/dist/config/config-loader.js.map +1 -0
- package/dist/config/config-validator.d.ts +204 -0
- package/dist/config/config-validator.d.ts.map +1 -0
- package/dist/config/config-validator.js +632 -0
- package/dist/config/config-validator.js.map +1 -0
- package/dist/config/defaults.d.ts +8 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +26 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/index.d.ts +10 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +10 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/types.d.ts +47 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +7 -0
- package/dist/config/types.js.map +1 -0
- package/dist/index.d.ts +37 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +39 -0
- package/dist/index.js.map +1 -0
- package/dist/manifest/exporter.d.ts +21 -0
- package/dist/manifest/exporter.d.ts.map +1 -0
- package/dist/manifest/exporter.js +339 -0
- package/dist/manifest/exporter.js.map +1 -0
- package/dist/manifest/index.d.ts +14 -0
- package/dist/manifest/index.d.ts.map +1 -0
- package/dist/manifest/index.js +15 -0
- package/dist/manifest/index.js.map +1 -0
- package/dist/manifest/manifest-store.d.ts +111 -0
- package/dist/manifest/manifest-store.d.ts.map +1 -0
- package/dist/manifest/manifest-store.js +418 -0
- package/dist/manifest/manifest-store.js.map +1 -0
- package/dist/manifest/types.d.ts +238 -0
- package/dist/manifest/types.d.ts.map +1 -0
- package/dist/manifest/types.js +11 -0
- package/dist/manifest/types.js.map +1 -0
- package/dist/matcher/confidence-scorer.d.ts +188 -0
- package/dist/matcher/confidence-scorer.d.ts.map +1 -0
- package/dist/matcher/confidence-scorer.js +302 -0
- package/dist/matcher/confidence-scorer.js.map +1 -0
- package/dist/matcher/index.d.ts +24 -0
- package/dist/matcher/index.d.ts.map +1 -0
- package/dist/matcher/index.js +26 -0
- package/dist/matcher/index.js.map +1 -0
- package/dist/matcher/outlier-detector.d.ts +252 -0
- package/dist/matcher/outlier-detector.d.ts.map +1 -0
- package/dist/matcher/outlier-detector.js +544 -0
- package/dist/matcher/outlier-detector.js.map +1 -0
- package/dist/matcher/pattern-matcher.d.ts +169 -0
- package/dist/matcher/pattern-matcher.d.ts.map +1 -0
- package/dist/matcher/pattern-matcher.js +692 -0
- package/dist/matcher/pattern-matcher.js.map +1 -0
- package/dist/matcher/types.d.ts +476 -0
- package/dist/matcher/types.d.ts.map +1 -0
- package/dist/matcher/types.js +36 -0
- package/dist/matcher/types.js.map +1 -0
- package/dist/parsers/base-parser.d.ts +282 -0
- package/dist/parsers/base-parser.d.ts.map +1 -0
- package/dist/parsers/base-parser.js +421 -0
- package/dist/parsers/base-parser.js.map +1 -0
- package/dist/parsers/css-parser.d.ts +225 -0
- package/dist/parsers/css-parser.d.ts.map +1 -0
- package/dist/parsers/css-parser.js +477 -0
- package/dist/parsers/css-parser.js.map +1 -0
- package/dist/parsers/index.d.ts +15 -0
- package/dist/parsers/index.d.ts.map +1 -0
- package/dist/parsers/index.js +15 -0
- package/dist/parsers/index.js.map +1 -0
- package/dist/parsers/json-parser.d.ts +219 -0
- package/dist/parsers/json-parser.d.ts.map +1 -0
- package/dist/parsers/json-parser.js +602 -0
- package/dist/parsers/json-parser.js.map +1 -0
- package/dist/parsers/markdown-parser.d.ts +276 -0
- package/dist/parsers/markdown-parser.d.ts.map +1 -0
- package/dist/parsers/markdown-parser.js +731 -0
- package/dist/parsers/markdown-parser.js.map +1 -0
- package/dist/parsers/parser-manager.d.ts +294 -0
- package/dist/parsers/parser-manager.d.ts.map +1 -0
- package/dist/parsers/parser-manager.js +738 -0
- package/dist/parsers/parser-manager.js.map +1 -0
- package/dist/parsers/python-parser.d.ts +204 -0
- package/dist/parsers/python-parser.d.ts.map +1 -0
- package/dist/parsers/python-parser.js +517 -0
- package/dist/parsers/python-parser.js.map +1 -0
- package/dist/parsers/types.d.ts +43 -0
- package/dist/parsers/types.d.ts.map +1 -0
- package/dist/parsers/types.js +7 -0
- package/dist/parsers/types.js.map +1 -0
- package/dist/parsers/typescript-parser.d.ts +264 -0
- package/dist/parsers/typescript-parser.d.ts.map +1 -0
- package/dist/parsers/typescript-parser.js +658 -0
- package/dist/parsers/typescript-parser.js.map +1 -0
- package/dist/rules/evaluator.d.ts +305 -0
- package/dist/rules/evaluator.d.ts.map +1 -0
- package/dist/rules/evaluator.js +579 -0
- package/dist/rules/evaluator.js.map +1 -0
- package/dist/rules/index.d.ts +13 -0
- package/dist/rules/index.d.ts.map +1 -0
- package/dist/rules/index.js +13 -0
- package/dist/rules/index.js.map +1 -0
- package/dist/rules/quick-fix-generator.d.ts +334 -0
- package/dist/rules/quick-fix-generator.d.ts.map +1 -0
- package/dist/rules/quick-fix-generator.js +1075 -0
- package/dist/rules/quick-fix-generator.js.map +1 -0
- package/dist/rules/rule-engine.d.ts +241 -0
- package/dist/rules/rule-engine.d.ts.map +1 -0
- package/dist/rules/rule-engine.js +585 -0
- package/dist/rules/rule-engine.js.map +1 -0
- package/dist/rules/severity-manager.d.ts +394 -0
- package/dist/rules/severity-manager.d.ts.map +1 -0
- package/dist/rules/severity-manager.js +619 -0
- package/dist/rules/severity-manager.js.map +1 -0
- package/dist/rules/types.d.ts +370 -0
- package/dist/rules/types.d.ts.map +1 -0
- package/dist/rules/types.js +133 -0
- package/dist/rules/types.js.map +1 -0
- package/dist/rules/variant-manager.d.ts +388 -0
- package/dist/rules/variant-manager.d.ts.map +1 -0
- package/dist/rules/variant-manager.js +777 -0
- package/dist/rules/variant-manager.js.map +1 -0
- package/dist/scanner/change-detector.d.ts +164 -0
- package/dist/scanner/change-detector.d.ts.map +1 -0
- package/dist/scanner/change-detector.js +263 -0
- package/dist/scanner/change-detector.js.map +1 -0
- package/dist/scanner/dependency-graph.d.ts +270 -0
- package/dist/scanner/dependency-graph.d.ts.map +1 -0
- package/dist/scanner/dependency-graph.js +436 -0
- package/dist/scanner/dependency-graph.js.map +1 -0
- package/dist/scanner/file-walker.d.ts +127 -0
- package/dist/scanner/file-walker.d.ts.map +1 -0
- package/dist/scanner/file-walker.js +526 -0
- package/dist/scanner/file-walker.js.map +1 -0
- package/dist/scanner/index.d.ts +12 -0
- package/dist/scanner/index.d.ts.map +1 -0
- package/dist/scanner/index.js +12 -0
- package/dist/scanner/index.js.map +1 -0
- package/dist/scanner/types.d.ts +218 -0
- package/dist/scanner/types.d.ts.map +1 -0
- package/dist/scanner/types.js +10 -0
- package/dist/scanner/types.js.map +1 -0
- package/dist/scanner/worker-pool.d.ts +317 -0
- package/dist/scanner/worker-pool.d.ts.map +1 -0
- package/dist/scanner/worker-pool.js +571 -0
- package/dist/scanner/worker-pool.js.map +1 -0
- package/dist/store/cache-manager.d.ts +179 -0
- package/dist/store/cache-manager.d.ts.map +1 -0
- package/dist/store/cache-manager.js +391 -0
- package/dist/store/cache-manager.js.map +1 -0
- package/dist/store/history-store.d.ts +314 -0
- package/dist/store/history-store.d.ts.map +1 -0
- package/dist/store/history-store.js +707 -0
- package/dist/store/history-store.js.map +1 -0
- package/dist/store/index.d.ts +20 -0
- package/dist/store/index.d.ts.map +1 -0
- package/dist/store/index.js +26 -0
- package/dist/store/index.js.map +1 -0
- package/dist/store/lock-file-manager.d.ts +202 -0
- package/dist/store/lock-file-manager.d.ts.map +1 -0
- package/dist/store/lock-file-manager.js +475 -0
- package/dist/store/lock-file-manager.js.map +1 -0
- package/dist/store/pattern-store.d.ts +289 -0
- package/dist/store/pattern-store.d.ts.map +1 -0
- package/dist/store/pattern-store.js +936 -0
- package/dist/store/pattern-store.js.map +1 -0
- package/dist/store/schema-validator.d.ts +159 -0
- package/dist/store/schema-validator.d.ts.map +1 -0
- package/dist/store/schema-validator.js +1096 -0
- package/dist/store/schema-validator.js.map +1 -0
- package/dist/store/types.d.ts +585 -0
- package/dist/store/types.d.ts.map +1 -0
- package/dist/store/types.js +82 -0
- package/dist/store/types.js.map +1 -0
- package/dist/types/analysis.d.ts +19 -0
- package/dist/types/analysis.d.ts.map +1 -0
- package/dist/types/analysis.js +5 -0
- package/dist/types/analysis.js.map +1 -0
- package/dist/types/common.d.ts +7 -0
- package/dist/types/common.d.ts.map +1 -0
- package/dist/types/common.js +5 -0
- package/dist/types/common.js.map +1 -0
- package/dist/types/index.d.ts +12 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +10 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/patterns.d.ts +40 -0
- package/dist/types/patterns.d.ts.map +1 -0
- package/dist/types/patterns.js +7 -0
- package/dist/types/patterns.js.map +1 -0
- package/dist/types/violations.d.ts +7 -0
- package/dist/types/violations.d.ts.map +1 -0
- package/dist/types/violations.js +7 -0
- package/dist/types/violations.js.map +1 -0
- package/package.json +46 -0
|
@@ -0,0 +1,632 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config Validator - Configuration validation against JSON schema
|
|
3
|
+
*
|
|
4
|
+
* Provides comprehensive validation for DriftConfig objects with
|
|
5
|
+
* helpful, actionable error messages for invalid configurations.
|
|
6
|
+
*
|
|
7
|
+
* @requirements 36.6 - Configuration validation SHALL reject invalid values with helpful error messages
|
|
8
|
+
* @requirements 36.7 - Configuration SHALL support JSON schema validation
|
|
9
|
+
*/
|
|
10
|
+
// ============================================================================
|
|
11
|
+
// Constants
|
|
12
|
+
// ============================================================================
|
|
13
|
+
/** Valid AI provider values */
|
|
14
|
+
const VALID_AI_PROVIDERS = ['openai', 'anthropic', 'ollama'];
|
|
15
|
+
/** Valid CI fail-on values */
|
|
16
|
+
const VALID_CI_FAIL_ON = ['error', 'warning', 'none'];
|
|
17
|
+
/** Valid report format values */
|
|
18
|
+
const VALID_REPORT_FORMATS = ['json', 'text', 'github', 'gitlab'];
|
|
19
|
+
/** Valid severity values */
|
|
20
|
+
const VALID_SEVERITIES = ['error', 'warning', 'info', 'hint'];
|
|
21
|
+
/**
|
|
22
|
+
* Custom error class for configuration validation failures
|
|
23
|
+
*
|
|
24
|
+
* @requirements 36.6 - Provide helpful error messages
|
|
25
|
+
*/
|
|
26
|
+
export class ConfigValidationException extends Error {
|
|
27
|
+
errors;
|
|
28
|
+
constructor(message, errors) {
|
|
29
|
+
super(message);
|
|
30
|
+
this.errors = errors;
|
|
31
|
+
this.name = 'ConfigValidationException';
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Format errors as a human-readable string with suggestions
|
|
35
|
+
*/
|
|
36
|
+
formatErrors() {
|
|
37
|
+
if (this.errors.length === 0)
|
|
38
|
+
return 'No errors';
|
|
39
|
+
return this.errors
|
|
40
|
+
.map((e) => {
|
|
41
|
+
let msg = ` - ${e.path}: ${e.message}`;
|
|
42
|
+
if (e.expected)
|
|
43
|
+
msg += `\n Expected: ${e.expected}`;
|
|
44
|
+
if (e.actual !== undefined)
|
|
45
|
+
msg += `\n Got: ${JSON.stringify(e.actual)}`;
|
|
46
|
+
if (e.suggestion)
|
|
47
|
+
msg += `\n Suggestion: ${e.suggestion}`;
|
|
48
|
+
return msg;
|
|
49
|
+
})
|
|
50
|
+
.join('\n\n');
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Get a summary of all errors
|
|
54
|
+
*/
|
|
55
|
+
getSummary() {
|
|
56
|
+
const errorCount = this.errors.length;
|
|
57
|
+
const paths = this.errors.map((e) => e.path).join(', ');
|
|
58
|
+
return `${errorCount} validation error(s) in: ${paths}`;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// ============================================================================
|
|
62
|
+
// Helper Validation Functions
|
|
63
|
+
// ============================================================================
|
|
64
|
+
/**
|
|
65
|
+
* Check if a value is a non-null object
|
|
66
|
+
*/
|
|
67
|
+
function isObject(value) {
|
|
68
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Get a property from an object safely
|
|
72
|
+
*/
|
|
73
|
+
function get(obj, key) {
|
|
74
|
+
return obj[key];
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Check if a value is a number within a range
|
|
78
|
+
*/
|
|
79
|
+
function isNumberInRange(value, min, max) {
|
|
80
|
+
return typeof value === 'number' && !isNaN(value) && value >= min && value <= max;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Check if a value is in a valid set
|
|
84
|
+
*/
|
|
85
|
+
function isOneOf(value, validValues) {
|
|
86
|
+
return validValues.includes(value);
|
|
87
|
+
}
|
|
88
|
+
// ============================================================================
|
|
89
|
+
// Component Validators
|
|
90
|
+
// ============================================================================
|
|
91
|
+
/**
|
|
92
|
+
* Validate severity overrides
|
|
93
|
+
*
|
|
94
|
+
* @requirements 36.6 - Provide helpful error messages
|
|
95
|
+
*/
|
|
96
|
+
function validateSeverityOverrides(severity, errors) {
|
|
97
|
+
if (severity === undefined)
|
|
98
|
+
return true;
|
|
99
|
+
if (!isObject(severity)) {
|
|
100
|
+
errors.push({
|
|
101
|
+
path: 'severity',
|
|
102
|
+
message: 'Severity overrides must be an object mapping pattern IDs to severity levels',
|
|
103
|
+
expected: 'Record<string, "error" | "warning" | "info" | "hint">',
|
|
104
|
+
actual: typeof severity,
|
|
105
|
+
suggestion: 'Use an object like: { "pattern-id": "warning" }',
|
|
106
|
+
});
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
let valid = true;
|
|
110
|
+
for (const [patternId, severityValue] of Object.entries(severity)) {
|
|
111
|
+
if (!isOneOf(severityValue, VALID_SEVERITIES)) {
|
|
112
|
+
errors.push({
|
|
113
|
+
path: `severity.${patternId}`,
|
|
114
|
+
message: `Invalid severity level for pattern "${patternId}"`,
|
|
115
|
+
expected: VALID_SEVERITIES.join(' | '),
|
|
116
|
+
actual: severityValue,
|
|
117
|
+
suggestion: `Use one of: ${VALID_SEVERITIES.join(', ')}`,
|
|
118
|
+
});
|
|
119
|
+
valid = false;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return valid;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Validate ignore patterns
|
|
126
|
+
*
|
|
127
|
+
* @requirements 36.6 - Provide helpful error messages
|
|
128
|
+
*/
|
|
129
|
+
function validateIgnorePatterns(ignore, errors) {
|
|
130
|
+
if (ignore === undefined)
|
|
131
|
+
return true;
|
|
132
|
+
if (!Array.isArray(ignore)) {
|
|
133
|
+
errors.push({
|
|
134
|
+
path: 'ignore',
|
|
135
|
+
message: 'Ignore patterns must be an array of strings',
|
|
136
|
+
expected: 'string[]',
|
|
137
|
+
actual: typeof ignore,
|
|
138
|
+
suggestion: 'Use an array like: ["node_modules", "dist", "*.test.ts"]',
|
|
139
|
+
});
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
let valid = true;
|
|
143
|
+
for (let i = 0; i < ignore.length; i++) {
|
|
144
|
+
const pattern = ignore[i];
|
|
145
|
+
if (typeof pattern !== 'string') {
|
|
146
|
+
errors.push({
|
|
147
|
+
path: `ignore[${i}]`,
|
|
148
|
+
message: 'Each ignore pattern must be a string',
|
|
149
|
+
expected: 'string',
|
|
150
|
+
actual: typeof pattern,
|
|
151
|
+
suggestion: 'Ensure all patterns are strings (glob patterns or directory names)',
|
|
152
|
+
});
|
|
153
|
+
valid = false;
|
|
154
|
+
}
|
|
155
|
+
else if (pattern.length === 0) {
|
|
156
|
+
errors.push({
|
|
157
|
+
path: `ignore[${i}]`,
|
|
158
|
+
message: 'Ignore pattern cannot be empty',
|
|
159
|
+
expected: 'non-empty string',
|
|
160
|
+
actual: '""',
|
|
161
|
+
suggestion: 'Remove empty patterns or provide a valid glob pattern',
|
|
162
|
+
});
|
|
163
|
+
valid = false;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return valid;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Validate AI configuration
|
|
170
|
+
*
|
|
171
|
+
* @requirements 36.6 - Provide helpful error messages
|
|
172
|
+
*/
|
|
173
|
+
function validateAIConfig(ai, errors) {
|
|
174
|
+
if (ai === undefined)
|
|
175
|
+
return true;
|
|
176
|
+
if (!isObject(ai)) {
|
|
177
|
+
errors.push({
|
|
178
|
+
path: 'ai',
|
|
179
|
+
message: 'AI configuration must be an object',
|
|
180
|
+
expected: '{ provider: "openai" | "anthropic" | "ollama", model?: string }',
|
|
181
|
+
actual: typeof ai,
|
|
182
|
+
suggestion: 'Configure AI like: { "provider": "openai", "model": "gpt-4" }',
|
|
183
|
+
});
|
|
184
|
+
return false;
|
|
185
|
+
}
|
|
186
|
+
let valid = true;
|
|
187
|
+
const provider = get(ai, 'provider');
|
|
188
|
+
const model = get(ai, 'model');
|
|
189
|
+
// Provider is required when ai config is present
|
|
190
|
+
if (provider === undefined) {
|
|
191
|
+
errors.push({
|
|
192
|
+
path: 'ai.provider',
|
|
193
|
+
message: 'AI provider is required when AI configuration is specified',
|
|
194
|
+
expected: VALID_AI_PROVIDERS.join(' | '),
|
|
195
|
+
actual: undefined,
|
|
196
|
+
suggestion: `Add a provider: ${VALID_AI_PROVIDERS.join(', ')}`,
|
|
197
|
+
});
|
|
198
|
+
valid = false;
|
|
199
|
+
}
|
|
200
|
+
else if (!isOneOf(provider, VALID_AI_PROVIDERS)) {
|
|
201
|
+
errors.push({
|
|
202
|
+
path: 'ai.provider',
|
|
203
|
+
message: `Invalid AI provider "${provider}"`,
|
|
204
|
+
expected: VALID_AI_PROVIDERS.join(' | '),
|
|
205
|
+
actual: provider,
|
|
206
|
+
suggestion: `Use one of the supported providers: ${VALID_AI_PROVIDERS.join(', ')}`,
|
|
207
|
+
});
|
|
208
|
+
valid = false;
|
|
209
|
+
}
|
|
210
|
+
// Model is optional but must be a string if provided
|
|
211
|
+
if (model !== undefined && typeof model !== 'string') {
|
|
212
|
+
errors.push({
|
|
213
|
+
path: 'ai.model',
|
|
214
|
+
message: 'AI model must be a string',
|
|
215
|
+
expected: 'string',
|
|
216
|
+
actual: typeof model,
|
|
217
|
+
suggestion: 'Specify a model name like "gpt-4", "claude-3-opus", or "llama2"',
|
|
218
|
+
});
|
|
219
|
+
valid = false;
|
|
220
|
+
}
|
|
221
|
+
return valid;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Validate CI configuration
|
|
225
|
+
*
|
|
226
|
+
* @requirements 36.6 - Provide helpful error messages
|
|
227
|
+
*/
|
|
228
|
+
function validateCIConfig(ci, errors) {
|
|
229
|
+
if (ci === undefined)
|
|
230
|
+
return true;
|
|
231
|
+
if (!isObject(ci)) {
|
|
232
|
+
errors.push({
|
|
233
|
+
path: 'ci',
|
|
234
|
+
message: 'CI configuration must be an object',
|
|
235
|
+
expected: '{ failOn: "error" | "warning" | "none", reportFormat: "json" | "text" | "github" | "gitlab" }',
|
|
236
|
+
actual: typeof ci,
|
|
237
|
+
suggestion: 'Configure CI like: { "failOn": "error", "reportFormat": "github" }',
|
|
238
|
+
});
|
|
239
|
+
return false;
|
|
240
|
+
}
|
|
241
|
+
let valid = true;
|
|
242
|
+
const failOn = get(ci, 'failOn');
|
|
243
|
+
const reportFormat = get(ci, 'reportFormat');
|
|
244
|
+
// failOn validation
|
|
245
|
+
if (failOn !== undefined && !isOneOf(failOn, VALID_CI_FAIL_ON)) {
|
|
246
|
+
errors.push({
|
|
247
|
+
path: 'ci.failOn',
|
|
248
|
+
message: `Invalid failOn value "${failOn}"`,
|
|
249
|
+
expected: VALID_CI_FAIL_ON.join(' | '),
|
|
250
|
+
actual: failOn,
|
|
251
|
+
suggestion: `Use one of: ${VALID_CI_FAIL_ON.join(', ')}. "error" fails on errors only, "warning" fails on warnings and errors, "none" never fails.`,
|
|
252
|
+
});
|
|
253
|
+
valid = false;
|
|
254
|
+
}
|
|
255
|
+
// reportFormat validation
|
|
256
|
+
if (reportFormat !== undefined && !isOneOf(reportFormat, VALID_REPORT_FORMATS)) {
|
|
257
|
+
errors.push({
|
|
258
|
+
path: 'ci.reportFormat',
|
|
259
|
+
message: `Invalid report format "${reportFormat}"`,
|
|
260
|
+
expected: VALID_REPORT_FORMATS.join(' | '),
|
|
261
|
+
actual: reportFormat,
|
|
262
|
+
suggestion: `Use one of: ${VALID_REPORT_FORMATS.join(', ')}. Use "github" for GitHub Actions annotations, "gitlab" for GitLab Code Quality.`,
|
|
263
|
+
});
|
|
264
|
+
valid = false;
|
|
265
|
+
}
|
|
266
|
+
return valid;
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Validate learning configuration
|
|
270
|
+
*
|
|
271
|
+
* @requirements 36.6 - Provide helpful error messages
|
|
272
|
+
*/
|
|
273
|
+
function validateLearningConfig(learning, errors) {
|
|
274
|
+
if (learning === undefined)
|
|
275
|
+
return true;
|
|
276
|
+
if (!isObject(learning)) {
|
|
277
|
+
errors.push({
|
|
278
|
+
path: 'learning',
|
|
279
|
+
message: 'Learning configuration must be an object',
|
|
280
|
+
expected: '{ autoApproveThreshold: number (0-1), minOccurrences: number (>= 1) }',
|
|
281
|
+
actual: typeof learning,
|
|
282
|
+
suggestion: 'Configure learning like: { "autoApproveThreshold": 0.95, "minOccurrences": 3 }',
|
|
283
|
+
});
|
|
284
|
+
return false;
|
|
285
|
+
}
|
|
286
|
+
let valid = true;
|
|
287
|
+
const autoApproveThreshold = get(learning, 'autoApproveThreshold');
|
|
288
|
+
const minOccurrences = get(learning, 'minOccurrences');
|
|
289
|
+
// autoApproveThreshold validation
|
|
290
|
+
if (autoApproveThreshold !== undefined) {
|
|
291
|
+
if (typeof autoApproveThreshold !== 'number') {
|
|
292
|
+
errors.push({
|
|
293
|
+
path: 'learning.autoApproveThreshold',
|
|
294
|
+
message: 'Auto-approve threshold must be a number',
|
|
295
|
+
expected: 'number between 0 and 1',
|
|
296
|
+
actual: typeof autoApproveThreshold,
|
|
297
|
+
suggestion: 'Use a decimal value like 0.95 (95% confidence)',
|
|
298
|
+
});
|
|
299
|
+
valid = false;
|
|
300
|
+
}
|
|
301
|
+
else if (!isNumberInRange(autoApproveThreshold, 0, 1)) {
|
|
302
|
+
errors.push({
|
|
303
|
+
path: 'learning.autoApproveThreshold',
|
|
304
|
+
message: 'Auto-approve threshold must be between 0 and 1',
|
|
305
|
+
expected: '0 <= value <= 1',
|
|
306
|
+
actual: autoApproveThreshold,
|
|
307
|
+
suggestion: `Value ${autoApproveThreshold} is out of range. Use a value like 0.85 (85%) or 0.95 (95%).`,
|
|
308
|
+
});
|
|
309
|
+
valid = false;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
// minOccurrences validation
|
|
313
|
+
if (minOccurrences !== undefined) {
|
|
314
|
+
if (typeof minOccurrences !== 'number') {
|
|
315
|
+
errors.push({
|
|
316
|
+
path: 'learning.minOccurrences',
|
|
317
|
+
message: 'Minimum occurrences must be a number',
|
|
318
|
+
expected: 'positive integer >= 1',
|
|
319
|
+
actual: typeof minOccurrences,
|
|
320
|
+
suggestion: 'Use an integer like 3 or 5',
|
|
321
|
+
});
|
|
322
|
+
valid = false;
|
|
323
|
+
}
|
|
324
|
+
else if (!Number.isInteger(minOccurrences) || minOccurrences < 1) {
|
|
325
|
+
errors.push({
|
|
326
|
+
path: 'learning.minOccurrences',
|
|
327
|
+
message: 'Minimum occurrences must be a positive integer (>= 1)',
|
|
328
|
+
expected: 'integer >= 1',
|
|
329
|
+
actual: minOccurrences,
|
|
330
|
+
suggestion: `Value ${minOccurrences} is invalid. Use a positive integer like 3 (detect patterns with at least 3 occurrences).`,
|
|
331
|
+
});
|
|
332
|
+
valid = false;
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
return valid;
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* Validate performance configuration
|
|
339
|
+
*
|
|
340
|
+
* @requirements 36.6 - Provide helpful error messages
|
|
341
|
+
*/
|
|
342
|
+
function validatePerformanceConfig(performance, errors) {
|
|
343
|
+
if (performance === undefined)
|
|
344
|
+
return true;
|
|
345
|
+
if (!isObject(performance)) {
|
|
346
|
+
errors.push({
|
|
347
|
+
path: 'performance',
|
|
348
|
+
message: 'Performance configuration must be an object',
|
|
349
|
+
expected: '{ maxWorkers: number, cacheEnabled: boolean, incrementalAnalysis: boolean }',
|
|
350
|
+
actual: typeof performance,
|
|
351
|
+
suggestion: 'Configure performance like: { "maxWorkers": 4, "cacheEnabled": true, "incrementalAnalysis": true }',
|
|
352
|
+
});
|
|
353
|
+
return false;
|
|
354
|
+
}
|
|
355
|
+
let valid = true;
|
|
356
|
+
const maxWorkers = get(performance, 'maxWorkers');
|
|
357
|
+
const cacheEnabled = get(performance, 'cacheEnabled');
|
|
358
|
+
const incrementalAnalysis = get(performance, 'incrementalAnalysis');
|
|
359
|
+
// maxWorkers validation
|
|
360
|
+
if (maxWorkers !== undefined) {
|
|
361
|
+
if (typeof maxWorkers !== 'number') {
|
|
362
|
+
errors.push({
|
|
363
|
+
path: 'performance.maxWorkers',
|
|
364
|
+
message: 'Max workers must be a number',
|
|
365
|
+
expected: 'positive integer >= 1',
|
|
366
|
+
actual: typeof maxWorkers,
|
|
367
|
+
suggestion: 'Use an integer like 4 or 8 (number of parallel worker threads)',
|
|
368
|
+
});
|
|
369
|
+
valid = false;
|
|
370
|
+
}
|
|
371
|
+
else if (!Number.isInteger(maxWorkers) || maxWorkers < 1) {
|
|
372
|
+
errors.push({
|
|
373
|
+
path: 'performance.maxWorkers',
|
|
374
|
+
message: 'Max workers must be a positive integer (>= 1)',
|
|
375
|
+
expected: 'integer >= 1',
|
|
376
|
+
actual: maxWorkers,
|
|
377
|
+
suggestion: `Value ${maxWorkers} is invalid. Use a positive integer like 4 (typically matches CPU cores).`,
|
|
378
|
+
});
|
|
379
|
+
valid = false;
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
// cacheEnabled validation
|
|
383
|
+
if (cacheEnabled !== undefined && typeof cacheEnabled !== 'boolean') {
|
|
384
|
+
errors.push({
|
|
385
|
+
path: 'performance.cacheEnabled',
|
|
386
|
+
message: 'Cache enabled must be a boolean',
|
|
387
|
+
expected: 'true | false',
|
|
388
|
+
actual: typeof cacheEnabled,
|
|
389
|
+
suggestion: 'Use true to enable caching (recommended) or false to disable',
|
|
390
|
+
});
|
|
391
|
+
valid = false;
|
|
392
|
+
}
|
|
393
|
+
// incrementalAnalysis validation
|
|
394
|
+
if (incrementalAnalysis !== undefined && typeof incrementalAnalysis !== 'boolean') {
|
|
395
|
+
errors.push({
|
|
396
|
+
path: 'performance.incrementalAnalysis',
|
|
397
|
+
message: 'Incremental analysis must be a boolean',
|
|
398
|
+
expected: 'true | false',
|
|
399
|
+
actual: typeof incrementalAnalysis,
|
|
400
|
+
suggestion: 'Use true to enable incremental analysis (recommended) or false for full analysis on each change',
|
|
401
|
+
});
|
|
402
|
+
valid = false;
|
|
403
|
+
}
|
|
404
|
+
return valid;
|
|
405
|
+
}
|
|
406
|
+
// ============================================================================
|
|
407
|
+
// Main Validation Functions
|
|
408
|
+
// ============================================================================
|
|
409
|
+
/**
|
|
410
|
+
* Validate a DriftConfig object against the JSON schema
|
|
411
|
+
*
|
|
412
|
+
* @requirements 36.6 - Configuration validation SHALL reject invalid values with helpful error messages
|
|
413
|
+
* @requirements 36.7 - Configuration SHALL support JSON schema validation
|
|
414
|
+
*
|
|
415
|
+
* @param data - The data to validate
|
|
416
|
+
* @returns Validation result with typed data or errors
|
|
417
|
+
*/
|
|
418
|
+
export function validateConfig(data) {
|
|
419
|
+
const errors = [];
|
|
420
|
+
// Root must be an object
|
|
421
|
+
if (!isObject(data)) {
|
|
422
|
+
errors.push({
|
|
423
|
+
path: '',
|
|
424
|
+
message: 'Configuration must be a JSON object',
|
|
425
|
+
expected: 'object',
|
|
426
|
+
actual: typeof data,
|
|
427
|
+
suggestion: 'Ensure your config.json contains a valid JSON object like: { "ignore": ["node_modules"] }',
|
|
428
|
+
});
|
|
429
|
+
return { valid: false, errors };
|
|
430
|
+
}
|
|
431
|
+
// Validate each section
|
|
432
|
+
validateSeverityOverrides(get(data, 'severity'), errors);
|
|
433
|
+
validateIgnorePatterns(get(data, 'ignore'), errors);
|
|
434
|
+
validateAIConfig(get(data, 'ai'), errors);
|
|
435
|
+
validateCIConfig(get(data, 'ci'), errors);
|
|
436
|
+
validateLearningConfig(get(data, 'learning'), errors);
|
|
437
|
+
validatePerformanceConfig(get(data, 'performance'), errors);
|
|
438
|
+
// Check for unknown top-level keys
|
|
439
|
+
const knownKeys = ['severity', 'ignore', 'ai', 'ci', 'learning', 'performance'];
|
|
440
|
+
for (const key of Object.keys(data)) {
|
|
441
|
+
if (!knownKeys.includes(key)) {
|
|
442
|
+
errors.push({
|
|
443
|
+
path: key,
|
|
444
|
+
message: `Unknown configuration option "${key}"`,
|
|
445
|
+
expected: knownKeys.join(' | '),
|
|
446
|
+
actual: key,
|
|
447
|
+
suggestion: `Remove "${key}" or check for typos. Valid options are: ${knownKeys.join(', ')}`,
|
|
448
|
+
});
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
if (errors.length > 0) {
|
|
452
|
+
return { valid: false, errors };
|
|
453
|
+
}
|
|
454
|
+
return { valid: true, data: data };
|
|
455
|
+
}
|
|
456
|
+
/**
|
|
457
|
+
* Validate a DriftConfig and throw if invalid
|
|
458
|
+
*
|
|
459
|
+
* @requirements 36.6 - Configuration validation SHALL reject invalid values with helpful error messages
|
|
460
|
+
* @requirements 36.7 - Configuration SHALL support JSON schema validation
|
|
461
|
+
*
|
|
462
|
+
* @param data - The data to validate
|
|
463
|
+
* @returns The validated DriftConfig
|
|
464
|
+
* @throws ConfigValidationException if validation fails
|
|
465
|
+
*/
|
|
466
|
+
export function assertValidConfig(data) {
|
|
467
|
+
const result = validateConfig(data);
|
|
468
|
+
if (!result.valid) {
|
|
469
|
+
throw new ConfigValidationException(`Invalid configuration: ${result.errors.length} validation error(s)`, result.errors);
|
|
470
|
+
}
|
|
471
|
+
return result.data;
|
|
472
|
+
}
|
|
473
|
+
/**
|
|
474
|
+
* Validate a partial DriftConfig (for merging with defaults)
|
|
475
|
+
*
|
|
476
|
+
* This is more lenient than full validation - it allows missing required fields
|
|
477
|
+
* since they will be filled in from defaults.
|
|
478
|
+
*
|
|
479
|
+
* @requirements 36.6 - Configuration validation SHALL reject invalid values with helpful error messages
|
|
480
|
+
* @requirements 36.7 - Configuration SHALL support JSON schema validation
|
|
481
|
+
*
|
|
482
|
+
* @param data - The partial data to validate
|
|
483
|
+
* @returns Validation result with typed data or errors
|
|
484
|
+
*/
|
|
485
|
+
export function validatePartialConfig(data) {
|
|
486
|
+
// For partial config, we use the same validation logic
|
|
487
|
+
// since all fields are already optional in DriftConfig
|
|
488
|
+
return validateConfig(data);
|
|
489
|
+
}
|
|
490
|
+
/**
|
|
491
|
+
* Format validation errors as a human-readable string
|
|
492
|
+
*
|
|
493
|
+
* @requirements 36.6 - Provide helpful error messages
|
|
494
|
+
*
|
|
495
|
+
* @param errors - Array of validation errors
|
|
496
|
+
* @returns Formatted error string
|
|
497
|
+
*/
|
|
498
|
+
export function formatConfigErrors(errors) {
|
|
499
|
+
if (errors.length === 0)
|
|
500
|
+
return 'No errors';
|
|
501
|
+
const header = `Configuration validation failed with ${errors.length} error(s):\n`;
|
|
502
|
+
const body = errors
|
|
503
|
+
.map((e, i) => {
|
|
504
|
+
let msg = `\n${i + 1}. ${e.path || 'root'}: ${e.message}`;
|
|
505
|
+
if (e.expected)
|
|
506
|
+
msg += `\n Expected: ${e.expected}`;
|
|
507
|
+
if (e.actual !== undefined)
|
|
508
|
+
msg += `\n Got: ${JSON.stringify(e.actual)}`;
|
|
509
|
+
if (e.suggestion)
|
|
510
|
+
msg += `\n 💡 ${e.suggestion}`;
|
|
511
|
+
return msg;
|
|
512
|
+
})
|
|
513
|
+
.join('\n');
|
|
514
|
+
return header + body;
|
|
515
|
+
}
|
|
516
|
+
/**
|
|
517
|
+
* Get a quick summary of validation errors
|
|
518
|
+
*
|
|
519
|
+
* @param errors - Array of validation errors
|
|
520
|
+
* @returns Short summary string
|
|
521
|
+
*/
|
|
522
|
+
export function getErrorSummary(errors) {
|
|
523
|
+
if (errors.length === 0)
|
|
524
|
+
return 'Configuration is valid';
|
|
525
|
+
const paths = errors.map((e) => e.path || 'root');
|
|
526
|
+
const uniquePaths = [...new Set(paths)];
|
|
527
|
+
return `${errors.length} error(s) in: ${uniquePaths.join(', ')}`;
|
|
528
|
+
}
|
|
529
|
+
// ============================================================================
|
|
530
|
+
// JSON Schema Definition (for documentation and external tools)
|
|
531
|
+
// ============================================================================
|
|
532
|
+
/**
|
|
533
|
+
* JSON Schema definition for DriftConfig
|
|
534
|
+
*
|
|
535
|
+
* This can be used by external tools for validation or IDE support.
|
|
536
|
+
*
|
|
537
|
+
* @requirements 36.7 - Configuration SHALL support JSON schema validation
|
|
538
|
+
*/
|
|
539
|
+
export const DRIFT_CONFIG_SCHEMA = {
|
|
540
|
+
$schema: 'http://json-schema.org/draft-07/schema#',
|
|
541
|
+
title: 'DriftConfig',
|
|
542
|
+
description: 'Configuration schema for Drift architectural drift detection',
|
|
543
|
+
type: 'object',
|
|
544
|
+
properties: {
|
|
545
|
+
severity: {
|
|
546
|
+
type: 'object',
|
|
547
|
+
description: 'Severity overrides per pattern ID',
|
|
548
|
+
additionalProperties: {
|
|
549
|
+
type: 'string',
|
|
550
|
+
enum: ['error', 'warning', 'info', 'hint'],
|
|
551
|
+
},
|
|
552
|
+
},
|
|
553
|
+
ignore: {
|
|
554
|
+
type: 'array',
|
|
555
|
+
description: 'File/folder patterns to ignore',
|
|
556
|
+
items: {
|
|
557
|
+
type: 'string',
|
|
558
|
+
minLength: 1,
|
|
559
|
+
},
|
|
560
|
+
},
|
|
561
|
+
ai: {
|
|
562
|
+
type: 'object',
|
|
563
|
+
description: 'AI provider configuration (BYOK)',
|
|
564
|
+
properties: {
|
|
565
|
+
provider: {
|
|
566
|
+
type: 'string',
|
|
567
|
+
enum: ['openai', 'anthropic', 'ollama'],
|
|
568
|
+
description: 'AI provider to use',
|
|
569
|
+
},
|
|
570
|
+
model: {
|
|
571
|
+
type: 'string',
|
|
572
|
+
description: 'Model name to use',
|
|
573
|
+
},
|
|
574
|
+
},
|
|
575
|
+
required: ['provider'],
|
|
576
|
+
},
|
|
577
|
+
ci: {
|
|
578
|
+
type: 'object',
|
|
579
|
+
description: 'CI/CD mode settings',
|
|
580
|
+
properties: {
|
|
581
|
+
failOn: {
|
|
582
|
+
type: 'string',
|
|
583
|
+
enum: ['error', 'warning', 'none'],
|
|
584
|
+
description: 'Severity level that causes CI failure',
|
|
585
|
+
},
|
|
586
|
+
reportFormat: {
|
|
587
|
+
type: 'string',
|
|
588
|
+
enum: ['json', 'text', 'github', 'gitlab'],
|
|
589
|
+
description: 'Output format for CI reports',
|
|
590
|
+
},
|
|
591
|
+
},
|
|
592
|
+
},
|
|
593
|
+
learning: {
|
|
594
|
+
type: 'object',
|
|
595
|
+
description: 'Pattern learning settings',
|
|
596
|
+
properties: {
|
|
597
|
+
autoApproveThreshold: {
|
|
598
|
+
type: 'number',
|
|
599
|
+
minimum: 0,
|
|
600
|
+
maximum: 1,
|
|
601
|
+
description: 'Confidence threshold for auto-approving patterns',
|
|
602
|
+
},
|
|
603
|
+
minOccurrences: {
|
|
604
|
+
type: 'integer',
|
|
605
|
+
minimum: 1,
|
|
606
|
+
description: 'Minimum occurrences to detect a pattern',
|
|
607
|
+
},
|
|
608
|
+
},
|
|
609
|
+
},
|
|
610
|
+
performance: {
|
|
611
|
+
type: 'object',
|
|
612
|
+
description: 'Performance tuning settings',
|
|
613
|
+
properties: {
|
|
614
|
+
maxWorkers: {
|
|
615
|
+
type: 'integer',
|
|
616
|
+
minimum: 1,
|
|
617
|
+
description: 'Maximum worker threads for parallel processing',
|
|
618
|
+
},
|
|
619
|
+
cacheEnabled: {
|
|
620
|
+
type: 'boolean',
|
|
621
|
+
description: 'Enable analysis caching',
|
|
622
|
+
},
|
|
623
|
+
incrementalAnalysis: {
|
|
624
|
+
type: 'boolean',
|
|
625
|
+
description: 'Enable incremental analysis for changed files',
|
|
626
|
+
},
|
|
627
|
+
},
|
|
628
|
+
},
|
|
629
|
+
},
|
|
630
|
+
additionalProperties: false,
|
|
631
|
+
};
|
|
632
|
+
//# sourceMappingURL=config-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-validator.js","sourceRoot":"","sources":["../../src/config/config-validator.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E,+BAA+B;AAC/B,MAAM,kBAAkB,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,CAAU,CAAC;AAEtE,8BAA8B;AAC9B,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAU,CAAC;AAE/D,iCAAiC;AACjC,MAAM,oBAAoB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAU,CAAC;AAE3E,4BAA4B;AAC5B,MAAM,gBAAgB,GAAe,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAkC1E;;;;GAIG;AACH,MAAM,OAAO,yBAA0B,SAAQ,KAAK;IAGhC;IAFlB,YACE,OAAe,EACC,MAA+B;QAE/C,KAAK,CAAC,OAAO,CAAC,CAAC;QAFC,WAAM,GAAN,MAAM,CAAyB;QAG/C,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,YAAY;QACV,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,WAAW,CAAC;QAEjD,OAAO,IAAI,CAAC,MAAM;aACf,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACT,IAAI,GAAG,GAAG,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;YACxC,IAAI,CAAC,CAAC,QAAQ;gBAAE,GAAG,IAAI,mBAAmB,CAAC,CAAC,QAAQ,EAAE,CAAC;YACvD,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS;gBAAE,GAAG,IAAI,cAAc,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5E,IAAI,CAAC,CAAC,UAAU;gBAAE,GAAG,IAAI,qBAAqB,CAAC,CAAC,UAAU,EAAE,CAAC;YAC7D,OAAO,GAAG,CAAC;QACb,CAAC,CAAC;aACD,IAAI,CAAC,MAAM,CAAC,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,UAAU;QACR,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxD,OAAO,GAAG,UAAU,4BAA4B,KAAK,EAAE,CAAC;IAC1D,CAAC;CACF;AAED,+EAA+E;AAC/E,8BAA8B;AAC9B,+EAA+E;AAE/E;;GAEG;AACH,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED;;GAEG;AACH,SAAS,GAAG,CAAC,GAA4B,EAAE,GAAW;IACpD,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,KAAc,EAAE,GAAW,EAAE,GAAW;IAC/D,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,GAAG,IAAI,KAAK,IAAI,GAAG,CAAC;AACpF,CAAC;AAED;;GAEG;AACH,SAAS,OAAO,CAAI,KAAc,EAAE,WAAyB;IAC3D,OAAO,WAAW,CAAC,QAAQ,CAAC,KAAU,CAAC,CAAC;AAC1C,CAAC;AAED,+EAA+E;AAC/E,uBAAuB;AACvB,+EAA+E;AAE/E;;;;GAIG;AACH,SAAS,yBAAyB,CAChC,QAAiB,EACjB,MAA+B;IAE/B,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAExC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,6EAA6E;YACtF,QAAQ,EAAE,uDAAuD;YACjE,MAAM,EAAE,OAAO,QAAQ;YACvB,UAAU,EAAE,iDAAiD;SAC9D,CAAC,CAAC;QACH,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,KAAK,GAAG,IAAI,CAAC;IACjB,KAAK,MAAM,CAAC,SAAS,EAAE,aAAa,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClE,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,gBAAgB,CAAC,EAAE,CAAC;YAC9C,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,YAAY,SAAS,EAAE;gBAC7B,OAAO,EAAE,uCAAuC,SAAS,GAAG;gBAC5D,QAAQ,EAAE,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;gBACtC,MAAM,EAAE,aAAa;gBACrB,UAAU,EAAE,eAAe,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;aACzD,CAAC,CAAC;YACH,KAAK,GAAG,KAAK,CAAC;QAChB,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,SAAS,sBAAsB,CAC7B,MAAe,EACf,MAA+B;IAE/B,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAEtC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,6CAA6C;YACtD,QAAQ,EAAE,UAAU;YACpB,MAAM,EAAE,OAAO,MAAM;YACrB,UAAU,EAAE,0DAA0D;SACvE,CAAC,CAAC;QACH,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,KAAK,GAAG,IAAI,CAAC;IACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,UAAU,CAAC,GAAG;gBACpB,OAAO,EAAE,sCAAsC;gBAC/C,QAAQ,EAAE,QAAQ;gBAClB,MAAM,EAAE,OAAO,OAAO;gBACtB,UAAU,EAAE,oEAAoE;aACjF,CAAC,CAAC;YACH,KAAK,GAAG,KAAK,CAAC;QAChB,CAAC;aAAM,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,UAAU,CAAC,GAAG;gBACpB,OAAO,EAAE,gCAAgC;gBACzC,QAAQ,EAAE,kBAAkB;gBAC5B,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,uDAAuD;aACpE,CAAC,CAAC;YACH,KAAK,GAAG,KAAK,CAAC;QAChB,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,SAAS,gBAAgB,CACvB,EAAW,EACX,MAA+B;IAE/B,IAAI,EAAE,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAElC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;QAClB,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,IAAI;YACV,OAAO,EAAE,oCAAoC;YAC7C,QAAQ,EAAE,iEAAiE;YAC3E,MAAM,EAAE,OAAO,EAAE;YACjB,UAAU,EAAE,+DAA+D;SAC5E,CAAC,CAAC;QACH,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,KAAK,GAAG,IAAI,CAAC;IACjB,MAAM,QAAQ,GAAG,GAAG,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAE/B,iDAAiD;IACjD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,4DAA4D;YACrE,QAAQ,EAAE,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC;YACxC,MAAM,EAAE,SAAS;YACjB,UAAU,EAAE,mBAAmB,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;SAC/D,CAAC,CAAC;QACH,KAAK,GAAG,KAAK,CAAC;IAChB,CAAC;SAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,kBAAkB,CAAC,EAAE,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,wBAAwB,QAAQ,GAAG;YAC5C,QAAQ,EAAE,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC;YACxC,MAAM,EAAE,QAAQ;YAChB,UAAU,EAAE,uCAAuC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;SACnF,CAAC,CAAC;QACH,KAAK,GAAG,KAAK,CAAC;IAChB,CAAC;IAED,qDAAqD;IACrD,IAAI,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACrD,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,2BAA2B;YACpC,QAAQ,EAAE,QAAQ;YAClB,MAAM,EAAE,OAAO,KAAK;YACpB,UAAU,EAAE,iEAAiE;SAC9E,CAAC,CAAC;QACH,KAAK,GAAG,KAAK,CAAC;IAChB,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,SAAS,gBAAgB,CACvB,EAAW,EACX,MAA+B;IAE/B,IAAI,EAAE,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAElC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;QAClB,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,IAAI;YACV,OAAO,EAAE,oCAAoC;YAC7C,QAAQ,EAAE,+FAA+F;YACzG,MAAM,EAAE,OAAO,EAAE;YACjB,UAAU,EAAE,oEAAoE;SACjF,CAAC,CAAC;QACH,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,KAAK,GAAG,IAAI,CAAC;IACjB,MAAM,MAAM,GAAG,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;IACjC,MAAM,YAAY,GAAG,GAAG,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC;IAE7C,oBAAoB;IACpB,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC,EAAE,CAAC;QAC/D,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,yBAAyB,MAAM,GAAG;YAC3C,QAAQ,EAAE,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;YACtC,MAAM,EAAE,MAAM;YACd,UAAU,EAAE,eAAe,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,6FAA6F;SACpJ,CAAC,CAAC;QACH,KAAK,GAAG,KAAK,CAAC;IAChB,CAAC;IAED,0BAA0B;IAC1B,IAAI,YAAY,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,oBAAoB,CAAC,EAAE,CAAC;QAC/E,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,iBAAiB;YACvB,OAAO,EAAE,0BAA0B,YAAY,GAAG;YAClD,QAAQ,EAAE,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC;YAC1C,MAAM,EAAE,YAAY;YACpB,UAAU,EAAE,eAAe,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,kFAAkF;SAC7I,CAAC,CAAC;QACH,KAAK,GAAG,KAAK,CAAC;IAChB,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,SAAS,sBAAsB,CAC7B,QAAiB,EACjB,MAA+B;IAE/B,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAExC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,0CAA0C;YACnD,QAAQ,EAAE,uEAAuE;YACjF,MAAM,EAAE,OAAO,QAAQ;YACvB,UAAU,EAAE,gFAAgF;SAC7F,CAAC,CAAC;QACH,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,KAAK,GAAG,IAAI,CAAC;IACjB,MAAM,oBAAoB,GAAG,GAAG,CAAC,QAAQ,EAAE,sBAAsB,CAAC,CAAC;IACnE,MAAM,cAAc,GAAG,GAAG,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;IAEvD,kCAAkC;IAClC,IAAI,oBAAoB,KAAK,SAAS,EAAE,CAAC;QACvC,IAAI,OAAO,oBAAoB,KAAK,QAAQ,EAAE,CAAC;YAC7C,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,+BAA+B;gBACrC,OAAO,EAAE,yCAAyC;gBAClD,QAAQ,EAAE,wBAAwB;gBAClC,MAAM,EAAE,OAAO,oBAAoB;gBACnC,UAAU,EAAE,gDAAgD;aAC7D,CAAC,CAAC;YACH,KAAK,GAAG,KAAK,CAAC;QAChB,CAAC;aAAM,IAAI,CAAC,eAAe,CAAC,oBAAoB,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YACxD,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,+BAA+B;gBACrC,OAAO,EAAE,gDAAgD;gBACzD,QAAQ,EAAE,iBAAiB;gBAC3B,MAAM,EAAE,oBAAoB;gBAC5B,UAAU,EAAE,SAAS,oBAAoB,8DAA8D;aACxG,CAAC,CAAC;YACH,KAAK,GAAG,KAAK,CAAC;QAChB,CAAC;IACH,CAAC;IAED,4BAA4B;IAC5B,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;QACjC,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE,CAAC;YACvC,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,yBAAyB;gBAC/B,OAAO,EAAE,sCAAsC;gBAC/C,QAAQ,EAAE,uBAAuB;gBACjC,MAAM,EAAE,OAAO,cAAc;gBAC7B,UAAU,EAAE,4BAA4B;aACzC,CAAC,CAAC;YACH,KAAK,GAAG,KAAK,CAAC;QAChB,CAAC;aAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;YACnE,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,yBAAyB;gBAC/B,OAAO,EAAE,uDAAuD;gBAChE,QAAQ,EAAE,cAAc;gBACxB,MAAM,EAAE,cAAc;gBACtB,UAAU,EAAE,SAAS,cAAc,2FAA2F;aAC/H,CAAC,CAAC;YACH,KAAK,GAAG,KAAK,CAAC;QAChB,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,SAAS,yBAAyB,CAChC,WAAoB,EACpB,MAA+B;IAE/B,IAAI,WAAW,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAE3C,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,6CAA6C;YACtD,QAAQ,EAAE,6EAA6E;YACvF,MAAM,EAAE,OAAO,WAAW;YAC1B,UAAU,EAAE,oGAAoG;SACjH,CAAC,CAAC;QACH,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,KAAK,GAAG,IAAI,CAAC;IACjB,MAAM,UAAU,GAAG,GAAG,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAClD,MAAM,YAAY,GAAG,GAAG,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IACtD,MAAM,mBAAmB,GAAG,GAAG,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAC;IAEpE,wBAAwB;IACxB,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;YACnC,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,wBAAwB;gBAC9B,OAAO,EAAE,8BAA8B;gBACvC,QAAQ,EAAE,uBAAuB;gBACjC,MAAM,EAAE,OAAO,UAAU;gBACzB,UAAU,EAAE,gEAAgE;aAC7E,CAAC,CAAC;YACH,KAAK,GAAG,KAAK,CAAC;QAChB,CAAC;aAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;YAC3D,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,wBAAwB;gBAC9B,OAAO,EAAE,+CAA+C;gBACxD,QAAQ,EAAE,cAAc;gBACxB,MAAM,EAAE,UAAU;gBAClB,UAAU,EAAE,SAAS,UAAU,2EAA2E;aAC3G,CAAC,CAAC;YACH,KAAK,GAAG,KAAK,CAAC;QAChB,CAAC;IACH,CAAC;IAED,0BAA0B;IAC1B,IAAI,YAAY,KAAK,SAAS,IAAI,OAAO,YAAY,KAAK,SAAS,EAAE,CAAC;QACpE,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,0BAA0B;YAChC,OAAO,EAAE,iCAAiC;YAC1C,QAAQ,EAAE,cAAc;YACxB,MAAM,EAAE,OAAO,YAAY;YAC3B,UAAU,EAAE,8DAA8D;SAC3E,CAAC,CAAC;QACH,KAAK,GAAG,KAAK,CAAC;IAChB,CAAC;IAED,iCAAiC;IACjC,IAAI,mBAAmB,KAAK,SAAS,IAAI,OAAO,mBAAmB,KAAK,SAAS,EAAE,CAAC;QAClF,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,iCAAiC;YACvC,OAAO,EAAE,wCAAwC;YACjD,QAAQ,EAAE,cAAc;YACxB,MAAM,EAAE,OAAO,mBAAmB;YAClC,UAAU,EAAE,iGAAiG;SAC9G,CAAC,CAAC;QACH,KAAK,GAAG,KAAK,CAAC;IAChB,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,+EAA+E;AAC/E,4BAA4B;AAC5B,+EAA+E;AAE/E;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAAC,IAAa;IAC1C,MAAM,MAAM,GAA4B,EAAE,CAAC;IAE3C,yBAAyB;IACzB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACpB,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,EAAE;YACR,OAAO,EAAE,qCAAqC;YAC9C,QAAQ,EAAE,QAAQ;YAClB,MAAM,EAAE,OAAO,IAAI;YACnB,UAAU,EAAE,2FAA2F;SACxG,CAAC,CAAC;QACH,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAClC,CAAC;IAED,wBAAwB;IACxB,yBAAyB,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,CAAC;IACzD,sBAAsB,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;IACpD,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;IAC1C,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;IAC1C,sBAAsB,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,CAAC;IACtD,yBAAyB,CAAC,GAAG,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE,MAAM,CAAC,CAAC;IAE5D,mCAAmC;IACnC,MAAM,SAAS,GAAG,CAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;IAChF,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,iCAAiC,GAAG,GAAG;gBAChD,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;gBAC/B,MAAM,EAAE,GAAG;gBACX,UAAU,EAAE,WAAW,GAAG,4CAA4C,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;aAC7F,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAClC,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAmB,EAAE,CAAC;AACpD,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAa;IAC7C,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IAEpC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClB,MAAM,IAAI,yBAAyB,CACjC,0BAA0B,MAAM,CAAC,MAAO,CAAC,MAAM,sBAAsB,EACrE,MAAM,CAAC,MAAO,CACf,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC,IAAK,CAAC;AACtB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAa;IACjD,uDAAuD;IACvD,uDAAuD;IACvD,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAA+B;IAChE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,WAAW,CAAC;IAE5C,MAAM,MAAM,GAAG,wCAAwC,MAAM,CAAC,MAAM,cAAc,CAAC;IACnF,MAAM,IAAI,GAAG,MAAM;SAChB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACZ,IAAI,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,MAAM,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;QAC1D,IAAI,CAAC,CAAC,QAAQ;YAAE,GAAG,IAAI,kBAAkB,CAAC,CAAC,QAAQ,EAAE,CAAC;QACtD,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS;YAAE,GAAG,IAAI,aAAa,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3E,IAAI,CAAC,CAAC,UAAU;YAAE,GAAG,IAAI,WAAW,CAAC,CAAC,UAAU,EAAE,CAAC;QACnD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,OAAO,MAAM,GAAG,IAAI,CAAC;AACvB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,MAA+B;IAC7D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,wBAAwB,CAAC;IAEzD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC;IAClD,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IAExC,OAAO,GAAG,MAAM,CAAC,MAAM,iBAAiB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AACnE,CAAC;AAED,+EAA+E;AAC/E,gEAAgE;AAChE,+EAA+E;AAE/E;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,OAAO,EAAE,yCAAyC;IAClD,KAAK,EAAE,aAAa;IACpB,WAAW,EAAE,8DAA8D;IAC3E,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,QAAQ,EAAE;YACR,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,mCAAmC;YAChD,oBAAoB,EAAE;gBACpB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC;aAC3C;SACF;QACD,MAAM,EAAE;YACN,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,gCAAgC;YAC7C,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,SAAS,EAAE,CAAC;aACb;SACF;QACD,EAAE,EAAE;YACF,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,kCAAkC;YAC/C,UAAU,EAAE;gBACV,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,CAAC;oBACvC,WAAW,EAAE,oBAAoB;iBAClC;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,mBAAmB;iBACjC;aACF;YACD,QAAQ,EAAE,CAAC,UAAU,CAAC;SACvB;QACD,EAAE,EAAE;YACF,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,qBAAqB;YAClC,UAAU,EAAE;gBACV,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC;oBAClC,WAAW,EAAE,uCAAuC;iBACrD;gBACD,YAAY,EAAE;oBACZ,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC;oBAC1C,WAAW,EAAE,8BAA8B;iBAC5C;aACF;SACF;QACD,QAAQ,EAAE;YACR,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,2BAA2B;YACxC,UAAU,EAAE;gBACV,oBAAoB,EAAE;oBACpB,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,CAAC;oBACV,OAAO,EAAE,CAAC;oBACV,WAAW,EAAE,kDAAkD;iBAChE;gBACD,cAAc,EAAE;oBACd,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,CAAC;oBACV,WAAW,EAAE,yCAAyC;iBACvD;aACF;SACF;QACD,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,6BAA6B;YAC1C,UAAU,EAAE;gBACV,UAAU,EAAE;oBACV,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,CAAC;oBACV,WAAW,EAAE,gDAAgD;iBAC9D;gBACD,YAAY,EAAE;oBACZ,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,yBAAyB;iBACvC;gBACD,mBAAmB,EAAE;oBACnB,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,+CAA+C;iBAC7D;aACF;SACF;KACF;IACD,oBAAoB,EAAE,KAAK;CACnB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,eAAO,MAAM,cAAc,EAAE,WAmB5B,CAAC"}
|