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,327 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Factory Integration for Expression Analysis
|
|
3
|
+
*
|
|
4
|
+
* This module provides integration between factory functions and the expression
|
|
5
|
+
* analysis system, enabling automatic detection and conversion of KubernetesRef
|
|
6
|
+
* objects in factory configurations.
|
|
7
|
+
*/
|
|
8
|
+
import { getComponentLogger } from '../logging/index.js';
|
|
9
|
+
import { isKubernetesRef, isCelExpression } from '../../utils/type-guards.js';
|
|
10
|
+
import { ResourceAnalyzer } from './resource-analyzer.js';
|
|
11
|
+
import { ExpressionContextDetector } from './context-detector.js';
|
|
12
|
+
import { ContextAwareCelGenerator } from './context-aware-generator.js';
|
|
13
|
+
import { MagicProxyDetector } from './magic-proxy-detector.js';
|
|
14
|
+
import { CelConversionEngine, } from './cel-conversion-engine.js';
|
|
15
|
+
const logger = getComponentLogger('factory-integration');
|
|
16
|
+
/**
|
|
17
|
+
* Factory Expression Analyzer
|
|
18
|
+
*
|
|
19
|
+
* Analyzes factory configurations for KubernetesRef objects and provides
|
|
20
|
+
* context-aware expression handling recommendations.
|
|
21
|
+
*/
|
|
22
|
+
export class FactoryExpressionAnalyzer {
|
|
23
|
+
resourceAnalyzer;
|
|
24
|
+
contextDetector;
|
|
25
|
+
contextAwareGenerator;
|
|
26
|
+
magicProxyDetector;
|
|
27
|
+
celConversionEngine;
|
|
28
|
+
constructor() {
|
|
29
|
+
this.resourceAnalyzer = new ResourceAnalyzer();
|
|
30
|
+
this.contextDetector = new ExpressionContextDetector();
|
|
31
|
+
this.contextAwareGenerator = new ContextAwareCelGenerator();
|
|
32
|
+
this.magicProxyDetector = new MagicProxyDetector();
|
|
33
|
+
this.celConversionEngine = new CelConversionEngine();
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Analyze a factory configuration for KubernetesRef objects
|
|
37
|
+
*
|
|
38
|
+
* @param config - Factory configuration object
|
|
39
|
+
* @param context - Analysis context
|
|
40
|
+
* @param options - Analysis options
|
|
41
|
+
* @returns Analysis result
|
|
42
|
+
*/
|
|
43
|
+
analyzeFactoryConfig(config, context, options = {}) {
|
|
44
|
+
const startTime = performance.now();
|
|
45
|
+
logger.debug('Analyzing factory configuration', {
|
|
46
|
+
factoryType: context.factoryType,
|
|
47
|
+
configKeys: Object.keys(config)
|
|
48
|
+
});
|
|
49
|
+
const result = {
|
|
50
|
+
hasKubernetesRefs: false,
|
|
51
|
+
fieldAnalysis: {},
|
|
52
|
+
optimizations: [],
|
|
53
|
+
metrics: {
|
|
54
|
+
analysisTimeMs: 0,
|
|
55
|
+
fieldsAnalyzed: 0,
|
|
56
|
+
referencesFound: 0
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
// Skip analysis if disabled
|
|
60
|
+
if (options.enableAnalysis === false) {
|
|
61
|
+
result.metrics.analysisTimeMs = performance.now() - startTime;
|
|
62
|
+
return result;
|
|
63
|
+
}
|
|
64
|
+
// Use enhanced magic proxy detection
|
|
65
|
+
const detectionConfig = {
|
|
66
|
+
maxDepth: options.maxDepth || 10,
|
|
67
|
+
includeDetailedPaths: true,
|
|
68
|
+
analyzeReferenceSources: true,
|
|
69
|
+
trackMetrics: true
|
|
70
|
+
};
|
|
71
|
+
const magicProxyResult = this.magicProxyDetector.detectKubernetesRefs(config, detectionConfig);
|
|
72
|
+
result.magicProxyDetection = magicProxyResult;
|
|
73
|
+
result.hasKubernetesRefs = magicProxyResult.hasKubernetesRefs;
|
|
74
|
+
result.metrics.referencesFound = magicProxyResult.stats.totalReferences;
|
|
75
|
+
// Analyze each field in the configuration using enhanced detection
|
|
76
|
+
this.analyzeConfigFieldsWithMagicProxy(config, context, result, magicProxyResult, options.maxDepth || 10);
|
|
77
|
+
// Generate optimizations based on analysis
|
|
78
|
+
this.generateOptimizations(result, context);
|
|
79
|
+
result.metrics.analysisTimeMs = performance.now() - startTime;
|
|
80
|
+
logger.debug('Factory configuration analysis complete', {
|
|
81
|
+
hasKubernetesRefs: result.hasKubernetesRefs,
|
|
82
|
+
fieldsAnalyzed: result.metrics.fieldsAnalyzed,
|
|
83
|
+
referencesFound: result.metrics.referencesFound,
|
|
84
|
+
analysisTimeMs: result.metrics.analysisTimeMs
|
|
85
|
+
});
|
|
86
|
+
return result;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Process a factory configuration value, handling KubernetesRef objects appropriately
|
|
90
|
+
*
|
|
91
|
+
* @param value - Configuration value to process
|
|
92
|
+
* @param context - Factory context
|
|
93
|
+
* @param fieldPath - Path to the field being processed
|
|
94
|
+
* @param options - Processing options
|
|
95
|
+
* @returns Processed value
|
|
96
|
+
*/
|
|
97
|
+
processFactoryValue(value, context, fieldPath, options = {}) {
|
|
98
|
+
logger.debug('Processing factory value', {
|
|
99
|
+
fieldPath,
|
|
100
|
+
factoryType: context.factoryType,
|
|
101
|
+
valueType: typeof value,
|
|
102
|
+
enableCelConversion: options.enableCelConversion
|
|
103
|
+
});
|
|
104
|
+
// Check if the value needs CEL conversion
|
|
105
|
+
if (options.enableCelConversion && this.celConversionEngine.needsConversion(value)) {
|
|
106
|
+
const conversionConfig = {
|
|
107
|
+
factoryType: context.factoryType,
|
|
108
|
+
enableOptimization: true,
|
|
109
|
+
preserveStatic: true,
|
|
110
|
+
includeDebugInfo: false
|
|
111
|
+
};
|
|
112
|
+
const conversionResult = this.celConversionEngine.convertValue(value, context, conversionConfig);
|
|
113
|
+
if (conversionResult.wasConverted) {
|
|
114
|
+
logger.debug('CEL conversion applied', {
|
|
115
|
+
fieldPath,
|
|
116
|
+
strategy: conversionResult.strategy,
|
|
117
|
+
referencesConverted: conversionResult.metrics.referencesConverted
|
|
118
|
+
});
|
|
119
|
+
return conversionResult.converted;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
// Handle KubernetesRef objects based on factory type
|
|
123
|
+
if (isKubernetesRef(value)) {
|
|
124
|
+
logger.debug('Processing KubernetesRef in factory configuration', {
|
|
125
|
+
fieldPath,
|
|
126
|
+
factoryType: context.factoryType,
|
|
127
|
+
resourceId: value.resourceId,
|
|
128
|
+
refFieldPath: value.fieldPath
|
|
129
|
+
});
|
|
130
|
+
// For direct factories, preserve the reference for runtime resolution
|
|
131
|
+
// For Kro factories, the serialization system will handle CEL conversion
|
|
132
|
+
return value;
|
|
133
|
+
}
|
|
134
|
+
// Handle CelExpression objects - preserve them as-is for serialization
|
|
135
|
+
if (isCelExpression(value)) {
|
|
136
|
+
logger.debug('Processing CelExpression in factory configuration', {
|
|
137
|
+
fieldPath,
|
|
138
|
+
factoryType: context.factoryType,
|
|
139
|
+
expression: value.expression
|
|
140
|
+
});
|
|
141
|
+
// Preserve CelExpression objects as-is - the serialization system will convert them to ${expression} format
|
|
142
|
+
return value;
|
|
143
|
+
}
|
|
144
|
+
// Handle arrays and objects recursively
|
|
145
|
+
if (Array.isArray(value)) {
|
|
146
|
+
return value.map((item, index) => this.processFactoryValue(item, context, `${fieldPath}[${index}]`, options));
|
|
147
|
+
}
|
|
148
|
+
if (value && typeof value === 'object' && value.constructor === Object) {
|
|
149
|
+
const processed = {};
|
|
150
|
+
for (const [key, val] of Object.entries(value)) {
|
|
151
|
+
processed[key] = this.processFactoryValue(val, context, `${fieldPath}.${key}`, options);
|
|
152
|
+
}
|
|
153
|
+
return processed;
|
|
154
|
+
}
|
|
155
|
+
// Return static values as-is
|
|
156
|
+
return value;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Create an enhanced factory function that includes expression analysis
|
|
160
|
+
*
|
|
161
|
+
* @param originalFactory - Original factory function
|
|
162
|
+
* @param factoryName - Name of the factory for logging
|
|
163
|
+
* @returns Enhanced factory function
|
|
164
|
+
*/
|
|
165
|
+
enhanceFactory(originalFactory, factoryName) {
|
|
166
|
+
return (config, options = {}) => {
|
|
167
|
+
const context = {
|
|
168
|
+
factoryType: options.factoryType || 'kro',
|
|
169
|
+
factoryName,
|
|
170
|
+
analysisEnabled: options.enableAnalysis !== false
|
|
171
|
+
};
|
|
172
|
+
// Analyze the configuration if analysis is enabled
|
|
173
|
+
if (context.analysisEnabled) {
|
|
174
|
+
const analysis = this.analyzeFactoryConfig(config, context, options);
|
|
175
|
+
// Log analysis results for debugging
|
|
176
|
+
if (analysis.hasKubernetesRefs) {
|
|
177
|
+
logger.debug('Factory configuration contains KubernetesRef objects', {
|
|
178
|
+
factoryName,
|
|
179
|
+
referencesFound: analysis.metrics.referencesFound,
|
|
180
|
+
optimizations: analysis.optimizations
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
// Call the original factory function
|
|
185
|
+
return originalFactory(config);
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
analyzeConfigFields(config, context, result, maxDepth, currentPath = '', currentDepth = 0) {
|
|
189
|
+
if (currentDepth >= maxDepth) {
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
for (const [key, value] of Object.entries(config)) {
|
|
193
|
+
const fieldPath = currentPath ? `${currentPath}.${key}` : key;
|
|
194
|
+
result.metrics.fieldsAnalyzed++;
|
|
195
|
+
if (isKubernetesRef(value)) {
|
|
196
|
+
result.hasKubernetesRefs = true;
|
|
197
|
+
result.metrics.referencesFound++;
|
|
198
|
+
// Analyze the KubernetesRef
|
|
199
|
+
const analysisContext = {
|
|
200
|
+
factoryType: context.factoryType || 'kro',
|
|
201
|
+
type: 'resource',
|
|
202
|
+
availableReferences: {},
|
|
203
|
+
resourceContext: {
|
|
204
|
+
resourceId: value.resourceId,
|
|
205
|
+
fieldPath: value.fieldPath
|
|
206
|
+
},
|
|
207
|
+
resourceId: 'factory-config',
|
|
208
|
+
resourceConfig: { [key]: value }
|
|
209
|
+
};
|
|
210
|
+
const analysis = this.resourceAnalyzer.analyzeResourceConfig('factory-config', { [key]: value }, analysisContext);
|
|
211
|
+
result.fieldAnalysis[fieldPath] = {
|
|
212
|
+
hasKubernetesRefs: true,
|
|
213
|
+
staticFields: [],
|
|
214
|
+
kubernetesRefFields: [fieldPath],
|
|
215
|
+
celExpressionFields: [],
|
|
216
|
+
analysisDetails: analysis
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
else if (Array.isArray(value)) {
|
|
220
|
+
// Recursively analyze array elements
|
|
221
|
+
value.forEach((item, index) => {
|
|
222
|
+
if (typeof item === 'object' && item !== null) {
|
|
223
|
+
this.analyzeConfigFields({ [index]: item }, context, result, maxDepth, `${fieldPath}[${index}]`, currentDepth + 1);
|
|
224
|
+
}
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
else if (value && typeof value === 'object' && value.constructor === Object) {
|
|
228
|
+
// Recursively analyze nested objects
|
|
229
|
+
this.analyzeConfigFields(value, context, result, maxDepth, fieldPath, currentDepth + 1);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
analyzeConfigFieldsWithMagicProxy(_config, _context, result, magicProxyResult, _maxDepth) {
|
|
234
|
+
// Use the magic proxy detection results to create field analysis
|
|
235
|
+
for (const refInfo of magicProxyResult.references) {
|
|
236
|
+
const fieldPath = refInfo.path;
|
|
237
|
+
if (!result.fieldAnalysis[fieldPath]) {
|
|
238
|
+
result.fieldAnalysis[fieldPath] = {
|
|
239
|
+
hasKubernetesRefs: true,
|
|
240
|
+
staticFields: [],
|
|
241
|
+
kubernetesRefFields: [fieldPath],
|
|
242
|
+
celExpressionFields: [],
|
|
243
|
+
analysisDetails: {
|
|
244
|
+
source: refInfo.source,
|
|
245
|
+
resourceId: refInfo.resourceId,
|
|
246
|
+
fieldPath: refInfo.fieldPath,
|
|
247
|
+
isNested: refInfo.isNested,
|
|
248
|
+
nestingDepth: refInfo.nestingDepth
|
|
249
|
+
}
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
// Count fields analyzed
|
|
254
|
+
result.metrics.fieldsAnalyzed = magicProxyResult.metrics.propertiesScanned;
|
|
255
|
+
}
|
|
256
|
+
generateOptimizations(result, context) {
|
|
257
|
+
if (!result.hasKubernetesRefs) {
|
|
258
|
+
result.optimizations.push('Configuration contains only static values - no expression analysis needed');
|
|
259
|
+
return;
|
|
260
|
+
}
|
|
261
|
+
if (context.factoryType === 'direct') {
|
|
262
|
+
result.optimizations.push('Direct factory detected - KubernetesRef objects will be resolved at runtime');
|
|
263
|
+
}
|
|
264
|
+
else {
|
|
265
|
+
result.optimizations.push('Kro factory detected - KubernetesRef objects will be converted to CEL expressions');
|
|
266
|
+
}
|
|
267
|
+
// Enhanced optimizations based on magic proxy detection
|
|
268
|
+
if (result.magicProxyDetection) {
|
|
269
|
+
const detection = result.magicProxyDetection;
|
|
270
|
+
if (detection.stats.schemaReferences > 0) {
|
|
271
|
+
result.optimizations.push(`Found ${detection.stats.schemaReferences} schema references - these will be resolved during serialization`);
|
|
272
|
+
}
|
|
273
|
+
if (detection.stats.resourceReferences > 0) {
|
|
274
|
+
result.optimizations.push(`Found ${detection.stats.resourceReferences} resource references - these create dependencies`);
|
|
275
|
+
}
|
|
276
|
+
if (detection.stats.nestedReferences > 0) {
|
|
277
|
+
result.optimizations.push(`Found ${detection.stats.nestedReferences} nested references - consider flattening for better performance`);
|
|
278
|
+
}
|
|
279
|
+
if (detection.stats.maxNestingDepth > 5) {
|
|
280
|
+
result.optimizations.push(`Deep nesting detected (depth: ${detection.stats.maxNestingDepth}) - consider restructuring for better maintainability`);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
if (result.metrics.referencesFound > 10) {
|
|
284
|
+
result.optimizations.push('High number of references detected - consider caching analysis results');
|
|
285
|
+
}
|
|
286
|
+
if (result.metrics.analysisTimeMs > 100) {
|
|
287
|
+
result.optimizations.push('Analysis took significant time - consider enabling lazy analysis for complex configurations');
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Global factory expression analyzer instance
|
|
293
|
+
*/
|
|
294
|
+
export const factoryExpressionAnalyzer = new FactoryExpressionAnalyzer();
|
|
295
|
+
/**
|
|
296
|
+
* Utility function to enhance a factory function with expression analysis
|
|
297
|
+
*
|
|
298
|
+
* @param factory - Original factory function
|
|
299
|
+
* @param name - Factory name for logging
|
|
300
|
+
* @returns Enhanced factory function
|
|
301
|
+
*/
|
|
302
|
+
export function withExpressionAnalysis(factory, name) {
|
|
303
|
+
return factoryExpressionAnalyzer.enhanceFactory(factory, name);
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Utility function to analyze a factory configuration
|
|
307
|
+
*
|
|
308
|
+
* @param config - Factory configuration
|
|
309
|
+
* @param context - Analysis context
|
|
310
|
+
* @param options - Analysis options
|
|
311
|
+
* @returns Analysis result
|
|
312
|
+
*/
|
|
313
|
+
export function analyzeFactoryConfig(config, context, options) {
|
|
314
|
+
return factoryExpressionAnalyzer.analyzeFactoryConfig(config, context, options);
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Utility function to process a factory value with KubernetesRef handling
|
|
318
|
+
*
|
|
319
|
+
* @param value - Value to process
|
|
320
|
+
* @param context - Factory context
|
|
321
|
+
* @param fieldPath - Field path for logging
|
|
322
|
+
* @returns Processed value
|
|
323
|
+
*/
|
|
324
|
+
export function processFactoryValue(value, context, fieldPath) {
|
|
325
|
+
return factoryExpressionAnalyzer.processFactoryValue(value, context, fieldPath);
|
|
326
|
+
}
|
|
327
|
+
//# sourceMappingURL=factory-integration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory-integration.js","sourceRoot":"","sources":["../../../src/core/expressions/factory-integration.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Factory Pattern Handler for JavaScript to CEL Expression Conversion
|
|
3
|
+
*
|
|
4
|
+
* This module provides different expression handling strategies based on the factory pattern:
|
|
5
|
+
* - DirectFactoryExpressionHandler: For direct deployment evaluation
|
|
6
|
+
* - KroFactoryExpressionHandler: For CEL conversion and Kro deployment
|
|
7
|
+
*
|
|
8
|
+
* The factory pattern determines how expressions containing KubernetesRef objects
|
|
9
|
+
* are processed and converted.
|
|
10
|
+
*/
|
|
11
|
+
import type { CelExpression, KubernetesRef } from '../types/common.js';
|
|
12
|
+
import type { AnalysisContext, CelConversionResult } from './analyzer.js';
|
|
13
|
+
/**
|
|
14
|
+
* Factory pattern types supported by TypeKro
|
|
15
|
+
*/
|
|
16
|
+
export type FactoryPatternType = 'direct' | 'kro';
|
|
17
|
+
/**
|
|
18
|
+
* Base interface for factory expression handlers
|
|
19
|
+
*/
|
|
20
|
+
export interface FactoryExpressionHandler {
|
|
21
|
+
/**
|
|
22
|
+
* Handle expressions containing KubernetesRef objects
|
|
23
|
+
*/
|
|
24
|
+
handleExpression(expression: any, context: AnalysisContext): CelConversionResult;
|
|
25
|
+
/**
|
|
26
|
+
* Convert a KubernetesRef to appropriate format for this factory pattern
|
|
27
|
+
*/
|
|
28
|
+
convertKubernetesRef(ref: KubernetesRef<any>, context: AnalysisContext): CelExpression;
|
|
29
|
+
/**
|
|
30
|
+
* Get the factory pattern type
|
|
31
|
+
*/
|
|
32
|
+
getPatternType(): FactoryPatternType;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Expression handler for direct deployment pattern
|
|
36
|
+
*
|
|
37
|
+
* In direct deployment, expressions are evaluated at deployment time
|
|
38
|
+
* by resolving KubernetesRef objects to actual values from deployed resources.
|
|
39
|
+
*/
|
|
40
|
+
export declare class DirectFactoryExpressionHandler implements FactoryExpressionHandler {
|
|
41
|
+
getPatternType(): FactoryPatternType;
|
|
42
|
+
handleExpression(expression: any, context: AnalysisContext): CelConversionResult;
|
|
43
|
+
convertKubernetesRef(ref: KubernetesRef<any>, _context: AnalysisContext): CelExpression;
|
|
44
|
+
private handleStringExpression;
|
|
45
|
+
private handleComplexExpression;
|
|
46
|
+
private isKubernetesRef;
|
|
47
|
+
private extractKubernetesRefs;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Expression handler for Kro deployment pattern
|
|
51
|
+
*
|
|
52
|
+
* In Kro deployment, expressions are converted to CEL and evaluated
|
|
53
|
+
* by the Kro controller at runtime.
|
|
54
|
+
*/
|
|
55
|
+
export declare class KroFactoryExpressionHandler implements FactoryExpressionHandler {
|
|
56
|
+
getPatternType(): FactoryPatternType;
|
|
57
|
+
handleExpression(expression: any, context: AnalysisContext): CelConversionResult;
|
|
58
|
+
convertKubernetesRef(ref: KubernetesRef<any>, _context: AnalysisContext): CelExpression;
|
|
59
|
+
private handleStringExpression;
|
|
60
|
+
private handleComplexExpression;
|
|
61
|
+
private isKubernetesRef;
|
|
62
|
+
private extractKubernetesRefs;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Factory for creating appropriate expression handlers based on factory pattern
|
|
66
|
+
*/
|
|
67
|
+
export declare class FactoryPatternHandlerFactory {
|
|
68
|
+
/**
|
|
69
|
+
* Create an expression handler for the specified factory pattern
|
|
70
|
+
*/
|
|
71
|
+
static createHandler(patternType: FactoryPatternType): FactoryExpressionHandler;
|
|
72
|
+
/**
|
|
73
|
+
* Detect factory pattern from context
|
|
74
|
+
*/
|
|
75
|
+
static detectFactoryPattern(context: AnalysisContext): FactoryPatternType;
|
|
76
|
+
/**
|
|
77
|
+
* Create handler based on analysis context
|
|
78
|
+
*/
|
|
79
|
+
static createHandlerFromContext(context: AnalysisContext): FactoryExpressionHandler;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Main factory pattern integration point
|
|
83
|
+
*
|
|
84
|
+
* This function provides the main integration point for factory pattern
|
|
85
|
+
* aware expression handling.
|
|
86
|
+
*/
|
|
87
|
+
export declare function handleExpressionWithFactoryPattern(expression: any, context: AnalysisContext): CelConversionResult;
|
|
88
|
+
//# sourceMappingURL=factory-pattern-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory-pattern-handler.d.ts","sourceRoot":"","sources":["../../../src/core/expressions/factory-pattern-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGvE,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAE1E;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,KAAK,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC;;OAEG;IACH,gBAAgB,CACd,UAAU,EAAE,GAAG,EACf,OAAO,EAAE,eAAe,GACvB,mBAAmB,CAAC;IAEvB;;OAEG;IACH,oBAAoB,CAClB,GAAG,EAAE,aAAa,CAAC,GAAG,CAAC,EACvB,OAAO,EAAE,eAAe,GACvB,aAAa,CAAC;IAEjB;;OAEG;IACH,cAAc,IAAI,kBAAkB,CAAC;CACtC;AAED;;;;;GAKG;AACH,qBAAa,8BAA+B,YAAW,wBAAwB;IAE7E,cAAc,IAAI,kBAAkB;IAIpC,gBAAgB,CACd,UAAU,EAAE,GAAG,EACf,OAAO,EAAE,eAAe,GACvB,mBAAmB;IA4DtB,oBAAoB,CAClB,GAAG,EAAE,aAAa,CAAC,GAAG,CAAC,EACvB,QAAQ,EAAE,eAAe,GACxB,aAAa;IAoBhB,OAAO,CAAC,sBAAsB;IAwB9B,OAAO,CAAC,uBAAuB;IAuB/B,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,qBAAqB;CAmB9B;AAED;;;;;GAKG;AACH,qBAAa,2BAA4B,YAAW,wBAAwB;IAE1E,cAAc,IAAI,kBAAkB;IAIpC,gBAAgB,CACd,UAAU,EAAE,GAAG,EACf,OAAO,EAAE,eAAe,GACvB,mBAAmB;IA2DtB,oBAAoB,CAClB,GAAG,EAAE,aAAa,CAAC,GAAG,CAAC,EACvB,QAAQ,EAAE,eAAe,GACxB,aAAa;IAoBhB,OAAO,CAAC,sBAAsB;IAuB9B,OAAO,CAAC,uBAAuB;IAuB/B,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,qBAAqB;CAmB9B;AAED;;GAEG;AACH,qBAAa,4BAA4B;IAEvC;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,WAAW,EAAE,kBAAkB,GAAG,wBAAwB;IAW/E;;OAEG;IACH,MAAM,CAAC,oBAAoB,CAAC,OAAO,EAAE,eAAe,GAAG,kBAAkB;IAIzE;;OAEG;IACH,MAAM,CAAC,wBAAwB,CAAC,OAAO,EAAE,eAAe,GAAG,wBAAwB;CAIpF;AAED;;;;;GAKG;AACH,wBAAgB,kCAAkC,CAChD,UAAU,EAAE,GAAG,EACf,OAAO,EAAE,eAAe,GACvB,mBAAmB,CAGrB"}
|