"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var xml_json_1 = __importDefault(require("./maps/xml.json")); var inverseXML = getInverseObj(xml_json_1.default); var xmlReplacer = getInverseReplacer(inverseXML); exports.encodeXML = getInverse(inverseXML, xmlReplacer); var entities_json_1 = __importDefault(require("./maps/entities.json")); var inverseHTML = getInverseObj(entities_json_1.default); var htmlReplacer = getInverseReplacer(inverseHTML); exports.encodeHTML = getInverse(inverseHTML, htmlReplacer); function getInverseObj(obj) { return Object.keys(obj) .sort() .reduce(function (inverse, name) { inverse[obj[name]] = "&" + name + ";"; return inverse; }, {}); } function getInverseReplacer(inverse) { var single = []; var multiple = []; Object.keys(inverse).forEach(function (k) { return k.length === 1 ? // Add value to single array single.push("\\" + k) : // Add value to multiple array multiple.push(k); }); //TODO add ranges multiple.unshift("[" + single.join("") + "]"); return new RegExp(multiple.join("|"), "g"); } var reNonASCII = /[^\0-\x7F]/g; var reAstralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g; function singleCharReplacer(c) { return "&#x" + c .charCodeAt(0) .toString(16) .toUpperCase() + ";"; } // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any function astralReplacer(c, _) { // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae var high = c.charCodeAt(0); var low = c.charCodeAt(1); var codePoint = (high - 0xd800) * 0x400 + low - 0xdc00 + 0x10000; return "&#x" + codePoint.toString(16).toUpperCase() + ";"; } function getInverse(inverse, re) { return function (data) { return data .replace(re, function (name) { return inverse[name]; }) .replace(reAstralSymbols, astralReplacer) .replace(reNonASCII, singleCharReplacer); }; } var reXmlChars = getInverseReplacer(inverseXML); function escape(data) { return data .replace(reXmlChars, singleCharReplacer) .replace(reAstralSymbols, astralReplacer) .replace(reNonASCII, singleCharReplacer); } exports.escape = escape;