{"mappings":"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","names":["require_util","__commonJSMin","exports","nameStartChar","nameChar","nameRegexp","regexName","getAllMatches","string","regex","matches","match","allmatches","len","index","isName","v","obj","target","a","arrayMode","keys","i","require_validator","__commonJSMin","exports","util","defaultOptions","xmlData","options","tags","tagFound","reachedRoot","i","readPI","tagStartPos","readCommentAndCDATA","closingTag","tagName","validateTagName","msg","getErrorObject","getLineNumberForPosition","result","readAttributeStr","attrStr","attrStrStart","isValid","validateAttributeString","otg","openPos","afterAmp","validateAmpersand","isWhiteSpace","t","char","start","tagname","angleBracketsCount","doubleQuote","singleQuote","startChar","tagClosed","validAttrStrRegxp","matches","attrNames","getPositionFromMatch","attrName","validateAttrName","validateNumberAmpersand","re","count","code","message","lineNumber","index","lines","match","require_OptionsBuilder","__commonJSMin","exports","defaultOptions","tagName","val","attrName","buildOptions","options","require_xmlNode","__commonJSMin","exports","module","XmlNode","tagname","key","val","node","require_DocTypeReader","__commonJSMin","exports","module","readDocType","xmlData","i","entities","angleBracketsCount","hasBody","entity","comment","exp","parseEntityExp","entityRegex","match","require_OrderedObjParser","__commonJSMin","exports","module","util","xmlNode","readDocType","toNumber","regx","OrderedObjParser","options","addExternalEntities","parseXml","parseTextData","resolveNameSpace","buildAttributesMap","isItStopNode","replaceEntitiesValue","readStopNodeData","saveTextToParentTag","externalEntities","entKeys","i","ent","val","tagName","jPath","dontTrim","hasAttributes","isLeafNode","escapeEntities","newval","parseValue","tagname","tags","prefix","attrsRegx","attrStr","matches","len","attrs","attrName","oldVal","aName","newVal","attrCollection","xmlData","xmlObj","currentNode","textData","closeIndex","findClosingIndex","colonIndex","tagData","readTagExp","childNode","endIndex","comment","result","tagExp","attrExpPresent","lastTag","tagContent","entityName","entity","stopNodes","currentTagName","allNodesExp","stopNodePath","stopNodeExp","tagExpWithClosingIndex","closingChar","attrBoundary","index","ch","str","errMsg","closingIndex","removeNSPrefix","separatorIndex","startIndex","openTagCount","shouldParse","require_node2json","__commonJSMin","exports","prettify","node","options","compress","arr","jPath","text","compressedObj","i","tagObj","property","propName","newJpath","val","isLeaf","isLeafTag","assignAttributes","obj","keys","key","attrMap","jpath","len","atrrName","propCount","require_XMLParser","__commonJSMin","exports","module","buildOptions","OrderedObjParser","prettify","validator","XMLParser","options","xmlData","validationOption","result","orderedObjParser","orderedResult","key","value","require_orderedJs2Xml","__commonJSMin","exports","module","EOL","toXml","jArray","options","indentation","arrToStr","arr","jPath","xmlStr","isPreviousElementTag","i","tagObj","tagName","propName","newJPath","tagText","isStopNode","replaceEntitiesValue","attStr","attr_to_str","tempInd","piTextNodeName","newIdentation","tagStart","tagValue","obj","keys","key","attrMap","attrStr","attr","attrVal","index","textValue","entity","require_json2xml","__commonJSMin","exports","module","buildFromOrderedJs","defaultOptions","key","a","attrName","Builder","options","isAttribute","processTextOrObjNode","indentate","jObj","level","attrStr","val","attr","newval","arrLen","j","item","Ks","L","object","result","tagEndExp","piClosingChar","closeTag","textValue","i","entity","name","require_fxp","__commonJSMin","exports","module","validator","XMLParser","XMLBuilder","cjsm","XMLParser","XMLValidator","XMLBuilder","endpoint_default"],"sources":["../esm/npm/fast-xml-parser@4.1.1/node_modules/fast-xml-parser/src/util.js","../esm/npm/fast-xml-parser@4.1.1/node_modules/fast-xml-parser/src/validator.js","../esm/npm/fast-xml-parser@4.1.1/node_modules/fast-xml-parser/src/xmlparser/OptionsBuilder.js","../esm/npm/fast-xml-parser@4.1.1/node_modules/fast-xml-parser/src/xmlparser/xmlNode.js","../esm/npm/fast-xml-parser@4.1.1/node_modules/fast-xml-parser/src/xmlparser/DocTypeReader.js","../esm/npm/fast-xml-parser@4.1.1/node_modules/fast-xml-parser/src/xmlparser/OrderedObjParser.js","../esm/npm/fast-xml-parser@4.1.1/node_modules/fast-xml-parser/src/xmlparser/node2json.js","../esm/npm/fast-xml-parser@4.1.1/node_modules/fast-xml-parser/src/xmlparser/XMLParser.js","../esm/npm/fast-xml-parser@4.1.1/node_modules/fast-xml-parser/src/xmlbuilder/orderedJs2Xml.js","../esm/npm/fast-xml-parser@4.1.1/node_modules/fast-xml-parser/src/xmlbuilder/json2xml.js","../esm/npm/fast-xml-parser@4.1.1/node_modules/fast-xml-parser/src/fxp.js","endpoint.js"],"sourcesContent":["'use strict';\n\nconst nameStartChar = ':A-Za-z_\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD';\nconst nameChar = nameStartChar + '\\\\-.\\\\d\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040';\nconst nameRegexp = '[' + nameStartChar + '][' + nameChar + ']*'\nconst regexName = new RegExp('^' + nameRegexp + '$');\n\nconst getAllMatches = function(string, regex) {\n  const matches = [];\n  let match = regex.exec(string);\n  while (match) {\n    const allmatches = [];\n    allmatches.startIndex = regex.lastIndex - match[0].length;\n    const len = match.length;\n    for (let index = 0; index \u003c len; index++) {\n      allmatches.push(match[index]);\n    }\n    matches.push(allmatches);\n    match = regex.exec(string);\n  }\n  return matches;\n};\n\nconst isName = function(string) {\n  const match = regexName.exec(string);\n  return !(match === null || typeof match === 'undefined');\n};\n\nexports.isExist = function(v) {\n  return typeof v !== 'undefined';\n};\n\nexports.isEmptyObject = function(obj) {\n  return Object.keys(obj).length === 0;\n};\n\n/**\n * Copy all the properties of a into b.\n * @param {*} target\n * @param {*} a\n */\nexports.merge = function(target, a, arrayMode) {\n  if (a) {\n    const keys = Object.keys(a); // will return an array of own properties\n    const len = keys.length; //don't make it inline\n    for (let i = 0; i \u003c len; i++) {\n      if (arrayMode === 'strict') {\n        target[keys[i]] = [ a[keys[i]] ];\n      } else {\n        target[keys[i]] = a[keys[i]];\n      }\n    }\n  }\n};\n/* exports.merge =function (b,a){\n  return Object.assign(b,a);\n} */\n\nexports.getValue = function(v) {\n  if (exports.isExist(v)) {\n    return v;\n  } else {\n    return '';\n  }\n};\n\n// const fakeCall = function(a) {return a;};\n// const fakeCallNoReturn = function() {};\n\nexports.isName = isName;\nexports.getAllMatches = getAllMatches;\nexports.nameRegexp = nameRegexp;\n","'use strict';\n\nconst util = require('./util');\n\nconst defaultOptions = {\n  allowBooleanAttributes: false, //A tag can have attributes without any value\n  unpairedTags: []\n};\n\n//const tagsPattern = new RegExp(\"\u003c\\\\/?([\\\\w:\\\\-_\\.]+)\\\\s*\\/?\u003e\",\"g\");\nexports.validate = function (xmlData, options) {\n  options = Object.assign({}, defaultOptions, options);\n\n  //xmlData = xmlData.replace(/(\\r\\n|\\n|\\r)/gm,\"\");//make it single line\n  //xmlData = xmlData.replace(/(^\\s*\u003c\\?xml.*?\\?\u003e)/g,\"\");//Remove XML starting tag\n  //xmlData = xmlData.replace(/(\u003c!DOCTYPE[\\s\\w\\\"\\.\\/\\-\\:]+(\\[.*\\])*\\s*\u003e)/g,\"\");//Remove DOCTYPE\n  const tags = [];\n  let tagFound = false;\n\n  //indicates that the root tag has been closed (aka. depth 0 has been reached)\n  let reachedRoot = false;\n\n  if (xmlData[0] === '\\ufeff') {\n    // check for byte order mark (BOM)\n    xmlData = xmlData.substr(1);\n  }\n  \n  for (let i = 0; i \u003c xmlData.length; i++) {\n\n    if (xmlData[i] === '\u003c' \u0026\u0026 xmlData[i+1] === '?') {\n      i+=2;\n      i = readPI(xmlData,i);\n      if (i.err) return i;\n    }else if (xmlData[i] === '\u003c') {\n      //starting of tag\n      //read until you reach to '\u003e' avoiding any '\u003e' in attribute value\n      let tagStartPos = i;\n      i++;\n      \n      if (xmlData[i] === '!') {\n        i = readCommentAndCDATA(xmlData, i);\n        continue;\n      } else {\n        let closingTag = false;\n        if (xmlData[i] === '/') {\n          //closing tag\n          closingTag = true;\n          i++;\n        }\n        //read tagname\n        let tagName = '';\n        for (; i \u003c xmlData.length \u0026\u0026\n          xmlData[i] !== '\u003e' \u0026\u0026\n          xmlData[i] !== ' ' \u0026\u0026\n          xmlData[i] !== '\\t' \u0026\u0026\n          xmlData[i] !== '\\n' \u0026\u0026\n          xmlData[i] !== '\\r'; i++\n        ) {\n          tagName += xmlData[i];\n        }\n        tagName = tagName.trim();\n        //console.log(tagName);\n\n        if (tagName[tagName.length - 1] === '/') {\n          //self closing tag without attributes\n          tagName = tagName.substring(0, tagName.length - 1);\n          //continue;\n          i--;\n        }\n        if (!validateTagName(tagName)) {\n          let msg;\n          if (tagName.trim().length === 0) {\n            msg = \"Invalid space after '\u003c'.\";\n          } else {\n            msg = \"Tag '\"+tagName+\"' is an invalid name.\";\n          }\n          return getErrorObject('InvalidTag', msg, getLineNumberForPosition(xmlData, i));\n        }\n\n        const result = readAttributeStr(xmlData, i);\n        if (result === false) {\n          return getErrorObject('InvalidAttr', \"Attributes for '\"+tagName+\"' have open quote.\", getLineNumberForPosition(xmlData, i));\n        }\n        let attrStr = result.value;\n        i = result.index;\n\n        if (attrStr[attrStr.length - 1] === '/') {\n          //self closing tag\n          const attrStrStart = i - attrStr.length;\n          attrStr = attrStr.substring(0, attrStr.length - 1);\n          const isValid = validateAttributeString(attrStr, options);\n          if (isValid === true) {\n            tagFound = true;\n            //continue; //text may presents after self closing tag\n          } else {\n            //the result from the nested function returns the position of the error within the attribute\n            //in order to get the 'true' error line, we need to calculate the position where the attribute begins (i - attrStr.length) and then add the position within the attribute\n            //this gives us the absolute index in the entire xml, which we can use to find the line at last\n            return getErrorObject(isValid.err.code, isValid.err.msg, getLineNumberForPosition(xmlData, attrStrStart + isValid.err.line));\n          }\n        } else if (closingTag) {\n          if (!result.tagClosed) {\n            return getErrorObject('InvalidTag', \"Closing tag '\"+tagName+\"' doesn't have proper closing.\", getLineNumberForPosition(xmlData, i));\n          } else if (attrStr.trim().length \u003e 0) {\n            return getErrorObject('InvalidTag', \"Closing tag '\"+tagName+\"' can't have attributes or invalid starting.\", getLineNumberForPosition(xmlData, tagStartPos));\n          } else {\n            const otg = tags.pop();\n            if (tagName !== otg.tagName) {\n              let openPos = getLineNumberForPosition(xmlData, otg.tagStartPos);\n              return getErrorObject('InvalidTag',\n                \"Expected closing tag '\"+otg.tagName+\"' (opened in line \"+openPos.line+\", col \"+openPos.col+\") instead of closing tag '\"+tagName+\"'.\",\n                getLineNumberForPosition(xmlData, tagStartPos));\n            }\n\n            //when there are no more tags, we reached the root level.\n            if (tags.length == 0) {\n              reachedRoot = true;\n            }\n          }\n        } else {\n          const isValid = validateAttributeString(attrStr, options);\n          if (isValid !== true) {\n            //the result from the nested function returns the position of the error within the attribute\n            //in order to get the 'true' error line, we need to calculate the position where the attribute begins (i - attrStr.length) and then add the position within the attribute\n            //this gives us the absolute index in the entire xml, which we can use to find the line at last\n            return getErrorObject(isValid.err.code, isValid.err.msg, getLineNumberForPosition(xmlData, i - attrStr.length + isValid.err.line));\n          }\n\n          //if the root level has been reached before ...\n          if (reachedRoot === true) {\n            return getErrorObject('InvalidXml', 'Multiple possible root nodes found.', getLineNumberForPosition(xmlData, i));\n          } else if(options.unpairedTags.indexOf(tagName) !== -1){\n            //don't push into stack\n          } else {\n            tags.push({tagName, tagStartPos});\n          }\n          tagFound = true;\n        }\n\n        //skip tag text value\n        //It may include comments and CDATA value\n        for (i++; i \u003c xmlData.length; i++) {\n          if (xmlData[i] === '\u003c') {\n            if (xmlData[i + 1] === '!') {\n              //comment or CADATA\n              i++;\n              i = readCommentAndCDATA(xmlData, i);\n              continue;\n            } else if (xmlData[i+1] === '?') {\n              i = readPI(xmlData, ++i);\n              if (i.err) return i;\n            } else{\n              break;\n            }\n          } else if (xmlData[i] === '\u0026') {\n            const afterAmp = validateAmpersand(xmlData, i);\n            if (afterAmp == -1)\n              return getErrorObject('InvalidChar', \"char '\u0026' is not expected.\", getLineNumberForPosition(xmlData, i));\n            i = afterAmp;\n          }else{\n            if (reachedRoot === true \u0026\u0026 !isWhiteSpace(xmlData[i])) {\n              return getErrorObject('InvalidXml', \"Extra text at the end\", getLineNumberForPosition(xmlData, i));\n            }\n          }\n        } //end of reading tag text value\n        if (xmlData[i] === '\u003c') {\n          i--;\n        }\n      }\n    } else {\n      if ( isWhiteSpace(xmlData[i])) {\n        continue;\n      }\n      return getErrorObject('InvalidChar', \"char '\"+xmlData[i]+\"' is not expected.\", getLineNumberForPosition(xmlData, i));\n    }\n  }\n\n  if (!tagFound) {\n    return getErrorObject('InvalidXml', 'Start tag expected.', 1);\n  }else if (tags.length == 1) {\n      return getErrorObject('InvalidTag', \"Unclosed tag '\"+tags[0].tagName+\"'.\", getLineNumberForPosition(xmlData, tags[0].tagStartPos));\n  }else if (tags.length \u003e 0) {\n      return getErrorObject('InvalidXml', \"Invalid '\"+\n          JSON.stringify(tags.map(t =\u003e t.tagName), null, 4).replace(/\\r?\\n/g, '')+\n          \"' found.\", {line: 1, col: 1});\n  }\n\n  return true;\n};\n\nfunction isWhiteSpace(char){\n  return char === ' ' || char === '\\t' || char === '\\n'  || char === '\\r';\n}\n/**\n * Read Processing insstructions and skip\n * @param {*} xmlData\n * @param {*} i\n */\nfunction readPI(xmlData, i) {\n  const start = i;\n  for (; i \u003c xmlData.length; i++) {\n    if (xmlData[i] == '?' || xmlData[i] == ' ') {\n      //tagname\n      const tagname = xmlData.substr(start, i - start);\n      if (i \u003e 5 \u0026\u0026 tagname === 'xml') {\n        return getErrorObject('InvalidXml', 'XML declaration allowed only at the start of the document.', getLineNumberForPosition(xmlData, i));\n      } else if (xmlData[i] == '?' \u0026\u0026 xmlData[i + 1] == '\u003e') {\n        //check if valid attribut string\n        i++;\n        break;\n      } else {\n        continue;\n      }\n    }\n  }\n  return i;\n}\n\nfunction readCommentAndCDATA(xmlData, i) {\n  if (xmlData.length \u003e i + 5 \u0026\u0026 xmlData[i + 1] === '-' \u0026\u0026 xmlData[i + 2] === '-') {\n    //comment\n    for (i += 3; i \u003c xmlData.length; i++) {\n      if (xmlData[i] === '-' \u0026\u0026 xmlData[i + 1] === '-' \u0026\u0026 xmlData[i + 2] === '\u003e') {\n        i += 2;\n        break;\n      }\n    }\n  } else if (\n    xmlData.length \u003e i + 8 \u0026\u0026\n    xmlData[i + 1] === 'D' \u0026\u0026\n    xmlData[i + 2] === 'O' \u0026\u0026\n    xmlData[i + 3] === 'C' \u0026\u0026\n    xmlData[i + 4] === 'T' \u0026\u0026\n    xmlData[i + 5] === 'Y' \u0026\u0026\n    xmlData[i + 6] === 'P' \u0026\u0026\n    xmlData[i + 7] === 'E'\n  ) {\n    let angleBracketsCount = 1;\n    for (i += 8; i \u003c xmlData.length; i++) {\n      if (xmlData[i] === '\u003c') {\n        angleBracketsCount++;\n      } else if (xmlData[i] === '\u003e') {\n        angleBracketsCount--;\n        if (angleBracketsCount === 0) {\n          break;\n        }\n      }\n    }\n  } else if (\n    xmlData.length \u003e i + 9 \u0026\u0026\n    xmlData[i + 1] === '[' \u0026\u0026\n    xmlData[i + 2] === 'C' \u0026\u0026\n    xmlData[i + 3] === 'D' \u0026\u0026\n    xmlData[i + 4] === 'A' \u0026\u0026\n    xmlData[i + 5] === 'T' \u0026\u0026\n    xmlData[i + 6] === 'A' \u0026\u0026\n    xmlData[i + 7] === '['\n  ) {\n    for (i += 8; i \u003c xmlData.length; i++) {\n      if (xmlData[i] === ']' \u0026\u0026 xmlData[i + 1] === ']' \u0026\u0026 xmlData[i + 2] === '\u003e') {\n        i += 2;\n        break;\n      }\n    }\n  }\n\n  return i;\n}\n\nconst doubleQuote = '\"';\nconst singleQuote = \"'\";\n\n/**\n * Keep reading xmlData until '\u003c' is found outside the attribute value.\n * @param {string} xmlData\n * @param {number} i\n */\nfunction readAttributeStr(xmlData, i) {\n  let attrStr = '';\n  let startChar = '';\n  let tagClosed = false;\n  for (; i \u003c xmlData.length; i++) {\n    if (xmlData[i] === doubleQuote || xmlData[i] === singleQuote) {\n      if (startChar === '') {\n        startChar = xmlData[i];\n      } else if (startChar !== xmlData[i]) {\n        //if vaue is enclosed with double quote then single quotes are allowed inside the value and vice versa\n      } else {\n        startChar = '';\n      }\n    } else if (xmlData[i] === '\u003e') {\n      if (startChar === '') {\n        tagClosed = true;\n        break;\n      }\n    }\n    attrStr += xmlData[i];\n  }\n  if (startChar !== '') {\n    return false;\n  }\n\n  return {\n    value: attrStr,\n    index: i,\n    tagClosed: tagClosed\n  };\n}\n\n/**\n * Select all the attributes whether valid or invalid.\n */\nconst validAttrStrRegxp = new RegExp('(\\\\s*)([^\\\\s=]+)(\\\\s*=)?(\\\\s*([\\'\"])(([\\\\s\\\\S])*?)\\\\5)?', 'g');\n\n//attr, =\"sd\", a=\"amit's\", a=\"sd\"b=\"saf\", ab  cd=\"\"\n\nfunction validateAttributeString(attrStr, options) {\n  //console.log(\"start:\"+attrStr+\":end\");\n\n  //if(attrStr.trim().length === 0) return true; //empty string\n\n  const matches = util.getAllMatches(attrStr, validAttrStrRegxp);\n  const attrNames = {};\n\n  for (let i = 0; i \u003c matches.length; i++) {\n    if (matches[i][1].length === 0) {\n      //nospace before attribute name: a=\"sd\"b=\"saf\"\n      return getErrorObject('InvalidAttr', \"Attribute '\"+matches[i][2]+\"' has no space in starting.\", getPositionFromMatch(matches[i]))\n    } else if (matches[i][3] !== undefined \u0026\u0026 matches[i][4] === undefined) {\n      return getErrorObject('InvalidAttr', \"Attribute '\"+matches[i][2]+\"' is without value.\", getPositionFromMatch(matches[i]));\n    } else if (matches[i][3] === undefined \u0026\u0026 !options.allowBooleanAttributes) {\n      //independent attribute: ab\n      return getErrorObject('InvalidAttr', \"boolean attribute '\"+matches[i][2]+\"' is not allowed.\", getPositionFromMatch(matches[i]));\n    }\n    /* else if(matches[i][6] === undefined){//attribute without value: ab=\n                    return { err: { code:\"InvalidAttr\",msg:\"attribute \" + matches[i][2] + \" has no value assigned.\"}};\n                } */\n    const attrName = matches[i][2];\n    if (!validateAttrName(attrName)) {\n      return getErrorObject('InvalidAttr', \"Attribute '\"+attrName+\"' is an invalid name.\", getPositionFromMatch(matches[i]));\n    }\n    if (!attrNames.hasOwnProperty(attrName)) {\n      //check for duplicate attribute.\n      attrNames[attrName] = 1;\n    } else {\n      return getErrorObject('InvalidAttr', \"Attribute '\"+attrName+\"' is repeated.\", getPositionFromMatch(matches[i]));\n    }\n  }\n\n  return true;\n}\n\nfunction validateNumberAmpersand(xmlData, i) {\n  let re = /\\d/;\n  if (xmlData[i] === 'x') {\n    i++;\n    re = /[\\da-fA-F]/;\n  }\n  for (; i \u003c xmlData.length; i++) {\n    if (xmlData[i] === ';')\n      return i;\n    if (!xmlData[i].match(re))\n      break;\n  }\n  return -1;\n}\n\nfunction validateAmpersand(xmlData, i) {\n  // https://www.w3.org/TR/xml/#dt-charref\n  i++;\n  if (xmlData[i] === ';')\n    return -1;\n  if (xmlData[i] === '#') {\n    i++;\n    return validateNumberAmpersand(xmlData, i);\n  }\n  let count = 0;\n  for (; i \u003c xmlData.length; i++, count++) {\n    if (xmlData[i].match(/\\w/) \u0026\u0026 count \u003c 20)\n      continue;\n    if (xmlData[i] === ';')\n      break;\n    return -1;\n  }\n  return i;\n}\n\nfunction getErrorObject(code, message, lineNumber) {\n  return {\n    err: {\n      code: code,\n      msg: message,\n      line: lineNumber.line || lineNumber,\n      col: lineNumber.col,\n    },\n  };\n}\n\nfunction validateAttrName(attrName) {\n  return util.isName(attrName);\n}\n\n// const startsWithXML = /^xml/i;\n\nfunction validateTagName(tagname) {\n  return util.isName(tagname) /* \u0026\u0026 !tagname.match(startsWithXML) */;\n}\n\n//this function returns the line number for the character at the given index\nfunction getLineNumberForPosition(xmlData, index) {\n  const lines = xmlData.substring(0, index).split(/\\r?\\n/);\n  return {\n    line: lines.length,\n\n    // column number is last line's length + 1, because column numbering starts at 1:\n    col: lines[lines.length - 1].length + 1\n  };\n}\n\n//this function returns the position of the first character of match within attrStr\nfunction getPositionFromMatch(match) {\n  return match.startIndex + match[1].length;\n}\n","\nconst defaultOptions = {\n    preserveOrder: false,\n    attributeNamePrefix: '@_',\n    attributesGroupName: false,\n    textNodeName: '#text',\n    ignoreAttributes: true,\n    removeNSPrefix: false, // remove NS from tag name or attribute name if true\n    allowBooleanAttributes: false, //a tag can have attributes without any value\n    //ignoreRootElement : false,\n    parseTagValue: true,\n    parseAttributeValue: false,\n    trimValues: true, //Trim string values of tag and attributes\n    cdataPropName: false,\n    numberParseOptions: {\n      hex: true,\n      leadingZeros: true,\n      eNotation: true\n    },\n    tagValueProcessor: function(tagName, val) {\n      return val;\n    },\n    attributeValueProcessor: function(attrName, val) {\n      return val;\n    },\n    stopNodes: [], //nested tags will not be parsed even for errors\n    alwaysCreateTextNode: false,\n    isArray: () =\u003e false,\n    commentPropName: false,\n    unpairedTags: [],\n    processEntities: true,\n    htmlEntities: false,\n    ignoreDeclaration: false,\n    ignorePiTags: false,\n    transformTagName: false,\n    transformAttributeName: false,\n};\n   \nconst buildOptions = function(options) {\n    return Object.assign({}, defaultOptions, options);\n};\n\nexports.buildOptions = buildOptions;\nexports.defaultOptions = defaultOptions;","'use strict';\n\nclass XmlNode{\n  constructor(tagname) {\n    this.tagname = tagname;\n    this.child = []; //nested tags, text, cdata, comments in order\n    this[\":@\"] = {}; //attributes map\n  }\n  add(key,val){\n    // this.child.push( {name : key, val: val, isCdata: isCdata });\n    this.child.push( {[key]: val });\n  }\n  addChild(node) {\n    if(node[\":@\"] \u0026\u0026 Object.keys(node[\":@\"]).length \u003e 0){\n      this.child.push( { [node.tagname]: node.child, [\":@\"]: node[\":@\"] });\n    }else{\n      this.child.push( { [node.tagname]: node.child });\n    }\n  };\n};\n\n\nmodule.exports = XmlNode;","//TODO: handle comments\nfunction readDocType(xmlData, i){\n    \n    const entities = {};\n    if( xmlData[i + 3] === 'O' \u0026\u0026\n         xmlData[i + 4] === 'C' \u0026\u0026\n         xmlData[i + 5] === 'T' \u0026\u0026\n         xmlData[i + 6] === 'Y' \u0026\u0026\n         xmlData[i + 7] === 'P' \u0026\u0026\n         xmlData[i + 8] === 'E')\n    {    \n        i = i+9;\n        let angleBracketsCount = 1;\n        let hasBody = false, entity = false, comment = false;\n        let exp = \"\";\n        for(;i\u003cxmlData.length;i++){\n            if (xmlData[i] === '\u003c' \u0026\u0026 !comment) {\n                if( hasBody \u0026\u0026 \n                     xmlData[i+1] === '!' \u0026\u0026\n                     xmlData[i+2] === 'E' \u0026\u0026\n                     xmlData[i+3] === 'N' \u0026\u0026\n                     xmlData[i+4] === 'T' \u0026\u0026\n                     xmlData[i+5] === 'I' \u0026\u0026\n                     xmlData[i+6] === 'T' \u0026\u0026\n                     xmlData[i+7] === 'Y'\n                ){\n                    i += 7;\n                    entity = true;\n                }else if( hasBody \u0026\u0026 \n                    xmlData[i+1] === '!' \u0026\u0026\n                     xmlData[i+2] === 'E' \u0026\u0026\n                     xmlData[i+3] === 'L' \u0026\u0026\n                     xmlData[i+4] === 'E' \u0026\u0026\n                     xmlData[i+5] === 'M' \u0026\u0026\n                     xmlData[i+6] === 'E' \u0026\u0026\n                     xmlData[i+7] === 'N' \u0026\u0026\n                     xmlData[i+8] === 'T'\n                ){\n                    //Not supported\n                    i += 8;\n                }else if( hasBody \u0026\u0026 \n                    xmlData[i+1] === '!' \u0026\u0026\n                    xmlData[i+2] === 'A' \u0026\u0026\n                    xmlData[i+3] === 'T' \u0026\u0026\n                    xmlData[i+4] === 'T' \u0026\u0026\n                    xmlData[i+5] === 'L' \u0026\u0026\n                    xmlData[i+6] === 'I' \u0026\u0026\n                    xmlData[i+7] === 'S' \u0026\u0026\n                    xmlData[i+8] === 'T'\n                ){\n                    //Not supported\n                    i += 8;\n                }else if( hasBody \u0026\u0026 \n                    xmlData[i+1] === '!' \u0026\u0026\n                    xmlData[i+2] === 'N' \u0026\u0026\n                    xmlData[i+3] === 'O' \u0026\u0026\n                    xmlData[i+4] === 'T' \u0026\u0026\n                    xmlData[i+5] === 'A' \u0026\u0026\n                    xmlData[i+6] === 'T' \u0026\u0026\n                    xmlData[i+7] === 'I' \u0026\u0026\n                    xmlData[i+8] === 'O' \u0026\u0026\n                    xmlData[i+9] === 'N'\n                ){\n                    //Not supported\n                    i += 9;\n                }else if( //comment\n                    xmlData[i+1] === '!' \u0026\u0026\n                    xmlData[i+2] === '-' \u0026\u0026\n                    xmlData[i+3] === '-'\n                ){\n                    comment = true;\n                }else{\n                    throw new Error(\"Invalid DOCTYPE\");\n                }\n                angleBracketsCount++;\n                exp = \"\";\n            } else if (xmlData[i] === '\u003e') {\n                if(comment){\n                    if( xmlData[i - 1] === \"-\" \u0026\u0026 xmlData[i - 2] === \"-\"){\n                        comment = false;\n                        angleBracketsCount--;\n                    }\n                }else{\n                    if(entity) {\n                        parseEntityExp(exp, entities);\n                        entity = false;\n                    }\n                    angleBracketsCount--;\n                }\n                if (angleBracketsCount === 0) {\n                  break;\n                }\n            }else if( xmlData[i] === '['){\n                hasBody = true;\n            }else{\n                exp += xmlData[i];\n            }\n        }\n        if(angleBracketsCount !== 0){\n            throw new Error(`Unclosed DOCTYPE`);\n        }\n    }else{\n        throw new Error(`Invalid Tag instead of DOCTYPE`);\n    }\n    return {entities, i};\n}\n\nconst entityRegex = RegExp(\"^\\\\s([a-zA-z0-0]+)[ \\t](['\\\"])([^\u0026]+)\\\\2\");\nfunction parseEntityExp(exp, entities){\n    const match = entityRegex.exec(exp);\n    if(match){\n        entities[ match[1] ] = {\n            regx : RegExp( `\u0026${match[1]};`,\"g\"),\n            val: match[3]\n        };\n    }\n}\nmodule.exports = readDocType;","'use strict';\n///@ts-check\n\nconst util = require('../util');\nconst xmlNode = require('./xmlNode');\nconst readDocType = require(\"./DocTypeReader\");\nconst toNumber = require(\"strnum\");\n\nconst regx =\n  '\u003c((!\\\\[CDATA\\\\[([\\\\s\\\\S]*?)(]]\u003e))|((NAME:)?(NAME))([^\u003e]*)\u003e|((\\\\/)(NAME)\\\\s*\u003e))([^\u003c]*)'\n  .replace(/NAME/g, util.nameRegexp);\n\n//const tagsRegx = new RegExp(\"\u003c(\\\\/?[\\\\w:\\\\-\\._]+)([^\u003e]*)\u003e(\\\\s*\"+cdataRegx+\")*([^\u003c]+)?\",\"g\");\n//const tagsRegx = new RegExp(\"\u003c(\\\\/?)((\\\\w*:)?([\\\\w:\\\\-\\._]+))([^\u003e]*)\u003e([^\u003c]*)(\"+cdataRegx+\"([^\u003c]*))*([^\u003c]+)?\",\"g\");\n\nclass OrderedObjParser{\n  constructor(options){\n    this.options = options;\n    this.currentNode = null;\n    this.tagsNodeStack = [];\n    this.docTypeEntities = {};\n    this.lastEntities = {\n      \"apos\" : { regex: /\u0026(apos|#39|#x27);/g, val : \"'\"},\n      \"gt\" : { regex: /\u0026(gt|#62|#x3E);/g, val : \"\u003e\"},\n      \"lt\" : { regex: /\u0026(lt|#60|#x3C);/g, val : \"\u003c\"},\n      \"quot\" : { regex: /\u0026(quot|#34|#x22);/g, val : \"\\\"\"},\n    };\n    this.ampEntity = { regex: /\u0026(amp|#38|#x26);/g, val : \"\u0026\"};\n    this.htmlEntities = {\n      \"space\": { regex: /\u0026(nbsp|#160);/g, val: \" \" },\n      // \"lt\" : { regex: /\u0026(lt|#60);/g, val: \"\u003c\" },\n      // \"gt\" : { regex: /\u0026(gt|#62);/g, val: \"\u003e\" },\n      // \"amp\" : { regex: /\u0026(amp|#38);/g, val: \"\u0026\" },\n      // \"quot\" : { regex: /\u0026(quot|#34);/g, val: \"\\\"\" },\n      // \"apos\" : { regex: /\u0026(apos|#39);/g, val: \"'\" },\n      \"cent\" : { regex: /\u0026(cent|#162);/g, val: \"¢\" },\n      \"pound\" : { regex: /\u0026(pound|#163);/g, val: \"£\" },\n      \"yen\" : { regex: /\u0026(yen|#165);/g, val: \"¥\" },\n      \"euro\" : { regex: /\u0026(euro|#8364);/g, val: \"€\" },\n      \"copyright\" : { regex: /\u0026(copy|#169);/g, val: \"©\" },\n      \"reg\" : { regex: /\u0026(reg|#174);/g, val: \"®\" },\n      \"inr\" : { regex: /\u0026(inr|#8377);/g, val: \"₹\" },\n    };\n    this.addExternalEntities = addExternalEntities;\n    this.parseXml = parseXml;\n    this.parseTextData = parseTextData;\n    this.resolveNameSpace = resolveNameSpace;\n    this.buildAttributesMap = buildAttributesMap;\n    this.isItStopNode = isItStopNode;\n    this.replaceEntitiesValue = replaceEntitiesValue;\n    this.readStopNodeData = readStopNodeData;\n    this.saveTextToParentTag = saveTextToParentTag;\n  }\n\n}\n\nfunction addExternalEntities(externalEntities){\n  const entKeys = Object.keys(externalEntities);\n  for (let i = 0; i \u003c entKeys.length; i++) {\n    const ent = entKeys[i];\n    this.lastEntities[ent] = {\n       regex: new RegExp(\"\u0026\"+ent+\";\",\"g\"),\n       val : externalEntities[ent]\n    }\n  }\n}\n\n/**\n * @param {string} val\n * @param {string} tagName\n * @param {string} jPath\n * @param {boolean} dontTrim\n * @param {boolean} hasAttributes\n * @param {boolean} isLeafNode\n * @param {boolean} escapeEntities\n */\nfunction parseTextData(val, tagName, jPath, dontTrim, hasAttributes, isLeafNode, escapeEntities) {\n  if (val !== undefined) {\n    if (this.options.trimValues \u0026\u0026 !dontTrim) {\n      val = val.trim();\n    }\n    if(val.length \u003e 0){\n      if(!escapeEntities) val = this.replaceEntitiesValue(val);\n      \n      const newval = this.options.tagValueProcessor(tagName, val, jPath, hasAttributes, isLeafNode);\n      if(newval === null || newval === undefined){\n        //don't parse\n        return val;\n      }else if(typeof newval !== typeof val || newval !== val){\n        //overwrite\n        return newval;\n      }else if(this.options.trimValues){\n        return parseValue(val, this.options.parseTagValue, this.options.numberParseOptions);\n      }else{\n        const trimmedVal = val.trim();\n        if(trimmedVal === val){\n          return parseValue(val, this.options.parseTagValue, this.options.numberParseOptions);\n        }else{\n          return val;\n        }\n      }\n    }\n  }\n}\n\nfunction resolveNameSpace(tagname) {\n  if (this.options.removeNSPrefix) {\n    const tags = tagname.split(':');\n    const prefix = tagname.charAt(0) === '/' ? '/' : '';\n    if (tags[0] === 'xmlns') {\n      return '';\n    }\n    if (tags.length === 2) {\n      tagname = prefix + tags[1];\n    }\n  }\n  return tagname;\n}\n\n//TODO: change regex to capture NS\n//const attrsRegx = new RegExp(\"([\\\\w\\\\-\\\\.\\\\:]+)\\\\s*=\\\\s*(['\\\"])((.|\\n)*?)\\\\2\",\"gm\");\nconst attrsRegx = new RegExp('([^\\\\s=]+)\\\\s*(=\\\\s*([\\'\"])([\\\\s\\\\S]*?)\\\\3)?', 'gm');\n\nfunction buildAttributesMap(attrStr, jPath) {\n  if (!this.options.ignoreAttributes \u0026\u0026 typeof attrStr === 'string') {\n    // attrStr = attrStr.replace(/\\r?\\n/g, ' ');\n    //attrStr = attrStr || attrStr.trim();\n\n    const matches = util.getAllMatches(attrStr, attrsRegx);\n    const len = matches.length; //don't make it inline\n    const attrs = {};\n    for (let i = 0; i \u003c len; i++) {\n      const attrName = this.resolveNameSpace(matches[i][1]);\n      let oldVal = matches[i][4];\n      let aName = this.options.attributeNamePrefix + attrName;\n      if (attrName.length) {\n        if (this.options.transformAttributeName) {\n          aName = this.options.transformAttributeName(aName);\n        }\n        if (oldVal !== undefined) {\n          if (this.options.trimValues) {\n            oldVal = oldVal.trim();\n          }\n          oldVal = this.replaceEntitiesValue(oldVal);\n          const newVal = this.options.attributeValueProcessor(attrName, oldVal, jPath);\n          if(newVal === null || newVal === undefined){\n            //don't parse\n            attrs[aName] = oldVal;\n          }else if(typeof newVal !== typeof oldVal || newVal !== oldVal){\n            //overwrite\n            attrs[aName] = newVal;\n          }else{\n            //parse\n            attrs[aName] = parseValue(\n              oldVal,\n              this.options.parseAttributeValue,\n              this.options.numberParseOptions\n            );\n          }\n        } else if (this.options.allowBooleanAttributes) {\n          attrs[aName] = true;\n        }\n      }\n    }\n    if (!Object.keys(attrs).length) {\n      return;\n    }\n    if (this.options.attributesGroupName) {\n      const attrCollection = {};\n      attrCollection[this.options.attributesGroupName] = attrs;\n      return attrCollection;\n    }\n    return attrs;\n  }\n}\n\nconst parseXml = function(xmlData) {\n  xmlData = xmlData.replace(/\\r\\n?/g, \"\\n\"); //TODO: remove this line\n  const xmlObj = new xmlNode('!xml');\n  let currentNode = xmlObj;\n  let textData = \"\";\n  let jPath = \"\";\n  for(let i=0; i\u003c xmlData.length; i++){//for each char in XML data\n    const ch = xmlData[i];\n    if(ch === '\u003c'){\n      // const nextIndex = i+1;\n      // const _2ndChar = xmlData[nextIndex];\n      if( xmlData[i+1] === '/') {//Closing Tag\n        const closeIndex = findClosingIndex(xmlData, \"\u003e\", i, \"Closing Tag is not closed.\")\n        let tagName = xmlData.substring(i+2,closeIndex).trim();\n\n        if(this.options.removeNSPrefix){\n          const colonIndex = tagName.indexOf(\":\");\n          if(colonIndex !== -1){\n            tagName = tagName.substr(colonIndex+1);\n          }\n        }\n\n        if(this.options.transformTagName) {\n          tagName = this.options.transformTagName(tagName);\n        }\n\n        if(currentNode){\n          textData = this.saveTextToParentTag(textData, currentNode, jPath);\n        }\n\n        jPath = jPath.substr(0, jPath.lastIndexOf(\".\"));\n        \n        currentNode = this.tagsNodeStack.pop();//avoid recurssion, set the parent tag scope\n        textData = \"\";\n        i = closeIndex;\n      } else if( xmlData[i+1] === '?') {\n\n        let tagData = readTagExp(xmlData,i, false, \"?\u003e\");\n        if(!tagData) throw new Error(\"Pi Tag is not closed.\");\n\n        textData = this.saveTextToParentTag(textData, currentNode, jPath);\n        if( (this.options.ignoreDeclaration \u0026\u0026 tagData.tagName === \"?xml\") || this.options.ignorePiTags){\n\n        }else{\n  \n          const childNode = new xmlNode(tagData.tagName);\n          childNode.add(this.options.textNodeName, \"\");\n          \n          if(tagData.tagName !== tagData.tagExp \u0026\u0026 tagData.attrExpPresent){\n            childNode[\":@\"] = this.buildAttributesMap(tagData.tagExp, jPath);\n          }\n          currentNode.addChild(childNode);\n\n        }\n\n\n        i = tagData.closeIndex + 1;\n      } else if(xmlData.substr(i + 1, 3) === '!--') {\n        const endIndex = findClosingIndex(xmlData, \"--\u003e\", i+4, \"Comment is not closed.\")\n        if(this.options.commentPropName){\n          const comment = xmlData.substring(i + 4, endIndex - 2);\n\n          textData = this.saveTextToParentTag(textData, currentNode, jPath);\n\n          currentNode.add(this.options.commentPropName, [ { [this.options.textNodeName] : comment } ]);\n        }\n        i = endIndex;\n      } else if( xmlData.substr(i + 1, 2) === '!D') {\n        const result = readDocType(xmlData, i);\n        this.docTypeEntities = result.entities;\n        i = result.i;\n      }else if(xmlData.substr(i + 1, 2) === '![') {\n        const closeIndex = findClosingIndex(xmlData, \"]]\u003e\", i, \"CDATA is not closed.\") - 2;\n        const tagExp = xmlData.substring(i + 9,closeIndex);\n\n        textData = this.saveTextToParentTag(textData, currentNode, jPath);\n\n        //cdata should be set even if it is 0 length string\n        if(this.options.cdataPropName){\n          // let val = this.parseTextData(tagExp, this.options.cdataPropName, jPath + \".\" + this.options.cdataPropName, true, false, true);\n          // if(!val) val = \"\";\n          currentNode.add(this.options.cdataPropName, [ { [this.options.textNodeName] : tagExp } ]);\n        }else{\n          let val = this.parseTextData(tagExp, currentNode.tagname, jPath, true, false, true);\n          if(val == undefined) val = \"\";\n          currentNode.add(this.options.textNodeName, val);\n        }\n        \n        i = closeIndex + 2;\n      }else {//Opening tag\n        let result = readTagExp(xmlData,i, this.options.removeNSPrefix);\n        let tagName= result.tagName;\n        let tagExp = result.tagExp;\n        let attrExpPresent = result.attrExpPresent;\n        let closeIndex = result.closeIndex;\n\n        if (this.options.transformTagName) {\n          tagName = this.options.transformTagName(tagName);\n        }\n        \n        //save text as child node\n        if (currentNode \u0026\u0026 textData) {\n          if(currentNode.tagname !== '!xml'){\n            //when nested tag is found\n            textData = this.saveTextToParentTag(textData, currentNode, jPath, false);\n          }\n        }\n\n        if(tagName !== xmlObj.tagname){\n          jPath += jPath ? \".\" + tagName : tagName;\n        }\n\n        //check if last tag was unpaired tag\n        const lastTag = currentNode;\n        if(lastTag \u0026\u0026 this.options.unpairedTags.indexOf(lastTag.tagname) !== -1 ){\n          currentNode = this.tagsNodeStack.pop();\n        }\n\n        if (this.isItStopNode(this.options.stopNodes, jPath, tagName)) { //TODO: namespace\n          let tagContent = \"\";\n          //self-closing tag\n          if(tagExp.length \u003e 0 \u0026\u0026 tagExp.lastIndexOf(\"/\") === tagExp.length - 1){\n            i = result.closeIndex;\n          }\n          //boolean tag\n          else if(this.options.unpairedTags.indexOf(tagName) !== -1){\n            i = result.closeIndex;\n          }\n          //normal tag\n          else{\n            //read until closing tag is found\n            const result = this.readStopNodeData(xmlData, tagName, closeIndex + 1);\n            if(!result) throw new Error(`Unexpected end of ${tagName}`);\n            i = result.i;\n            tagContent = result.tagContent;\n          }\n\n          const childNode = new xmlNode(tagName);\n          if(tagName !== tagExp \u0026\u0026 attrExpPresent){\n            childNode[\":@\"] = this.buildAttributesMap(tagExp, jPath);\n          }\n          if(tagContent) {\n            tagContent = this.parseTextData(tagContent, tagName, jPath, true, attrExpPresent, true, true);\n          }\n          \n          jPath = jPath.substr(0, jPath.lastIndexOf(\".\"));\n          childNode.add(this.options.textNodeName, tagContent);\n          \n          currentNode.addChild(childNode);\n        }else{\n  //selfClosing tag\n          if(tagExp.length \u003e 0 \u0026\u0026 tagExp.lastIndexOf(\"/\") === tagExp.length - 1){\n            if(tagName[tagName.length - 1] === \"/\"){ //remove trailing '/'\n              tagName = tagName.substr(0, tagName.length - 1);\n              tagExp = tagName;\n            }else{\n              tagExp = tagExp.substr(0, tagExp.length - 1);\n            }\n            \n            if(this.options.transformTagName) {\n              tagName = this.options.transformTagName(tagName);\n            }\n\n            const childNode = new xmlNode(tagName);\n            if(tagName !== tagExp \u0026\u0026 attrExpPresent){\n              childNode[\":@\"] = this.buildAttributesMap(tagExp, jPath);\n            }\n            jPath = jPath.substr(0, jPath.lastIndexOf(\".\"));\n            currentNode.addChild(childNode);\n          }\n    //opening tag\n          else{\n            const childNode = new xmlNode( tagName);\n            this.tagsNodeStack.push(currentNode);\n            \n            if(tagName !== tagExp \u0026\u0026 attrExpPresent){\n              childNode[\":@\"] = this.buildAttributesMap(tagExp, jPath);\n            }\n            currentNode.addChild(childNode);\n            currentNode = childNode;\n          }\n          textData = \"\";\n          i = closeIndex;\n        }\n      }\n    }else{\n      textData += xmlData[i];\n    }\n  }\n  return xmlObj.child;\n}\n\nconst replaceEntitiesValue = function(val){\n\n  if(this.options.processEntities){\n    for(let entityName in this.docTypeEntities){\n      const entity = this.docTypeEntities[entityName];\n      val = val.replace( entity.regx, entity.val);\n    }\n    for(let entityName in this.lastEntities){\n      const entity = this.lastEntities[entityName];\n      val = val.replace( entity.regex, entity.val);\n    }\n    if(this.options.htmlEntities){\n      for(let entityName in this.htmlEntities){\n        const entity = this.htmlEntities[entityName];\n        val = val.replace( entity.regex, entity.val);\n      }\n    }\n    val = val.replace( this.ampEntity.regex, this.ampEntity.val);\n  }\n  return val;\n}\nfunction saveTextToParentTag(textData, currentNode, jPath, isLeafNode) {\n  if (textData) { //store previously collected data as textNode\n    if(isLeafNode === undefined) isLeafNode = Object.keys(currentNode.child).length === 0\n    \n    textData = this.parseTextData(textData,\n      currentNode.tagname,\n      jPath,\n      false,\n      currentNode[\":@\"] ? Object.keys(currentNode[\":@\"]).length !== 0 : false,\n      isLeafNode);\n\n    if (textData !== undefined \u0026\u0026 textData !== \"\")\n      currentNode.add(this.options.textNodeName, textData);\n    textData = \"\";\n  }\n  return textData;\n}\n\n//TODO: use jPath to simplify the logic\n/**\n * \n * @param {string[]} stopNodes \n * @param {string} jPath\n * @param {string} currentTagName \n */\nfunction isItStopNode(stopNodes, jPath, currentTagName){\n  const allNodesExp = \"*.\" + currentTagName;\n  for (const stopNodePath in stopNodes) {\n    const stopNodeExp = stopNodes[stopNodePath];\n    if( allNodesExp === stopNodeExp || jPath === stopNodeExp  ) return true;\n  }\n  return false;\n}\n\n/**\n * Returns the tag Expression and where it is ending handling single-dobule quotes situation\n * @param {string} xmlData \n * @param {number} i starting index\n * @returns \n */\nfunction tagExpWithClosingIndex(xmlData, i, closingChar = \"\u003e\"){\n  let attrBoundary;\n  let tagExp = \"\";\n  for (let index = i; index \u003c xmlData.length; index++) {\n    let ch = xmlData[index];\n    if (attrBoundary) {\n        if (ch === attrBoundary) attrBoundary = \"\";//reset\n    } else if (ch === '\"' || ch === \"'\") {\n        attrBoundary = ch;\n    } else if (ch === closingChar[0]) {\n      if(closingChar[1]){\n        if(xmlData[index + 1] === closingChar[1]){\n          return {\n            data: tagExp,\n            index: index\n          }\n        }\n      }else{\n        return {\n          data: tagExp,\n          index: index\n        }\n      }\n    } else if (ch === '\\t') {\n      ch = \" \"\n    }\n    tagExp += ch;\n  }\n}\n\nfunction findClosingIndex(xmlData, str, i, errMsg){\n  const closingIndex = xmlData.indexOf(str, i);\n  if(closingIndex === -1){\n    throw new Error(errMsg)\n  }else{\n    return closingIndex + str.length - 1;\n  }\n}\n\nfunction readTagExp(xmlData,i, removeNSPrefix, closingChar = \"\u003e\"){\n  const result = tagExpWithClosingIndex(xmlData, i+1, closingChar);\n  if(!result) return;\n  let tagExp = result.data;\n  const closeIndex = result.index;\n  const separatorIndex = tagExp.search(/\\s/);\n  let tagName = tagExp;\n  let attrExpPresent = true;\n  if(separatorIndex !== -1){//separate tag name and attributes expression\n    tagName = tagExp.substr(0, separatorIndex).replace(/\\s\\s*$/, '');\n    tagExp = tagExp.substr(separatorIndex + 1);\n  }\n\n  if(removeNSPrefix){\n    const colonIndex = tagName.indexOf(\":\");\n    if(colonIndex !== -1){\n      tagName = tagName.substr(colonIndex+1);\n      attrExpPresent = tagName !== result.data.substr(colonIndex + 1);\n    }\n  }\n\n  return {\n    tagName: tagName,\n    tagExp: tagExp,\n    closeIndex: closeIndex,\n    attrExpPresent: attrExpPresent,\n  }\n}\n/**\n * find paired tag for a stop node\n * @param {string} xmlData \n * @param {string} tagName \n * @param {number} i \n */\nfunction readStopNodeData(xmlData, tagName, i){\n  const startIndex = i;\n  // Starting at 1 since we already have an open tag\n  let openTagCount = 1;\n\n  for (; i \u003c xmlData.length; i++) {\n    if( xmlData[i] === \"\u003c\"){ \n      if (xmlData[i+1] === \"/\") {//close tag\n          const closeIndex = findClosingIndex(xmlData, \"\u003e\", i, `${tagName} is not closed`);\n          let closeTagName = xmlData.substring(i+2,closeIndex).trim();\n          if(closeTagName === tagName){\n            openTagCount--;\n            if (openTagCount === 0) {\n              return {\n                tagContent: xmlData.substring(startIndex, i),\n                i : closeIndex\n              }\n            }\n          }\n          i=closeIndex;\n        } else if(xmlData[i+1] === '?') { \n          const closeIndex = findClosingIndex(xmlData, \"?\u003e\", i+1, \"StopNode is not closed.\")\n          i=closeIndex;\n        } else if(xmlData.substr(i + 1, 3) === '!--') { \n          const closeIndex = findClosingIndex(xmlData, \"--\u003e\", i+3, \"StopNode is not closed.\")\n          i=closeIndex;\n        } else if(xmlData.substr(i + 1, 2) === '![') { \n          const closeIndex = findClosingIndex(xmlData, \"]]\u003e\", i, \"StopNode is not closed.\") - 2;\n          i=closeIndex;\n        } else {\n          const tagData = readTagExp(xmlData, i, '\u003e')\n\n          if (tagData) {\n            const openTagName = tagData \u0026\u0026 tagData.tagName;\n            if (openTagName === tagName \u0026\u0026 tagData.tagExp[tagData.tagExp.length-1] !== \"/\") {\n              openTagCount++;\n            }\n            i=tagData.closeIndex;\n          }\n        }\n      }\n  }//end for loop\n}\n\nfunction parseValue(val, shouldParse, options) {\n  if (shouldParse \u0026\u0026 typeof val === 'string') {\n    //console.log(options)\n    const newval = val.trim();\n    if(newval === 'true' ) return true;\n    else if(newval === 'false' ) return false;\n    else return toNumber(val, options);\n  } else {\n    if (util.isExist(val)) {\n      return val;\n    } else {\n      return '';\n    }\n  }\n}\n\n\nmodule.exports = OrderedObjParser;\n","'use strict';\n\n/**\n * \n * @param {array} node \n * @param {any} options \n * @returns \n */\nfunction prettify(node, options){\n  return compress( node, options);\n}\n\n/**\n * \n * @param {array} arr \n * @param {object} options \n * @param {string} jPath \n * @returns object\n */\nfunction compress(arr, options, jPath){\n  let text;\n  const compressedObj = {};\n  for (let i = 0; i \u003c arr.length; i++) {\n    const tagObj = arr[i];\n    const property = propName(tagObj);\n    let newJpath = \"\";\n    if(jPath === undefined) newJpath = property;\n    else newJpath = jPath + \".\" + property;\n\n    if(property === options.textNodeName){\n      if(text === undefined) text = tagObj[property];\n      else text += \"\" + tagObj[property];\n    }else if(property === undefined){\n      continue;\n    }else if(tagObj[property]){\n      \n      let val = compress(tagObj[property], options, newJpath);\n      const isLeaf = isLeafTag(val, options);\n\n      if(tagObj[\":@\"]){\n        assignAttributes( val, tagObj[\":@\"], newJpath, options);\n      }else if(Object.keys(val).length === 1 \u0026\u0026 val[options.textNodeName] !== undefined \u0026\u0026 !options.alwaysCreateTextNode){\n        val = val[options.textNodeName];\n      }else if(Object.keys(val).length === 0){\n        if(options.alwaysCreateTextNode) val[options.textNodeName] = \"\";\n        else val = \"\";\n      }\n\n      if(compressedObj[property] !== undefined \u0026\u0026 compressedObj.hasOwnProperty(property)) {\n        if(!Array.isArray(compressedObj[property])) {\n            compressedObj[property] = [ compressedObj[property] ];\n        }\n        compressedObj[property].push(val);\n      }else{\n        //TODO: if a node is not an array, then check if it should be an array\n        //also determine if it is a leaf node\n        if (options.isArray(property, newJpath, isLeaf )) {\n          compressedObj[property] = [val];\n        }else{\n          compressedObj[property] = val;\n        }\n      }\n    }\n    \n  }\n  // if(text \u0026\u0026 text.length \u003e 0) compressedObj[options.textNodeName] = text;\n  if(typeof text === \"string\"){\n    if(text.length \u003e 0) compressedObj[options.textNodeName] = text;\n  }else if(text !== undefined) compressedObj[options.textNodeName] = text;\n  return compressedObj;\n}\n\nfunction propName(obj){\n  const keys = Object.keys(obj);\n  for (let i = 0; i \u003c keys.length; i++) {\n    const key = keys[i];\n    if(key !== \":@\") return key;\n  }\n}\n\nfunction assignAttributes(obj, attrMap, jpath, options){\n  if (attrMap) {\n    const keys = Object.keys(attrMap);\n    const len = keys.length; //don't make it inline\n    for (let i = 0; i \u003c len; i++) {\n      const atrrName = keys[i];\n      if (options.isArray(atrrName, jpath + \".\" + atrrName, true, true)) {\n        obj[atrrName] = [ attrMap[atrrName] ];\n      } else {\n        obj[atrrName] = attrMap[atrrName];\n      }\n    }\n  }\n}\n\nfunction isLeafTag(obj, options){\n  const propCount = Object.keys(obj).length;\n  if( propCount === 0 || (propCount === 1 \u0026\u0026 obj[options.textNodeName]) ) return true;\n  return false;\n}\nexports.prettify = prettify;\n","const { buildOptions} = require(\"./OptionsBuilder\");\nconst OrderedObjParser = require(\"./OrderedObjParser\");\nconst { prettify} = require(\"./node2json\");\nconst validator = require('../validator');\n\nclass XMLParser{\n    \n    constructor(options){\n        this.externalEntities = {};\n        this.options = buildOptions(options);\n        \n    }\n    /**\n     * Parse XML dats to JS object \n     * @param {string|Buffer} xmlData \n     * @param {boolean|Object} validationOption \n     */\n    parse(xmlData,validationOption){\n        if(typeof xmlData === \"string\"){\n        }else if( xmlData.toString){\n            xmlData = xmlData.toString();\n        }else{\n            throw new Error(\"XML data is accepted in String or Bytes[] form.\")\n        }\n        if( validationOption){\n            if(validationOption === true) validationOption = {}; //validate with default options\n            \n            const result = validator.validate(xmlData, validationOption);\n            if (result !== true) {\n              throw Error( `${result.err.msg}:${result.err.line}:${result.err.col}` )\n            }\n          }\n        const orderedObjParser = new OrderedObjParser(this.options);\n        orderedObjParser.addExternalEntities(this.externalEntities);\n        const orderedResult = orderedObjParser.parseXml(xmlData);\n        if(this.options.preserveOrder || orderedResult === undefined) return orderedResult;\n        else return prettify(orderedResult, this.options);\n    }\n\n    /**\n     * Add Entity which is not by default supported by this library\n     * @param {string} key \n     * @param {string} value \n     */\n    addEntity(key, value){\n        if(value.indexOf(\"\u0026\") !== -1){\n            throw new Error(\"Entity value can't have '\u0026'\")\n        }else if(key.indexOf(\"\u0026\") !== -1 || key.indexOf(\";\") !== -1){\n            throw new Error(\"An entity must be set without '\u0026' and ';'. Eg. use '#xD' for '\u0026#xD;'\")\n        }else if(value === \"\u0026\"){\n            throw new Error(\"An entity with value '\u0026' is not permitted\");\n        }else{\n            this.externalEntities[key] = value;\n        }\n    }\n}\n\nmodule.exports = XMLParser;","const EOL = \"\\n\";\n\n/**\n * \n * @param {array} jArray \n * @param {any} options \n * @returns \n */\nfunction toXml(jArray, options) {\n    let indentation = \"\";\n    if (options.format \u0026\u0026 options.indentBy.length \u003e 0) {\n        indentation = EOL;\n    }\n    return arrToStr(jArray, options, \"\", indentation);\n}\n\nfunction arrToStr(arr, options, jPath, indentation) {\n    let xmlStr = \"\";\n    let isPreviousElementTag = false;\n\n    for (let i = 0; i \u003c arr.length; i++) {\n        const tagObj = arr[i];\n        const tagName = propName(tagObj);\n        let newJPath = \"\";\n        if (jPath.length === 0) newJPath = tagName\n        else newJPath = `${jPath}.${tagName}`;\n\n        if (tagName === options.textNodeName) {\n            let tagText = tagObj[tagName];\n            if (!isStopNode(newJPath, options)) {\n                tagText = options.tagValueProcessor(tagName, tagText);\n                tagText = replaceEntitiesValue(tagText, options);\n            }\n            if (isPreviousElementTag) {\n                xmlStr += indentation;\n            }\n            xmlStr += tagText;\n            isPreviousElementTag = false;\n            continue;\n        } else if (tagName === options.cdataPropName) {\n            if (isPreviousElementTag) {\n                xmlStr += indentation;\n            }\n            xmlStr += `\u003c![CDATA[${tagObj[tagName][0][options.textNodeName]}]]\u003e`;\n            isPreviousElementTag = false;\n            continue;\n        } else if (tagName === options.commentPropName) {\n            xmlStr += indentation + `\u003c!--${tagObj[tagName][0][options.textNodeName]}--\u003e`;\n            isPreviousElementTag = true;\n            continue;\n        } else if (tagName[0] === \"?\") {\n            const attStr = attr_to_str(tagObj[\":@\"], options);\n            const tempInd = tagName === \"?xml\" ? \"\" : indentation;\n            let piTextNodeName = tagObj[tagName][0][options.textNodeName];\n            piTextNodeName = piTextNodeName.length !== 0 ? \" \" + piTextNodeName : \"\"; //remove extra spacing\n            xmlStr += tempInd + `\u003c${tagName}${piTextNodeName}${attStr}?\u003e`;\n            isPreviousElementTag = true;\n            continue;\n        }\n        let newIdentation = indentation;\n        if (newIdentation !== \"\") {\n            newIdentation += options.indentBy;\n        }\n        const attStr = attr_to_str(tagObj[\":@\"], options);\n        const tagStart = indentation + `\u003c${tagName}${attStr}`;\n        const tagValue = arrToStr(tagObj[tagName], options, newJPath, newIdentation);\n        if (options.unpairedTags.indexOf(tagName) !== -1) {\n            if (options.suppressUnpairedNode) xmlStr += tagStart + \"\u003e\";\n            else xmlStr += tagStart + \"/\u003e\";\n        } else if ((!tagValue || tagValue.length === 0) \u0026\u0026 options.suppressEmptyNode) {\n            xmlStr += tagStart + \"/\u003e\";\n        } else if (tagValue \u0026\u0026 tagValue.endsWith(\"\u003e\")) {\n            xmlStr += tagStart + `\u003e${tagValue}${indentation}\u003c/${tagName}\u003e`;\n        } else {\n            xmlStr += tagStart + \"\u003e\";\n            if (tagValue \u0026\u0026 indentation !== \"\" \u0026\u0026 (tagValue.includes(\"/\u003e\") || tagValue.includes(\"\u003c/\"))) {\n                xmlStr += indentation + options.indentBy + tagValue + indentation;\n            } else {\n                xmlStr += tagValue;\n            }\n            xmlStr += `\u003c/${tagName}\u003e`;\n        }\n        isPreviousElementTag = true;\n    }\n\n    return xmlStr;\n}\n\nfunction propName(obj) {\n    const keys = Object.keys(obj);\n    for (let i = 0; i \u003c keys.length; i++) {\n        const key = keys[i];\n        if (key !== \":@\") return key;\n    }\n}\n\nfunction attr_to_str(attrMap, options) {\n    let attrStr = \"\";\n    if (attrMap \u0026\u0026 !options.ignoreAttributes) {\n        for (let attr in attrMap) {\n            let attrVal = options.attributeValueProcessor(attr, attrMap[attr]);\n            attrVal = replaceEntitiesValue(attrVal, options);\n            if (attrVal === true \u0026\u0026 options.suppressBooleanAttributes) {\n                attrStr += ` ${attr.substr(options.attributeNamePrefix.length)}`;\n            } else {\n                attrStr += ` ${attr.substr(options.attributeNamePrefix.length)}=\"${attrVal}\"`;\n            }\n        }\n    }\n    return attrStr;\n}\n\nfunction isStopNode(jPath, options) {\n    jPath = jPath.substr(0, jPath.length - options.textNodeName.length - 1);\n    let tagName = jPath.substr(jPath.lastIndexOf(\".\") + 1);\n    for (let index in options.stopNodes) {\n        if (options.stopNodes[index] === jPath || options.stopNodes[index] === \"*.\" + tagName) return true;\n    }\n    return false;\n}\n\nfunction replaceEntitiesValue(textValue, options) {\n    if (textValue \u0026\u0026 textValue.length \u003e 0 \u0026\u0026 options.processEntities) {\n        for (let i = 0; i \u003c options.entities.length; i++) {\n            const entity = options.entities[i];\n            textValue = textValue.replace(entity.regex, entity.val);\n        }\n    }\n    return textValue;\n}\nmodule.exports = toXml;\n","'use strict';\n//parse Empty Node as self closing node\nconst buildFromOrderedJs = require('./orderedJs2Xml');\n\nconst defaultOptions = {\n  attributeNamePrefix: '@_',\n  attributesGroupName: false,\n  textNodeName: '#text',\n  ignoreAttributes: true,\n  cdataPropName: false,\n  format: false,\n  indentBy: '  ',\n  suppressEmptyNode: false,\n  suppressUnpairedNode: true,\n  suppressBooleanAttributes: true,\n  tagValueProcessor: function(key, a) {\n    return a;\n  },\n  attributeValueProcessor: function(attrName, a) {\n    return a;\n  },\n  preserveOrder: false,\n  commentPropName: false,\n  unpairedTags: [],\n  entities: [\n    { regex: new RegExp(\"\u0026\", \"g\"), val: \"\u0026amp;\" },//it must be on top\n    { regex: new RegExp(\"\u003e\", \"g\"), val: \"\u0026gt;\" },\n    { regex: new RegExp(\"\u003c\", \"g\"), val: \"\u0026lt;\" },\n    { regex: new RegExp(\"\\'\", \"g\"), val: \"\u0026apos;\" },\n    { regex: new RegExp(\"\\\"\", \"g\"), val: \"\u0026quot;\" }\n  ],\n  processEntities: true,\n  stopNodes: [],\n  // transformTagName: false,\n  // transformAttributeName: false,\n};\n\nfunction Builder(options) {\n  this.options = Object.assign({}, defaultOptions, options);\n  if (this.options.ignoreAttributes || this.options.attributesGroupName) {\n    this.isAttribute = function(/*a*/) {\n      return false;\n    };\n  } else {\n    this.attrPrefixLen = this.options.attributeNamePrefix.length;\n    this.isAttribute = isAttribute;\n  }\n\n  this.processTextOrObjNode = processTextOrObjNode\n\n  if (this.options.format) {\n    this.indentate = indentate;\n    this.tagEndChar = '\u003e\\n';\n    this.newLine = '\\n';\n  } else {\n    this.indentate = function() {\n      return '';\n    };\n    this.tagEndChar = '\u003e';\n    this.newLine = '';\n  }\n}\n\nBuilder.prototype.build = function(jObj) {\n  if(this.options.preserveOrder){\n    return buildFromOrderedJs(jObj, this.options);\n  }else {\n    if(Array.isArray(jObj) \u0026\u0026 this.options.arrayNodeName \u0026\u0026 this.options.arrayNodeName.length \u003e 1){\n      jObj = {\n        [this.options.arrayNodeName] : jObj\n      }\n    }\n    return this.j2x(jObj, 0).val;\n  }\n};\n\nBuilder.prototype.j2x = function(jObj, level) {\n  let attrStr = '';\n  let val = '';\n  for (let key in jObj) {\n    if (typeof jObj[key] === 'undefined') {\n      // supress undefined node\n    } else if (jObj[key] === null) {\n      if(key[0] === \"?\") val += this.indentate(level) + '\u003c' + key + '?' + this.tagEndChar;\n      else val += this.indentate(level) + '\u003c' + key + '/' + this.tagEndChar;\n      // val += this.indentate(level) + '\u003c' + key + '/' + this.tagEndChar;\n    } else if (jObj[key] instanceof Date) {\n      val += this.buildTextValNode(jObj[key], key, '', level);\n    } else if (typeof jObj[key] !== 'object') {\n      //premitive type\n      const attr = this.isAttribute(key);\n      if (attr) {\n        attrStr += this.buildAttrPairStr(attr, '' + jObj[key]);\n      }else {\n        //tag value\n        if (key === this.options.textNodeName) {\n          let newval = this.options.tagValueProcessor(key, '' + jObj[key]);\n          val += this.replaceEntitiesValue(newval);\n        } else {\n          val += this.buildTextValNode(jObj[key], key, '', level);\n        }\n      }\n    } else if (Array.isArray(jObj[key])) {\n      //repeated nodes\n      const arrLen = jObj[key].length;\n      for (let j = 0; j \u003c arrLen; j++) {\n        const item = jObj[key][j];\n        if (typeof item === 'undefined') {\n          // supress undefined node\n        } else if (item === null) {\n          if(key[0] === \"?\") val += this.indentate(level) + '\u003c' + key + '?' + this.tagEndChar;\n          else val += this.indentate(level) + '\u003c' + key + '/' + this.tagEndChar;\n          // val += this.indentate(level) + '\u003c' + key + '/' + this.tagEndChar;\n        } else if (typeof item === 'object') {\n          val += this.processTextOrObjNode(item, key, level)\n        } else {\n          val += this.buildTextValNode(item, key, '', level);\n        }\n      }\n    } else {\n      //nested node\n      if (this.options.attributesGroupName \u0026\u0026 key === this.options.attributesGroupName) {\n        const Ks = Object.keys(jObj[key]);\n        const L = Ks.length;\n        for (let j = 0; j \u003c L; j++) {\n          attrStr += this.buildAttrPairStr(Ks[j], '' + jObj[key][Ks[j]]);\n        }\n      } else {\n        val += this.processTextOrObjNode(jObj[key], key, level)\n      }\n    }\n  }\n  return {attrStr: attrStr, val: val};\n};\n\nBuilder.prototype.buildAttrPairStr = function(attrName, val){\n  val = this.options.attributeValueProcessor(attrName, '' + val);\n  val = this.replaceEntitiesValue(val);\n  if (this.options.suppressBooleanAttributes \u0026\u0026 val === \"true\") {\n    return ' ' + attrName;\n  } else return ' ' + attrName + '=\"' + val + '\"';\n}\n\nfunction processTextOrObjNode (object, key, level) {\n  const result = this.j2x(object, level + 1);\n  if (object[this.options.textNodeName] !== undefined \u0026\u0026 Object.keys(object).length === 1) {\n    return this.buildTextValNode(object[this.options.textNodeName], key, result.attrStr, level);\n  } else {\n    return this.buildObjectNode(result.val, key, result.attrStr, level);\n  }\n}\n\nBuilder.prototype.buildObjectNode = function(val, key, attrStr, level) {\n  if(val === \"\"){\n    if(key[0] === \"?\") return  this.indentate(level) + '\u003c' + key + attrStr+ '?' + this.tagEndChar;\n    else {\n      return this.indentate(level) + '\u003c' + key + attrStr + this.closeTag(key) + this.tagEndChar;\n    }\n  }else{\n\n    let tagEndExp = '\u003c/' + key + this.tagEndChar;\n    let piClosingChar = \"\";\n    \n    if(key[0] === \"?\") {\n      piClosingChar = \"?\";\n      tagEndExp = \"\";\n    }\n  \n    if (attrStr \u0026\u0026 val.indexOf('\u003c') === -1) {\n      return ( this.indentate(level) + '\u003c' +  key + attrStr + piClosingChar + '\u003e' + val + tagEndExp );\n    } else if (this.options.commentPropName !== false \u0026\u0026 key === this.options.commentPropName \u0026\u0026 piClosingChar.length === 0) {\n      return this.indentate(level) + `\u003c!--${val}--\u003e` + this.newLine;\n    }else {\n      return (\n        this.indentate(level) + '\u003c' + key + attrStr + piClosingChar + this.tagEndChar +\n        val +\n        this.indentate(level) + tagEndExp    );\n    }\n  }\n}\n\nBuilder.prototype.closeTag = function(key){\n  let closeTag = \"\";\n  if(this.options.unpairedTags.indexOf(key) !== -1){ //unpaired\n    if(!this.options.suppressUnpairedNode) closeTag = \"/\"\n  }else if(this.options.suppressEmptyNode){ //empty\n    closeTag = \"/\";\n  }else{\n    closeTag = `\u003e\u003c/${key}`\n  }\n  return closeTag;\n}\n\nfunction buildEmptyObjNode(val, key, attrStr, level) {\n  if (val !== '') {\n    return this.buildObjectNode(val, key, attrStr, level);\n  } else {\n    if(key[0] === \"?\") return  this.indentate(level) + '\u003c' + key + attrStr+ '?' + this.tagEndChar;\n    else {\n      return  this.indentate(level) + '\u003c' + key + attrStr + '/' + this.tagEndChar;\n      // return this.buildTagStr(level,key, attrStr);\n    }\n  }\n}\n\nBuilder.prototype.buildTextValNode = function(val, key, attrStr, level) {\n  if (this.options.cdataPropName !== false \u0026\u0026 key === this.options.cdataPropName) {\n    return this.indentate(level) + `\u003c![CDATA[${val}]]\u003e` +  this.newLine;\n  }else if (this.options.commentPropName !== false \u0026\u0026 key === this.options.commentPropName) {\n    return this.indentate(level) + `\u003c!--${val}--\u003e` +  this.newLine;\n  }else if(key[0] === \"?\") {//PI tag\n    return  this.indentate(level) + '\u003c' + key + attrStr+ '?' + this.tagEndChar; \n  }else{\n    let textValue = this.options.tagValueProcessor(key, val);\n    textValue = this.replaceEntitiesValue(textValue);\n  \n    if( textValue === ''){\n      return this.indentate(level) + '\u003c' + key + attrStr + this.closeTag(key) + this.tagEndChar;\n    }else{\n      return this.indentate(level) + '\u003c' + key + attrStr + '\u003e' +\n         textValue +\n        '\u003c/' + key + this.tagEndChar;\n    }\n  }\n}\n\nBuilder.prototype.replaceEntitiesValue = function(textValue){\n  if(textValue \u0026\u0026 textValue.length \u003e 0 \u0026\u0026 this.options.processEntities){\n    for (let i=0; i\u003cthis.options.entities.length; i++) {\n      const entity = this.options.entities[i];\n      textValue = textValue.replace(entity.regex, entity.val);\n    }\n  }\n  return textValue;\n}\n\nfunction indentate(level) {\n  return this.options.indentBy.repeat(level);\n}\n\nfunction isAttribute(name /*, options*/) {\n  if (name.startsWith(this.options.attributeNamePrefix)) {\n    return name.substr(this.attrPrefixLen);\n  } else {\n    return false;\n  }\n}\n\nmodule.exports = Builder;\n","'use strict';\n\nconst validator = require('./validator');\nconst XMLParser = require('./xmlparser/XMLParser');\nconst XMLBuilder = require('./xmlbuilder/json2xml');\n\nmodule.exports = {\n  XMLParser: XMLParser,\n  XMLValidator: validator,\n  XMLBuilder: XMLBuilder\n}","import * as cjsm from \"fast-xml-parser\";export const { XMLParser,XMLValidator,XMLBuilder } = cjsm;export default cjsm.default ?? cjsm;"],"version":3}
