typekro 0.2.2 → 0.3.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/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 +0 -1
- package/dist/core/deployment/engine.d.ts.map +1 -1
- package/dist/core/deployment/engine.js +0 -1
- 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/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 +343 -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 +1301 -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/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 +4 -0
- package/dist/core/types/deployment.d.ts.map +1 -1
- 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.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/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,552 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resource Reference Type Validation
|
|
3
|
+
*
|
|
4
|
+
* This module provides validation for resource references during JavaScript
|
|
5
|
+
* to CEL expression conversion. It ensures that resource references are
|
|
6
|
+
* type-safe and that field paths are valid.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Resource validation error
|
|
10
|
+
*/
|
|
11
|
+
export class ResourceValidationError extends Error {
|
|
12
|
+
resourceRef;
|
|
13
|
+
errorType;
|
|
14
|
+
location;
|
|
15
|
+
constructor(message, resourceRef, errorType, location) {
|
|
16
|
+
super(message);
|
|
17
|
+
this.resourceRef = resourceRef;
|
|
18
|
+
this.errorType = errorType;
|
|
19
|
+
this.location = location;
|
|
20
|
+
this.name = 'ResourceValidationError';
|
|
21
|
+
}
|
|
22
|
+
static forResourceNotFound(resourceRef, resourceId, availableResources, location) {
|
|
23
|
+
return new ResourceValidationError(`Resource '${resourceId}' not found. Available resources: ${availableResources.join(', ')}`, resourceRef, 'RESOURCE_NOT_FOUND', location);
|
|
24
|
+
}
|
|
25
|
+
static forInvalidFieldPath(resourceRef, fieldPath, resourceType, location) {
|
|
26
|
+
return new ResourceValidationError(`Field path '${fieldPath}' is not valid for resource type '${resourceType}'`, resourceRef, 'INVALID_FIELD_PATH', location);
|
|
27
|
+
}
|
|
28
|
+
static forTypeIncompatibility(resourceRef, expectedType, actualType, location) {
|
|
29
|
+
return new ResourceValidationError(`Type incompatibility: expected '${expectedType}', got '${actualType}'`, resourceRef, 'TYPE_INCOMPATIBILITY', location);
|
|
30
|
+
}
|
|
31
|
+
static forCircularReference(resourceRef, dependencyChain, location) {
|
|
32
|
+
return new ResourceValidationError(`Circular reference detected: ${dependencyChain.join(' -> ')} -> ${resourceRef}`, resourceRef, 'CIRCULAR_REFERENCE', location);
|
|
33
|
+
}
|
|
34
|
+
static forSchemaFieldNotFound(resourceRef, fieldPath, availableFields, location) {
|
|
35
|
+
return new ResourceValidationError(`Schema field '${fieldPath}' not found. Available fields: ${availableFields.join(', ')}`, resourceRef, 'SCHEMA_FIELD_NOT_FOUND', location);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Resource validation warning
|
|
40
|
+
*/
|
|
41
|
+
export class ResourceValidationWarning {
|
|
42
|
+
message;
|
|
43
|
+
resourceRef;
|
|
44
|
+
warningType;
|
|
45
|
+
location;
|
|
46
|
+
constructor(message, resourceRef, warningType, location) {
|
|
47
|
+
this.message = message;
|
|
48
|
+
this.resourceRef = resourceRef;
|
|
49
|
+
this.warningType = warningType;
|
|
50
|
+
this.location = location;
|
|
51
|
+
}
|
|
52
|
+
static forPotentialNullAccess(resourceRef, fieldPath, location) {
|
|
53
|
+
return new ResourceValidationWarning(`Field '${fieldPath}' may be null or undefined at runtime`, resourceRef, 'POTENTIAL_NULL_ACCESS', location);
|
|
54
|
+
}
|
|
55
|
+
static forDeprecatedField(resourceRef, fieldPath, replacement, location) {
|
|
56
|
+
const message = replacement
|
|
57
|
+
? `Field '${fieldPath}' is deprecated, use '${replacement}' instead`
|
|
58
|
+
: `Field '${fieldPath}' is deprecated`;
|
|
59
|
+
return new ResourceValidationWarning(message, resourceRef, 'DEPRECATED_FIELD', location);
|
|
60
|
+
}
|
|
61
|
+
static forPerformanceImpact(resourceRef, reason, location) {
|
|
62
|
+
return new ResourceValidationWarning(`Potential performance impact: ${reason}`, resourceRef, 'PERFORMANCE_IMPACT', location);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Resource reference validator
|
|
67
|
+
*/
|
|
68
|
+
export class ResourceReferenceValidator {
|
|
69
|
+
validationCache = new Map();
|
|
70
|
+
dependencyGraph = new Map();
|
|
71
|
+
/**
|
|
72
|
+
* Validate a KubernetesRef object
|
|
73
|
+
*/
|
|
74
|
+
validateKubernetesRef(ref, availableResources, schemaProxy, context) {
|
|
75
|
+
const refKey = `${ref.resourceId}.${ref.fieldPath}`;
|
|
76
|
+
// Check cache first
|
|
77
|
+
const cached = this.validationCache.get(refKey);
|
|
78
|
+
if (cached && !context?.skipCache) {
|
|
79
|
+
return cached;
|
|
80
|
+
}
|
|
81
|
+
const errors = [];
|
|
82
|
+
const warnings = [];
|
|
83
|
+
const suggestions = [];
|
|
84
|
+
let resolvedType;
|
|
85
|
+
let metadata;
|
|
86
|
+
try {
|
|
87
|
+
if (ref.resourceId === '__schema__') {
|
|
88
|
+
// Validate schema reference
|
|
89
|
+
const result = this.validateSchemaReference(ref, schemaProxy, context);
|
|
90
|
+
resolvedType = result.resolvedType;
|
|
91
|
+
metadata = result.metadata;
|
|
92
|
+
errors.push(...result.errors);
|
|
93
|
+
warnings.push(...result.warnings);
|
|
94
|
+
suggestions.push(...result.suggestions);
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
// Validate resource reference
|
|
98
|
+
const result = this.validateResourceReference(ref, availableResources, context);
|
|
99
|
+
resolvedType = result.resolvedType;
|
|
100
|
+
metadata = result.metadata;
|
|
101
|
+
errors.push(...result.errors);
|
|
102
|
+
warnings.push(...result.warnings);
|
|
103
|
+
suggestions.push(...result.suggestions);
|
|
104
|
+
}
|
|
105
|
+
// Check for circular dependencies
|
|
106
|
+
if (context?.checkCircularDependencies) {
|
|
107
|
+
const circularCheck = this.checkCircularDependencies(ref, context.dependencyChain || []);
|
|
108
|
+
if (!circularCheck.valid) {
|
|
109
|
+
errors.push(...circularCheck.errors);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
const result = {
|
|
113
|
+
valid: errors.length === 0,
|
|
114
|
+
...(resolvedType && { resolvedType }),
|
|
115
|
+
errors,
|
|
116
|
+
warnings,
|
|
117
|
+
suggestions,
|
|
118
|
+
metadata
|
|
119
|
+
};
|
|
120
|
+
// Cache the result
|
|
121
|
+
this.validationCache.set(refKey, result);
|
|
122
|
+
return result;
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
const validationError = new ResourceValidationError(`Validation failed: ${error instanceof Error ? error.message : String(error)}`, refKey, 'INVALID_FIELD_PATH');
|
|
126
|
+
const result = {
|
|
127
|
+
valid: false,
|
|
128
|
+
errors: [validationError],
|
|
129
|
+
warnings,
|
|
130
|
+
suggestions,
|
|
131
|
+
metadata: this.createDefaultMetadata()
|
|
132
|
+
};
|
|
133
|
+
this.validationCache.set(refKey, result);
|
|
134
|
+
return result;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Validate multiple KubernetesRef objects
|
|
139
|
+
*/
|
|
140
|
+
validateKubernetesRefs(refs, availableResources, schemaProxy, context) {
|
|
141
|
+
return refs.map(ref => this.validateKubernetesRef(ref, availableResources, schemaProxy, context));
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Validate that a resource reference chain is type-safe
|
|
145
|
+
*/
|
|
146
|
+
validateReferenceChain(refs, availableResources, schemaProxy) {
|
|
147
|
+
const errors = [];
|
|
148
|
+
const warnings = [];
|
|
149
|
+
const suggestions = [];
|
|
150
|
+
// Build dependency chain
|
|
151
|
+
const dependencyChain = refs.map(ref => `${ref.resourceId}.${ref.fieldPath}`);
|
|
152
|
+
// Check for circular dependencies by looking for duplicates
|
|
153
|
+
const seen = new Set();
|
|
154
|
+
for (const refKey of dependencyChain) {
|
|
155
|
+
if (seen.has(refKey)) {
|
|
156
|
+
// Found a circular dependency
|
|
157
|
+
const circularIndex = dependencyChain.indexOf(refKey);
|
|
158
|
+
const circularChain = dependencyChain.slice(circularIndex);
|
|
159
|
+
errors.push(ResourceValidationError.forCircularReference(refKey, circularChain));
|
|
160
|
+
break;
|
|
161
|
+
}
|
|
162
|
+
seen.add(refKey);
|
|
163
|
+
}
|
|
164
|
+
// Validate each reference in the chain
|
|
165
|
+
for (let i = 0; i < refs.length; i++) {
|
|
166
|
+
const ref = refs[i];
|
|
167
|
+
if (!ref)
|
|
168
|
+
continue;
|
|
169
|
+
const context = {
|
|
170
|
+
checkCircularDependencies: true,
|
|
171
|
+
dependencyChain: dependencyChain.slice(0, i),
|
|
172
|
+
skipCache: false
|
|
173
|
+
};
|
|
174
|
+
const result = this.validateKubernetesRef(ref, availableResources, schemaProxy, context);
|
|
175
|
+
errors.push(...result.errors);
|
|
176
|
+
warnings.push(...result.warnings);
|
|
177
|
+
suggestions.push(...result.suggestions);
|
|
178
|
+
// If this reference is invalid, stop validation
|
|
179
|
+
if (!result.valid) {
|
|
180
|
+
break;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
const resolvedType = refs.length > 0 ? this.getChainResultType(refs) : undefined;
|
|
184
|
+
return {
|
|
185
|
+
valid: errors.length === 0,
|
|
186
|
+
...(resolvedType && { resolvedType }),
|
|
187
|
+
errors,
|
|
188
|
+
warnings,
|
|
189
|
+
suggestions,
|
|
190
|
+
metadata: this.createDefaultMetadata()
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Validate schema reference
|
|
195
|
+
*/
|
|
196
|
+
validateSchemaReference(ref, schemaProxy, _context) {
|
|
197
|
+
const errors = [];
|
|
198
|
+
const warnings = [];
|
|
199
|
+
const suggestions = [];
|
|
200
|
+
if (!schemaProxy) {
|
|
201
|
+
errors.push(new ResourceValidationError('Schema reference used but no schema proxy available', `${ref.resourceId}.${ref.fieldPath}`, 'SCHEMA_FIELD_NOT_FOUND'));
|
|
202
|
+
return {
|
|
203
|
+
valid: false,
|
|
204
|
+
errors,
|
|
205
|
+
warnings,
|
|
206
|
+
suggestions,
|
|
207
|
+
metadata: this.createDefaultMetadata()
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
// Validate field path exists in schema
|
|
211
|
+
const fieldType = this.getSchemaFieldType(schemaProxy, ref.fieldPath);
|
|
212
|
+
if (!fieldType) {
|
|
213
|
+
const availableFields = this.getAvailableSchemaFields(schemaProxy);
|
|
214
|
+
errors.push(ResourceValidationError.forSchemaFieldNotFound(`${ref.resourceId}.${ref.fieldPath}`, ref.fieldPath, availableFields));
|
|
215
|
+
// Suggest similar field names
|
|
216
|
+
const similarFields = this.findSimilarFieldNames(ref.fieldPath, availableFields);
|
|
217
|
+
if (similarFields.length > 0) {
|
|
218
|
+
suggestions.push(`Did you mean: ${similarFields.join(', ')}?`);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
// Check for potential null access
|
|
222
|
+
if (fieldType && (fieldType.optional || fieldType.nullable)) {
|
|
223
|
+
warnings.push(ResourceValidationWarning.forPotentialNullAccess(`${ref.resourceId}.${ref.fieldPath}`, ref.fieldPath));
|
|
224
|
+
suggestions.push('Consider using optional chaining (?.) for safer access');
|
|
225
|
+
}
|
|
226
|
+
const metadata = {
|
|
227
|
+
resourceType: 'Schema',
|
|
228
|
+
fieldOptional: fieldType?.optional || false,
|
|
229
|
+
fieldNullable: fieldType?.nullable || false,
|
|
230
|
+
dependencyDepth: ref.fieldPath.split('.').length,
|
|
231
|
+
isStatusField: ref.fieldPath.startsWith('status.'),
|
|
232
|
+
isSpecField: ref.fieldPath.startsWith('spec.'),
|
|
233
|
+
isMetadataField: ref.fieldPath.startsWith('metadata.')
|
|
234
|
+
};
|
|
235
|
+
return {
|
|
236
|
+
valid: errors.length === 0,
|
|
237
|
+
...(fieldType && { resolvedType: fieldType }),
|
|
238
|
+
errors,
|
|
239
|
+
warnings,
|
|
240
|
+
suggestions,
|
|
241
|
+
metadata
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Validate resource reference
|
|
246
|
+
*/
|
|
247
|
+
validateResourceReference(ref, availableResources, _context) {
|
|
248
|
+
const errors = [];
|
|
249
|
+
const warnings = [];
|
|
250
|
+
const suggestions = [];
|
|
251
|
+
// Check if resource exists
|
|
252
|
+
const resource = availableResources[ref.resourceId];
|
|
253
|
+
if (!resource) {
|
|
254
|
+
const availableResourceIds = Object.keys(availableResources);
|
|
255
|
+
// Missing resources are errors by default
|
|
256
|
+
errors.push(new ResourceValidationError(`Resource '${ref.resourceId}' not found. Available resources: ${availableResourceIds.join(', ')}`, `${ref.resourceId}.${ref.fieldPath}`, 'RESOURCE_NOT_FOUND'));
|
|
257
|
+
// Suggest similar resource names
|
|
258
|
+
const similarResources = this.findSimilarResourceNames(ref.resourceId, availableResourceIds);
|
|
259
|
+
if (similarResources.length > 0) {
|
|
260
|
+
suggestions.push(`Did you mean: ${similarResources.join(', ')}?`);
|
|
261
|
+
}
|
|
262
|
+
return {
|
|
263
|
+
valid: false, // Invalid when resource not found
|
|
264
|
+
errors,
|
|
265
|
+
warnings,
|
|
266
|
+
suggestions,
|
|
267
|
+
metadata: this.createDefaultMetadata()
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
// Validate field path on resource
|
|
271
|
+
const fieldType = this.getResourceFieldType(resource, ref.fieldPath);
|
|
272
|
+
const availableFields = this.getAvailableResourceFields(resource);
|
|
273
|
+
// Check if field path is potentially invalid (but be lenient for common patterns)
|
|
274
|
+
const isCommonField = this.isCommonKubernetesField(ref.fieldPath);
|
|
275
|
+
if (!fieldType && !isCommonField) {
|
|
276
|
+
// Unknown fields are errors by default
|
|
277
|
+
errors.push(new ResourceValidationError(`Field path '${ref.fieldPath}' is not valid for resource type '${resource.constructor.name}'`, `${ref.resourceId}.${ref.fieldPath}`, 'INVALID_FIELD_PATH'));
|
|
278
|
+
// Suggest similar field names
|
|
279
|
+
const similarFields = this.findSimilarFieldNames(ref.fieldPath, availableFields);
|
|
280
|
+
if (similarFields.length > 0) {
|
|
281
|
+
suggestions.push(`Did you mean: ${similarFields.join(', ')}?`);
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
// Check for potential null access
|
|
285
|
+
if (fieldType && (fieldType.optional || fieldType.nullable)) {
|
|
286
|
+
warnings.push(ResourceValidationWarning.forPotentialNullAccess(`${ref.resourceId}.${ref.fieldPath}`, ref.fieldPath));
|
|
287
|
+
}
|
|
288
|
+
// Check for deprecated fields
|
|
289
|
+
if (this.isDeprecatedField(resource, ref.fieldPath)) {
|
|
290
|
+
const replacement = this.getFieldReplacement(resource, ref.fieldPath);
|
|
291
|
+
warnings.push(ResourceValidationWarning.forDeprecatedField(`${ref.resourceId}.${ref.fieldPath}`, ref.fieldPath, replacement));
|
|
292
|
+
}
|
|
293
|
+
// Check for performance implications
|
|
294
|
+
if (this.hasPerformanceImplications(resource, ref.fieldPath)) {
|
|
295
|
+
warnings.push(ResourceValidationWarning.forPerformanceImpact(`${ref.resourceId}.${ref.fieldPath}`, 'Accessing this field may require additional API calls'));
|
|
296
|
+
}
|
|
297
|
+
const apiVersion = this.getResourceApiVersion(resource);
|
|
298
|
+
const kind = this.getResourceKind(resource);
|
|
299
|
+
const metadata = {
|
|
300
|
+
resourceType: resource.constructor.name,
|
|
301
|
+
fieldOptional: fieldType?.optional || false,
|
|
302
|
+
fieldNullable: fieldType?.nullable || false,
|
|
303
|
+
dependencyDepth: ref.fieldPath.split('.').length,
|
|
304
|
+
isStatusField: ref.fieldPath.startsWith('status.'),
|
|
305
|
+
isSpecField: ref.fieldPath.startsWith('spec.'),
|
|
306
|
+
isMetadataField: ref.fieldPath.startsWith('metadata.'),
|
|
307
|
+
...(apiVersion && { apiVersion }),
|
|
308
|
+
...(kind && { kind })
|
|
309
|
+
};
|
|
310
|
+
return {
|
|
311
|
+
valid: errors.length === 0,
|
|
312
|
+
...(fieldType && { resolvedType: fieldType }),
|
|
313
|
+
errors,
|
|
314
|
+
warnings,
|
|
315
|
+
suggestions,
|
|
316
|
+
metadata
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* Check for circular dependencies
|
|
321
|
+
*/
|
|
322
|
+
checkCircularDependencies(ref, dependencyChain) {
|
|
323
|
+
const refKey = `${ref.resourceId}.${ref.fieldPath}`;
|
|
324
|
+
if (dependencyChain.includes(refKey)) {
|
|
325
|
+
return {
|
|
326
|
+
valid: false,
|
|
327
|
+
errors: [ResourceValidationError.forCircularReference(refKey, dependencyChain)]
|
|
328
|
+
};
|
|
329
|
+
}
|
|
330
|
+
return { valid: true, errors: [] };
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* Utility methods for type resolution
|
|
334
|
+
*/
|
|
335
|
+
getSchemaFieldType(_schemaProxy, _fieldPath) {
|
|
336
|
+
// This would integrate with the actual schema type system
|
|
337
|
+
// For now, return a placeholder
|
|
338
|
+
return { typeName: 'unknown', optional: false, nullable: false };
|
|
339
|
+
}
|
|
340
|
+
getResourceFieldType(_resource, fieldPath) {
|
|
341
|
+
// This would integrate with the Enhanced type system
|
|
342
|
+
// For now, return a placeholder based on common Kubernetes field patterns
|
|
343
|
+
// Define known valid field patterns - be very specific
|
|
344
|
+
const validFieldPatterns = [
|
|
345
|
+
'metadata.name',
|
|
346
|
+
'metadata.namespace',
|
|
347
|
+
'metadata.labels',
|
|
348
|
+
'spec.replicas',
|
|
349
|
+
'spec.selector',
|
|
350
|
+
'spec.template',
|
|
351
|
+
'spec.ports',
|
|
352
|
+
'status.ready',
|
|
353
|
+
'status.readyReplicas', // Note: 'status.readyReplica' (without 's') is NOT valid
|
|
354
|
+
'status.availableReplicas',
|
|
355
|
+
'status.conditions',
|
|
356
|
+
'status.phase',
|
|
357
|
+
'status.podIP',
|
|
358
|
+
'status.clusterIP',
|
|
359
|
+
'status.loadBalancer'
|
|
360
|
+
];
|
|
361
|
+
// Check if the field path exactly matches a known pattern
|
|
362
|
+
const isExactMatch = validFieldPatterns.includes(fieldPath);
|
|
363
|
+
// Check if it starts with a valid prefix and has additional nested fields
|
|
364
|
+
const hasValidPrefix = validFieldPatterns.some(pattern => {
|
|
365
|
+
if (fieldPath.startsWith(`${pattern}.`))
|
|
366
|
+
return true;
|
|
367
|
+
// Handle array indexing like loadBalancer.ingress[0].ip
|
|
368
|
+
const fieldWithArrayPattern = fieldPath.replace(/\[\d+\]/g, '');
|
|
369
|
+
if (fieldWithArrayPattern.startsWith(`${pattern}.`))
|
|
370
|
+
return true;
|
|
371
|
+
return false;
|
|
372
|
+
});
|
|
373
|
+
const isValidField = isExactMatch || hasValidPrefix;
|
|
374
|
+
// Return type info only for valid fields
|
|
375
|
+
if (fieldPath.startsWith('metadata.') && isValidField) {
|
|
376
|
+
return { typeName: 'string', optional: true, nullable: false };
|
|
377
|
+
}
|
|
378
|
+
if (fieldPath.startsWith('spec.') && isValidField) {
|
|
379
|
+
return { typeName: 'unknown', optional: false, nullable: false };
|
|
380
|
+
}
|
|
381
|
+
if (fieldPath.startsWith('status.') && isValidField) {
|
|
382
|
+
return { typeName: 'unknown', optional: true, nullable: true };
|
|
383
|
+
}
|
|
384
|
+
// Return undefined for invalid fields (including typos like 'status.readyReplica')
|
|
385
|
+
return undefined;
|
|
386
|
+
}
|
|
387
|
+
getAvailableSchemaFields(_schemaProxy) {
|
|
388
|
+
// This would extract available fields from the schema
|
|
389
|
+
return ['spec.name', 'spec.replicas', 'status.ready', 'metadata.name'];
|
|
390
|
+
}
|
|
391
|
+
getAvailableResourceFields(resource) {
|
|
392
|
+
const resourceKind = resource.constructor.name;
|
|
393
|
+
// Common fields for different resource types
|
|
394
|
+
const fieldsByKind = {
|
|
395
|
+
'Deployment': [
|
|
396
|
+
'metadata.name', 'metadata.namespace', 'metadata.labels', 'metadata.annotations',
|
|
397
|
+
'spec.replicas', 'spec.selector', 'spec.template', 'spec.strategy',
|
|
398
|
+
'status.replicas', 'status.readyReplicas', 'status.availableReplicas',
|
|
399
|
+
'status.unavailableReplicas', 'status.conditions'
|
|
400
|
+
],
|
|
401
|
+
'Service': [
|
|
402
|
+
'metadata.name', 'metadata.namespace', 'metadata.labels', 'metadata.annotations',
|
|
403
|
+
'spec.type', 'spec.ports', 'spec.selector', 'spec.clusterIP',
|
|
404
|
+
'status.loadBalancer', 'status.conditions'
|
|
405
|
+
],
|
|
406
|
+
'Pod': [
|
|
407
|
+
'metadata.name', 'metadata.namespace', 'metadata.labels', 'metadata.annotations',
|
|
408
|
+
'spec.containers', 'spec.volumes', 'spec.nodeSelector',
|
|
409
|
+
'status.phase', 'status.conditions', 'status.hostIP', 'status.podIP',
|
|
410
|
+
'status.containerStatuses'
|
|
411
|
+
],
|
|
412
|
+
'ConfigMap': [
|
|
413
|
+
'metadata.name', 'metadata.namespace', 'metadata.labels', 'metadata.annotations',
|
|
414
|
+
'data', 'binaryData'
|
|
415
|
+
],
|
|
416
|
+
'Secret': [
|
|
417
|
+
'metadata.name', 'metadata.namespace', 'metadata.labels', 'metadata.annotations',
|
|
418
|
+
'type', 'data', 'stringData'
|
|
419
|
+
]
|
|
420
|
+
};
|
|
421
|
+
return fieldsByKind[resourceKind] || [
|
|
422
|
+
'metadata.name', 'metadata.namespace', 'metadata.labels', 'metadata.annotations',
|
|
423
|
+
'spec', 'status'
|
|
424
|
+
];
|
|
425
|
+
}
|
|
426
|
+
isCommonKubernetesField(fieldPath) {
|
|
427
|
+
// Only consider very specific common fields as valid
|
|
428
|
+
// This is more strict to catch typos like 'status.readyReplica'
|
|
429
|
+
const exactCommonFields = [
|
|
430
|
+
'metadata.name',
|
|
431
|
+
'metadata.namespace',
|
|
432
|
+
'metadata.labels',
|
|
433
|
+
'metadata.annotations',
|
|
434
|
+
'spec.replicas',
|
|
435
|
+
'spec.selector',
|
|
436
|
+
'spec.template',
|
|
437
|
+
'spec.ports',
|
|
438
|
+
'status.ready',
|
|
439
|
+
'status.readyReplicas', // Note: 'status.readyReplica' is NOT in this list
|
|
440
|
+
'status.availableReplicas',
|
|
441
|
+
'status.conditions',
|
|
442
|
+
'status.phase',
|
|
443
|
+
'status.podIP',
|
|
444
|
+
'status.clusterIP',
|
|
445
|
+
'status.loadBalancer',
|
|
446
|
+
'status.loadBalancer.ingress',
|
|
447
|
+
'data',
|
|
448
|
+
'stringData',
|
|
449
|
+
'binaryData'
|
|
450
|
+
];
|
|
451
|
+
// Check for exact matches or valid nested paths
|
|
452
|
+
return exactCommonFields.some(field => {
|
|
453
|
+
if (fieldPath === field)
|
|
454
|
+
return true;
|
|
455
|
+
if (fieldPath.startsWith(`${field}.`))
|
|
456
|
+
return true;
|
|
457
|
+
// Handle array indexing like loadBalancer.ingress[0].ip
|
|
458
|
+
const fieldWithArrayPattern = fieldPath.replace(/\[\d+\]/g, '');
|
|
459
|
+
if (fieldWithArrayPattern === field || fieldWithArrayPattern.startsWith(`${field}.`))
|
|
460
|
+
return true;
|
|
461
|
+
return false;
|
|
462
|
+
});
|
|
463
|
+
}
|
|
464
|
+
findSimilarFieldNames(target, available) {
|
|
465
|
+
// Simple similarity matching - could be improved with better algorithms
|
|
466
|
+
return available.filter(field => {
|
|
467
|
+
const similarity = this.calculateSimilarity(target, field);
|
|
468
|
+
return similarity > 0.6;
|
|
469
|
+
}).slice(0, 3);
|
|
470
|
+
}
|
|
471
|
+
findSimilarResourceNames(target, available) {
|
|
472
|
+
return available.filter(resource => {
|
|
473
|
+
const similarity = this.calculateSimilarity(target, resource);
|
|
474
|
+
return similarity > 0.6;
|
|
475
|
+
}).slice(0, 3);
|
|
476
|
+
}
|
|
477
|
+
calculateSimilarity(str1, str2) {
|
|
478
|
+
// Simple Levenshtein distance-based similarity
|
|
479
|
+
const longer = str1.length > str2.length ? str1 : str2;
|
|
480
|
+
const shorter = str1.length > str2.length ? str2 : str1;
|
|
481
|
+
if (longer.length === 0)
|
|
482
|
+
return 1.0;
|
|
483
|
+
const distance = this.levenshteinDistance(longer, shorter);
|
|
484
|
+
return (longer.length - distance) / longer.length;
|
|
485
|
+
}
|
|
486
|
+
levenshteinDistance(str1, str2) {
|
|
487
|
+
const matrix = Array(str2.length + 1).fill(null).map(() => Array(str1.length + 1).fill(0));
|
|
488
|
+
for (let i = 0; i <= str1.length; i++)
|
|
489
|
+
matrix[0][i] = i;
|
|
490
|
+
for (let j = 0; j <= str2.length; j++)
|
|
491
|
+
matrix[j][0] = j;
|
|
492
|
+
for (let j = 1; j <= str2.length; j++) {
|
|
493
|
+
for (let i = 1; i <= str1.length; i++) {
|
|
494
|
+
const indicator = str1[i - 1] === str2[j - 1] ? 0 : 1;
|
|
495
|
+
matrix[j][i] = Math.min(matrix[j]?.[i - 1] + 1, matrix[j - 1]?.[i] + 1, matrix[j - 1]?.[i - 1] + indicator);
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
return matrix[str2.length]?.[str1.length];
|
|
499
|
+
}
|
|
500
|
+
isDeprecatedField(_resource, fieldPath) {
|
|
501
|
+
// This would check against a registry of deprecated fields
|
|
502
|
+
const deprecatedFields = ['spec.serviceAccount', 'spec.securityContext.runAsUser'];
|
|
503
|
+
return deprecatedFields.some(deprecated => fieldPath.startsWith(deprecated));
|
|
504
|
+
}
|
|
505
|
+
getFieldReplacement(_resource, fieldPath) {
|
|
506
|
+
// This would provide replacement suggestions for deprecated fields
|
|
507
|
+
const replacements = {
|
|
508
|
+
'spec.serviceAccount': 'spec.serviceAccountName',
|
|
509
|
+
'spec.securityContext.runAsUser': 'spec.securityContext.runAsNonRoot'
|
|
510
|
+
};
|
|
511
|
+
return replacements[fieldPath];
|
|
512
|
+
}
|
|
513
|
+
hasPerformanceImplications(_resource, fieldPath) {
|
|
514
|
+
// This would identify fields that might have performance implications
|
|
515
|
+
const performanceFields = ['status.conditions', 'status.events'];
|
|
516
|
+
return performanceFields.some(field => fieldPath.startsWith(field));
|
|
517
|
+
}
|
|
518
|
+
getResourceApiVersion(_resource) {
|
|
519
|
+
// Extract API version from resource
|
|
520
|
+
return 'v1'; // Placeholder
|
|
521
|
+
}
|
|
522
|
+
getResourceKind(resource) {
|
|
523
|
+
// Extract kind from resource
|
|
524
|
+
return resource.constructor.name;
|
|
525
|
+
}
|
|
526
|
+
getChainResultType(refs) {
|
|
527
|
+
// Get the type of the final reference in the chain
|
|
528
|
+
if (refs.length === 0)
|
|
529
|
+
return undefined;
|
|
530
|
+
const lastRef = refs[refs.length - 1];
|
|
531
|
+
return lastRef?._type ? { typeName: String(lastRef._type), optional: false, nullable: false } : undefined;
|
|
532
|
+
}
|
|
533
|
+
createDefaultMetadata() {
|
|
534
|
+
return {
|
|
535
|
+
resourceType: 'unknown',
|
|
536
|
+
fieldOptional: false,
|
|
537
|
+
fieldNullable: false,
|
|
538
|
+
dependencyDepth: 0,
|
|
539
|
+
isStatusField: false,
|
|
540
|
+
isSpecField: false,
|
|
541
|
+
isMetadataField: false
|
|
542
|
+
};
|
|
543
|
+
}
|
|
544
|
+
/**
|
|
545
|
+
* Clear validation cache
|
|
546
|
+
*/
|
|
547
|
+
clearCache() {
|
|
548
|
+
this.validationCache.clear();
|
|
549
|
+
this.dependencyGraph.clear();
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
//# sourceMappingURL=resource-validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource-validation.js","sourceRoot":"","sources":["../../../src/core/expressions/resource-validation.ts"],"names":[],"mappings":"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"}
|