import { marked } from 'marked'; import DOMPurify from 'dompurify'; marked.setOptions({ gfm: true, breaks: true, }); function escapeHtml(s) { return String(s) .replace(/&/g, '&') .replace(//g, '>'); } // Wrap each fenced code block in a container with a copy button. // The click handler lives in TraceViewer (event delegation on .copy-btn). marked.use({ renderer: { code({ text, lang }) { const langClass = lang ? ` class="language-${String(lang).replace(/[^\w-]/g, '')}"` : ''; return `
${escapeHtml(text)}