@flight-framework/devtools 0.0.4 → 0.0.6

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.
@@ -1,126 +1,287 @@
1
1
  /**
2
2
  * @flight-framework/devtools/instrumentation - Auto-instrumentation
3
3
  *
4
- * Automatically instruments Flight apps to send data to DevTools.
4
+ * Automatically captures:
5
+ * - Fetch requests with timing and size
6
+ * - Performance metrics (Core Web Vitals)
7
+ * - JavaScript errors
8
+ * - Console output
5
9
  */
6
10
  import { getDevTools } from './index.js';
7
11
  // ============================================================================
8
- // Route Instrumentation
12
+ // Fetch Instrumentation
13
+ // ============================================================================
14
+ let originalFetch = null;
15
+ export function instrumentFetch() {
16
+ const devTools = getDevTools();
17
+ if (!devTools || typeof window === 'undefined' || originalFetch)
18
+ return;
19
+ originalFetch = window.fetch;
20
+ window.fetch = async (input, init) => {
21
+ const start = performance.now();
22
+ const url = typeof input === 'string' ? input : input instanceof URL ? input.toString() : input.url;
23
+ const method = init?.method || 'GET';
24
+ try {
25
+ const response = await originalFetch(input, init);
26
+ const duration = performance.now() - start;
27
+ // Clone to read body size
28
+ const cloned = response.clone();
29
+ let size;
30
+ try {
31
+ const blob = await cloned.blob();
32
+ size = blob.size;
33
+ }
34
+ catch {
35
+ // Size calculation failed, ignore
36
+ }
37
+ const parsedUrl = new URL(url, window.location.origin);
38
+ devTools.logRequest({
39
+ method: method.toUpperCase(),
40
+ path: parsedUrl.pathname + parsedUrl.search,
41
+ status: response.status,
42
+ duration: Math.round(duration),
43
+ size,
44
+ type: 'fetch',
45
+ cached: response.headers.get('x-cache') === 'HIT',
46
+ });
47
+ return response;
48
+ }
49
+ catch (error) {
50
+ const duration = performance.now() - start;
51
+ const parsedUrl = new URL(url, window.location.origin);
52
+ devTools.logRequest({
53
+ method: method.toUpperCase(),
54
+ path: parsedUrl.pathname + parsedUrl.search,
55
+ status: 0,
56
+ duration: Math.round(duration),
57
+ type: 'fetch',
58
+ });
59
+ throw error;
60
+ }
61
+ };
62
+ }
63
+ // ============================================================================
64
+ // Performance Instrumentation
65
+ // ============================================================================
66
+ export function instrumentPerformance() {
67
+ const devTools = getDevTools();
68
+ if (!devTools || typeof window === 'undefined' || typeof PerformanceObserver === 'undefined')
69
+ return;
70
+ // Core Web Vitals
71
+ try {
72
+ // LCP - Largest Contentful Paint
73
+ const lcpObserver = new PerformanceObserver((list) => {
74
+ const entries = list.getEntries();
75
+ const lastEntry = entries[entries.length - 1];
76
+ devTools.updatePerformance({ lcp: Math.round(lastEntry.startTime) });
77
+ });
78
+ lcpObserver.observe({ type: 'largest-contentful-paint', buffered: true });
79
+ // FID - First Input Delay
80
+ const fidObserver = new PerformanceObserver((list) => {
81
+ const entries = list.getEntries();
82
+ if (entries.length > 0) {
83
+ const firstInput = entries[0];
84
+ devTools.updatePerformance({ fid: Math.round(firstInput.processingStart - firstInput.startTime) });
85
+ }
86
+ });
87
+ fidObserver.observe({ type: 'first-input', buffered: true });
88
+ // CLS - Cumulative Layout Shift
89
+ let clsValue = 0;
90
+ const clsObserver = new PerformanceObserver((list) => {
91
+ const entries = list.getEntries();
92
+ for (const entry of entries) {
93
+ if (!entry.hadRecentInput) {
94
+ clsValue += entry.value;
95
+ }
96
+ }
97
+ devTools.updatePerformance({ cls: clsValue });
98
+ });
99
+ clsObserver.observe({ type: 'layout-shift', buffered: true });
100
+ // FCP - First Contentful Paint
101
+ const fcpObserver = new PerformanceObserver((list) => {
102
+ const entries = list.getEntriesByName('first-contentful-paint');
103
+ if (entries.length > 0) {
104
+ devTools.updatePerformance({ fcp: Math.round(entries[0].startTime) });
105
+ }
106
+ });
107
+ fcpObserver.observe({ type: 'paint', buffered: true });
108
+ }
109
+ catch (e) {
110
+ // PerformanceObserver not fully supported
111
+ }
112
+ // Navigation Timing
113
+ if (window.performance && window.performance.timing) {
114
+ window.addEventListener('load', () => {
115
+ setTimeout(() => {
116
+ const timing = window.performance.timing;
117
+ devTools.updatePerformance({
118
+ ttfb: timing.responseStart - timing.requestStart,
119
+ domLoad: timing.domContentLoadedEventEnd - timing.navigationStart,
120
+ pageLoad: timing.loadEventEnd - timing.navigationStart,
121
+ });
122
+ }, 0);
123
+ });
124
+ }
125
+ }
126
+ // ============================================================================
127
+ // Error Instrumentation
128
+ // ============================================================================
129
+ export function instrumentErrors() {
130
+ const devTools = getDevTools();
131
+ if (!devTools || typeof window === 'undefined')
132
+ return;
133
+ // Global error handler
134
+ window.addEventListener('error', (event) => {
135
+ devTools.logError({
136
+ message: event.message,
137
+ source: event.filename,
138
+ line: event.lineno,
139
+ column: event.colno,
140
+ stack: event.error?.stack,
141
+ });
142
+ });
143
+ // Unhandled promise rejections
144
+ window.addEventListener('unhandledrejection', (event) => {
145
+ const message = event.reason instanceof Error
146
+ ? event.reason.message
147
+ : String(event.reason);
148
+ devTools.logError({
149
+ message: `Unhandled Promise Rejection: ${message}`,
150
+ stack: event.reason instanceof Error ? event.reason.stack : undefined,
151
+ });
152
+ });
153
+ }
154
+ // ============================================================================
155
+ // Console Instrumentation
156
+ // ============================================================================
157
+ const originalConsole = {};
158
+ export function instrumentConsole() {
159
+ const devTools = getDevTools();
160
+ if (!devTools || typeof console === 'undefined')
161
+ return;
162
+ const levels = ['log', 'info', 'warn', 'error'];
163
+ levels.forEach(level => {
164
+ originalConsole[level] = console[level];
165
+ console[level] = (...args) => {
166
+ // Call original
167
+ originalConsole[level]?.apply(console, args);
168
+ // Log to DevTools
169
+ const message = args.map(arg => {
170
+ if (typeof arg === 'string')
171
+ return arg;
172
+ try {
173
+ return JSON.stringify(arg);
174
+ }
175
+ catch {
176
+ return String(arg);
177
+ }
178
+ }).join(' ');
179
+ devTools.logConsole(level, message);
180
+ };
181
+ });
182
+ }
183
+ // ============================================================================
184
+ // File Router Instrumentation
9
185
  // ============================================================================
