import { escapeHtml, sanitizeUrl } from "./security"; export function markdownToHtml(markdown: string): string { let html = markdown .replace(/^### (.*$)/gim, "

$1

") .replace(/^## (.*$)/gim, "

$1

") .replace(/^# (.*$)/gim, "

$1

") .replace(/\*\*(.+?)\*\*/g, "$1") .replace(/__(.+?)__/g, "$1") .replace(/\*(.+?)\*/g, "$1") .replace(/_(.+?)_/g, "$1") .replace(/```(\w*)\n([\s\S]*?)```/g, '
$2
') .replace(/`(.+?)`/g, "$1") .replace(/\[([^\]]+)\]\(([^)]+)\)/g, (_, text, url) => { const safeUrl = sanitizeUrl(url); const safeText = escapeHtml(text); return safeUrl ? `${safeText}` : safeText; }) .replace(/^\s*[-*]\s+(.*)$/gim, "
  • $1
  • ") .replace(/^\s*\d+\.\s+(.*)$/gim, "
  • $1
  • ") .replace(/^---$/gim, "
    ") .replace(/\n\n/g, "

    ") .replace(/\n/g, "
    "); html = html.replace(/(

  • .*?<\/li>)+/gs, ""); return `

    ${html}

    `; }