@flight-framework/devtools 1.0.0 → 1.0.1

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle-panel.js","sourceRoot":"","sources":["../src/bundle-panel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * @flight-framework/devtools - Cache Panel (Enhanced)
3
+ *
4
+ * Enhanced cache inspection with real-time updates,
5
+ * tag management, and invalidation controls.
6
+ */
7
+ /**
8
+ * Enhanced cache entry information
9
+ */
10
+ export interface CacheEntry {
11
+ /** Cache key */
12
+ key: string;
13
+ /** Size in bytes */
14
+ size: number;
15
+ /** Number of cache hits */
16
+ hits: number;
17
+ /** Number of cache misses */
18
+ misses: number;
19
+ /** When entry was created */
20
+ createdAt: number;
21
+ /** When entry was last accessed */
22
+ lastAccessedAt: number;
23
+ /** Time-to-live in seconds (if set) */
24
+ ttl?: number;
25
+ /** When entry expires */
26
+ expiresAt?: number;
27
+ /** Tags associated with this entry */
28
+ tags: string[];
29
+ /** Entry status */
30
+ status: 'fresh' | 'stale' | 'revalidating' | 'expired';
31
+ /** Data type hint */
32
+ dataType: 'json' | 'html' | 'text' | 'binary' | 'unknown';
33
+ /** Source of the cached data */
34
+ source?: string;
35
+ }
36
+ /**
37
+ * Cache metrics
38
+ */
39
+ export interface CacheMetrics {
40
+ /** Total entries */
41
+ totalEntries: number;
42
+ /** Total size in bytes */
43
+ totalSize: number;
44
+ /** Total hits across all entries */
45
+ totalHits: number;
46
+ /** Total misses */
47
+ totalMisses: number;
48
+ /** Hit rate percentage */
49
+ hitRate: number;
50
+ /** Number of stale entries */
51
+ staleEntries: number;
52
+ /** Number of expired entries */
53
+ expiredEntries: number;
54
+ /** Unique tags */
55
+ uniqueTags: string[];
56
+ }
57
+ /**
58
+ * Register or update a cache entry
59
+ */
60
+ export declare function updateCacheEntry(entry: CacheEntry): void;
61
+ /**
62
+ * Remove a cache entry
63
+ */
64
+ export declare function removeCacheEntry(key: string): void;
65
+ /**
66
+ * Record a cache hit
67
+ */
68
+ export declare function recordCacheHit(key: string): void;
69
+ /**
70
+ * Record a cache miss
71
+ */
72
+ export declare function recordCacheMiss(key: string): void;
73
+ /**
74
+ * Invalidate entries by tag
75
+ */
76
+ export declare function invalidateByTag(tag: string): number;
77
+ /**
78
+ * Invalidate entry by key
79
+ */
80
+ export declare function invalidateByKey(key: string): boolean;
81
+ /**
82
+ * Clear all cache entries
83
+ */
84
+ export declare function clearAllCache(): void;
85
+ /**
86
+ * Subscribe to cache updates
87
+ */
88
+ export declare function subscribeToCache(callback: (entries: CacheEntry[], metrics: CacheMetrics) => void): () => void;
89
+ /**
90
+ * Get current cache state
91
+ */
92
+ export declare function getCacheState(): {
93
+ entries: CacheEntry[];
94
+ metrics: CacheMetrics;
95
+ };
96
+ /**
97
+ * Generate HTML for the cache panel
98
+ */
99
+ export declare function renderCachePanel(entriesList: CacheEntry[], metrics: CacheMetrics): string;
100
+ /**
101
+ * CSS styles for the cache panel
102
+ */
103
+ export declare const cachePanelStyles = "\n.flight-dt-cache-panel {\n padding: 8px;\n}\n\n.flight-dt-cache-summary {\n display: flex;\n gap: 16px;\n padding: 8px;\n background: rgba(255, 255, 255, 0.05);\n border-radius: 6px;\n margin-bottom: 12px;\n}\n\n.flight-dt-metric--good .flight-dt-metric-value {\n color: #22c55e;\n}\n\n.flight-dt-cache-tags {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n margin-bottom: 12px;\n}\n\n.flight-dt-tag {\n background: rgba(139, 92, 246, 0.2);\n border: 1px solid rgba(139, 92, 246, 0.3);\n color: #a78bfa;\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 10px;\n cursor: pointer;\n}\n\n.flight-dt-tag:hover {\n background: rgba(139, 92, 246, 0.3);\n}\n\n.flight-dt-tag-more {\n font-size: 10px;\n color: #666;\n padding: 2px 8px;\n}\n\n.flight-dt-cache-list {\n display: flex;\n flex-direction: column;\n gap: 4px;\n max-height: 200px;\n overflow-y: auto;\n}\n\n.flight-dt-cache-entry {\n padding: 6px 8px;\n background: rgba(255, 255, 255, 0.03);\n border-radius: 4px;\n}\n\n.flight-dt-cache-entry-header {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.flight-dt-cache-status {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n}\n\n.flight-dt-cache-key {\n flex: 1;\n font-family: monospace;\n font-size: 11px;\n color: #e0e0e0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.flight-dt-cache-size {\n font-family: monospace;\n font-size: 11px;\n color: #888;\n}\n\n.flight-dt-cache-entry-meta {\n display: flex;\n gap: 12px;\n margin-top: 4px;\n font-size: 10px;\n color: #666;\n}\n\n.flight-dt-cache-more {\n text-align: center;\n font-size: 11px;\n color: #666;\n padding: 8px;\n}\n\n.flight-dt-cache-actions {\n margin-top: 12px;\n display: flex;\n justify-content: flex-end;\n}\n\n.flight-dt-btn {\n padding: 4px 12px;\n border: 1px solid #444;\n border-radius: 4px;\n background: transparent;\n color: #888;\n font-size: 11px;\n cursor: pointer;\n}\n\n.flight-dt-btn:hover {\n color: #e0e0e0;\n border-color: #666;\n}\n\n.flight-dt-btn--danger {\n border-color: rgba(239, 68, 68, 0.3);\n color: #ef4444;\n}\n\n.flight-dt-btn--danger:hover {\n background: rgba(239, 68, 68, 0.1);\n}\n";
104
+ //# sourceMappingURL=cache-panel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-panel.d.ts","sourceRoot":"","sources":["../src/cache-panel.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH;;GAEG;AACH,MAAM,WAAW,UAAU;IACvB,gBAAgB;IAChB,GAAG,EAAE,MAAM,CAAC;IAEZ,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IAEb,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAC;IAEb,6BAA6B;IAC7B,MAAM,EAAE,MAAM,CAAC;IAEf,6BAA6B;IAC7B,SAAS,EAAE,MAAM,CAAC;IAElB,mCAAmC;IACnC,cAAc,EAAE,MAAM,CAAC;IAEvB,uCAAuC;IACvC,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,yBAAyB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,sCAAsC;IACtC,IAAI,EAAE,MAAM,EAAE,CAAC;IAEf,mBAAmB;IACnB,MAAM,EAAE,OAAO,GAAG,OAAO,GAAG,cAAc,GAAG,SAAS,CAAC;IAEvD,qBAAqB;IACrB,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;IAE1D,gCAAgC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IACzB,oBAAoB;IACpB,YAAY,EAAE,MAAM,CAAC;IAErB,0BAA0B;IAC1B,SAAS,EAAE,MAAM,CAAC;IAElB,oCAAoC;IACpC,SAAS,EAAE,MAAM,CAAC;IAElB,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC;IAEpB,0BAA0B;IAC1B,OAAO,EAAE,MAAM,CAAC;IAEhB,8BAA8B;IAC9B,YAAY,EAAE,MAAM,CAAC;IAErB,gCAAgC;IAChC,cAAc,EAAE,MAAM,CAAC;IAEvB,kBAAkB;IAClB,UAAU,EAAE,MAAM,EAAE,CAAC;CACxB;AA8CD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAGxD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAGlD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAQhD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAOjD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAanD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAQpD;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAGpC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC5B,QAAQ,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,YAAY,KAAK,IAAI,GACjE,MAAM,IAAI,CAOZ;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI;IAC7B,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,OAAO,EAAE,YAAY,CAAC;CACzB,CAMA;AAsBD;;GAEG;AACH,wBAAgB,gBAAgB,CAC5B,WAAW,EAAE,UAAU,EAAE,EACzB,OAAO,EAAE,YAAY,GACtB,MAAM,CAqER;AAeD;;GAEG;AACH,eAAO,MAAM,gBAAgB,0zEAmI5B,CAAC"}
@@ -0,0 +1,372 @@
1
+ /**
2
+ * @flight-framework/devtools - Cache Panel (Enhanced)
3
+ *
4
+ * Enhanced cache inspection with real-time updates,
5
+ * tag management, and invalidation controls.
6
+ */
7
+ // ============================================================================
8
+ // State Management
9
+ // ============================================================================
10
+ const entries = new Map();
11
+ const subscribers = new Set();
12
+ function notify() {
13
+ const entriesList = Array.from(entries.values());
14
+ const metrics = calculateMetrics(entriesList);
15
+ for (const callback of subscribers) {
16
+ callback(entriesList, metrics);
17
+ }
18
+ }
19
+ function calculateMetrics(entriesList) {
20
+ const totalHits = entriesList.reduce((sum, e) => sum + e.hits, 0);
21
+ const totalMisses = entriesList.reduce((sum, e) => sum + e.misses, 0);
22
+ const total = totalHits + totalMisses;
23
+ const allTags = new Set();
24
+ for (const entry of entriesList) {
25
+ for (const tag of entry.tags) {
26
+ allTags.add(tag);
27
+ }
28
+ }
29
+ return {
30
+ totalEntries: entriesList.length,
31
+ totalSize: entriesList.reduce((sum, e) => sum + e.size, 0),
32
+ totalHits,
33
+ totalMisses,
34
+ hitRate: total > 0 ? (totalHits / total) * 100 : 0,
35
+ staleEntries: entriesList.filter(e => e.status === 'stale').length,
36
+ expiredEntries: entriesList.filter(e => e.status === 'expired').length,
37
+ uniqueTags: Array.from(allTags).sort(),
38
+ };
39
+ }
40
+ // ============================================================================
41
+ // Public API
42
+ // ============================================================================
43
+ /**
44
+ * Register or update a cache entry
45
+ */
46
+ export function updateCacheEntry(entry) {
47
+ entries.set(entry.key, entry);
48
+ notify();
49
+ }
50
+ /**
51
+ * Remove a cache entry
52
+ */
53
+ export function removeCacheEntry(key) {
54
+ entries.delete(key);
55
+ notify();
56
+ }
57
+ /**
58
+ * Record a cache hit
59
+ */
60
+ export function recordCacheHit(key) {
61
+ const entry = entries.get(key);
62
+ if (!entry)
63
+ return;
64
+ entry.hits++;
65
+ entry.lastAccessedAt = Date.now();
66
+ entries.set(key, entry);
67
+ notify();
68
+ }
69
+ /**
70
+ * Record a cache miss
71
+ */
72
+ export function recordCacheMiss(key) {
73
+ const entry = entries.get(key);
74
+ if (!entry)
75
+ return;
76
+ entry.misses++;
77
+ entries.set(key, entry);
78
+ notify();
79
+ }
80
+ /**
81
+ * Invalidate entries by tag
82
+ */
83
+ export function invalidateByTag(tag) {
84
+ let count = 0;
85
+ for (const [key, entry] of entries) {
86
+ if (entry.tags.includes(tag)) {
87
+ entry.status = 'stale';
88
+ entries.set(key, entry);
89
+ count++;
90
+ }
91
+ }
92
+ notify();
93
+ return count;
94
+ }
95
+ /**
96
+ * Invalidate entry by key
97
+ */
98
+ export function invalidateByKey(key) {
99
+ const entry = entries.get(key);
100
+ if (!entry)
101
+ return false;
102
+ entry.status = 'stale';
103
+ entries.set(key, entry);
104
+ notify();
105
+ return true;
106
+ }
107
+ /**
108
+ * Clear all cache entries
109
+ */
110
+ export function clearAllCache() {
111
+ entries.clear();
112
+ notify();
113
+ }
114
+ /**
115
+ * Subscribe to cache updates
116
+ */
117
+ export function subscribeToCache(callback) {
118
+ subscribers.add(callback);
119
+ const entriesList = Array.from(entries.values());
120
+ callback(entriesList, calculateMetrics(entriesList));
121
+ return () => subscribers.delete(callback);
122
+ }
123
+ /**
124
+ * Get current cache state
125
+ */
126
+ export function getCacheState() {
127
+ const entriesList = Array.from(entries.values());
128
+ return {
129
+ entries: entriesList,
130
+ metrics: calculateMetrics(entriesList),
131
+ };
132
+ }
133
+ // ============================================================================
134
+ // Panel Rendering
135
+ // ============================================================================
136
+ function formatBytes(bytes) {
137
+ if (bytes < 1024)
138
+ return `${bytes} B`;
139
+ if (bytes < 1024 * 1024)
140
+ return `${(bytes / 1024).toFixed(1)} KB`;
141
+ return `${(bytes / (1024 * 1024)).toFixed(2)} MB`;
142
+ }
143
+ function formatRelativeTime(timestamp) {
144
+ const now = Date.now();
145
+ const diff = now - timestamp;
146
+ if (diff < 1000)
147
+ return 'now';
148
+ if (diff < 60000)
149
+ return `${Math.floor(diff / 1000)}s ago`;
150
+ if (diff < 3600000)
151
+ return `${Math.floor(diff / 60000)}m ago`;
152
+ return `${Math.floor(diff / 3600000)}h ago`;
153
+ }
154
+ /**
155
+ * Generate HTML for the cache panel
156
+ */
157
+ export function renderCachePanel(entriesList, metrics) {
158
+ const statusColors = {
159
+ fresh: '#22c55e',
160
+ stale: '#fbbf24',
161
+ revalidating: '#3b82f6',
162
+ expired: '#ef4444',
163
+ };
164
+ const sortedEntries = [...entriesList].sort((a, b) => b.lastAccessedAt - a.lastAccessedAt);
165
+ return `
166
+ <div class="flight-dt-cache-panel">
167
+ <div class="flight-dt-cache-summary">
168
+ <div class="flight-dt-metric">
169
+ <span class="flight-dt-metric-value">${metrics.totalEntries}</span>
170
+ <span class="flight-dt-metric-label">Entries</span>
171
+ </div>
172
+ <div class="flight-dt-metric">
173
+ <span class="flight-dt-metric-value">${formatBytes(metrics.totalSize)}</span>
174
+ <span class="flight-dt-metric-label">Size</span>
175
+ </div>
176
+ <div class="flight-dt-metric ${metrics.hitRate >= 80 ? 'flight-dt-metric--good' : metrics.hitRate >= 50 ? '' : 'flight-dt-metric--warning'}">
177
+ <span class="flight-dt-metric-value">${metrics.hitRate.toFixed(1)}%</span>
178
+ <span class="flight-dt-metric-label">Hit Rate</span>
179
+ </div>
180
+ <div class="flight-dt-metric">
181
+ <span class="flight-dt-metric-value">${metrics.totalHits}</span>
182
+ <span class="flight-dt-metric-label">Hits</span>
183
+ </div>
184
+ </div>
185
+
186
+ ${metrics.uniqueTags.length > 0 ? `
187
+ <div class="flight-dt-cache-tags">
188
+ ${metrics.uniqueTags.slice(0, 8).map(tag => `
189
+ <button class="flight-dt-tag" data-tag="${escapeHtml(tag)}" title="Click to invalidate">
190
+ ${escapeHtml(tag)}
191
+ </button>
192
+ `).join('')}
193
+ ${metrics.uniqueTags.length > 8 ? `<span class="flight-dt-tag-more">+${metrics.uniqueTags.length - 8}</span>` : ''}
194
+ </div>
195
+ ` : ''}
196
+
197
+ <div class="flight-dt-cache-list">
198
+ ${sortedEntries.slice(0, 15).map(entry => `
199
+ <div class="flight-dt-cache-entry" data-key="${escapeHtml(entry.key)}">
200
+ <div class="flight-dt-cache-entry-header">
201
+ <span class="flight-dt-cache-status" style="background: ${statusColors[entry.status]}" title="${entry.status}"></span>
202
+ <span class="flight-dt-cache-key" title="${escapeHtml(entry.key)}">${escapeHtml(truncateKey(entry.key))}</span>
203
+ <span class="flight-dt-cache-size">${formatBytes(entry.size)}</span>
204
+ </div>
205
+ <div class="flight-dt-cache-entry-meta">
206
+ <span class="flight-dt-cache-hits">${entry.hits} hits</span>
207
+ <span class="flight-dt-cache-time">${formatRelativeTime(entry.lastAccessedAt)}</span>
208
+ ${entry.ttl ? `<span class="flight-dt-cache-ttl">TTL: ${entry.ttl}s</span>` : ''}
209
+ </div>
210
+ </div>
211
+ `).join('')}
212
+ ${sortedEntries.length > 15 ? `<div class="flight-dt-cache-more">+ ${sortedEntries.length - 15} more entries</div>` : ''}
213
+ </div>
214
+
215
+ ${sortedEntries.length === 0 ? '<div class="flight-dt-empty">No cache entries</div>' : ''}
216
+
217
+ <div class="flight-dt-cache-actions">
218
+ <button class="flight-dt-btn flight-dt-btn--danger" data-action="clear-cache">
219
+ Clear All
220
+ </button>
221
+ </div>
222
+ </div>
223
+ `;
224
+ }
225
+ function truncateKey(key) {
226
+ if (key.length <= 40)
227
+ return key;
228
+ return key.slice(0, 20) + '...' + key.slice(-15);
229
+ }
230
+ function escapeHtml(str) {
231
+ return str
232
+ .replace(/&/g, '&amp;')
233
+ .replace(/</g, '&lt;')
234
+ .replace(/>/g, '&gt;')
235
+ .replace(/"/g, '&quot;');
236
+ }
237
+ /**
238
+ * CSS styles for the cache panel
239
+ */
240
+ export const cachePanelStyles = `
241
+ .flight-dt-cache-panel {
242
+ padding: 8px;
243
+ }
244
+
245
+ .flight-dt-cache-summary {
246
+ display: flex;
247
+ gap: 16px;
248
+ padding: 8px;
249
+ background: rgba(255, 255, 255, 0.05);
250
+ border-radius: 6px;
251
+ margin-bottom: 12px;
252
+ }
253
+
254
+ .flight-dt-metric--good .flight-dt-metric-value {
255
+ color: #22c55e;
256
+ }
257
+
258
+ .flight-dt-cache-tags {
259
+ display: flex;
260
+ flex-wrap: wrap;
261
+ gap: 6px;
262
+ margin-bottom: 12px;
263
+ }
264
+
265
+ .flight-dt-tag {
266
+ background: rgba(139, 92, 246, 0.2);
267
+ border: 1px solid rgba(139, 92, 246, 0.3);
268
+ color: #a78bfa;
269
+ padding: 2px 8px;
270
+ border-radius: 12px;
271
+ font-size: 10px;
272
+ cursor: pointer;
273
+ }
274
+
275
+ .flight-dt-tag:hover {
276
+ background: rgba(139, 92, 246, 0.3);
277
+ }
278
+
279
+ .flight-dt-tag-more {
280
+ font-size: 10px;
281
+ color: #666;
282
+ padding: 2px 8px;
283
+ }
284
+
285
+ .flight-dt-cache-list {
286
+ display: flex;
287
+ flex-direction: column;
288
+ gap: 4px;
289
+ max-height: 200px;
290
+ overflow-y: auto;
291
+ }
292
+
293
+ .flight-dt-cache-entry {
294
+ padding: 6px 8px;
295
+ background: rgba(255, 255, 255, 0.03);
296
+ border-radius: 4px;
297
+ }
298
+
299
+ .flight-dt-cache-entry-header {
300
+ display: flex;
301
+ align-items: center;
302
+ gap: 8px;
303
+ }
304
+
305
+ .flight-dt-cache-status {
306
+ width: 8px;
307
+ height: 8px;
308
+ border-radius: 50%;
309
+ }
310
+
311
+ .flight-dt-cache-key {
312
+ flex: 1;
313
+ font-family: monospace;
314
+ font-size: 11px;
315
+ color: #e0e0e0;
316
+ overflow: hidden;
317
+ text-overflow: ellipsis;
318
+ white-space: nowrap;
319
+ }
320
+
321
+ .flight-dt-cache-size {
322
+ font-family: monospace;
323
+ font-size: 11px;
324
+ color: #888;
325
+ }
326
+
327
+ .flight-dt-cache-entry-meta {
328
+ display: flex;
329
+ gap: 12px;
330
+ margin-top: 4px;
331
+ font-size: 10px;
332
+ color: #666;
333
+ }
334
+
335
+ .flight-dt-cache-more {
336
+ text-align: center;
337
+ font-size: 11px;
338
+ color: #666;
339
+ padding: 8px;
340
+ }
341
+
342
+ .flight-dt-cache-actions {
343
+ margin-top: 12px;
344
+ display: flex;
345
+ justify-content: flex-end;
346
+ }
347
+
348
+ .flight-dt-btn {
349
+ padding: 4px 12px;
350
+ border: 1px solid #444;
351
+ border-radius: 4px;
352
+ background: transparent;
353
+ color: #888;
354
+ font-size: 11px;
355
+ cursor: pointer;
356
+ }
357
+
358
+ .flight-dt-btn:hover {
359
+ color: #e0e0e0;
360
+ border-color: #666;
361
+ }
362
+
363
+ .flight-dt-btn--danger {
364
+ border-color: rgba(239, 68, 68, 0.3);
365
+ color: #ef4444;
366
+ }
367
+
368
+ .flight-dt-btn--danger:hover {
369
+ background: rgba(239, 68, 68, 0.1);
370
+ }
371
+ `;
372
+ //# sourceMappingURL=cache-panel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-panel.js","sourceRoot":"","sources":["../src/cache-panel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * @flight-framework/devtools - Hydration Panel
3
+ *
4
+ * Visualizes island hydration timing and status.
5
+ * Shows which islands have hydrated, their triggers, and timing.
6
+ */
7
+ /**
8
+ * Information about a single hydrated island
9
+ */
10
+ export interface IslandHydrationInfo {
11
+ /** Unique identifier for this island instance */
12
+ id: string;
13
+ /** Island component name */
14
+ name: string;
15
+ /** Hydration trigger type */
16
+ trigger: 'load' | 'idle' | 'visible' | 'interaction' | 'media' | 'never';
17
+ /** Current status */
18
+ status: 'pending' | 'hydrating' | 'hydrated' | 'error';
19
+ /** Time when hydration was scheduled */
20
+ scheduledAt: number;
21
+ /** Time when hydration started */
22
+ startedAt?: number;
23
+ /** Time when hydration completed */
24
+ completedAt?: number;
25
+ /** Duration of hydration in ms */
26
+ duration?: number;
27
+ /** Error message if hydration failed */
28
+ error?: string;
29
+ /** Component file path */
30
+ filePath?: string;
31
+ /** Props size in bytes (serialized) */
32
+ propsSize?: number;
33
+ }
34
+ /**
35
+ * Aggregated hydration metrics
36
+ */
37
+ export interface HydrationMetrics {
38
+ /** Total islands on page */
39
+ totalIslands: number;
40
+ /** Number of hydrated islands */
41
+ hydratedCount: number;
42
+ /** Number of pending islands */
43
+ pendingCount: number;
44
+ /** Number of failed islands */
45
+ errorCount: number;
46
+ /** Total hydration time (sum of all durations) */
47
+ totalHydrationTime: number;
48
+ /** Average hydration time per island */
49
+ averageHydrationTime: number;
50
+ /** Longest single hydration */
51
+ longestHydration?: IslandHydrationInfo;
52
+ /** First Hydration Time (first island) */
53
+ firstHydrationTime?: number;
54
+ /** Last Hydration Time (all islands done) */
55
+ lastHydrationTime?: number;
56
+ }
57
+ /**
58
+ * Register an island for tracking
59
+ */
60
+ export declare function registerIsland(info: Omit<IslandHydrationInfo, 'scheduledAt' | 'status'>): void;
61
+ /**
62
+ * Mark island as started hydrating
63
+ */
64
+ export declare function startHydration(id: string): void;
65
+ /**
66
+ * Mark island as hydrated
67
+ */
68
+ export declare function completeHydration(id: string): void;
69
+ /**
70
+ * Mark island hydration as failed
71
+ */
72
+ export declare function failHydration(id: string, error: string): void;
73
+ /**
74
+ * Subscribe to hydration updates
75
+ */
76
+ export declare function subscribeToHydration(callback: (islands: IslandHydrationInfo[], metrics: HydrationMetrics) => void): () => void;
77
+ /**
78
+ * Get current hydration state
79
+ */
80
+ export declare function getHydrationState(): {
81
+ islands: IslandHydrationInfo[];
82
+ metrics: HydrationMetrics;
83
+ };
84
+ /**
85
+ * Clear all tracked islands (for testing or page navigation)
86
+ */
87
+ export declare function clearHydrationState(): void;
88
+ /**
89
+ * Setup automatic hydration tracking by listening to Flight events
90
+ */
91
+ export declare function setupHydrationTracking(): void;
92
+ /**
93
+ * Generate HTML for the hydration panel
94
+ */
95
+ export declare function renderHydrationPanel(islandsList: IslandHydrationInfo[], metrics: HydrationMetrics): string;
96
+ /**
97
+ * CSS styles for the hydration panel
98
+ */
99
+ export declare const hydrationPanelStyles = "\n.flight-dt-hydration-panel {\n padding: 8px;\n}\n\n.flight-dt-hydration-summary {\n display: flex;\n gap: 16px;\n padding: 8px;\n background: rgba(255, 255, 255, 0.05);\n border-radius: 6px;\n margin-bottom: 12px;\n}\n\n.flight-dt-metric {\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n.flight-dt-metric-value {\n font-size: 18px;\n font-weight: 600;\n color: #e0e0e0;\n}\n\n.flight-dt-metric-label {\n font-size: 10px;\n color: #888;\n text-transform: uppercase;\n}\n\n.flight-dt-metric--warning .flight-dt-metric-value {\n color: #fbbf24;\n}\n\n.flight-dt-hydration-list {\n display: flex;\n flex-direction: column;\n gap: 4px;\n max-height: 200px;\n overflow-y: auto;\n}\n\n.flight-dt-island {\n display: flex;\n flex-direction: column;\n padding: 6px 8px;\n background: rgba(255, 255, 255, 0.03);\n border-radius: 4px;\n font-size: 12px;\n}\n\n.flight-dt-island-header {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.flight-dt-island-status {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n}\n\n.flight-dt-island-trigger {\n width: 16px;\n height: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(255, 255, 255, 0.1);\n border-radius: 3px;\n font-size: 10px;\n font-weight: 600;\n color: #888;\n}\n\n.flight-dt-island-name {\n flex: 1;\n color: #e0e0e0;\n font-family: monospace;\n}\n\n.flight-dt-island-time {\n color: #888;\n font-family: monospace;\n}\n\n.flight-dt-island-error {\n margin-top: 4px;\n padding: 4px 8px;\n background: rgba(239, 68, 68, 0.1);\n border-radius: 3px;\n color: #ef4444;\n font-size: 11px;\n}\n\n.flight-dt-empty {\n text-align: center;\n color: #666;\n padding: 20px;\n}\n";
100
+ //# sourceMappingURL=hydration-panel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hydration-panel.d.ts","sourceRoot":"","sources":["../src/hydration-panel.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAChC,iDAAiD;IACjD,EAAE,EAAE,MAAM,CAAC;IAEX,4BAA4B;IAC5B,IAAI,EAAE,MAAM,CAAC;IAEb,6BAA6B;IAC7B,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,aAAa,GAAG,OAAO,GAAG,OAAO,CAAC;IAEzE,qBAAqB;IACrB,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,OAAO,CAAC;IAEvD,wCAAwC;IACxC,WAAW,EAAE,MAAM,CAAC;IAEpB,kCAAkC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,oCAAoC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,4BAA4B;IAC5B,YAAY,EAAE,MAAM,CAAC;IAErB,iCAAiC;IACjC,aAAa,EAAE,MAAM,CAAC;IAEtB,gCAAgC;IAChC,YAAY,EAAE,MAAM,CAAC;IAErB,+BAA+B;IAC/B,UAAU,EAAE,MAAM,CAAC;IAEnB,kDAAkD;IAClD,kBAAkB,EAAE,MAAM,CAAC;IAE3B,wCAAwC;IACxC,oBAAoB,EAAE,MAAM,CAAC;IAE7B,+BAA+B;IAC/B,gBAAgB,CAAC,EAAE,mBAAmB,CAAC;IAEvC,0CAA0C;IAC1C,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B,6CAA6C;IAC7C,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC9B;AA4CD;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,mBAAmB,EAAE,aAAa,GAAG,QAAQ,CAAC,GAAG,IAAI,CAS9F;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAQ/C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAiBlD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAS7D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAChC,QAAQ,EAAE,CAAC,OAAO,EAAE,mBAAmB,EAAE,EAAE,OAAO,EAAE,gBAAgB,KAAK,IAAI,GAC9E,MAAM,IAAI,CAQZ;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI;IACjC,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,OAAO,EAAE,gBAAgB,CAAC;CAC7B,CAMA;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAG1C;AAMD;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAoB7C;AAMD;;GAEG;AACH,wBAAgB,oBAAoB,CAChC,WAAW,EAAE,mBAAmB,EAAE,EAClC,OAAO,EAAE,gBAAgB,GAC1B,MAAM,CA+DR;AASD;;GAEG;AACH,eAAO,MAAM,oBAAoB,m1DAuGhC,CAAC"}