@coherent.js/core 1.0.0-beta.2
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/LICENSE +21 -0
- package/README.md +130 -0
- package/dist/coherent.d.ts +472 -0
- package/dist/coherent.d.ts.map +1 -0
- package/dist/coherent.js +590 -0
- package/dist/coherent.js.map +1 -0
- package/dist/components/component-system.d.ts +1138 -0
- package/dist/components/component-system.d.ts.map +1 -0
- package/dist/components/component-system.js +2220 -0
- package/dist/components/component-system.js.map +1 -0
- package/dist/components/lifecycle.d.ts +212 -0
- package/dist/components/lifecycle.d.ts.map +1 -0
- package/dist/components/lifecycle.js +525 -0
- package/dist/components/lifecycle.js.map +1 -0
- package/dist/core/html-utils.d.ts +14 -0
- package/dist/core/html-utils.d.ts.map +1 -0
- package/dist/core/html-utils.js +166 -0
- package/dist/core/html-utils.js.map +1 -0
- package/dist/core/object-factory.d.ts +38 -0
- package/dist/core/object-factory.d.ts.map +1 -0
- package/dist/core/object-factory.js +63 -0
- package/dist/core/object-factory.js.map +1 -0
- package/dist/core/object-utils.d.ts +77 -0
- package/dist/core/object-utils.d.ts.map +1 -0
- package/dist/core/object-utils.js +502 -0
- package/dist/core/object-utils.js.map +1 -0
- package/dist/dev/dev-tools.d.ts +194 -0
- package/dist/dev/dev-tools.d.ts.map +1 -0
- package/dist/dev/dev-tools.js +846 -0
- package/dist/dev/dev-tools.js.map +1 -0
- package/dist/forms/validation.d.ts +271 -0
- package/dist/forms/validation.d.ts.map +1 -0
- package/dist/forms/validation.js +573 -0
- package/dist/forms/validation.js.map +1 -0
- package/dist/index.cjs +5281 -0
- package/dist/index.cjs.map +7 -0
- package/dist/index.js +5204 -0
- package/dist/index.js.map +7 -0
- package/dist/performance/bundle-optimizer.d.ts +95 -0
- package/dist/performance/bundle-optimizer.d.ts.map +1 -0
- package/dist/performance/bundle-optimizer.js +192 -0
- package/dist/performance/bundle-optimizer.js.map +1 -0
- package/dist/performance/cache-manager.d.ts +107 -0
- package/dist/performance/cache-manager.d.ts.map +1 -0
- package/dist/performance/cache-manager.js +314 -0
- package/dist/performance/cache-manager.js.map +1 -0
- package/dist/performance/component-cache.d.ts +120 -0
- package/dist/performance/component-cache.d.ts.map +1 -0
- package/dist/performance/component-cache.js +364 -0
- package/dist/performance/component-cache.js.map +1 -0
- package/dist/performance/monitor.d.ts +189 -0
- package/dist/performance/monitor.d.ts.map +1 -0
- package/dist/performance/monitor.js +347 -0
- package/dist/performance/monitor.js.map +1 -0
- package/dist/rendering/base-renderer.d.ts +140 -0
- package/dist/rendering/base-renderer.d.ts.map +1 -0
- package/dist/rendering/base-renderer.js +409 -0
- package/dist/rendering/base-renderer.js.map +1 -0
- package/dist/rendering/css-manager.d.ts +73 -0
- package/dist/rendering/css-manager.d.ts.map +1 -0
- package/dist/rendering/css-manager.js +176 -0
- package/dist/rendering/css-manager.js.map +1 -0
- package/dist/rendering/dom-renderer.d.ts +62 -0
- package/dist/rendering/dom-renderer.d.ts.map +1 -0
- package/dist/rendering/dom-renderer.js +252 -0
- package/dist/rendering/dom-renderer.js.map +1 -0
- package/dist/rendering/html-renderer.d.ts +67 -0
- package/dist/rendering/html-renderer.d.ts.map +1 -0
- package/dist/rendering/html-renderer.js +444 -0
- package/dist/rendering/html-renderer.js.map +1 -0
- package/dist/rendering/renderer-config.d.ts +282 -0
- package/dist/rendering/renderer-config.d.ts.map +1 -0
- package/dist/rendering/renderer-config.js +144 -0
- package/dist/rendering/renderer-config.js.map +1 -0
- package/dist/rendering/streaming-renderer.d.ts +117 -0
- package/dist/rendering/streaming-renderer.d.ts.map +1 -0
- package/dist/rendering/streaming-renderer.js +326 -0
- package/dist/rendering/streaming-renderer.js.map +1 -0
- package/dist/rendering/vdom-diff.d.ts +47 -0
- package/dist/rendering/vdom-diff.d.ts.map +1 -0
- package/dist/rendering/vdom-diff.js +416 -0
- package/dist/rendering/vdom-diff.js.map +1 -0
- package/dist/routing/router.d.ts +241 -0
- package/dist/routing/router.d.ts.map +1 -0
- package/dist/routing/router.js +648 -0
- package/dist/routing/router.js.map +1 -0
- package/dist/state/reactive-state.d.ts +166 -0
- package/dist/state/reactive-state.d.ts.map +1 -0
- package/dist/state/reactive-state.js +546 -0
- package/dist/state/reactive-state.js.map +1 -0
- package/dist/state/state-manager.d.ts +45 -0
- package/dist/state/state-manager.d.ts.map +1 -0
- package/dist/state/state-manager.js +151 -0
- package/dist/state/state-manager.js.map +1 -0
- package/dist/types/constants.d.ts +8 -0
- package/dist/types/constants.d.ts.map +1 -0
- package/dist/types/constants.js +36 -0
- package/dist/types/constants.js.map +1 -0
- package/dist/utils/dependency-utils.d.ts +43 -0
- package/dist/utils/dependency-utils.d.ts.map +1 -0
- package/dist/utils/dependency-utils.js +105 -0
- package/dist/utils/dependency-utils.js.map +1 -0
- package/dist/utils/error-handler.d.ts +148 -0
- package/dist/utils/error-handler.d.ts.map +1 -0
- package/dist/utils/error-handler.js +468 -0
- package/dist/utils/error-handler.js.map +1 -0
- package/dist/utils/normalization.d.ts +3 -0
- package/dist/utils/normalization.d.ts.map +1 -0
- package/dist/utils/normalization.js +24 -0
- package/dist/utils/normalization.js.map +1 -0
- package/dist/utils/validation.d.ts +10 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +32 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +44 -0
- package/types/index.d.ts +734 -0
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Advanced caching system with memory management and smart invalidation for Coherent.js
|
|
3
|
+
*
|
|
4
|
+
* @module @coherent/performance/cache-manager
|
|
5
|
+
* @license MIT
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* @typedef {Object} CacheEntry
|
|
9
|
+
* @property {any} value - The cached value
|
|
10
|
+
* @property {number} timestamp - When the entry was created
|
|
11
|
+
* @property {number} lastAccess - Last access time
|
|
12
|
+
* @property {number} size - Approximate size in bytes
|
|
13
|
+
* @property {Object} metadata - Additional metadata
|
|
14
|
+
* @property {number} accessCount - Number of times accessed
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* @typedef {Object} CacheStats
|
|
18
|
+
* @property {number} hits - Number of cache hits
|
|
19
|
+
* @property {number} misses - Number of cache misses
|
|
20
|
+
* @property {number} size - Current cache size in bytes
|
|
21
|
+
* @property {number} entries - Number of cache entries
|
|
22
|
+
* @property {Record<string, number>} hitRate - Hit rate by cache type
|
|
23
|
+
*/
|
|
24
|
+
/**
|
|
25
|
+
* @typedef {Object} CacheOptions
|
|
26
|
+
* @property {number} [maxCacheSize=1000] - Maximum number of entries per cache type
|
|
27
|
+
* @property {number} [maxMemoryMB=100] - Maximum memory usage in MB
|
|
28
|
+
* @property {number} [ttlMs=300000] - Default time-to-live in milliseconds (5 minutes)
|
|
29
|
+
* @property {boolean} [enableStatistics=true] - Whether to collect usage statistics
|
|
30
|
+
*/
|
|
31
|
+
/**
|
|
32
|
+
* Creates a new CacheManager instance
|
|
33
|
+
* @param {CacheOptions} [options] - Configuration options
|
|
34
|
+
* @returns {Object} Cache manager instance
|
|
35
|
+
*/
|
|
36
|
+
export function createCacheManager(options = {}) {
|
|
37
|
+
const { maxCacheSize = 1000, maxMemoryMB = 100, ttlMs = 1000 * 60 * 5, // 5 minutes
|
|
38
|
+
enableStatistics = true } = options;
|
|
39
|
+
// Internal state
|
|
40
|
+
const caches = {
|
|
41
|
+
static: new Map(), // Never-changing components
|
|
42
|
+
component: new Map(), // Component results with deps
|
|
43
|
+
template: new Map(), // Template strings
|
|
44
|
+
data: new Map() // General purpose data
|
|
45
|
+
};
|
|
46
|
+
let memoryUsage = 0;
|
|
47
|
+
const stats = {
|
|
48
|
+
hits: 0,
|
|
49
|
+
misses: 0,
|
|
50
|
+
hitRate: {
|
|
51
|
+
static: 0,
|
|
52
|
+
component: 0,
|
|
53
|
+
template: 0,
|
|
54
|
+
data: 0
|
|
55
|
+
},
|
|
56
|
+
accessCount: {
|
|
57
|
+
static: 0,
|
|
58
|
+
component: 0,
|
|
59
|
+
template: 0,
|
|
60
|
+
data: 0
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
// Cleanup interval (doesn't keep Node.js process alive)
|
|
64
|
+
let cleanupInterval;
|
|
65
|
+
if (typeof setInterval === 'function') {
|
|
66
|
+
cleanupInterval = setInterval(() => cleanup(), 30000);
|
|
67
|
+
if (cleanupInterval.unref) {
|
|
68
|
+
cleanupInterval.unref();
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Generate a cache key from component and props
|
|
73
|
+
* @param {any} component - Component or component name
|
|
74
|
+
* @param {Object} [props={}] - Component props
|
|
75
|
+
* @param {Object} [context={}] - Additional context
|
|
76
|
+
* @returns {string} Cache key
|
|
77
|
+
*/
|
|
78
|
+
function generateCacheKey(component, props = {}, context = {}) {
|
|
79
|
+
const componentStr = typeof component === 'function'
|
|
80
|
+
? component.name || component.toString()
|
|
81
|
+
: JSON.stringify(component);
|
|
82
|
+
const propsStr = JSON.stringify(props, Object.keys(_props).sort());
|
|
83
|
+
const contextStr = JSON.stringify(_context);
|
|
84
|
+
const hash = simpleHash(componentStr + propsStr + contextStr);
|
|
85
|
+
return `${extractComponentName(component)}_${hash}`;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Get a value from the cache
|
|
89
|
+
* @param {string} key - Cache key
|
|
90
|
+
* @param {string} [type='component'] - Cache type
|
|
91
|
+
* @returns {any|null} Cached value or null if not found
|
|
92
|
+
*/
|
|
93
|
+
function get(key, type = 'component') {
|
|
94
|
+
const cache = caches[type] || caches.component;
|
|
95
|
+
const _entry = cache.get(key);
|
|
96
|
+
if (!entry) {
|
|
97
|
+
stats.misses++;
|
|
98
|
+
if (enableStatistics)
|
|
99
|
+
stats.accessCount[type]++;
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
// Check TTL
|
|
103
|
+
if (Date.now() - entry.timestamp > ttlMs) {
|
|
104
|
+
cache.delete(key);
|
|
105
|
+
updateMemoryUsage(-entry.size);
|
|
106
|
+
stats.misses++;
|
|
107
|
+
if (enableStatistics)
|
|
108
|
+
stats.accessCount[type]++;
|
|
109
|
+
return null;
|
|
110
|
+
}
|
|
111
|
+
// Update access time and stats
|
|
112
|
+
entry.lastAccess = Date.now();
|
|
113
|
+
entry.accessCount++;
|
|
114
|
+
stats.hits++;
|
|
115
|
+
if (enableStatistics) {
|
|
116
|
+
stats.accessCount[type]++;
|
|
117
|
+
stats.hitRate[type] = (stats.hits / (stats.hits + stats.misses)) * 100;
|
|
118
|
+
}
|
|
119
|
+
return entry.value;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Store a value in the cache
|
|
123
|
+
* @param {string} key - Cache key
|
|
124
|
+
* @param {any} value - Value to cache
|
|
125
|
+
* @param {string} [type='component'] - Cache type
|
|
126
|
+
* @param {Object} [metadata={}] - Additional metadata
|
|
127
|
+
*/
|
|
128
|
+
function set(key, value, type = 'component', metadata = {}) {
|
|
129
|
+
const cache = caches[type] || caches.component;
|
|
130
|
+
const size = calculateSize(value);
|
|
131
|
+
// Check memory limits
|
|
132
|
+
if (memoryUsage + size > maxMemoryMB * 1024 * 1024) {
|
|
133
|
+
optimize(type, size);
|
|
134
|
+
}
|
|
135
|
+
const _entry = {
|
|
136
|
+
value,
|
|
137
|
+
timestamp: Date.now(),
|
|
138
|
+
lastAccess: Date.now(),
|
|
139
|
+
size,
|
|
140
|
+
metadata,
|
|
141
|
+
accessCount: 0
|
|
142
|
+
};
|
|
143
|
+
// Remove existing entry if it exists
|
|
144
|
+
const existing = cache.get(key);
|
|
145
|
+
if (existing) {
|
|
146
|
+
updateMemoryUsage(-existing.size);
|
|
147
|
+
}
|
|
148
|
+
cache.set(key, entry);
|
|
149
|
+
updateMemoryUsage(size);
|
|
150
|
+
// Enforce cache size limits
|
|
151
|
+
if (cache.size > maxCacheSize) {
|
|
152
|
+
optimize(type);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Remove an entry from the cache
|
|
157
|
+
* @param {string} key - Cache key
|
|
158
|
+
* @param {string} [type] - Cache type (optional, checks all caches if not provided)
|
|
159
|
+
* @returns {boolean} True if an entry was removed
|
|
160
|
+
*/
|
|
161
|
+
function remove(key, type) {
|
|
162
|
+
if (type) {
|
|
163
|
+
const cache = caches[type];
|
|
164
|
+
if (!cache)
|
|
165
|
+
return false;
|
|
166
|
+
const _entry = cache.get(key);
|
|
167
|
+
if (entry) {
|
|
168
|
+
updateMemoryUsage(-entry.size);
|
|
169
|
+
return cache.delete(key);
|
|
170
|
+
}
|
|
171
|
+
return false;
|
|
172
|
+
}
|
|
173
|
+
// Check all caches if no type specified
|
|
174
|
+
for (const [, cache] of Object.entries(caches)) {
|
|
175
|
+
const _entry = cache.get(key);
|
|
176
|
+
if (entry) {
|
|
177
|
+
updateMemoryUsage(-entry.size);
|
|
178
|
+
return cache.delete(key);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
return false;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Clear all caches or a specific cache type
|
|
185
|
+
* @param {string} [type] - Cache type to clear (optional, clears all if not provided)
|
|
186
|
+
*/
|
|
187
|
+
function clear(type) {
|
|
188
|
+
if (type) {
|
|
189
|
+
const cache = caches[type];
|
|
190
|
+
if (cache) {
|
|
191
|
+
cache.clear();
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
Object.values(caches).forEach(cache => cache.clear());
|
|
196
|
+
}
|
|
197
|
+
memoryUsage = 0;
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Get cache statistics
|
|
201
|
+
* @returns {CacheStats} Cache statistics
|
|
202
|
+
*/
|
|
203
|
+
function getStats() {
|
|
204
|
+
const entries = Object.values(caches).reduce((sum, cache) => sum + cache.size, 0);
|
|
205
|
+
return {
|
|
206
|
+
hits: stats.hits,
|
|
207
|
+
misses: stats.misses,
|
|
208
|
+
size: memoryUsage,
|
|
209
|
+
entries,
|
|
210
|
+
hitRate: stats.hitRate,
|
|
211
|
+
accessCount: stats.accessCount
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Clean up expired entries
|
|
216
|
+
*/
|
|
217
|
+
function cleanup() {
|
|
218
|
+
const now = Date.now();
|
|
219
|
+
let freed = 0;
|
|
220
|
+
for (const [, cache] of Object.entries(caches)) {
|
|
221
|
+
for (const [key, entry] of cache.entries()) {
|
|
222
|
+
if (now - entry.timestamp > ttlMs) {
|
|
223
|
+
cache.delete(key);
|
|
224
|
+
updateMemoryUsage(-entry.size);
|
|
225
|
+
freed++;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
return { freed };
|
|
230
|
+
}
|
|
231
|
+
// Internal helper functions
|
|
232
|
+
function calculateSize(value) {
|
|
233
|
+
if (value === null || value === undefined)
|
|
234
|
+
return 0;
|
|
235
|
+
if (typeof value === 'string')
|
|
236
|
+
return value.length * 2; // UTF-16
|
|
237
|
+
if (typeof value === 'number')
|
|
238
|
+
return 8; // 64-bit float
|
|
239
|
+
if (typeof value === 'boolean')
|
|
240
|
+
return 4;
|
|
241
|
+
if (Array.isArray(value)) {
|
|
242
|
+
return value.reduce((sum, item) => sum + calculateSize(item), 0);
|
|
243
|
+
}
|
|
244
|
+
if (typeof value === 'object') {
|
|
245
|
+
return Object.values(value).reduce((sum, val) => sum + calculateSize(val), 0);
|
|
246
|
+
}
|
|
247
|
+
return 0;
|
|
248
|
+
}
|
|
249
|
+
function updateMemoryUsage(delta) {
|
|
250
|
+
memoryUsage = Math.max(0, memoryUsage + delta);
|
|
251
|
+
}
|
|
252
|
+
function optimize(type, requiredSpace = 0) {
|
|
253
|
+
const cache = caches[type] || caches.component;
|
|
254
|
+
const entries = Array.from(cache.entries())
|
|
255
|
+
.sort(([, a], [, b]) => a.lastAccess - b.lastAccess);
|
|
256
|
+
let freed = 0;
|
|
257
|
+
for (const [key, entry] of entries) {
|
|
258
|
+
if (freed >= requiredSpace)
|
|
259
|
+
break;
|
|
260
|
+
cache.delete(key);
|
|
261
|
+
updateMemoryUsage(-entry.size);
|
|
262
|
+
freed += entry.size;
|
|
263
|
+
}
|
|
264
|
+
return { freed };
|
|
265
|
+
}
|
|
266
|
+
function simpleHash(str) {
|
|
267
|
+
let hash = 0;
|
|
268
|
+
for (let i = 0; i < str.length; i++) {
|
|
269
|
+
const char = str.charCodeAt(i);
|
|
270
|
+
hash = ((hash << 5) - hash) + char;
|
|
271
|
+
hash = hash & hash; // Convert to 32-bit integer
|
|
272
|
+
}
|
|
273
|
+
return Math.abs(hash).toString(36);
|
|
274
|
+
}
|
|
275
|
+
function extractComponentName(component) {
|
|
276
|
+
if (typeof component === 'function') {
|
|
277
|
+
return component.name || 'AnonymousComponent';
|
|
278
|
+
}
|
|
279
|
+
if (component && typeof component === 'object') {
|
|
280
|
+
const keys = Object.keys(component);
|
|
281
|
+
return keys.length > 0 ? keys[0] : 'ObjectComponent';
|
|
282
|
+
}
|
|
283
|
+
return 'UnknownComponent';
|
|
284
|
+
}
|
|
285
|
+
// Clean up on destroy
|
|
286
|
+
function destroy() {
|
|
287
|
+
if (cleanupInterval) {
|
|
288
|
+
clearInterval(cleanupInterval);
|
|
289
|
+
}
|
|
290
|
+
clear();
|
|
291
|
+
}
|
|
292
|
+
// Public API
|
|
293
|
+
return {
|
|
294
|
+
get,
|
|
295
|
+
set,
|
|
296
|
+
remove,
|
|
297
|
+
clear,
|
|
298
|
+
getStats,
|
|
299
|
+
cleanup,
|
|
300
|
+
destroy,
|
|
301
|
+
generateCacheKey,
|
|
302
|
+
get memoryUsage() {
|
|
303
|
+
return memoryUsage;
|
|
304
|
+
},
|
|
305
|
+
get maxMemory() {
|
|
306
|
+
return maxMemoryMB * 1024 * 1024;
|
|
307
|
+
}
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
// Create a default instance for convenience
|
|
311
|
+
export const cacheManager = createCacheManager();
|
|
312
|
+
// For backward compatibility
|
|
313
|
+
export const CacheManager = { create: createCacheManager };
|
|
314
|
+
//# sourceMappingURL=cache-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-manager.js","sourceRoot":"","sources":["../../../../src/performance/cache-manager.js"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create a new component cache instance
|
|
3
|
+
*/
|
|
4
|
+
export function createComponentCache(options?: {}): ComponentCache;
|
|
5
|
+
/**
|
|
6
|
+
* Memoization decorator for components
|
|
7
|
+
*/
|
|
8
|
+
export function memoize(component: any, keyGenerator: any, options?: {}): (...args: any[]) => any;
|
|
9
|
+
/**
|
|
10
|
+
* Component Cache Manager with intelligent invalidation
|
|
11
|
+
*/
|
|
12
|
+
export class ComponentCache {
|
|
13
|
+
constructor(options?: {});
|
|
14
|
+
options: {
|
|
15
|
+
maxSize: any;
|
|
16
|
+
defaultTTL: any;
|
|
17
|
+
cleanupInterval: any;
|
|
18
|
+
enableStats: boolean;
|
|
19
|
+
};
|
|
20
|
+
cache: Map<any, any>;
|
|
21
|
+
dependencies: Map<any, any>;
|
|
22
|
+
stats: {
|
|
23
|
+
hits: number;
|
|
24
|
+
misses: number;
|
|
25
|
+
evictions: number;
|
|
26
|
+
cleanups: number;
|
|
27
|
+
invalidations: number;
|
|
28
|
+
};
|
|
29
|
+
cleanupTimer: NodeJS.Timeout | undefined;
|
|
30
|
+
/**
|
|
31
|
+
* Generate cache key from component and props
|
|
32
|
+
*/
|
|
33
|
+
generateKey(component: any, props?: {}, context?: {}): string;
|
|
34
|
+
/**
|
|
35
|
+
* Serialize component for cache key generation
|
|
36
|
+
*/
|
|
37
|
+
serializeComponent(component: any, maxDepth?: number, currentDepth?: number): any;
|
|
38
|
+
/**
|
|
39
|
+
* Get component from cache
|
|
40
|
+
*/
|
|
41
|
+
get(key: any, dependencies?: any[]): any;
|
|
42
|
+
/**
|
|
43
|
+
* Set component in cache
|
|
44
|
+
*/
|
|
45
|
+
set(key: any, component: any, options?: {}): boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Check if component exists in cache
|
|
48
|
+
*/
|
|
49
|
+
has(key: any): any;
|
|
50
|
+
/**
|
|
51
|
+
* Invalidate cache entries by dependency
|
|
52
|
+
*/
|
|
53
|
+
invalidate(dependency: any): number;
|
|
54
|
+
/**
|
|
55
|
+
* Invalidate multiple dependencies
|
|
56
|
+
*/
|
|
57
|
+
invalidateMultiple(dependencies: any): number;
|
|
58
|
+
/**
|
|
59
|
+
* Clear entire cache
|
|
60
|
+
*/
|
|
61
|
+
clear(): number;
|
|
62
|
+
/**
|
|
63
|
+
* Add dependency mapping
|
|
64
|
+
*/
|
|
65
|
+
addDependencyMapping(dependency: any, key: any): void;
|
|
66
|
+
/**
|
|
67
|
+
* Remove dependency mappings for a cache key
|
|
68
|
+
*/
|
|
69
|
+
removeDependencyMappings(key: any): void;
|
|
70
|
+
/**
|
|
71
|
+
* Evict least recently used entry
|
|
72
|
+
*/
|
|
73
|
+
evictLeastUsed(): void;
|
|
74
|
+
/**
|
|
75
|
+
* Cleanup expired entries
|
|
76
|
+
*/
|
|
77
|
+
cleanup(): number;
|
|
78
|
+
/**
|
|
79
|
+
* Get cache statistics
|
|
80
|
+
*/
|
|
81
|
+
getStats(): {
|
|
82
|
+
size: number;
|
|
83
|
+
maxSize: any;
|
|
84
|
+
hits: number;
|
|
85
|
+
misses: number;
|
|
86
|
+
hitRate: string | number;
|
|
87
|
+
evictions: number;
|
|
88
|
+
cleanups: number;
|
|
89
|
+
invalidations: number;
|
|
90
|
+
dependencies: number;
|
|
91
|
+
memoryUsage: number;
|
|
92
|
+
};
|
|
93
|
+
/**
|
|
94
|
+
* Estimate memory usage (rough approximation)
|
|
95
|
+
*/
|
|
96
|
+
estimateMemoryUsage(): number;
|
|
97
|
+
/**
|
|
98
|
+
* Get hot path components (most accessed)
|
|
99
|
+
*/
|
|
100
|
+
getHotComponents(limit?: number): {
|
|
101
|
+
key: any;
|
|
102
|
+
accessCount: any;
|
|
103
|
+
component: any;
|
|
104
|
+
dependencies: any[];
|
|
105
|
+
}[];
|
|
106
|
+
/**
|
|
107
|
+
* Get cache recommendations
|
|
108
|
+
*/
|
|
109
|
+
getRecommendations(): {
|
|
110
|
+
type: string;
|
|
111
|
+
message: string;
|
|
112
|
+
priority: string;
|
|
113
|
+
}[];
|
|
114
|
+
/**
|
|
115
|
+
* Destroy cache and cleanup
|
|
116
|
+
*/
|
|
117
|
+
destroy(): void;
|
|
118
|
+
}
|
|
119
|
+
export default ComponentCache;
|
|
120
|
+
//# sourceMappingURL=component-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"component-cache.d.ts","sourceRoot":"","sources":["../../../../src/performance/component-cache.js"],"names":[],"mappings":"AA2YA;;GAEG;AACH,mEAEC;AAED;;GAEG;AACH,2EAMsC,GAAG,WAAI,SAY5C;AA3XD;;GAEG;AACH;IACI,0BAyBC;IAxBG;;;;;MAMC;IAED,qBAAsB;IACtB,4BAA6B;IAC7B;;;;;;MAMC;IAIG,yCAEgC;IAIxC;;OAEG;IACH,8DAiBC;IAED;;OAEG;IACH,kFAyBC;IAED;;OAEG;IACH,yCA2BC;IAED;;OAEG;IACH,qDAoBC;IAED;;OAEG;IACH,mBAGC;IAED;;OAEG;IACH,oCAgBC;IAED;;OAEG;IACH,8CAMC;IAED;;OAEG;IACH,gBAKC;IAED;;OAEG;IACH,sDAKC;IAED;;OAEG;IACH,yCAOC;IAED;;OAEG;IACH,uBAgBC;IAED;;OAEG;IACH,kBAqBC;IAED;;OAEG;IACH;;;;;;;;;;;MAcC;IAED;;OAEG;IACH,8BAOC;IAED;;OAEG;IACH;;;;;QAWC;IAED;;OAEG;IACH;;;;QA6BC;IAED;;OAEG;IACH,gBAKC;CACJ"}
|