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.
Files changed (197) hide show
  1. package/README.md +4 -3
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/core/composition/imperative.d.ts.map +1 -1
  4. package/dist/core/composition/imperative.js +15 -2
  5. package/dist/core/composition/imperative.js.map +1 -1
  6. package/dist/core/composition/typekro-runtime/typekro-runtime.d.ts.map +1 -1
  7. package/dist/core/composition/typekro-runtime/typekro-runtime.js +24 -25
  8. package/dist/core/composition/typekro-runtime/typekro-runtime.js.map +1 -1
  9. package/dist/core/dependencies/type-guards.d.ts.map +1 -1
  10. package/dist/core/dependencies/type-guards.js +7 -2
  11. package/dist/core/dependencies/type-guards.js.map +1 -1
  12. package/dist/core/deployment/engine.d.ts +0 -1
  13. package/dist/core/deployment/engine.d.ts.map +1 -1
  14. package/dist/core/deployment/engine.js +0 -1
  15. package/dist/core/deployment/engine.js.map +1 -1
  16. package/dist/core/errors.d.ts +85 -0
  17. package/dist/core/errors.d.ts.map +1 -1
  18. package/dist/core/errors.js +135 -0
  19. package/dist/core/errors.js.map +1 -1
  20. package/dist/core/expressions/analyzer.d.ts +584 -0
  21. package/dist/core/expressions/analyzer.d.ts.map +1 -0
  22. package/dist/core/expressions/analyzer.js +2956 -0
  23. package/dist/core/expressions/analyzer.js.map +1 -0
  24. package/dist/core/expressions/cache.d.ts +136 -0
  25. package/dist/core/expressions/cache.d.ts.map +1 -0
  26. package/dist/core/expressions/cache.js +347 -0
  27. package/dist/core/expressions/cache.js.map +1 -0
  28. package/dist/core/expressions/cel-conversion-engine.d.ts +126 -0
  29. package/dist/core/expressions/cel-conversion-engine.d.ts.map +1 -0
  30. package/dist/core/expressions/cel-conversion-engine.js +293 -0
  31. package/dist/core/expressions/cel-conversion-engine.js.map +1 -0
  32. package/dist/core/expressions/compile-time-validation.d.ts +270 -0
  33. package/dist/core/expressions/compile-time-validation.d.ts.map +1 -0
  34. package/dist/core/expressions/compile-time-validation.js +506 -0
  35. package/dist/core/expressions/compile-time-validation.js.map +1 -0
  36. package/dist/core/expressions/composition-integration.d.ts +315 -0
  37. package/dist/core/expressions/composition-integration.d.ts.map +1 -0
  38. package/dist/core/expressions/composition-integration.js +936 -0
  39. package/dist/core/expressions/composition-integration.js.map +1 -0
  40. package/dist/core/expressions/conditional-expression-processor.d.ts +154 -0
  41. package/dist/core/expressions/conditional-expression-processor.d.ts.map +1 -0
  42. package/dist/core/expressions/conditional-expression-processor.js +479 -0
  43. package/dist/core/expressions/conditional-expression-processor.js.map +1 -0
  44. package/dist/core/expressions/conditional-integration.d.ts +133 -0
  45. package/dist/core/expressions/conditional-integration.d.ts.map +1 -0
  46. package/dist/core/expressions/conditional-integration.js +293 -0
  47. package/dist/core/expressions/conditional-integration.js.map +1 -0
  48. package/dist/core/expressions/conditional-validation.d.ts +181 -0
  49. package/dist/core/expressions/conditional-validation.d.ts.map +1 -0
  50. package/dist/core/expressions/conditional-validation.js +460 -0
  51. package/dist/core/expressions/conditional-validation.js.map +1 -0
  52. package/dist/core/expressions/context-aware-generator.d.ts +127 -0
  53. package/dist/core/expressions/context-aware-generator.d.ts.map +1 -0
  54. package/dist/core/expressions/context-aware-generator.js +500 -0
  55. package/dist/core/expressions/context-aware-generator.js.map +1 -0
  56. package/dist/core/expressions/context-detector.d.ts +148 -0
  57. package/dist/core/expressions/context-detector.d.ts.map +1 -0
  58. package/dist/core/expressions/context-detector.js +546 -0
  59. package/dist/core/expressions/context-detector.js.map +1 -0
  60. package/dist/core/expressions/context-switcher.d.ts +185 -0
  61. package/dist/core/expressions/context-switcher.d.ts.map +1 -0
  62. package/dist/core/expressions/context-switcher.js +515 -0
  63. package/dist/core/expressions/context-switcher.js.map +1 -0
  64. package/dist/core/expressions/context-validator.d.ts +176 -0
  65. package/dist/core/expressions/context-validator.d.ts.map +1 -0
  66. package/dist/core/expressions/context-validator.js +452 -0
  67. package/dist/core/expressions/context-validator.js.map +1 -0
  68. package/dist/core/expressions/custom-context-manager.d.ts +194 -0
  69. package/dist/core/expressions/custom-context-manager.d.ts.map +1 -0
  70. package/dist/core/expressions/custom-context-manager.js +390 -0
  71. package/dist/core/expressions/custom-context-manager.js.map +1 -0
  72. package/dist/core/expressions/expression-proxy.d.ts +80 -0
  73. package/dist/core/expressions/expression-proxy.d.ts.map +1 -0
  74. package/dist/core/expressions/expression-proxy.js +227 -0
  75. package/dist/core/expressions/expression-proxy.js.map +1 -0
  76. package/dist/core/expressions/factory-integration.d.ts +132 -0
  77. package/dist/core/expressions/factory-integration.d.ts.map +1 -0
  78. package/dist/core/expressions/factory-integration.js +327 -0
  79. package/dist/core/expressions/factory-integration.js.map +1 -0
  80. package/dist/core/expressions/factory-pattern-handler.d.ts +88 -0
  81. package/dist/core/expressions/factory-pattern-handler.d.ts.map +1 -0
  82. package/dist/core/expressions/factory-pattern-handler.js +336 -0
  83. package/dist/core/expressions/factory-pattern-handler.js.map +1 -0
  84. package/dist/core/expressions/field-hydration-processor.d.ts +188 -0
  85. package/dist/core/expressions/field-hydration-processor.d.ts.map +1 -0
  86. package/dist/core/expressions/field-hydration-processor.js +562 -0
  87. package/dist/core/expressions/field-hydration-processor.js.map +1 -0
  88. package/dist/core/expressions/imperative-analyzer.d.ts +21 -0
  89. package/dist/core/expressions/imperative-analyzer.d.ts.map +1 -0
  90. package/dist/core/expressions/imperative-analyzer.js +343 -0
  91. package/dist/core/expressions/imperative-analyzer.js.map +1 -0
  92. package/dist/core/expressions/index.d.ts +54 -0
  93. package/dist/core/expressions/index.d.ts.map +1 -0
  94. package/dist/core/expressions/index.js +50 -0
  95. package/dist/core/expressions/index.js.map +1 -0
  96. package/dist/core/expressions/lazy-analysis.d.ts +1128 -0
  97. package/dist/core/expressions/lazy-analysis.d.ts.map +1 -0
  98. package/dist/core/expressions/lazy-analysis.js +2443 -0
  99. package/dist/core/expressions/lazy-analysis.js.map +1 -0
  100. package/dist/core/expressions/magic-assignable-analyzer.d.ts +123 -0
  101. package/dist/core/expressions/magic-assignable-analyzer.d.ts.map +1 -0
  102. package/dist/core/expressions/magic-assignable-analyzer.js +352 -0
  103. package/dist/core/expressions/magic-assignable-analyzer.js.map +1 -0
  104. package/dist/core/expressions/magic-proxy-analyzer.d.ts +206 -0
  105. package/dist/core/expressions/magic-proxy-analyzer.d.ts.map +1 -0
  106. package/dist/core/expressions/magic-proxy-analyzer.js +639 -0
  107. package/dist/core/expressions/magic-proxy-analyzer.js.map +1 -0
  108. package/dist/core/expressions/magic-proxy-detector.d.ts +154 -0
  109. package/dist/core/expressions/magic-proxy-detector.d.ts.map +1 -0
  110. package/dist/core/expressions/magic-proxy-detector.js +242 -0
  111. package/dist/core/expressions/magic-proxy-detector.js.map +1 -0
  112. package/dist/core/expressions/migration-helpers.d.ts +133 -0
  113. package/dist/core/expressions/migration-helpers.d.ts.map +1 -0
  114. package/dist/core/expressions/migration-helpers.js +443 -0
  115. package/dist/core/expressions/migration-helpers.js.map +1 -0
  116. package/dist/core/expressions/optionality-handler.d.ts +503 -0
  117. package/dist/core/expressions/optionality-handler.d.ts.map +1 -0
  118. package/dist/core/expressions/optionality-handler.js +1306 -0
  119. package/dist/core/expressions/optionality-handler.js.map +1 -0
  120. package/dist/core/expressions/readiness-integration.d.ts +119 -0
  121. package/dist/core/expressions/readiness-integration.d.ts.map +1 -0
  122. package/dist/core/expressions/readiness-integration.js +386 -0
  123. package/dist/core/expressions/readiness-integration.js.map +1 -0
  124. package/dist/core/expressions/resource-analyzer.d.ts +486 -0
  125. package/dist/core/expressions/resource-analyzer.d.ts.map +1 -0
  126. package/dist/core/expressions/resource-analyzer.js +1086 -0
  127. package/dist/core/expressions/resource-analyzer.js.map +1 -0
  128. package/dist/core/expressions/resource-validation.d.ts +187 -0
  129. package/dist/core/expressions/resource-validation.d.ts.map +1 -0
  130. package/dist/core/expressions/resource-validation.js +552 -0
  131. package/dist/core/expressions/resource-validation.js.map +1 -0
  132. package/dist/core/expressions/runtime-error-mapper.d.ts +138 -0
  133. package/dist/core/expressions/runtime-error-mapper.d.ts.map +1 -0
  134. package/dist/core/expressions/runtime-error-mapper.js +412 -0
  135. package/dist/core/expressions/runtime-error-mapper.js.map +1 -0
  136. package/dist/core/expressions/source-map.d.ts +168 -0
  137. package/dist/core/expressions/source-map.d.ts.map +1 -0
  138. package/dist/core/expressions/source-map.js +350 -0
  139. package/dist/core/expressions/source-map.js.map +1 -0
  140. package/dist/core/expressions/status-builder-analyzer.d.ts +353 -0
  141. package/dist/core/expressions/status-builder-analyzer.d.ts.map +1 -0
  142. package/dist/core/expressions/status-builder-analyzer.js +1301 -0
  143. package/dist/core/expressions/status-builder-analyzer.js.map +1 -0
  144. package/dist/core/expressions/type-inference.d.ts +184 -0
  145. package/dist/core/expressions/type-inference.d.ts.map +1 -0
  146. package/dist/core/expressions/type-inference.js +838 -0
  147. package/dist/core/expressions/type-inference.js.map +1 -0
  148. package/dist/core/expressions/type-safety.d.ts +203 -0
  149. package/dist/core/expressions/type-safety.d.ts.map +1 -0
  150. package/dist/core/expressions/type-safety.js +442 -0
  151. package/dist/core/expressions/type-safety.js.map +1 -0
  152. package/dist/core/expressions/types.d.ts +282 -0
  153. package/dist/core/expressions/types.d.ts.map +1 -0
  154. package/dist/core/expressions/types.js +8 -0
  155. package/dist/core/expressions/types.js.map +1 -0
  156. package/dist/core/kubernetes/client-provider.js +2 -2
  157. package/dist/core/kubernetes/client-provider.js.map +1 -1
  158. package/dist/core/serialization/core.d.ts.map +1 -1
  159. package/dist/core/serialization/core.js +573 -9
  160. package/dist/core/serialization/core.js.map +1 -1
  161. package/dist/core/types/deployment.d.ts +4 -0
  162. package/dist/core/types/deployment.d.ts.map +1 -1
  163. package/dist/core/types/deployment.js.map +1 -1
  164. package/dist/core/types/index.d.ts +1 -0
  165. package/dist/core/types/index.d.ts.map +1 -1
  166. package/dist/core/types/index.js.map +1 -1
  167. package/dist/core.d.ts +1 -1
  168. package/dist/core.d.ts.map +1 -1
  169. package/dist/core.js +1 -1
  170. package/dist/core.js.map +1 -1
  171. package/dist/factories/helm/helm-release.d.ts.map +1 -1
  172. package/dist/factories/helm/helm-release.js +0 -5
  173. package/dist/factories/helm/helm-release.js.map +1 -1
  174. package/dist/factories/helm/types.d.ts +1 -1
  175. package/dist/factories/helm/types.d.ts.map +1 -1
  176. package/dist/factories/shared.d.ts.map +1 -1
  177. package/dist/factories/shared.js +21 -1
  178. package/dist/factories/shared.js.map +1 -1
  179. package/dist/factories/simple/index.d.ts +2 -2
  180. package/dist/factories/simple/index.d.ts.map +1 -1
  181. package/dist/factories/simple/workloads/deployment.d.ts +3 -3
  182. package/dist/factories/simple/workloads/deployment.d.ts.map +1 -1
  183. package/dist/factories/simple/workloads/deployment.js +37 -11
  184. package/dist/factories/simple/workloads/deployment.js.map +1 -1
  185. package/dist/index.d.ts +1 -1
  186. package/dist/index.d.ts.map +1 -1
  187. package/dist/index.js +1 -1
  188. package/dist/index.js.map +1 -1
  189. package/dist/utils/index.d.ts +1 -1
  190. package/dist/utils/index.d.ts.map +1 -1
  191. package/dist/utils/index.js +1 -1
  192. package/dist/utils/index.js.map +1 -1
  193. package/dist/utils/type-guards.d.ts +6 -0
  194. package/dist/utils/type-guards.d.ts.map +1 -1
  195. package/dist/utils/type-guards.js +25 -2
  196. package/dist/utils/type-guards.js.map +1 -1
  197. 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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"}