text: "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;
  