// copy from https://github.com/vuejs/core/blob/main/packages/shared/src/escapeHtml.ts const escapeRE = /["'&<>]/; export function escapeHtml(string: unknown): string { const str = "" + string; const match = escapeRE.exec(str); if (!match) { return str; } let html = ""; let escaped: string; let index: number; let lastIndex = 0; for (index = match.index; index < str.length; index++) { switch (str.charCodeAt(index)) { case 34: // " escaped = """; break; case 38: // & escaped = "&"; break; case 39: // ' escaped = "'"; break; case 60: // < escaped = "<"; break; case 62: // > escaped = ">"; break; default: continue; } if (lastIndex !== index) { html += str.slice(lastIndex, index); } lastIndex = index + 1; html += escaped; } return lastIndex !== index ? html + str.slice(lastIndex, index) : html; }