@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,347 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Real-time performance monitoring and metrics collection
|
|
3
|
+
*/
|
|
4
|
+
import { createCacheManager, cacheManager as globalCache } from './cache-manager.js';
|
|
5
|
+
// Create a dedicated cache instance for monitoring
|
|
6
|
+
const monitorCache = createCacheManager({
|
|
7
|
+
maxSize: 1000,
|
|
8
|
+
ttlMs: 300000 // 5 minutes
|
|
9
|
+
});
|
|
10
|
+
export class PerformanceMonitor {
|
|
11
|
+
constructor() {
|
|
12
|
+
this.metrics = {
|
|
13
|
+
renderTimes: [],
|
|
14
|
+
componentCounts: new Map(),
|
|
15
|
+
memoryUsage: [],
|
|
16
|
+
cachePerformance: [],
|
|
17
|
+
errors: []
|
|
18
|
+
};
|
|
19
|
+
this.startTime = Date.now();
|
|
20
|
+
this.isMonitoring = false;
|
|
21
|
+
}
|
|
22
|
+
start() {
|
|
23
|
+
this.isMonitoring = true;
|
|
24
|
+
this.collectSystemMetrics();
|
|
25
|
+
console.log('🚀 Performance monitoring started');
|
|
26
|
+
}
|
|
27
|
+
stop() {
|
|
28
|
+
this.isMonitoring = false;
|
|
29
|
+
console.log('⏹️ Performance monitoring stopped');
|
|
30
|
+
return this.generateReport();
|
|
31
|
+
}
|
|
32
|
+
// Measure render performance
|
|
33
|
+
measureRender(component, props, renderFn) {
|
|
34
|
+
const startTime = process.hrtime.bigint();
|
|
35
|
+
const startMemory = process.memoryUsage();
|
|
36
|
+
try {
|
|
37
|
+
const result = renderFn(component, _props);
|
|
38
|
+
const endTime = process.hrtime.bigint();
|
|
39
|
+
const endMemory = process.memoryUsage();
|
|
40
|
+
const renderTimeMs = Number(endTime - startTime) / 1000000;
|
|
41
|
+
const memoryDelta = endMemory.heapUsed - startMemory.heapUsed;
|
|
42
|
+
this.recordRenderMetric({
|
|
43
|
+
component: this.getComponentName(component),
|
|
44
|
+
renderTime: renderTimeMs,
|
|
45
|
+
memoryDelta,
|
|
46
|
+
resultSize: typeof result === 'string' ? result.length : 0
|
|
47
|
+
});
|
|
48
|
+
return result;
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
this.recordError(error, component);
|
|
52
|
+
throw error;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
recordRenderMetric(metric) {
|
|
56
|
+
this.metrics.renderTimes.push({
|
|
57
|
+
...metric,
|
|
58
|
+
timestamp: Date.now()
|
|
59
|
+
});
|
|
60
|
+
// Update component usage stats
|
|
61
|
+
const current = this.metrics.componentCounts.get(metric.component) || 0;
|
|
62
|
+
this.metrics.componentCounts.set(metric.component, current + 1);
|
|
63
|
+
// Keep only recent metrics
|
|
64
|
+
if (this.metrics.renderTimes.length > 1000) {
|
|
65
|
+
this.metrics.renderTimes = this.metrics.renderTimes.slice(-1000);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
recordError(error, component) {
|
|
69
|
+
this.metrics.errors.push({
|
|
70
|
+
error: error.message,
|
|
71
|
+
component: this.getComponentName(component),
|
|
72
|
+
stack: error.stack,
|
|
73
|
+
timestamp: Date.now()
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
collectSystemMetrics() {
|
|
77
|
+
if (!this.isMonitoring)
|
|
78
|
+
return;
|
|
79
|
+
const memUsage = process.memoryUsage();
|
|
80
|
+
this.metrics.memoryUsage.push({
|
|
81
|
+
timestamp: Date.now(),
|
|
82
|
+
heapUsed: memUsage.heapUsed,
|
|
83
|
+
heapTotal: memUsage.heapTotal,
|
|
84
|
+
external: memUsage.external,
|
|
85
|
+
rss: memUsage.rss
|
|
86
|
+
});
|
|
87
|
+
// Get cache stats if available
|
|
88
|
+
if (monitorCache) {
|
|
89
|
+
const cacheStats = monitorCache.getStats();
|
|
90
|
+
this.metrics.cachePerformance.push({
|
|
91
|
+
timestamp: Date.now(),
|
|
92
|
+
...cacheStats
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
// Keep only recent system metrics
|
|
96
|
+
if (this.metrics.memoryUsage.length > 100) {
|
|
97
|
+
this.metrics.memoryUsage = this.metrics.memoryUsage.slice(-100);
|
|
98
|
+
}
|
|
99
|
+
setTimeout(() => this.collectSystemMetrics(), 5000); // Every 5 seconds
|
|
100
|
+
}
|
|
101
|
+
getComponentName(component) {
|
|
102
|
+
if (typeof component === 'function') {
|
|
103
|
+
return component.name || 'AnonymousFunction';
|
|
104
|
+
}
|
|
105
|
+
if (typeof component === 'object' && component) {
|
|
106
|
+
const keys = Object.keys(component);
|
|
107
|
+
return keys.length > 0 ? keys[0] : 'EmptyObject';
|
|
108
|
+
}
|
|
109
|
+
return 'Unknown';
|
|
110
|
+
}
|
|
111
|
+
generateReport() {
|
|
112
|
+
const now = Date.now();
|
|
113
|
+
const uptimeMs = now - this.startTime;
|
|
114
|
+
return {
|
|
115
|
+
summary: {
|
|
116
|
+
uptime: `${(uptimeMs / 1000).toFixed(2)}s`,
|
|
117
|
+
totalRenders: this.metrics.renderTimes.length,
|
|
118
|
+
averageRenderTime: this.calculateAverageRenderTime(),
|
|
119
|
+
errorRate: this.calculateErrorRate(),
|
|
120
|
+
memoryEfficiency: this.calculateMemoryEfficiency()
|
|
121
|
+
},
|
|
122
|
+
performance: {
|
|
123
|
+
renderTimes: this.getRenderTimeStats(),
|
|
124
|
+
topComponents: this.getTopComponentsByUsage(),
|
|
125
|
+
slowestComponents: this.getSlowestComponents(),
|
|
126
|
+
memoryTrends: this.getMemoryTrends()
|
|
127
|
+
},
|
|
128
|
+
caching: globalCache.getStats(),
|
|
129
|
+
recommendations: this.generatePerformanceRecommendations(),
|
|
130
|
+
rawMetrics: {
|
|
131
|
+
recentRenders: this.metrics.renderTimes.slice(-50),
|
|
132
|
+
recentErrors: this.metrics.errors.slice(-10),
|
|
133
|
+
memorySnapshots: this.metrics.memoryUsage.slice(-20)
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
calculateAverageRenderTime() {
|
|
138
|
+
if (this.metrics.renderTimes.length === 0)
|
|
139
|
+
return 0;
|
|
140
|
+
const total = this.metrics.renderTimes.reduce((sum, metric) => sum + metric.renderTime, 0);
|
|
141
|
+
return (total / this.metrics.renderTimes.length).toFixed(2);
|
|
142
|
+
}
|
|
143
|
+
calculateErrorRate() {
|
|
144
|
+
const totalOperations = this.metrics.renderTimes.length + this.metrics.errors.length;
|
|
145
|
+
if (totalOperations === 0)
|
|
146
|
+
return 0;
|
|
147
|
+
return ((this.metrics.errors.length / totalOperations) * 100).toFixed(2);
|
|
148
|
+
}
|
|
149
|
+
calculateMemoryEfficiency() {
|
|
150
|
+
if (this.metrics.memoryUsage.length < 2)
|
|
151
|
+
return 'N/A';
|
|
152
|
+
const recent = this.metrics.memoryUsage.slice(-10);
|
|
153
|
+
const first = recent[0];
|
|
154
|
+
const last = recent[recent.length - 1];
|
|
155
|
+
// Calculate growth over the recent time period
|
|
156
|
+
const totalGrowth = last.heapUsed - first.heapUsed;
|
|
157
|
+
const timeSpanMs = last.timestamp - first.timestamp;
|
|
158
|
+
const recentRenderCount = this.metrics.renderTimes.filter(r => r.timestamp >= first.timestamp && r.timestamp <= last.timestamp).length;
|
|
159
|
+
if (recentRenderCount === 0)
|
|
160
|
+
return 'N/A';
|
|
161
|
+
const growthPerRender = totalGrowth / recentRenderCount;
|
|
162
|
+
// Convert to KB for readability
|
|
163
|
+
const growthKB = (growthPerRender / 1024).toFixed(2);
|
|
164
|
+
if (Math.abs(growthPerRender) < 1024) {
|
|
165
|
+
return 'Excellent (< 1KB/render in 10s)';
|
|
166
|
+
}
|
|
167
|
+
else if (Math.abs(growthPerRender) < 10240) {
|
|
168
|
+
return `Good (${growthKB}KB/render in ${timeSpanMs}ms)`;
|
|
169
|
+
}
|
|
170
|
+
else if (Math.abs(growthPerRender) < 102400) {
|
|
171
|
+
return `Fair (${growthKB}KB/render in ${timeSpanMs}ms)`;
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
return `Poor (${growthKB}KB/render in ${timeSpanMs}ms)`;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
getRenderTimeStats() {
|
|
178
|
+
if (this.metrics.renderTimes.length === 0)
|
|
179
|
+
return {};
|
|
180
|
+
const times = this.metrics.renderTimes.map(m => m.renderTime).sort((a, b) => a - b);
|
|
181
|
+
return {
|
|
182
|
+
min: times[0].toFixed(2),
|
|
183
|
+
max: times[times.length - 1].toFixed(2),
|
|
184
|
+
median: times[Math.floor(times.length / 2)].toFixed(2),
|
|
185
|
+
p95: times[Math.floor(times.length * 0.95)].toFixed(2),
|
|
186
|
+
p99: times[Math.floor(times.length * 0.99)].toFixed(2)
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
getTopComponentsByUsage(limit = 10) {
|
|
190
|
+
return Array.from(this.metrics.componentCounts.entries())
|
|
191
|
+
.sort(([, a], [, b]) => b - a)
|
|
192
|
+
.slice(0, limit)
|
|
193
|
+
.map(([component, count]) => ({ component, count }));
|
|
194
|
+
}
|
|
195
|
+
getSlowestComponents(limit = 10) {
|
|
196
|
+
const componentTimes = new Map();
|
|
197
|
+
for (const metric of this.metrics.renderTimes) {
|
|
198
|
+
const existing = componentTimes.get(metric.component) || [];
|
|
199
|
+
existing.push(metric.renderTime);
|
|
200
|
+
componentTimes.set(metric.component, existing);
|
|
201
|
+
}
|
|
202
|
+
return Array.from(componentTimes.entries())
|
|
203
|
+
.map(([component, times]) => ({
|
|
204
|
+
component,
|
|
205
|
+
avgTime: (times.reduce((a, b) => a + b, 0) / times.length).toFixed(2),
|
|
206
|
+
maxTime: Math.max(...times).toFixed(2),
|
|
207
|
+
count: times.length
|
|
208
|
+
}))
|
|
209
|
+
.sort((a, b) => parseFloat(b.avgTime) - parseFloat(a.avgTime))
|
|
210
|
+
.slice(0, limit);
|
|
211
|
+
}
|
|
212
|
+
getMemoryTrends() {
|
|
213
|
+
if (this.metrics.memoryUsage.length < 2)
|
|
214
|
+
return {};
|
|
215
|
+
const recent = this.metrics.memoryUsage.slice(-20);
|
|
216
|
+
const trend = this.calculateTrend(recent.map(m => m.heapUsed));
|
|
217
|
+
return {
|
|
218
|
+
direction: trend > 0 ? 'increasing' : trend < 0 ? 'decreasing' : 'stable',
|
|
219
|
+
rate: `${Math.abs(trend).toFixed(2)} bytes/second`,
|
|
220
|
+
currentHeap: `${(recent[recent.length - 1].heapUsed / 1024 / 1024).toFixed(2)}MB`,
|
|
221
|
+
trend: trend
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
generatePerformanceRecommendations() {
|
|
225
|
+
const recommendations = [];
|
|
226
|
+
const avgRenderTime = parseFloat(this.calculateAverageRenderTime());
|
|
227
|
+
if (avgRenderTime > 10) {
|
|
228
|
+
recommendations.push({
|
|
229
|
+
priority: 'high',
|
|
230
|
+
issue: 'High average render time',
|
|
231
|
+
suggestion: 'Enable caching for frequently rendered components',
|
|
232
|
+
impact: 'Could reduce render time by 70-90%'
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
const errorRate = parseFloat(this.calculateErrorRate());
|
|
236
|
+
if (errorRate > 5) {
|
|
237
|
+
recommendations.push({
|
|
238
|
+
priority: 'high',
|
|
239
|
+
issue: 'High error rate',
|
|
240
|
+
suggestion: 'Review component validation and error handling',
|
|
241
|
+
impact: 'Improve stability and user experience'
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
const memTrends = this.getMemoryTrends();
|
|
245
|
+
if (memTrends.direction === 'increasing' && memTrends.trend > 1000000) {
|
|
246
|
+
recommendations.push({
|
|
247
|
+
priority: 'medium',
|
|
248
|
+
issue: 'Memory usage increasing',
|
|
249
|
+
suggestion: 'Check for memory leaks, implement cleanup for cached objects',
|
|
250
|
+
impact: 'Prevent out-of-memory errors in production'
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
const topComponents = this.getTopComponentsByUsage(5);
|
|
254
|
+
const hotComponents = topComponents.filter(c => c.count > this.metrics.renderTimes.length * 0.1);
|
|
255
|
+
// Filter out components that are already static cached
|
|
256
|
+
const uncachedHotComponents = hotComponents.filter(c => {
|
|
257
|
+
return !this.staticCachedComponents || !this.staticCachedComponents.has(c.component);
|
|
258
|
+
});
|
|
259
|
+
if (uncachedHotComponents.length > 0) {
|
|
260
|
+
recommendations.push({
|
|
261
|
+
priority: 'medium',
|
|
262
|
+
issue: 'High frequency components detected',
|
|
263
|
+
suggestion: `Consider static caching for: ${uncachedHotComponents.map(c => c.component).join(', ')}`,
|
|
264
|
+
impact: 'Significant performance improvement for hot paths'
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
else if (hotComponents.length > 0) {
|
|
268
|
+
// All hot components are already static cached - provide positive feedback
|
|
269
|
+
recommendations.push({
|
|
270
|
+
priority: 'low',
|
|
271
|
+
issue: 'Hot components optimized',
|
|
272
|
+
suggestion: `Static caching active for: ${hotComponents.map(c => c.component).join(', ')}`,
|
|
273
|
+
impact: 'Excellent performance optimization already implemented'
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
return recommendations;
|
|
277
|
+
}
|
|
278
|
+
calculateTrend(values) {
|
|
279
|
+
if (values.length < 2)
|
|
280
|
+
return 0;
|
|
281
|
+
const n = values.length;
|
|
282
|
+
const sumX = (n * (n - 1)) / 2;
|
|
283
|
+
const sumY = values.reduce((a, b) => a + b, 0);
|
|
284
|
+
const sumXY = values.reduce((sum, y, x) => sum + x * y, 0);
|
|
285
|
+
const sumXX = (n * (n - 1) * (2 * n - 1)) / 6;
|
|
286
|
+
return (n * sumXY - sumX * sumY) / (n * sumXX - sumX * sumX);
|
|
287
|
+
}
|
|
288
|
+
// Real-time monitoring interface
|
|
289
|
+
getRealtimeStats() {
|
|
290
|
+
const recent = this.metrics.renderTimes.slice(-10);
|
|
291
|
+
const recentMemory = this.metrics.memoryUsage.slice(-3);
|
|
292
|
+
return {
|
|
293
|
+
currentRenderRate: recent.length > 0 ? `${(recent.length / 10).toFixed(1)}/s` : '0/s',
|
|
294
|
+
avgRecentRenderTime: recent.length > 0
|
|
295
|
+
? `${(recent.reduce((sum, m) => sum + m.renderTime, 0) / recent.length).toFixed(2)}ms`
|
|
296
|
+
: '0ms',
|
|
297
|
+
memoryUsage: recentMemory.length > 0
|
|
298
|
+
? `${(recentMemory[recentMemory.length - 1].heapUsed / 1024 / 1024).toFixed(2)}MB`
|
|
299
|
+
: '0MB',
|
|
300
|
+
cacheHitRate: globalCache.getStats().hitRate,
|
|
301
|
+
activeComponents: this.metrics.componentCounts.size
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Record component render performance
|
|
306
|
+
*/
|
|
307
|
+
recordRender(componentName, startTime, endTime, metadata = {}) {
|
|
308
|
+
if (!this.enabled)
|
|
309
|
+
return;
|
|
310
|
+
const renderTime = endTime - startTime;
|
|
311
|
+
const renderData = {
|
|
312
|
+
component: componentName,
|
|
313
|
+
duration: renderTime,
|
|
314
|
+
timestamp: Date.now(),
|
|
315
|
+
...metadata
|
|
316
|
+
};
|
|
317
|
+
// Store render time
|
|
318
|
+
this.renderTimes.push(renderData);
|
|
319
|
+
// Update component stats
|
|
320
|
+
if (!this.componentStats.has(componentName)) {
|
|
321
|
+
this.componentStats.set(componentName, {
|
|
322
|
+
renders: 0,
|
|
323
|
+
totalTime: 0,
|
|
324
|
+
avgTime: 0,
|
|
325
|
+
minTime: Infinity,
|
|
326
|
+
maxTime: 0
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
const stats = this.componentStats.get(componentName);
|
|
330
|
+
stats.renders++;
|
|
331
|
+
stats.totalTime += renderTime;
|
|
332
|
+
stats.avgTime = stats.totalTime / stats.renders;
|
|
333
|
+
stats.minTime = Math.min(stats.minTime, renderTime);
|
|
334
|
+
stats.maxTime = Math.max(stats.maxTime, renderTime);
|
|
335
|
+
// Cleanup old data (keep last 1000 renders)
|
|
336
|
+
if (this.renderTimes.length > 1000) {
|
|
337
|
+
this.renderTimes = this.renderTimes.slice(-1000);
|
|
338
|
+
}
|
|
339
|
+
// Warning for slow renders
|
|
340
|
+
if (renderTime > this.thresholds.renderTime) {
|
|
341
|
+
console.warn(`Slow render detected: ${componentName} took ${renderTime.toFixed(2)}ms`);
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
// Global monitor instance
|
|
346
|
+
export const performanceMonitor = new PerformanceMonitor();
|
|
347
|
+
//# sourceMappingURL=monitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monitor.js","sourceRoot":"","sources":["../../../../src/performance/monitor.js"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,kBAAkB,EAAE,YAAY,IAAI,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAErF,mDAAmD;AACnD,MAAM,YAAY,GAAG,kBAAkB,CAAC;IACpC,OAAO,EAAE,IAAI;IACb,KAAK,EAAE,MAAM,CAAC,YAAY;CAC7B,CAAC,CAAC;AAEH,MAAM,OAAO,kBAAkB;IAC3B;QACI,IAAI,CAAC,OAAO,GAAG;YACX,WAAW,EAAE,EAAE;YACf,eAAe,EAAE,IAAI,GAAG,EAAE;YAC1B,WAAW,EAAE,EAAE;YACf,gBAAgB,EAAE,EAAE;YACpB,MAAM,EAAE,EAAE;SACb,CAAC;QAEF,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC5B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;IAC9B,CAAC;IAED,KAAK;QACD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IACrD,CAAC;IAED,IAAI;QACA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC;IACjC,CAAC;IAED,6BAA6B;IAC7B,aAAa,CAAC,SAAS,EAAE,KAAK,EAAE,QAAQ;QACpC,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QAC1C,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;QAE1C,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAC1C,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACxC,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;YAExC,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC;YAC3D,MAAM,WAAW,GAAG,SAAS,CAAC,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC;YAE9D,IAAI,CAAC,kBAAkB,CAAC;gBACpB,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;gBAC3C,UAAU,EAAE,YAAY;gBACxB,WAAW;gBACX,UAAU,EAAE,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;aAC7D,CAAC,CAAC;YAEH,OAAO,MAAM,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YACnC,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC;IAED,kBAAkB,CAAC,MAAM;QACrB,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC;YAC1B,GAAG,MAAM;YACT,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACxB,CAAC,CAAC;QAEH,+BAA+B;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACxE,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;QAEhE,2BAA2B;QAC3B,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;YACzC,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;QACrE,CAAC;IACL,CAAC;IAED,WAAW,CAAC,KAAK,EAAE,SAAS;QACxB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;YACrB,KAAK,EAAE,KAAK,CAAC,OAAO;YACpB,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;YAC3C,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACxB,CAAC,CAAC;IACP,CAAC;IAED,oBAAoB;QAChB,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,OAAO;QAE/B,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;QACvC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC;YAC1B,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,SAAS,EAAE,QAAQ,CAAC,SAAS;YAC7B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,GAAG,EAAE,QAAQ,CAAC,GAAG;SACpB,CAAC,CAAC;QAEH,+BAA+B;QAC/B,IAAI,YAAY,EAAE,CAAC;YACf,MAAM,UAAU,GAAG,YAAY,CAAC,QAAQ,EAAE,CAAC;YAC3C,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC;gBAC/B,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;gBACrB,GAAG,UAAU;aAChB,CAAC,CAAC;QACP,CAAC;QAED,kCAAkC;QAClC,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YACxC,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;QACpE,CAAC;QAED,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,kBAAkB;IAC3E,CAAC;IAED,gBAAgB,CAAC,SAAS;QACtB,IAAI,OAAO,SAAS,KAAK,UAAU,EAAE,CAAC;YAClC,OAAO,SAAS,CAAC,IAAI,IAAI,mBAAmB,CAAC;QACjD,CAAC;QACD,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,EAAE,CAAC;YAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACpC,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;QACrD,CAAC;QACD,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,cAAc;QACV,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;QAEtC,OAAO;YACH,OAAO,EAAE;gBACL,MAAM,EAAE,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;gBAC1C,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM;gBAC7C,iBAAiB,EAAE,IAAI,CAAC,0BAA0B,EAAE;gBACpD,SAAS,EAAE,IAAI,CAAC,kBAAkB,EAAE;gBACpC,gBAAgB,EAAE,IAAI,CAAC,yBAAyB,EAAE;aACrD;YAED,WAAW,EAAE;gBACT,WAAW,EAAE,IAAI,CAAC,kBAAkB,EAAE;gBACtC,aAAa,EAAE,IAAI,CAAC,uBAAuB,EAAE;gBAC7C,iBAAiB,EAAE,IAAI,CAAC,oBAAoB,EAAE;gBAC9C,YAAY,EAAE,IAAI,CAAC,eAAe,EAAE;aACvC;YAED,OAAO,EAAE,WAAW,CAAC,QAAQ,EAAE;YAE/B,eAAe,EAAE,IAAI,CAAC,kCAAkC,EAAE;YAE1D,UAAU,EAAE;gBACR,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBAClD,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBAC5C,eAAe,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;aACvD;SACJ,CAAC;IACN,CAAC;IAED,0BAA0B;QACtB,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QAEpD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QAC3F,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,kBAAkB;QACd,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;QACrF,IAAI,eAAe,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QAEpC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,eAAe,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC7E,CAAC;IAED,yBAAyB;QACrB,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QAEtD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QACnD,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAEvC,+CAA+C;QAC/C,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QACnD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;QACpD,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CACrD,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CACvE,CAAC,MAAM,CAAC;QAET,IAAI,iBAAiB,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAC1C,MAAM,eAAe,GAAG,WAAW,GAAG,iBAAiB,CAAC;QAExD,gCAAgC;QAChC,MAAM,QAAQ,GAAG,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAErD,IAAI,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,IAAI,EAAE,CAAC;YACnC,OAAO,iCAAiC,CAAC;QAC7C,CAAC;aAAM,IAAI,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,KAAK,EAAE,CAAC;YAC3C,OAAO,SAAS,QAAQ,gBAAgB,UAAU,KAAK,CAAC;QAC5D,CAAC;aAAM,IAAI,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,MAAM,EAAE,CAAC;YAC5C,OAAO,SAAS,QAAQ,gBAAgB,UAAU,KAAK,CAAC;QAC5D,CAAC;aAAM,CAAC;YACJ,OAAO,SAAS,QAAQ,gBAAgB,UAAU,KAAK,CAAC;QAC5D,CAAC;IACL,CAAC;IAED,kBAAkB;QACd,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAErD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAEpF,OAAO;YACH,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;YACxB,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;YACvC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;YACtD,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;YACtD,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;SACzD,CAAC;IACN,CAAC;IAED,uBAAuB,CAAC,KAAK,GAAG,EAAE;QAC9B,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;aACpD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;aAC7B,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;aACf,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,oBAAoB,CAAC,KAAK,GAAG,EAAE;QAC3B,MAAM,cAAc,GAAG,IAAI,GAAG,EAAE,CAAC;QAEjC,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YAC5C,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YAC5D,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACjC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QACnD,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;aACtC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;YAC1B,SAAS;YACT,OAAO,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;YACrE,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;YACtC,KAAK,EAAE,KAAK,CAAC,MAAM;SACtB,CAAC,CAAC;aACF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;aAC7D,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACzB,CAAC;IAED,eAAe;QACX,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,EAAE,CAAC;QAEnD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QAE/D,OAAO;YACH,SAAS,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ;YACzE,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAG,eAAe;YACpD,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAG,IAAI;YACnF,KAAK,EAAE,KAAK;SACf,CAAC;IACN,CAAC;IAED,kCAAkC;QAC9B,MAAM,eAAe,GAAG,EAAE,CAAC;QAC3B,MAAM,aAAa,GAAG,UAAU,CAAC,IAAI,CAAC,0BAA0B,EAAE,CAAC,CAAC;QAEpE,IAAI,aAAa,GAAG,EAAE,EAAE,CAAC;YACrB,eAAe,CAAC,IAAI,CAAC;gBACjB,QAAQ,EAAE,MAAM;gBAChB,KAAK,EAAE,0BAA0B;gBACjC,UAAU,EAAE,mDAAmD;gBAC/D,MAAM,EAAE,oCAAoC;aAC/C,CAAC,CAAC;QACP,CAAC;QAED,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;QACxD,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;YAChB,eAAe,CAAC,IAAI,CAAC;gBACjB,QAAQ,EAAE,MAAM;gBAChB,KAAK,EAAE,iBAAiB;gBACxB,UAAU,EAAE,gDAAgD;gBAC5D,MAAM,EAAE,uCAAuC;aAClD,CAAC,CAAC;QACP,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACzC,IAAI,SAAS,CAAC,SAAS,KAAK,YAAY,IAAI,SAAS,CAAC,KAAK,GAAG,OAAO,EAAE,CAAC;YACpE,eAAe,CAAC,IAAI,CAAC;gBACjB,QAAQ,EAAE,QAAQ;gBAClB,KAAK,EAAE,yBAAyB;gBAChC,UAAU,EAAE,8DAA8D;gBAC1E,MAAM,EAAE,4CAA4C;aACvD,CAAC,CAAC;QACP,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC;QACtD,MAAM,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;QAEjG,uDAAuD;QACvD,MAAM,qBAAqB,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;YACnD,OAAO,CAAC,IAAI,CAAC,sBAAsB,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACzF,CAAC,CAAC,CAAC;QAEH,IAAI,qBAAqB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,eAAe,CAAC,IAAI,CAAC;gBACjB,QAAQ,EAAE,QAAQ;gBAClB,KAAK,EAAE,oCAAoC;gBAC3C,UAAU,EAAE,gCAAgC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACpG,MAAM,EAAE,mDAAmD;aAC9D,CAAC,CAAC;QACP,CAAC;aAAM,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,2EAA2E;YAC3E,eAAe,CAAC,IAAI,CAAC;gBACjB,QAAQ,EAAE,KAAK;gBACf,KAAK,EAAE,0BAA0B;gBACjC,UAAU,EAAE,8BAA8B,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBAC1F,MAAM,EAAE,wDAAwD;aACnE,CAAC,CAAC;QACP,CAAC;QAED,OAAO,eAAe,CAAC;IAC3B,CAAC;IAED,cAAc,CAAC,MAAM;QACjB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC;QAEhC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;QACxB,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3D,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAE9C,OAAO,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;IACjE,CAAC;IAED,iCAAiC;IACjC,gBAAgB;QACZ,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QACnD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAExD,OAAO;YACH,iBAAiB,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAG,IAAI,CAAC,CAAC,CAAC,KAAK;YACvF,mBAAmB,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC;gBAClC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAG,IAAI;gBACxF,CAAC,CAAC,KAAK;YACX,WAAW,EAAE,YAAY,CAAC,MAAM,GAAG,CAAC;gBAChC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAG,IAAI;gBACpF,CAAC,CAAC,KAAK;YACX,YAAY,EAAE,WAAW,CAAC,QAAQ,EAAE,CAAC,OAAO;YAC5C,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI;SACtD,CAAC;IACN,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,GAAG,EAAE;QACzD,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAE1B,MAAM,UAAU,GAAG,OAAO,GAAG,SAAS,CAAC;QACvC,MAAM,UAAU,GAAG;YACf,SAAS,EAAE,aAAa;YACxB,QAAQ,EAAE,UAAU;YACpB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,GAAG,QAAQ;SACd,CAAC;QAEF,oBAAoB;QACpB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAElC,yBAAyB;QACzB,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;YAC1C,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,aAAa,EAAE;gBACnC,OAAO,EAAE,CAAC;gBACV,SAAS,EAAE,CAAC;gBACZ,OAAO,EAAE,CAAC;gBACV,OAAO,EAAE,QAAQ;gBACjB,OAAO,EAAE,CAAC;aACb,CAAC,CAAC;QACP,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACrD,KAAK,CAAC,OAAO,EAAE,CAAC;QAChB,KAAK,CAAC,SAAS,IAAI,UAAU,CAAC;QAC9B,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC;QAChD,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACpD,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAEpD,4CAA4C;QAC5C,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;YACjC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;QACrD,CAAC;QAED,2BAA2B;QAC3B,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;YAC1C,OAAO,CAAC,IAAI,CAAC,yBAAyB,aAAa,SAAS,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC3F,CAAC;IACL,CAAC;CACJ;AAED,0BAA0B;AAC1B,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,kBAAkB,EAAE,CAAC"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
export namespace DEFAULT_RENDERER_CONFIG {
|
|
2
|
+
let maxDepth: number;
|
|
3
|
+
let enableValidation: boolean;
|
|
4
|
+
let enableMonitoring: boolean;
|
|
5
|
+
let validateInput: boolean;
|
|
6
|
+
let enableCache: boolean;
|
|
7
|
+
let minify: boolean;
|
|
8
|
+
let cacheSize: number;
|
|
9
|
+
let cacheTTL: number;
|
|
10
|
+
let chunkSize: number;
|
|
11
|
+
let bufferSize: number;
|
|
12
|
+
let enableMetrics: boolean;
|
|
13
|
+
let yieldThreshold: number;
|
|
14
|
+
let encoding: string;
|
|
15
|
+
let enableHydration: boolean;
|
|
16
|
+
let namespace: null;
|
|
17
|
+
let enablePerformanceTracking: boolean;
|
|
18
|
+
let performanceThreshold: number;
|
|
19
|
+
let enableDevWarnings: boolean;
|
|
20
|
+
let enableDebugLogging: boolean;
|
|
21
|
+
let errorFallback: string;
|
|
22
|
+
let throwOnError: boolean;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Base renderer class with common functionality
|
|
26
|
+
*/
|
|
27
|
+
export class BaseRenderer {
|
|
28
|
+
constructor(options?: {});
|
|
29
|
+
config: any;
|
|
30
|
+
metrics: {
|
|
31
|
+
startTime: null;
|
|
32
|
+
endTime: null;
|
|
33
|
+
elementsProcessed: number;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Validate and merge configuration options
|
|
37
|
+
*/
|
|
38
|
+
validateAndMergeConfig(options: any): any;
|
|
39
|
+
/**
|
|
40
|
+
* Get configuration for specific renderer type
|
|
41
|
+
*/
|
|
42
|
+
getRendererConfig(rendererType: any): any;
|
|
43
|
+
/**
|
|
44
|
+
* Validate component structure
|
|
45
|
+
*/
|
|
46
|
+
validateComponent(component: any): boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Check if component is valid for rendering
|
|
49
|
+
*/
|
|
50
|
+
isValidComponent(component: any): any;
|
|
51
|
+
/**
|
|
52
|
+
* Validate rendering depth to prevent stack overflow
|
|
53
|
+
*/
|
|
54
|
+
validateDepth(depth: any): void;
|
|
55
|
+
/**
|
|
56
|
+
* Handle different component types with consistent logic
|
|
57
|
+
*/
|
|
58
|
+
processComponentType(component: any): {
|
|
59
|
+
type: string;
|
|
60
|
+
value: any;
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* Execute function components with error handling
|
|
64
|
+
*/
|
|
65
|
+
executeFunctionComponent(func: any, depth?: number): any;
|
|
66
|
+
/**
|
|
67
|
+
* Process element children consistently
|
|
68
|
+
*/
|
|
69
|
+
processChildren(children: any, options: any, depth: any): void[];
|
|
70
|
+
/**
|
|
71
|
+
* Extract and process element attributes
|
|
72
|
+
*/
|
|
73
|
+
extractElementAttributes(props: any): any;
|
|
74
|
+
/**
|
|
75
|
+
* Record performance metrics
|
|
76
|
+
*/
|
|
77
|
+
recordPerformance(operation: any, startTime: any, fromCache?: boolean, metadata?: {}): void;
|
|
78
|
+
/**
|
|
79
|
+
* Record error for monitoring
|
|
80
|
+
*/
|
|
81
|
+
recordError(operation: any, error: any, metadata?: {}): void;
|
|
82
|
+
/**
|
|
83
|
+
* Get current timestamp with fallback
|
|
84
|
+
*/
|
|
85
|
+
getCurrentTime(): number;
|
|
86
|
+
/**
|
|
87
|
+
* Start performance timing
|
|
88
|
+
*/
|
|
89
|
+
startTiming(): void;
|
|
90
|
+
/**
|
|
91
|
+
* End performance timing
|
|
92
|
+
*/
|
|
93
|
+
endTiming(): void;
|
|
94
|
+
/**
|
|
95
|
+
* Get performance metrics
|
|
96
|
+
*/
|
|
97
|
+
getMetrics(): {
|
|
98
|
+
duration: number;
|
|
99
|
+
elementsPerSecond: number;
|
|
100
|
+
startTime: null;
|
|
101
|
+
endTime: null;
|
|
102
|
+
elementsProcessed: number;
|
|
103
|
+
};
|
|
104
|
+
/**
|
|
105
|
+
* Reset metrics for new render
|
|
106
|
+
*/
|
|
107
|
+
resetMetrics(): void;
|
|
108
|
+
/**
|
|
109
|
+
* Abstract method - must be implemented by subclasses
|
|
110
|
+
*/
|
|
111
|
+
renderComponent(): void;
|
|
112
|
+
/**
|
|
113
|
+
* Abstract method - must be implemented by subclasses
|
|
114
|
+
*/
|
|
115
|
+
render(): void;
|
|
116
|
+
}
|
|
117
|
+
export namespace RendererUtils {
|
|
118
|
+
/**
|
|
119
|
+
* Check if element is static (no functions)
|
|
120
|
+
*/
|
|
121
|
+
function isStaticElement(element: any): any;
|
|
122
|
+
/**
|
|
123
|
+
* Check if object has functions (for caching decisions)
|
|
124
|
+
*/
|
|
125
|
+
function hasFunctions(obj: any, visited?: WeakSet<object>): boolean;
|
|
126
|
+
/**
|
|
127
|
+
* Get element complexity score
|
|
128
|
+
*/
|
|
129
|
+
function getElementComplexity(element: any): number;
|
|
130
|
+
/**
|
|
131
|
+
* Generate cache key for element
|
|
132
|
+
*/
|
|
133
|
+
function generateCacheKey(tagName: any, element: any): string | null;
|
|
134
|
+
/**
|
|
135
|
+
* Check if element is cacheable
|
|
136
|
+
*/
|
|
137
|
+
function isCacheable(element: any, options: any): boolean;
|
|
138
|
+
}
|
|
139
|
+
export default BaseRenderer;
|
|
140
|
+
//# sourceMappingURL=base-renderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-renderer.d.ts","sourceRoot":"","sources":["../../../../src/rendering/base-renderer.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAyDA;;GAEG;AACH;IACI,0BAOC;IANG,YAAkD;IAClD;;;;MAIC;IAGL;;OAEG;IACH,0CAqCC;IAED;;OAEG;IACH,0CA8BC;IAED;;OAEG;IACH,2CAKC;IAED;;OAEG;IACH,sCAOC;IAED;;OAEG;IACH,gCAIC;IAED;;OAEG;IACH;;;MAiCC;IAED;;OAEG;IACH,yDAkCC;IAED;;OAEG;IACH,iEASC;IAED;;OAEG;IACH,0CAOC;IAED;;OAEG;IACH,4FASC;IAED;;OAEG;IACH,6DAIC;IAED;;OAEG;IACH,yBAKC;IAED;;OAEG;IACH,oBAEC;IAED;;OAEG;IACH,kBAEC;IAED;;OAEG;IACH;;;;;;MAUC;IAED;;OAEG;IACH,qBAMC;IAED;;OAEG;IACH,wBAEC;IAED;;OAEG;IACH,eAEC;CACJ;;IAMG;;OAEG;IACH,4CAoBC;IAED;;OAEG;IACH,oEAWC;IAED;;OAEG;IACH,oDAaC;IAED;;OAEG;IACH,qEAmBC;IAED;;OAEG;IACH,0DAeC"}
|