typekro 0.2.2 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -3
- package/dist/.tsbuildinfo +1 -1
- package/dist/core/composition/imperative.d.ts.map +1 -1
- package/dist/core/composition/imperative.js +15 -2
- package/dist/core/composition/imperative.js.map +1 -1
- package/dist/core/composition/typekro-runtime/typekro-runtime.d.ts.map +1 -1
- package/dist/core/composition/typekro-runtime/typekro-runtime.js +24 -25
- package/dist/core/composition/typekro-runtime/typekro-runtime.js.map +1 -1
- package/dist/core/dependencies/type-guards.d.ts.map +1 -1
- package/dist/core/dependencies/type-guards.js +7 -2
- package/dist/core/dependencies/type-guards.js.map +1 -1
- package/dist/core/deployment/engine.d.ts +13 -1
- package/dist/core/deployment/engine.d.ts.map +1 -1
- package/dist/core/deployment/engine.js +48 -3
- package/dist/core/deployment/engine.js.map +1 -1
- package/dist/core/errors.d.ts +85 -0
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +135 -0
- package/dist/core/errors.js.map +1 -1
- package/dist/core/evaluation/cel-optimizer.d.ts.map +1 -1
- package/dist/core/evaluation/cel-optimizer.js +7 -13
- package/dist/core/evaluation/cel-optimizer.js.map +1 -1
- package/dist/core/expressions/analyzer.d.ts +584 -0
- package/dist/core/expressions/analyzer.d.ts.map +1 -0
- package/dist/core/expressions/analyzer.js +2956 -0
- package/dist/core/expressions/analyzer.js.map +1 -0
- package/dist/core/expressions/cache.d.ts +136 -0
- package/dist/core/expressions/cache.d.ts.map +1 -0
- package/dist/core/expressions/cache.js +347 -0
- package/dist/core/expressions/cache.js.map +1 -0
- package/dist/core/expressions/cel-conversion-engine.d.ts +126 -0
- package/dist/core/expressions/cel-conversion-engine.d.ts.map +1 -0
- package/dist/core/expressions/cel-conversion-engine.js +293 -0
- package/dist/core/expressions/cel-conversion-engine.js.map +1 -0
- package/dist/core/expressions/compile-time-validation.d.ts +270 -0
- package/dist/core/expressions/compile-time-validation.d.ts.map +1 -0
- package/dist/core/expressions/compile-time-validation.js +506 -0
- package/dist/core/expressions/compile-time-validation.js.map +1 -0
- package/dist/core/expressions/composition-integration.d.ts +315 -0
- package/dist/core/expressions/composition-integration.d.ts.map +1 -0
- package/dist/core/expressions/composition-integration.js +936 -0
- package/dist/core/expressions/composition-integration.js.map +1 -0
- package/dist/core/expressions/conditional-expression-processor.d.ts +154 -0
- package/dist/core/expressions/conditional-expression-processor.d.ts.map +1 -0
- package/dist/core/expressions/conditional-expression-processor.js +479 -0
- package/dist/core/expressions/conditional-expression-processor.js.map +1 -0
- package/dist/core/expressions/conditional-integration.d.ts +133 -0
- package/dist/core/expressions/conditional-integration.d.ts.map +1 -0
- package/dist/core/expressions/conditional-integration.js +293 -0
- package/dist/core/expressions/conditional-integration.js.map +1 -0
- package/dist/core/expressions/conditional-validation.d.ts +181 -0
- package/dist/core/expressions/conditional-validation.d.ts.map +1 -0
- package/dist/core/expressions/conditional-validation.js +460 -0
- package/dist/core/expressions/conditional-validation.js.map +1 -0
- package/dist/core/expressions/context-aware-generator.d.ts +127 -0
- package/dist/core/expressions/context-aware-generator.d.ts.map +1 -0
- package/dist/core/expressions/context-aware-generator.js +500 -0
- package/dist/core/expressions/context-aware-generator.js.map +1 -0
- package/dist/core/expressions/context-detector.d.ts +148 -0
- package/dist/core/expressions/context-detector.d.ts.map +1 -0
- package/dist/core/expressions/context-detector.js +546 -0
- package/dist/core/expressions/context-detector.js.map +1 -0
- package/dist/core/expressions/context-switcher.d.ts +185 -0
- package/dist/core/expressions/context-switcher.d.ts.map +1 -0
- package/dist/core/expressions/context-switcher.js +515 -0
- package/dist/core/expressions/context-switcher.js.map +1 -0
- package/dist/core/expressions/context-validator.d.ts +176 -0
- package/dist/core/expressions/context-validator.d.ts.map +1 -0
- package/dist/core/expressions/context-validator.js +452 -0
- package/dist/core/expressions/context-validator.js.map +1 -0
- package/dist/core/expressions/custom-context-manager.d.ts +194 -0
- package/dist/core/expressions/custom-context-manager.d.ts.map +1 -0
- package/dist/core/expressions/custom-context-manager.js +390 -0
- package/dist/core/expressions/custom-context-manager.js.map +1 -0
- package/dist/core/expressions/expression-proxy.d.ts +80 -0
- package/dist/core/expressions/expression-proxy.d.ts.map +1 -0
- package/dist/core/expressions/expression-proxy.js +227 -0
- package/dist/core/expressions/expression-proxy.js.map +1 -0
- package/dist/core/expressions/factory-integration.d.ts +132 -0
- package/dist/core/expressions/factory-integration.d.ts.map +1 -0
- package/dist/core/expressions/factory-integration.js +327 -0
- package/dist/core/expressions/factory-integration.js.map +1 -0
- package/dist/core/expressions/factory-pattern-handler.d.ts +88 -0
- package/dist/core/expressions/factory-pattern-handler.d.ts.map +1 -0
- package/dist/core/expressions/factory-pattern-handler.js +336 -0
- package/dist/core/expressions/factory-pattern-handler.js.map +1 -0
- package/dist/core/expressions/field-hydration-processor.d.ts +188 -0
- package/dist/core/expressions/field-hydration-processor.d.ts.map +1 -0
- package/dist/core/expressions/field-hydration-processor.js +562 -0
- package/dist/core/expressions/field-hydration-processor.js.map +1 -0
- package/dist/core/expressions/imperative-analyzer.d.ts +21 -0
- package/dist/core/expressions/imperative-analyzer.d.ts.map +1 -0
- package/dist/core/expressions/imperative-analyzer.js +457 -0
- package/dist/core/expressions/imperative-analyzer.js.map +1 -0
- package/dist/core/expressions/index.d.ts +54 -0
- package/dist/core/expressions/index.d.ts.map +1 -0
- package/dist/core/expressions/index.js +50 -0
- package/dist/core/expressions/index.js.map +1 -0
- package/dist/core/expressions/lazy-analysis.d.ts +1128 -0
- package/dist/core/expressions/lazy-analysis.d.ts.map +1 -0
- package/dist/core/expressions/lazy-analysis.js +2443 -0
- package/dist/core/expressions/lazy-analysis.js.map +1 -0
- package/dist/core/expressions/magic-assignable-analyzer.d.ts +123 -0
- package/dist/core/expressions/magic-assignable-analyzer.d.ts.map +1 -0
- package/dist/core/expressions/magic-assignable-analyzer.js +352 -0
- package/dist/core/expressions/magic-assignable-analyzer.js.map +1 -0
- package/dist/core/expressions/magic-proxy-analyzer.d.ts +206 -0
- package/dist/core/expressions/magic-proxy-analyzer.d.ts.map +1 -0
- package/dist/core/expressions/magic-proxy-analyzer.js +639 -0
- package/dist/core/expressions/magic-proxy-analyzer.js.map +1 -0
- package/dist/core/expressions/magic-proxy-detector.d.ts +154 -0
- package/dist/core/expressions/magic-proxy-detector.d.ts.map +1 -0
- package/dist/core/expressions/magic-proxy-detector.js +242 -0
- package/dist/core/expressions/magic-proxy-detector.js.map +1 -0
- package/dist/core/expressions/migration-helpers.d.ts +133 -0
- package/dist/core/expressions/migration-helpers.d.ts.map +1 -0
- package/dist/core/expressions/migration-helpers.js +443 -0
- package/dist/core/expressions/migration-helpers.js.map +1 -0
- package/dist/core/expressions/optionality-handler.d.ts +503 -0
- package/dist/core/expressions/optionality-handler.d.ts.map +1 -0
- package/dist/core/expressions/optionality-handler.js +1306 -0
- package/dist/core/expressions/optionality-handler.js.map +1 -0
- package/dist/core/expressions/readiness-integration.d.ts +119 -0
- package/dist/core/expressions/readiness-integration.d.ts.map +1 -0
- package/dist/core/expressions/readiness-integration.js +386 -0
- package/dist/core/expressions/readiness-integration.js.map +1 -0
- package/dist/core/expressions/resource-analyzer.d.ts +486 -0
- package/dist/core/expressions/resource-analyzer.d.ts.map +1 -0
- package/dist/core/expressions/resource-analyzer.js +1086 -0
- package/dist/core/expressions/resource-analyzer.js.map +1 -0
- package/dist/core/expressions/resource-validation.d.ts +187 -0
- package/dist/core/expressions/resource-validation.d.ts.map +1 -0
- package/dist/core/expressions/resource-validation.js +552 -0
- package/dist/core/expressions/resource-validation.js.map +1 -0
- package/dist/core/expressions/runtime-error-mapper.d.ts +138 -0
- package/dist/core/expressions/runtime-error-mapper.d.ts.map +1 -0
- package/dist/core/expressions/runtime-error-mapper.js +412 -0
- package/dist/core/expressions/runtime-error-mapper.js.map +1 -0
- package/dist/core/expressions/source-map.d.ts +168 -0
- package/dist/core/expressions/source-map.d.ts.map +1 -0
- package/dist/core/expressions/source-map.js +350 -0
- package/dist/core/expressions/source-map.js.map +1 -0
- package/dist/core/expressions/status-builder-analyzer.d.ts +353 -0
- package/dist/core/expressions/status-builder-analyzer.d.ts.map +1 -0
- package/dist/core/expressions/status-builder-analyzer.js +1311 -0
- package/dist/core/expressions/status-builder-analyzer.js.map +1 -0
- package/dist/core/expressions/type-inference.d.ts +184 -0
- package/dist/core/expressions/type-inference.d.ts.map +1 -0
- package/dist/core/expressions/type-inference.js +838 -0
- package/dist/core/expressions/type-inference.js.map +1 -0
- package/dist/core/expressions/type-safety.d.ts +203 -0
- package/dist/core/expressions/type-safety.d.ts.map +1 -0
- package/dist/core/expressions/type-safety.js +442 -0
- package/dist/core/expressions/type-safety.js.map +1 -0
- package/dist/core/expressions/types.d.ts +282 -0
- package/dist/core/expressions/types.d.ts.map +1 -0
- package/dist/core/expressions/types.js +8 -0
- package/dist/core/expressions/types.js.map +1 -0
- package/dist/core/kubernetes/client-provider.js +2 -2
- package/dist/core/kubernetes/client-provider.js.map +1 -1
- package/dist/core/references/cel.d.ts +13 -1
- package/dist/core/references/cel.d.ts.map +1 -1
- package/dist/core/references/cel.js +50 -0
- package/dist/core/references/cel.js.map +1 -1
- package/dist/core/references/schema-proxy.d.ts.map +1 -1
- package/dist/core/references/schema-proxy.js +13 -8
- package/dist/core/references/schema-proxy.js.map +1 -1
- package/dist/core/serialization/core.d.ts.map +1 -1
- package/dist/core/serialization/core.js +573 -9
- package/dist/core/serialization/core.js.map +1 -1
- package/dist/core/types/deployment.d.ts +7 -0
- package/dist/core/types/deployment.d.ts.map +1 -1
- package/dist/core/types/deployment.js +7 -0
- package/dist/core/types/deployment.js.map +1 -1
- package/dist/core/types/index.d.ts +1 -0
- package/dist/core/types/index.d.ts.map +1 -1
- package/dist/core/types/index.js.map +1 -1
- package/dist/core/validation/cel-validator.d.ts.map +1 -1
- package/dist/core/validation/cel-validator.js +4 -8
- package/dist/core/validation/cel-validator.js.map +1 -1
- package/dist/core.d.ts +1 -1
- package/dist/core.d.ts.map +1 -1
- package/dist/core.js +1 -1
- package/dist/core.js.map +1 -1
- package/dist/factories/helm/helm-release.d.ts.map +1 -1
- package/dist/factories/helm/helm-release.js +0 -5
- package/dist/factories/helm/helm-release.js.map +1 -1
- package/dist/factories/helm/types.d.ts +1 -1
- package/dist/factories/helm/types.d.ts.map +1 -1
- package/dist/factories/index.js +1 -0
- package/dist/factories/index.js.map +1 -1
- package/dist/factories/shared.d.ts.map +1 -1
- package/dist/factories/shared.js +21 -1
- package/dist/factories/shared.js.map +1 -1
- package/dist/factories/simple/index.d.ts +2 -2
- package/dist/factories/simple/index.d.ts.map +1 -1
- package/dist/factories/simple/workloads/deployment.d.ts +3 -3
- package/dist/factories/simple/workloads/deployment.d.ts.map +1 -1
- package/dist/factories/simple/workloads/deployment.js +37 -11
- package/dist/factories/simple/workloads/deployment.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/type-guards.d.ts +6 -0
- package/dist/utils/type-guards.d.ts.map +1 -1
- package/dist/utils/type-guards.js +25 -2
- package/dist/utils/type-guards.js.map +1 -1
- package/package.json +6 -1
|
@@ -0,0 +1,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"}
|