UNPKG

preact

Version:

Fast 4kb React-compatible Virtual DOM library.

37 lines (33 loc) • 799 B
const ENCODED_ENTITIES = /["&<]/; /** @param {string} str */ export function encodeEntities(str) { // Skip all work for strings with no entities needing encoding: if (!str.length || !ENCODED_ENTITIES.test(str)) return str; let last = 0, i = 0, out = '', ch = ''; // Seek forward in str until the next entity char: for (; i < str.length; i++) { switch (str.charCodeAt(i)) { case 34: ch = '&quot;'; break; case 38: ch = '&amp;'; break; case 60: ch = '&lt;'; break; default: continue; } // Append skipped/buffered characters and the encoded entity: if (i != last) out += str.slice(last, i); out += ch; // Start the next seek/buffer after the entity's offset: last = i + 1; } if (i != last) out += str.slice(last, i); return out; }