typekro 0.2.2 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (213) 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 +13 -1
  13. package/dist/core/deployment/engine.d.ts.map +1 -1
  14. package/dist/core/deployment/engine.js +48 -3
  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/evaluation/cel-optimizer.d.ts.map +1 -1
  21. package/dist/core/evaluation/cel-optimizer.js +7 -13
  22. package/dist/core/evaluation/cel-optimizer.js.map +1 -1
  23. package/dist/core/expressions/analyzer.d.ts +584 -0
  24. package/dist/core/expressions/analyzer.d.ts.map +1 -0
  25. package/dist/core/expressions/analyzer.js +2956 -0
  26. package/dist/core/expressions/analyzer.js.map +1 -0
  27. package/dist/core/expressions/cache.d.ts +136 -0
  28. package/dist/core/expressions/cache.d.ts.map +1 -0
  29. package/dist/core/expressions/cache.js +347 -0
  30. package/dist/core/expressions/cache.js.map +1 -0
  31. package/dist/core/expressions/cel-conversion-engine.d.ts +126 -0
  32. package/dist/core/expressions/cel-conversion-engine.d.ts.map +1 -0
  33. package/dist/core/expressions/cel-conversion-engine.js +293 -0
  34. package/dist/core/expressions/cel-conversion-engine.js.map +1 -0
  35. package/dist/core/expressions/compile-time-validation.d.ts +270 -0
  36. package/dist/core/expressions/compile-time-validation.d.ts.map +1 -0
  37. package/dist/core/expressions/compile-time-validation.js +506 -0
  38. package/dist/core/expressions/compile-time-validation.js.map +1 -0
  39. package/dist/core/expressions/composition-integration.d.ts +315 -0
  40. package/dist/core/expressions/composition-integration.d.ts.map +1 -0
  41. package/dist/core/expressions/composition-integration.js +936 -0
  42. package/dist/core/expressions/composition-integration.js.map +1 -0
  43. package/dist/core/expressions/conditional-expression-processor.d.ts +154 -0
  44. package/dist/core/expressions/conditional-expression-processor.d.ts.map +1 -0
  45. package/dist/core/expressions/conditional-expression-processor.js +479 -0
  46. package/dist/core/expressions/conditional-expression-processor.js.map +1 -0
  47. package/dist/core/expressions/conditional-integration.d.ts +133 -0
  48. package/dist/core/expressions/conditional-integration.d.ts.map +1 -0
  49. package/dist/core/expressions/conditional-integration.js +293 -0
  50. package/dist/core/expressions/conditional-integration.js.map +1 -0
  51. package/dist/core/expressions/conditional-validation.d.ts +181 -0
  52. package/dist/core/expressions/conditional-validation.d.ts.map +1 -0
  53. package/dist/core/expressions/conditional-validation.js +460 -0
  54. package/dist/core/expressions/conditional-validation.js.map +1 -0
  55. package/dist/core/expressions/context-aware-generator.d.ts +127 -0
  56. package/dist/core/expressions/context-aware-generator.d.ts.map +1 -0
  57. package/dist/core/expressions/context-aware-generator.js +500 -0
  58. package/dist/core/expressions/context-aware-generator.js.map +1 -0
  59. package/dist/core/expressions/context-detector.d.ts +148 -0
  60. package/dist/core/expressions/context-detector.d.ts.map +1 -0
  61. package/dist/core/expressions/context-detector.js +546 -0
  62. package/dist/core/expressions/context-detector.js.map +1 -0
  63. package/dist/core/expressions/context-switcher.d.ts +185 -0
  64. package/dist/core/expressions/context-switcher.d.ts.map +1 -0
  65. package/dist/core/expressions/context-switcher.js +515 -0
  66. package/dist/core/expressions/context-switcher.js.map +1 -0
  67. package/dist/core/expressions/context-validator.d.ts +176 -0
  68. package/dist/core/expressions/context-validator.d.ts.map +1 -0
  69. package/dist/core/expressions/context-validator.js +452 -0
  70. package/dist/core/expressions/context-validator.js.map +1 -0
  71. package/dist/core/expressions/custom-context-manager.d.ts +194 -0
  72. package/dist/core/expressions/custom-context-manager.d.ts.map +1 -0
  73. package/dist/core/expressions/custom-context-manager.js +390 -0
  74. package/dist/core/expressions/custom-context-manager.js.map +1 -0
  75. package/dist/core/expressions/expression-proxy.d.ts +80 -0
  76. package/dist/core/expressions/expression-proxy.d.ts.map +1 -0
  77. package/dist/core/expressions/expression-proxy.js +227 -0
  78. package/dist/core/expressions/expression-proxy.js.map +1 -0
  79. package/dist/core/expressions/factory-integration.d.ts +132 -0
  80. package/dist/core/expressions/factory-integration.d.ts.map +1 -0
  81. package/dist/core/expressions/factory-integration.js +327 -0
  82. package/dist/core/expressions/factory-integration.js.map +1 -0
  83. package/dist/core/expressions/factory-pattern-handler.d.ts +88 -0
  84. package/dist/core/expressions/factory-pattern-handler.d.ts.map +1 -0
  85. package/dist/core/expressions/factory-pattern-handler.js +336 -0
  86. package/dist/core/expressions/factory-pattern-handler.js.map +1 -0
  87. package/dist/core/expressions/field-hydration-processor.d.ts +188 -0
  88. package/dist/core/expressions/field-hydration-processor.d.ts.map +1 -0
  89. package/dist/core/expressions/field-hydration-processor.js +562 -0
  90. package/dist/core/expressions/field-hydration-processor.js.map +1 -0
  91. package/dist/core/expressions/imperative-analyzer.d.ts +21 -0
  92. package/dist/core/expressions/imperative-analyzer.d.ts.map +1 -0
  93. package/dist/core/expressions/imperative-analyzer.js +457 -0
  94. package/dist/core/expressions/imperative-analyzer.js.map +1 -0
  95. package/dist/core/expressions/index.d.ts +54 -0
  96. package/dist/core/expressions/index.d.ts.map +1 -0
  97. package/dist/core/expressions/index.js +50 -0
  98. package/dist/core/expressions/index.js.map +1 -0
  99. package/dist/core/expressions/lazy-analysis.d.ts +1128 -0
  100. package/dist/core/expressions/lazy-analysis.d.ts.map +1 -0
  101. package/dist/core/expressions/lazy-analysis.js +2443 -0
  102. package/dist/core/expressions/lazy-analysis.js.map +1 -0
  103. package/dist/core/expressions/magic-assignable-analyzer.d.ts +123 -0
  104. package/dist/core/expressions/magic-assignable-analyzer.d.ts.map +1 -0
  105. package/dist/core/expressions/magic-assignable-analyzer.js +352 -0
  106. package/dist/core/expressions/magic-assignable-analyzer.js.map +1 -0
  107. package/dist/core/expressions/magic-proxy-analyzer.d.ts +206 -0
  108. package/dist/core/expressions/magic-proxy-analyzer.d.ts.map +1 -0
  109. package/dist/core/expressions/magic-proxy-analyzer.js +639 -0
  110. package/dist/core/expressions/magic-proxy-analyzer.js.map +1 -0
  111. package/dist/core/expressions/magic-proxy-detector.d.ts +154 -0
  112. package/dist/core/expressions/magic-proxy-detector.d.ts.map +1 -0
  113. package/dist/core/expressions/magic-proxy-detector.js +242 -0
  114. package/dist/core/expressions/magic-proxy-detector.js.map +1 -0
  115. package/dist/core/expressions/migration-helpers.d.ts +133 -0
  116. package/dist/core/expressions/migration-helpers.d.ts.map +1 -0
  117. package/dist/core/expressions/migration-helpers.js +443 -0
  118. package/dist/core/expressions/migration-helpers.js.map +1 -0
  119. package/dist/core/expressions/optionality-handler.d.ts +503 -0
  120. package/dist/core/expressions/optionality-handler.d.ts.map +1 -0
  121. package/dist/core/expressions/optionality-handler.js +1306 -0
  122. package/dist/core/expressions/optionality-handler.js.map +1 -0
  123. package/dist/core/expressions/readiness-integration.d.ts +119 -0
  124. package/dist/core/expressions/readiness-integration.d.ts.map +1 -0
  125. package/dist/core/expressions/readiness-integration.js +386 -0
  126. package/dist/core/expressions/readiness-integration.js.map +1 -0
  127. package/dist/core/expressions/resource-analyzer.d.ts +486 -0
  128. package/dist/core/expressions/resource-analyzer.d.ts.map +1 -0
  129. package/dist/core/expressions/resource-analyzer.js +1086 -0
  130. package/dist/core/expressions/resource-analyzer.js.map +1 -0
  131. package/dist/core/expressions/resource-validation.d.ts +187 -0
  132. package/dist/core/expressions/resource-validation.d.ts.map +1 -0
  133. package/dist/core/expressions/resource-validation.js +552 -0
  134. package/dist/core/expressions/resource-validation.js.map +1 -0
  135. package/dist/core/expressions/runtime-error-mapper.d.ts +138 -0
  136. package/dist/core/expressions/runtime-error-mapper.d.ts.map +1 -0
  137. package/dist/core/expressions/runtime-error-mapper.js +412 -0
  138. package/dist/core/expressions/runtime-error-mapper.js.map +1 -0
  139. package/dist/core/expressions/source-map.d.ts +168 -0
  140. package/dist/core/expressions/source-map.d.ts.map +1 -0
  141. package/dist/core/expressions/source-map.js +350 -0
  142. package/dist/core/expressions/source-map.js.map +1 -0
  143. package/dist/core/expressions/status-builder-analyzer.d.ts +353 -0
  144. package/dist/core/expressions/status-builder-analyzer.d.ts.map +1 -0
  145. package/dist/core/expressions/status-builder-analyzer.js +1311 -0
  146. package/dist/core/expressions/status-builder-analyzer.js.map +1 -0
  147. package/dist/core/expressions/type-inference.d.ts +184 -0
  148. package/dist/core/expressions/type-inference.d.ts.map +1 -0
  149. package/dist/core/expressions/type-inference.js +838 -0
  150. package/dist/core/expressions/type-inference.js.map +1 -0
  151. package/dist/core/expressions/type-safety.d.ts +203 -0
  152. package/dist/core/expressions/type-safety.d.ts.map +1 -0
  153. package/dist/core/expressions/type-safety.js +442 -0
  154. package/dist/core/expressions/type-safety.js.map +1 -0
  155. package/dist/core/expressions/types.d.ts +282 -0
  156. package/dist/core/expressions/types.d.ts.map +1 -0
  157. package/dist/core/expressions/types.js +8 -0
  158. package/dist/core/expressions/types.js.map +1 -0
  159. package/dist/core/kubernetes/client-provider.js +2 -2
  160. package/dist/core/kubernetes/client-provider.js.map +1 -1
  161. package/dist/core/references/cel.d.ts +13 -1
  162. package/dist/core/references/cel.d.ts.map +1 -1
  163. package/dist/core/references/cel.js +50 -0
  164. package/dist/core/references/cel.js.map +1 -1
  165. package/dist/core/references/schema-proxy.d.ts.map +1 -1
  166. package/dist/core/references/schema-proxy.js +13 -8
  167. package/dist/core/references/schema-proxy.js.map +1 -1
  168. package/dist/core/serialization/core.d.ts.map +1 -1
  169. package/dist/core/serialization/core.js +573 -9
  170. package/dist/core/serialization/core.js.map +1 -1
  171. package/dist/core/types/deployment.d.ts +7 -0
  172. package/dist/core/types/deployment.d.ts.map +1 -1
  173. package/dist/core/types/deployment.js +7 -0
  174. package/dist/core/types/deployment.js.map +1 -1
  175. package/dist/core/types/index.d.ts +1 -0
  176. package/dist/core/types/index.d.ts.map +1 -1
  177. package/dist/core/types/index.js.map +1 -1
  178. package/dist/core/validation/cel-validator.d.ts.map +1 -1
  179. package/dist/core/validation/cel-validator.js +4 -8
  180. package/dist/core/validation/cel-validator.js.map +1 -1
  181. package/dist/core.d.ts +1 -1
  182. package/dist/core.d.ts.map +1 -1
  183. package/dist/core.js +1 -1
  184. package/dist/core.js.map +1 -1
  185. package/dist/factories/helm/helm-release.d.ts.map +1 -1
  186. package/dist/factories/helm/helm-release.js +0 -5
  187. package/dist/factories/helm/helm-release.js.map +1 -1
  188. package/dist/factories/helm/types.d.ts +1 -1
  189. package/dist/factories/helm/types.d.ts.map +1 -1
  190. package/dist/factories/index.js +1 -0
  191. package/dist/factories/index.js.map +1 -1
  192. package/dist/factories/shared.d.ts.map +1 -1
  193. package/dist/factories/shared.js +21 -1
  194. package/dist/factories/shared.js.map +1 -1
  195. package/dist/factories/simple/index.d.ts +2 -2
  196. package/dist/factories/simple/index.d.ts.map +1 -1
  197. package/dist/factories/simple/workloads/deployment.d.ts +3 -3
  198. package/dist/factories/simple/workloads/deployment.d.ts.map +1 -1
  199. package/dist/factories/simple/workloads/deployment.js +37 -11
  200. package/dist/factories/simple/workloads/deployment.js.map +1 -1
  201. package/dist/index.d.ts +1 -1
  202. package/dist/index.d.ts.map +1 -1
  203. package/dist/index.js +1 -1
  204. package/dist/index.js.map +1 -1
  205. package/dist/utils/index.d.ts +1 -1
  206. package/dist/utils/index.d.ts.map +1 -1
  207. package/dist/utils/index.js +1 -1
  208. package/dist/utils/index.js.map +1 -1
  209. package/dist/utils/type-guards.d.ts +6 -0
  210. package/dist/utils/type-guards.d.ts.map +1 -1
  211. package/dist/utils/type-guards.js +25 -2
  212. package/dist/utils/type-guards.js.map +1 -1
  213. package/package.json +6 -1
