T.ME/BIBIL_0DAY
CasperSecurity


Server : Apache/2
System : Linux server-15-235-50-60 5.15.0-164-generic #174-Ubuntu SMP Fri Nov 14 20:25:16 UTC 2025 x86_64
User : gositeme ( 1004)
PHP Version : 8.2.29
Disable Function : exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Directory :  /home/gositeme/domains/lavocat.quebec/private_html/node_modules/fast-xml-parser/lib/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/gositeme/domains/lavocat.quebec/private_html/node_modules/fast-xml-parser/lib/fxp.min.js.map
{"version":3,"file":"./lib/fxp.min.js","mappings":"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","sources":["webpack://fxp/webpack/universalModuleDefinition","webpack://fxp/webpack/bootstrap","webpack://fxp/webpack/runtime/define property getters","webpack://fxp/webpack/runtime/hasOwnProperty shorthand","webpack://fxp/webpack/runtime/make namespace object","webpack://fxp/./src/util.js","webpack://fxp/./src/validator.js","webpack://fxp/./src/xmlparser/OptionsBuilder.js","webpack://fxp/./src/xmlparser/xmlNode.js","webpack://fxp/./src/xmlparser/DocTypeReader.js","webpack://fxp/./node_modules/strnum/strnum.js","webpack://fxp/./src/ignoreAttributes.js","webpack://fxp/./src/xmlparser/OrderedObjParser.js","webpack://fxp/./src/xmlparser/node2json.js","webpack://fxp/./src/xmlparser/XMLParser.js","webpack://fxp/./src/xmlbuilder/orderedJs2Xml.js","webpack://fxp/./src/xmlbuilder/json2xml.js","webpack://fxp/./src/fxp.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"fxp\"] = factory();\n\telse\n\t\troot[\"fxp\"] = factory();\n})(this, () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","'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';\nexport const nameRegexp = '[' + nameStartChar + '][' + nameChar + ']*';\nconst regexName = new RegExp('^' + nameRegexp + '$');\n\nexport function getAllMatches(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 < len; index++) {\n      allmatches.push(match[index]);\n    }\n    matches.push(allmatches);\n    match = regex.exec(string);\n  }\n  return matches;\n}\n\nexport const isName = function(string) {\n  const match = regexName.exec(string);\n  return !(match === null || typeof match === 'undefined');\n}\n\nexport function isExist(v) {\n  return typeof v !== 'undefined';\n}\n\nexport function isEmptyObject(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 */\nexport function merge(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 < 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\nexport function getValue(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() {};","'use strict';\n\nimport {getAllMatches, isName} from './util.js';\n\nconst defaultOptions = {\n  allowBooleanAttributes: false, //A tag can have attributes without any value\n  unpairedTags: []\n};\n\n//const tagsPattern = new RegExp(\"<\\\\/?([\\\\w:\\\\-_\\.]+)\\\\s*\\/?>\",\"g\");\nexport function validate(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*<\\?xml.*?\\?>)/g,\"\");//Remove XML starting tag\n  //xmlData = xmlData.replace(/(<!DOCTYPE[\\s\\w\\\"\\.\\/\\-\\:]+(\\[.*\\])*\\s*>)/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 < xmlData.length; i++) {\n\n    if (xmlData[i] === '<' && xmlData[i+1] === '?') {\n      i+=2;\n      i = readPI(xmlData,i);\n      if (i.err) return i;\n    }else if (xmlData[i] === '<') {\n      //starting of tag\n      //read until you reach to '>' avoiding any '>' 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 < xmlData.length &&\n          xmlData[i] !== '>' &&\n          xmlData[i] !== ' ' &&\n          xmlData[i] !== '\\t' &&\n          xmlData[i] !== '\\n' &&\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 '<'.\";\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 > 0) {\n            return getErrorObject('InvalidTag', \"Closing tag '\"+tagName+\"' can't have attributes or invalid starting.\", getLineNumberForPosition(xmlData, tagStartPos));\n          } else if (tags.length === 0) {\n            return getErrorObject('InvalidTag', \"Closing tag '\"+tagName+\"' has not been opened.\", 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 < xmlData.length; i++) {\n          if (xmlData[i] === '<') {\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] === '&') {\n            const afterAmp = validateAmpersand(xmlData, i);\n            if (afterAmp == -1)\n              return getErrorObject('InvalidChar', \"char '&' is not expected.\", getLineNumberForPosition(xmlData, i));\n            i = afterAmp;\n          }else{\n            if (reachedRoot === true && !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] === '<') {\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 > 0) {\n      return getErrorObject('InvalidXml', \"Invalid '\"+\n          JSON.stringify(tags.map(t => 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 < xmlData.length; i++) {\n    if (xmlData[i] == '?' || xmlData[i] == ' ') {\n      //tagname\n      const tagname = xmlData.substr(start, i - start);\n      if (i > 5 && tagname === 'xml') {\n        return getErrorObject('InvalidXml', 'XML declaration allowed only at the start of the document.', getLineNumberForPosition(xmlData, i));\n      } else if (xmlData[i] == '?' && xmlData[i + 1] == '>') {\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 > i + 5 && xmlData[i + 1] === '-' && xmlData[i + 2] === '-') {\n    //comment\n    for (i += 3; i < xmlData.length; i++) {\n      if (xmlData[i] === '-' && xmlData[i + 1] === '-' && xmlData[i + 2] === '>') {\n        i += 2;\n        break;\n      }\n    }\n  } else if (\n    xmlData.length > i + 8 &&\n    xmlData[i + 1] === 'D' &&\n    xmlData[i + 2] === 'O' &&\n    xmlData[i + 3] === 'C' &&\n    xmlData[i + 4] === 'T' &&\n    xmlData[i + 5] === 'Y' &&\n    xmlData[i + 6] === 'P' &&\n    xmlData[i + 7] === 'E'\n  ) {\n    let angleBracketsCount = 1;\n    for (i += 8; i < xmlData.length; i++) {\n      if (xmlData[i] === '<') {\n        angleBracketsCount++;\n      } else if (xmlData[i] === '>') {\n        angleBracketsCount--;\n        if (angleBracketsCount === 0) {\n          break;\n        }\n      }\n    }\n  } else if (\n    xmlData.length > i + 9 &&\n    xmlData[i + 1] === '[' &&\n    xmlData[i + 2] === 'C' &&\n    xmlData[i + 3] === 'D' &&\n    xmlData[i + 4] === 'A' &&\n    xmlData[i + 5] === 'T' &&\n    xmlData[i + 6] === 'A' &&\n    xmlData[i + 7] === '['\n  ) {\n    for (i += 8; i < xmlData.length; i++) {\n      if (xmlData[i] === ']' && xmlData[i + 1] === ']' && xmlData[i + 2] === '>') {\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 '<' 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 < 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] === '>') {\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 = getAllMatches(attrStr, validAttrStrRegxp);\n  const attrNames = {};\n\n  for (let i = 0; i < 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 && 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 && !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 < 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 < xmlData.length; i++, count++) {\n    if (xmlData[i].match(/\\w/) && count < 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 isName(attrName);\n}\n\n// const startsWithXML = /^xml/i;\n\nfunction validateTagName(tagname) {\n  return isName(tagname) /* && !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","\nexport const 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: () => 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    updateTag: function(tagName, jPath, attrs){\n      return tagName\n    },\n    // skipEmptyListItem: false\n    captureMetaData: false,\n};\n   \nexport const buildOptions = function(options) {\n    return Object.assign({}, defaultOptions, options);\n};\n","'use strict';\n\nlet METADATA_SYMBOL;\n\nif (typeof Symbol !== \"function\") {\n  METADATA_SYMBOL = \"@@xmlMetadata\";\n} else {\n  METADATA_SYMBOL = Symbol(\"XML Node Metadata\");\n}\n\nexport default class 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    if(key === \"__proto__\") key = \"#__proto__\";\n    this.child.push( {[key]: val });\n  }\n  addChild(node, startIndex) {\n    if(node.tagname === \"__proto__\") node.tagname = \"#__proto__\";\n    if(node[\":@\"] && Object.keys(node[\":@\"]).length > 0){\n      this.child.push( { [node.tagname]: node.child, [\":@\"]: node[\":@\"] });\n    }else{\n      this.child.push( { [node.tagname]: node.child });\n    }\n    // if requested, add the startIndex\n    if (startIndex !== undefined) {\n      // Note: for now we just overwrite the metadata. If we had more complex metadata,\n      // we might need to do an object append here:  metadata = { ...metadata, startIndex }\n      this.child[this.child.length - 1][METADATA_SYMBOL] = { startIndex };\n    }\n  }\n  /** symbol used for metadata */\n  static getMetaDataSymbol() {\n    return METADATA_SYMBOL;\n  }\n}\n","import {isName} from '../util.js';\n\n//TODO: handle comments\nexport default function readDocType(xmlData, i){\n    \n    const entities = {};\n    if( xmlData[i + 3] === 'O' &&\n         xmlData[i + 4] === 'C' &&\n         xmlData[i + 5] === 'T' &&\n         xmlData[i + 6] === 'Y' &&\n         xmlData[i + 7] === 'P' &&\n         xmlData[i + 8] === 'E')\n    {    \n        i = i+9;\n        let angleBracketsCount = 1;\n        let hasBody = false, comment = false;\n        let exp = \"\";\n        for(;i<xmlData.length;i++){\n            if (xmlData[i] === '<' && !comment) { //Determine the tag type\n                if( hasBody && hasSeq(xmlData, \"!ENTITY\",i)){\n                    i += 7; \n                    let entityName, val;\n                    [entityName, val,i] = readEntityExp(xmlData,i+1);\n                    if(val.indexOf(\"&\") === -1) //Parameter entities are not supported\n                        entities[ entityName ] = {\n                            regx : RegExp( `&${entityName};`,\"g\"),\n                            val: val\n                        };\n                }\n                else if( hasBody && hasSeq(xmlData, \"!ELEMENT\",i))  {\n                    i += 8;//Not supported\n                    const {index} = readElementExp(xmlData,i+1);\n                    i = index;\n                }else if( hasBody && hasSeq(xmlData, \"!ATTLIST\",i)){\n                    i += 8;//Not supported\n                    // const {index} = readAttlistExp(xmlData,i+1);\n                    // i = index;\n                }else if( hasBody && hasSeq(xmlData, \"!NOTATION\",i)) {\n                    i += 9;//Not supported\n                    const {index} = readNotationExp(xmlData,i+1);\n                    i = index;\n                }else if( hasSeq(xmlData, \"!--\",i) ) comment = true;\n                else throw new Error(`Invalid DOCTYPE`);\n\n                angleBracketsCount++;\n                exp = \"\";\n            } else if (xmlData[i] === '>') { //Read tag content\n                if(comment){\n                    if( xmlData[i - 1] === \"-\" && xmlData[i - 2] === \"-\"){\n                        comment = false;\n                        angleBracketsCount--;\n                    }\n                }else{\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 skipWhitespace = (data, index) => {\n    while (index < data.length && /\\s/.test(data[index])) {\n        index++;\n    }\n    return index;\n};\n\nfunction readEntityExp(xmlData, i) {    \n    //External entities are not supported\n    //    <!ENTITY ext SYSTEM \"http://normal-website.com\" >\n\n    //Parameter entities are not supported\n    //    <!ENTITY entityname \"&anotherElement;\">\n\n    //Internal entities are supported\n    //    <!ENTITY entityname \"replacement text\">\n\n    // Skip leading whitespace after <!ENTITY\n    i = skipWhitespace(xmlData, i);\n\n    // Read entity name\n    let entityName = \"\";\n    while (i < xmlData.length && !/\\s/.test(xmlData[i]) && xmlData[i] !== '\"' && xmlData[i] !== \"'\") {\n        entityName += xmlData[i];\n        i++;\n    }\n    validateEntityName(entityName);\n\n    // Skip whitespace after entity name\n    i = skipWhitespace(xmlData, i);\n\n    // Check for unsupported constructs (external entities or parameter entities)\n    if (xmlData.substring(i, i + 6).toUpperCase() === \"SYSTEM\") {\n        throw new Error(\"External entities are not supported\");\n    }else if (xmlData[i] === \"%\") {\n        throw new Error(\"Parameter entities are not supported\");\n    }\n\n    // Read entity value (internal entity)\n    let entityValue = \"\";\n    [i, entityValue] = readIdentifierVal(xmlData, i, \"entity\");\n    i--;\n    return [entityName, entityValue, i ];\n}\n\nfunction readNotationExp(xmlData, i) {\n    // Skip leading whitespace after <!NOTATION\n    i = skipWhitespace(xmlData, i);\n\n    // Read notation name\n    let notationName = \"\";\n    while (i < xmlData.length && !/\\s/.test(xmlData[i])) {\n        notationName += xmlData[i];\n        i++;\n    }\n    validateEntityName(notationName);\n\n    // Skip whitespace after notation name\n    i = skipWhitespace(xmlData, i);\n\n    // Check identifier type (SYSTEM or PUBLIC)\n    const identifierType = xmlData.substring(i, i + 6).toUpperCase();\n    if (identifierType !== \"SYSTEM\" && identifierType !== \"PUBLIC\") {\n        throw new Error(`Expected SYSTEM or PUBLIC, found \"${identifierType}\"`);\n    }\n    i += identifierType.length;\n\n    // Skip whitespace after identifier type\n    i = skipWhitespace(xmlData, i);\n\n    // Read public identifier (if PUBLIC)\n    let publicIdentifier = null;\n    let systemIdentifier = null;\n\n    if (identifierType === \"PUBLIC\") {\n        [i, publicIdentifier ] = readIdentifierVal(xmlData, i, \"publicIdentifier\");\n\n        // Skip whitespace after public identifier\n        i = skipWhitespace(xmlData, i);\n\n        // Optionally read system identifier\n        if (xmlData[i] === '\"' || xmlData[i] === \"'\") {\n            [i, systemIdentifier ] = readIdentifierVal(xmlData, i,\"systemIdentifier\");\n        }\n    } else if (identifierType === \"SYSTEM\") {\n        // Read system identifier (mandatory for SYSTEM)\n        [i, systemIdentifier ] = readIdentifierVal(xmlData, i, \"systemIdentifier\");\n\n        if (!systemIdentifier) {\n            throw new Error(\"Missing mandatory system identifier for SYSTEM notation\");\n        }\n    }\n    \n    return {notationName, publicIdentifier, systemIdentifier, index: --i};\n}\n\nfunction readIdentifierVal(xmlData, i, type) {\n    let identifierVal = \"\";\n    const startChar = xmlData[i];\n    if (startChar !== '\"' && startChar !== \"'\") {\n        throw new Error(`Expected quoted string, found \"${startChar}\"`);\n    }\n    i++;\n\n    while (i < xmlData.length && xmlData[i] !== startChar) {\n        identifierVal += xmlData[i];\n        i++;\n    }\n\n    if (xmlData[i] !== startChar) {\n        throw new Error(`Unterminated ${type} value`);\n    }\n    i++;\n    return [i, identifierVal];\n}\n\nfunction readElementExp(xmlData, i) {\n    // <!ELEMENT br EMPTY>\n    // <!ELEMENT div ANY>\n    // <!ELEMENT title (#PCDATA)>\n    // <!ELEMENT book (title, author+)>\n    // <!ELEMENT name (content-model)>\n    \n    // Skip leading whitespace after <!ELEMENT\n    i = skipWhitespace(xmlData, i);\n\n    // Read element name\n    let elementName = \"\";\n    while (i < xmlData.length && !/\\s/.test(xmlData[i])) {\n        elementName += xmlData[i];\n        i++;\n    }\n\n    // Validate element name\n    if (!validateEntityName(elementName)) {\n        throw new Error(`Invalid element name: \"${elementName}\"`);\n    }\n\n    // Skip whitespace after element name\n    i = skipWhitespace(xmlData, i);\n    let contentModel = \"\";\n    // Expect '(' to start content model\n    if(xmlData[i] === \"E\" && hasSeq(xmlData, \"MPTY\",i)) i+=4;\n    else if(xmlData[i] === \"A\" && hasSeq(xmlData, \"NY\",i)) i+=2;\n    else if (xmlData[i] === \"(\") {\n        i++; // Move past '('\n\n        // Read content model\n        while (i < xmlData.length && xmlData[i] !== \")\") {\n            contentModel += xmlData[i];\n            i++;\n        }\n        if (xmlData[i] !== \")\") {\n            throw new Error(\"Unterminated content model\");\n        }\n\n    }else{\n        throw new Error(`Invalid Element Expression, found \"${xmlData[i]}\"`);\n    }\n    \n    return {\n        elementName,\n        contentModel: contentModel.trim(),\n        index: i\n    };\n}\n\nfunction readAttlistExp(xmlData, i) {\n    // Skip leading whitespace after <!ATTLIST\n    i = skipWhitespace(xmlData, i);\n\n    // Read element name\n    let elementName = \"\";\n    while (i < xmlData.length && !/\\s/.test(xmlData[i])) {\n        elementName += xmlData[i];\n        i++;\n    }\n\n    // Validate element name\n    validateEntityName(elementName)\n\n    // Skip whitespace after element name\n    i = skipWhitespace(xmlData, i);\n\n    // Read attribute name\n    let attributeName = \"\";\n    while (i < xmlData.length && !/\\s/.test(xmlData[i])) {\n        attributeName += xmlData[i];\n        i++;\n    }\n\n    // Validate attribute name\n    if (!validateEntityName(attributeName)) {\n        throw new Error(`Invalid attribute name: \"${attributeName}\"`);\n    }\n\n    // Skip whitespace after attribute name\n    i = skipWhitespace(xmlData, i);\n\n    // Read attribute type\n    let attributeType = \"\";\n    if (xmlData.substring(i, i + 8).toUpperCase() === \"NOTATION\") {\n        attributeType = \"NOTATION\";\n        i += 8; // Move past \"NOTATION\"\n\n        // Skip whitespace after \"NOTATION\"\n        i = skipWhitespace(xmlData, i);\n\n        // Expect '(' to start the list of notations\n        if (xmlData[i] !== \"(\") {\n            throw new Error(`Expected '(', found \"${xmlData[i]}\"`);\n        }\n        i++; // Move past '('\n\n        // Read the list of allowed notations\n        let allowedNotations = [];\n        while (i < xmlData.length && xmlData[i] !== \")\") {\n            let notation = \"\";\n            while (i < xmlData.length && xmlData[i] !== \"|\" && xmlData[i] !== \")\") {\n                notation += xmlData[i];\n                i++;\n            }\n\n            // Validate notation name\n            notation = notation.trim();\n            if (!validateEntityName(notation)) {\n                throw new Error(`Invalid notation name: \"${notation}\"`);\n            }\n\n            allowedNotations.push(notation);\n\n            // Skip '|' separator or exit loop\n            if (xmlData[i] === \"|\") {\n                i++; // Move past '|'\n                i = skipWhitespace(xmlData, i); // Skip optional whitespace after '|'\n            }\n        }\n\n        if (xmlData[i] !== \")\") {\n            throw new Error(\"Unterminated list of notations\");\n        }\n        i++; // Move past ')'\n\n        // Store the allowed notations as part of the attribute type\n        attributeType += \" (\" + allowedNotations.join(\"|\") + \")\";\n    } else {\n        // Handle simple types (e.g., CDATA, ID, IDREF, etc.)\n        while (i < xmlData.length && !/\\s/.test(xmlData[i])) {\n            attributeType += xmlData[i];\n            i++;\n        }\n\n        // Validate simple attribute type\n        const validTypes = [\"CDATA\", \"ID\", \"IDREF\", \"IDREFS\", \"ENTITY\", \"ENTITIES\", \"NMTOKEN\", \"NMTOKENS\"];\n        if (!validTypes.includes(attributeType.toUpperCase())) {\n            throw new Error(`Invalid attribute type: \"${attributeType}\"`);\n        }\n    }\n\n    // Skip whitespace after attribute type\n    i = skipWhitespace(xmlData, i);\n\n    // Read default value\n    let defaultValue = \"\";\n    if (xmlData.substring(i, i + 8).toUpperCase() === \"#REQUIRED\") {\n        defaultValue = \"#REQUIRED\";\n        i += 8;\n    } else if (xmlData.substring(i, i + 7).toUpperCase() === \"#IMPLIED\") {\n        defaultValue = \"#IMPLIED\";\n        i += 7;\n    } else {\n        [i, defaultValue] = readIdentifierVal(xmlData, i, \"ATTLIST\");\n    }\n\n    return {\n        elementName,\n        attributeName,\n        attributeType,\n        defaultValue,\n        index: i\n    }\n}\n\nfunction hasSeq(data, seq,i){\n    for(let j=0;j<seq.length;j++){\n        if(seq[j]!==data[i+j+1]) return false;\n    }\n    return true;\n}\n\nfunction validateEntityName(name){\n    if (isName(name))\n\treturn name;\n    else\n        throw new Error(`Invalid entity name ${name}`);\n}\n","const hexRegex = /^[-+]?0x[a-fA-F0-9]+$/;\nconst numRegex = /^([\\-\\+])?(0*)([0-9]*(\\.[0-9]*)?)$/;\n// const octRegex = /^0x[a-z0-9]+/;\n// const binRegex = /0x[a-z0-9]+/;\n\n \nconst consider = {\n    hex :  true,\n    // oct: false,\n    leadingZeros: true,\n    decimalPoint: \"\\.\",\n    eNotation: true,\n    //skipLike: /regex/\n};\n\nexport default function toNumber(str, options = {}){\n    options = Object.assign({}, consider, options );\n    if(!str || typeof str !== \"string\" ) return str;\n    \n    let trimmedStr  = str.trim();\n    \n    if(options.skipLike !== undefined && options.skipLike.test(trimmedStr)) return str;\n    else if(str===\"0\") return 0;\n    else if (options.hex && hexRegex.test(trimmedStr)) {\n        return parse_int(trimmedStr, 16);\n    // }else if (options.oct && octRegex.test(str)) {\n    //     return Number.parseInt(val, 8);\n    }else if (trimmedStr.search(/.+[eE].+/)!== -1) { //eNotation\n        return resolveEnotation(str,trimmedStr,options);\n    // }else if (options.parseBin && binRegex.test(str)) {\n    //     return Number.parseInt(val, 2);\n    }else{\n        //separate negative sign, leading zeros, and rest number\n        const match = numRegex.exec(trimmedStr);\n        // +00.123 => [ , '+', '00', '.123', ..\n        if(match){\n            const sign = match[1] || \"\";\n            const leadingZeros = match[2];\n            let numTrimmedByZeros = trimZeros(match[3]); //complete num without leading zeros\n            const decimalAdjacentToLeadingZeros = sign ? // 0., -00., 000.\n                str[leadingZeros.length+1] === \".\" \n                : str[leadingZeros.length] === \".\";\n\n            //trim ending zeros for floating number\n            if(!options.leadingZeros //leading zeros are not allowed\n                && (leadingZeros.length > 1 \n                    || (leadingZeros.length === 1 && !decimalAdjacentToLeadingZeros))){\n                // 00, 00.3, +03.24, 03, 03.24\n                return str;\n            }\n            else{//no leading zeros or leading zeros are allowed\n                const num = Number(trimmedStr);\n                const parsedStr = String(num);\n\n                if( num === 0 || num === -0) return num;\n                if(parsedStr.search(/[eE]/) !== -1){ //given number is long and parsed to eNotation\n                    if(options.eNotation) return num;\n                    else return str;\n                }else if(trimmedStr.indexOf(\".\") !== -1){ //floating number\n                    if(parsedStr === \"0\") return num; //0.0\n                    else if(parsedStr === numTrimmedByZeros) return num; //0.456. 0.79000\n                    else if( parsedStr === `${sign}${numTrimmedByZeros}`) return num;\n                    else return str;\n                }\n                \n                let n = leadingZeros? numTrimmedByZeros : trimmedStr;\n                if(leadingZeros){\n                    // -009 => -9\n                    return (n === parsedStr) || (sign+n === parsedStr) ? num : str\n                }else  {\n                    // +9\n                    return (n === parsedStr) || (n === sign+parsedStr) ? num : str\n                }\n            }\n        }else{ //non-numeric string\n            return str;\n        }\n    }\n}\n\nconst eNotationRegx = /^([-+])?(0*)(\\d*(\\.\\d*)?[eE][-\\+]?\\d+)$/;\nfunction resolveEnotation(str,trimmedStr,options){\n    if(!options.eNotation) return str;\n    const notation = trimmedStr.match(eNotationRegx); \n    if(notation){\n        let sign = notation[1] || \"\";\n        const eChar = notation[3].indexOf(\"e\") === -1 ? \"E\" : \"e\";\n        const leadingZeros = notation[2];\n        const eAdjacentToLeadingZeros = sign ? // 0E.\n            str[leadingZeros.length+1] === eChar \n            : str[leadingZeros.length] === eChar;\n\n        if(leadingZeros.length > 1 && eAdjacentToLeadingZeros) return str;\n        else if(leadingZeros.length === 1 \n            && (notation[3].startsWith(`.${eChar}`) || notation[3][0] === eChar)){\n                return Number(trimmedStr);\n        }else if(options.leadingZeros && !eAdjacentToLeadingZeros){ //accept with leading zeros\n            //remove leading 0s\n            trimmedStr = (notation[1] || \"\") + notation[3];\n            return Number(trimmedStr);\n        }else return str;\n    }else{\n        return str;\n    }\n}\n\n/**\n * \n * @param {string} numStr without leading zeros\n * @returns \n */\nfunction trimZeros(numStr){\n    if(numStr && numStr.indexOf(\".\") !== -1){//float\n        numStr = numStr.replace(/0+$/, \"\"); //remove ending zeros\n        if(numStr === \".\")  numStr = \"0\";\n        else if(numStr[0] === \".\")  numStr = \"0\"+numStr;\n        else if(numStr[numStr.length-1] === \".\")  numStr = numStr.substring(0,numStr.length-1);\n        return numStr;\n    }\n    return numStr;\n}\n\nfunction parse_int(numStr, base){\n    //polyfill\n    if(parseInt) return parseInt(numStr, base);\n    else if(Number.parseInt) return Number.parseInt(numStr, base);\n    else if(window && window.parseInt) return window.parseInt(numStr, base);\n    else throw new Error(\"parseInt, Number.parseInt, window.parseInt are not supported\")\n}","export default function getIgnoreAttributesFn(ignoreAttributes) {\n    if (typeof ignoreAttributes === 'function') {\n        return ignoreAttributes\n    }\n    if (Array.isArray(ignoreAttributes)) {\n        return (attrName) => {\n            for (const pattern of ignoreAttributes) {\n                if (typeof pattern === 'string' && attrName === pattern) {\n                    return true\n                }\n                if (pattern instanceof RegExp && pattern.test(attrName)) {\n                    return true\n                }\n            }\n        }\n    }\n    return () => false\n}","'use strict';\n///@ts-check\n\nimport {getAllMatches, isExist} from '../util.js';\nimport xmlNode from './xmlNode.js';\nimport readDocType from './DocTypeReader.js';\nimport toNumber from \"strnum\";\nimport getIgnoreAttributesFn from \"../ignoreAttributes.js\";\n\n// const regx =\n//   '<((!\\\\[CDATA\\\\[([\\\\s\\\\S]*?)(]]>))|((NAME:)?(NAME))([^>]*)>|((\\\\/)(NAME)\\\\s*>))([^<]*)'\n//   .replace(/NAME/g, util.nameRegexp);\n\n//const tagsRegx = new RegExp(\"<(\\\\/?[\\\\w:\\\\-\\._]+)([^>]*)>(\\\\s*\"+cdataRegx+\")*([^<]+)?\",\"g\");\n//const tagsRegx = new RegExp(\"<(\\\\/?)((\\\\w*:)?([\\\\w:\\\\-\\._]+))([^>]*)>([^<]*)(\"+cdataRegx+\"([^<]*))*([^<]+)?\",\"g\");\n\nexport default class OrderedObjParser{\n  constructor(options){\n    this.options = options;\n    this.currentNode = null;\n    this.tagsNodeStack = [];\n    this.docTypeEntities = {};\n    this.lastEntities = {\n      \"apos\" : { regex: /&(apos|#39|#x27);/g, val : \"'\"},\n      \"gt\" : { regex: /&(gt|#62|#x3E);/g, val : \">\"},\n      \"lt\" : { regex: /&(lt|#60|#x3C);/g, val : \"<\"},\n      \"quot\" : { regex: /&(quot|#34|#x22);/g, val : \"\\\"\"},\n    };\n    this.ampEntity = { regex: /&(amp|#38|#x26);/g, val : \"&\"};\n    this.htmlEntities = {\n      \"space\": { regex: /&(nbsp|#160);/g, val: \" \" },\n      // \"lt\" : { regex: /&(lt|#60);/g, val: \"<\" },\n      // \"gt\" : { regex: /&(gt|#62);/g, val: \">\" },\n      // \"amp\" : { regex: /&(amp|#38);/g, val: \"&\" },\n      // \"quot\" : { regex: /&(quot|#34);/g, val: \"\\\"\" },\n      // \"apos\" : { regex: /&(apos|#39);/g, val: \"'\" },\n      \"cent\" : { regex: /&(cent|#162);/g, val: \"¢\" },\n      \"pound\" : { regex: /&(pound|#163);/g, val: \"£\" },\n      \"yen\" : { regex: /&(yen|#165);/g, val: \"¥\" },\n      \"euro\" : { regex: /&(euro|#8364);/g, val: \"€\" },\n      \"copyright\" : { regex: /&(copy|#169);/g, val: \"©\" },\n      \"reg\" : { regex: /&(reg|#174);/g, val: \"®\" },\n      \"inr\" : { regex: /&(inr|#8377);/g, val: \"₹\" },\n      \"num_dec\": { regex: /&#([0-9]{1,7});/g, val : (_, str) => String.fromCodePoint(Number.parseInt(str, 10)) },\n      \"num_hex\": { regex: /&#x([0-9a-fA-F]{1,6});/g, val : (_, str) => String.fromCodePoint(Number.parseInt(str, 16)) },\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    this.addChild = addChild;\n    this.ignoreAttributesFn = getIgnoreAttributesFn(this.options.ignoreAttributes)\n  }\n\n}\n\nfunction addExternalEntities(externalEntities){\n  const entKeys = Object.keys(externalEntities);\n  for (let i = 0; i < entKeys.length; i++) {\n    const ent = entKeys[i];\n    this.lastEntities[ent] = {\n       regex: new RegExp(\"&\"+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 && !dontTrim) {\n      val = val.trim();\n    }\n    if(val.length > 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, tagName) {\n  if (this.options.ignoreAttributes !== true && typeof attrStr === 'string') {\n    // attrStr = attrStr.replace(/\\r?\\n/g, ' ');\n    //attrStr = attrStr || attrStr.trim();\n\n    const matches = getAllMatches(attrStr, attrsRegx);\n    const len = matches.length; //don't make it inline\n    const attrs = {};\n    for (let i = 0; i < len; i++) {\n      const attrName = this.resolveNameSpace(matches[i][1]);\n      if (this.ignoreAttributesFn(attrName, jPath)) {\n        continue\n      }\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(aName === \"__proto__\") aName  = \"#__proto__\";\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< xmlData.length; i++){//for each char in XML data\n    const ch = xmlData[i];\n    if(ch === '<'){\n      // const nextIndex = i+1;\n      // const _2ndChar = xmlData[nextIndex];\n      if( xmlData[i+1] === '/') {//Closing Tag\n        const closeIndex = findClosingIndex(xmlData, \">\", 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        //check if last tag of nested tag was unpaired tag\n        const lastTagName = jPath.substring(jPath.lastIndexOf(\".\")+1);\n        if(tagName && this.options.unpairedTags.indexOf(tagName) !== -1 ){\n          throw new Error(`Unpaired tag can not be used as closing tag: </${tagName}>`);\n        }\n        let propIndex = 0\n        if(lastTagName && this.options.unpairedTags.indexOf(lastTagName) !== -1 ){\n          propIndex = jPath.lastIndexOf('.', jPath.lastIndexOf('.')-1)\n          this.tagsNodeStack.pop();\n        }else{\n          propIndex = jPath.lastIndexOf(\".\");\n        }\n        jPath = jPath.substring(0, propIndex);\n\n        currentNode = this.tagsNodeStack.pop();//avoid recursion, set the parent tag scope\n        textData = \"\";\n        i = closeIndex;\n      } else if( xmlData[i+1] === '?') {\n\n        let tagData = readTagExp(xmlData,i, false, \"?>\");\n        if(!tagData) throw new Error(\"Pi Tag is not closed.\");\n\n        textData = this.saveTextToParentTag(textData, currentNode, jPath);\n        if( (this.options.ignoreDeclaration && 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 && tagData.attrExpPresent){\n            childNode[\":@\"] = this.buildAttributesMap(tagData.tagExp, jPath, tagData.tagName);\n          }\n          this.addChild(currentNode, childNode, jPath, i);\n        }\n\n\n        i = tagData.closeIndex + 1;\n      } else if(xmlData.substr(i + 1, 3) === '!--') {\n        const endIndex = findClosingIndex(xmlData, \"-->\", 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, \"]]>\", i, \"CDATA is not closed.\") - 2;\n        const tagExp = xmlData.substring(i + 9,closeIndex);\n\n        textData = this.saveTextToParentTag(textData, currentNode, jPath);\n\n        let val = this.parseTextData(tagExp, currentNode.tagname, jPath, true, false, true, true);\n        if(val == undefined) val = \"\";\n\n        //cdata should be set even if it is 0 length string\n        if(this.options.cdataPropName){\n          currentNode.add(this.options.cdataPropName, [ { [this.options.textNodeName] : tagExp } ]);\n        }else{\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        const rawTagName = result.rawTagName;\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 && textData) {\n          if(currentNode.tagname !== '!xml'){\n            //when nested tag is found\n            textData = this.saveTextToParentTag(textData, currentNode, jPath, false);\n          }\n        }\n\n        //check if last tag was unpaired tag\n        const lastTag = currentNode;\n        if(lastTag && this.options.unpairedTags.indexOf(lastTag.tagname) !== -1 ){\n          currentNode = this.tagsNodeStack.pop();\n          jPath = jPath.substring(0, jPath.lastIndexOf(\".\"));\n        }\n        if(tagName !== xmlObj.tagname){\n          jPath += jPath ? \".\" + tagName : tagName;\n        }\n        const startIndex = i;\n        if (this.isItStopNode(this.options.stopNodes, jPath, tagName)) {\n          let tagContent = \"\";\n          //self-closing tag\n          if(tagExp.length > 0 && tagExp.lastIndexOf(\"/\") === tagExp.length - 1){\n            if(tagName[tagName.length - 1] === \"/\"){ //remove trailing '/'\n              tagName = tagName.substr(0, tagName.length - 1);\n              jPath = jPath.substr(0, jPath.length - 1);\n              tagExp = tagName;\n            }else{\n              tagExp = tagExp.substr(0, tagExp.length - 1);\n            }\n            i = result.closeIndex;\n          }\n          //unpaired tag\n          else if(this.options.unpairedTags.indexOf(tagName) !== -1){\n            \n            i = result.closeIndex;\n          }\n          //normal tag\n          else{\n            //read until closing tag is found\n            const result = this.readStopNodeData(xmlData, rawTagName, closeIndex + 1);\n            if(!result) throw new Error(`Unexpected end of ${rawTagName}`);\n            i = result.i;\n            tagContent = result.tagContent;\n          }\n\n          const childNode = new xmlNode(tagName);\n\n          if(tagName !== tagExp && attrExpPresent){\n            childNode[\":@\"] = this.buildAttributesMap(tagExp, jPath, tagName);\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          this.addChild(currentNode, childNode, jPath, startIndex);\n        }else{\n  //selfClosing tag\n          if(tagExp.length > 0 && tagExp.lastIndexOf(\"/\") === tagExp.length - 1){\n            if(tagName[tagName.length - 1] === \"/\"){ //remove trailing '/'\n              tagName = tagName.substr(0, tagName.length - 1);\n              jPath = jPath.substr(0, jPath.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 && attrExpPresent){\n              childNode[\":@\"] = this.buildAttributesMap(tagExp, jPath, tagName);\n            }\n            this.addChild(currentNode, childNode, jPath, startIndex);\n            jPath = jPath.substr(0, jPath.lastIndexOf(\".\"));\n          }\n    //opening tag\n          else{\n            const childNode = new xmlNode( tagName);\n            this.tagsNodeStack.push(currentNode);\n            \n            if(tagName !== tagExp && attrExpPresent){\n              childNode[\":@\"] = this.buildAttributesMap(tagExp, jPath, tagName);\n            }\n            this.addChild(currentNode, childNode, jPath, startIndex);\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\nfunction addChild(currentNode, childNode, jPath, startIndex){\n  // unset startIndex if not requested\n  if (!this.options.captureMetaData) startIndex = undefined;\n  const result = this.options.updateTag(childNode.tagname, jPath, childNode[\":@\"])\n  if(result === false){\n  } else if(typeof result === \"string\"){\n    childNode.tagname = result\n    currentNode.addChild(childNode, startIndex);\n  }else{\n    currentNode.addChild(childNode, startIndex);\n  }\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 = 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 && 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-double quotes situation\n * @param {string} xmlData \n * @param {number} i starting index\n * @returns \n */\nfunction tagExpWithClosingIndex(xmlData, i, closingChar = \">\"){\n  let attrBoundary;\n  let tagExp = \"\";\n  for (let index = i; index < 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 = \">\"){\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.substring(0, separatorIndex);\n    tagExp = tagExp.substring(separatorIndex + 1).trimStart();\n  }\n\n  const rawTagName = tagName;\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    rawTagName: rawTagName,\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 < xmlData.length; i++) {\n    if( xmlData[i] === \"<\"){ \n      if (xmlData[i+1] === \"/\") {//close tag\n          const closeIndex = findClosingIndex(xmlData, \">\", 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, \"?>\", i+1, \"StopNode is not closed.\")\n          i=closeIndex;\n        } else if(xmlData.substr(i + 1, 3) === '!--') { \n          const closeIndex = findClosingIndex(xmlData, \"-->\", i+3, \"StopNode is not closed.\")\n          i=closeIndex;\n        } else if(xmlData.substr(i + 1, 2) === '![') { \n          const closeIndex = findClosingIndex(xmlData, \"]]>\", i, \"StopNode is not closed.\") - 2;\n          i=closeIndex;\n        } else {\n          const tagData = readTagExp(xmlData, i, '>')\n\n          if (tagData) {\n            const openTagName = tagData && tagData.tagName;\n            if (openTagName === tagName && 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 && 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 (isExist(val)) {\n      return val;\n    } else {\n      return '';\n    }\n  }\n}\n","'use strict';\n\nimport XmlNode from './xmlNode.js';\n\nconst METADATA_SYMBOL = XmlNode.getMetaDataSymbol();\n\n/**\n * \n * @param {array} node \n * @param {any} options \n * @returns \n */\nexport default function 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 < 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      if (tagObj[METADATA_SYMBOL] !== undefined) {\n        val[METADATA_SYMBOL] = tagObj[METADATA_SYMBOL]; // copy over metadata\n      }\n\n      if(tagObj[\":@\"]){\n        assignAttributes( val, tagObj[\":@\"], newJpath, options);\n      }else if(Object.keys(val).length === 1 && val[options.textNodeName] !== undefined && !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 && 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 && text.length > 0) compressedObj[options.textNodeName] = text;\n  if(typeof text === \"string\"){\n    if(text.length > 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 < 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 < 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 { textNodeName } = options;\n  const propCount = Object.keys(obj).length;\n  \n  if (propCount === 0) {\n    return true;\n  }\n\n  if (\n    propCount === 1 &&\n    (obj[textNodeName] || typeof obj[textNodeName] === \"boolean\" || obj[textNodeName] === 0)\n  ) {\n    return true;\n  }\n\n  return false;\n}\n","import { buildOptions} from './OptionsBuilder.js';\nimport OrderedObjParser from './OrderedObjParser.js';\nimport prettify from './node2json.js';\nimport {validate} from \"../validator.js\";\nimport XmlNode from './xmlNode.js';\n\nexport default class 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 = 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(\"&\") !== -1){\n            throw new Error(\"Entity value can't have '&'\")\n        }else if(key.indexOf(\"&\") !== -1 || key.indexOf(\";\") !== -1){\n            throw new Error(\"An entity must be set without '&' and ';'. Eg. use '#xD' for '&#xD;'\")\n        }else if(value === \"&\"){\n            throw new Error(\"An entity with value '&' is not permitted\");\n        }else{\n            this.externalEntities[key] = value;\n        }\n    }\n\n    /**\n     * Returns a Symbol that can be used to access the metadata\n     * property on a node.\n     * \n     * If Symbol is not available in the environment, an ordinary property is used\n     * and the name of the property is here returned.\n     * \n     * The XMLMetaData property is only present when `captureMetaData`\n     * is true in the options.\n     */\n    static getMetaDataSymbol() {\n        return XmlNode.getMetaDataSymbol();\n    }\n}\n","const EOL = \"\\n\";\n\n/**\n * \n * @param {array} jArray \n * @param {any} options \n * @returns \n */\nexport default function toXml(jArray, options) {\n    let indentation = \"\";\n    if (options.format && options.indentBy.length > 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 < arr.length; i++) {\n        const tagObj = arr[i];\n        const tagName = propName(tagObj);\n        if(tagName === undefined) continue;\n\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 += `<![CDATA[${tagObj[tagName][0][options.textNodeName]}]]>`;\n            isPreviousElementTag = false;\n            continue;\n        } else if (tagName === options.commentPropName) {\n            xmlStr += indentation + `<!--${tagObj[tagName][0][options.textNodeName]}-->`;\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 + `<${tagName}${piTextNodeName}${attStr}?>`;\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 + `<${tagName}${attStr}`;\n        const tagValue = arrToStr(tagObj[tagName], options, newJPath, newIdentation);\n        if (options.unpairedTags.indexOf(tagName) !== -1) {\n            if (options.suppressUnpairedNode) xmlStr += tagStart + \">\";\n            else xmlStr += tagStart + \"/>\";\n        } else if ((!tagValue || tagValue.length === 0) && options.suppressEmptyNode) {\n            xmlStr += tagStart + \"/>\";\n        } else if (tagValue && tagValue.endsWith(\">\")) {\n            xmlStr += tagStart + `>${tagValue}${indentation}</${tagName}>`;\n        } else {\n            xmlStr += tagStart + \">\";\n            if (tagValue && indentation !== \"\" && (tagValue.includes(\"/>\") || tagValue.includes(\"</\"))) {\n                xmlStr += indentation + options.indentBy + tagValue + indentation;\n            } else {\n                xmlStr += tagValue;\n            }\n            xmlStr += `</${tagName}>`;\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 < keys.length; i++) {\n        const key = keys[i];\n        if(!obj.hasOwnProperty(key)) continue;\n        if (key !== \":@\") return key;\n    }\n}\n\nfunction attr_to_str(attrMap, options) {\n    let attrStr = \"\";\n    if (attrMap && !options.ignoreAttributes) {\n        for (let attr in attrMap) {\n            if(!attrMap.hasOwnProperty(attr)) continue;\n            let attrVal = options.attributeValueProcessor(attr, attrMap[attr]);\n            attrVal = replaceEntitiesValue(attrVal, options);\n            if (attrVal === true && 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 && textValue.length > 0 && options.processEntities) {\n        for (let i = 0; i < options.entities.length; i++) {\n            const entity = options.entities[i];\n            textValue = textValue.replace(entity.regex, entity.val);\n        }\n    }\n    return textValue;\n}\n","'use strict';\n//parse Empty Node as self closing node\nimport buildFromOrderedJs from './orderedJs2Xml.js';\nimport getIgnoreAttributesFn from \"../ignoreAttributes.js\";\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(\"&\", \"g\"), val: \"&amp;\" },//it must be on top\n    { regex: new RegExp(\">\", \"g\"), val: \"&gt;\" },\n    { regex: new RegExp(\"<\", \"g\"), val: \"&lt;\" },\n    { regex: new RegExp(\"\\'\", \"g\"), val: \"&apos;\" },\n    { regex: new RegExp(\"\\\"\", \"g\"), val: \"&quot;\" }\n  ],\n  processEntities: true,\n  stopNodes: [],\n  // transformTagName: false,\n  // transformAttributeName: false,\n  oneListGroup: false\n};\n\nexport default function Builder(options) {\n  this.options = Object.assign({}, defaultOptions, options);\n  if (this.options.ignoreAttributes === true || this.options.attributesGroupName) {\n    this.isAttribute = function(/*a*/) {\n      return false;\n    };\n  } else {\n    this.ignoreAttributesFn = getIgnoreAttributesFn(this.options.ignoreAttributes)\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 = '>\\n';\n    this.newLine = '\\n';\n  } else {\n    this.indentate = function() {\n      return '';\n    };\n    this.tagEndChar = '>';\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) && this.options.arrayNodeName && this.options.arrayNodeName.length > 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, ajPath) {\n  let attrStr = '';\n  let val = '';\n  const jPath = ajPath.join('.')\n  for (let key in jObj) {\n    if(!Object.prototype.hasOwnProperty.call(jObj, key)) continue;\n    if (typeof jObj[key] === 'undefined') {\n      // supress undefined node only if it is not an attribute\n      if (this.isAttribute(key)) {\n        val += '';\n      }\n    } else if (jObj[key] === null) {\n      // null attribute should be ignored by the attribute list, but should not cause the tag closing\n      if (this.isAttribute(key)) {\n        val += '';\n      } else if (key === this.options.cdataPropName) {\n        val += '';\n      } else if (key[0] === '?') {\n        val += this.indentate(level) + '<' + key + '?' + this.tagEndChar;\n      } else {\n        val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;\n      }\n      // val += this.indentate(level) + '<' + 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 && !this.ignoreAttributesFn(attr, jPath)) {\n        attrStr += this.buildAttrPairStr(attr, '' + jObj[key]);\n      } else if (!attr) {\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      let listTagVal = \"\";\n      let listTagAttr = \"\";\n      for (let j = 0; j < 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) + '<' + key + '?' + this.tagEndChar;\n          else val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;\n          // val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;\n        } else if (typeof item === 'object') {\n          if(this.options.oneListGroup){\n            const result = this.j2x(item, level + 1, ajPath.concat(key));\n            listTagVal += result.val;\n            if (this.options.attributesGroupName && item.hasOwnProperty(this.options.attributesGroupName)) {\n              listTagAttr += result.attrStr\n            }\n          }else{\n            listTagVal += this.processTextOrObjNode(item, key, level, ajPath)\n          }\n        } else {\n          if (this.options.oneListGroup) {\n            let textValue = this.options.tagValueProcessor(key, item);\n            textValue = this.replaceEntitiesValue(textValue);\n            listTagVal += textValue;\n          } else {\n            listTagVal += this.buildTextValNode(item, key, '', level);\n          }\n        }\n      }\n      if(this.options.oneListGroup){\n        listTagVal = this.buildObjectNode(listTagVal, key, listTagAttr, level);\n      }\n      val += listTagVal;\n    } else {\n      //nested node\n      if (this.options.attributesGroupName && key === this.options.attributesGroupName) {\n        const Ks = Object.keys(jObj[key]);\n        const L = Ks.length;\n        for (let j = 0; j < L; j++) {\n          attrStr += this.buildAttrPairStr(Ks[j], '' + jObj[key][Ks[j]]);\n        }\n      } else {\n        val += this.processTextOrObjNode(jObj[key], key, level, ajPath)\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 && val === \"true\") {\n    return ' ' + attrName;\n  } else return ' ' + attrName + '=\"' + val + '\"';\n}\n\nfunction processTextOrObjNode (object, key, level, ajPath) {\n  const result = this.j2x(object, level + 1, ajPath.concat(key));\n  if (object[this.options.textNodeName] !== undefined && 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) + '<' + key + attrStr+ '?' + this.tagEndChar;\n    else {\n      return this.indentate(level) + '<' + key + attrStr + this.closeTag(key) + this.tagEndChar;\n    }\n  }else{\n\n    let tagEndExp = '</' + key + this.tagEndChar;\n    let piClosingChar = \"\";\n    \n    if(key[0] === \"?\") {\n      piClosingChar = \"?\";\n      tagEndExp = \"\";\n    }\n  \n    // attrStr is an empty string in case the attribute came as undefined or null\n    if ((attrStr || attrStr === '') && val.indexOf('<') === -1) {\n      return ( this.indentate(level) + '<' +  key + attrStr + piClosingChar + '>' + val + tagEndExp );\n    } else if (this.options.commentPropName !== false && key === this.options.commentPropName && piClosingChar.length === 0) {\n      return this.indentate(level) + `<!--${val}-->` + this.newLine;\n    }else {\n      return (\n        this.indentate(level) + '<' + 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 = `></${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) + '<' + key + attrStr+ '?' + this.tagEndChar;\n    else {\n      return  this.indentate(level) + '<' + 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 && key === this.options.cdataPropName) {\n    return this.indentate(level) + `<![CDATA[${val}]]>` +  this.newLine;\n  }else if (this.options.commentPropName !== false && key === this.options.commentPropName) {\n    return this.indentate(level) + `<!--${val}-->` +  this.newLine;\n  }else if(key[0] === \"?\") {//PI tag\n    return  this.indentate(level) + '<' + 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) + '<' + key + attrStr + this.closeTag(key) + this.tagEndChar;\n    }else{\n      return this.indentate(level) + '<' + key + attrStr + '>' +\n         textValue +\n        '</' + key + this.tagEndChar;\n    }\n  }\n}\n\nBuilder.prototype.replaceEntitiesValue = function(textValue){\n  if(textValue && textValue.length > 0 && this.options.processEntities){\n    for (let i=0; i<this.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) && name !== this.options.textNodeName) {\n    return name.substr(this.attrPrefixLen);\n  } else {\n    return false;\n  }\n}\n\n","'use strict';\n\nimport {validate} from './validator.js';\nimport XMLParser from './xmlparser/XMLParser.js';\nimport XMLBuilder from './xmlbuilder/json2xml.js';\n\nconst XMLValidator = {\n  validate: validate\n}\nexport {\n  XMLParser,\n  XMLValidator,\n  XMLBuilder\n};"],"names":["root","factory","exports","module","define","amd","this","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","nameStartChar","regexName","RegExp","getAllMatches","string","regex","matches","match","exec","allmatches","startIndex","lastIndex","length","len","index","push","isName","defaultOptions","allowBooleanAttributes","unpairedTags","validate","xmlData","options","assign","tags","tagFound","reachedRoot","substr","i","readPI","err","isWhiteSpace","getErrorObject","getLineNumberForPosition","tagStartPos","readCommentAndCDATA","closingTag","tagName","trim","substring","result","readAttributeStr","attrStr","attrStrStart","isValid","validateAttributeString","code","msg","line","tagClosed","otg","pop","openPos","col","indexOf","afterAmp","validateAmpersand","JSON","stringify","map","t","replace","char","start","tagname","angleBracketsCount","doubleQuote","singleQuote","startChar","validAttrStrRegxp","attrNames","getPositionFromMatch","undefined","attrName","validateAttrName","re","validateNumberAmpersand","count","message","lineNumber","lines","split","METADATA_SYMBOL","preserveOrder","attributeNamePrefix","attributesGroupName","textNodeName","ignoreAttributes","removeNSPrefix","parseTagValue","parseAttributeValue","trimValues","cdataPropName","numberParseOptions","hex","leadingZeros","eNotation","tagValueProcessor","val","attributeValueProcessor","stopNodes","alwaysCreateTextNode","isArray","commentPropName","processEntities","htmlEntities","ignoreDeclaration","ignorePiTags","transformTagName","transformAttributeName","updateTag","jPath","attrs","captureMetaData","XmlNode","child","_proto","add","_this$child$push","addChild","node","_this$child$push2","_this$child$push3","keys","getMetaDataSymbol","readDocType","entities","Error","hasBody","comment","hasSeq","entityName","_readEntityExp","readEntityExp","regx","readElementExp","readNotationExp","skipWhitespace","data","test","validateEntityName","toUpperCase","_readIdentifierVal","readIdentifierVal","notationName","identifierType","publicIdentifier","systemIdentifier","_readIdentifierVal2","_readIdentifierVal3","_readIdentifierVal4","type","identifierVal","elementName","contentModel","seq","j","name","hexRegex","numRegex","consider","decimalPoint","eNotationRegx","getIgnoreAttributesFn","Array","_step","_iterator","_createForOfIteratorHelperLoose","done","pattern","OrderedObjParser","currentNode","tagsNodeStack","docTypeEntities","lastEntities","ampEntity","_","str","String","fromCodePoint","Number","parseInt","addExternalEntities","parseXml","parseTextData","resolveNameSpace","buildAttributesMap","isItStopNode","replaceEntitiesValue","readStopNodeData","saveTextToParentTag","ignoreAttributesFn","externalEntities","entKeys","ent","dontTrim","hasAttributes","isLeafNode","escapeEntities","newval","parseValue","prefix","charAt","attrsRegx","oldVal","aName","newVal","attrCollection","xmlObj","xmlNode","textData","closeIndex","findClosingIndex","colonIndex","lastTagName","lastIndexOf","propIndex","tagData","readTagExp","childNode","tagExp","attrExpPresent","endIndex","_ref","_ref2","rawTagName","lastTag","tagContent","entity","currentTagName","allNodesExp","stopNodePath","stopNodeExp","errMsg","closingIndex","closingChar","attrBoundary","ch","tagExpWithClosingIndex","separatorIndex","search","trimStart","openTagCount","shouldParse","trimmedStr","skipLike","numStr","window","parse_int","notation","sign","eChar","eAdjacentToLeadingZeros","startsWith","resolveEnotation","numTrimmedByZeros","decimalAdjacentToLeadingZeros","num","parsedStr","n","toNumber","prettify","compress","arr","text","compressedObj","newJpath","tagObj","property","propName","isLeaf","isLeafTag","assignAttributes","attrMap","jpath","atrrName","propCount","XMLParser","buildOptions","parse","validationOption","toString","orderedObjParser","orderedResult","addEntity","toXml","jArray","indentation","format","indentBy","arrToStr","xmlStr","isPreviousElementTag","newJPath","newIdentation","tagStart","attr_to_str","tagValue","suppressUnpairedNode","suppressEmptyNode","endsWith","includes","attStr","tempInd","piTextNodeName","tagText","isStopNode","attr","attrVal","suppressBooleanAttributes","textValue","a","oneListGroup","Builder","isAttribute","attrPrefixLen","processTextOrObjNode","indentate","tagEndChar","newLine","object","level","ajPath","j2x","concat","buildTextValNode","buildObjectNode","repeat","build","jObj","buildFromOrderedJs","arrayNodeName","_jObj","join","Date","buildAttrPairStr","arrLen","listTagVal","listTagAttr","item","Ks","L","closeTag","tagEndExp","piClosingChar","XMLValidator"],"sourceRoot":""}

CasperSecurity Mini