@tachui/devtools 0.8.0-alpha
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 +363 -0
- package/README.md +189 -0
- package/dist/build-time/detection.d.ts +32 -0
- package/dist/build-time/detection.d.ts.map +1 -0
- package/dist/build-time/index.d.ts +84 -0
- package/dist/build-time/index.d.ts.map +1 -0
- package/dist/build-time/plugins.d.ts +75 -0
- package/dist/build-time/plugins.d.ts.map +1 -0
- package/dist/build-time/rules.d.ts +73 -0
- package/dist/build-time/rules.d.ts.map +1 -0
- package/dist/build-time/transformer.d.ts +23 -0
- package/dist/build-time/transformer.d.ts.map +1 -0
- package/dist/build-time/types.d.ts +212 -0
- package/dist/build-time/types.d.ts.map +1 -0
- package/dist/debug/advanced-debugging.d.ts +327 -0
- package/dist/debug/advanced-debugging.d.ts.map +1 -0
- package/dist/debug/debug.d.ts +61 -0
- package/dist/debug/debug.d.ts.map +1 -0
- package/dist/debug/developer-experience.d.ts +261 -0
- package/dist/debug/developer-experience.d.ts.map +1 -0
- package/dist/debug/development-warnings.d.ts +42 -0
- package/dist/debug/development-warnings.d.ts.map +1 -0
- package/dist/debug/documentation-integration.d.ts +269 -0
- package/dist/debug/documentation-integration.d.ts.map +1 -0
- package/dist/debug/enhanced-errors.d.ts +176 -0
- package/dist/debug/enhanced-errors.d.ts.map +1 -0
- package/dist/debug/enhanced-types.d.ts +284 -0
- package/dist/debug/enhanced-types.d.ts.map +1 -0
- package/dist/debug/ide-integration.d.ts +328 -0
- package/dist/debug/ide-integration.d.ts.map +1 -0
- package/dist/debug/index.d.ts +12 -0
- package/dist/debug/index.d.ts.map +1 -0
- package/dist/debug/index.js +1251 -0
- package/dist/debug/index.js.map +1 -0
- package/dist/debug/validation-debug-tools.d.ts +228 -0
- package/dist/debug/validation-debug-tools.d.ts.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +216229 -0
- package/dist/index.js.map +1 -0
- package/dist/inspector/index.d.ts +232 -0
- package/dist/inspector/index.d.ts.map +1 -0
- package/dist/inspector/index.js +525 -0
- package/dist/inspector/index.js.map +1 -0
- package/dist/plugins/simplified-error-handler.d.ts +83 -0
- package/dist/plugins/simplified-error-handler.d.ts.map +1 -0
- package/dist/profiler/index.d.ts +21 -0
- package/dist/profiler/index.d.ts.map +1 -0
- package/dist/profiler/index.js +519 -0
- package/dist/profiler/index.js.map +1 -0
- package/dist/profiler/performance-optimizer.d.ts +115 -0
- package/dist/profiler/performance-optimizer.d.ts.map +1 -0
- package/dist/profiler/production-monitoring.d.ts +150 -0
- package/dist/profiler/production-monitoring.d.ts.map +1 -0
- package/dist/runtime/error-boundary.d.ts +302 -0
- package/dist/runtime/error-boundary.d.ts.map +1 -0
- package/dist/runtime/error-recovery.d.ts +267 -0
- package/dist/runtime/error-recovery.d.ts.map +1 -0
- package/dist/runtime/error-reporting.d.ts +287 -0
- package/dist/runtime/error-reporting.d.ts.map +1 -0
- package/dist/runtime/error-utils.d.ts +204 -0
- package/dist/runtime/error-utils.d.ts.map +1 -0
- package/dist/runtime/performance.d.ts +217 -0
- package/dist/runtime/performance.d.ts.map +1 -0
- package/dist/testing/index.d.ts +29 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +47 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/validation/debug-tools-stub.d.ts +67 -0
- package/dist/validation/debug-tools-stub.d.ts.map +1 -0
- package/dist/validation/enhanced-runtime.d.ts +310 -0
- package/dist/validation/enhanced-runtime.d.ts.map +1 -0
- package/dist/validation/error-reporting.d.ts +186 -0
- package/dist/validation/error-reporting.d.ts.map +1 -0
- package/package.json +78 -0
|
@@ -0,0 +1,525 @@
|
|
|
1
|
+
import { createSignal } from "@tachui/core";
|
|
2
|
+
class DevTools {
|
|
3
|
+
static instance;
|
|
4
|
+
config = {
|
|
5
|
+
autoEnable: false,
|
|
6
|
+
trackAllComponents: true,
|
|
7
|
+
trackMemoryUsage: true,
|
|
8
|
+
enableWarnings: true,
|
|
9
|
+
enableErrors: true,
|
|
10
|
+
maxTreeDepth: 50,
|
|
11
|
+
updateInterval: 100
|
|
12
|
+
};
|
|
13
|
+
state = {
|
|
14
|
+
enabled: false,
|
|
15
|
+
performanceTracking: false,
|
|
16
|
+
componentInspection: false,
|
|
17
|
+
reactiveDebugging: false,
|
|
18
|
+
memoryTracking: false,
|
|
19
|
+
warningsEnabled: true,
|
|
20
|
+
logLevel: "warn"
|
|
21
|
+
};
|
|
22
|
+
componentTree = /* @__PURE__ */ new Map();
|
|
23
|
+
componentRegistry = /* @__PURE__ */ new Map();
|
|
24
|
+
debugEvents = [];
|
|
25
|
+
activeComponents = /* @__PURE__ */ new Set();
|
|
26
|
+
// Reactive signals for real-time updates
|
|
27
|
+
treeSignal;
|
|
28
|
+
setTree;
|
|
29
|
+
eventsSignal;
|
|
30
|
+
setEvents;
|
|
31
|
+
stateSignal;
|
|
32
|
+
setState;
|
|
33
|
+
// Update timer
|
|
34
|
+
updateTimer = null;
|
|
35
|
+
constructor() {
|
|
36
|
+
const [treeSignal, setTree] = createSignal(
|
|
37
|
+
/* @__PURE__ */ new Map()
|
|
38
|
+
);
|
|
39
|
+
const [eventsSignal, setEvents] = createSignal([]);
|
|
40
|
+
const [stateSignal, setState] = createSignal({ ...this.state });
|
|
41
|
+
this.treeSignal = treeSignal;
|
|
42
|
+
this.setTree = setTree;
|
|
43
|
+
this.eventsSignal = eventsSignal;
|
|
44
|
+
this.setEvents = setEvents;
|
|
45
|
+
this.stateSignal = stateSignal;
|
|
46
|
+
this.setState = setState;
|
|
47
|
+
}
|
|
48
|
+
static getInstance() {
|
|
49
|
+
if (!DevTools.instance) {
|
|
50
|
+
DevTools.instance = new DevTools();
|
|
51
|
+
}
|
|
52
|
+
return DevTools.instance;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Configure development tools
|
|
56
|
+
*/
|
|
57
|
+
configure(config) {
|
|
58
|
+
this.config = { ...this.config, ...config };
|
|
59
|
+
if (config.autoEnable) {
|
|
60
|
+
this.enable();
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Enable development tools
|
|
65
|
+
*/
|
|
66
|
+
enable() {
|
|
67
|
+
this.state.enabled = true;
|
|
68
|
+
this.state.performanceTracking = true;
|
|
69
|
+
this.state.componentInspection = true;
|
|
70
|
+
this.state.reactiveDebugging = true;
|
|
71
|
+
this.state.memoryTracking = this.config.trackMemoryUsage;
|
|
72
|
+
this.setState({ ...this.state });
|
|
73
|
+
this.startUpdateTimer();
|
|
74
|
+
this.addDebugEvent({
|
|
75
|
+
type: "component_mount",
|
|
76
|
+
timestamp: performance.now(),
|
|
77
|
+
data: { message: "DevTools enabled" }
|
|
78
|
+
});
|
|
79
|
+
console.log("🛠️ TachUI DevTools enabled");
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Disable development tools
|
|
83
|
+
*/
|
|
84
|
+
disable() {
|
|
85
|
+
this.state.enabled = false;
|
|
86
|
+
this.setState({ ...this.state });
|
|
87
|
+
this.stopUpdateTimer();
|
|
88
|
+
console.log("🛠️ TachUI DevTools disabled");
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Check if dev tools are enabled
|
|
92
|
+
*/
|
|
93
|
+
isEnabled() {
|
|
94
|
+
return this.state.enabled;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Register a component instance
|
|
98
|
+
*/
|
|
99
|
+
registerComponent(componentId, instance, parentId) {
|
|
100
|
+
if (!this.state.enabled || !this.state.componentInspection) return;
|
|
101
|
+
this.componentRegistry.set(componentId, instance);
|
|
102
|
+
this.activeComponents.add(componentId);
|
|
103
|
+
const parent = parentId ? this.componentTree.get(parentId) || null : null;
|
|
104
|
+
const depth = parent ? parent.depth + 1 : 0;
|
|
105
|
+
const treeNode = {
|
|
106
|
+
id: componentId,
|
|
107
|
+
name: this.getComponentName(instance),
|
|
108
|
+
type: instance.type || "component",
|
|
109
|
+
props: instance.props || {},
|
|
110
|
+
children: [],
|
|
111
|
+
parent,
|
|
112
|
+
depth,
|
|
113
|
+
renderCount: 0,
|
|
114
|
+
lastRenderTime: 0,
|
|
115
|
+
memoryUsage: 0,
|
|
116
|
+
warnings: [],
|
|
117
|
+
errors: []
|
|
118
|
+
};
|
|
119
|
+
if (parent) {
|
|
120
|
+
parent.children.push(treeNode);
|
|
121
|
+
}
|
|
122
|
+
this.componentTree.set(componentId, treeNode);
|
|
123
|
+
this.setTree(new Map(this.componentTree));
|
|
124
|
+
this.addDebugEvent({
|
|
125
|
+
type: "component_mount",
|
|
126
|
+
timestamp: performance.now(),
|
|
127
|
+
componentId,
|
|
128
|
+
componentName: treeNode.name,
|
|
129
|
+
data: { props: instance.props, parentId, depth }
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Unregister a component instance
|
|
134
|
+
*/
|
|
135
|
+
unregisterComponent(componentId) {
|
|
136
|
+
if (!this.state.enabled) return;
|
|
137
|
+
const treeNode = this.componentTree.get(componentId);
|
|
138
|
+
if (treeNode) {
|
|
139
|
+
if (treeNode.parent) {
|
|
140
|
+
const childIndex = treeNode.parent.children.indexOf(treeNode);
|
|
141
|
+
if (childIndex !== -1) {
|
|
142
|
+
treeNode.parent.children.splice(childIndex, 1);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
this.removeNodeAndDescendants(treeNode);
|
|
146
|
+
this.addDebugEvent({
|
|
147
|
+
type: "component_unmount",
|
|
148
|
+
timestamp: performance.now(),
|
|
149
|
+
componentId,
|
|
150
|
+
componentName: treeNode.name,
|
|
151
|
+
data: {
|
|
152
|
+
lifetime: performance.now() - treeNode.renderCount * treeNode.lastRenderTime
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
this.componentRegistry.delete(componentId);
|
|
157
|
+
this.componentTree.delete(componentId);
|
|
158
|
+
this.activeComponents.delete(componentId);
|
|
159
|
+
this.setTree(new Map(this.componentTree));
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Update component data
|
|
163
|
+
*/
|
|
164
|
+
updateComponent(componentId, updates) {
|
|
165
|
+
if (!this.state.enabled) return;
|
|
166
|
+
const treeNode = this.componentTree.get(componentId);
|
|
167
|
+
if (treeNode) {
|
|
168
|
+
Object.assign(treeNode, updates);
|
|
169
|
+
this.setTree(new Map(this.componentTree));
|
|
170
|
+
this.addDebugEvent({
|
|
171
|
+
type: "component_update",
|
|
172
|
+
timestamp: performance.now(),
|
|
173
|
+
componentId,
|
|
174
|
+
componentName: treeNode.name,
|
|
175
|
+
data: updates
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Track reactive operation
|
|
181
|
+
*/
|
|
182
|
+
trackReactiveOperation(type, operation, componentId) {
|
|
183
|
+
if (!this.state.enabled || !this.state.reactiveDebugging) return;
|
|
184
|
+
this.addDebugEvent({
|
|
185
|
+
type: "reactive_update",
|
|
186
|
+
timestamp: performance.now(),
|
|
187
|
+
componentId,
|
|
188
|
+
data: { type, operation }
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Track context changes
|
|
193
|
+
*/
|
|
194
|
+
trackContextChange(contextName, newValue, componentId) {
|
|
195
|
+
if (!this.state.enabled) return;
|
|
196
|
+
this.addDebugEvent({
|
|
197
|
+
type: "context_change",
|
|
198
|
+
timestamp: performance.now(),
|
|
199
|
+
componentId,
|
|
200
|
+
data: { contextName, newValue }
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Add warning to component
|
|
205
|
+
*/
|
|
206
|
+
addWarning(componentId, message) {
|
|
207
|
+
if (!this.state.enabled || !this.state.warningsEnabled) return;
|
|
208
|
+
const treeNode = this.componentTree.get(componentId);
|
|
209
|
+
if (treeNode) {
|
|
210
|
+
treeNode.warnings.push(message);
|
|
211
|
+
this.setTree(new Map(this.componentTree));
|
|
212
|
+
this.addDebugEvent({
|
|
213
|
+
type: "performance_warning",
|
|
214
|
+
timestamp: performance.now(),
|
|
215
|
+
componentId,
|
|
216
|
+
componentName: treeNode.name,
|
|
217
|
+
data: { message }
|
|
218
|
+
});
|
|
219
|
+
if (this.state.logLevel === "warn" || this.state.logLevel === "debug") {
|
|
220
|
+
console.warn(`⚠️ [${treeNode.name}] ${message}`);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Add error to component
|
|
226
|
+
*/
|
|
227
|
+
addError(componentId, error) {
|
|
228
|
+
if (!this.state.enabled) return;
|
|
229
|
+
const message = error instanceof Error ? error.message : error;
|
|
230
|
+
const stack = error instanceof Error ? error.stack : void 0;
|
|
231
|
+
const treeNode = this.componentTree.get(componentId);
|
|
232
|
+
if (treeNode) {
|
|
233
|
+
treeNode.errors.push(message);
|
|
234
|
+
this.setTree(new Map(this.componentTree));
|
|
235
|
+
this.addDebugEvent({
|
|
236
|
+
type: "error",
|
|
237
|
+
timestamp: performance.now(),
|
|
238
|
+
componentId,
|
|
239
|
+
componentName: treeNode.name,
|
|
240
|
+
data: { message, error: error instanceof Error ? error : void 0 },
|
|
241
|
+
stack
|
|
242
|
+
});
|
|
243
|
+
console.error(`❌ [${treeNode.name}] ${message}`, error);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Get component tree
|
|
248
|
+
*/
|
|
249
|
+
getComponentTree() {
|
|
250
|
+
return new Map(this.componentTree);
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Get component tree signal
|
|
254
|
+
*/
|
|
255
|
+
getComponentTreeSignal() {
|
|
256
|
+
return this.treeSignal;
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Get root components
|
|
260
|
+
*/
|
|
261
|
+
getRootComponents() {
|
|
262
|
+
return Array.from(this.componentTree.values()).filter(
|
|
263
|
+
(node) => node.parent === null
|
|
264
|
+
);
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Get component by ID
|
|
268
|
+
*/
|
|
269
|
+
getComponent(componentId) {
|
|
270
|
+
return this.componentTree.get(componentId);
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Find components by name
|
|
274
|
+
*/
|
|
275
|
+
findComponentsByName(name) {
|
|
276
|
+
return Array.from(this.componentTree.values()).filter(
|
|
277
|
+
(node) => node.name.toLowerCase().includes(name.toLowerCase())
|
|
278
|
+
);
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Get debug events
|
|
282
|
+
*/
|
|
283
|
+
getDebugEvents() {
|
|
284
|
+
return [...this.debugEvents];
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Get debug events signal
|
|
288
|
+
*/
|
|
289
|
+
getDebugEventsSignal() {
|
|
290
|
+
return this.eventsSignal;
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Get development state
|
|
294
|
+
*/
|
|
295
|
+
getDevState() {
|
|
296
|
+
return { ...this.state };
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Get development state signal
|
|
300
|
+
*/
|
|
301
|
+
getDevStateSignal() {
|
|
302
|
+
return this.stateSignal;
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Get performance summary
|
|
306
|
+
*/
|
|
307
|
+
getPerformanceSummary() {
|
|
308
|
+
const components = Array.from(this.componentTree.values());
|
|
309
|
+
const totalRenderTime = components.reduce(
|
|
310
|
+
(sum, c) => sum + c.lastRenderTime,
|
|
311
|
+
0
|
|
312
|
+
);
|
|
313
|
+
const averageRenderTime = components.length > 0 ? totalRenderTime / components.length : 0;
|
|
314
|
+
const totalMemory = components.reduce((sum, c) => sum + c.memoryUsage, 0);
|
|
315
|
+
const warningCount = components.reduce(
|
|
316
|
+
(sum, c) => sum + c.warnings.length,
|
|
317
|
+
0
|
|
318
|
+
);
|
|
319
|
+
const errorCount = components.reduce((sum, c) => sum + c.errors.length, 0);
|
|
320
|
+
const slowComponents = components.filter((c) => c.lastRenderTime > 5).map((c) => ({ id: c.id, name: c.name, renderTime: c.lastRenderTime })).sort((a, b) => b.renderTime - a.renderTime).slice(0, 10);
|
|
321
|
+
return {
|
|
322
|
+
componentCount: components.length,
|
|
323
|
+
averageRenderTime,
|
|
324
|
+
memoryUsage: totalMemory,
|
|
325
|
+
warningCount,
|
|
326
|
+
errorCount,
|
|
327
|
+
slowComponents
|
|
328
|
+
};
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* Export debug data
|
|
332
|
+
*/
|
|
333
|
+
exportDebugData() {
|
|
334
|
+
return JSON.stringify(
|
|
335
|
+
{
|
|
336
|
+
componentTree: Array.from(this.componentTree.entries()),
|
|
337
|
+
debugEvents: [...this.debugEvents],
|
|
338
|
+
timestamp: Date.now()
|
|
339
|
+
},
|
|
340
|
+
null,
|
|
341
|
+
2
|
|
342
|
+
);
|
|
343
|
+
}
|
|
344
|
+
/**
|
|
345
|
+
* Clear debug data
|
|
346
|
+
*/
|
|
347
|
+
clear() {
|
|
348
|
+
this.componentTree.clear();
|
|
349
|
+
this.componentRegistry.clear();
|
|
350
|
+
this.debugEvents.length = 0;
|
|
351
|
+
this.activeComponents.clear();
|
|
352
|
+
this.setTree(/* @__PURE__ */ new Map());
|
|
353
|
+
this.setEvents([]);
|
|
354
|
+
}
|
|
355
|
+
// Private helper methods
|
|
356
|
+
getComponentName(instance) {
|
|
357
|
+
if ("displayName" in instance && typeof instance.displayName === "string") {
|
|
358
|
+
return instance.displayName;
|
|
359
|
+
}
|
|
360
|
+
if (instance.type && typeof instance.type === "string") {
|
|
361
|
+
return instance.type;
|
|
362
|
+
}
|
|
363
|
+
if (instance.tag) {
|
|
364
|
+
return instance.tag || "Element";
|
|
365
|
+
}
|
|
366
|
+
if (instance.text) {
|
|
367
|
+
return "Text";
|
|
368
|
+
}
|
|
369
|
+
if (instance.fragment) {
|
|
370
|
+
return "Fragment";
|
|
371
|
+
}
|
|
372
|
+
return instance.id || "Component";
|
|
373
|
+
}
|
|
374
|
+
removeNodeAndDescendants(node) {
|
|
375
|
+
for (const child of node.children) {
|
|
376
|
+
this.removeNodeAndDescendants(child);
|
|
377
|
+
this.componentTree.delete(child.id);
|
|
378
|
+
this.componentRegistry.delete(child.id);
|
|
379
|
+
this.activeComponents.delete(child.id);
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
addDebugEvent(event) {
|
|
383
|
+
this.debugEvents.push(event);
|
|
384
|
+
if (this.debugEvents.length > 1e3) {
|
|
385
|
+
this.debugEvents.shift();
|
|
386
|
+
}
|
|
387
|
+
try {
|
|
388
|
+
this.setEvents([...this.debugEvents]);
|
|
389
|
+
} catch (_error) {
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
startUpdateTimer() {
|
|
393
|
+
if (this.updateTimer) return;
|
|
394
|
+
this.updateTimer = window.setInterval(() => {
|
|
395
|
+
this.updateComponentMetrics();
|
|
396
|
+
}, this.config.updateInterval);
|
|
397
|
+
}
|
|
398
|
+
stopUpdateTimer() {
|
|
399
|
+
if (this.updateTimer) {
|
|
400
|
+
clearInterval(this.updateTimer);
|
|
401
|
+
this.updateTimer = null;
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
updateComponentMetrics() {
|
|
405
|
+
if (!this.state.enabled) return;
|
|
406
|
+
for (const [componentId, treeNode] of this.componentTree) {
|
|
407
|
+
treeNode.renderCount += 1;
|
|
408
|
+
treeNode.lastRenderTime = Math.random() * 10;
|
|
409
|
+
if (treeNode.lastRenderTime > 16) {
|
|
410
|
+
this.addWarning(
|
|
411
|
+
componentId,
|
|
412
|
+
`Slow render: ${treeNode.lastRenderTime.toFixed(2)}ms`
|
|
413
|
+
);
|
|
414
|
+
}
|
|
415
|
+
if (treeNode.memoryUsage > 1024 * 1024) {
|
|
416
|
+
this.addWarning(
|
|
417
|
+
componentId,
|
|
418
|
+
`High memory usage: ${(treeNode.memoryUsage / (1024 * 1024)).toFixed(2)}MB`
|
|
419
|
+
);
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
this.setTree(new Map(this.componentTree));
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
const globalDevTools = DevTools.getInstance();
|
|
426
|
+
function enablePerformanceTracking() {
|
|
427
|
+
globalDevTools.enable();
|
|
428
|
+
}
|
|
429
|
+
function getComponentTree() {
|
|
430
|
+
return globalDevTools.getComponentTree();
|
|
431
|
+
}
|
|
432
|
+
function enableDevelopmentMode(config) {
|
|
433
|
+
globalDevTools.configure({
|
|
434
|
+
autoEnable: true,
|
|
435
|
+
trackAllComponents: true,
|
|
436
|
+
trackMemoryUsage: true,
|
|
437
|
+
enableWarnings: true,
|
|
438
|
+
enableErrors: true,
|
|
439
|
+
...config
|
|
440
|
+
});
|
|
441
|
+
console.log("🚀 TachUI Development Mode enabled");
|
|
442
|
+
}
|
|
443
|
+
function getDevTools() {
|
|
444
|
+
return globalDevTools;
|
|
445
|
+
}
|
|
446
|
+
const devUtils = {
|
|
447
|
+
/**
|
|
448
|
+
* Log component tree to console
|
|
449
|
+
*/
|
|
450
|
+
logComponentTree() {
|
|
451
|
+
const roots = globalDevTools.getRootComponents();
|
|
452
|
+
function logNode(node, indent = 0) {
|
|
453
|
+
const prefix = " ".repeat(indent);
|
|
454
|
+
const warnings = node.warnings.length > 0 ? ` ⚠️(${node.warnings.length})` : "";
|
|
455
|
+
const errors = node.errors.length > 0 ? ` ❌(${node.errors.length})` : "";
|
|
456
|
+
const renderTime = node.lastRenderTime > 0 ? ` ${node.lastRenderTime.toFixed(2)}ms` : "";
|
|
457
|
+
console.log(
|
|
458
|
+
`${prefix}${node.name}#${node.id}${renderTime}${warnings}${errors}`
|
|
459
|
+
);
|
|
460
|
+
for (const child of node.children) {
|
|
461
|
+
logNode(child, indent + 1);
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
console.group("🌳 Component Tree");
|
|
465
|
+
for (const root of roots) {
|
|
466
|
+
logNode(root);
|
|
467
|
+
}
|
|
468
|
+
console.groupEnd();
|
|
469
|
+
},
|
|
470
|
+
/**
|
|
471
|
+
* Log performance summary
|
|
472
|
+
*/
|
|
473
|
+
logPerformanceSummary() {
|
|
474
|
+
const summary = globalDevTools.getPerformanceSummary();
|
|
475
|
+
console.group("📊 Performance Summary");
|
|
476
|
+
console.log(`Components: ${summary.componentCount}`);
|
|
477
|
+
console.log(
|
|
478
|
+
`Average Render Time: ${summary.averageRenderTime.toFixed(2)}ms`
|
|
479
|
+
);
|
|
480
|
+
console.log(
|
|
481
|
+
`Memory Usage: ${(summary.memoryUsage / (1024 * 1024)).toFixed(2)}MB`
|
|
482
|
+
);
|
|
483
|
+
console.log(`Warnings: ${summary.warningCount}`);
|
|
484
|
+
console.log(`Errors: ${summary.errorCount}`);
|
|
485
|
+
if (summary.slowComponents.length > 0) {
|
|
486
|
+
console.group("🐌 Slow Components");
|
|
487
|
+
for (const comp of summary.slowComponents) {
|
|
488
|
+
console.log(`${comp.name}: ${comp.renderTime.toFixed(2)}ms`);
|
|
489
|
+
}
|
|
490
|
+
console.groupEnd();
|
|
491
|
+
}
|
|
492
|
+
console.groupEnd();
|
|
493
|
+
},
|
|
494
|
+
/**
|
|
495
|
+
* Find component by name
|
|
496
|
+
*/
|
|
497
|
+
findComponent(name) {
|
|
498
|
+
return globalDevTools.findComponentsByName(name);
|
|
499
|
+
},
|
|
500
|
+
/**
|
|
501
|
+
* Inspect component
|
|
502
|
+
*/
|
|
503
|
+
inspectComponent(componentId) {
|
|
504
|
+
const component = globalDevTools.getComponent(componentId);
|
|
505
|
+
if (component) {
|
|
506
|
+
console.group(`🔍 Component: ${component.name}`);
|
|
507
|
+
console.log("Props:", component.props);
|
|
508
|
+
console.log("Children:", component.children.length);
|
|
509
|
+
console.log("Warnings:", component.warnings);
|
|
510
|
+
console.log("Errors:", component.errors);
|
|
511
|
+
console.groupEnd();
|
|
512
|
+
}
|
|
513
|
+
return component;
|
|
514
|
+
}
|
|
515
|
+
};
|
|
516
|
+
export {
|
|
517
|
+
DevTools,
|
|
518
|
+
devUtils,
|
|
519
|
+
enableDevelopmentMode,
|
|
520
|
+
enablePerformanceTracking,
|
|
521
|
+
getComponentTree,
|
|
522
|
+
getDevTools,
|
|
523
|
+
globalDevTools
|
|
524
|
+
};
|
|
525
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/inspector/index.ts"],"sourcesContent":["/**\n * Development Tools System\n *\n * Comprehensive debugging and development tools for TachUI.\n * Provides component tree inspection, performance analysis,\n * and runtime debugging capabilities.\n */\n\nimport { createSignal } from '@tachui/core'\nimport type { ComponentInstance } from '@tachui/core'\n\n/**\n * Component tree node for debugging\n */\nexport interface ComponentTreeNode {\n id: string\n name: string\n type: 'component' | 'element' | 'text' | 'fragment'\n props: Record<string, any>\n children: ComponentTreeNode[]\n parent: ComponentTreeNode | null\n depth: number\n renderCount: number\n lastRenderTime: number\n memoryUsage: number\n warnings: string[]\n errors: string[]\n}\n\n/**\n * Development environment state\n */\nexport interface DevState {\n enabled: boolean\n performanceTracking: boolean\n componentInspection: boolean\n reactiveDebugging: boolean\n memoryTracking: boolean\n warningsEnabled: boolean\n logLevel: 'error' | 'warn' | 'info' | 'debug'\n}\n\n/**\n * Development tools configuration\n */\nexport interface DevToolsConfig {\n autoEnable: boolean\n trackAllComponents: boolean\n trackMemoryUsage: boolean\n enableWarnings: boolean\n enableErrors: boolean\n maxTreeDepth: number\n updateInterval: number\n}\n\n/**\n * Runtime debugging event\n */\nexport interface DebugEvent {\n type:\n | 'component_mount'\n | 'component_unmount'\n | 'component_update'\n | 'reactive_create'\n | 'reactive_update'\n | 'context_change'\n | 'performance_warning'\n | 'error'\n timestamp: number\n componentId?: string\n componentName?: string\n data: any\n stack?: string\n}\n\n/**\n * Development tools manager\n */\nexport class DevTools {\n private static instance: DevTools\n\n private config: DevToolsConfig = {\n autoEnable: false,\n trackAllComponents: true,\n trackMemoryUsage: true,\n enableWarnings: true,\n enableErrors: true,\n maxTreeDepth: 50,\n updateInterval: 100,\n }\n\n private state: DevState = {\n enabled: false,\n performanceTracking: false,\n componentInspection: false,\n reactiveDebugging: false,\n memoryTracking: false,\n warningsEnabled: true,\n logLevel: 'warn',\n }\n\n private componentTree = new Map<string, ComponentTreeNode>()\n private componentRegistry = new Map<string, ComponentInstance>()\n private debugEvents: DebugEvent[] = []\n private activeComponents = new Set<string>()\n\n // Reactive signals for real-time updates\n private treeSignal: () => Map<string, ComponentTreeNode>\n private setTree: (value: Map<string, ComponentTreeNode>) => void\n private eventsSignal: () => DebugEvent[]\n private setEvents: (value: DebugEvent[]) => void\n private stateSignal: () => DevState\n private setState: (value: DevState) => void\n\n // Update timer\n private updateTimer: number | null = null\n\n constructor() {\n // Initialize reactive signals\n const [treeSignal, setTree] = createSignal<Map<string, ComponentTreeNode>>(\n new Map()\n )\n const [eventsSignal, setEvents] = createSignal<DebugEvent[]>([])\n const [stateSignal, setState] = createSignal<DevState>({ ...this.state })\n\n this.treeSignal = treeSignal\n this.setTree = setTree\n this.eventsSignal = eventsSignal\n this.setEvents = setEvents\n this.stateSignal = stateSignal\n this.setState = setState\n }\n\n static getInstance(): DevTools {\n if (!DevTools.instance) {\n DevTools.instance = new DevTools()\n }\n return DevTools.instance\n }\n\n /**\n * Configure development tools\n */\n configure(config: Partial<DevToolsConfig>): void {\n this.config = { ...this.config, ...config }\n\n if (config.autoEnable) {\n this.enable()\n }\n }\n\n /**\n * Enable development tools\n */\n enable(): void {\n this.state.enabled = true\n this.state.performanceTracking = true\n this.state.componentInspection = true\n this.state.reactiveDebugging = true\n this.state.memoryTracking = this.config.trackMemoryUsage\n this.setState({ ...this.state })\n\n // Start update timer\n this.startUpdateTimer()\n\n this.addDebugEvent({\n type: 'component_mount',\n timestamp: performance.now(),\n data: { message: 'DevTools enabled' },\n })\n\n console.log('🛠️ TachUI DevTools enabled')\n }\n\n /**\n * Disable development tools\n */\n disable(): void {\n this.state.enabled = false\n this.setState({ ...this.state })\n\n this.stopUpdateTimer()\n\n console.log('🛠️ TachUI DevTools disabled')\n }\n\n /**\n * Check if dev tools are enabled\n */\n isEnabled(): boolean {\n return this.state.enabled\n }\n\n /**\n * Register a component instance\n */\n registerComponent(\n componentId: string,\n instance: ComponentInstance,\n parentId?: string\n ): void {\n if (!this.state.enabled || !this.state.componentInspection) return\n\n this.componentRegistry.set(componentId, instance)\n this.activeComponents.add(componentId)\n\n // Find parent node\n const parent = parentId ? this.componentTree.get(parentId) || null : null\n const depth = parent ? parent.depth + 1 : 0\n\n // Create tree node\n const treeNode: ComponentTreeNode = {\n id: componentId,\n name: this.getComponentName(instance),\n type: instance.type || 'component',\n props: instance.props || {},\n children: [],\n parent,\n depth,\n renderCount: 0,\n lastRenderTime: 0,\n memoryUsage: 0,\n warnings: [],\n errors: [],\n }\n\n // Add to parent's children\n if (parent) {\n parent.children.push(treeNode)\n }\n\n this.componentTree.set(componentId, treeNode)\n this.setTree(new Map(this.componentTree))\n\n this.addDebugEvent({\n type: 'component_mount',\n timestamp: performance.now(),\n componentId,\n componentName: treeNode.name,\n data: { props: instance.props, parentId, depth },\n })\n }\n\n /**\n * Unregister a component instance\n */\n unregisterComponent(componentId: string): void {\n if (!this.state.enabled) return\n\n const treeNode = this.componentTree.get(componentId)\n if (treeNode) {\n // Remove from parent's children\n if (treeNode.parent) {\n const childIndex = treeNode.parent.children.indexOf(treeNode)\n if (childIndex !== -1) {\n treeNode.parent.children.splice(childIndex, 1)\n }\n }\n\n // Remove all descendants\n this.removeNodeAndDescendants(treeNode)\n\n this.addDebugEvent({\n type: 'component_unmount',\n timestamp: performance.now(),\n componentId,\n componentName: treeNode.name,\n data: {\n lifetime:\n performance.now() - treeNode.renderCount * treeNode.lastRenderTime,\n },\n })\n }\n\n this.componentRegistry.delete(componentId)\n this.componentTree.delete(componentId)\n this.activeComponents.delete(componentId)\n this.setTree(new Map(this.componentTree))\n }\n\n /**\n * Update component data\n */\n updateComponent(\n componentId: string,\n updates: Partial<ComponentTreeNode>\n ): void {\n if (!this.state.enabled) return\n\n const treeNode = this.componentTree.get(componentId)\n if (treeNode) {\n Object.assign(treeNode, updates)\n this.setTree(new Map(this.componentTree))\n\n this.addDebugEvent({\n type: 'component_update',\n timestamp: performance.now(),\n componentId,\n componentName: treeNode.name,\n data: updates,\n })\n }\n }\n\n /**\n * Track reactive operation\n */\n trackReactiveOperation(\n type: string,\n operation: string,\n componentId?: string\n ): void {\n if (!this.state.enabled || !this.state.reactiveDebugging) return\n\n this.addDebugEvent({\n type: 'reactive_update',\n timestamp: performance.now(),\n componentId,\n data: { type, operation },\n })\n }\n\n /**\n * Track context changes\n */\n trackContextChange(\n contextName: string,\n newValue: any,\n componentId?: string\n ): void {\n if (!this.state.enabled) return\n\n this.addDebugEvent({\n type: 'context_change',\n timestamp: performance.now(),\n componentId,\n data: { contextName, newValue },\n })\n }\n\n /**\n * Add warning to component\n */\n addWarning(componentId: string, message: string): void {\n if (!this.state.enabled || !this.state.warningsEnabled) return\n\n const treeNode = this.componentTree.get(componentId)\n if (treeNode) {\n treeNode.warnings.push(message)\n this.setTree(new Map(this.componentTree))\n\n this.addDebugEvent({\n type: 'performance_warning',\n timestamp: performance.now(),\n componentId,\n componentName: treeNode.name,\n data: { message },\n })\n\n if (this.state.logLevel === 'warn' || this.state.logLevel === 'debug') {\n console.warn(`⚠️ [${treeNode.name}] ${message}`)\n }\n }\n }\n\n /**\n * Add error to component\n */\n addError(componentId: string, error: Error | string): void {\n if (!this.state.enabled) return\n\n const message = error instanceof Error ? error.message : error\n const stack = error instanceof Error ? error.stack : undefined\n\n const treeNode = this.componentTree.get(componentId)\n if (treeNode) {\n treeNode.errors.push(message)\n this.setTree(new Map(this.componentTree))\n\n this.addDebugEvent({\n type: 'error',\n timestamp: performance.now(),\n componentId,\n componentName: treeNode.name,\n data: { message, error: error instanceof Error ? error : undefined },\n stack,\n })\n\n console.error(`❌ [${treeNode.name}] ${message}`, error)\n }\n }\n\n /**\n * Get component tree\n */\n getComponentTree(): Map<string, ComponentTreeNode> {\n return new Map(this.componentTree)\n }\n\n /**\n * Get component tree signal\n */\n getComponentTreeSignal(): () => Map<string, ComponentTreeNode> {\n return this.treeSignal\n }\n\n /**\n * Get root components\n */\n getRootComponents(): ComponentTreeNode[] {\n return Array.from(this.componentTree.values()).filter(\n node => node.parent === null\n )\n }\n\n /**\n * Get component by ID\n */\n getComponent(componentId: string): ComponentTreeNode | undefined {\n return this.componentTree.get(componentId)\n }\n\n /**\n * Find components by name\n */\n findComponentsByName(name: string): ComponentTreeNode[] {\n return Array.from(this.componentTree.values()).filter(node =>\n node.name.toLowerCase().includes(name.toLowerCase())\n )\n }\n\n /**\n * Get debug events\n */\n getDebugEvents(): DebugEvent[] {\n return [...this.debugEvents]\n }\n\n /**\n * Get debug events signal\n */\n getDebugEventsSignal(): () => DebugEvent[] {\n return this.eventsSignal\n }\n\n /**\n * Get development state\n */\n getDevState(): DevState {\n return { ...this.state }\n }\n\n /**\n * Get development state signal\n */\n getDevStateSignal(): () => DevState {\n return this.stateSignal\n }\n\n /**\n * Get performance summary\n */\n getPerformanceSummary(): {\n componentCount: number\n averageRenderTime: number\n memoryUsage: number\n warningCount: number\n errorCount: number\n slowComponents: { id: string; name: string; renderTime: number }[]\n } {\n const components = Array.from(this.componentTree.values())\n const totalRenderTime = components.reduce(\n (sum, c) => sum + c.lastRenderTime,\n 0\n )\n const averageRenderTime =\n components.length > 0 ? totalRenderTime / components.length : 0\n const totalMemory = components.reduce((sum, c) => sum + c.memoryUsage, 0)\n const warningCount = components.reduce(\n (sum, c) => sum + c.warnings.length,\n 0\n )\n const errorCount = components.reduce((sum, c) => sum + c.errors.length, 0)\n\n // Find slow components (>5ms render time)\n const slowComponents = components\n .filter(c => c.lastRenderTime > 5)\n .map(c => ({ id: c.id, name: c.name, renderTime: c.lastRenderTime }))\n .sort((a, b) => b.renderTime - a.renderTime)\n .slice(0, 10)\n\n return {\n componentCount: components.length,\n averageRenderTime,\n memoryUsage: totalMemory,\n warningCount,\n errorCount,\n slowComponents,\n }\n }\n\n /**\n * Export debug data\n */\n exportDebugData(): string {\n return JSON.stringify(\n {\n componentTree: Array.from(this.componentTree.entries()),\n debugEvents: [...this.debugEvents],\n timestamp: Date.now(),\n },\n null,\n 2\n )\n }\n\n /**\n * Clear debug data\n */\n clear(): void {\n this.componentTree.clear()\n this.componentRegistry.clear()\n this.debugEvents.length = 0\n this.activeComponents.clear()\n\n this.setTree(new Map())\n this.setEvents([])\n }\n\n // Private helper methods\n\n private getComponentName(instance: ComponentInstance): string {\n // Check for displayName first\n if ('displayName' in instance && typeof instance.displayName === 'string') {\n return instance.displayName\n }\n\n // Check component type first (this should be the primary source)\n if (instance.type && typeof instance.type === 'string') {\n return instance.type\n }\n\n // Check for HTML tag\n if ((instance as any).tag) {\n return (instance as any).tag || 'Element'\n }\n\n // Check for text content\n if ((instance as any).text) {\n return 'Text'\n }\n\n // Check for fragment\n if ((instance as any).fragment) {\n return 'Fragment'\n }\n\n // Fallback to id or generic name (only if nothing else works)\n return instance.id || 'Component'\n }\n\n private removeNodeAndDescendants(node: ComponentTreeNode): void {\n // Remove all children recursively\n for (const child of node.children) {\n this.removeNodeAndDescendants(child)\n this.componentTree.delete(child.id)\n this.componentRegistry.delete(child.id)\n this.activeComponents.delete(child.id)\n }\n }\n\n private addDebugEvent(event: DebugEvent): void {\n this.debugEvents.push(event)\n\n // Limit events array size\n if (this.debugEvents.length > 1000) {\n this.debugEvents.shift()\n }\n\n // Update reactive signal if available\n try {\n this.setEvents([...this.debugEvents])\n } catch (_error) {\n // In test environments, the signal might not work properly\n }\n }\n\n private startUpdateTimer(): void {\n if (this.updateTimer) return\n\n this.updateTimer = window.setInterval(() => {\n this.updateComponentMetrics()\n }, this.config.updateInterval)\n }\n\n private stopUpdateTimer(): void {\n if (this.updateTimer) {\n clearInterval(this.updateTimer)\n this.updateTimer = null\n }\n }\n\n private updateComponentMetrics(): void {\n if (!this.state.enabled) return\n\n for (const [componentId, treeNode] of this.componentTree) {\n // Update render count and timing (simplified for now)\n treeNode.renderCount += 1\n treeNode.lastRenderTime = Math.random() * 10 // Placeholder\n\n // Check for performance warnings\n if (treeNode.lastRenderTime > 16) {\n this.addWarning(\n componentId,\n `Slow render: ${treeNode.lastRenderTime.toFixed(2)}ms`\n )\n }\n\n if (treeNode.memoryUsage > 1024 * 1024) {\n // 1MB\n this.addWarning(\n componentId,\n `High memory usage: ${(treeNode.memoryUsage / (1024 * 1024)).toFixed(2)}MB`\n )\n }\n }\n\n this.setTree(new Map(this.componentTree))\n }\n}\n\n/**\n * Global dev tools instance\n */\nexport const globalDevTools = DevTools.getInstance()\n\n/**\n * Enable performance tracking\n */\nexport function enablePerformanceTracking(): void {\n globalDevTools.enable()\n}\n\n/**\n * Get component tree\n */\nexport function getComponentTree(): Map<string, ComponentTreeNode> {\n return globalDevTools.getComponentTree()\n}\n\n/**\n * Enable development mode with full debugging\n */\nexport function enableDevelopmentMode(config?: Partial<DevToolsConfig>): void {\n globalDevTools.configure({\n autoEnable: true,\n trackAllComponents: true,\n trackMemoryUsage: true,\n enableWarnings: true,\n enableErrors: true,\n ...config,\n })\n\n console.log('🚀 TachUI Development Mode enabled')\n}\n\n/**\n * Get development tools instance\n */\nexport function getDevTools(): DevTools {\n return globalDevTools\n}\n\n/**\n * Development utilities\n */\nexport const devUtils = {\n /**\n * Log component tree to console\n */\n logComponentTree(): void {\n const roots = globalDevTools.getRootComponents()\n\n function logNode(node: ComponentTreeNode, indent = 0): void {\n const prefix = ' '.repeat(indent)\n const warnings =\n node.warnings.length > 0 ? ` ⚠️(${node.warnings.length})` : ''\n const errors = node.errors.length > 0 ? ` ❌(${node.errors.length})` : ''\n const renderTime =\n node.lastRenderTime > 0 ? ` ${node.lastRenderTime.toFixed(2)}ms` : ''\n\n console.log(\n `${prefix}${node.name}#${node.id}${renderTime}${warnings}${errors}`\n )\n\n for (const child of node.children) {\n logNode(child, indent + 1)\n }\n }\n\n console.group('🌳 Component Tree')\n for (const root of roots) {\n logNode(root)\n }\n console.groupEnd()\n },\n\n /**\n * Log performance summary\n */\n logPerformanceSummary(): void {\n const summary = globalDevTools.getPerformanceSummary()\n\n console.group('📊 Performance Summary')\n console.log(`Components: ${summary.componentCount}`)\n console.log(\n `Average Render Time: ${summary.averageRenderTime.toFixed(2)}ms`\n )\n console.log(\n `Memory Usage: ${(summary.memoryUsage / (1024 * 1024)).toFixed(2)}MB`\n )\n console.log(`Warnings: ${summary.warningCount}`)\n console.log(`Errors: ${summary.errorCount}`)\n\n if (summary.slowComponents.length > 0) {\n console.group('🐌 Slow Components')\n for (const comp of summary.slowComponents) {\n console.log(`${comp.name}: ${comp.renderTime.toFixed(2)}ms`)\n }\n console.groupEnd()\n }\n\n console.groupEnd()\n },\n\n /**\n * Find component by name\n */\n findComponent(name: string): ComponentTreeNode[] {\n return globalDevTools.findComponentsByName(name)\n },\n\n /**\n * Inspect component\n */\n inspectComponent(componentId: string): ComponentTreeNode | undefined {\n const component = globalDevTools.getComponent(componentId)\n if (component) {\n console.group(`🔍 Component: ${component.name}`)\n console.log('Props:', component.props)\n console.log('Children:', component.children.length)\n console.log('Warnings:', component.warnings)\n console.log('Errors:', component.errors)\n console.groupEnd()\n }\n return component\n },\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Simplified Plugin Error Handler - Week 3 Performance Enhancement
|
|
3
|
+
*
|
|
4
|
+
* Enhanced error handling with performance optimizations:
|
|
5
|
+
* - Error rate limiting and circuit breaker patterns
|
|
6
|
+
* - Error aggregation and batch reporting
|
|
7
|
+
* - Performance metrics for error handling
|
|
8
|
+
* - Memory-efficient error tracking
|
|
9
|
+
*/
|
|
10
|
+
import type { TachUIPlugin } from '@tachui/core';
|
|
11
|
+
interface ErrorMetrics {
|
|
12
|
+
count: number;
|
|
13
|
+
lastOccurrence: number;
|
|
14
|
+
firstOccurrence: number;
|
|
15
|
+
errorTypes: Map<string, number>;
|
|
16
|
+
resolved: boolean;
|
|
17
|
+
}
|
|
18
|
+
interface CircuitBreakerState {
|
|
19
|
+
isOpen: boolean;
|
|
20
|
+
failureCount: number;
|
|
21
|
+
lastFailureTime: number;
|
|
22
|
+
resetTimeout?: number;
|
|
23
|
+
}
|
|
24
|
+
export declare class OptimizedPluginErrorHandler {
|
|
25
|
+
private errorMetrics;
|
|
26
|
+
private circuitBreakers;
|
|
27
|
+
private errorQueue;
|
|
28
|
+
private batchTimer?;
|
|
29
|
+
private maxFailuresBeforeCircuitBreak;
|
|
30
|
+
private circuitBreakerResetTime;
|
|
31
|
+
private errorBatchSize;
|
|
32
|
+
private errorBatchTimeout;
|
|
33
|
+
private maxErrorHistory;
|
|
34
|
+
handleInstallError(plugin: TachUIPlugin, error: Error): void;
|
|
35
|
+
handleRuntimeError(pluginName: string, error: Error): void;
|
|
36
|
+
handleUninstallError(pluginName: string, error: Error): void;
|
|
37
|
+
private recordError;
|
|
38
|
+
private recordErrorType;
|
|
39
|
+
private updateCircuitBreaker;
|
|
40
|
+
private isCircuitOpen;
|
|
41
|
+
private resetCircuitBreaker;
|
|
42
|
+
private queueError;
|
|
43
|
+
private flushErrorQueue;
|
|
44
|
+
private emitError;
|
|
45
|
+
getErrorMetrics(errorKey?: string): ErrorMetrics | Map<string, ErrorMetrics>;
|
|
46
|
+
getCircuitBreakerStatus(errorKey?: string): CircuitBreakerState | Map<string, CircuitBreakerState>;
|
|
47
|
+
getPerformanceStats(): {
|
|
48
|
+
totalErrors: number;
|
|
49
|
+
uniqueErrorKeys: number;
|
|
50
|
+
activeCircuitBreakers: number;
|
|
51
|
+
queuedErrors: number;
|
|
52
|
+
errorsByType: {
|
|
53
|
+
[k: string]: number;
|
|
54
|
+
};
|
|
55
|
+
memoryUsage: {
|
|
56
|
+
errorMetrics: number;
|
|
57
|
+
circuitBreakers: number;
|
|
58
|
+
queuedErrors: number;
|
|
59
|
+
estimatedMemoryKB: number;
|
|
60
|
+
};
|
|
61
|
+
};
|
|
62
|
+
markErrorResolved(errorKey: string): void;
|
|
63
|
+
clearErrorHistory(errorKey?: string): void;
|
|
64
|
+
}
|
|
65
|
+
export declare const globalPluginErrorHandler: OptimizedPluginErrorHandler;
|
|
66
|
+
export declare const SimplifiedPluginErrorHandler: typeof OptimizedPluginErrorHandler;
|
|
67
|
+
/**
|
|
68
|
+
* Simple error recovery utilities
|
|
69
|
+
*/
|
|
70
|
+
export declare const ErrorRecoveryUtils: {
|
|
71
|
+
/**
|
|
72
|
+
* Safely execute plugin operation with error handling
|
|
73
|
+
*/
|
|
74
|
+
safeExecute<T>(pluginName: string, operation: string, fn: () => Promise<T> | T): Promise<T | undefined>;
|
|
75
|
+
/**
|
|
76
|
+
* Create an error boundary for plugin operations
|
|
77
|
+
*/
|
|
78
|
+
createErrorBoundary(pluginName: string): {
|
|
79
|
+
exec<T>(fn: () => Promise<T> | T): Promise<T | undefined>;
|
|
80
|
+
};
|
|
81
|
+
};
|
|
82
|
+
export {};
|
|
83
|
+
//# sourceMappingURL=simplified-error-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simplified-error-handler.d.ts","sourceRoot":"","sources":["../../src/plugins/simplified-error-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAYhD,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,cAAc,EAAE,MAAM,CAAA;IACtB,eAAe,EAAE,MAAM,CAAA;IACvB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,QAAQ,EAAE,OAAO,CAAA;CAClB;AAED,UAAU,mBAAmB;IAC3B,MAAM,EAAE,OAAO,CAAA;IACf,YAAY,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,MAAM,CAAA;IACvB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,qBAAa,2BAA2B;IACtC,OAAO,CAAC,YAAY,CAAkC;IACtD,OAAO,CAAC,eAAe,CAAyC;IAChE,OAAO,CAAC,UAAU,CAA4D;IAC9E,OAAO,CAAC,UAAU,CAAC,CAAQ;IAG3B,OAAO,CAAC,6BAA6B,CAAI;IACzC,OAAO,CAAC,uBAAuB,CAAQ;IACvC,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,iBAAiB,CAAO;IAChC,OAAO,CAAC,eAAe,CAAM;IAE7B,kBAAkB,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IA4C5D,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAkC1D,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAiB5D,OAAO,CAAC,WAAW;IAiCnB,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,oBAAoB;IAiC5B,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,mBAAmB;IAiB3B,OAAO,CAAC,UAAU;IAuBlB,OAAO,CAAC,eAAe;IAsBvB,OAAO,CAAC,SAAS;IAWjB,eAAe,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,YAAY,GAAG,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC;IAe5E,uBAAuB,CACrB,QAAQ,CAAC,EAAE,MAAM,GAChB,mBAAmB,GAAG,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC;IAazD,mBAAmB;;;;;;;;;;;;;;;IAmCnB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAUzC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;CAe3C;AAGD,eAAO,MAAM,wBAAwB,6BAAoC,CAAA;AAGzE,eAAO,MAAM,4BAA4B,oCAA8B,CAAA;AAEvE;;GAEG;AACH,eAAO,MAAM,kBAAkB;IAC7B;;OAEG;gBACe,CAAC,cACL,MAAM,aACP,MAAM,MACb,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GACvB,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAUzB;;OAEG;oCAC6B,MAAM;aAEvB,CAAC,MAAM,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;;CAKpE,CAAA"}
|