@coherent.js/core 1.0.0-beta.6 → 1.0.0-beta.8

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.
Files changed (108) hide show
  1. package/dist/coherent.d.ts +150 -10
  2. package/dist/coherent.d.ts.map +1 -1
  3. package/dist/coherent.js +166 -33
  4. package/dist/coherent.js.map +1 -1
  5. package/dist/components/component-system.js +109 -109
  6. package/dist/components/lifecycle.d.ts +212 -0
  7. package/dist/components/lifecycle.d.ts.map +1 -0
  8. package/dist/components/lifecycle.js +525 -0
  9. package/dist/components/lifecycle.js.map +1 -0
  10. package/dist/core/html-utils.js +5 -5
  11. package/dist/core/object-factory.js +21 -21
  12. package/dist/core/object-utils.js +2 -2
  13. package/dist/dev/dev-tools.d.ts +1 -1
  14. package/dist/dev/dev-tools.js +28 -28
  15. package/dist/forms/validation.d.ts +271 -0
  16. package/dist/forms/validation.d.ts.map +1 -0
  17. package/dist/forms/validation.js +573 -0
  18. package/dist/forms/validation.js.map +1 -0
  19. package/dist/index.cjs +185 -28
  20. package/dist/index.cjs.map +4 -4
  21. package/dist/index.js +181 -29
  22. package/dist/index.js.map +4 -4
  23. package/dist/performance/bundle-optimizer.js +11 -11
  24. package/dist/performance/cache-manager.js +6 -6
  25. package/dist/performance/component-cache.d.ts +120 -0
  26. package/dist/performance/component-cache.d.ts.map +1 -0
  27. package/dist/performance/component-cache.js +364 -0
  28. package/dist/performance/component-cache.js.map +1 -0
  29. package/dist/performance/monitor.js +10 -10
  30. package/dist/performance/monitor.js.map +1 -1
  31. package/dist/rendering/base-renderer.js +13 -13
  32. package/dist/rendering/css-manager.d.ts +73 -0
  33. package/dist/rendering/css-manager.d.ts.map +1 -0
  34. package/dist/rendering/css-manager.js +176 -0
  35. package/dist/rendering/css-manager.js.map +1 -0
  36. package/dist/rendering/dom-renderer.d.ts +23 -0
  37. package/dist/rendering/dom-renderer.d.ts.map +1 -1
  38. package/dist/rendering/dom-renderer.js +77 -9
  39. package/dist/rendering/dom-renderer.js.map +1 -1
  40. package/dist/rendering/html-renderer.d.ts +15 -0
  41. package/dist/rendering/html-renderer.d.ts.map +1 -1
  42. package/dist/rendering/html-renderer.js +85 -4
  43. package/dist/rendering/html-renderer.js.map +1 -1
  44. package/dist/rendering/streaming-renderer.js +12 -12
  45. package/dist/rendering/vdom-diff.d.ts +47 -0
  46. package/dist/rendering/vdom-diff.d.ts.map +1 -0
  47. package/dist/rendering/vdom-diff.js +416 -0
  48. package/dist/rendering/vdom-diff.js.map +1 -0
  49. package/dist/routing/router.d.ts +241 -0
  50. package/dist/routing/router.d.ts.map +1 -0
  51. package/dist/routing/router.js +648 -0
  52. package/dist/routing/router.js.map +1 -0
  53. package/dist/state/reactive-state.d.ts +166 -0
  54. package/dist/state/reactive-state.d.ts.map +1 -0
  55. package/dist/state/reactive-state.js +546 -0
  56. package/dist/state/reactive-state.js.map +1 -0
  57. package/dist/utils/dependency-utils.js +2 -2
  58. package/dist/utils/error-handler.d.ts +148 -0
  59. package/dist/utils/error-handler.d.ts.map +1 -0
  60. package/dist/utils/error-handler.js +468 -0
  61. package/dist/utils/error-handler.js.map +1 -0
  62. package/dist/utils/normalization.js +1 -1
  63. package/dist/utils/validation.js +1 -1
  64. package/package.json +5 -1
  65. package/dist/database/adapters/mongodb.d.ts +0 -15
  66. package/dist/database/adapters/mongodb.d.ts.map +0 -1
  67. package/dist/database/adapters/mongodb.js +0 -216
  68. package/dist/database/adapters/mongodb.js.map +0 -1
  69. package/dist/database/adapters/mysql.d.ts +0 -12
  70. package/dist/database/adapters/mysql.d.ts.map +0 -1
  71. package/dist/database/adapters/mysql.js +0 -171
  72. package/dist/database/adapters/mysql.js.map +0 -1
  73. package/dist/database/adapters/postgresql.d.ts +0 -12
  74. package/dist/database/adapters/postgresql.d.ts.map +0 -1
  75. package/dist/database/adapters/postgresql.js +0 -177
  76. package/dist/database/adapters/postgresql.js.map +0 -1
  77. package/dist/database/adapters/sqlite.d.ts +0 -15
  78. package/dist/database/adapters/sqlite.d.ts.map +0 -1
  79. package/dist/database/adapters/sqlite.js +0 -241
  80. package/dist/database/adapters/sqlite.js.map +0 -1
  81. package/dist/database/connection-manager.d.ts +0 -135
  82. package/dist/database/connection-manager.d.ts.map +0 -1
  83. package/dist/database/connection-manager.js +0 -362
  84. package/dist/database/connection-manager.js.map +0 -1
  85. package/dist/database/index.d.ts +0 -38
  86. package/dist/database/index.d.ts.map +0 -1
  87. package/dist/database/index.js +0 -60
  88. package/dist/database/index.js.map +0 -1
  89. package/dist/database/middleware.d.ts +0 -122
  90. package/dist/database/middleware.d.ts.map +0 -1
  91. package/dist/database/middleware.js +0 -390
  92. package/dist/database/middleware.js.map +0 -1
  93. package/dist/database/migration.d.ts +0 -62
  94. package/dist/database/migration.d.ts.map +0 -1
  95. package/dist/database/migration.js +0 -423
  96. package/dist/database/migration.js.map +0 -1
  97. package/dist/database/model.d.ts +0 -8
  98. package/dist/database/model.d.ts.map +0 -1
  99. package/dist/database/model.js +0 -167
  100. package/dist/database/model.js.map +0 -1
  101. package/dist/database/query-builder.d.ts +0 -111
  102. package/dist/database/query-builder.d.ts.map +0 -1
  103. package/dist/database/query-builder.js +0 -187
  104. package/dist/database/query-builder.js.map +0 -1
  105. package/dist/database/utils.d.ts +0 -196
  106. package/dist/database/utils.d.ts.map +0 -1
  107. package/dist/database/utils.js +0 -372
  108. package/dist/database/utils.js.map +0 -1