10
- /**
11
- * Instrument file router to report routes to DevTools
12
- */
13
186
  export function instrumentFileRouter(routes) {
14
187
  const devTools = getDevTools();
15
188
  if (!devTools)
16
189
  return;
17
- const routeInfos = routes.map(route => ({
190
+ // Convert generic routes to RouteInfo format
191
+ const routeInfos = routes.map((route) => ({
18
192
  method: route.method || 'GET',
19
- path: route.path || '/',
20
- type: route.type || 'page',
21
- filePath: route.filePath || '',
193
+ path: route.path || route.pattern || '/',
194
+ type: route.type || (route.path?.includes('/api') ? 'api' : 'page'),
195
+ filePath: route.filePath || route.file || '',
196
+ params: extractParams(route.path || ''),
22
197
  slot: route.slot,
198
+ middleware: route.middleware,
23
199
  interceptInfo: route.interceptInfo,
24
200
  }));
25
201
  devTools.registerRoutes(routeInfos);
26
202
  }
203
+ function extractParams(path) {
204
+ const params = [];
205
+ // Extract :param style
206
+ const colonParams = path.match(/:([^\/]+)/g);
207
+ if (colonParams) {
208
+ params.push(...colonParams.map(p => p.slice(1)));
209
+ }
210
+ // Extract [param] style
211
+ const bracketParams = path.match(/\[([^\]]+)\]/g);
212
+ if (bracketParams) {
213
+ params.push(...bracketParams.map(p => p.slice(1, -1)));
214
+ }
215
+ return params;
216
+ }
27
217
  // ============================================================================
28
218
  // Adapter Instrumentation
29
219
  // ============================================================================
30
- /**
31
- * Instrument an adapter to report to DevTools
32
- */
33
- export function instrumentAdapter(adapter, type) {
220
+ export function instrumentAdapter(adapter, info) {
34
221
  const devTools = getDevTools();
35
222
  if (!devTools)
36
- return;
223
+ return adapter;
37
224
  devTools.registerAdapter({
38
- name: adapter.name,
39
- type,
225
+ name: info.name,
226
+ type: info.type,
40
227
  status: 'connected',
41
228
  });
229
+ // Wrap methods to track errors
230
+ return new Proxy(adapter, {
231
+ get(target, prop) {
232
+ const value = target[prop];
233
+ if (typeof value === 'function') {
234
+ return async function (...args) {
235
+ try {
236
+ const result = await value.apply(target, args);
237
+ devTools.registerAdapter({
238
+ name: info.name,
239
+ type: info.type,
240
+ status: 'connected',
241
+ });
242
+ return result;
243
+ }
244
+ catch (error) {
245
+ devTools.registerAdapter({
246
+ name: info.name,
247
+ type: info.type,
248
+ status: 'error',
249
+ });
250
+ throw error;
251
+ }
252
+ };
253
+ }
254
+ return value;
255
+ },
256
+ });
42
257
  }
43
- /**
44
- * Report adapter error to DevTools
45
- */
46
- export function reportAdapterError(adapterName) {
47
- const devTools = getDevTools();
48
- if (!devTools)
49
- return;
50
- const state = devTools.getState();
51
- const adapter = state.adapters.find(a => a.name === adapterName);
52
- if (adapter) {
53
- devTools.registerAdapter({
54
- ...adapter,
55
- status: 'error',
56
- });
57
- }
58
- }
59
- // ============================================================================
60
- // Cache Instrumentation
61
- // ============================================================================
62
- /**
63
- * Instrument a cache to report to DevTools
64
- */
65
- export function instrumentCache(cache) {
258
+ export function reportAdapterError(name, type, error) {
66
259
  const devTools = getDevTools();
67
260
  if (!devTools)
68
261
  return;
69
- const cacheInfos = Array.from(cache.entries()).map(([key, value]) => ({
70
- key,
71
- size: JSON.stringify(value).length,
72
- hits: 0,
73
- lastAccessed: Date.now(),
74
- }));
75
- devTools.updateCache(cacheInfos);
262
+ devTools.registerAdapter({ name, type, status: 'error' });
263
+ devTools.logError({
264
+ message: `Adapter Error (${name}): ${error.message}`,
265
+ stack: error.stack,
266
+ });
76
267
  }
77
268
  // ============================================================================
78
- // Auto-Instrumentation
269
+ // Auto-Instrument All
79
270
  // ============================================================================
80
- /**
81
- * Auto-instrument common Flight patterns
82
- * Call this once during app initialization
83
- */
271
+ let instrumented = false;
84
272
  export function autoInstrument() {
85
- if (process.env.NODE_ENV !== 'development')
273
+ if (instrumented)
274
+ return;
275
+ instrumented = true;
276
+ const devTools = getDevTools();
277
+ if (!devTools) {
278
+ console.warn('[Flight DevTools] Cannot auto-instrument: DevTools not enabled');
86
279
  return;
87
- console.log('[Flight DevTools] Auto-instrumentation enabled');
88
- // Instrument fetch for request logging
89
- if (typeof globalThis.fetch !== 'undefined') {
90
- const originalFetch = globalThis.fetch;
91
- globalThis.fetch = async (input, init) => {
92
- const devTools = getDevTools();
93
- const start = performance.now();
94
- try {
95
- const response = await originalFetch(input, init);
96
- if (devTools) {
97
- const url = typeof input === 'string'
98
- ? input
99
- : input instanceof URL
100
- ? input.pathname
101
- : input.url;
102
- devTools.logRequest({
103
- method: init?.method || 'GET',
104
- path: new URL(url, 'http://localhost').pathname,
105
- status: response.status,
106
- duration: Math.round(performance.now() - start),
107
- });
108
- }
109
- return response;
110
- }
111
- catch (error) {
112
- if (devTools) {
113
- const url = typeof input === 'string' ? input : input?.url || '/';
114
- devTools.logRequest({
115
- method: init?.method || 'GET',
116
- path: new URL(url, 'http://localhost').pathname,
117
- status: 0,
118
- duration: Math.round(performance.now() - start),
119
- });
120
- }
121
- throw error;
122
- }
123
- };
124
280
  }
281
+ instrumentFetch();
282
+ instrumentPerformance();
283
+ instrumentErrors();
284
+ instrumentConsole();
285
+ console.log('[Flight DevTools] Auto-instrumentation enabled');
125
286
  }
126
287
  //# sourceMappingURL=instrumentation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../src/instrumentation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../src/instrumentation.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,+EAA+E;AAC/E,wBAAwB;AACxB,+EAA+E;AAE/E,IAAI,aAAa,GAAwB,IAAI,CAAC;AAE9C,MAAM,UAAU,eAAe;IAC3B,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,IAAI,CAAC,QAAQ,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,aAAa;QAAE,OAAO;IAExE,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC;IAE7B,MAAM,CAAC,KAAK,GAAG,KAAK,EAAE,KAAwB,EAAE,IAAkB,EAAqB,EAAE;QACrF,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,YAAY,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;QACpG,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,IAAI,KAAK,CAAC;QAErC,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,aAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YACnD,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;YAE3C,0BAA0B;YAC1B,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;YAChC,IAAI,IAAwB,CAAC;YAE7B,IAAI,CAAC;gBACD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;gBACjC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACrB,CAAC;YAAC,MAAM,CAAC;gBACL,kCAAkC;YACtC,CAAC;YAED,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAEvD,QAAQ,CAAC,UAAU,CAAC;gBAChB,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE;gBAC5B,IAAI,EAAE,SAAS,CAAC,QAAQ,GAAG,SAAS,CAAC,MAAM;gBAC3C,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;gBAC9B,IAAI;gBACJ,IAAI,EAAE,OAAO;gBACb,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,KAAK;aACpD,CAAC,CAAC;YAEH,OAAO,QAAQ,CAAC;QACpB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;YAC3C,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAEvD,QAAQ,CAAC,UAAU,CAAC;gBAChB,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE;gBAC5B,IAAI,EAAE,SAAS,CAAC,QAAQ,GAAG,SAAS,CAAC,MAAM;gBAC3C,MAAM,EAAE,CAAC;gBACT,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;gBAC9B,IAAI,EAAE,OAAO;aAChB,CAAC,CAAC;YAEH,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC,CAAC;AACN,CAAC;AAED,+EAA+E;AAC/E,8BAA8B;AAC9B,+EAA+E;AAE/E,MAAM,UAAU,qBAAqB;IACjC,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,IAAI,CAAC,QAAQ,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,mBAAmB,KAAK,WAAW;QAAE,OAAO;IAErG,kBAAkB;IAClB,IAAI,CAAC;QACD,iCAAiC;QACjC,MAAM,WAAW,GAAG,IAAI,mBAAmB,CAAC,CAAC,IAAI,EAAE,EAAE;YACjD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YAClC,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAA6C,CAAC;YAC1F,QAAQ,CAAC,iBAAiB,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;QACH,WAAW,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,0BAA0B,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAE1E,0BAA0B;QAC1B,MAAM,WAAW,GAAG,IAAI,mBAAmB,CAAC,CAAC,IAAI,EAAE,EAAE;YACjD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAA2E,CAAC;YAC3G,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC9B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,eAAe,GAAG,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YACvG,CAAC;QACL,CAAC,CAAC,CAAC;QACH,WAAW,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAE7D,gCAAgC;QAChC,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,MAAM,WAAW,GAAG,IAAI,mBAAmB,CAAC,CAAC,IAAI,EAAE,EAAE;YACjD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAuE,CAAC;YACvG,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC1B,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;oBACxB,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC;gBAC5B,CAAC;YACL,CAAC;YACD,QAAQ,CAAC,iBAAiB,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QACH,WAAW,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAE9D,+BAA+B;QAC/B,MAAM,WAAW,GAAG,IAAI,mBAAmB,CAAC,CAAC,IAAI,EAAE,EAAE;YACjD,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,CAAC;YAChE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,QAAQ,CAAC,iBAAiB,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YAC1E,CAAC;QACL,CAAC,CAAC,CAAC;QACH,WAAW,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAE3D,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,0CAA0C;IAC9C,CAAC;IAED,oBAAoB;IACpB,IAAI,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;QAClD,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE;YACjC,UAAU,CAAC,GAAG,EAAE;gBACZ,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC;gBACzC,QAAQ,CAAC,iBAAiB,CAAC;oBACvB,IAAI,EAAE,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC,YAAY;oBAChD,OAAO,EAAE,MAAM,CAAC,wBAAwB,GAAG,MAAM,CAAC,eAAe;oBACjE,QAAQ,EAAE,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,eAAe;iBACzD,CAAC,CAAC;YACP,CAAC,EAAE,CAAC,CAAC,CAAC;QACV,CAAC,CAAC,CAAC;IACP,CAAC;AACL,CAAC;AAED,+EAA+E;AAC/E,wBAAwB;AACxB,+EAA+E;AAE/E,MAAM,UAAU,gBAAgB;IAC5B,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,IAAI,CAAC,QAAQ,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO;IAEvD,uBAAuB;IACvB,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;QACvC,QAAQ,CAAC,QAAQ,CAAC;YACd,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,MAAM,EAAE,KAAK,CAAC,QAAQ;YACtB,IAAI,EAAE,KAAK,CAAC,MAAM;YAClB,MAAM,EAAE,KAAK,CAAC,KAAK;YACnB,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK;SAC5B,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,+BAA+B;IAC/B,MAAM,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,CAAC,KAAK,EAAE,EAAE;QACpD,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,YAAY,KAAK;YACzC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO;YACtB,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAE3B,QAAQ,CAAC,QAAQ,CAAC;YACd,OAAO,EAAE,gCAAgC,OAAO,EAAE;YAClD,KAAK,EAAE,KAAK,CAAC,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;SACxE,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC;AAED,+EAA+E;AAC/E,0BAA0B;AAC1B,+EAA+E;AAE/E,MAAM,eAAe,GAAqB,EAAE,CAAC;AAE7C,MAAM,UAAU,iBAAiB;IAC7B,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,IAAI,CAAC,QAAQ,IAAI,OAAO,OAAO,KAAK,WAAW;QAAE,OAAO;IAExD,MAAM,MAAM,GAA0C,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAEvF,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACnB,eAAe,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;QAExC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE;YACpC,gBAAgB;YAChB,eAAe,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAE7C,kBAAkB;YAClB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gBAC3B,IAAI,OAAO,GAAG,KAAK,QAAQ;oBAAE,OAAO,GAAG,CAAC;gBACxC,IAAI,CAAC;oBACD,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBAC/B,CAAC;gBAAC,MAAM,CAAC;oBACL,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;gBACvB,CAAC;YACL,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAEb,QAAQ,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACxC,CAAC,CAAC;IACN,CAAC,CAAC,CAAC;AACP,CAAC;AAED,+EAA+E;AAC/E,8BAA8B;AAC9B,+EAA+E;AAE/E,MAAM,UAAU,oBAAoB,CAAC,MAAiB;IAClD,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,IAAI,CAAC,QAAQ;QAAE,OAAO;IAEtB,6CAA6C;IAC7C,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,CAAC;QAC3C,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,KAAK;QAC7B,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,IAAI,GAAG;QACxC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QACnE,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,IAAI,IAAI,EAAE;QAC5C,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;QACvC,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,aAAa,EAAE,KAAK,CAAC,aAAa;KACrC,CAAC,CAAC,CAAC;IAEJ,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,aAAa,CAAC,IAAY;IAC/B,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,uBAAuB;IACvB,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC7C,IAAI,WAAW,EAAE,CAAC;QACd,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,wBAAwB;IACxB,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAClD,IAAI,aAAa,EAAE,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,+EAA+E;AAC/E,0BAA0B;AAC1B,+EAA+E;AAE/E,MAAM,UAAU,iBAAiB,CAC7B,OAAU,EACV,IAAqG;IAErG,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,IAAI,CAAC,QAAQ;QAAE,OAAO,OAAO,CAAC;IAE9B,QAAQ,CAAC,eAAe,CAAC;QACrB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,MAAM,EAAE,WAAW;KACtB,CAAC,CAAC;IAEH,+BAA+B;IAC/B,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE;QACtB,GAAG,CAAC,MAAM,EAAE,IAAI;YACZ,MAAM,KAAK,GAAI,MAAc,CAAC,IAAI,CAAC,CAAC;YAEpC,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;gBAC9B,OAAO,KAAK,WAAW,GAAG,IAAe;oBACrC,IAAI,CAAC;wBACD,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;wBAC/C,QAAQ,CAAC,eAAe,CAAC;4BACrB,IAAI,EAAE,IAAI,CAAC,IAAI;4BACf,IAAI,EAAE,IAAI,CAAC,IAAI;4BACf,MAAM,EAAE,WAAW;yBACtB,CAAC,CAAC;wBACH,OAAO,MAAM,CAAC;oBAClB,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACb,QAAQ,CAAC,eAAe,CAAC;4BACrB,IAAI,EAAE,IAAI,CAAC,IAAI;4BACf,IAAI,EAAE,IAAI,CAAC,IAAI;4BACf,MAAM,EAAE,OAAO;yBAClB,CAAC,CAAC;wBACH,MAAM,KAAK,CAAC;oBAChB,CAAC;gBACL,CAAC,CAAC;YACN,CAAC;YAED,OAAO,KAAK,CAAC;QACjB,CAAC;KACJ,CAAC,CAAC;AACP,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,IAA6E,EAAE,KAAY;IACxI,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,IAAI,CAAC,QAAQ;QAAE,OAAO;IAEtB,QAAQ,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IAC1D,QAAQ,CAAC,QAAQ,CAAC;QACd,OAAO,EAAE,kBAAkB,IAAI,MAAM,KAAK,CAAC,OAAO,EAAE;QACpD,KAAK,EAAE,KAAK,CAAC,KAAK;KACrB,CAAC,CAAC;AACP,CAAC;AAED,+EAA+E;AAC/E,sBAAsB;AACtB,+EAA+E;AAE/E,IAAI,YAAY,GAAG,KAAK,CAAC;AAEzB,MAAM,UAAU,cAAc;IAC1B,IAAI,YAAY;QAAE,OAAO;IACzB,YAAY,GAAG,IAAI,CAAC;IAEpB,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,IAAI,CAAC,QAAQ,EAAE,CAAC;QACZ,OAAO,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAC;QAC/E,OAAO;IACX,CAAC;IAED,eAAe,EAAE,CAAC;IAClB,qBAAqB,EAAE,CAAC;IACxB,gBAAgB,EAAE,CAAC;IACnB,iBAAiB,EAAE,CAAC;IAEpB,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;AAClE,CAAC"}
package/dist/panel.d.ts CHANGED
@@ -1,12 +1,8 @@
1
1
  /**
2
2
  * @flight-framework/devtools/panel - DevTools Panel UI
3
3
  *
4
- * React component for the DevTools floating panel.
5
- * Automatically injected into pages during development.
6
- */
7
- /**
8
- * Inject the DevTools panel into the page
9
- * Call this in your app's entry point during development
4
+ * Enhanced floating panel with collapsible sections, real-time updates,
5
+ * and improved data visualization.
10
6
  */
11
7
  export declare function injectDevToolsPanel(): void;
12
8
  //# sourceMappingURL=panel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../src/panel.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAmI1C"}
1
+ {"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../src/panel.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA8BH,wBAAgB,mBAAmB,IAAI,IAAI,CAsY1C"}