@@ -0,0 +1,562 @@
1
+ /**
2
+ * Field Hydration Integration for JavaScript to CEL Expression Conversion
3
+ *
4
+ * This module provides integration between the JavaScript to CEL expression conversion system
5
+ * and TypeKro's field hydration strategy. It processes status expressions containing KubernetesRef
6
+ * objects and tracks dependencies to ensure proper hydration ordering.
7
+ *
8
+ * Key Features:
9
+ * - Uses AST parsing to analyze status builder functions
10
+ * - Processes status builder expressions with KubernetesRef dependency tracking
11
+ * - Extracts dependencies from KubernetesRef objects in expressions
12
+ * - Integrates with existing field hydration strategy for proper ordering
13
+ * - Handles both direct and Kro factory patterns
14
+ * - Provides dependency analysis for status field population
15
+ */
16
+ import * as esprima from 'esprima';
17
+ import * as estraverse from 'estraverse';
18
+ import { ConversionError } from '../errors.js';
19
+ import { getComponentLogger } from '../logging/index.js';
20
+ import { isKubernetesRef, } from '../../utils/type-guards.js';
21
+ import { DependencyResolver } from '../dependencies/index.js';
22
+ import { JavaScriptToCelAnalyzer } from './analyzer.js';
23
+ import { MagicProxyAnalyzer, } from './magic-proxy-analyzer.js';
24
+ import { SourceMapBuilder } from './source-map.js';
25
+ /**
26
+ * Default field hydration strategy implementation
27
+ */
28
+ export class DefaultFieldHydrationStrategy {
29
+ calculateHydrationOrder(dependencies) {
30
+ // Create a simple dependency graph for status fields
31
+ const fieldDependencies = new Map();
32
+ const allFields = Array.from(dependencies.keys());
33
+ // Initialize empty dependencies for all fields
34
+ for (const fieldName of allFields) {
35
+ fieldDependencies.set(fieldName, new Set());
36
+ }
37
+ // For now, use a simple approach: fields with fewer dependencies come first
38
+ // This avoids the complex field-to-field dependency logic that was causing circular dependencies
39
+ // In a real implementation, this would need more sophisticated dependency analysis
40
+ // Sort fields by dependency complexity (simpler dependencies first)
41
+ const sortedFields = allFields.sort((a, b) => {
42
+ const aDeps = dependencies.get(a) || [];
43
+ const bDeps = dependencies.get(b) || [];
44
+ // Schema-only dependencies come first
45
+ const aSchemaOnly = aDeps.every(dep => dep.type === 'schema');
46
+ const bSchemaOnly = bDeps.every(dep => dep.type === 'schema');
47
+ if (aSchemaOnly && !bSchemaOnly)
48
+ return -1;
49
+ if (!aSchemaOnly && bSchemaOnly)
50
+ return 1;
51
+ // Then sort by number of dependencies
52
+ return aDeps.length - bDeps.length;
53
+ });
54
+ return sortedFields;
55
+ }
56
+ canHydrateInParallel(_fieldName, dependencies) {
57
+ // Fields with no dependencies can be hydrated in parallel
58
+ if (dependencies.length === 0) {
59
+ return true;
60
+ }
61
+ // Fields that only depend on schema can be hydrated in parallel
62
+ return dependencies.every(dep => dep.type === 'schema');
63
+ }
64
+ getFieldPriority(_fieldName, dependencies) {
65
+ // Higher priority (lower number) for fields with fewer dependencies
66
+ let priority = dependencies.length;
67
+ // Schema-only dependencies get higher priority
68
+ if (dependencies.every(dep => dep.type === 'schema')) {
69
+ priority -= 10;
70
+ }
71
+ // Optional dependencies get lower priority
72
+ if (dependencies.some(dep => dep.optional)) {
73
+ priority += 5;
74
+ }
75
+ return Math.max(0, priority);
76
+ }
77
+ }
78
+ /**
79
+ * Default processing options
80
+ */
81
+ const DEFAULT_PROCESSING_OPTIONS = {
82
+ hydrationStrategy: new DefaultFieldHydrationStrategy(),
83
+ deepAnalysis: true,
84
+ validateReferences: true,
85
+ includeSourceMapping: true,
86
+ maxAnalysisDepth: 10,
87
+ factoryType: 'kro'
88
+ };
89
+ /**
90
+ * Field Hydration Expression Processor
91
+ *
92
+ * Processes status builder functions to extract KubernetesRef dependencies
93
+ * and integrate with TypeKro's field hydration strategy.
94
+ */
95
+ export class FieldHydrationExpressionProcessor {
96
+ expressionAnalyzer;
97
+ magicProxyAnalyzer;
98
+ dependencyResolver;
99
+ options;
100
+ logger = getComponentLogger('field-hydration-processor');
101
+ constructor(expressionAnalyzer, options) {
102
+ this.expressionAnalyzer = expressionAnalyzer || new JavaScriptToCelAnalyzer();
103
+ this.magicProxyAnalyzer = new MagicProxyAnalyzer();
104
+ this.dependencyResolver = new DependencyResolver();
105
+ this.options = { ...DEFAULT_PROCESSING_OPTIONS, ...options };
106
+ }
107
+ /**
108
+ * Process status expressions with KubernetesRef dependency tracking
109
+ *
110
+ * This is the main method that analyzes a status builder function and extracts
111
+ * dependencies for proper field hydration ordering.
112
+ */
113
+ processStatusExpressions(statusBuilder, resources, schemaProxy) {
114
+ try {
115
+ this.logger.debug('Processing status expressions', {
116
+ resourceCount: Object.keys(resources).length,
117
+ hasSchemaProxy: !!schemaProxy
118
+ });
119
+ // Parse the status builder function to extract field expressions using AST
120
+ const fieldExpressions = this.extractFieldExpressions(statusBuilder, resources, schemaProxy);
121
+ // Process each field expression
122
+ const statusMappings = {};
123
+ const fieldDependencies = new Map();
124
+ const fieldAnalysis = new Map();
125
+ const allSourceMap = [];
126
+ const allErrors = [];
127
+ let overallValid = true;
128
+ for (const [fieldName, expressionSource] of Object.entries(fieldExpressions)) {
129
+ try {
130
+ // Create analysis context for this field
131
+ const context = {
132
+ type: 'status',
133
+ availableReferences: resources,
134
+ ...(schemaProxy && { schemaProxy: schemaProxy }),
135
+ factoryType: this.options.factoryType,
136
+ ...(this.options.includeSourceMapping && { sourceMap: new SourceMapBuilder() }),
137
+ dependencies: []
138
+ };
139
+ // Analyze the expression for KubernetesRef objects
140
+ const analysisResult = this.analyzeFieldExpression(expressionSource, context);
141
+ // Store analysis result
142
+ fieldAnalysis.set(fieldName, analysisResult);
143
+ if (analysisResult.valid && analysisResult.celExpression) {
144
+ statusMappings[fieldName] = analysisResult.celExpression;
145
+ }
146
+ // Extract dependencies from the analysis
147
+ const dependencies = this.extractDependenciesFromAnalysis(analysisResult);
148
+ fieldDependencies.set(fieldName, dependencies);
149
+ // Accumulate source mapping and errors
150
+ allSourceMap.push(...analysisResult.sourceMap);
151
+ allErrors.push(...analysisResult.errors);
152
+ if (!analysisResult.valid) {
153
+ overallValid = false;
154
+ }
155
+ this.logger.debug('Processed field expression', {
156
+ fieldName,
157
+ valid: analysisResult.valid,
158
+ dependencyCount: dependencies.length,
159
+ requiresConversion: analysisResult.requiresConversion
160
+ });
161
+ }
162
+ catch (error) {
163
+ const fieldError = new ConversionError(`Failed to process field '${fieldName}': ${error instanceof Error ? error.message : String(error)}`, expressionSource, 'unknown');
164
+ allErrors.push(fieldError);
165
+ fieldDependencies.set(fieldName, []);
166
+ overallValid = false;
167
+ this.logger.error('Failed to process field expression', error, { fieldName });
168
+ }
169
+ }
170
+ // Calculate hydration order using the configured strategy
171
+ const hydrationOrder = this.options.hydrationStrategy.calculateHydrationOrder(fieldDependencies);
172
+ // Extract all resource and schema references
173
+ const { allResourceReferences, allSchemaReferences } = this.categorizeAllReferences(fieldDependencies);
174
+ this.logger.debug('Status expression processing complete', {
175
+ fieldCount: Object.keys(fieldExpressions).length,
176
+ validFields: Object.keys(statusMappings).length,
177
+ totalDependencies: allResourceReferences.length + allSchemaReferences.length,
178
+ hydrationOrder: hydrationOrder.length,
179
+ overallValid
180
+ });
181
+ return {
182
+ statusMappings,
183
+ hydrationOrder,
184
+ dependencies: fieldDependencies,
185
+ sourceMap: allSourceMap,
186
+ errors: allErrors,
187
+ valid: overallValid,
188
+ fieldAnalysis,
189
+ allResourceReferences,
190
+ allSchemaReferences
191
+ };
192
+ }
193
+ catch (error) {
194
+ const processingError = new ConversionError(`Failed to process status expressions: ${error instanceof Error ? error.message : String(error)}`, statusBuilder.toString(), 'function-call');
195
+ this.logger.error('Status expression processing failed', error);
196
+ return {
197
+ statusMappings: {},
198
+ hydrationOrder: [],
199
+ dependencies: new Map(),
200
+ sourceMap: [],
201
+ errors: [processingError],
202
+ valid: false,
203
+ fieldAnalysis: new Map(),
204
+ allResourceReferences: [],
205
+ allSchemaReferences: []
206
+ };
207
+ }
208
+ }
209
+ /**
210
+ * Extract dependencies from KubernetesRef objects in expressions
211
+ *
212
+ * This method analyzes the KubernetesRef objects found in expressions and
213
+ * converts them to ResourceReference objects for dependency tracking.
214
+ */
215
+ extractDependenciesFromKubernetesRefs(kubernetesRefs) {
216
+ const dependencies = [];
217
+ for (const ref of kubernetesRefs) {
218
+ const dependency = {
219
+ resourceId: ref.resourceId,
220
+ type: ref.resourceId === '__schema__' ? 'schema' : 'resource',
221
+ fieldPath: ref.fieldPath,
222
+ optional: false // Will be determined by expression analysis
223
+ };
224
+ dependencies.push(dependency);
225
+ }
226
+ return dependencies;
227
+ }
228
+ /**
229
+ * Integrate with existing field hydration strategy
230
+ *
231
+ * This method provides integration points with TypeKro's existing field hydration
232
+ * system by providing dependency information and hydration ordering.
233
+ */
234
+ integrateWithFieldHydrationStrategy(processedStatus, existingStrategy) {
235
+ const strategy = existingStrategy || this.options.hydrationStrategy;
236
+ // Create enhanced strategy that incorporates expression dependencies
237
+ const enhancedStrategy = {
238
+ calculateHydrationOrder: (dependencies) => {
239
+ // Merge with processed dependencies
240
+ const mergedDependencies = new Map(dependencies);
241
+ for (const [field, deps] of processedStatus.dependencies) {
242
+ const existing = mergedDependencies.get(field) || [];
243
+ mergedDependencies.set(field, [...existing, ...deps]);
244
+ }
245
+ return strategy.calculateHydrationOrder(mergedDependencies);
246
+ },
247
+ canHydrateInParallel: (fieldName, dependencies) => {
248
+ const processedDeps = processedStatus.dependencies.get(fieldName) || [];
249
+ const allDeps = [...dependencies, ...processedDeps];
250
+ return strategy.canHydrateInParallel(fieldName, allDeps);
251
+ },
252
+ getFieldPriority: (fieldName, dependencies) => {
253
+ const processedDeps = processedStatus.dependencies.get(fieldName) || [];
254
+ const allDeps = [...dependencies, ...processedDeps];
255
+ return strategy.getFieldPriority(fieldName, allDeps);
256
+ }
257
+ };
258
+ // Create hydration plan similar to deployment plan
259
+ const hydrationOrder = enhancedStrategy.calculateHydrationOrder(processedStatus.dependencies);
260
+ const levels = [];
261
+ const processed = new Set();
262
+ // Group fields by hydration level (similar to deployment levels)
263
+ while (processed.size < hydrationOrder.length) {
264
+ const currentLevel = [];
265
+ for (const fieldName of hydrationOrder) {
266
+ if (processed.has(fieldName)) {
267
+ continue;
268
+ }
269
+ const fieldDeps = processedStatus.dependencies.get(fieldName) || [];
270
+ const resourceDeps = fieldDeps.filter(dep => dep.type === 'resource').map(dep => dep.resourceId);
271
+ const allResourceDepsProcessed = resourceDeps.every(depId => Array.from(processed).some(processedField => {
272
+ const processedDeps = processedStatus.dependencies.get(processedField) || [];
273
+ return processedDeps.some(dep => dep.resourceId === depId);
274
+ }));
275
+ if (allResourceDepsProcessed || fieldDeps.every(dep => dep.type === 'schema')) {
276
+ currentLevel.push(fieldName);
277
+ }
278
+ }
279
+ if (currentLevel.length === 0 && processed.size < hydrationOrder.length) {
280
+ // Add remaining fields to avoid infinite loop
281
+ const remaining = hydrationOrder.filter(field => !processed.has(field));
282
+ currentLevel.push(...remaining);
283
+ }
284
+ if (currentLevel.length > 0) {
285
+ levels.push(currentLevel);
286
+ currentLevel.forEach(field => processed.add(field));
287
+ }
288
+ else {
289
+ break;
290
+ }
291
+ }
292
+ const hydrationPlan = {
293
+ levels,
294
+ totalResources: hydrationOrder.length,
295
+ maxParallelism: Math.max(...levels.map(level => level.length))
296
+ };
297
+ return {
298
+ enhancedStrategy,
299
+ hydrationPlan,
300
+ parallelizableFields: levels
301
+ };
302
+ }
303
+ /**
304
+ * Strip TypeScript syntax that esprima cannot parse
305
+ */
306
+ stripTypeScriptSyntax(functionSource) {
307
+ // Remove non-null assertion operators (!)
308
+ let cleaned = functionSource.replace(/(\w+)!/g, '$1');
309
+ // Remove type annotations in parameters (: Type)
310
+ cleaned = cleaned.replace(/:\s*typeof\s+\w+/g, '');
311
+ cleaned = cleaned.replace(/:\s*any/g, '');
312
+ // Handle optional chaining with array access like ?.[0] -> [0]
313
+ // Remove the dot before the bracket to avoid syntax like "ingress.[0]"
314
+ cleaned = cleaned.replace(/\?\.\[/g, '[');
315
+ // Handle optional chaining - convert to regular property access for parsing
316
+ // This is a simplified approach that works for basic cases
317
+ cleaned = cleaned.replace(/\?\./g, '.');
318
+ return cleaned;
319
+ }
320
+ /**
321
+ * Extract field expressions from a status builder function using AST parsing
322
+ */
323
+ extractFieldExpressions(statusBuilder, resources, schemaProxy) {
324
+ try {
325
+ // Get the function source code
326
+ let functionSource = statusBuilder.toString();
327
+ // Strip TypeScript syntax that esprima can't handle
328
+ functionSource = this.stripTypeScriptSyntax(functionSource);
329
+ this.logger.debug('Parsing status builder function', {
330
+ functionLength: functionSource.length
331
+ });
332
+ // Parse the function to AST
333
+ const ast = esprima.parseScript(functionSource, {
334
+ loc: true,
335
+ range: true,
336
+ });
337
+ // Find the return statement or arrow function body in the function
338
+ const returnStatement = this.findReturnStatement(ast);
339
+ if (!returnStatement) {
340
+ this.logger.warn('No return statement found in status builder function');
341
+ return {};
342
+ }
343
+ // Extract field expressions from the return object
344
+ const fieldExpressions = this.extractFieldExpressionsFromReturnStatement(returnStatement, functionSource);
345
+ this.logger.debug('Extracted field expressions from AST', {
346
+ fieldCount: Object.keys(fieldExpressions).length,
347
+ fields: Object.keys(fieldExpressions)
348
+ });
349
+ return fieldExpressions;
350
+ }
351
+ catch (error) {
352
+ this.logger.error('Failed to parse status builder function', error);
353
+ // Fallback: try to execute the function to get field names
354
+ try {
355
+ const mockResources = this.createMockResources(resources || {});
356
+ const mockSchema = schemaProxy || {};
357
+ const result = statusBuilder(mockSchema, mockResources);
358
+ if (result && typeof result === 'object') {
359
+ const fieldExpressions = {};
360
+ for (const key of Object.keys(result)) {
361
+ fieldExpressions[key] = `/* Could not parse expression for field ${key} */`;
362
+ }
363
+ return fieldExpressions;
364
+ }
365
+ }
366
+ catch (fallbackError) {
367
+ this.logger.error('Fallback field extraction also failed', fallbackError);
368
+ }
369
+ return {};
370
+ }
371
+ }
372
+ /**
373
+ * Find the return statement or arrow function body in a function AST
374
+ */
375
+ findReturnStatement(ast) {
376
+ let returnStatement = null;
377
+ estraverse.traverse(ast, {
378
+ enter(node) {
379
+ if (node.type === 'ReturnStatement') {
380
+ returnStatement = node;
381
+ return estraverse.VisitorOption.Break;
382
+ }
383
+ else if (node.type === 'ArrowFunctionExpression') {
384
+ // Handle arrow function with expression body (no explicit return)
385
+ const arrowFunc = node;
386
+ if (arrowFunc.body && arrowFunc.body.type !== 'BlockStatement') {
387
+ // This is an expression body, treat it as the return value
388
+ returnStatement = {
389
+ type: 'ArrowFunctionBody',
390
+ argument: arrowFunc.body
391
+ };
392
+ return estraverse.VisitorOption.Break;
393
+ }
394
+ }
395
+ return undefined; // Continue traversal
396
+ }
397
+ });
398
+ return returnStatement;
399
+ }
400
+ /**
401
+ * Extract field expressions from a return statement or arrow function body
402
+ */
403
+ extractFieldExpressionsFromReturnStatement(returnStatement, sourceCode) {
404
+ const fieldExpressions = {};
405
+ // Get the argument (expression being returned)
406
+ let argument;
407
+ if (returnStatement.type === 'ArrowFunctionBody') {
408
+ argument = returnStatement.argument;
409
+ }
410
+ else {
411
+ argument = returnStatement.argument;
412
+ }
413
+ if (!argument) {
414
+ return fieldExpressions;
415
+ }
416
+ // Handle object expression in return statement or arrow function body
417
+ if (argument.type === 'ObjectExpression') {
418
+ const objectExpression = argument;
419
+ for (const property of objectExpression.properties) {
420
+ if (property.type === 'Property' && !property.computed) {
421
+ const prop = property;
422
+ // Get the field name
423
+ let fieldName;
424
+ if (prop.key.type === 'Identifier') {
425
+ fieldName = prop.key.name;
426
+ }
427
+ else if (prop.key.type === 'Literal' && typeof prop.key.value === 'string') {
428
+ fieldName = prop.key.value;
429
+ }
430
+ else {
431
+ continue; // Skip complex keys
432
+ }
433
+ // Extract the expression source code
434
+ if (prop.value.range) {
435
+ const [start, end] = prop.value.range;
436
+ const expressionSource = sourceCode.slice(start, end);
437
+ fieldExpressions[fieldName] = expressionSource;
438
+ }
439
+ else {
440
+ // Fallback: use a placeholder
441
+ fieldExpressions[fieldName] = `/* Expression for ${fieldName} */`;
442
+ }
443
+ }
444
+ }
445
+ }
446
+ return fieldExpressions;
447
+ }
448
+ /**
449
+ * Create mock resources for fallback field extraction
450
+ */
451
+ createMockResources(resources) {
452
+ const mockResources = {};
453
+ for (const [resourceName, _resource] of Object.entries(resources)) {
454
+ // Create a simple mock that returns truthy values for any property access
455
+ mockResources[resourceName] = new Proxy({}, {
456
+ get: () => new Proxy({}, {
457
+ get: () => new Proxy({}, {
458
+ get: () => 1 // Return a truthy value for comparisons
459
+ })
460
+ })
461
+ });
462
+ }
463
+ return mockResources;
464
+ }
465
+ /**
466
+ * Analyze a single field expression for KubernetesRef objects
467
+ */
468
+ analyzeFieldExpression(expressionSource, context) {
469
+ try {
470
+ // Use the JavaScript to CEL analyzer to properly analyze the expression
471
+ const analysisResult = this.expressionAnalyzer.analyzeExpression(expressionSource, context);
472
+ this.logger.debug('Analyzed field expression', {
473
+ expression: expressionSource.substring(0, 100),
474
+ valid: analysisResult.valid,
475
+ requiresConversion: analysisResult.requiresConversion,
476
+ dependencyCount: analysisResult.dependencies.length
477
+ });
478
+ return analysisResult;
479
+ }
480
+ catch (error) {
481
+ this.logger.error('Failed to analyze field expression', error, {
482
+ expression: expressionSource.substring(0, 100)
483
+ });
484
+ const conversionError = new ConversionError(`Failed to analyze expression: ${error instanceof Error ? error.message : String(error)}`, expressionSource, 'javascript');
485
+ return {
486
+ valid: false,
487
+ celExpression: null,
488
+ dependencies: [],
489
+ sourceMap: [],
490
+ errors: [conversionError],
491
+ warnings: [],
492
+ requiresConversion: false
493
+ };
494
+ }
495
+ }
496
+ /**
497
+ * Extract KubernetesRef objects from a value (recursively)
498
+ */
499
+ extractKubernetesRefsFromValue(value) {
500
+ const refs = [];
501
+ if (isKubernetesRef(value)) {
502
+ refs.push(value);
503
+ }
504
+ else if (Array.isArray(value)) {
505
+ for (const item of value) {
506
+ refs.push(...this.extractKubernetesRefsFromValue(item));
507
+ }
508
+ }
509
+ else if (value && typeof value === 'object') {
510
+ for (const key in value) {
511
+ if (Object.hasOwn(value, key)) {
512
+ refs.push(...this.extractKubernetesRefsFromValue(value[key]));
513
+ }
514
+ }
515
+ }
516
+ return refs;
517
+ }
518
+ /**
519
+ * Extract dependencies from analysis result
520
+ */
521
+ extractDependenciesFromAnalysis(analysisResult) {
522
+ return this.extractDependenciesFromKubernetesRefs(analysisResult.dependencies);
523
+ }
524
+ /**
525
+ * Categorize all references into resource and schema references
526
+ */
527
+ categorizeAllReferences(fieldDependencies) {
528
+ const allResourceReferences = [];
529
+ const allSchemaReferences = [];
530
+ const seenReferences = new Set();
531
+ for (const dependencies of fieldDependencies.values()) {
532
+ for (const dep of dependencies) {
533
+ const key = `${dep.type}:${dep.resourceId}:${dep.fieldPath || ''}`;
534
+ if (!seenReferences.has(key)) {
535
+ seenReferences.add(key);
536
+ if (dep.type === 'resource') {
537
+ allResourceReferences.push(dep);
538
+ }
539
+ else {
540
+ allSchemaReferences.push(dep);
541
+ }
542
+ }
543
+ }
544
+ }
545
+ return { allResourceReferences, allSchemaReferences };
546
+ }
547
+ }
548
+ /**
549
+ * Convenience function to process status expressions
550
+ */
551
+ export function processStatusExpressions(statusBuilder, resources, schemaProxy, options) {
552
+ const processor = new FieldHydrationExpressionProcessor(undefined, options);
553
+ return processor.processStatusExpressions(statusBuilder, resources, schemaProxy);
554
+ }
555
+ /**
556
+ * Convenience function to extract dependencies from KubernetesRef objects
557
+ */
558
+ export function extractDependenciesFromKubernetesRefs(kubernetesRefs) {
559
+ const processor = new FieldHydrationExpressionProcessor();
560
+ return processor.extractDependenciesFromKubernetesRefs(kubernetesRefs);
561
+ }
562
+ //# sourceMappingURL=field-hydration-processor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-hydration-processor.js","sourceRoot":"","sources":["../../../src/core/expressions/field-hydration-processor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Imperative Composition Analyzer
3
+ *
4
+ * This module analyzes imperative composition functions to detect JavaScript expressions
5
+ * that contain KubernetesRef objects and converts them to CEL expressions.
6
+ */
7
+ import type { Enhanced } from '../types/index.js';
8
+ export interface ImperativeAnalysisOptions {
9
+ factoryType: 'direct' | 'kro';
10
+ }
11
+ export interface ImperativeAnalysisResult {
12
+ statusMappings: Record<string, any>;
13
+ hasJavaScriptExpressions: boolean;
14
+ errors: string[];
15
+ }
16
+ /**
17
+ * Analyze an imperative composition function to detect JavaScript expressions
18
+ * that should be converted to CEL expressions.
19
+ */
20
+ export declare function analyzeImperativeComposition(compositionFn: Function, resources: Record<string, Enhanced<any, any>>, options: ImperativeAnalysisOptions): ImperativeAnalysisResult;
21
+ //# sourceMappingURL=imperative-analyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imperative-analyzer.d.ts","sourceRoot":"","sources":["../../../src/core/expressions/imperative-analyzer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAMlD,MAAM,WAAW,yBAAyB;IACxC,WAAW,EAAE,QAAQ,GAAG,KAAK,CAAC;CAC/B;AAED,MAAM,WAAW,wBAAwB;IACvC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACpC,wBAAwB,EAAE,OAAO,CAAC;IAClC,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,aAAa,EAAE,QAAQ,EACvB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAC7C,OAAO,EAAE,yBAAyB,GACjC,wBAAwB,CAiN1B"}