UNPKG

@naturalcycles/js-lib

Version:

Standard library for universal (browser + Node.js) javascript

54 lines (49 loc) 1.59 kB
"use strict"; /* Vendored: https://github.com/sindresorhus/escape-goat (c) Sindre Sorhus Reasons: 1. Stable enough to be included in "core" js-lib 2. ESM-only */ Object.defineProperty(exports, "__esModule", { value: true }); exports.htmlEscape = htmlEscape; exports.htmlUnescape = htmlUnescape; // Multiple `.replace()` calls are actually faster than using replacer functions function _htmlEscape(s) { return s .replaceAll('&', '&amp;') // Must happen first or else it will escape other just-escaped characters. .replaceAll('"', '&quot;') .replaceAll("'", '&#39;') .replaceAll('<', '&lt;') .replaceAll('>', '&gt;'); } function _htmlUnescape(html) { return html .replaceAll('&gt;', '>') .replaceAll('&lt;', '<') .replaceAll(/&#0?39;/g, "'") .replaceAll('&quot;', '"') .replaceAll('&amp;', '&'); // Must happen last or else it will unescape other characters in the wrong order. } function htmlEscape(strings, ...values) { if (typeof strings === 'string') { return _htmlEscape(strings); } let output = strings[0]; for (const [index, value] of values.entries()) { output = output + _htmlEscape(String(value)) + strings[index + 1]; } return output; } function htmlUnescape(strings, ...values) { if (typeof strings === 'string') { return _htmlUnescape(strings); } let output = strings[0]; for (const [index, value] of values.entries()) { output = output + _htmlUnescape(String(value)) + strings[index + 1]; } return output; }