import { marked } from 'marked'; import sanitizeHtml from 'sanitize-html'; export function renderMarkdown(markdown: string): string { const rendered = marked.parse(markdown, { async: false, breaks: true, gfm: true }) as string; return sanitizeHtml(rendered, { allowedTags: [ 'p', 'br', 'strong', 'em', 'del', 'blockquote', 'ul', 'ol', 'li', 'h2', 'h3', 'h4', 'code', 'pre', 'a', 'hr' ], allowedAttributes: { a: ['href', 'title', 'target', 'rel'] }, allowedSchemes: ['http', 'https', 'mailto'], allowProtocolRelative: false, enforceHtmlBoundary: true, transformTags: { a: (_tagName, attributes) => ({ tagName: 'a', attribs: { ...attributes, target: '_blank', rel: 'noopener noreferrer' } }) } }); }