import { registerClearHandler } from './devtools.js'; let entries = []; function formatSize(bytes) { if (bytes === 0 || bytes === undefined) return '-'; if (bytes < 1024) return bytes + ' B'; if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(1) + ' KB'; return (bytes / (1024 * 1024)).toFixed(1) + ' MB'; } function typeClass(initiatorType) { switch (initiatorType) { case 'script': return 'net-type-script'; case 'link': case 'css': return 'net-type-link'; case 'img': return 'net-type-img'; case 'fetch': return 'net-type-fetch'; case 'xmlhttprequest': return 'net-type-xmlhttprequest'; default: return 'net-type-other'; } } function truncateUrl(url) { try { const u = new URL(url); const path = u.pathname.split('/').pop() || u.pathname; return path + u.search; } catch { return url; } } function render() { const out = document.getElementById('network-output'); if (!entries.length) { out.innerHTML = '
No network requests captured. Run your code to see resources.
'; return; } let totalSize = 0; let html = ''; for (const e of entries) { totalSize += e.transferSize || 0; html += ``; } html += '
NameTypeSizeTime
${truncateUrl(e.name)} ${e.initiatorType} ${formatSize(e.transferSize)} ${Math.round(e.duration)}ms
'; html += ``; out.innerHTML = html; } export function clearNetwork() { entries = []; const out = document.getElementById('network-output'); out.innerHTML = ''; } export function initNetwork() { registerClearHandler('network', clearNetwork); window.addEventListener('message', (e) => { if (!e.data || e.data.type !== 'devtools' || e.data.tab !== 'network') return; if (e.data.entries) { entries.push(...e.data.entries); render(); } }); }