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,315 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Composition Integration for JavaScript to CEL Expression Conversion
|
|
3
|
+
*
|
|
4
|
+
* This module provides integration between the kubernetesComposition API and the
|
|
5
|
+
* JavaScript to CEL expression conversion system. It handles KubernetesRef detection
|
|
6
|
+
* and conversion within imperative composition patterns.
|
|
7
|
+
*/
|
|
8
|
+
import type { CompositionContext } from '../../factories/shared.js';
|
|
9
|
+
import type { KubernetesRef } from '../types/common.js';
|
|
10
|
+
import type { MagicAssignableShape, KroCompatibleType, SchemaProxy } from '../types/serialization.js';
|
|
11
|
+
import type { Enhanced } from '../types.js';
|
|
12
|
+
/**
|
|
13
|
+
* Analysis result for imperative composition functions
|
|
14
|
+
*/
|
|
15
|
+
export interface CompositionAnalysisResult<TStatus extends KroCompatibleType> {
|
|
16
|
+
/** The analyzed status shape with conversion metadata */
|
|
17
|
+
statusShape: MagicAssignableShape<TStatus>;
|
|
18
|
+
/** KubernetesRef objects found in the composition */
|
|
19
|
+
kubernetesRefs: KubernetesRef<unknown>[];
|
|
20
|
+
/** Resources referenced by the composition */
|
|
21
|
+
referencedResources: string[];
|
|
22
|
+
/** Whether the composition requires CEL conversion */
|
|
23
|
+
requiresCelConversion: boolean;
|
|
24
|
+
/** Conversion metadata for debugging */
|
|
25
|
+
conversionMetadata: {
|
|
26
|
+
expressionsAnalyzed: number;
|
|
27
|
+
kubernetesRefsDetected: number;
|
|
28
|
+
celExpressionsGenerated: number;
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Composition pattern types
|
|
33
|
+
*/
|
|
34
|
+
export type CompositionPattern = 'imperative' | 'declarative';
|
|
35
|
+
/**
|
|
36
|
+
* Pattern-specific analysis configuration
|
|
37
|
+
*/
|
|
38
|
+
export interface PatternAnalysisConfig {
|
|
39
|
+
pattern: CompositionPattern;
|
|
40
|
+
allowSideEffects: boolean;
|
|
41
|
+
trackResourceCreation: boolean;
|
|
42
|
+
validateScope: boolean;
|
|
43
|
+
convertTocel: boolean;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Composition-aware expression analyzer that integrates with kubernetesComposition
|
|
47
|
+
*/
|
|
48
|
+
export declare class CompositionExpressionAnalyzer {
|
|
49
|
+
private magicAssignableAnalyzer;
|
|
50
|
+
private celEngine;
|
|
51
|
+
private patternConfigs;
|
|
52
|
+
private contextTracker;
|
|
53
|
+
private scopeManager;
|
|
54
|
+
constructor();
|
|
55
|
+
/**
|
|
56
|
+
* Detect the composition pattern being used
|
|
57
|
+
*/
|
|
58
|
+
detectCompositionPattern(compositionFn: Function, context?: CompositionContext): CompositionPattern;
|
|
59
|
+
/**
|
|
60
|
+
* Analyze composition function with pattern awareness
|
|
61
|
+
*/
|
|
62
|
+
analyzeCompositionFunctionWithPattern<TSpec extends KroCompatibleType, TStatus extends KroCompatibleType>(compositionFn: (spec: TSpec) => MagicAssignableShape<TStatus>, schemaProxy: SchemaProxy<TSpec, TStatus>, pattern?: CompositionPattern, context?: CompositionContext): CompositionAnalysisResult<TStatus> & {
|
|
63
|
+
pattern: CompositionPattern;
|
|
64
|
+
patternSpecificMetadata: {
|
|
65
|
+
sideEffectsDetected: boolean;
|
|
66
|
+
resourceCreationTracked: boolean;
|
|
67
|
+
scopeValidationPerformed: boolean;
|
|
68
|
+
};
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* Process composition based on detected pattern
|
|
72
|
+
*/
|
|
73
|
+
processCompositionByPattern<TStatus extends KroCompatibleType>(statusShape: MagicAssignableShape<TStatus>, pattern: CompositionPattern, factoryType?: 'direct' | 'kro'): MagicAssignableShape<TStatus>;
|
|
74
|
+
/**
|
|
75
|
+
* Validate composition pattern compatibility
|
|
76
|
+
*/
|
|
77
|
+
validatePatternCompatibility(pattern: CompositionPattern, factoryType: 'direct' | 'kro', context?: CompositionContext): {
|
|
78
|
+
isCompatible: boolean;
|
|
79
|
+
warnings: string[];
|
|
80
|
+
recommendations: string[];
|
|
81
|
+
};
|
|
82
|
+
/**
|
|
83
|
+
* Get pattern-specific analysis recommendations
|
|
84
|
+
*/
|
|
85
|
+
getPatternRecommendations(pattern: CompositionPattern, analysisResult: CompositionAnalysisResult<any>): string[];
|
|
86
|
+
/**
|
|
87
|
+
* Analyze a composition function for KubernetesRef usage and expression conversion needs
|
|
88
|
+
*/
|
|
89
|
+
analyzeCompositionFunction<TSpec extends KroCompatibleType, TStatus extends KroCompatibleType>(compositionFn: (spec: TSpec) => MagicAssignableShape<TStatus>, schemaProxy: SchemaProxy<TSpec, TStatus>, context?: CompositionContext): CompositionAnalysisResult<TStatus>;
|
|
90
|
+
/**
|
|
91
|
+
* Analyze a composition function's resource creation patterns
|
|
92
|
+
*/
|
|
93
|
+
analyzeResourceCreation<TSpec extends KroCompatibleType>(compositionFn: (spec: TSpec) => unknown, schemaProxy: SchemaProxy<TSpec, any>, context?: CompositionContext): {
|
|
94
|
+
resourcesCreated: string[];
|
|
95
|
+
kubernetesRefsInResources: KubernetesRef<unknown>[];
|
|
96
|
+
requiresCelConversion: boolean;
|
|
97
|
+
};
|
|
98
|
+
/**
|
|
99
|
+
* Process a composition's status shape for CEL conversion
|
|
100
|
+
*/
|
|
101
|
+
processCompositionStatus<TStatus extends KroCompatibleType>(statusShape: MagicAssignableShape<TStatus>, factoryType?: 'direct' | 'kro'): MagicAssignableShape<TStatus>;
|
|
102
|
+
/**
|
|
103
|
+
* Enhanced status building with comprehensive KubernetesRef handling
|
|
104
|
+
*/
|
|
105
|
+
buildCompositionStatus<TStatus extends KroCompatibleType>(statusShape: MagicAssignableShape<TStatus>, context: CompositionContext, factoryType?: 'direct' | 'kro'): {
|
|
106
|
+
processedStatus: MagicAssignableShape<TStatus>;
|
|
107
|
+
kubernetesRefs: KubernetesRef<unknown>[];
|
|
108
|
+
dependencies: string[];
|
|
109
|
+
requiresCelConversion: boolean;
|
|
110
|
+
conversionMetadata: {
|
|
111
|
+
fieldsProcessed: number;
|
|
112
|
+
kubernetesRefsFound: number;
|
|
113
|
+
celExpressionsGenerated: number;
|
|
114
|
+
crossResourceReferences: number;
|
|
115
|
+
};
|
|
116
|
+
};
|
|
117
|
+
/**
|
|
118
|
+
* Validate status shape for composition compatibility
|
|
119
|
+
*/
|
|
120
|
+
validateStatusShape<TStatus extends KroCompatibleType>(statusShape: MagicAssignableShape<TStatus>, context?: CompositionContext): {
|
|
121
|
+
isValid: boolean;
|
|
122
|
+
errors: string[];
|
|
123
|
+
warnings: string[];
|
|
124
|
+
};
|
|
125
|
+
/**
|
|
126
|
+
* Extract referenced resources from composition context
|
|
127
|
+
*/
|
|
128
|
+
private extractReferencedResources;
|
|
129
|
+
/**
|
|
130
|
+
* Extract KubernetesRef objects from a resource
|
|
131
|
+
*/
|
|
132
|
+
extractKubernetesRefsFromResource(resource: Enhanced<unknown, unknown>): KubernetesRef<unknown>[];
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Context-aware resource tracking for composition integration
|
|
136
|
+
*/
|
|
137
|
+
export declare class CompositionContextTracker {
|
|
138
|
+
private contextAnalysisCache;
|
|
139
|
+
resourceKubernetesRefCache: Map<string, KubernetesRef<unknown>[]>;
|
|
140
|
+
/**
|
|
141
|
+
* Track KubernetesRef usage in a composition context
|
|
142
|
+
*/
|
|
143
|
+
trackCompositionContext(context: CompositionContext): {
|
|
144
|
+
totalKubernetesRefs: number;
|
|
145
|
+
resourcesWithKubernetesRefs: string[];
|
|
146
|
+
crossResourceReferences: Array<{
|
|
147
|
+
sourceResource: string;
|
|
148
|
+
targetResource: string;
|
|
149
|
+
fieldPath: string;
|
|
150
|
+
}>;
|
|
151
|
+
};
|
|
152
|
+
/**
|
|
153
|
+
* Get cached KubernetesRef objects for a resource
|
|
154
|
+
*/
|
|
155
|
+
getCachedResourceKubernetesRefs(resourceId: string): KubernetesRef<unknown>[];
|
|
156
|
+
/**
|
|
157
|
+
* Clear caches for a specific context
|
|
158
|
+
*/
|
|
159
|
+
clearContextCache(contextId: string): void;
|
|
160
|
+
/**
|
|
161
|
+
* Extract KubernetesRef objects from a resource
|
|
162
|
+
*/
|
|
163
|
+
extractKubernetesRefsFromResource(resource: Enhanced<unknown, unknown>): KubernetesRef<unknown>[];
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Nested composition scope information
|
|
167
|
+
*/
|
|
168
|
+
export interface NestedCompositionScope {
|
|
169
|
+
contextId: string;
|
|
170
|
+
resourceIds: Set<string>;
|
|
171
|
+
schemaProxy?: SchemaProxy<any, any> | undefined;
|
|
172
|
+
parentScope?: NestedCompositionScope | undefined;
|
|
173
|
+
childScopes: NestedCompositionScope[];
|
|
174
|
+
depth: number;
|
|
175
|
+
mergedResourceIds?: string[] | undefined;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Magic proxy scoping manager for composition contexts with nested composition support
|
|
179
|
+
*/
|
|
180
|
+
export declare class MagicProxyScopeManager {
|
|
181
|
+
private scopeStack;
|
|
182
|
+
private scopeRegistry;
|
|
183
|
+
/**
|
|
184
|
+
* Enter a new composition scope
|
|
185
|
+
*/
|
|
186
|
+
enterScope(contextId: string, schemaProxy?: SchemaProxy<any, any>): void;
|
|
187
|
+
/**
|
|
188
|
+
* Exit the current composition scope
|
|
189
|
+
*/
|
|
190
|
+
exitScope(): void;
|
|
191
|
+
/**
|
|
192
|
+
* Register a resource in the current scope
|
|
193
|
+
*/
|
|
194
|
+
registerResource(resourceId: string): void;
|
|
195
|
+
/**
|
|
196
|
+
* Register merged resources from a nested composition
|
|
197
|
+
*/
|
|
198
|
+
registerMergedResources(contextId: string, mergedResourceIds: string[]): void;
|
|
199
|
+
/**
|
|
200
|
+
* Get the current scope
|
|
201
|
+
*/
|
|
202
|
+
getCurrentScope(): NestedCompositionScope | undefined;
|
|
203
|
+
/**
|
|
204
|
+
* Get a scope by context ID
|
|
205
|
+
*/
|
|
206
|
+
getScope(contextId: string): NestedCompositionScope | undefined;
|
|
207
|
+
/**
|
|
208
|
+
* Check if a resource is accessible in the current scope (including parent scopes)
|
|
209
|
+
*/
|
|
210
|
+
isResourceAccessible(resourceId: string): boolean;
|
|
211
|
+
/**
|
|
212
|
+
* Check if a resource is in the current scope only
|
|
213
|
+
*/
|
|
214
|
+
isResourceInCurrentScope(resourceId: string): boolean;
|
|
215
|
+
/**
|
|
216
|
+
* Get all accessible resources (current scope + parent scopes)
|
|
217
|
+
*/
|
|
218
|
+
getAccessibleResources(): string[];
|
|
219
|
+
/**
|
|
220
|
+
* Get resources in the current scope only
|
|
221
|
+
*/
|
|
222
|
+
getCurrentScopeResources(): string[];
|
|
223
|
+
/**
|
|
224
|
+
* Get the scope hierarchy as a string for debugging
|
|
225
|
+
*/
|
|
226
|
+
getScopeHierarchy(): string;
|
|
227
|
+
/**
|
|
228
|
+
* Validate KubernetesRef scope with nested composition support
|
|
229
|
+
*/
|
|
230
|
+
validateKubernetesRefScope(kubernetesRef: KubernetesRef<unknown>): {
|
|
231
|
+
isValid: boolean;
|
|
232
|
+
error?: string;
|
|
233
|
+
scopeInfo?: {
|
|
234
|
+
foundInScope: string;
|
|
235
|
+
scopeDepth: number;
|
|
236
|
+
};
|
|
237
|
+
};
|
|
238
|
+
/**
|
|
239
|
+
* Get nested composition statistics
|
|
240
|
+
*/
|
|
241
|
+
getNestedCompositionStats(): {
|
|
242
|
+
totalScopes: number;
|
|
243
|
+
maxDepth: number;
|
|
244
|
+
currentDepth: number;
|
|
245
|
+
totalResources: number;
|
|
246
|
+
resourcesByScope: Record<string, number>;
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Integration hooks for kubernetesComposition API
|
|
251
|
+
*/
|
|
252
|
+
export declare class CompositionIntegrationHooks {
|
|
253
|
+
private analyzer;
|
|
254
|
+
private contextTracker;
|
|
255
|
+
private scopeManager;
|
|
256
|
+
constructor();
|
|
257
|
+
/**
|
|
258
|
+
* Hook called before composition execution to set up expression analysis
|
|
259
|
+
*/
|
|
260
|
+
beforeCompositionExecution<TSpec extends KroCompatibleType, TStatus extends KroCompatibleType>(compositionFn: (spec: TSpec) => MagicAssignableShape<TStatus>, schemaProxy: SchemaProxy<TSpec, TStatus>, contextId: string): void;
|
|
261
|
+
/**
|
|
262
|
+
* Hook called after composition execution to process results
|
|
263
|
+
*/
|
|
264
|
+
afterCompositionExecution<TStatus extends KroCompatibleType>(statusShape: MagicAssignableShape<TStatus>, factoryType?: 'direct' | 'kro', context?: CompositionContext): MagicAssignableShape<TStatus>;
|
|
265
|
+
/**
|
|
266
|
+
* Hook called during resource creation to analyze KubernetesRef usage
|
|
267
|
+
*/
|
|
268
|
+
onResourceCreation(resourceId: string, resource: Enhanced<unknown, unknown>, _context?: CompositionContext): void;
|
|
269
|
+
/**
|
|
270
|
+
* Get the current magic proxy scope manager
|
|
271
|
+
*/
|
|
272
|
+
getScopeManager(): MagicProxyScopeManager;
|
|
273
|
+
/**
|
|
274
|
+
* Get the context tracker
|
|
275
|
+
*/
|
|
276
|
+
getContextTracker(): CompositionContextTracker;
|
|
277
|
+
/**
|
|
278
|
+
* Handle auto-registration of resources with KubernetesRef tracking
|
|
279
|
+
*/
|
|
280
|
+
handleAutoRegistration(resourceId: string, resource: Enhanced<unknown, unknown>, context: CompositionContext): void;
|
|
281
|
+
/**
|
|
282
|
+
* Handle side-effect based resource creation with magic proxy integration
|
|
283
|
+
*/
|
|
284
|
+
handleSideEffectCreation<T extends Enhanced<unknown, unknown>>(resourceFactory: () => T, resourceId?: string, context?: CompositionContext): T;
|
|
285
|
+
/**
|
|
286
|
+
* Track magic proxy usage during composition execution
|
|
287
|
+
*/
|
|
288
|
+
trackMagicProxyUsage(proxyAccess: {
|
|
289
|
+
resourceId: string;
|
|
290
|
+
fieldPath: string;
|
|
291
|
+
accessType: 'read' | 'write';
|
|
292
|
+
value?: unknown;
|
|
293
|
+
}): void;
|
|
294
|
+
/**
|
|
295
|
+
* Ensure compatibility with existing factory functions
|
|
296
|
+
*/
|
|
297
|
+
ensureFactoryCompatibility<T extends Enhanced<unknown, unknown>>(factoryFn: () => T, factoryName: string): T;
|
|
298
|
+
/**
|
|
299
|
+
* Generate a resource ID from a resource object
|
|
300
|
+
*/
|
|
301
|
+
private generateResourceIdFromResource;
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Global composition integration instance
|
|
305
|
+
*/
|
|
306
|
+
export declare const compositionIntegration: CompositionIntegrationHooks;
|
|
307
|
+
/**
|
|
308
|
+
* Utility function to check if a composition function uses KubernetesRef objects
|
|
309
|
+
*/
|
|
310
|
+
export declare function compositionUsesKubernetesRefs<TSpec extends KroCompatibleType, TStatus extends KroCompatibleType>(compositionFn: (spec: TSpec) => MagicAssignableShape<TStatus>, schemaProxy: SchemaProxy<TSpec, TStatus>): boolean;
|
|
311
|
+
/**
|
|
312
|
+
* Utility function to get composition analysis metadata
|
|
313
|
+
*/
|
|
314
|
+
export declare function getCompositionAnalysis<TSpec extends KroCompatibleType, TStatus extends KroCompatibleType>(compositionFn: (spec: TSpec) => MagicAssignableShape<TStatus>, schemaProxy: SchemaProxy<TSpec, TStatus>): CompositionAnalysisResult<TStatus>;
|
|
315
|
+
//# sourceMappingURL=composition-integration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composition-integration.d.ts","sourceRoot":"","sources":["../../../src/core/expressions/composition-integration.ts"],"names":[],"mappings":"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"}
|