"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.escapeText = exports.escapeAttribute = exports.escapeUTF8 = exports.escape = exports.encodeXML = exports.getCodePoint = exports.xmlReplacer = void 0; exports.xmlReplacer = /["&'<>$\x80-\uFFFF]/g; var xmlCodeMap = new Map([ [34, """], [38, "&"], [39, "'"], [60, "<"], [62, ">"], ]); // For compatibility with node < 4, we wrap `codePointAt` exports.getCodePoint = // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition String.prototype.codePointAt != null ? function (str, index) { return str.codePointAt(index); } : // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae function (c, index) { return (c.charCodeAt(index) & 0xfc00) === 0xd800 ? (c.charCodeAt(index) - 0xd800) * 0x400 + c.charCodeAt(index + 1) - 0xdc00 + 0x10000 : c.charCodeAt(index); }; /** * Encodes all non-ASCII characters, as well as characters not valid in XML * documents using XML entities. * * If a character has no equivalent entity, a * numeric hexadecimal reference (eg. `ü`) will be used. */ function encodeXML(str) { var ret = ""; var lastIdx = 0; var match; while ((match = exports.xmlReplacer.exec(str)) !== null) { var i = match.index; var char = str.charCodeAt(i); var next = xmlCodeMap.get(char); if (next !== undefined) { ret += str.substring(lastIdx, i) + next; lastIdx = i + 1; } else { ret += "".concat(str.substring(lastIdx, i), "&#x").concat((0, exports.getCodePoint)(str, i).toString(16), ";"); // Increase by 1 if we have a surrogate pair lastIdx = exports.xmlReplacer.lastIndex += Number((char & 0xfc00) === 0xd800); } } return ret + str.substr(lastIdx); } exports.encodeXML = encodeXML; /** * Encodes all non-ASCII characters, as well as characters not valid in XML * documents using numeric hexadecimal reference (eg. `ü`). * * Have a look at `escapeUTF8` if you want a more concise output at the expense * of reduced transportability. * * @param data String to escape. */ exports.escape = encodeXML; /** * Creates a function that escapes all characters matched by the given regular * expression using the given map of characters to escape to their entities. * * @param regex Regular expression to match characters to escape. * @param map Map of characters to escape to their entities. * * @returns Function that escapes all characters matched by the given regular * expression using the given map of characters to escape to their entities. */ function getEscaper(regex, map) { return function escape(data) { var match; var lastIdx = 0; var result = ""; while ((match = regex.exec(data))) { if (lastIdx !== match.index) { result += data.substring(lastIdx, match.index); } // We know that this character will be in the map. result += map.get(match[0].charCodeAt(0)); // Every match will be of length 1 lastIdx = match.index + 1; } return result + data.substring(lastIdx); }; } /** * Encodes all characters not valid in XML documents using XML entities. * * Note that the output will be character-set dependent. * * @param data String to escape. */ exports.escapeUTF8 = getEscaper(/[&<>'"]/g, xmlCodeMap); /** * Encodes all characters that have to be escaped in HTML attributes, * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}. * * @param data String to escape. */ exports.escapeAttribute = getEscaper(/["&\u00A0]/g, new Map([ [34, """], [38, "&"], [160, " "], ])); /** * Encodes all characters that have to be escaped in HTML text, * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}. * * @param data String to escape. */ exports.escapeText = getEscaper(/[&<>\u00A0]/g, new Map([ [38, "&"], [60, "<"], [62, ">"], [160, " "], ])); //# sourceMappingURL=escape.js.map