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,347 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Advanced caching system for JavaScript to CEL expression conversion
|
|
3
|
+
* Provides multi-level caching with performance monitoring and memory management
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Advanced multi-level cache for expression conversion results
|
|
7
|
+
*/
|
|
8
|
+
export class ExpressionCache {
|
|
9
|
+
cache = new Map();
|
|
10
|
+
astCache = new Map();
|
|
11
|
+
options;
|
|
12
|
+
cleanupTimer;
|
|
13
|
+
stats = {
|
|
14
|
+
totalRequests: 0,
|
|
15
|
+
cacheHits: 0,
|
|
16
|
+
cacheMisses: 0,
|
|
17
|
+
hitRatio: 0,
|
|
18
|
+
totalMemoryUsage: 0,
|
|
19
|
+
maxMemoryUsage: 0,
|
|
20
|
+
entryCount: 0,
|
|
21
|
+
averageRetrievalTime: 0,
|
|
22
|
+
totalRetrievalTime: 0,
|
|
23
|
+
astCacheHits: 0,
|
|
24
|
+
astCacheMisses: 0,
|
|
25
|
+
astEntryCount: 0,
|
|
26
|
+
astMemoryUsage: 0,
|
|
27
|
+
totalEvictions: 0,
|
|
28
|
+
lastCleanupTime: Date.now()
|
|
29
|
+
};
|
|
30
|
+
constructor(options = {}) {
|
|
31
|
+
this.options = {
|
|
32
|
+
maxEntries: options.maxEntries ?? 1000,
|
|
33
|
+
maxMemoryMB: options.maxMemoryMB ?? 50,
|
|
34
|
+
ttlMs: options.ttlMs ?? 5 * 60 * 1000, // 5 minutes
|
|
35
|
+
cleanupIntervalMs: options.cleanupIntervalMs ?? 0, // Disable by default to prevent hanging
|
|
36
|
+
enableASTCache: options.enableASTCache ?? true,
|
|
37
|
+
enableMetrics: options.enableMetrics ?? true
|
|
38
|
+
};
|
|
39
|
+
if (this.options.cleanupIntervalMs > 0) {
|
|
40
|
+
this.startCleanupTimer();
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Get cached conversion result
|
|
45
|
+
*/
|
|
46
|
+
get(expression, context) {
|
|
47
|
+
const startTime = this.options.enableMetrics ? performance.now() : 0;
|
|
48
|
+
try {
|
|
49
|
+
this.stats.totalRequests++;
|
|
50
|
+
const key = this.createCacheKey(expression, context);
|
|
51
|
+
const entry = this.cache.get(key);
|
|
52
|
+
if (!entry) {
|
|
53
|
+
this.stats.cacheMisses++;
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
// Check TTL
|
|
57
|
+
if (this.isExpired(entry)) {
|
|
58
|
+
this.cache.delete(key);
|
|
59
|
+
this.updateMemoryUsage();
|
|
60
|
+
this.stats.cacheMisses++;
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
// Update access metadata
|
|
64
|
+
entry.accessCount++;
|
|
65
|
+
entry.lastAccessed = Date.now();
|
|
66
|
+
this.stats.cacheHits++;
|
|
67
|
+
this.updateHitRatio();
|
|
68
|
+
return entry.result;
|
|
69
|
+
}
|
|
70
|
+
finally {
|
|
71
|
+
if (this.options.enableMetrics) {
|
|
72
|
+
const duration = performance.now() - startTime;
|
|
73
|
+
this.stats.totalRetrievalTime += duration;
|
|
74
|
+
this.stats.averageRetrievalTime = this.stats.totalRetrievalTime / this.stats.totalRequests;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Store conversion result in cache
|
|
80
|
+
*/
|
|
81
|
+
set(expression, context, result) {
|
|
82
|
+
const key = this.createCacheKey(expression, context);
|
|
83
|
+
const size = this.estimateSize(result);
|
|
84
|
+
const entry = {
|
|
85
|
+
result,
|
|
86
|
+
timestamp: Date.now(),
|
|
87
|
+
accessCount: 1,
|
|
88
|
+
lastAccessed: Date.now(),
|
|
89
|
+
size
|
|
90
|
+
};
|
|
91
|
+
// Check if we need to evict entries before adding
|
|
92
|
+
this.ensureCapacity(size);
|
|
93
|
+
this.cache.set(key, entry);
|
|
94
|
+
this.updateMemoryUsage();
|
|
95
|
+
this.stats.entryCount = this.cache.size;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Get cached AST
|
|
99
|
+
*/
|
|
100
|
+
getAST(expression) {
|
|
101
|
+
if (!this.options.enableASTCache) {
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
const entry = this.astCache.get(expression);
|
|
105
|
+
if (!entry) {
|
|
106
|
+
this.stats.astCacheMisses++;
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
// Check TTL
|
|
110
|
+
if (this.isExpired(entry)) {
|
|
111
|
+
this.astCache.delete(expression);
|
|
112
|
+
this.updateASTMemoryUsage();
|
|
113
|
+
this.stats.astCacheMisses++;
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
// Update access metadata
|
|
117
|
+
entry.accessCount++;
|
|
118
|
+
entry.lastAccessed = Date.now();
|
|
119
|
+
this.stats.astCacheHits++;
|
|
120
|
+
return entry.ast;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Store AST in cache
|
|
124
|
+
*/
|
|
125
|
+
setAST(expression, ast) {
|
|
126
|
+
if (!this.options.enableASTCache) {
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
const size = this.estimateASTSize(ast);
|
|
130
|
+
const entry = {
|
|
131
|
+
ast,
|
|
132
|
+
timestamp: Date.now(),
|
|
133
|
+
accessCount: 1,
|
|
134
|
+
lastAccessed: Date.now(),
|
|
135
|
+
size
|
|
136
|
+
};
|
|
137
|
+
this.astCache.set(expression, entry);
|
|
138
|
+
this.updateASTMemoryUsage();
|
|
139
|
+
this.stats.astEntryCount = this.astCache.size;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Clear all caches
|
|
143
|
+
*/
|
|
144
|
+
clear() {
|
|
145
|
+
this.cache.clear();
|
|
146
|
+
this.astCache.clear();
|
|
147
|
+
this.resetStats();
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Get cache statistics
|
|
151
|
+
*/
|
|
152
|
+
getStats() {
|
|
153
|
+
return { ...this.stats };
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Force cleanup of expired entries
|
|
157
|
+
*/
|
|
158
|
+
cleanup() {
|
|
159
|
+
const _startTime = Date.now();
|
|
160
|
+
let evicted = 0;
|
|
161
|
+
// Cleanup main cache
|
|
162
|
+
for (const [key, entry] of this.cache.entries()) {
|
|
163
|
+
if (this.isExpired(entry)) {
|
|
164
|
+
this.cache.delete(key);
|
|
165
|
+
evicted++;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
// Cleanup AST cache
|
|
169
|
+
for (const [key, entry] of this.astCache.entries()) {
|
|
170
|
+
if (this.isExpired(entry)) {
|
|
171
|
+
this.astCache.delete(key);
|
|
172
|
+
evicted++;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
this.updateMemoryUsage();
|
|
176
|
+
this.updateASTMemoryUsage();
|
|
177
|
+
this.stats.totalEvictions += evicted;
|
|
178
|
+
this.stats.lastCleanupTime = Date.now();
|
|
179
|
+
this.stats.entryCount = this.cache.size;
|
|
180
|
+
this.stats.astEntryCount = this.astCache.size;
|
|
181
|
+
return evicted;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Destroy cache and cleanup resources
|
|
185
|
+
*/
|
|
186
|
+
destroy() {
|
|
187
|
+
if (this.cleanupTimer) {
|
|
188
|
+
clearInterval(this.cleanupTimer);
|
|
189
|
+
this.cleanupTimer = undefined;
|
|
190
|
+
}
|
|
191
|
+
this.clear();
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Create cache key from expression and context
|
|
195
|
+
*/
|
|
196
|
+
createCacheKey(expression, context) {
|
|
197
|
+
const contextHash = this.hashContext(context);
|
|
198
|
+
return `${expression}:${contextHash}`;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Create hash of analysis context for cache key
|
|
202
|
+
*/
|
|
203
|
+
hashContext(context) {
|
|
204
|
+
// Create a deterministic hash of the context
|
|
205
|
+
const contextData = {
|
|
206
|
+
type: context.type,
|
|
207
|
+
availableReferences: Object.keys(context.availableReferences || {}).sort(),
|
|
208
|
+
factoryType: context.factoryType || 'direct'
|
|
209
|
+
};
|
|
210
|
+
return this.simpleHash(JSON.stringify(contextData));
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Simple hash function for strings
|
|
214
|
+
*/
|
|
215
|
+
simpleHash(str) {
|
|
216
|
+
let hash = 0;
|
|
217
|
+
for (let i = 0; i < str.length; i++) {
|
|
218
|
+
const char = str.charCodeAt(i);
|
|
219
|
+
hash = ((hash << 5) - hash) + char;
|
|
220
|
+
hash = hash & hash; // Convert to 32-bit integer
|
|
221
|
+
}
|
|
222
|
+
return hash.toString(36);
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Check if cache entry is expired
|
|
226
|
+
*/
|
|
227
|
+
isExpired(entry) {
|
|
228
|
+
return Date.now() - entry.timestamp > this.options.ttlMs;
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Estimate memory size of conversion result
|
|
232
|
+
*/
|
|
233
|
+
estimateSize(result) {
|
|
234
|
+
// Rough estimation of memory usage
|
|
235
|
+
let size = 0;
|
|
236
|
+
if (result.celExpression) {
|
|
237
|
+
size += result.celExpression.expression.length * 2; // UTF-16
|
|
238
|
+
}
|
|
239
|
+
size += result.dependencies.reduce((acc, dep) => acc + (dep.resourceId?.length || 0) * 2 + (dep.fieldPath?.length || 0) * 2 + 50, 0);
|
|
240
|
+
size += result.sourceMap.length * 100; // Rough estimate for source map entries
|
|
241
|
+
size += result.errors.length * 200; // Rough estimate for error objects
|
|
242
|
+
return size;
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Estimate memory size of AST
|
|
246
|
+
*/
|
|
247
|
+
estimateASTSize(ast) {
|
|
248
|
+
// Very rough estimation - could be improved with recursive traversal
|
|
249
|
+
return JSON.stringify(ast).length * 2;
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Ensure cache has capacity for new entry
|
|
253
|
+
*/
|
|
254
|
+
ensureCapacity(newEntrySize) {
|
|
255
|
+
const maxMemoryBytes = this.options.maxMemoryMB * 1024 * 1024;
|
|
256
|
+
// Check memory limit
|
|
257
|
+
while (this.stats.totalMemoryUsage + newEntrySize > maxMemoryBytes && this.cache.size > 0) {
|
|
258
|
+
this.evictLRU();
|
|
259
|
+
}
|
|
260
|
+
// Check entry count limit
|
|
261
|
+
while (this.cache.size >= this.options.maxEntries) {
|
|
262
|
+
this.evictLRU();
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Evict least recently used entry
|
|
267
|
+
*/
|
|
268
|
+
evictLRU() {
|
|
269
|
+
let oldestKey = null;
|
|
270
|
+
let oldestTime = Date.now();
|
|
271
|
+
for (const [key, entry] of this.cache.entries()) {
|
|
272
|
+
if (entry.lastAccessed < oldestTime) {
|
|
273
|
+
oldestTime = entry.lastAccessed;
|
|
274
|
+
oldestKey = key;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
if (oldestKey) {
|
|
278
|
+
this.cache.delete(oldestKey);
|
|
279
|
+
this.stats.totalEvictions++;
|
|
280
|
+
this.updateMemoryUsage();
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Update memory usage statistics
|
|
285
|
+
*/
|
|
286
|
+
updateMemoryUsage() {
|
|
287
|
+
let totalSize = 0;
|
|
288
|
+
for (const entry of this.cache.values()) {
|
|
289
|
+
totalSize += entry.size;
|
|
290
|
+
}
|
|
291
|
+
this.stats.totalMemoryUsage = totalSize;
|
|
292
|
+
this.stats.maxMemoryUsage = Math.max(this.stats.maxMemoryUsage, totalSize);
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Update AST memory usage statistics
|
|
296
|
+
*/
|
|
297
|
+
updateASTMemoryUsage() {
|
|
298
|
+
let totalSize = 0;
|
|
299
|
+
for (const entry of this.astCache.values()) {
|
|
300
|
+
totalSize += entry.size;
|
|
301
|
+
}
|
|
302
|
+
this.stats.astMemoryUsage = totalSize;
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Update hit ratio statistics
|
|
306
|
+
*/
|
|
307
|
+
updateHitRatio() {
|
|
308
|
+
this.stats.hitRatio = this.stats.totalRequests > 0
|
|
309
|
+
? this.stats.cacheHits / this.stats.totalRequests
|
|
310
|
+
: 0;
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Reset statistics
|
|
314
|
+
*/
|
|
315
|
+
resetStats() {
|
|
316
|
+
this.stats = {
|
|
317
|
+
totalRequests: 0,
|
|
318
|
+
cacheHits: 0,
|
|
319
|
+
cacheMisses: 0,
|
|
320
|
+
hitRatio: 0,
|
|
321
|
+
totalMemoryUsage: 0,
|
|
322
|
+
maxMemoryUsage: 0,
|
|
323
|
+
entryCount: 0,
|
|
324
|
+
averageRetrievalTime: 0,
|
|
325
|
+
totalRetrievalTime: 0,
|
|
326
|
+
astCacheHits: 0,
|
|
327
|
+
astCacheMisses: 0,
|
|
328
|
+
astEntryCount: 0,
|
|
329
|
+
astMemoryUsage: 0,
|
|
330
|
+
totalEvictions: 0,
|
|
331
|
+
lastCleanupTime: Date.now()
|
|
332
|
+
};
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Start automatic cleanup timer
|
|
336
|
+
*/
|
|
337
|
+
startCleanupTimer() {
|
|
338
|
+
this.cleanupTimer = setInterval(() => {
|
|
339
|
+
this.cleanup();
|
|
340
|
+
}, this.options.cleanupIntervalMs);
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* Global cache instance for expression conversion
|
|
345
|
+
*/
|
|
346
|
+
export const globalExpressionCache = new ExpressionCache();
|
|
347
|
+
//# sourceMappingURL=cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../src/core/expressions/cache.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAoEH;;GAEG;AACH,MAAM,OAAO,eAAe;IACT,KAAK,GAAG,IAAI,GAAG,EAAsB,CAAC;IACtC,QAAQ,GAAG,IAAI,GAAG,EAAyB,CAAC;IAC5C,OAAO,CAAyB;IACzC,YAAY,CAA8B;IAE1C,KAAK,GAAe;QAC1B,aAAa,EAAE,CAAC;QAChB,SAAS,EAAE,CAAC;QACZ,WAAW,EAAE,CAAC;QACd,QAAQ,EAAE,CAAC;QACX,gBAAgB,EAAE,CAAC;QACnB,cAAc,EAAE,CAAC;QACjB,UAAU,EAAE,CAAC;QACb,oBAAoB,EAAE,CAAC;QACvB,kBAAkB,EAAE,CAAC;QACrB,YAAY,EAAE,CAAC;QACf,cAAc,EAAE,CAAC;QACjB,aAAa,EAAE,CAAC;QAChB,cAAc,EAAE,CAAC;QACjB,cAAc,EAAE,CAAC;QACjB,eAAe,EAAE,IAAI,CAAC,GAAG,EAAE;KAC5B,CAAC;IAEF,YAAY,UAAwB,EAAE;QACpC,IAAI,CAAC,OAAO,GAAG;YACb,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,IAAI;YACtC,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,EAAE;YACtC,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,YAAY;YACnD,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,IAAI,CAAC,EAAE,wCAAwC;YAC3F,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,IAAI;YAC9C,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,IAAI;SAC7C,CAAC;QAEF,IAAI,IAAI,CAAC,OAAO,CAAC,iBAAiB,GAAG,CAAC,EAAE,CAAC;YACvC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,UAAkB,EAAE,OAAwB;QAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAErE,IAAI,CAAC;YACH,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;YAE3B,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACrD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAElC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;gBACzB,OAAO,IAAI,CAAC;YACd,CAAC;YAED,YAAY;YACZ,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACvB,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACzB,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;gBACzB,OAAO,IAAI,CAAC;YACd,CAAC;YAED,yBAAyB;YACzB,KAAK,CAAC,WAAW,EAAE,CAAC;YACpB,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAEhC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;YACvB,IAAI,CAAC,cAAc,EAAE,CAAC;YAEtB,OAAO,KAAK,CAAC,MAAM,CAAC;QACtB,CAAC;gBAAS,CAAC;YACT,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;gBAC/B,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;gBAC/C,IAAI,CAAC,KAAK,CAAC,kBAAkB,IAAI,QAAQ,CAAC;gBAC1C,IAAI,CAAC,KAAK,CAAC,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;YAC7F,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,UAAkB,EAAE,OAAwB,EAAE,MAA2B;QAC3E,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAEvC,MAAM,KAAK,GAAe;YACxB,MAAM;YACN,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,WAAW,EAAE,CAAC;YACd,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE;YACxB,IAAI;SACL,CAAC;QAEF,kDAAkD;QAClD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAE1B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC3B,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,UAAkB;QACvB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAE5C,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,YAAY;QACZ,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACjC,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5B,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,yBAAyB;QACzB,KAAK,CAAC,WAAW,EAAE,CAAC;QACpB,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEhC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC,GAAG,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,UAAkB,EAAE,GAAQ;QACjC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;YACjC,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAEvC,MAAM,KAAK,GAAkB;YAC3B,GAAG;YACH,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,WAAW,EAAE,CAAC;YACd,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE;YACxB,IAAI;SACL,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,OAAO;QACL,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC9B,IAAI,OAAO,GAAG,CAAC,CAAC;QAEhB,qBAAqB;QACrB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;YAChD,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACvB,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QAED,oBAAoB;QACpB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;YACnD,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC1B,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QAED,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,OAAO,CAAC;QACrC,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACxC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QACxC,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAE9C,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,OAAO;QACL,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACjC,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;QAChC,CAAC;QACD,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,UAAkB,EAAE,OAAwB;QACjE,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC9C,OAAO,GAAG,UAAU,IAAI,WAAW,EAAE,CAAC;IACxC,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,OAAwB;QAC1C,6CAA6C;QAC7C,MAAM,WAAW,GAAG;YAClB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,mBAAmB,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;YAC1E,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,QAAQ;SAC7C,CAAC;QAEF,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACK,UAAU,CAAC,GAAW;QAC5B,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAC/B,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;YACnC,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,4BAA4B;QAClD,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACK,SAAS,CAAC,KAAiC;QACjD,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;IAC3D,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,MAA2B;QAC9C,mCAAmC;QACnC,IAAI,IAAI,GAAG,CAAC,CAAC;QAEb,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YACzB,IAAI,IAAI,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,SAAS;QAC/D,CAAC;QAED,IAAI,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QACrI,IAAI,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,wCAAwC;QAC/E,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,mCAAmC;QAEvE,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,GAAQ;QAC9B,qEAAqE;QACrE,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,YAAoB;QACzC,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,IAAI,GAAG,IAAI,CAAC;QAE9D,qBAAqB;QACrB,OAAO,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,YAAY,GAAG,cAAc,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAC1F,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,CAAC;QAED,0BAA0B;QAC1B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YAClD,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,CAAC;IACH,CAAC;IAED;;OAEG;IACK,QAAQ;QACd,IAAI,SAAS,GAAkB,IAAI,CAAC;QACpC,IAAI,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE5B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;YAChD,IAAI,KAAK,CAAC,YAAY,GAAG,UAAU,EAAE,CAAC;gBACpC,UAAU,GAAG,KAAK,CAAC,YAAY,CAAC;gBAChC,SAAS,GAAG,GAAG,CAAC;YAClB,CAAC;QACH,CAAC;QAED,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC7B,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;YAC5B,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED;;OAEG;IACK,iBAAiB;QACvB,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACxC,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC;QAC1B,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,SAAS,CAAC;QACxC,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;IAC7E,CAAC;IAED;;OAEG;IACK,oBAAoB;QAC1B,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YAC3C,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC;QAC1B,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,SAAS,CAAC;IACxC,CAAC;IAED;;OAEG;IACK,cAAc;QACpB,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC;YAChD,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa;YACjD,CAAC,CAAC,CAAC,CAAC;IACR,CAAC;IAED;;OAEG;IACK,UAAU;QAChB,IAAI,CAAC,KAAK,GAAG;YACX,aAAa,EAAE,CAAC;YAChB,SAAS,EAAE,CAAC;YACZ,WAAW,EAAE,CAAC;YACd,QAAQ,EAAE,CAAC;YACX,gBAAgB,EAAE,CAAC;YACnB,cAAc,EAAE,CAAC;YACjB,UAAU,EAAE,CAAC;YACb,oBAAoB,EAAE,CAAC;YACvB,kBAAkB,EAAE,CAAC;YACrB,YAAY,EAAE,CAAC;YACf,cAAc,EAAE,CAAC;YACjB,aAAa,EAAE,CAAC;YAChB,cAAc,EAAE,CAAC;YACjB,cAAc,EAAE,CAAC;YACjB,eAAe,EAAE,IAAI,CAAC,GAAG,EAAE;SAC5B,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,iBAAiB;QACvB,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;YACnC,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,eAAe,EAAE,CAAC"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CEL Conversion Engine for Factory Integration
|
|
3
|
+
*
|
|
4
|
+
* This module provides automatic conversion of JavaScript expressions containing
|
|
5
|
+
* KubernetesRef objects to appropriate CEL expressions for different deployment
|
|
6
|
+
* strategies.
|
|
7
|
+
*/
|
|
8
|
+
import type { KubernetesRef, CelExpression } from '../types/index.js';
|
|
9
|
+
import { type MagicProxyRefInfo } from './magic-proxy-detector.js';
|
|
10
|
+
import type { FactoryExpressionContext } from './types.js';
|
|
11
|
+
/**
|
|
12
|
+
* Configuration for CEL conversion
|
|
13
|
+
*/
|
|
14
|
+
export interface CelConversionConfig {
|
|
15
|
+
/** Factory type for context-aware conversion */
|
|
16
|
+
factoryType?: 'direct' | 'kro';
|
|
17
|
+
/** Whether to enable optimization */
|
|
18
|
+
enableOptimization?: boolean;
|
|
19
|
+
/** Whether to preserve static values */
|
|
20
|
+
preserveStatic?: boolean;
|
|
21
|
+
/** Whether to include debug information */
|
|
22
|
+
includeDebugInfo?: boolean;
|
|
23
|
+
/** Maximum depth for recursive conversion */
|
|
24
|
+
maxDepth?: number;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Result of CEL conversion
|
|
28
|
+
*/
|
|
29
|
+
export interface CelConversionResult<T = any> {
|
|
30
|
+
/** Converted value */
|
|
31
|
+
converted: T;
|
|
32
|
+
/** Whether conversion was performed */
|
|
33
|
+
wasConverted: boolean;
|
|
34
|
+
/** Original value before conversion */
|
|
35
|
+
original: any;
|
|
36
|
+
/** Conversion strategy used */
|
|
37
|
+
strategy: 'direct' | 'cel-expression' | 'template-literal' | 'static';
|
|
38
|
+
/** Performance metrics */
|
|
39
|
+
metrics: {
|
|
40
|
+
conversionTimeMs: number;
|
|
41
|
+
referencesConverted: number;
|
|
42
|
+
expressionsGenerated: number;
|
|
43
|
+
};
|
|
44
|
+
/** Warnings generated during conversion */
|
|
45
|
+
warnings: string[];
|
|
46
|
+
/** Debug information if enabled */
|
|
47
|
+
debugInfo?: {
|
|
48
|
+
detectedReferences: MagicProxyRefInfo[];
|
|
49
|
+
conversionSteps: string[];
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* CEL Conversion Engine
|
|
54
|
+
*
|
|
55
|
+
* Automatically converts JavaScript expressions containing KubernetesRef objects
|
|
56
|
+
* to appropriate CEL expressions based on the factory type and usage context.
|
|
57
|
+
*/
|
|
58
|
+
export declare class CelConversionEngine {
|
|
59
|
+
private magicProxyDetector;
|
|
60
|
+
constructor();
|
|
61
|
+
/**
|
|
62
|
+
* Convert a value containing KubernetesRef objects to appropriate format
|
|
63
|
+
*
|
|
64
|
+
* @param value - Value to convert
|
|
65
|
+
* @param context - Factory context
|
|
66
|
+
* @param config - Conversion configuration
|
|
67
|
+
* @returns Conversion result
|
|
68
|
+
*/
|
|
69
|
+
convertValue<T>(value: T, context: FactoryExpressionContext, config?: CelConversionConfig): CelConversionResult<T>;
|
|
70
|
+
/**
|
|
71
|
+
* Convert a simple KubernetesRef to CEL expression
|
|
72
|
+
*
|
|
73
|
+
* @param ref - KubernetesRef to convert
|
|
74
|
+
* @param context - Factory context
|
|
75
|
+
* @returns CEL expression
|
|
76
|
+
*/
|
|
77
|
+
convertKubernetesRefToCel<T>(ref: KubernetesRef<T>, context: FactoryExpressionContext): CelExpression<T>;
|
|
78
|
+
/**
|
|
79
|
+
* Check if a value needs CEL conversion
|
|
80
|
+
*
|
|
81
|
+
* @param value - Value to check
|
|
82
|
+
* @param maxDepth - Maximum depth to check
|
|
83
|
+
* @returns Whether conversion is needed
|
|
84
|
+
*/
|
|
85
|
+
needsConversion(value: any, maxDepth?: number): boolean;
|
|
86
|
+
private performConversion;
|
|
87
|
+
/**
|
|
88
|
+
* Check if a KubernetesRef comes from an external reference
|
|
89
|
+
* External references are not registered in the current composition context
|
|
90
|
+
*/
|
|
91
|
+
private isExternalReference;
|
|
92
|
+
private generateCelFromRef;
|
|
93
|
+
private isTemplateLiteralWithRefs;
|
|
94
|
+
private convertTemplateLiteral;
|
|
95
|
+
private convertObjectWithRefs;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Global CEL conversion engine instance
|
|
99
|
+
*/
|
|
100
|
+
export declare const celConversionEngine: CelConversionEngine;
|
|
101
|
+
/**
|
|
102
|
+
* Utility function to convert a value with KubernetesRef objects
|
|
103
|
+
*
|
|
104
|
+
* @param value - Value to convert
|
|
105
|
+
* @param context - Factory context
|
|
106
|
+
* @param config - Conversion configuration
|
|
107
|
+
* @returns Conversion result
|
|
108
|
+
*/
|
|
109
|
+
export declare function convertToCel<T>(value: T, context: FactoryExpressionContext, config?: CelConversionConfig): CelConversionResult<T>;
|
|
110
|
+
/**
|
|
111
|
+
* Utility function to convert a KubernetesRef to CEL expression
|
|
112
|
+
*
|
|
113
|
+
* @param ref - KubernetesRef to convert
|
|
114
|
+
* @param context - Factory context
|
|
115
|
+
* @returns CEL expression
|
|
116
|
+
*/
|
|
117
|
+
export declare function kubernetesRefToCel<T>(ref: KubernetesRef<T>, context: FactoryExpressionContext): CelExpression<T>;
|
|
118
|
+
/**
|
|
119
|
+
* Utility function to check if a value needs CEL conversion
|
|
120
|
+
*
|
|
121
|
+
* @param value - Value to check
|
|
122
|
+
* @param maxDepth - Maximum depth to check
|
|
123
|
+
* @returns Whether conversion is needed
|
|
124
|
+
*/
|
|
125
|
+
export declare function needsCelConversion(value: any, maxDepth?: number): boolean;
|
|
126
|
+
//# sourceMappingURL=cel-conversion-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cel-conversion-engine.d.ts","sourceRoot":"","sources":["../../../src/core/expressions/cel-conversion-engine.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGtE,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAK3D;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,gDAAgD;IAChD,WAAW,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAC;IAC/B,qCAAqC;IACrC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,wCAAwC;IACxC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,2CAA2C;IAC3C,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB,CAAC,CAAC,GAAG,GAAG;IAC1C,sBAAsB;IACtB,SAAS,EAAE,CAAC,CAAC;IACb,uCAAuC;IACvC,YAAY,EAAE,OAAO,CAAC;IACtB,uCAAuC;IACvC,QAAQ,EAAE,GAAG,CAAC;IACd,+BAA+B;IAC/B,QAAQ,EAAE,QAAQ,GAAG,gBAAgB,GAAG,kBAAkB,GAAG,QAAQ,CAAC;IACtE,0BAA0B;IAC1B,OAAO,EAAE;QACP,gBAAgB,EAAE,MAAM,CAAC;QACzB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,oBAAoB,EAAE,MAAM,CAAC;KAC9B,CAAC;IACF,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,mCAAmC;IACnC,SAAS,CAAC,EAAE;QACV,kBAAkB,EAAE,iBAAiB,EAAE,CAAC;QACxC,eAAe,EAAE,MAAM,EAAE,CAAC;KAC3B,CAAC;CACH;AAED;;;;;GAKG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,kBAAkB,CAAqB;;IAM/C;;;;;;;OAOG;IACH,YAAY,CAAC,CAAC,EACZ,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,wBAAwB,EACjC,MAAM,GAAE,mBAAwB,GAC/B,mBAAmB,CAAC,CAAC,CAAC;IAgEzB;;;;;;OAMG;IACH,yBAAyB,CAAC,CAAC,EACzB,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC,EACrB,OAAO,EAAE,wBAAwB,GAChC,aAAa,CAAC,CAAC,CAAC;IAUnB;;;;;;OAMG;IACH,eAAe,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,SAAK,GAAG,OAAO;IAInD,OAAO,CAAC,iBAAiB;IA0DzB;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAoB3B,OAAO,CAAC,kBAAkB;IAc1B,OAAO,CAAC,yBAAyB;IAMjC,OAAO,CAAC,sBAAsB;IAa9B,OAAO,CAAC,qBAAqB;CAkE9B;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB,qBAA4B,CAAC;AAE7D;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAC5B,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,wBAAwB,EACjC,MAAM,CAAC,EAAE,mBAAmB,GAC3B,mBAAmB,CAAC,CAAC,CAAC,CAExB;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAClC,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC,EACrB,OAAO,EAAE,wBAAwB,GAChC,aAAa,CAAC,CAAC,CAAC,CAElB;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAEzE"}
|