// Adapted from jalcoui (MIT) — github.com/jal-co/ui /** Format milliseconds for human reading: µs / ms / s. */ export function formatDuration(ms: number): string { if (ms < 1) return `${(ms * 1000).toFixed(0)}µs`; if (ms < 1000) return `${ms.toFixed(ms < 10 ? 1 : 0)}ms`; return `${(ms / 1000).toFixed(2)}s`; } export function byteSize(str: string): string { const bytes = new Blob([str]).size; if (bytes < 1024) return `${bytes} B`; if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`; return `${(bytes / (1024 * 1024)).toFixed(1)} MB`; } export function looksLikeJson(str: string): boolean { const trimmed = str.trim(); return ( (trimmed.startsWith('{') && trimmed.endsWith('}')) || (trimmed.startsWith('[') && trimmed.endsWith(']')) ); } export function tryParseJson(str: string): unknown | null { try { return JSON.parse(str); } catch { return null; } }