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,486 @@
1
+ /**
2
+ * Resource Builder Integration for JavaScript to CEL Expression Conversion
3
+ *
4
+ * This module provides integration with TypeKro's existing KubernetesRef and magic proxy systems
5
+ * for analyzing resource configurations that contain JavaScript expressions with KubernetesRef objects.
6
+ *
7
+ * The analyzer detects when resource builders use expressions that depend on other resources
8
+ * and converts them to appropriate CEL expressions based on the factory pattern.
9
+ */
10
+ import type { Enhanced } from '../types/kubernetes.js';
11
+ import type { KubernetesRef } from '../types/common.js';
12
+ import type { SchemaProxy } from '../types/serialization.js';
13
+ import { ConversionError } from '../errors.js';
14
+ import { type AnalysisContext } from './analyzer.js';
15
+ /**
16
+ * Context for analyzing resource configurations
17
+ */
18
+ export interface ResourceAnalysisContext extends AnalysisContext {
19
+ /** The resource being analyzed */
20
+ resourceId: string;
21
+ /** The resource configuration being analyzed */
22
+ resourceConfig: Record<string, any>;
23
+ /** Other resources available for cross-resource references */
24
+ availableResources?: Record<string, Enhanced<any, any>>;
25
+ /** Whether to validate resource types during analysis */
26
+ validateResourceTypes?: boolean;
27
+ }
28
+ /**
29
+ * Result of analyzing a resource configuration
30
+ */
31
+ export interface ResourceAnalysisResult {
32
+ /** The original resource configuration */
33
+ originalConfig: Record<string, any>;
34
+ /** The processed configuration with CEL expressions */
35
+ processedConfig: Record<string, any>;
36
+ /** All KubernetesRef dependencies found in the configuration */
37
+ dependencies: KubernetesRef<any>[];
38
+ /** Fields that required conversion */
39
+ convertedFields: string[];
40
+ /** Analysis errors encountered */
41
+ errors: ConversionError[];
42
+ /** Whether any conversion was needed */
43
+ requiresConversion: boolean;
44
+ /** Circular dependency chains detected */
45
+ circularDependencies: string[][];
46
+ /** Resource type validation results */
47
+ typeValidationResults: ResourceTypeValidationResult[];
48
+ }
49
+ /**
50
+ * Resource type validation result
51
+ */
52
+ export interface ResourceTypeValidationResult {
53
+ /** The field path that was validated */
54
+ fieldPath: string;
55
+ /** The KubernetesRef that was validated */
56
+ reference: KubernetesRef<any>;
57
+ /** Whether the type validation passed */
58
+ valid: boolean;
59
+ /** Expected type */
60
+ expectedType: string;
61
+ /** Actual type (if determinable) */
62
+ actualType?: string;
63
+ /** Validation error message */
64
+ error?: string;
65
+ }
66
+ /**
67
+ * Dependency tracking information for a KubernetesRef
68
+ */
69
+ export interface DependencyInfo {
70
+ /** The KubernetesRef object */
71
+ reference: KubernetesRef<any>;
72
+ /** The field path where this dependency was found */
73
+ fieldPath: string;
74
+ /** The type of dependency */
75
+ dependencyType: 'schema' | 'resource' | 'external';
76
+ /** Whether this dependency is required for the resource to function */
77
+ required: boolean;
78
+ /** The expected type of the dependency */
79
+ expectedType: string;
80
+ /** Additional metadata about the dependency */
81
+ metadata?: {
82
+ /** Whether this dependency affects resource readiness */
83
+ affectsReadiness?: boolean;
84
+ /** Whether this dependency is used in conditional logic */
85
+ conditional?: boolean;
86
+ /** The expression context where this dependency was found */
87
+ expressionContext?: string;
88
+ };
89
+ }
90
+ /**
91
+ * Dependency graph for tracking resource relationships
92
+ */
93
+ export interface DependencyGraph {
94
+ /** Map of resource ID to its dependencies */
95
+ dependencies: Map<string, DependencyInfo[]>;
96
+ /** Map of resource ID to resources that depend on it */
97
+ dependents: Map<string, string[]>;
98
+ /** Detected circular dependency chains */
99
+ circularChains: string[][];
100
+ /** Topologically sorted resource order (for deployment) */
101
+ deploymentOrder: string[];
102
+ }
103
+ /**
104
+ * Options for dependency tracking
105
+ */
106
+ export interface DependencyTrackingOptions {
107
+ /** Whether to track schema dependencies */
108
+ trackSchemaDependencies?: boolean;
109
+ /** Whether to track resource dependencies */
110
+ trackResourceDependencies?: boolean;
111
+ /** Whether to track external dependencies */
112
+ trackExternalDependencies?: boolean;
113
+ /** Whether to detect circular dependencies */
114
+ detectCircularDependencies?: boolean;
115
+ /** Whether to compute deployment order */
116
+ computeDeploymentOrder?: boolean;
117
+ /** Maximum depth for dependency traversal */
118
+ maxDepth?: number;
119
+ }
120
+ /**
121
+ * Analyzes resource configurations for JavaScript expressions containing KubernetesRef objects
122
+ */
123
+ export declare class ResourceAnalyzer {
124
+ private analyzer;
125
+ private dependencyTracker;
126
+ private typeValidator;
127
+ constructor();
128
+ /**
129
+ * Analyze a resource configuration for KubernetesRef-dependent expressions
130
+ * This is the main entry point for resource builder integration
131
+ */
132
+ analyzeResourceConfig(resourceId: string, config: Record<string, any>, context: ResourceAnalysisContext): ResourceAnalysisResult;
133
+ /**
134
+ * Recursively analyze a configuration object for KubernetesRef objects
135
+ */
136
+ private analyzeConfigObject;
137
+ /**
138
+ * Convert a KubernetesRef object in a resource configuration
139
+ */
140
+ private convertKubernetesRefInConfig;
141
+ /**
142
+ * Analyze string expressions that might contain KubernetesRef objects
143
+ */
144
+ private analyzeStringExpression;
145
+ /**
146
+ * Check if a string looks like a JavaScript expression
147
+ */
148
+ private looksLikeExpression;
149
+ /**
150
+ * Validate resource types for KubernetesRef objects
151
+ * This implements requirement 4.5: resource type validation
152
+ */
153
+ private validateResourceTypes;
154
+ /**
155
+ * Get dependency information for a resource
156
+ */
157
+ getDependencyInfo(resourceId: string): DependencyInfo[];
158
+ /**
159
+ * Get the full dependency graph
160
+ */
161
+ getDependencyGraph(): DependencyGraph;
162
+ /**
163
+ * Get resources that depend on a specific resource
164
+ */
165
+ getDependents(resourceId: string): string[];
166
+ /**
167
+ * Check if there are circular dependencies
168
+ */
169
+ hasCircularDependencies(): boolean;
170
+ /**
171
+ * Get the recommended deployment order
172
+ */
173
+ getDeploymentOrder(): string[];
174
+ /**
175
+ * Perform advanced circular dependency analysis
176
+ * This provides detailed analysis and recommendations for resolving circular dependencies
177
+ */
178
+ analyzeCircularDependencies(): CircularDependencyAnalysis;
179
+ /**
180
+ * Get the resource type validator
181
+ */
182
+ getTypeValidator(): ResourceTypeValidator;
183
+ /**
184
+ * Register a custom schema validator
185
+ */
186
+ registerSchemaValidator(schemaType: string, validator: SchemaValidator): void;
187
+ /**
188
+ * Register a custom resource type
189
+ */
190
+ registerResourceType(name: string, typeInfo: ResourceTypeInfo): void;
191
+ /**
192
+ * Validate a single KubernetesRef for type correctness
193
+ */
194
+ validateKubernetesRef(ref: KubernetesRef<any>, context: ResourceTypeValidationContext): ResourceTypeValidationResult;
195
+ }
196
+ /**
197
+ * Convenience function for analyzing resource configurations
198
+ * This is the main entry point for resource builder integration
199
+ */
200
+ export declare function analyzeResourceConfig(resourceId: string, config: Record<string, any>, context: Omit<ResourceAnalysisContext, 'resourceId' | 'resourceConfig'>): ResourceAnalysisResult;
201
+ /**
202
+ * Analyze resource configurations for factory function integration with KubernetesRef detection
203
+ * This function integrates with existing factory functions to detect and convert
204
+ * JavaScript expressions that contain KubernetesRef objects from the magic proxy system
205
+ */
206
+ export declare function analyzeFactoryResourceConfig<T extends Record<string, any>>(resourceId: string, config: T, availableResources: Record<string, Enhanced<any, any>>, schemaProxy?: SchemaProxy<any, any>, factoryType?: 'direct' | 'kro'): ResourceAnalysisResult;
207
+ /**
208
+ * Automatic dependency tracker for KubernetesRef objects in expressions
209
+ * This implements requirement 4.2: automatic dependency tracking
210
+ */
211
+ export declare class DependencyTracker {
212
+ private dependencyGraph;
213
+ constructor();
214
+ /**
215
+ * Track dependencies for a resource configuration
216
+ */
217
+ trackDependencies(resourceId: string, dependencies: KubernetesRef<any>[], fieldPaths: string[], options?: DependencyTrackingOptions): DependencyInfo[];
218
+ /**
219
+ * Create dependency information for a KubernetesRef
220
+ */
221
+ private createDependencyInfo;
222
+ /**
223
+ * Create a skipped dependency info (for disabled tracking)
224
+ */
225
+ private createSkippedDependencyInfo;
226
+ /**
227
+ * Determine the type of dependency
228
+ */
229
+ private determineDependencyType;
230
+ /**
231
+ * Determine if a dependency is required
232
+ */
233
+ private isDependencyRequired;
234
+ /**
235
+ * Check if a field path represents a required field
236
+ */
237
+ private isRequiredField;
238
+ /**
239
+ * Check if a dependency affects resource readiness
240
+ */
241
+ private affectsReadiness;
242
+ /**
243
+ * Check if a field path is in a conditional context
244
+ */
245
+ private isConditional;
246
+ /**
247
+ * Get expression context for a field path
248
+ */
249
+ private getExpressionContext;
250
+ /**
251
+ * Add dependency info to the dependency graph
252
+ */
253
+ private addToDependencyGraph;
254
+ /**
255
+ * Detect circular dependencies in the dependency graph
256
+ */
257
+ private detectCircularDependencies;
258
+ /**
259
+ * Detect cycles starting from a specific resource
260
+ */
261
+ private detectCyclesFromResource;
262
+ /**
263
+ * Compute deployment order using topological sort
264
+ */
265
+ private computeDeploymentOrder;
266
+ /**
267
+ * Get the current dependency graph
268
+ */
269
+ getDependencyGraph(): DependencyGraph;
270
+ /**
271
+ * Get dependencies for a specific resource
272
+ */
273
+ getDependencies(resourceId: string): DependencyInfo[];
274
+ /**
275
+ * Get resources that depend on a specific resource
276
+ */
277
+ getDependents(resourceId: string): string[];
278
+ /**
279
+ * Check if there are circular dependencies
280
+ */
281
+ hasCircularDependencies(): boolean;
282
+ /**
283
+ * Get the deployment order
284
+ */
285
+ getDeploymentOrder(): string[];
286
+ /**
287
+ * Reset the dependency graph
288
+ */
289
+ reset(): void;
290
+ /**
291
+ * Advanced circular dependency detection with detailed chain analysis
292
+ * This provides more sophisticated analysis of KubernetesRef chains
293
+ */
294
+ detectCircularDependencyChains(): CircularDependencyAnalysis;
295
+ /**
296
+ * Find strongly connected components using Tarjan's algorithm
297
+ */
298
+ private findStronglyConnectedComponents;
299
+ /**
300
+ * Analyze a circular dependency chain
301
+ */
302
+ private analyzeCircularChain;
303
+ /**
304
+ * Calculate the severity of a circular dependency chain
305
+ */
306
+ private calculateChainSeverity;
307
+ /**
308
+ * Find potential break points in a circular chain
309
+ */
310
+ private findPotentialBreakPoints;
311
+ /**
312
+ * Get affected fields for a circular chain
313
+ */
314
+ private getAffectedFields;
315
+ /**
316
+ * Generate recommendations for resolving circular dependencies
317
+ */
318
+ private generateCircularDependencyRecommendations;
319
+ }
320
+ /**
321
+ * Detailed analysis of circular dependencies
322
+ */
323
+ export interface CircularDependencyAnalysis {
324
+ /** Whether circular dependencies were found */
325
+ hasCircularDependencies: boolean;
326
+ /** List of circular dependency chains */
327
+ circularChains: string[][];
328
+ /** Detailed analysis of each chain */
329
+ chainAnalysis: CircularChainAnalysis[];
330
+ /** Recommendations for resolving circular dependencies */
331
+ recommendations: CircularDependencyRecommendation[];
332
+ }
333
+ /**
334
+ * Analysis of a single circular dependency chain
335
+ */
336
+ export interface CircularChainAnalysis {
337
+ /** The resources in the circular chain */
338
+ chain: string[];
339
+ /** Length of the chain */
340
+ chainLength: number;
341
+ /** Severity score (0-1, higher is more severe) */
342
+ severity: number;
343
+ /** Potential break points in the chain */
344
+ breakPoints: string[];
345
+ /** Fields affected by the circular dependency */
346
+ affectedFields: string[];
347
+ /** Risk level assessment */
348
+ riskLevel: 'low' | 'medium' | 'high';
349
+ }
350
+ /**
351
+ * Recommendation for resolving circular dependencies
352
+ */
353
+ export interface CircularDependencyRecommendation {
354
+ /** Type of recommendation */
355
+ type: 'break-optional-dependency' | 'refactor-architecture' | 'external-configuration' | 'conditional-logic';
356
+ /** Human-readable description */
357
+ description: string;
358
+ /** Severity of the issue this addresses */
359
+ severity: 'low' | 'medium' | 'high';
360
+ /** Resources affected by this recommendation */
361
+ affectedResources: string[];
362
+ /** Implementation guidance */
363
+ implementation: string;
364
+ }
365
+ /**
366
+ * Comprehensive resource type validator for KubernetesRef objects
367
+ * This implements requirement 4.5: resource type validation
368
+ */
369
+ export declare class ResourceTypeValidator {
370
+ private knownResourceTypes;
371
+ private schemaValidators;
372
+ constructor();
373
+ /**
374
+ * Validate a KubernetesRef for type correctness
375
+ */
376
+ validateKubernetesRef(ref: KubernetesRef<any>, context: ResourceTypeValidationContext): ResourceTypeValidationResult;
377
+ /**
378
+ * Validate a schema reference
379
+ */
380
+ private validateSchemaRef;
381
+ /**
382
+ * Validate a resource reference
383
+ */
384
+ private validateResourceRef;
385
+ /**
386
+ * Validate schema field path structure
387
+ */
388
+ private validateSchemaFieldPath;
389
+ /**
390
+ * Validate resource field path structure
391
+ */
392
+ private validateResourceFieldPath;
393
+ /**
394
+ * Validate field patterns against known Kubernetes patterns
395
+ */
396
+ private validateFieldPattern;
397
+ /**
398
+ * Validate type compatibility between expected and actual types
399
+ */
400
+ private validateTypeCompatibility;
401
+ /**
402
+ * Check if two types are compatible
403
+ */
404
+ private areTypesCompatible;
405
+ /**
406
+ * Infer the type of a field from a resource
407
+ */
408
+ private inferFieldType;
409
+ /**
410
+ * Initialize known resource types
411
+ */
412
+ private initializeKnownTypes;
413
+ /**
414
+ * Register a custom schema validator
415
+ */
416
+ registerSchemaValidator(schemaType: string, validator: SchemaValidator): void;
417
+ /**
418
+ * Register a custom resource type
419
+ */
420
+ registerResourceType(name: string, typeInfo: ResourceTypeInfo): void;
421
+ }
422
+ /**
423
+ * Context for resource type validation
424
+ */
425
+ export interface ResourceTypeValidationContext {
426
+ /** Available resources for validation */
427
+ availableResources?: Record<string, Enhanced<any, any>> | undefined;
428
+ /** Schema proxy for schema validation */
429
+ schemaProxy?: SchemaProxy<any, any> | undefined;
430
+ /** Type of schema being validated */
431
+ schemaType?: string;
432
+ /** Whether to perform strict type checking */
433
+ strictTypeChecking?: boolean;
434
+ }
435
+ /**
436
+ * Information about a resource type
437
+ */
438
+ export interface ResourceTypeInfo {
439
+ /** API version of the resource */
440
+ apiVersion: string;
441
+ /** Kind of the resource */
442
+ kind: string;
443
+ /** Common fields and their types */
444
+ commonFields: Record<string, string>;
445
+ }
446
+ /**
447
+ * Schema validator interface
448
+ */
449
+ export interface SchemaValidator {
450
+ /** Validate a field in the schema */
451
+ validateField(fieldPath: string, expectedType?: any): SchemaFieldValidationResult;
452
+ }
453
+ /**
454
+ * Result of schema field validation
455
+ */
456
+ export interface SchemaFieldValidationResult {
457
+ /** Whether the validation passed */
458
+ valid: boolean;
459
+ /** Error message if validation failed */
460
+ error?: string;
461
+ /** Actual type of the field */
462
+ actualType?: string;
463
+ }
464
+ /**
465
+ * Result of field path validation
466
+ */
467
+ export interface FieldPathValidationResult {
468
+ /** Whether the validation passed */
469
+ valid: boolean;
470
+ /** Error message if validation failed */
471
+ error?: string;
472
+ /** Actual type of the field */
473
+ actualType?: string | undefined;
474
+ }
475
+ /**
476
+ * Result of type compatibility validation
477
+ */
478
+ export interface TypeCompatibilityValidationResult {
479
+ /** Whether the types are compatible */
480
+ valid: boolean;
481
+ /** Error message if validation failed */
482
+ error?: string;
483
+ /** Actual type found */
484
+ actualType?: string;
485
+ }
486
+ //# sourceMappingURL=resource-analyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-analyzer.d.ts","sourceRoot":"","sources":["../../../src/core/expressions/resource-analyzer.ts"],"names":[],"mappings":"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"}