UNPKG

@technobuddha/library

Version:
28 lines 1.96 kB
import { build } from "./build.js"; import { splitChars } from "./split-chars.js"; /** * Escape a string for use in HTML * @param input - The string to escape * @param options - see {@link EscapeHtmlOptions} * @example * ```typescript * escapeHTML('<div>hello</div>'); // '&lt;div&gt;hello&lt;/div&gt'; * escapeHTML('aáΔ😀', { escapeNonASCII: true }); // 'a&#225;&#916;&#128512'; * ``` * @group Programming * @category Escaping */ export function escapeHTML(input, { escapeNonASCII: escapeNonAscii = false } = {}) { return build(splitChars(input).map((c) => entities[c] ?? (c < '\u0020' || (c > '\u007E' && c < '\u00a0') || (escapeNonAscii && c > '\u007F') ? `&#${c.codePointAt(0)};` : c))); } const entities = Object.freeze({ '"': '&quot;', '&': '&amp;', "'": '&apos;', '<': '&lt;', '>': '&gt;', }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNjYXBlLWh0bWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZXNjYXBlLWh0bWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNuQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFZOUM7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLFVBQVUsVUFBVSxDQUN4QixLQUFhLEVBQ2IsRUFBRSxjQUFjLEVBQUUsY0FBYyxHQUFHLEtBQUssS0FBd0IsRUFBRTtJQUVsRSxPQUFPLEtBQUssQ0FDVixVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUNuQixDQUFDLENBQUMsRUFBRSxFQUFFLENBQ0osUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQyxHQUFHLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxRQUFRLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ25GLEtBQUssQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRztZQUMxQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ1AsQ0FDRixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sUUFBUSxHQUFpRCxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQzNFLEdBQUcsRUFBRSxRQUFRO0lBQ2IsR0FBRyxFQUFFLE9BQU87SUFDWixHQUFHLEVBQUUsUUFBUTtJQUNiLEdBQUcsRUFBRSxNQUFNO0lBQ1gsR0FBRyxFQUFFLE1BQU07Q0FDWixDQUFDLENBQUMifQ==