const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i; export function isUuid(s: string): boolean { return UUID_RE.test(s); } export function sanitizeBody(text: string): string { return text.replace(/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F\u200B-\u200F\u2028-\u202F\uFEFF]/g, ""); } export function escapeHtml(text: string): string { return text .replace(/&/g, "&") .replace(//g, ">") .replace(/"/g, """) .replace(/'/g, "'"); } const MENTION_RE = /@([\w-]+)/g; export function extractMentions(text: string): string[] { return [...new Set([...text.matchAll(MENTION_RE)].map((m) => m[1]))]; } export function highlightMentions(text: string): string { const escaped = escapeHtml(text); return escaped.replace(MENTION_RE, '@$1'); }