typekro 0.2.2 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +0 -1
- package/dist/core/deployment/engine.d.ts.map +1 -1
- package/dist/core/deployment/engine.js +0 -1
- 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/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 +343 -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 +1301 -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/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 +4 -0
- package/dist/core/types/deployment.d.ts.map +1 -1
- 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.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/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,500 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context-Aware CEL Generation Strategies
|
|
3
|
+
*
|
|
4
|
+
* This module provides context-specific CEL generation strategies for converting
|
|
5
|
+
* KubernetesRef objects to appropriate CEL expressions based on the usage context.
|
|
6
|
+
*/
|
|
7
|
+
import { CEL_EXPRESSION_BRAND } from '../constants/brands.js';
|
|
8
|
+
import { ConversionError } from '../errors.js';
|
|
9
|
+
/**
|
|
10
|
+
* Context-aware CEL generator
|
|
11
|
+
*/
|
|
12
|
+
export class ContextAwareCelGenerator {
|
|
13
|
+
/**
|
|
14
|
+
* Generate CEL expression from KubernetesRef objects based on context
|
|
15
|
+
*/
|
|
16
|
+
generateCelExpression(kubernetesRefs, context, strategy, config) {
|
|
17
|
+
const startTime = performance.now();
|
|
18
|
+
const warnings = [];
|
|
19
|
+
const debugInfo = {
|
|
20
|
+
originalRefs: [...kubernetesRefs],
|
|
21
|
+
transformationSteps: [],
|
|
22
|
+
contextDetection: {} // Will be filled by caller if needed
|
|
23
|
+
};
|
|
24
|
+
try {
|
|
25
|
+
let celExpression;
|
|
26
|
+
// Apply context-specific generation strategy
|
|
27
|
+
switch (strategy) {
|
|
28
|
+
case 'status-expression':
|
|
29
|
+
celExpression = this.generateStatusExpression(kubernetesRefs, config, debugInfo);
|
|
30
|
+
break;
|
|
31
|
+
case 'resource-reference':
|
|
32
|
+
celExpression = this.generateResourceReference(kubernetesRefs, config, debugInfo);
|
|
33
|
+
break;
|
|
34
|
+
case 'conditional-check':
|
|
35
|
+
celExpression = this.generateConditionalCheck(kubernetesRefs, config, debugInfo);
|
|
36
|
+
break;
|
|
37
|
+
case 'readiness-check':
|
|
38
|
+
celExpression = this.generateReadinessCheck(kubernetesRefs, config, debugInfo);
|
|
39
|
+
break;
|
|
40
|
+
case 'template-interpolation':
|
|
41
|
+
celExpression = this.generateTemplateInterpolation(kubernetesRefs, config, debugInfo);
|
|
42
|
+
break;
|
|
43
|
+
case 'direct-evaluation':
|
|
44
|
+
celExpression = this.generateDirectEvaluation(kubernetesRefs, config, debugInfo);
|
|
45
|
+
break;
|
|
46
|
+
default:
|
|
47
|
+
throw new ConversionError(`Unsupported CEL generation strategy: ${strategy}`, kubernetesRefs.map(ref => `${ref.resourceId}.${ref.fieldPath}`).join(', '), 'unknown');
|
|
48
|
+
}
|
|
49
|
+
// Add performance metrics if debug info is enabled
|
|
50
|
+
if (config.includeDebugInfo) {
|
|
51
|
+
debugInfo.performanceMetrics = {
|
|
52
|
+
generationTimeMs: performance.now() - startTime,
|
|
53
|
+
cacheHits: 0, // Would be filled by cache layer
|
|
54
|
+
cacheMisses: 0 // Would be filled by cache layer
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
celExpression,
|
|
59
|
+
strategy,
|
|
60
|
+
context,
|
|
61
|
+
dependencies: kubernetesRefs,
|
|
62
|
+
warnings,
|
|
63
|
+
...(config.includeDebugInfo ? { debugInfo } : {})
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
throw new ConversionError(`Failed to generate CEL expression using ${strategy} strategy: ${error instanceof Error ? error.message : String(error)}`, kubernetesRefs.map(ref => `${ref.resourceId}.${ref.fieldPath}`).join(', '), 'unknown');
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Generate status expression CEL for status builders
|
|
72
|
+
*/
|
|
73
|
+
generateStatusExpression(kubernetesRefs, config, debugInfo) {
|
|
74
|
+
debugInfo.transformationSteps.push('Generating status expression');
|
|
75
|
+
if (kubernetesRefs.length === 1) {
|
|
76
|
+
const ref = kubernetesRefs[0];
|
|
77
|
+
if (!ref) {
|
|
78
|
+
throw new ConversionError('Invalid KubernetesRef array', 'undefined', 'unknown');
|
|
79
|
+
}
|
|
80
|
+
debugInfo.transformationSteps.push(`Single reference: ${ref.resourceId}.${ref.fieldPath}`);
|
|
81
|
+
// Generate appropriate CEL based on factory type
|
|
82
|
+
if (config.factoryType === 'kro') {
|
|
83
|
+
// For Kro factory, generate CEL expressions for runtime evaluation
|
|
84
|
+
const expression = this.generateKroStatusReference(ref);
|
|
85
|
+
debugInfo.transformationSteps.push(`Kro status reference: ${expression}`);
|
|
86
|
+
return {
|
|
87
|
+
[CEL_EXPRESSION_BRAND]: true,
|
|
88
|
+
expression,
|
|
89
|
+
_type: ref._type
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
// For direct factory, generate CEL expressions that will be resolved at deployment time
|
|
94
|
+
const expression = this.generateDirectStatusReference(ref);
|
|
95
|
+
debugInfo.transformationSteps.push(`Direct status reference: ${expression}`);
|
|
96
|
+
return {
|
|
97
|
+
[CEL_EXPRESSION_BRAND]: true,
|
|
98
|
+
expression,
|
|
99
|
+
_type: ref._type
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
// Multiple references - need to combine them appropriately
|
|
105
|
+
debugInfo.transformationSteps.push(`Multiple references: ${kubernetesRefs.length}`);
|
|
106
|
+
const expressions = kubernetesRefs.map(ref => {
|
|
107
|
+
if (config.factoryType === 'kro') {
|
|
108
|
+
return this.generateKroStatusReference(ref);
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
return this.generateDirectStatusReference(ref);
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
// For now, just concatenate them (this would be improved based on actual usage patterns)
|
|
115
|
+
const combinedExpression = expressions.join(' + ');
|
|
116
|
+
debugInfo.transformationSteps.push(`Combined expression: ${combinedExpression}`);
|
|
117
|
+
return {
|
|
118
|
+
[CEL_EXPRESSION_BRAND]: true,
|
|
119
|
+
expression: combinedExpression,
|
|
120
|
+
_type: 'string' // Default to string for combined expressions
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Generate resource reference CEL for resource builders
|
|
126
|
+
*/
|
|
127
|
+
generateResourceReference(kubernetesRefs, config, debugInfo) {
|
|
128
|
+
debugInfo.transformationSteps.push('Generating resource reference');
|
|
129
|
+
if (kubernetesRefs.length === 1) {
|
|
130
|
+
const ref = kubernetesRefs[0];
|
|
131
|
+
if (!ref) {
|
|
132
|
+
throw new ConversionError('Invalid KubernetesRef array', 'undefined', 'unknown');
|
|
133
|
+
}
|
|
134
|
+
debugInfo.transformationSteps.push(`Single resource reference: ${ref.resourceId}.${ref.fieldPath}`);
|
|
135
|
+
// Resource references in resource builders are typically schema references
|
|
136
|
+
if (ref.resourceId === '__schema__') {
|
|
137
|
+
const expression = `schema.${ref.fieldPath}`;
|
|
138
|
+
debugInfo.transformationSteps.push(`Schema reference: ${expression}`);
|
|
139
|
+
return {
|
|
140
|
+
[CEL_EXPRESSION_BRAND]: true,
|
|
141
|
+
expression,
|
|
142
|
+
_type: ref._type
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
// Cross-resource references in resource builders
|
|
147
|
+
const expression = config.factoryType === 'kro'
|
|
148
|
+
? `resources.${ref.resourceId}.${ref.fieldPath}`
|
|
149
|
+
: `resources.${ref.resourceId}.${ref.fieldPath}`;
|
|
150
|
+
debugInfo.transformationSteps.push(`Cross-resource reference: ${expression}`);
|
|
151
|
+
return {
|
|
152
|
+
[CEL_EXPRESSION_BRAND]: true,
|
|
153
|
+
expression,
|
|
154
|
+
_type: ref._type
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
// Multiple resource references - combine appropriately
|
|
160
|
+
debugInfo.transformationSteps.push(`Multiple resource references: ${kubernetesRefs.length}`);
|
|
161
|
+
const expressions = kubernetesRefs.map(ref => {
|
|
162
|
+
if (ref.resourceId === '__schema__') {
|
|
163
|
+
return `schema.${ref.fieldPath}`;
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
return `resources.${ref.resourceId}.${ref.fieldPath}`;
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
// For resource builders, multiple references are typically concatenated or used in templates
|
|
170
|
+
const combinedExpression = expressions.length > 1
|
|
171
|
+
? `'${expressions.join(' + ')}'` // Template-like combination
|
|
172
|
+
: expressions[0];
|
|
173
|
+
debugInfo.transformationSteps.push(`Combined resource reference: ${combinedExpression}`);
|
|
174
|
+
return {
|
|
175
|
+
[CEL_EXPRESSION_BRAND]: true,
|
|
176
|
+
expression: combinedExpression,
|
|
177
|
+
_type: 'string'
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Generate conditional check CEL for conditional expressions
|
|
183
|
+
*/
|
|
184
|
+
generateConditionalCheck(kubernetesRefs, _config, debugInfo) {
|
|
185
|
+
debugInfo.transformationSteps.push('Generating conditional check');
|
|
186
|
+
if (kubernetesRefs.length === 1) {
|
|
187
|
+
const ref = kubernetesRefs[0];
|
|
188
|
+
if (!ref) {
|
|
189
|
+
throw new ConversionError('Invalid KubernetesRef array', 'undefined', 'unknown');
|
|
190
|
+
}
|
|
191
|
+
debugInfo.transformationSteps.push(`Single conditional reference: ${ref.resourceId}.${ref.fieldPath}`);
|
|
192
|
+
// Conditional checks typically evaluate to boolean
|
|
193
|
+
const baseExpression = ref.resourceId === '__schema__'
|
|
194
|
+
? `schema.${ref.fieldPath}`
|
|
195
|
+
: `resources.${ref.resourceId}.${ref.fieldPath}`;
|
|
196
|
+
// Add appropriate boolean conversion based on field type
|
|
197
|
+
let expression;
|
|
198
|
+
if (ref._type === 'boolean') {
|
|
199
|
+
expression = baseExpression;
|
|
200
|
+
}
|
|
201
|
+
else if (ref._type === 'number') {
|
|
202
|
+
expression = `${baseExpression} > 0`;
|
|
203
|
+
}
|
|
204
|
+
else if (ref._type === 'string') {
|
|
205
|
+
expression = `${baseExpression} != ""`;
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
// Default to existence check
|
|
209
|
+
expression = `has(${baseExpression})`;
|
|
210
|
+
}
|
|
211
|
+
debugInfo.transformationSteps.push(`Conditional expression: ${expression}`);
|
|
212
|
+
return {
|
|
213
|
+
[CEL_EXPRESSION_BRAND]: true,
|
|
214
|
+
expression,
|
|
215
|
+
_type: 'boolean'
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
// Multiple references in conditional - combine with AND logic by default
|
|
220
|
+
debugInfo.transformationSteps.push(`Multiple conditional references: ${kubernetesRefs.length}`);
|
|
221
|
+
const conditions = kubernetesRefs.map(ref => {
|
|
222
|
+
const baseExpression = ref.resourceId === '__schema__'
|
|
223
|
+
? `schema.${ref.fieldPath}`
|
|
224
|
+
: `resources.${ref.resourceId}.${ref.fieldPath}`;
|
|
225
|
+
// Convert to boolean condition
|
|
226
|
+
if (ref._type === 'boolean') {
|
|
227
|
+
return baseExpression;
|
|
228
|
+
}
|
|
229
|
+
else if (ref._type === 'number') {
|
|
230
|
+
return `${baseExpression} > 0`;
|
|
231
|
+
}
|
|
232
|
+
else if (ref._type === 'string') {
|
|
233
|
+
return `${baseExpression} != ""`;
|
|
234
|
+
}
|
|
235
|
+
else {
|
|
236
|
+
return `has(${baseExpression})`;
|
|
237
|
+
}
|
|
238
|
+
});
|
|
239
|
+
const combinedExpression = conditions.join(' && ');
|
|
240
|
+
debugInfo.transformationSteps.push(`Combined conditional: ${combinedExpression}`);
|
|
241
|
+
return {
|
|
242
|
+
[CEL_EXPRESSION_BRAND]: true,
|
|
243
|
+
expression: combinedExpression,
|
|
244
|
+
_type: 'boolean'
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Generate readiness check CEL for readiness expressions
|
|
250
|
+
*/
|
|
251
|
+
generateReadinessCheck(kubernetesRefs, _config, debugInfo) {
|
|
252
|
+
debugInfo.transformationSteps.push('Generating readiness check');
|
|
253
|
+
// Readiness checks are similar to conditional checks but with readiness-specific logic
|
|
254
|
+
if (kubernetesRefs.length === 1) {
|
|
255
|
+
const ref = kubernetesRefs[0];
|
|
256
|
+
if (!ref) {
|
|
257
|
+
throw new ConversionError('Invalid KubernetesRef array', 'undefined', 'unknown');
|
|
258
|
+
}
|
|
259
|
+
debugInfo.transformationSteps.push(`Single readiness reference: ${ref.resourceId}.${ref.fieldPath}`);
|
|
260
|
+
const baseExpression = ref.resourceId === '__schema__'
|
|
261
|
+
? `schema.${ref.fieldPath}`
|
|
262
|
+
: `resources.${ref.resourceId}.${ref.fieldPath}`;
|
|
263
|
+
// Readiness-specific checks
|
|
264
|
+
let expression;
|
|
265
|
+
if (ref.fieldPath.includes('readyReplicas')) {
|
|
266
|
+
expression = `${baseExpression} > 0`;
|
|
267
|
+
}
|
|
268
|
+
else if (ref.fieldPath.includes('ready')) {
|
|
269
|
+
expression = baseExpression; // Assume it's already boolean
|
|
270
|
+
}
|
|
271
|
+
else if (ref.fieldPath.includes('status')) {
|
|
272
|
+
expression = `${baseExpression} == "Ready"`;
|
|
273
|
+
}
|
|
274
|
+
else if (ref.fieldPath.includes('conditions')) {
|
|
275
|
+
expression = `${baseExpression}.find(c, c.type == "Ready").status == "True"`;
|
|
276
|
+
}
|
|
277
|
+
else {
|
|
278
|
+
// Default readiness check
|
|
279
|
+
expression = `has(${baseExpression}) && ${baseExpression} != ""`;
|
|
280
|
+
}
|
|
281
|
+
debugInfo.transformationSteps.push(`Readiness expression: ${expression}`);
|
|
282
|
+
return {
|
|
283
|
+
[CEL_EXPRESSION_BRAND]: true,
|
|
284
|
+
expression,
|
|
285
|
+
_type: 'boolean'
|
|
286
|
+
};
|
|
287
|
+
}
|
|
288
|
+
else {
|
|
289
|
+
// Multiple readiness references - all must be ready
|
|
290
|
+
debugInfo.transformationSteps.push(`Multiple readiness references: ${kubernetesRefs.length}`);
|
|
291
|
+
const readinessChecks = kubernetesRefs.map(ref => {
|
|
292
|
+
const baseExpression = ref.resourceId === '__schema__'
|
|
293
|
+
? `schema.${ref.fieldPath}`
|
|
294
|
+
: `resources.${ref.resourceId}.${ref.fieldPath}`;
|
|
295
|
+
// Apply readiness-specific logic
|
|
296
|
+
if (ref.fieldPath.includes('readyReplicas')) {
|
|
297
|
+
return `${baseExpression} > 0`;
|
|
298
|
+
}
|
|
299
|
+
else if (ref.fieldPath.includes('ready')) {
|
|
300
|
+
return baseExpression;
|
|
301
|
+
}
|
|
302
|
+
else if (ref.fieldPath.includes('status')) {
|
|
303
|
+
return `${baseExpression} == "Ready"`;
|
|
304
|
+
}
|
|
305
|
+
else {
|
|
306
|
+
return `has(${baseExpression})`;
|
|
307
|
+
}
|
|
308
|
+
});
|
|
309
|
+
const combinedExpression = readinessChecks.join(' && ');
|
|
310
|
+
debugInfo.transformationSteps.push(`Combined readiness check: ${combinedExpression}`);
|
|
311
|
+
return {
|
|
312
|
+
[CEL_EXPRESSION_BRAND]: true,
|
|
313
|
+
expression: combinedExpression,
|
|
314
|
+
_type: 'boolean'
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Generate template interpolation CEL for template literals
|
|
320
|
+
*/
|
|
321
|
+
generateTemplateInterpolation(kubernetesRefs, _config, debugInfo) {
|
|
322
|
+
debugInfo.transformationSteps.push('Generating template interpolation');
|
|
323
|
+
// Template interpolations convert KubernetesRef objects to string expressions
|
|
324
|
+
const interpolations = kubernetesRefs.map(ref => {
|
|
325
|
+
const baseExpression = ref.resourceId === '__schema__'
|
|
326
|
+
? `schema.${ref.fieldPath}`
|
|
327
|
+
: `resources.${ref.resourceId}.${ref.fieldPath}`;
|
|
328
|
+
// Ensure string conversion
|
|
329
|
+
if (ref._type === 'string') {
|
|
330
|
+
return baseExpression;
|
|
331
|
+
}
|
|
332
|
+
else {
|
|
333
|
+
return `string(${baseExpression})`;
|
|
334
|
+
}
|
|
335
|
+
});
|
|
336
|
+
debugInfo.transformationSteps.push(`Template interpolations: ${interpolations.join(', ')}`);
|
|
337
|
+
// For template literals, we typically have a pattern like: `prefix${ref1}middle${ref2}suffix`
|
|
338
|
+
// For now, just concatenate the interpolations
|
|
339
|
+
const expression = interpolations.length === 1
|
|
340
|
+
? interpolations[0]
|
|
341
|
+
: interpolations.join(' + ');
|
|
342
|
+
debugInfo.transformationSteps.push(`Template expression: ${expression}`);
|
|
343
|
+
return {
|
|
344
|
+
[CEL_EXPRESSION_BRAND]: true,
|
|
345
|
+
expression,
|
|
346
|
+
_type: 'string'
|
|
347
|
+
};
|
|
348
|
+
}
|
|
349
|
+
/**
|
|
350
|
+
* Generate direct evaluation CEL (pass-through for direct factory)
|
|
351
|
+
*/
|
|
352
|
+
generateDirectEvaluation(kubernetesRefs, _config, debugInfo) {
|
|
353
|
+
debugInfo.transformationSteps.push('Generating direct evaluation');
|
|
354
|
+
// For direct evaluation, we generate CEL expressions that will be resolved at deployment time
|
|
355
|
+
if (kubernetesRefs.length === 1) {
|
|
356
|
+
const ref = kubernetesRefs[0];
|
|
357
|
+
if (!ref) {
|
|
358
|
+
throw new ConversionError('Invalid KubernetesRef array', 'undefined', 'unknown');
|
|
359
|
+
}
|
|
360
|
+
const expression = ref.resourceId === '__schema__'
|
|
361
|
+
? `schema.${ref.fieldPath}`
|
|
362
|
+
: `resources.${ref.resourceId}.${ref.fieldPath}`;
|
|
363
|
+
debugInfo.transformationSteps.push(`Direct evaluation: ${expression}`);
|
|
364
|
+
return {
|
|
365
|
+
[CEL_EXPRESSION_BRAND]: true,
|
|
366
|
+
expression,
|
|
367
|
+
_type: ref._type
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
else {
|
|
371
|
+
// Multiple references - create a structure that preserves all references
|
|
372
|
+
const expressions = kubernetesRefs.map(ref => ref.resourceId === '__schema__'
|
|
373
|
+
? `schema.${ref.fieldPath}`
|
|
374
|
+
: `resources.${ref.resourceId}.${ref.fieldPath}`);
|
|
375
|
+
const combinedExpression = `[${expressions.join(', ')}]`;
|
|
376
|
+
debugInfo.transformationSteps.push(`Direct evaluation array: ${combinedExpression}`);
|
|
377
|
+
return {
|
|
378
|
+
[CEL_EXPRESSION_BRAND]: true,
|
|
379
|
+
expression: combinedExpression,
|
|
380
|
+
_type: 'array'
|
|
381
|
+
};
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
/**
|
|
385
|
+
* Generate Kro-specific status reference
|
|
386
|
+
*/
|
|
387
|
+
generateKroStatusReference(ref) {
|
|
388
|
+
if (ref.resourceId === '__schema__') {
|
|
389
|
+
return `schema.${ref.fieldPath}`;
|
|
390
|
+
}
|
|
391
|
+
else {
|
|
392
|
+
return `resources.${ref.resourceId}.${ref.fieldPath}`;
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
/**
|
|
396
|
+
* Generate direct factory status reference
|
|
397
|
+
*/
|
|
398
|
+
generateDirectStatusReference(ref) {
|
|
399
|
+
// For direct factory, the references will be resolved before CEL evaluation
|
|
400
|
+
if (ref.resourceId === '__schema__') {
|
|
401
|
+
return `schema.${ref.fieldPath}`;
|
|
402
|
+
}
|
|
403
|
+
else {
|
|
404
|
+
return `resources.${ref.resourceId}.${ref.fieldPath}`;
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
/**
|
|
409
|
+
* Context-specific CEL generation utilities
|
|
410
|
+
*/
|
|
411
|
+
export class CelGenerationUtils {
|
|
412
|
+
/**
|
|
413
|
+
* Determine the best CEL generation strategy for a given context
|
|
414
|
+
*/
|
|
415
|
+
static determineBestStrategy(context, _kubernetesRefs, factoryType) {
|
|
416
|
+
// Context-based strategy selection
|
|
417
|
+
switch (context) {
|
|
418
|
+
case 'status-builder':
|
|
419
|
+
return 'status-expression';
|
|
420
|
+
case 'resource-builder':
|
|
421
|
+
return 'resource-reference';
|
|
422
|
+
case 'conditional':
|
|
423
|
+
return 'conditional-check';
|
|
424
|
+
case 'readiness':
|
|
425
|
+
return 'readiness-check';
|
|
426
|
+
case 'template-literal':
|
|
427
|
+
return 'template-interpolation';
|
|
428
|
+
case 'field-hydration':
|
|
429
|
+
return factoryType === 'direct' ? 'direct-evaluation' : 'status-expression';
|
|
430
|
+
default:
|
|
431
|
+
return 'direct-evaluation';
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
/**
|
|
435
|
+
* Validate that KubernetesRef objects are appropriate for the given context
|
|
436
|
+
*/
|
|
437
|
+
static validateRefsForContext(kubernetesRefs, context, availableResources) {
|
|
438
|
+
const errors = [];
|
|
439
|
+
for (const ref of kubernetesRefs) {
|
|
440
|
+
// Validate resource exists
|
|
441
|
+
if (ref.resourceId !== '__schema__' && availableResources) {
|
|
442
|
+
if (!availableResources[ref.resourceId]) {
|
|
443
|
+
errors.push(`Resource '${ref.resourceId}' is not available in this context`);
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
// Context-specific validations
|
|
447
|
+
switch (context) {
|
|
448
|
+
case 'conditional':
|
|
449
|
+
case 'readiness':
|
|
450
|
+
// These contexts should typically reference status fields
|
|
451
|
+
if (!ref.fieldPath.includes('status') && !ref.fieldPath.includes('ready')) {
|
|
452
|
+
errors.push(`Conditional/readiness context should reference status fields, got: ${ref.fieldPath}`);
|
|
453
|
+
}
|
|
454
|
+
break;
|
|
455
|
+
case 'resource-builder':
|
|
456
|
+
// Resource builders typically reference spec fields or schema
|
|
457
|
+
if (ref.resourceId !== '__schema__' && !ref.fieldPath.includes('spec')) {
|
|
458
|
+
errors.push(`Resource builder context should reference spec fields or schema, got: ${ref.resourceId}.${ref.fieldPath}`);
|
|
459
|
+
}
|
|
460
|
+
break;
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
return {
|
|
464
|
+
valid: errors.length === 0,
|
|
465
|
+
errors
|
|
466
|
+
};
|
|
467
|
+
}
|
|
468
|
+
/**
|
|
469
|
+
* Optimize CEL expression for performance
|
|
470
|
+
*/
|
|
471
|
+
static optimizeCelExpression(celExpression, context) {
|
|
472
|
+
let optimizedExpression = celExpression.expression;
|
|
473
|
+
// Context-specific optimizations
|
|
474
|
+
switch (context) {
|
|
475
|
+
case 'conditional':
|
|
476
|
+
case 'readiness':
|
|
477
|
+
// Optimize boolean expressions
|
|
478
|
+
optimizedExpression = optimizedExpression
|
|
479
|
+
.replace(/\s*==\s*true/g, '') // Remove redundant == true
|
|
480
|
+
.replace(/\s*!=\s*false/g, '') // Remove redundant != false
|
|
481
|
+
.replace(/has\(([^)]+)\)\s*&&\s*\1\s*!=\s*""/g, 'has($1)'); // Simplify existence checks
|
|
482
|
+
break;
|
|
483
|
+
case 'template-literal':
|
|
484
|
+
// Optimize string concatenations
|
|
485
|
+
optimizedExpression = optimizedExpression
|
|
486
|
+
.replace(/\s*\+\s*""\s*\+\s*/g, ' + ') // Remove empty string concatenations
|
|
487
|
+
.replace(/string\(([^)]+)\)\s*\+\s*string\(([^)]+)\)/g, 'string($1) + string($2)'); // Combine string conversions
|
|
488
|
+
break;
|
|
489
|
+
}
|
|
490
|
+
return {
|
|
491
|
+
...celExpression,
|
|
492
|
+
expression: optimizedExpression
|
|
493
|
+
};
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
/**
|
|
497
|
+
* Default context-aware CEL generator instance
|
|
498
|
+
*/
|
|
499
|
+
export const contextAwareCelGenerator = new ContextAwareCelGenerator();
|
|
500
|
+
//# sourceMappingURL=context-aware-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-aware-generator.js","sourceRoot":"","sources":["../../../src/core/expressions/context-aware-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context Detection for JavaScript to CEL Expression Conversion
|
|
3
|
+
*
|
|
4
|
+
* This module provides functionality to detect the context in which JavaScript expressions
|
|
5
|
+
* containing KubernetesRef objects are being used, enabling context-appropriate CEL generation.
|
|
6
|
+
*/
|
|
7
|
+
import type { KubernetesRef } from '../types/common.js';
|
|
8
|
+
import type { Enhanced } from '../types/kubernetes.js';
|
|
9
|
+
import type { SchemaProxy } from '../types/serialization.js';
|
|
10
|
+
/**
|
|
11
|
+
* Different contexts where expressions can be used
|
|
12
|
+
*/
|
|
13
|
+
export type ExpressionContext = 'status-builder' | 'resource-builder' | 'conditional' | 'readiness' | 'field-hydration' | 'template-literal' | 'unknown';
|
|
14
|
+
/**
|
|
15
|
+
* Context detection result
|
|
16
|
+
*/
|
|
17
|
+
export interface ContextDetectionResult {
|
|
18
|
+
/** Detected context type */
|
|
19
|
+
context: ExpressionContext;
|
|
20
|
+
/** Confidence level (0-1) in the detection */
|
|
21
|
+
confidence: number;
|
|
22
|
+
/** Reasons for the context detection */
|
|
23
|
+
reasons: string[];
|
|
24
|
+
/** Whether KubernetesRef objects were found in the expression */
|
|
25
|
+
hasKubernetesRefs: boolean;
|
|
26
|
+
/** Detected KubernetesRef objects */
|
|
27
|
+
kubernetesRefs: KubernetesRef<any>[];
|
|
28
|
+
/** Suggested CEL generation strategy */
|
|
29
|
+
celStrategy: CelGenerationStrategy;
|
|
30
|
+
/** Context-specific metadata */
|
|
31
|
+
metadata: ContextMetadata;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* CEL generation strategy based on context
|
|
35
|
+
*/
|
|
36
|
+
export type CelGenerationStrategy = 'status-expression' | 'resource-reference' | 'conditional-check' | 'readiness-check' | 'template-interpolation' | 'direct-evaluation';
|
|
37
|
+
/**
|
|
38
|
+
* Context-specific metadata
|
|
39
|
+
*/
|
|
40
|
+
export interface ContextMetadata {
|
|
41
|
+
/** Available resources in this context */
|
|
42
|
+
availableResources?: string[];
|
|
43
|
+
/** Schema fields available in this context */
|
|
44
|
+
availableSchemaFields?: string[];
|
|
45
|
+
/** Expected return type for this context */
|
|
46
|
+
expectedReturnType?: string;
|
|
47
|
+
/** Whether this context supports async operations */
|
|
48
|
+
supportsAsync?: boolean;
|
|
49
|
+
/** Factory type being used */
|
|
50
|
+
factoryType?: 'direct' | 'kro';
|
|
51
|
+
/** Additional context-specific properties */
|
|
52
|
+
[key: string]: any;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Context detection configuration
|
|
56
|
+
*/
|
|
57
|
+
export interface ContextDetectionConfig {
|
|
58
|
+
/** Available resources for context analysis */
|
|
59
|
+
availableResources?: Record<string, Enhanced<any, any>>;
|
|
60
|
+
/** Schema proxy for schema field analysis */
|
|
61
|
+
schemaProxy?: SchemaProxy<any, any>;
|
|
62
|
+
/** Factory type being used */
|
|
63
|
+
factoryType?: 'direct' | 'kro';
|
|
64
|
+
/** Function name or identifier that provides context hints */
|
|
65
|
+
functionContext?: string;
|
|
66
|
+
/** Call stack information for context detection */
|
|
67
|
+
callStack?: string[];
|
|
68
|
+
/** Whether to perform deep analysis */
|
|
69
|
+
deepAnalysis?: boolean;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Context detector for JavaScript expressions containing KubernetesRef objects
|
|
73
|
+
*/
|
|
74
|
+
export declare class ExpressionContextDetector {
|
|
75
|
+
/**
|
|
76
|
+
* Detect the context of a JavaScript expression
|
|
77
|
+
*/
|
|
78
|
+
detectContext(expression: any, config?: ContextDetectionConfig): ContextDetectionResult;
|
|
79
|
+
/**
|
|
80
|
+
* Detect context from function call patterns
|
|
81
|
+
*/
|
|
82
|
+
detectContextFromFunction(functionName: string, args: any[], config?: ContextDetectionConfig): ContextDetectionResult;
|
|
83
|
+
/**
|
|
84
|
+
* Extract KubernetesRef objects from an expression
|
|
85
|
+
*/
|
|
86
|
+
private extractKubernetesRefs;
|
|
87
|
+
/**
|
|
88
|
+
* Recursively extract KubernetesRef objects from complex structures
|
|
89
|
+
*/
|
|
90
|
+
private recursivelyExtractRefs;
|
|
91
|
+
/**
|
|
92
|
+
* Analyze the structure of the expression
|
|
93
|
+
*/
|
|
94
|
+
private analyzeExpressionStructure;
|
|
95
|
+
/**
|
|
96
|
+
* Analyze the content of the expression for context clues
|
|
97
|
+
*/
|
|
98
|
+
private analyzeExpressionContent;
|
|
99
|
+
/**
|
|
100
|
+
* Analyze contextual hints from configuration
|
|
101
|
+
*/
|
|
102
|
+
private analyzeContextualHints;
|
|
103
|
+
/**
|
|
104
|
+
* Combine all analyses to determine the final context
|
|
105
|
+
*/
|
|
106
|
+
private combineAnalyses;
|
|
107
|
+
/**
|
|
108
|
+
* Determine CEL generation strategy based on context
|
|
109
|
+
*/
|
|
110
|
+
private determineCelStrategy;
|
|
111
|
+
/**
|
|
112
|
+
* Build context-specific metadata
|
|
113
|
+
*/
|
|
114
|
+
private buildContextMetadata;
|
|
115
|
+
/**
|
|
116
|
+
* Detect status builder context
|
|
117
|
+
*/
|
|
118
|
+
private detectStatusBuilderContext;
|
|
119
|
+
/**
|
|
120
|
+
* Detect resource builder context
|
|
121
|
+
*/
|
|
122
|
+
private detectResourceBuilderContext;
|
|
123
|
+
/**
|
|
124
|
+
* Detect conditional context
|
|
125
|
+
*/
|
|
126
|
+
private detectConditionalContext;
|
|
127
|
+
/**
|
|
128
|
+
* Detect readiness context
|
|
129
|
+
*/
|
|
130
|
+
private detectReadinessContext;
|
|
131
|
+
/**
|
|
132
|
+
* Calculate complexity of a string expression
|
|
133
|
+
*/
|
|
134
|
+
private calculateStringComplexity;
|
|
135
|
+
/**
|
|
136
|
+
* Calculate complexity of a function
|
|
137
|
+
*/
|
|
138
|
+
private calculateFunctionComplexity;
|
|
139
|
+
/**
|
|
140
|
+
* Calculate complexity of an object
|
|
141
|
+
*/
|
|
142
|
+
private calculateObjectComplexity;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Default context detector instance
|
|
146
|
+
*/
|
|
147
|
+
export declare const contextDetector: ExpressionContextDetector;
|
|
148
|
+
//# sourceMappingURL=context-detector.d.ts.map
|