@coherent.js/core 1.0.0-beta.8 → 1.0.0-rc.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/package.json +2 -2
- package/dist/coherent.d.ts +0 -472
- package/dist/coherent.d.ts.map +0 -1
- package/dist/coherent.js +0 -590
- package/dist/coherent.js.map +0 -1
- package/dist/components/component-system.d.ts +0 -1138
- package/dist/components/component-system.d.ts.map +0 -1
- package/dist/components/component-system.js +0 -2220
- package/dist/components/component-system.js.map +0 -1
- package/dist/components/lifecycle.d.ts +0 -212
- package/dist/components/lifecycle.d.ts.map +0 -1
- package/dist/components/lifecycle.js +0 -525
- package/dist/components/lifecycle.js.map +0 -1
- package/dist/core/html-utils.d.ts +0 -14
- package/dist/core/html-utils.d.ts.map +0 -1
- package/dist/core/html-utils.js +0 -166
- package/dist/core/html-utils.js.map +0 -1
- package/dist/core/object-factory.d.ts +0 -38
- package/dist/core/object-factory.d.ts.map +0 -1
- package/dist/core/object-factory.js +0 -63
- package/dist/core/object-factory.js.map +0 -1
- package/dist/core/object-utils.d.ts +0 -77
- package/dist/core/object-utils.d.ts.map +0 -1
- package/dist/core/object-utils.js +0 -502
- package/dist/core/object-utils.js.map +0 -1
- package/dist/dev/dev-tools.d.ts +0 -194
- package/dist/dev/dev-tools.d.ts.map +0 -1
- package/dist/dev/dev-tools.js +0 -846
- package/dist/dev/dev-tools.js.map +0 -1
- package/dist/forms/validation.d.ts +0 -271
- package/dist/forms/validation.d.ts.map +0 -1
- package/dist/forms/validation.js +0 -573
- package/dist/forms/validation.js.map +0 -1
- package/dist/performance/bundle-optimizer.d.ts +0 -95
- package/dist/performance/bundle-optimizer.d.ts.map +0 -1
- package/dist/performance/bundle-optimizer.js +0 -192
- package/dist/performance/bundle-optimizer.js.map +0 -1
- package/dist/performance/cache-manager.d.ts +0 -107
- package/dist/performance/cache-manager.d.ts.map +0 -1
- package/dist/performance/cache-manager.js +0 -314
- package/dist/performance/cache-manager.js.map +0 -1
- package/dist/performance/component-cache.d.ts +0 -120
- package/dist/performance/component-cache.d.ts.map +0 -1
- package/dist/performance/component-cache.js +0 -364
- package/dist/performance/component-cache.js.map +0 -1
- package/dist/performance/monitor.d.ts +0 -189
- package/dist/performance/monitor.d.ts.map +0 -1
- package/dist/performance/monitor.js +0 -347
- package/dist/performance/monitor.js.map +0 -1
- package/dist/rendering/base-renderer.d.ts +0 -140
- package/dist/rendering/base-renderer.d.ts.map +0 -1
- package/dist/rendering/base-renderer.js +0 -409
- package/dist/rendering/base-renderer.js.map +0 -1
- package/dist/rendering/css-manager.d.ts +0 -73
- package/dist/rendering/css-manager.d.ts.map +0 -1
- package/dist/rendering/css-manager.js +0 -176
- package/dist/rendering/css-manager.js.map +0 -1
- package/dist/rendering/dom-renderer.d.ts +0 -62
- package/dist/rendering/dom-renderer.d.ts.map +0 -1
- package/dist/rendering/dom-renderer.js +0 -252
- package/dist/rendering/dom-renderer.js.map +0 -1
- package/dist/rendering/html-renderer.d.ts +0 -67
- package/dist/rendering/html-renderer.d.ts.map +0 -1
- package/dist/rendering/html-renderer.js +0 -444
- package/dist/rendering/html-renderer.js.map +0 -1
- package/dist/rendering/renderer-config.d.ts +0 -282
- package/dist/rendering/renderer-config.d.ts.map +0 -1
- package/dist/rendering/renderer-config.js +0 -144
- package/dist/rendering/renderer-config.js.map +0 -1
- package/dist/rendering/streaming-renderer.d.ts +0 -117
- package/dist/rendering/streaming-renderer.d.ts.map +0 -1
- package/dist/rendering/streaming-renderer.js +0 -326
- package/dist/rendering/streaming-renderer.js.map +0 -1
- package/dist/rendering/vdom-diff.d.ts +0 -47
- package/dist/rendering/vdom-diff.d.ts.map +0 -1
- package/dist/rendering/vdom-diff.js +0 -416
- package/dist/rendering/vdom-diff.js.map +0 -1
- package/dist/routing/router.d.ts +0 -241
- package/dist/routing/router.d.ts.map +0 -1
- package/dist/routing/router.js +0 -648
- package/dist/routing/router.js.map +0 -1
- package/dist/state/reactive-state.d.ts +0 -166
- package/dist/state/reactive-state.d.ts.map +0 -1
- package/dist/state/reactive-state.js +0 -546
- package/dist/state/reactive-state.js.map +0 -1
- package/dist/state/state-manager.d.ts +0 -45
- package/dist/state/state-manager.d.ts.map +0 -1
- package/dist/state/state-manager.js +0 -151
- package/dist/state/state-manager.js.map +0 -1
- package/dist/types/constants.d.ts +0 -8
- package/dist/types/constants.d.ts.map +0 -1
- package/dist/types/constants.js +0 -36
- package/dist/types/constants.js.map +0 -1
- package/dist/utils/dependency-utils.d.ts +0 -43
- package/dist/utils/dependency-utils.d.ts.map +0 -1
- package/dist/utils/dependency-utils.js +0 -105
- package/dist/utils/dependency-utils.js.map +0 -1
- package/dist/utils/error-handler.d.ts +0 -148
- package/dist/utils/error-handler.d.ts.map +0 -1
- package/dist/utils/error-handler.js +0 -468
- package/dist/utils/error-handler.js.map +0 -1
- package/dist/utils/normalization.d.ts +0 -3
- package/dist/utils/normalization.d.ts.map +0 -1
- package/dist/utils/normalization.js +0 -24
- package/dist/utils/normalization.js.map +0 -1
- package/dist/utils/validation.d.ts +0 -10
- package/dist/utils/validation.d.ts.map +0 -1
- package/dist/utils/validation.js +0 -32
- package/dist/utils/validation.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bundle-optimizer.d.ts","sourceRoot":"","sources":["../../../../src/performance/bundle-optimizer.js"],"names":[],"mappings":"AAAA;;GAEG;AAEH;IAEQ,yBAA+B;IAC/B,wBAA8B;IAC9B,qCAAsC;IACtC,qBAA2B;IAI/B;;;;;;;;;;;;;;;;;;;;;;MASC;IAED,kEAkBC;IAED,yEA0BC;IAED,qDA+BC;IAED,sCASC;IAGD;;;;;;;;;;;;;;;;;;;;;;MAQC;IAED;;;;;QA8BC;IAED;;;;;;;MAaC;IAED;;;;QAoBC;IAGD;;;;;;;;;;;;;;MAmBC;CACJ;AAED,8CAAqD"}
|
|
@@ -1,192 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Bundle size optimization through tree-shaking and code analysis
|
|
3
|
-
*/
|
|
4
|
-
export class BundleOptimizer {
|
|
5
|
-
constructor() {
|
|
6
|
-
this.usedComponents = new Set();
|
|
7
|
-
this.usedUtilities = new Set();
|
|
8
|
-
this.componentDependencies = new Map();
|
|
9
|
-
this.unusedCode = new Set();
|
|
10
|
-
}
|
|
11
|
-
// Analyze component tree to identify what's actually used
|
|
12
|
-
analyzeUsage(rootComponent, props = {}) {
|
|
13
|
-
const analysisContext = {
|
|
14
|
-
componentStack: [],
|
|
15
|
-
propsFlow: new Map(),
|
|
16
|
-
conditionalBranches: new Set()
|
|
17
|
-
};
|
|
18
|
-
this.traverseComponent(rootComponent, props, analysisContext);
|
|
19
|
-
return this.generateOptimizationReport();
|
|
20
|
-
}
|
|
21
|
-
traverseComponent(component, props, _context) {
|
|
22
|
-
const componentName = this.getComponentName(component);
|
|
23
|
-
// Track component usage
|
|
24
|
-
this.usedComponents.add(componentName);
|
|
25
|
-
context.componentStack.push(componentName);
|
|
26
|
-
// Track props flow for optimization
|
|
27
|
-
context.propsFlow.set(componentName, Object.keys(_props));
|
|
28
|
-
// Analyze component implementation
|
|
29
|
-
if (typeof component === 'function') {
|
|
30
|
-
this.analyzeFunctionComponent(component, props, _context);
|
|
31
|
-
}
|
|
32
|
-
else if (typeof component === 'object') {
|
|
33
|
-
this.analyzeObjectComponent(component, _context);
|
|
34
|
-
}
|
|
35
|
-
context.componentStack.pop();
|
|
36
|
-
}
|
|
37
|
-
analyzeFunctionComponent(component, props, _context) {
|
|
38
|
-
const componentStr = component.toString();
|
|
39
|
-
// Detect conditional rendering patterns
|
|
40
|
-
const conditionalPatterns = [
|
|
41
|
-
/\?\s*\{/g, // Conditional objects
|
|
42
|
-
/&&\s*\{/g, // Logical AND rendering
|
|
43
|
-
/if\s*\(/g // If statements
|
|
44
|
-
];
|
|
45
|
-
for (const pattern of conditionalPatterns) {
|
|
46
|
-
const matches = componentStr.match(pattern);
|
|
47
|
-
if (matches) {
|
|
48
|
-
context.conditionalBranches.add(`${this.getComponentName(component)}_conditional`);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
// Try to execute with sample props to discover runtime paths
|
|
52
|
-
try {
|
|
53
|
-
const result = component(_props);
|
|
54
|
-
if (result) {
|
|
55
|
-
this.traverseComponent(result, {}, _context);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
catch {
|
|
59
|
-
// Component might need specific props, skip runtime analysis
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
analyzeObjectComponent(obj, _context) {
|
|
63
|
-
if (Array.isArray(obj)) {
|
|
64
|
-
obj.forEach(item => {
|
|
65
|
-
if (item && typeof item === 'object') {
|
|
66
|
-
this.traverseComponent(item, {}, _context);
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
return;
|
|
70
|
-
}
|
|
71
|
-
const keys = Object.keys(obj);
|
|
72
|
-
if (keys.length === 1) {
|
|
73
|
-
const tagName = keys[0];
|
|
74
|
-
const props = obj[tagName];
|
|
75
|
-
// Track HTML tag usage
|
|
76
|
-
this.usedComponents.add(`html_${tagName}`);
|
|
77
|
-
// Traverse children
|
|
78
|
-
if (props && typeof props === 'object') {
|
|
79
|
-
if (props.children) {
|
|
80
|
-
if (Array.isArray(props.children)) {
|
|
81
|
-
props.children.forEach(child => {
|
|
82
|
-
this.traverseComponent(child, {}, _context);
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
else {
|
|
86
|
-
this.traverseComponent(props.children, {}, _context);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
getComponentName(component) {
|
|
93
|
-
if (typeof component === 'function') {
|
|
94
|
-
return component.name || 'AnonymousFunction';
|
|
95
|
-
}
|
|
96
|
-
if (typeof component === 'object' && component) {
|
|
97
|
-
const keys = Object.keys(component);
|
|
98
|
-
return keys.length > 0 ? `Object_${keys[0]}` : 'EmptyObject';
|
|
99
|
-
}
|
|
100
|
-
return 'Unknown';
|
|
101
|
-
}
|
|
102
|
-
// Generate optimization recommendations
|
|
103
|
-
generateOptimizationReport() {
|
|
104
|
-
return {
|
|
105
|
-
usedComponents: Array.from(this.usedComponents),
|
|
106
|
-
componentDependencies: Object.fromEntries(this.componentDependencies),
|
|
107
|
-
optimizationOpportunities: this.findOptimizationOpportunities(),
|
|
108
|
-
bundleEstimate: this.estimateBundleSize(),
|
|
109
|
-
recommendations: this.generateRecommendations()
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
findOptimizationOpportunities() {
|
|
113
|
-
const opportunities = [];
|
|
114
|
-
// Check for unused utilities
|
|
115
|
-
const coreUtilities = ['validateCoherentObject', 'mergeProps', 'cloneCoherentObject'];
|
|
116
|
-
const unusedUtilities = coreUtilities.filter(util => !this.usedUtilities.has(util));
|
|
117
|
-
if (unusedUtilities.length > 0) {
|
|
118
|
-
opportunities.push({
|
|
119
|
-
type: 'unused_utilities',
|
|
120
|
-
impact: 'medium',
|
|
121
|
-
description: `Remove unused utilities: ${unusedUtilities.join(', ')}`,
|
|
122
|
-
estimatedSavings: unusedUtilities.length * 2 // KB estimate
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
// Check for component consolidation opportunities
|
|
126
|
-
const htmlComponents = Array.from(this.usedComponents)
|
|
127
|
-
.filter(name => name.startsWith('html_'));
|
|
128
|
-
if (htmlComponents.length < 10) {
|
|
129
|
-
opportunities.push({
|
|
130
|
-
type: 'minimal_html_tags',
|
|
131
|
-
impact: 'high',
|
|
132
|
-
description: 'Create minimal HTML tag bundle for smaller apps',
|
|
133
|
-
estimatedSavings: 15 // KB estimate
|
|
134
|
-
});
|
|
135
|
-
}
|
|
136
|
-
return opportunities;
|
|
137
|
-
}
|
|
138
|
-
estimateBundleSize() {
|
|
139
|
-
const baseFrameworkSize = 25; // KB
|
|
140
|
-
const componentOverhead = this.usedComponents.size * 0.5; // KB per component
|
|
141
|
-
const utilitySize = this.usedUtilities.size * 2; // KB per utility
|
|
142
|
-
return {
|
|
143
|
-
estimated: baseFrameworkSize + componentOverhead + utilitySize,
|
|
144
|
-
breakdown: {
|
|
145
|
-
framework: baseFrameworkSize,
|
|
146
|
-
components: componentOverhead,
|
|
147
|
-
utilities: utilitySize
|
|
148
|
-
}
|
|
149
|
-
};
|
|
150
|
-
}
|
|
151
|
-
generateRecommendations() {
|
|
152
|
-
const recommendations = [];
|
|
153
|
-
if (this.usedComponents.size < 5) {
|
|
154
|
-
recommendations.push({
|
|
155
|
-
priority: 'high',
|
|
156
|
-
action: 'Consider creating a minimal bundle with only required components',
|
|
157
|
-
impact: 'Reduce bundle size by 40-60%'
|
|
158
|
-
});
|
|
159
|
-
}
|
|
160
|
-
if (this.usedComponents.size > 50) {
|
|
161
|
-
recommendations.push({
|
|
162
|
-
priority: 'medium',
|
|
163
|
-
action: 'Implement code-splitting to load components on demand',
|
|
164
|
-
impact: 'Improve initial load time by 30-50%'
|
|
165
|
-
});
|
|
166
|
-
}
|
|
167
|
-
return recommendations;
|
|
168
|
-
}
|
|
169
|
-
// Generate optimized bundle configuration
|
|
170
|
-
generateOptimizedConfig() {
|
|
171
|
-
return {
|
|
172
|
-
entryPoints: {
|
|
173
|
-
core: ['./src/coherent.js'],
|
|
174
|
-
components: Array.from(this.usedComponents)
|
|
175
|
-
.filter(name => !name.startsWith('html_'))
|
|
176
|
-
.map(name => `./src/components/${name}.js`),
|
|
177
|
-
utilities: Array.from(this.usedUtilities)
|
|
178
|
-
.map(name => `./src/core/${name}.js`)
|
|
179
|
-
},
|
|
180
|
-
treeShaking: {
|
|
181
|
-
unusedExports: Array.from(this.unusedCode),
|
|
182
|
-
sideEffects: false
|
|
183
|
-
},
|
|
184
|
-
optimization: {
|
|
185
|
-
minify: true,
|
|
186
|
-
splitChunks: this.usedComponents.size > 20
|
|
187
|
-
}
|
|
188
|
-
};
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
export const bundleOptimizer = new BundleOptimizer();
|
|
192
|
-
//# sourceMappingURL=bundle-optimizer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bundle-optimizer.js","sourceRoot":"","sources":["../../../../src/performance/bundle-optimizer.js"],"names":[],"mappings":"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"}
|
|
@@ -1,107 +0,0 @@
|
|
|
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?: CacheOptions): Object;
|
|
37
|
-
export const cacheManager: Object;
|
|
38
|
-
export namespace CacheManager {
|
|
39
|
-
export { createCacheManager as create };
|
|
40
|
-
}
|
|
41
|
-
export type CacheEntry = {
|
|
42
|
-
/**
|
|
43
|
-
* - The cached value
|
|
44
|
-
*/
|
|
45
|
-
value: any;
|
|
46
|
-
/**
|
|
47
|
-
* - When the entry was created
|
|
48
|
-
*/
|
|
49
|
-
timestamp: number;
|
|
50
|
-
/**
|
|
51
|
-
* - Last access time
|
|
52
|
-
*/
|
|
53
|
-
lastAccess: number;
|
|
54
|
-
/**
|
|
55
|
-
* - Approximate size in bytes
|
|
56
|
-
*/
|
|
57
|
-
size: number;
|
|
58
|
-
/**
|
|
59
|
-
* - Additional metadata
|
|
60
|
-
*/
|
|
61
|
-
metadata: Object;
|
|
62
|
-
/**
|
|
63
|
-
* - Number of times accessed
|
|
64
|
-
*/
|
|
65
|
-
accessCount: number;
|
|
66
|
-
};
|
|
67
|
-
export type CacheStats = {
|
|
68
|
-
/**
|
|
69
|
-
* - Number of cache hits
|
|
70
|
-
*/
|
|
71
|
-
hits: number;
|
|
72
|
-
/**
|
|
73
|
-
* - Number of cache misses
|
|
74
|
-
*/
|
|
75
|
-
misses: number;
|
|
76
|
-
/**
|
|
77
|
-
* - Current cache size in bytes
|
|
78
|
-
*/
|
|
79
|
-
size: number;
|
|
80
|
-
/**
|
|
81
|
-
* - Number of cache entries
|
|
82
|
-
*/
|
|
83
|
-
entries: number;
|
|
84
|
-
/**
|
|
85
|
-
* - Hit rate by cache type
|
|
86
|
-
*/
|
|
87
|
-
hitRate: Record<string, number>;
|
|
88
|
-
};
|
|
89
|
-
export type CacheOptions = {
|
|
90
|
-
/**
|
|
91
|
-
* - Maximum number of entries per cache type
|
|
92
|
-
*/
|
|
93
|
-
maxCacheSize?: number | undefined;
|
|
94
|
-
/**
|
|
95
|
-
* - Maximum memory usage in MB
|
|
96
|
-
*/
|
|
97
|
-
maxMemoryMB?: number | undefined;
|
|
98
|
-
/**
|
|
99
|
-
* - Default time-to-live in milliseconds (5 minutes)
|
|
100
|
-
*/
|
|
101
|
-
ttlMs?: number | undefined;
|
|
102
|
-
/**
|
|
103
|
-
* - Whether to collect usage statistics
|
|
104
|
-
*/
|
|
105
|
-
enableStatistics?: boolean | undefined;
|
|
106
|
-
};
|
|
107
|
-
//# sourceMappingURL=cache-manager.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cache-manager.d.ts","sourceRoot":"","sources":["../../../../src/performance/cache-manager.js"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;;GAQG;AAEH;;;;;;;GAOG;AAEH;;;;;;GAMG;AAEH;;;;GAIG;AACH,6CAHW,YAAY,GACV,MAAM,CAkTlB;AAGD,kCAAiD;;;;;;;;WAjVnC,GAAG;;;;eACH,MAAM;;;;gBACN,MAAM;;;;UACN,MAAM;;;;cACN,MAAM;;;;iBACN,MAAM;;;;;;UAKN,MAAM;;;;YACN,MAAM;;;;UACN,MAAM;;;;aACN,MAAM;;;;aACN,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC"}
|
|
@@ -1,314 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cache-manager.js","sourceRoot":"","sources":["../../../../src/performance/cache-manager.js"],"names":[],"mappings":"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"}
|