typekro 0.2.2 → 0.3.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/README.md +4 -3
- package/dist/.tsbuildinfo +1 -1
- package/dist/core/composition/imperative.d.ts.map +1 -1
- package/dist/core/composition/imperative.js +15 -2
- package/dist/core/composition/imperative.js.map +1 -1
- package/dist/core/composition/typekro-runtime/typekro-runtime.d.ts.map +1 -1
- package/dist/core/composition/typekro-runtime/typekro-runtime.js +24 -25
- package/dist/core/composition/typekro-runtime/typekro-runtime.js.map +1 -1
- package/dist/core/dependencies/type-guards.d.ts.map +1 -1
- package/dist/core/dependencies/type-guards.js +7 -2
- package/dist/core/dependencies/type-guards.js.map +1 -1
- package/dist/core/deployment/engine.d.ts +13 -1
- package/dist/core/deployment/engine.d.ts.map +1 -1
- package/dist/core/deployment/engine.js +48 -3
- package/dist/core/deployment/engine.js.map +1 -1
- package/dist/core/errors.d.ts +85 -0
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +135 -0
- package/dist/core/errors.js.map +1 -1
- package/dist/core/evaluation/cel-optimizer.d.ts.map +1 -1
- package/dist/core/evaluation/cel-optimizer.js +7 -13
- package/dist/core/evaluation/cel-optimizer.js.map +1 -1
- package/dist/core/expressions/analyzer.d.ts +584 -0
- package/dist/core/expressions/analyzer.d.ts.map +1 -0
- package/dist/core/expressions/analyzer.js +2956 -0
- package/dist/core/expressions/analyzer.js.map +1 -0
- package/dist/core/expressions/cache.d.ts +136 -0
- package/dist/core/expressions/cache.d.ts.map +1 -0
- package/dist/core/expressions/cache.js +347 -0
- package/dist/core/expressions/cache.js.map +1 -0
- package/dist/core/expressions/cel-conversion-engine.d.ts +126 -0
- package/dist/core/expressions/cel-conversion-engine.d.ts.map +1 -0
- package/dist/core/expressions/cel-conversion-engine.js +293 -0
- package/dist/core/expressions/cel-conversion-engine.js.map +1 -0
- package/dist/core/expressions/compile-time-validation.d.ts +270 -0
- package/dist/core/expressions/compile-time-validation.d.ts.map +1 -0
- package/dist/core/expressions/compile-time-validation.js +506 -0
- package/dist/core/expressions/compile-time-validation.js.map +1 -0
- package/dist/core/expressions/composition-integration.d.ts +315 -0
- package/dist/core/expressions/composition-integration.d.ts.map +1 -0
- package/dist/core/expressions/composition-integration.js +936 -0
- package/dist/core/expressions/composition-integration.js.map +1 -0
- package/dist/core/expressions/conditional-expression-processor.d.ts +154 -0
- package/dist/core/expressions/conditional-expression-processor.d.ts.map +1 -0
- package/dist/core/expressions/conditional-expression-processor.js +479 -0
- package/dist/core/expressions/conditional-expression-processor.js.map +1 -0
- package/dist/core/expressions/conditional-integration.d.ts +133 -0
- package/dist/core/expressions/conditional-integration.d.ts.map +1 -0
- package/dist/core/expressions/conditional-integration.js +293 -0
- package/dist/core/expressions/conditional-integration.js.map +1 -0
- package/dist/core/expressions/conditional-validation.d.ts +181 -0
- package/dist/core/expressions/conditional-validation.d.ts.map +1 -0
- package/dist/core/expressions/conditional-validation.js +460 -0
- package/dist/core/expressions/conditional-validation.js.map +1 -0
- package/dist/core/expressions/context-aware-generator.d.ts +127 -0
- package/dist/core/expressions/context-aware-generator.d.ts.map +1 -0
- package/dist/core/expressions/context-aware-generator.js +500 -0
- package/dist/core/expressions/context-aware-generator.js.map +1 -0
- package/dist/core/expressions/context-detector.d.ts +148 -0
- package/dist/core/expressions/context-detector.d.ts.map +1 -0
- package/dist/core/expressions/context-detector.js +546 -0
- package/dist/core/expressions/context-detector.js.map +1 -0
- package/dist/core/expressions/context-switcher.d.ts +185 -0
- package/dist/core/expressions/context-switcher.d.ts.map +1 -0
- package/dist/core/expressions/context-switcher.js +515 -0
- package/dist/core/expressions/context-switcher.js.map +1 -0
- package/dist/core/expressions/context-validator.d.ts +176 -0
- package/dist/core/expressions/context-validator.d.ts.map +1 -0
- package/dist/core/expressions/context-validator.js +452 -0
- package/dist/core/expressions/context-validator.js.map +1 -0
- package/dist/core/expressions/custom-context-manager.d.ts +194 -0
- package/dist/core/expressions/custom-context-manager.d.ts.map +1 -0
- package/dist/core/expressions/custom-context-manager.js +390 -0
- package/dist/core/expressions/custom-context-manager.js.map +1 -0
- package/dist/core/expressions/expression-proxy.d.ts +80 -0
- package/dist/core/expressions/expression-proxy.d.ts.map +1 -0
- package/dist/core/expressions/expression-proxy.js +227 -0
- package/dist/core/expressions/expression-proxy.js.map +1 -0
- package/dist/core/expressions/factory-integration.d.ts +132 -0
- package/dist/core/expressions/factory-integration.d.ts.map +1 -0
- package/dist/core/expressions/factory-integration.js +327 -0
- package/dist/core/expressions/factory-integration.js.map +1 -0
- package/dist/core/expressions/factory-pattern-handler.d.ts +88 -0
- package/dist/core/expressions/factory-pattern-handler.d.ts.map +1 -0
- package/dist/core/expressions/factory-pattern-handler.js +336 -0
- package/dist/core/expressions/factory-pattern-handler.js.map +1 -0
- package/dist/core/expressions/field-hydration-processor.d.ts +188 -0
- package/dist/core/expressions/field-hydration-processor.d.ts.map +1 -0
- package/dist/core/expressions/field-hydration-processor.js +562 -0
- package/dist/core/expressions/field-hydration-processor.js.map +1 -0
- package/dist/core/expressions/imperative-analyzer.d.ts +21 -0
- package/dist/core/expressions/imperative-analyzer.d.ts.map +1 -0
- package/dist/core/expressions/imperative-analyzer.js +457 -0
- package/dist/core/expressions/imperative-analyzer.js.map +1 -0
- package/dist/core/expressions/index.d.ts +54 -0
- package/dist/core/expressions/index.d.ts.map +1 -0
- package/dist/core/expressions/index.js +50 -0
- package/dist/core/expressions/index.js.map +1 -0
- package/dist/core/expressions/lazy-analysis.d.ts +1128 -0
- package/dist/core/expressions/lazy-analysis.d.ts.map +1 -0
- package/dist/core/expressions/lazy-analysis.js +2443 -0
- package/dist/core/expressions/lazy-analysis.js.map +1 -0
- package/dist/core/expressions/magic-assignable-analyzer.d.ts +123 -0
- package/dist/core/expressions/magic-assignable-analyzer.d.ts.map +1 -0
- package/dist/core/expressions/magic-assignable-analyzer.js +352 -0
- package/dist/core/expressions/magic-assignable-analyzer.js.map +1 -0
- package/dist/core/expressions/magic-proxy-analyzer.d.ts +206 -0
- package/dist/core/expressions/magic-proxy-analyzer.d.ts.map +1 -0
- package/dist/core/expressions/magic-proxy-analyzer.js +639 -0
- package/dist/core/expressions/magic-proxy-analyzer.js.map +1 -0
- package/dist/core/expressions/magic-proxy-detector.d.ts +154 -0
- package/dist/core/expressions/magic-proxy-detector.d.ts.map +1 -0
- package/dist/core/expressions/magic-proxy-detector.js +242 -0
- package/dist/core/expressions/magic-proxy-detector.js.map +1 -0
- package/dist/core/expressions/migration-helpers.d.ts +133 -0
- package/dist/core/expressions/migration-helpers.d.ts.map +1 -0
- package/dist/core/expressions/migration-helpers.js +443 -0
- package/dist/core/expressions/migration-helpers.js.map +1 -0
- package/dist/core/expressions/optionality-handler.d.ts +503 -0
- package/dist/core/expressions/optionality-handler.d.ts.map +1 -0
- package/dist/core/expressions/optionality-handler.js +1306 -0
- package/dist/core/expressions/optionality-handler.js.map +1 -0
- package/dist/core/expressions/readiness-integration.d.ts +119 -0
- package/dist/core/expressions/readiness-integration.d.ts.map +1 -0
- package/dist/core/expressions/readiness-integration.js +386 -0
- package/dist/core/expressions/readiness-integration.js.map +1 -0
- package/dist/core/expressions/resource-analyzer.d.ts +486 -0
- package/dist/core/expressions/resource-analyzer.d.ts.map +1 -0
- package/dist/core/expressions/resource-analyzer.js +1086 -0
- package/dist/core/expressions/resource-analyzer.js.map +1 -0
- package/dist/core/expressions/resource-validation.d.ts +187 -0
- package/dist/core/expressions/resource-validation.d.ts.map +1 -0
- package/dist/core/expressions/resource-validation.js +552 -0
- package/dist/core/expressions/resource-validation.js.map +1 -0
- package/dist/core/expressions/runtime-error-mapper.d.ts +138 -0
- package/dist/core/expressions/runtime-error-mapper.d.ts.map +1 -0
- package/dist/core/expressions/runtime-error-mapper.js +412 -0
- package/dist/core/expressions/runtime-error-mapper.js.map +1 -0
- package/dist/core/expressions/source-map.d.ts +168 -0
- package/dist/core/expressions/source-map.d.ts.map +1 -0
- package/dist/core/expressions/source-map.js +350 -0
- package/dist/core/expressions/source-map.js.map +1 -0
- package/dist/core/expressions/status-builder-analyzer.d.ts +353 -0
- package/dist/core/expressions/status-builder-analyzer.d.ts.map +1 -0
- package/dist/core/expressions/status-builder-analyzer.js +1311 -0
- package/dist/core/expressions/status-builder-analyzer.js.map +1 -0
- package/dist/core/expressions/type-inference.d.ts +184 -0
- package/dist/core/expressions/type-inference.d.ts.map +1 -0
- package/dist/core/expressions/type-inference.js +838 -0
- package/dist/core/expressions/type-inference.js.map +1 -0
- package/dist/core/expressions/type-safety.d.ts +203 -0
- package/dist/core/expressions/type-safety.d.ts.map +1 -0
- package/dist/core/expressions/type-safety.js +442 -0
- package/dist/core/expressions/type-safety.js.map +1 -0
- package/dist/core/expressions/types.d.ts +282 -0
- package/dist/core/expressions/types.d.ts.map +1 -0
- package/dist/core/expressions/types.js +8 -0
- package/dist/core/expressions/types.js.map +1 -0
- package/dist/core/kubernetes/client-provider.js +2 -2
- package/dist/core/kubernetes/client-provider.js.map +1 -1
- package/dist/core/references/cel.d.ts +13 -1
- package/dist/core/references/cel.d.ts.map +1 -1
- package/dist/core/references/cel.js +50 -0
- package/dist/core/references/cel.js.map +1 -1
- package/dist/core/references/schema-proxy.d.ts.map +1 -1
- package/dist/core/references/schema-proxy.js +13 -8
- package/dist/core/references/schema-proxy.js.map +1 -1
- package/dist/core/serialization/core.d.ts.map +1 -1
- package/dist/core/serialization/core.js +573 -9
- package/dist/core/serialization/core.js.map +1 -1
- package/dist/core/types/deployment.d.ts +7 -0
- package/dist/core/types/deployment.d.ts.map +1 -1
- package/dist/core/types/deployment.js +7 -0
- package/dist/core/types/deployment.js.map +1 -1
- package/dist/core/types/index.d.ts +1 -0
- package/dist/core/types/index.d.ts.map +1 -1
- package/dist/core/types/index.js.map +1 -1
- package/dist/core/validation/cel-validator.d.ts.map +1 -1
- package/dist/core/validation/cel-validator.js +4 -8
- package/dist/core/validation/cel-validator.js.map +1 -1
- package/dist/core.d.ts +1 -1
- package/dist/core.d.ts.map +1 -1
- package/dist/core.js +1 -1
- package/dist/core.js.map +1 -1
- package/dist/factories/helm/helm-release.d.ts.map +1 -1
- package/dist/factories/helm/helm-release.js +0 -5
- package/dist/factories/helm/helm-release.js.map +1 -1
- package/dist/factories/helm/types.d.ts +1 -1
- package/dist/factories/helm/types.d.ts.map +1 -1
- package/dist/factories/index.js +1 -0
- package/dist/factories/index.js.map +1 -1
- package/dist/factories/shared.d.ts.map +1 -1
- package/dist/factories/shared.js +21 -1
- package/dist/factories/shared.js.map +1 -1
- package/dist/factories/simple/index.d.ts +2 -2
- package/dist/factories/simple/index.d.ts.map +1 -1
- package/dist/factories/simple/workloads/deployment.d.ts +3 -3
- package/dist/factories/simple/workloads/deployment.d.ts.map +1 -1
- package/dist/factories/simple/workloads/deployment.js +37 -11
- package/dist/factories/simple/workloads/deployment.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/type-guards.d.ts +6 -0
- package/dist/utils/type-guards.d.ts.map +1 -1
- package/dist/utils/type-guards.js +25 -2
- package/dist/utils/type-guards.js.map +1 -1
- package/package.json +6 -1
|
@@ -0,0 +1,460 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Conditional Expression Validation
|
|
3
|
+
*
|
|
4
|
+
* This module provides comprehensive validation for conditional expressions
|
|
5
|
+
* containing KubernetesRef objects, ensuring they are well-formed and
|
|
6
|
+
* appropriate for their intended contexts.
|
|
7
|
+
*/
|
|
8
|
+
import { getComponentLogger } from '../logging/index.js';
|
|
9
|
+
import { isKubernetesRef } from '../../utils/type-guards.js';
|
|
10
|
+
import { MagicProxyDetector } from './magic-proxy-detector.js';
|
|
11
|
+
import { ExpressionContextDetector } from './context-detector.js';
|
|
12
|
+
const logger = getComponentLogger('conditional-validation');
|
|
13
|
+
/**
|
|
14
|
+
* Conditional Expression Validator
|
|
15
|
+
*
|
|
16
|
+
* Provides comprehensive validation for conditional expressions containing
|
|
17
|
+
* KubernetesRef objects, ensuring they are well-formed and contextually appropriate.
|
|
18
|
+
*/
|
|
19
|
+
export class ConditionalExpressionValidator {
|
|
20
|
+
rules = new Map();
|
|
21
|
+
magicProxyDetector;
|
|
22
|
+
contextDetector;
|
|
23
|
+
constructor() {
|
|
24
|
+
this.magicProxyDetector = new MagicProxyDetector();
|
|
25
|
+
this.contextDetector = new ExpressionContextDetector();
|
|
26
|
+
// Register built-in validation rules
|
|
27
|
+
this.registerBuiltInRules();
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Validate a conditional expression
|
|
31
|
+
*
|
|
32
|
+
* @param expression - Expression to validate
|
|
33
|
+
* @param context - Factory context
|
|
34
|
+
* @param config - Validation configuration
|
|
35
|
+
* @returns Comprehensive validation result
|
|
36
|
+
*/
|
|
37
|
+
validateExpression(expression, context, config = {}) {
|
|
38
|
+
const startTime = performance.now();
|
|
39
|
+
logger.debug('Starting conditional expression validation', {
|
|
40
|
+
factoryType: context.factoryType,
|
|
41
|
+
expressionType: typeof expression,
|
|
42
|
+
strictMode: config.strictMode
|
|
43
|
+
});
|
|
44
|
+
// Detect KubernetesRef objects
|
|
45
|
+
const detectionResult = this.magicProxyDetector.detectKubernetesRefs(expression, {
|
|
46
|
+
maxDepth: 10,
|
|
47
|
+
includeDetailedPaths: true,
|
|
48
|
+
analyzeReferenceSources: true
|
|
49
|
+
});
|
|
50
|
+
// Detect expression context
|
|
51
|
+
const contextResult = this.contextDetector.detectContext(expression, {
|
|
52
|
+
factoryType: context.factoryType,
|
|
53
|
+
...(context.availableResources && { availableResources: context.availableResources }),
|
|
54
|
+
...(context.schemaProxy && { schemaProxy: context.schemaProxy })
|
|
55
|
+
});
|
|
56
|
+
// Initialize result
|
|
57
|
+
const result = {
|
|
58
|
+
isValid: true,
|
|
59
|
+
ruleResults: new Map(),
|
|
60
|
+
messages: { errors: [], warnings: [], info: [] },
|
|
61
|
+
contextResult,
|
|
62
|
+
detectionResult,
|
|
63
|
+
metrics: {
|
|
64
|
+
validationTimeMs: 0,
|
|
65
|
+
rulesEvaluated: 0,
|
|
66
|
+
referencesValidated: detectionResult.references.length
|
|
67
|
+
},
|
|
68
|
+
summary: {
|
|
69
|
+
totalRules: 0,
|
|
70
|
+
passedRules: 0,
|
|
71
|
+
failedRules: 0,
|
|
72
|
+
errorCount: 0,
|
|
73
|
+
warningCount: 0,
|
|
74
|
+
infoCount: 0
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
// Get applicable rules
|
|
78
|
+
const applicableRules = this.getApplicableRules(contextResult.context, config);
|
|
79
|
+
result.summary.totalRules = applicableRules.length;
|
|
80
|
+
// Validate with each applicable rule
|
|
81
|
+
for (const rule of applicableRules) {
|
|
82
|
+
try {
|
|
83
|
+
const ruleResult = rule.validate(expression, context, detectionResult);
|
|
84
|
+
result.ruleResults.set(rule.id, ruleResult);
|
|
85
|
+
result.metrics.rulesEvaluated++;
|
|
86
|
+
if (ruleResult.valid) {
|
|
87
|
+
result.summary.passedRules++;
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
result.summary.failedRules++;
|
|
91
|
+
// Add message to appropriate severity category
|
|
92
|
+
const message = `${rule.name}: ${ruleResult.message || 'Validation failed'}`;
|
|
93
|
+
switch (rule.severity) {
|
|
94
|
+
case 'error':
|
|
95
|
+
result.messages.errors.push(message);
|
|
96
|
+
result.summary.errorCount++;
|
|
97
|
+
result.isValid = false;
|
|
98
|
+
break;
|
|
99
|
+
case 'warning':
|
|
100
|
+
result.messages.warnings.push(message);
|
|
101
|
+
result.summary.warningCount++;
|
|
102
|
+
if (config.strictMode) {
|
|
103
|
+
result.isValid = false;
|
|
104
|
+
}
|
|
105
|
+
break;
|
|
106
|
+
case 'info':
|
|
107
|
+
result.messages.info.push(message);
|
|
108
|
+
result.summary.infoCount++;
|
|
109
|
+
break;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
catch (error) {
|
|
114
|
+
logger.warn('Validation rule failed with error', {
|
|
115
|
+
ruleId: rule.id,
|
|
116
|
+
error: error instanceof Error ? error.message : String(error)
|
|
117
|
+
});
|
|
118
|
+
result.ruleResults.set(rule.id, {
|
|
119
|
+
valid: false,
|
|
120
|
+
message: `Rule execution failed: ${error}`,
|
|
121
|
+
details: { error: String(error) }
|
|
122
|
+
});
|
|
123
|
+
result.summary.failedRules++;
|
|
124
|
+
result.messages.errors.push(`${rule.name}: Rule execution failed`);
|
|
125
|
+
result.summary.errorCount++;
|
|
126
|
+
result.isValid = false;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
result.metrics.validationTimeMs = performance.now() - startTime;
|
|
130
|
+
logger.debug('Conditional expression validation completed', {
|
|
131
|
+
isValid: result.isValid,
|
|
132
|
+
totalRules: result.summary.totalRules,
|
|
133
|
+
errorCount: result.summary.errorCount,
|
|
134
|
+
warningCount: result.summary.warningCount,
|
|
135
|
+
validationTimeMs: result.metrics.validationTimeMs
|
|
136
|
+
});
|
|
137
|
+
return result;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Register a custom validation rule
|
|
141
|
+
*
|
|
142
|
+
* @param rule - Validation rule to register
|
|
143
|
+
*/
|
|
144
|
+
registerRule(rule) {
|
|
145
|
+
this.rules.set(rule.id, rule);
|
|
146
|
+
logger.debug('Validation rule registered', {
|
|
147
|
+
ruleId: rule.id,
|
|
148
|
+
ruleName: rule.name,
|
|
149
|
+
severity: rule.severity
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Unregister a validation rule
|
|
154
|
+
*
|
|
155
|
+
* @param ruleId - ID of the rule to unregister
|
|
156
|
+
* @returns Whether the rule was successfully unregistered
|
|
157
|
+
*/
|
|
158
|
+
unregisterRule(ruleId) {
|
|
159
|
+
const existed = this.rules.has(ruleId);
|
|
160
|
+
this.rules.delete(ruleId);
|
|
161
|
+
if (existed) {
|
|
162
|
+
logger.debug('Validation rule unregistered', { ruleId });
|
|
163
|
+
}
|
|
164
|
+
return existed;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Get all registered validation rules
|
|
168
|
+
*
|
|
169
|
+
* @returns Array of validation rules
|
|
170
|
+
*/
|
|
171
|
+
getRules() {
|
|
172
|
+
return Array.from(this.rules.values());
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Get applicable rules for a specific context
|
|
176
|
+
*/
|
|
177
|
+
getApplicableRules(context, config) {
|
|
178
|
+
const rules = Array.from(this.rules.values());
|
|
179
|
+
return rules.filter(rule => {
|
|
180
|
+
// Check if rule is enabled
|
|
181
|
+
if (!rule.enabled)
|
|
182
|
+
return false;
|
|
183
|
+
// Check if rule is disabled in config
|
|
184
|
+
if (config.disabledRules?.includes(rule.id))
|
|
185
|
+
return false;
|
|
186
|
+
// Check if rule applies to this context
|
|
187
|
+
if (rule.applicableContexts.length > 0 &&
|
|
188
|
+
!rule.applicableContexts.includes(context) &&
|
|
189
|
+
!rule.applicableContexts.includes('*')) {
|
|
190
|
+
return false;
|
|
191
|
+
}
|
|
192
|
+
return true;
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Register built-in validation rules
|
|
197
|
+
*/
|
|
198
|
+
registerBuiltInRules() {
|
|
199
|
+
// Rule: KubernetesRef objects should be well-formed
|
|
200
|
+
this.registerRule({
|
|
201
|
+
id: 'well-formed-kubernetes-ref',
|
|
202
|
+
name: 'Well-formed KubernetesRef',
|
|
203
|
+
description: 'KubernetesRef objects should have valid resourceId and fieldPath',
|
|
204
|
+
severity: 'error',
|
|
205
|
+
applicableContexts: ['*'],
|
|
206
|
+
enabled: true,
|
|
207
|
+
validate: (_expression, _context, detection) => {
|
|
208
|
+
for (const refInfo of detection.references) {
|
|
209
|
+
const ref = refInfo.ref;
|
|
210
|
+
if (!ref.resourceId || typeof ref.resourceId !== 'string') {
|
|
211
|
+
return {
|
|
212
|
+
valid: false,
|
|
213
|
+
message: 'KubernetesRef must have a valid resourceId',
|
|
214
|
+
details: { ref, path: refInfo.path }
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
if (!ref.fieldPath || typeof ref.fieldPath !== 'string') {
|
|
218
|
+
return {
|
|
219
|
+
valid: false,
|
|
220
|
+
message: 'KubernetesRef must have a valid fieldPath',
|
|
221
|
+
details: { ref, path: refInfo.path }
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
// Validate field path format
|
|
225
|
+
if (!/^[a-zA-Z][a-zA-Z0-9]*(\.[a-zA-Z][a-zA-Z0-9]*|\[\d+\])*$/.test(ref.fieldPath)) {
|
|
226
|
+
return {
|
|
227
|
+
valid: false,
|
|
228
|
+
message: 'KubernetesRef fieldPath has invalid format',
|
|
229
|
+
suggestions: ['Use dot notation for nested fields', 'Use bracket notation for array access'],
|
|
230
|
+
details: { fieldPath: ref.fieldPath, path: refInfo.path }
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
return { valid: true };
|
|
235
|
+
}
|
|
236
|
+
});
|
|
237
|
+
// Rule: Conditional expressions should evaluate to boolean
|
|
238
|
+
this.registerRule({
|
|
239
|
+
id: 'conditional-boolean-result',
|
|
240
|
+
name: 'Conditional Boolean Result',
|
|
241
|
+
description: 'Conditional expressions should evaluate to boolean values',
|
|
242
|
+
severity: 'warning',
|
|
243
|
+
applicableContexts: ['*'], // Apply to all contexts
|
|
244
|
+
enabled: true,
|
|
245
|
+
validate: (expression, _context, _detection) => {
|
|
246
|
+
// Check for boolean literals
|
|
247
|
+
if (typeof expression === 'boolean') {
|
|
248
|
+
return { valid: true };
|
|
249
|
+
}
|
|
250
|
+
// Check for boolean-like string expressions
|
|
251
|
+
if (typeof expression === 'string') {
|
|
252
|
+
const hasBooleanOperators = /[><=!]=?|&&|\|\||true|false|ready|available|enabled|disabled/i.test(expression);
|
|
253
|
+
if (hasBooleanOperators) {
|
|
254
|
+
return { valid: true };
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
// Check for KubernetesRef that might resolve to boolean
|
|
258
|
+
if (isKubernetesRef(expression)) {
|
|
259
|
+
// Allow KubernetesRef objects - they might resolve to boolean values
|
|
260
|
+
return { valid: true };
|
|
261
|
+
}
|
|
262
|
+
return {
|
|
263
|
+
valid: false,
|
|
264
|
+
message: 'Conditional expressions should evaluate to boolean values',
|
|
265
|
+
suggestions: [
|
|
266
|
+
'Add comparison operators (>, <, ==, !=)',
|
|
267
|
+
'Add logical operators (&&, ||)',
|
|
268
|
+
'Use boolean literals (true, false)'
|
|
269
|
+
]
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
});
|
|
273
|
+
// Rule: Resource references should exist in context
|
|
274
|
+
this.registerRule({
|
|
275
|
+
id: 'resource-reference-exists',
|
|
276
|
+
name: 'Resource Reference Exists',
|
|
277
|
+
description: 'Referenced resources should exist in the current context',
|
|
278
|
+
severity: 'warning',
|
|
279
|
+
applicableContexts: ['*'],
|
|
280
|
+
enabled: true,
|
|
281
|
+
validate: (_expression, context, detection) => {
|
|
282
|
+
const availableResources = context.availableResources || {};
|
|
283
|
+
for (const refInfo of detection.references) {
|
|
284
|
+
const ref = refInfo.ref;
|
|
285
|
+
// Skip schema references
|
|
286
|
+
if (ref.resourceId === '__schema__')
|
|
287
|
+
continue;
|
|
288
|
+
// Check if resource exists in context
|
|
289
|
+
if (!(ref.resourceId in availableResources)) {
|
|
290
|
+
return {
|
|
291
|
+
valid: false,
|
|
292
|
+
message: `Referenced resource '${ref.resourceId}' not found in current context`,
|
|
293
|
+
suggestions: [
|
|
294
|
+
'Check resource name spelling',
|
|
295
|
+
'Ensure resource is created before referencing',
|
|
296
|
+
'Verify resource is in the same composition context'
|
|
297
|
+
],
|
|
298
|
+
details: { resourceId: ref.resourceId, path: refInfo.path }
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
return { valid: true };
|
|
303
|
+
}
|
|
304
|
+
});
|
|
305
|
+
// Rule: Field paths should be reasonable
|
|
306
|
+
this.registerRule({
|
|
307
|
+
id: 'reasonable-field-paths',
|
|
308
|
+
name: 'Reasonable Field Paths',
|
|
309
|
+
description: 'Field paths should follow common Kubernetes patterns',
|
|
310
|
+
severity: 'info',
|
|
311
|
+
applicableContexts: ['*'],
|
|
312
|
+
enabled: true,
|
|
313
|
+
validate: (_expression, _context, detection) => {
|
|
314
|
+
for (const refInfo of detection.references) {
|
|
315
|
+
const ref = refInfo.ref;
|
|
316
|
+
const fieldPath = ref.fieldPath;
|
|
317
|
+
// Check for overly deep nesting
|
|
318
|
+
const depth = fieldPath.split('.').length;
|
|
319
|
+
if (depth > 6) {
|
|
320
|
+
return {
|
|
321
|
+
valid: false,
|
|
322
|
+
message: `Field path '${fieldPath}' is very deeply nested (${depth} levels)`,
|
|
323
|
+
suggestions: ['Consider using intermediate references', 'Verify the field path is correct'],
|
|
324
|
+
details: { fieldPath, depth, path: refInfo.path }
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
// Check for common typos in Kubernetes field names
|
|
328
|
+
const commonFields = ['metadata', 'spec', 'status', 'data', 'stringData'];
|
|
329
|
+
const pathParts = fieldPath.split('.');
|
|
330
|
+
for (const part of pathParts) {
|
|
331
|
+
if (part.includes('[') && part.includes(']'))
|
|
332
|
+
continue; // Skip array access
|
|
333
|
+
// Check for common typos
|
|
334
|
+
const similarFields = commonFields.filter(field => this.levenshteinDistance(part.toLowerCase(), field.toLowerCase()) === 1);
|
|
335
|
+
if (similarFields.length > 0) {
|
|
336
|
+
return {
|
|
337
|
+
valid: false,
|
|
338
|
+
message: `Field '${part}' might be a typo, did you mean '${similarFields[0]}'?`,
|
|
339
|
+
suggestions: [`Use '${similarFields[0]}' instead of '${part}'`],
|
|
340
|
+
details: { fieldPath, suspiciousPart: part, suggestions: similarFields }
|
|
341
|
+
};
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
return { valid: true };
|
|
346
|
+
}
|
|
347
|
+
});
|
|
348
|
+
// Rule: readyWhen expressions should reference status fields
|
|
349
|
+
this.registerRule({
|
|
350
|
+
id: 'ready-when-status-reference',
|
|
351
|
+
name: 'ReadyWhen Status Reference',
|
|
352
|
+
description: 'readyWhen expressions should typically reference status fields',
|
|
353
|
+
severity: 'info',
|
|
354
|
+
applicableContexts: ['*'], // Apply to all contexts, but only validate when there are references
|
|
355
|
+
enabled: true,
|
|
356
|
+
validate: (_expression, _context, detection) => {
|
|
357
|
+
if (detection.references.length === 0) {
|
|
358
|
+
return { valid: true }; // No references to validate
|
|
359
|
+
}
|
|
360
|
+
const hasStatusReferences = detection.references.some(refInfo => refInfo.ref.fieldPath.includes('status'));
|
|
361
|
+
if (!hasStatusReferences) {
|
|
362
|
+
return {
|
|
363
|
+
valid: false,
|
|
364
|
+
message: 'readyWhen expressions typically reference resource status fields',
|
|
365
|
+
suggestions: [
|
|
366
|
+
'Reference .status fields for resource readiness',
|
|
367
|
+
'Use status.conditions for detailed readiness checks',
|
|
368
|
+
'Consider status.readyReplicas, status.phase, etc.'
|
|
369
|
+
]
|
|
370
|
+
};
|
|
371
|
+
}
|
|
372
|
+
return { valid: true };
|
|
373
|
+
}
|
|
374
|
+
});
|
|
375
|
+
// Rule: Circular reference detection
|
|
376
|
+
this.registerRule({
|
|
377
|
+
id: 'no-circular-references',
|
|
378
|
+
name: 'No Circular References',
|
|
379
|
+
description: 'Expressions should not create circular dependencies',
|
|
380
|
+
severity: 'error',
|
|
381
|
+
applicableContexts: ['*'],
|
|
382
|
+
enabled: true,
|
|
383
|
+
validate: (_expression, context, detection) => {
|
|
384
|
+
const currentResourceId = context.resourceId;
|
|
385
|
+
// Check if any reference points back to the current resource
|
|
386
|
+
for (const refInfo of detection.references) {
|
|
387
|
+
const ref = refInfo.ref;
|
|
388
|
+
if (ref.resourceId === currentResourceId) {
|
|
389
|
+
return {
|
|
390
|
+
valid: false,
|
|
391
|
+
message: `Circular reference detected: resource '${currentResourceId}' references itself`,
|
|
392
|
+
suggestions: [
|
|
393
|
+
'Remove self-references',
|
|
394
|
+
'Use different resource for the reference',
|
|
395
|
+
'Consider using schema references instead'
|
|
396
|
+
],
|
|
397
|
+
details: { resourceId: currentResourceId, fieldPath: ref.fieldPath }
|
|
398
|
+
};
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
return { valid: true };
|
|
402
|
+
}
|
|
403
|
+
});
|
|
404
|
+
logger.info('Built-in validation rules registered', {
|
|
405
|
+
ruleCount: this.rules.size
|
|
406
|
+
});
|
|
407
|
+
}
|
|
408
|
+
/**
|
|
409
|
+
* Calculate Levenshtein distance between two strings
|
|
410
|
+
*/
|
|
411
|
+
levenshteinDistance(str1, str2) {
|
|
412
|
+
const matrix = Array(str2.length + 1).fill(null).map(() => Array(str1.length + 1).fill(0));
|
|
413
|
+
for (let i = 0; i <= str1.length; i++)
|
|
414
|
+
matrix[0][i] = i;
|
|
415
|
+
for (let j = 0; j <= str2.length; j++)
|
|
416
|
+
matrix[j][0] = j;
|
|
417
|
+
for (let j = 1; j <= str2.length; j++) {
|
|
418
|
+
for (let i = 1; i <= str1.length; i++) {
|
|
419
|
+
const indicator = str1[i - 1] === str2[j - 1] ? 0 : 1;
|
|
420
|
+
matrix[j][i] = Math.min(matrix[j]?.[i - 1] + 1, // deletion
|
|
421
|
+
matrix[j - 1]?.[i] + 1, // insertion
|
|
422
|
+
matrix[j - 1]?.[i - 1] + indicator // substitution
|
|
423
|
+
);
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
return matrix[str2.length]?.[str1.length];
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
/**
|
|
430
|
+
* Global conditional expression validator instance
|
|
431
|
+
*/
|
|
432
|
+
export const conditionalExpressionValidator = new ConditionalExpressionValidator();
|
|
433
|
+
/**
|
|
434
|
+
* Utility function to validate a conditional expression
|
|
435
|
+
*
|
|
436
|
+
* @param expression - Expression to validate
|
|
437
|
+
* @param context - Factory context
|
|
438
|
+
* @param config - Validation configuration
|
|
439
|
+
* @returns Validation result
|
|
440
|
+
*/
|
|
441
|
+
export function validateConditionalExpression(expression, context, config) {
|
|
442
|
+
return conditionalExpressionValidator.validateExpression(expression, context, config);
|
|
443
|
+
}
|
|
444
|
+
/**
|
|
445
|
+
* Utility function to register a custom validation rule
|
|
446
|
+
*
|
|
447
|
+
* @param rule - Validation rule to register
|
|
448
|
+
*/
|
|
449
|
+
export function registerValidationRule(rule) {
|
|
450
|
+
conditionalExpressionValidator.registerRule(rule);
|
|
451
|
+
}
|
|
452
|
+
/**
|
|
453
|
+
* Utility function to get all validation rules
|
|
454
|
+
*
|
|
455
|
+
* @returns Array of validation rules
|
|
456
|
+
*/
|
|
457
|
+
export function getValidationRules() {
|
|
458
|
+
return conditionalExpressionValidator.getRules();
|
|
459
|
+
}
|
|
460
|
+
//# sourceMappingURL=conditional-validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conditional-validation.js","sourceRoot":"","sources":["../../../src/core/expressions/conditional-validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context-Aware CEL Generation Strategies
|
|
3
|
+
*
|
|
4
|
+
* This module provides context-specific CEL generation strategies for converting
|
|
5
|
+
* KubernetesRef objects to appropriate CEL expressions based on the usage context.
|
|
6
|
+
*/
|
|
7
|
+
import type { CelExpression, KubernetesRef } from '../types/common.js';
|
|
8
|
+
import type { Enhanced } from '../types/kubernetes.js';
|
|
9
|
+
import type { SchemaProxy } from '../types/serialization.js';
|
|
10
|
+
import type { ExpressionContext, CelGenerationStrategy, ContextDetectionResult } from './context-detector.js';
|
|
11
|
+
/**
|
|
12
|
+
* Context-aware CEL generation configuration
|
|
13
|
+
*/
|
|
14
|
+
export interface CelGenerationConfig {
|
|
15
|
+
/** Factory type being used */
|
|
16
|
+
factoryType: 'direct' | 'kro';
|
|
17
|
+
/** Available resources for reference validation */
|
|
18
|
+
availableResources?: Record<string, Enhanced<any, any>>;
|
|
19
|
+
/** Schema proxy for schema field references */
|
|
20
|
+
schemaProxy?: SchemaProxy<any, any>;
|
|
21
|
+
/** Whether to use strict type checking */
|
|
22
|
+
strictTypeChecking?: boolean;
|
|
23
|
+
/** Whether to optimize for performance */
|
|
24
|
+
optimizeForPerformance?: boolean;
|
|
25
|
+
/** Whether to include debug information */
|
|
26
|
+
includeDebugInfo?: boolean;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* CEL generation result
|
|
30
|
+
*/
|
|
31
|
+
export interface CelGenerationResult {
|
|
32
|
+
/** Generated CEL expression */
|
|
33
|
+
celExpression: CelExpression;
|
|
34
|
+
/** Strategy used for generation */
|
|
35
|
+
strategy: CelGenerationStrategy;
|
|
36
|
+
/** Context that was detected/used */
|
|
37
|
+
context: ExpressionContext;
|
|
38
|
+
/** Dependencies that were resolved */
|
|
39
|
+
dependencies: KubernetesRef<any>[];
|
|
40
|
+
/** Any warnings generated during conversion */
|
|
41
|
+
warnings: string[];
|
|
42
|
+
/** Debug information (if enabled) */
|
|
43
|
+
debugInfo?: CelGenerationDebugInfo;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Debug information for CEL generation
|
|
47
|
+
*/
|
|
48
|
+
export interface CelGenerationDebugInfo {
|
|
49
|
+
/** Original KubernetesRef objects */
|
|
50
|
+
originalRefs: KubernetesRef<any>[];
|
|
51
|
+
/** Transformation steps applied */
|
|
52
|
+
transformationSteps: string[];
|
|
53
|
+
/** Context detection details */
|
|
54
|
+
contextDetection: ContextDetectionResult;
|
|
55
|
+
/** Performance metrics */
|
|
56
|
+
performanceMetrics?: {
|
|
57
|
+
generationTimeMs: number;
|
|
58
|
+
cacheHits: number;
|
|
59
|
+
cacheMisses: number;
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Context-aware CEL generator
|
|
64
|
+
*/
|
|
65
|
+
export declare class ContextAwareCelGenerator {
|
|
66
|
+
/**
|
|
67
|
+
* Generate CEL expression from KubernetesRef objects based on context
|
|
68
|
+
*/
|
|
69
|
+
generateCelExpression(kubernetesRefs: KubernetesRef<any>[], context: ExpressionContext, strategy: CelGenerationStrategy, config: CelGenerationConfig): CelGenerationResult;
|
|
70
|
+
/**
|
|
71
|
+
* Generate status expression CEL for status builders
|
|
72
|
+
*/
|
|
73
|
+
private generateStatusExpression;
|
|
74
|
+
/**
|
|
75
|
+
* Generate resource reference CEL for resource builders
|
|
76
|
+
*/
|
|
77
|
+
private generateResourceReference;
|
|
78
|
+
/**
|
|
79
|
+
* Generate conditional check CEL for conditional expressions
|
|
80
|
+
*/
|
|
81
|
+
private generateConditionalCheck;
|
|
82
|
+
/**
|
|
83
|
+
* Generate readiness check CEL for readiness expressions
|
|
84
|
+
*/
|
|
85
|
+
private generateReadinessCheck;
|
|
86
|
+
/**
|
|
87
|
+
* Generate template interpolation CEL for template literals
|
|
88
|
+
*/
|
|
89
|
+
private generateTemplateInterpolation;
|
|
90
|
+
/**
|
|
91
|
+
* Generate direct evaluation CEL (pass-through for direct factory)
|
|
92
|
+
*/
|
|
93
|
+
private generateDirectEvaluation;
|
|
94
|
+
/**
|
|
95
|
+
* Generate Kro-specific status reference
|
|
96
|
+
*/
|
|
97
|
+
private generateKroStatusReference;
|
|
98
|
+
/**
|
|
99
|
+
* Generate direct factory status reference
|
|
100
|
+
*/
|
|
101
|
+
private generateDirectStatusReference;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Context-specific CEL generation utilities
|
|
105
|
+
*/
|
|
106
|
+
export declare class CelGenerationUtils {
|
|
107
|
+
/**
|
|
108
|
+
* Determine the best CEL generation strategy for a given context
|
|
109
|
+
*/
|
|
110
|
+
static determineBestStrategy(context: ExpressionContext, _kubernetesRefs: KubernetesRef<any>[], factoryType: 'direct' | 'kro'): CelGenerationStrategy;
|
|
111
|
+
/**
|
|
112
|
+
* Validate that KubernetesRef objects are appropriate for the given context
|
|
113
|
+
*/
|
|
114
|
+
static validateRefsForContext(kubernetesRefs: KubernetesRef<any>[], context: ExpressionContext, availableResources?: Record<string, Enhanced<any, any>>): {
|
|
115
|
+
valid: boolean;
|
|
116
|
+
errors: string[];
|
|
117
|
+
};
|
|
118
|
+
/**
|
|
119
|
+
* Optimize CEL expression for performance
|
|
120
|
+
*/
|
|
121
|
+
static optimizeCelExpression(celExpression: CelExpression, context: ExpressionContext): CelExpression;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Default context-aware CEL generator instance
|
|
125
|
+
*/
|
|
126
|
+
export declare const contextAwareCelGenerator: ContextAwareCelGenerator;
|
|
127
|
+
//# sourceMappingURL=context-aware-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-aware-generator.d.ts","sourceRoot":"","sources":["../../../src/core/expressions/context-aware-generator.ts"],"names":[],"mappings":"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"}
|