@@ -18,23 +18,23 @@ export class BundleOptimizer {
18
18
  this.traverseComponent(rootComponent, props, analysisContext);
19
19
  return this.generateOptimizationReport();
20
20
  }
21
- traverseComponent(component, props, context) {
21
+ traverseComponent(component, props, _context) {
22
22
  const componentName = this.getComponentName(component);
23
23
  // Track component usage
24
24
  this.usedComponents.add(componentName);
25
25
  context.componentStack.push(componentName);
26
26
  // Track props flow for optimization
27
- context.propsFlow.set(componentName, Object.keys(props));
27
+ context.propsFlow.set(componentName, Object.keys(_props));
28
28
  // Analyze component implementation
29
29
  if (typeof component === 'function') {
30
- this.analyzeFunctionComponent(component, props, context);
30
+ this.analyzeFunctionComponent(component, props, _context);
31
31
  }
32
32
  else if (typeof component === 'object') {
33
- this.analyzeObjectComponent(component, context);
33
+ this.analyzeObjectComponent(component, _context);
34
34
  }
35
35
  context.componentStack.pop();
36
36
  }
37
- analyzeFunctionComponent(component, props, context) {
37
+ analyzeFunctionComponent(component, props, _context) {
38
38
  const componentStr = component.toString();
39
39
  // Detect conditional rendering patterns
40
40
  const conditionalPatterns = [
@@ -50,20 +50,20 @@ export class BundleOptimizer {
50
50
  }
51
51
  // Try to execute with sample props to discover runtime paths
52
52
  try {
53
- const result = component(props);
53
+ const result = component(_props);
54
54
  if (result) {
55
- this.traverseComponent(result, {}, context);
55
+ this.traverseComponent(result, {}, _context);
56
56
  }
57
57
  }
58
58
  catch {
59
59
  // Component might need specific props, skip runtime analysis
60
60
  }
61
61
  }
62
- analyzeObjectComponent(obj, context) {
62
+ analyzeObjectComponent(obj, _context) {
63
63
  if (Array.isArray(obj)) {
64
64
  obj.forEach(item => {
65
65
  if (item && typeof item === 'object') {
66
- this.traverseComponent(item, {}, context);
66
+ this.traverseComponent(item, {}, _context);
67
67
  }
68
68
  });
69
69
  return;
@@ -79,11 +79,11 @@ export class BundleOptimizer {
79
79
  if (props.children) {
80
80
  if (Array.isArray(props.children)) {
81
81
  props.children.forEach(child => {
82
- this.traverseComponent(child, {}, context);
82
+ this.traverseComponent(child, {}, _context);
83
83
  });
84
84
  }
85
85
  else {
86
- this.traverseComponent(props.children, {}, context);
86
+ this.traverseComponent(props.children, {}, _context);
87
87
  }
88
88
  }
89
89
  }
@@ -79,8 +79,8 @@ export function createCacheManager(options = {}) {
79
79
  const componentStr = typeof component === 'function'
80
80
  ? component.name || component.toString()
81
81
  : JSON.stringify(component);
82
- const propsStr = JSON.stringify(props, Object.keys(props).sort());
83
- const contextStr = JSON.stringify(context);
82
+ const propsStr = JSON.stringify(props, Object.keys(_props).sort());
83
+ const contextStr = JSON.stringify(_context);
84
84
  const hash = simpleHash(componentStr + propsStr + contextStr);
85
85
  return `${extractComponentName(component)}_${hash}`;
86
86
  }
@@ -92,7 +92,7 @@ export function createCacheManager(options = {}) {
92
92
  */
93
93
  function get(key, type = 'component') {
94
94
  const cache = caches[type] || caches.component;
95
- const entry = cache.get(key);
95
+ const _entry = cache.get(key);
96
96
  if (!entry) {
97
97
  stats.misses++;
98
98
  if (enableStatistics)
@@ -132,7 +132,7 @@ export function createCacheManager(options = {}) {
132
132
  if (memoryUsage + size > maxMemoryMB * 1024 * 1024) {
133
133
  optimize(type, size);
134
134
  }
135
- const entry = {
135
+ const _entry = {
136
136
  value,
137
137
  timestamp: Date.now(),
138
138
  lastAccess: Date.now(),
@@ -163,7 +163,7 @@ export function createCacheManager(options = {}) {
163
163
  const cache = caches[type];
164
164
  if (!cache)
165
165
  return false;
166
- const entry = cache.get(key);
166
+ const _entry = cache.get(key);
167
167
  if (entry) {
168
168
  updateMemoryUsage(-entry.size);
169
169
  return cache.delete(key);
@@ -172,7 +172,7 @@ export function createCacheManager(options = {}) {
172
172
  }
173
173
  // Check all caches if no type specified
174
174
  for (const [, cache] of Object.entries(caches)) {
175
- const entry = cache.get(key);
175
+ const _entry = cache.get(key);
176
176
  if (entry) {
177
177
  updateMemoryUsage(-entry.size);
178
178
  return cache.delete(key);
@@ -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"}
@@ -0,0 +1,364 @@
1
+ /**
2
+ * Advanced Component Caching System for Coherent.js
3
+ * Provides intelligent caching with dependency tracking and invalidation
4
+ */
5
+ import { deepClone } from '../core/object-utils.js';
6
+ /**
7
+ * Cache entry structure
8
+ */
9
+ class CacheEntry {
10
+ constructor(key, component, deps = [], options = {}) {
11
+ this.key = key;
12
+ this.component = deepClone(component);
13
+ this.deps = new Set(deps);
14
+ this.createdAt = Date.now();
15
+ this.lastAccessed = Date.now();
16
+ this.accessCount = 1;
17
+ this.ttl = options.ttl || 300000; // 5 minutes default
18
+ this.persistent = options.persistent || false;
19
+ }
20
+ isExpired() {
21
+ return !this.persistent && (Date.now() - this.createdAt) > this.ttl;
22
+ }
23
+ touch() {
24
+ this.lastAccessed = Date.now();
25
+ this.accessCount++;
26
+ }
27
+ hasDependency(dep) {
28
+ return this.deps.has(dep);
29
+ }
30
+ addDependency(dep) {
31
+ this.deps.add(dep);
32
+ }
33
+ removeDependency(dep) {
34
+ this.deps.delete(dep);
35
+ }
36
+ }
37
+ /**
38
+ * Component Cache Manager with intelligent invalidation
39
+ */
40
+ export class ComponentCache {
41
+ constructor(options = {}) {
42
+ this.options = {
43
+ maxSize: options.maxSize || 1000,
44
+ defaultTTL: options.defaultTTL || 300000,
45
+ cleanupInterval: options.cleanupInterval || 60000, // 1 minute
46
+ enableStats: options.enableStats !== false,
47
+ ...options
48
+ };
49
+ this.cache = new Map();
50
+ this.dependencies = new Map(); // dependency -> Set of cache keys
51
+ this.stats = {
52
+ hits: 0,
53
+ misses: 0,
54
+ evictions: 0,
55
+ cleanups: 0,
56
+ invalidations: 0
57
+ };
58
+ // Start periodic cleanup
59
+ if (this.options.cleanupInterval > 0) {
60
+ this.cleanupTimer = setInterval(() => {
61
+ this.cleanup();
62
+ }, this.options.cleanupInterval);
63
+ }
64
+ }
65
+ /**
66
+ * Generate cache key from component and props
67
+ */
68
+ generateKey(component, props = {}, context = {}) {
69
+ if (typeof component === 'string') {
70
+ return `str:${component}`;
71
+ }
72
+ if (typeof component === 'function') {
73
+ return `fn:${component.name || 'anonymous'}:${JSON.stringify(_props)}`;
74
+ }
75
+ if (typeof component === 'object' && component !== null) {
76
+ const serialized = this.serializeComponent(component);
77
+ const propsHash = Object.keys(_props).length > 0 ? `:${JSON.stringify(_props)}` : '';
78
+ const contextHash = Object.keys(_context).length > 0 ? `:${JSON.stringify(_context)}` : '';
79
+ return `obj:${serialized}${propsHash}${contextHash}`;
80
+ }
81
+ return `primitive:${String(component)}`;
82
+ }
83
+ /**
84
+ * Serialize component for cache key generation
85
+ */
86
+ serializeComponent(component, maxDepth = 3, currentDepth = 0) {
87
+ if (currentDepth > maxDepth) {
88
+ return '[DEEP]';
89
+ }
90
+ if (typeof component !== 'object' || component === null) {
91
+ return String(component);
92
+ }
93
+ if (Array.isArray(component)) {
94
+ return `[${component.map(item => this.serializeComponent(item, maxDepth, currentDepth + 1)).join(',')}]`;
95
+ }
96
+ const entries = Object.entries(component);
97
+ if (entries.length === 1) {
98
+ const [key, value] = entries[0];
99
+ const serializedValue = typeof value === 'object'
100
+ ? this.serializeComponent(value, maxDepth, currentDepth + 1)
101
+ : String(value);
102
+ return `${key}:${serializedValue}`;
103
+ }
104
+ return '[COMPLEX]';
105
+ }
106
+ /**
107
+ * Get component from cache
108
+ */
109
+ get(key, dependencies = []) {
110
+ const _entry = this.cache.get(key);
111
+ if (!entry) {
112
+ this.stats.misses++;
113
+ return null;
114
+ }
115
+ if (entry.isExpired()) {
116
+ this.cache.delete(key);
117
+ this.removeDependencyMappings(key);
118
+ this.stats.misses++;
119
+ return null;
120
+ }
121
+ entry.touch();
122
+ this.stats.hits++;
123
+ // Update dependency tracking
124
+ dependencies.forEach(dep => {
125
+ if (!entry.hasDependency(dep)) {
126
+ entry.addDependency(dep);
127
+ this.addDependencyMapping(dep, key);
128
+ }
129
+ });
130
+ return deepClone(entry.component);
131
+ }
132
+ /**
133
+ * Set component in cache
134
+ */
135
+ set(key, component, options = {}) {
136
+ // Enforce size limit
137
+ if (this.cache.size >= this.options.maxSize) {
138
+ this.evictLeastUsed();
139
+ }
140
+ const deps = options.dependencies || [];
141
+ const _entry = new CacheEntry(key, component, deps, {
142
+ ttl: options.ttl || this.options.defaultTTL,
143
+ persistent: options.persistent || false
144
+ });
145
+ this.cache.set(key, entry);
146
+ // Update dependency mappings
147
+ deps.forEach(dep => {
148
+ this.addDependencyMapping(dep, key);
149
+ });
150
+ return true;
151
+ }
152
+ /**
153
+ * Check if component exists in cache
154
+ */
155
+ has(key) {
156
+ const _entry = this.cache.get(key);
157
+ return entry && !entry.isExpired();
158
+ }
159
+ /**
160
+ * Invalidate cache entries by dependency
161
+ */
162
+ invalidate(dependency) {
163
+ const dependentKeys = this.dependencies.get(dependency);
164
+ if (!dependentKeys) {
165
+ return 0;
166
+ }
167
+ let invalidated = 0;
168
+ for (const key of dependentKeys) {
169
+ if (this.cache.delete(key)) {
170
+ invalidated++;
171
+ this.stats.invalidations++;
172
+ }
173
+ }
174
+ this.dependencies.delete(dependency);
175
+ return invalidated;
176
+ }
177
+ /**
178
+ * Invalidate multiple dependencies
179
+ */
180
+ invalidateMultiple(dependencies) {
181
+ let totalInvalidated = 0;
182
+ dependencies.forEach(dep => {
183
+ totalInvalidated += this.invalidate(dep);
184
+ });
185
+ return totalInvalidated;
186
+ }
187
+ /**
188
+ * Clear entire cache
189
+ */
190
+ clear() {
191
+ const size = this.cache.size;
192
+ this.cache.clear();
193
+ this.dependencies.clear();
194
+ return size;
195
+ }
196
+ /**
197
+ * Add dependency mapping
198
+ */
199
+ addDependencyMapping(dependency, key) {
200
+ if (!this.dependencies.has(dependency)) {
201
+ this.dependencies.set(dependency, new Set());
202
+ }
203
+ this.dependencies.get(dependency).add(key);
204
+ }
205
+ /**
206
+ * Remove dependency mappings for a cache key
207
+ */
208
+ removeDependencyMappings(key) {
209
+ for (const [dep, keys] of this.dependencies.entries()) {
210
+ keys.delete(key);
211
+ if (keys.size === 0) {
212
+ this.dependencies.delete(dep);
213
+ }
214
+ }
215
+ }
216
+ /**
217
+ * Evict least recently used entry
218
+ */
219
+ evictLeastUsed() {
220
+ let oldestKey = null;
221
+ let oldestTime = Date.now();
222
+ for (const [key, entry] of this.cache.entries()) {
223
+ if (!entry.persistent && entry.lastAccessed < oldestTime) {
224
+ oldestTime = entry.lastAccessed;
225
+ oldestKey = key;
226
+ }
227
+ }
228
+ if (oldestKey) {
229
+ this.cache.delete(oldestKey);
230
+ this.removeDependencyMappings(oldestKey);
231
+ this.stats.evictions++;
232
+ }
233
+ }
234
+ /**
235
+ * Cleanup expired entries
236
+ */
237
+ cleanup() {
238
+ const before = this.cache.size;
239
+ const expiredKeys = [];
240
+ for (const [key, entry] of this.cache.entries()) {
241
+ if (entry.isExpired()) {
242
+ expiredKeys.push(key);
243
+ }
244
+ }
245
+ expiredKeys.forEach(key => {
246
+ this.cache.delete(key);
247
+ this.removeDependencyMappings(key);
248
+ });
249
+ const cleaned = before - this.cache.size;
250
+ if (cleaned > 0) {
251
+ this.stats.cleanups++;
252
+ }
253
+ return cleaned;
254
+ }
255
+ /**
256
+ * Get cache statistics
257
+ */
258
+ getStats() {
259
+ const totalRequests = this.stats.hits + this.stats.misses;
260
+ return {
261
+ size: this.cache.size,
262
+ maxSize: this.options.maxSize,
263
+ hits: this.stats.hits,
264
+ misses: this.stats.misses,
265
+ hitRate: totalRequests > 0 ? (this.stats.hits / totalRequests * 100).toFixed(2) : 0,
266
+ evictions: this.stats.evictions,
267
+ cleanups: this.stats.cleanups,
268
+ invalidations: this.stats.invalidations,
269
+ dependencies: this.dependencies.size,
270
+ memoryUsage: this.estimateMemoryUsage()
271
+ };
272
+ }
273
+ /**
274
+ * Estimate memory usage (rough approximation)
275
+ */
276
+ estimateMemoryUsage() {
277
+ let totalSize = 0;
278
+ for (const entry of this.cache.values()) {
279
+ // Rough estimate: 1KB per component + overhead
280
+ totalSize += JSON.stringify(entry.component).length + 500;
281
+ }
282
+ return Math.round(totalSize / 1024); // Return in KB
283
+ }
284
+ /**
285
+ * Get hot path components (most accessed)
286
+ */
287
+ getHotComponents(limit = 10) {
288
+ const entries = Array.from(this.cache.entries());
289
+ return entries
290
+ .sort((a, b) => b[1].accessCount - a[1].accessCount)
291
+ .slice(0, limit)
292
+ .map(([key, entry]) => ({
293
+ key,
294
+ accessCount: entry.accessCount,
295
+ component: entry.component,
296
+ dependencies: Array.from(entry.deps)
297
+ }));
298
+ }
299
+ /**
300
+ * Get cache recommendations
301
+ */
302
+ getRecommendations() {
303
+ const stats = this.getStats();
304
+ const recommendations = [];
305
+ if (stats.hitRate < 50) {
306
+ recommendations.push({
307
+ type: 'low-hit-rate',
308
+ message: `Hit rate is ${stats.hitRate}%. Consider increasing cache size or TTL.`,
309
+ priority: 'HIGH'
310
+ });
311
+ }
312
+ if (stats.evictions > stats.hits * 0.1) {
313
+ recommendations.push({
314
+ type: 'frequent-evictions',
315
+ message: 'Frequent evictions detected. Consider increasing maxSize.',
316
+ priority: 'MEDIUM'
317
+ });
318
+ }
319
+ if (stats.invalidations > stats.hits * 0.05) {
320
+ recommendations.push({
321
+ type: 'frequent-invalidations',
322
+ message: 'Frequent invalidations. Review dependency tracking.',
323
+ priority: 'LOW'
324
+ });
325
+ }
326
+ return recommendations;
327
+ }
328
+ /**
329
+ * Destroy cache and cleanup
330
+ */
331
+ destroy() {
332
+ if (this.cleanupTimer) {
333
+ clearInterval(this.cleanupTimer);
334
+ }
335
+ this.clear();
336
+ }
337
+ }
338
+ /**
339
+ * Create a new component cache instance
340
+ */
341
+ export function createComponentCache(options = {}) {
342
+ return new ComponentCache(options);
343
+ }
344
+ /**
345
+ * Memoization decorator for components
346
+ */
347
+ export function memoize(component, keyGenerator, options = {}) {
348
+ const cache = new ComponentCache({
349
+ maxSize: options.maxSize || 100,
350
+ defaultTTL: options.ttl || 300000
351
+ });
352
+ return function memoizedComponent(...args) {
353
+ const key = keyGenerator ? keyGenerator(...args) : JSON.stringify(args);
354
+ const cached = cache.get(key, options.dependencies);
355
+ if (cached) {
356
+ return cached;
357
+ }
358
+ const result = typeof component === 'function' ? component(...args) : component;
359
+ cache.set(key, result, options);
360
+ return result;
361
+ };
362
+ }
363
+ export default ComponentCache;
364
+ //# sourceMappingURL=component-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component-cache.js","sourceRoot":"","sources":["../../../../src/performance/component-cache.js"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Real-time performance monitoring and metrics collection
3
3
  */
4
- import { createCacheManager } from './cache-manager.js';
4
+ import { createCacheManager, cacheManager as globalCache } from './cache-manager.js';
5
5
  // Create a dedicated cache instance for monitoring
6
6
  const monitorCache = createCacheManager({
7
7
  maxSize: 1000,
@@ -34,7 +34,7 @@ export class PerformanceMonitor {
34
34
  const startTime = process.hrtime.bigint();
35
35
  const startMemory = process.memoryUsage();
36
36
  try {
37
- const result = renderFn(component, props);
37
+ const result = renderFn(component, _props);
38
38
  const endTime = process.hrtime.bigint();
39
39
  const endMemory = process.memoryUsage();
40
40
  const renderTimeMs = Number(endTime - startTime) / 1000000;
@@ -47,9 +47,9 @@ export class PerformanceMonitor {
47
47
  });
48
48
  return result;
49
49
  }
50
- catch (_error) {
51
- this.recordError(_error, component);
52
- throw _error;
50
+ catch (error) {
51
+ this.recordError(error, component);
52
+ throw error;
53
53
  }
54
54
  }
55
55
  recordRenderMetric(metric) {
@@ -65,11 +65,11 @@ export class PerformanceMonitor {
65
65
  this.metrics.renderTimes = this.metrics.renderTimes.slice(-1000);
66
66
  }
67
67
  }
68
- recordError(_error, component) {
68
+ recordError(error, component) {
69
69
  this.metrics.errors.push({
70
- _error: _error.message,
70
+ error: error.message,
71
71
  component: this.getComponentName(component),
72
- stack: _error.stack,
72
+ stack: error.stack,
73
73
  timestamp: Date.now()
74
74
  });
75
75
  }
@@ -236,8 +236,8 @@ export class PerformanceMonitor {
236
236
  if (errorRate > 5) {
237
237
  recommendations.push({
238
238
  priority: 'high',
239
- issue: 'High _error rate',
240
- suggestion: 'Review component validation and _error handling',
239
+ issue: 'High error rate',
240
+ suggestion: 'Review component validation and error handling',
241
241
  impact: 'Improve stability and user experience'
242
242
  });
243
243
  }