@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,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bundle size optimization through tree-shaking and code analysis
|
|
3
|
+
*/
|
|
4
|
+
export class BundleOptimizer {
|
|
5
|
+
usedComponents: Set<any>;
|
|
6
|
+
usedUtilities: Set<any>;
|
|
7
|
+
componentDependencies: Map<any, any>;
|
|
8
|
+
unusedCode: Set<any>;
|
|
9
|
+
analyzeUsage(rootComponent: any, props?: {}): {
|
|
10
|
+
usedComponents: any[];
|
|
11
|
+
componentDependencies: any;
|
|
12
|
+
optimizationOpportunities: {
|
|
13
|
+
type: string;
|
|
14
|
+
impact: string;
|
|
15
|
+
description: string;
|
|
16
|
+
estimatedSavings: number;
|
|
17
|
+
}[];
|
|
18
|
+
bundleEstimate: {
|
|
19
|
+
estimated: number;
|
|
20
|
+
breakdown: {
|
|
21
|
+
framework: number;
|
|
22
|
+
components: number;
|
|
23
|
+
utilities: number;
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
recommendations: {
|
|
27
|
+
priority: string;
|
|
28
|
+
action: string;
|
|
29
|
+
impact: string;
|
|
30
|
+
}[];
|
|
31
|
+
};
|
|
32
|
+
traverseComponent(component: any, props: any, context: any): void;
|
|
33
|
+
analyzeFunctionComponent(component: any, props: any, context: any): void;
|
|
34
|
+
analyzeObjectComponent(obj: any, context: any): void;
|
|
35
|
+
getComponentName(component: any): any;
|
|
36
|
+
generateOptimizationReport(): {
|
|
37
|
+
usedComponents: any[];
|
|
38
|
+
componentDependencies: any;
|
|
39
|
+
optimizationOpportunities: {
|
|
40
|
+
type: string;
|
|
41
|
+
impact: string;
|
|
42
|
+
description: string;
|
|
43
|
+
estimatedSavings: number;
|
|
44
|
+
}[];
|
|
45
|
+
bundleEstimate: {
|
|
46
|
+
estimated: number;
|
|
47
|
+
breakdown: {
|
|
48
|
+
framework: number;
|
|
49
|
+
components: number;
|
|
50
|
+
utilities: number;
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
recommendations: {
|
|
54
|
+
priority: string;
|
|
55
|
+
action: string;
|
|
56
|
+
impact: string;
|
|
57
|
+
}[];
|
|
58
|
+
};
|
|
59
|
+
findOptimizationOpportunities(): {
|
|
60
|
+
type: string;
|
|
61
|
+
impact: string;
|
|
62
|
+
description: string;
|
|
63
|
+
estimatedSavings: number;
|
|
64
|
+
}[];
|
|
65
|
+
estimateBundleSize(): {
|
|
66
|
+
estimated: number;
|
|
67
|
+
breakdown: {
|
|
68
|
+
framework: number;
|
|
69
|
+
components: number;
|
|
70
|
+
utilities: number;
|
|
71
|
+
};
|
|
72
|
+
};
|
|
73
|
+
generateRecommendations(): {
|
|
74
|
+
priority: string;
|
|
75
|
+
action: string;
|
|
76
|
+
impact: string;
|
|
77
|
+
}[];
|
|
78
|
+
generateOptimizedConfig(): {
|
|
79
|
+
entryPoints: {
|
|
80
|
+
core: string[];
|
|
81
|
+
components: string[];
|
|
82
|
+
utilities: string[];
|
|
83
|
+
};
|
|
84
|
+
treeShaking: {
|
|
85
|
+
unusedExports: any[];
|
|
86
|
+
sideEffects: boolean;
|
|
87
|
+
};
|
|
88
|
+
optimization: {
|
|
89
|
+
minify: boolean;
|
|
90
|
+
splitChunks: boolean;
|
|
91
|
+
};
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
export const bundleOptimizer: BundleOptimizer;
|
|
95
|
+
//# sourceMappingURL=bundle-optimizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,192 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundle-optimizer.js","sourceRoot":"","sources":["../../../../src/performance/bundle-optimizer.js"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,107 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|