{"version":3,"file":"./lib/fxparser.min.js","mappings":"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","sources":["webpack://XMLParser/./node_modules/strnum/strnum.js","webpack://XMLParser/./src/util.js","webpack://XMLParser/./src/validator.js","webpack://XMLParser/./src/xmlparser/DocTypeReader.js","webpack://XMLParser/./src/xmlparser/OptionsBuilder.js","webpack://XMLParser/./src/xmlparser/OrderedObjParser.js","webpack://XMLParser/./src/xmlparser/XMLParser.js","webpack://XMLParser/./src/xmlparser/node2json.js","webpack://XMLParser/./src/xmlparser/xmlNode.js","webpack://XMLParser/webpack/bootstrap","webpack://XMLParser/webpack/startup"],"sourcesContent":["const hexRegex = /^[-+]?0x[a-fA-F0-9]+$/;\nconst numRegex = /^([\\-\\+])?(0*)(\\.[0-9]+([eE]\\-?[0-9]+)?|[0-9]+(\\.[0-9]+([eE]\\-?[0-9]+)?)?)$/;\n// const octRegex = /0x[a-z0-9]+/;\n// const binRegex = /0x[a-z0-9]+/;\n\n\n//polyfill\nif (!Number.parseInt && window.parseInt) {\n Number.parseInt = window.parseInt;\n}\nif (!Number.parseFloat && window.parseFloat) {\n Number.parseFloat = window.parseFloat;\n}\n\n \nconst consider = {\n hex : true,\n leadingZeros: true,\n decimalPoint: \"\\.\",\n eNotation: true\n //skipLike: /regex/\n};\n\nfunction toNumber(str, options = {}){\n // const options = Object.assign({}, consider);\n // if(opt.leadingZeros === false){\n // options.leadingZeros = false;\n // }else if(opt.hex === false){\n // options.hex = false;\n // }\n\n options = Object.assign({}, consider, options );\n if(!str || typeof str !== \"string\" ) return str;\n \n let trimmedStr = str.trim();\n // if(trimmedStr === \"0.0\") return 0;\n // else if(trimmedStr === \"+0.0\") return 0;\n // else if(trimmedStr === \"-0.0\") return -0;\n\n if(options.skipLike !== undefined && options.skipLike.test(trimmedStr)) return str;\n else if (options.hex && hexRegex.test(trimmedStr)) {\n return Number.parseInt(trimmedStr, 16);\n // } else if (options.parseOct && octRegex.test(str)) {\n // return Number.parseInt(val, 8);\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 if(match){\n const sign = match[1];\n const leadingZeros = match[2];\n let numTrimmedByZeros = trimZeros(match[3]); //complete num without leading zeros\n //trim ending zeros for floating number\n \n const eNotation = match[4] || match[6];\n if(!options.leadingZeros && leadingZeros.length > 0 && sign && trimmedStr[2] !== \".\") return str; //-0123\n else if(!options.leadingZeros && leadingZeros.length > 0 && !sign && trimmedStr[1] !== \".\") return str; //0123\n else{//no leading zeros or leading zeros are allowed\n const num = Number(trimmedStr);\n const numStr = \"\" + num;\n if(numStr.search(/[eE]/) !== -1){ //given number is long and parsed to eNotation\n if(options.eNotation) return num;\n else return str;\n }else if(eNotation){ //given number has enotation\n if(options.eNotation) return num;\n else return str;\n }else if(trimmedStr.indexOf(\".\") !== -1){ //floating number\n // const decimalPart = match[5].substr(1);\n // const intPart = trimmedStr.substr(0,trimmedStr.indexOf(\".\"));\n\n \n // const p = numStr.indexOf(\".\");\n // const givenIntPart = numStr.substr(0,p);\n // const givenDecPart = numStr.substr(p+1);\n if(numStr === \"0\" && (numTrimmedByZeros === \"\") ) return num; //0.0\n else if(numStr === numTrimmedByZeros) return num; //0.456. 0.79000\n else if( sign && numStr === \"-\"+numTrimmedByZeros) return num;\n else return str;\n }\n \n if(leadingZeros){\n // if(numTrimmedByZeros === numStr){\n // if(options.leadingZeros) return num;\n // else return str;\n // }else return str;\n if(numTrimmedByZeros === numStr) return num;\n else if(sign+numTrimmedByZeros === numStr) return num;\n else return str;\n }\n\n if(trimmedStr === numStr) return num;\n else if(trimmedStr === sign+numStr) return num;\n // else{\n // //number with +/- sign\n // trimmedStr.test(/[-+][0-9]);\n\n // }\n return str;\n }\n // else if(!eNotation && trimmedStr && trimmedStr !== Number(trimmedStr) ) return str;\n \n }else{ //non-numeric string\n return str;\n }\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.substr(0,numStr.length-1);\n return numStr;\n }\n return numStr;\n}\nmodule.exports = toNumber\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';\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 < 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 < 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(\"<\\\\/?([\\\\w:\\\\-_\\.]+)\\\\s*\\/?>\",\"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*<\\?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 {\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 = util.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 util.isName(attrName);\n}\n\n// const startsWithXML = /^xml/i;\n\nfunction validateTagName(tagname) {\n return util.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","//TODO: handle comments\nfunction 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 && isEntity(xmlData, i)){\n i += 7; \n [entityName, val,i] = readEntityExp(xmlData,i+1);\n if(val.indexOf(\"&\") === -1) //Parameter entities are not supported\n entities[ validateEntityName(entityName) ] = {\n regx : RegExp( `&${entityName};`,\"g\"),\n val: val\n };\n }\n else if( hasBody && isElement(xmlData, i)) i += 8;//Not supported\n else if( hasBody && isAttlist(xmlData, i)) i += 8;//Not supported\n else if( hasBody && isNotation(xmlData, i)) i += 9;//Not supported\n else if( isComment) 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\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 //read EntityName\n let entityName = \"\";\n for (; i < xmlData.length && (xmlData[i] !== \"'\" && xmlData[i] !== '\"' ); i++) {\n // if(xmlData[i] === \" \") continue;\n // else \n entityName += xmlData[i];\n }\n entityName = entityName.trim();\n if(entityName.indexOf(\" \") !== -1) throw new Error(\"External entites are not supported\");\n\n //read Entity Value\n const startChar = xmlData[i++];\n let val = \"\"\n for (; i < xmlData.length && xmlData[i] !== startChar ; i++) {\n val += xmlData[i];\n }\n return [entityName, val, i];\n}\n\nfunction isComment(xmlData, i){\n if(xmlData[i+1] === '!' &&\n xmlData[i+2] === '-' &&\n xmlData[i+3] === '-') return true\n return false\n}\nfunction isEntity(xmlData, i){\n if(xmlData[i+1] === '!' &&\n xmlData[i+2] === 'E' &&\n xmlData[i+3] === 'N' &&\n xmlData[i+4] === 'T' &&\n xmlData[i+5] === 'I' &&\n xmlData[i+6] === 'T' &&\n xmlData[i+7] === 'Y') return true\n return false\n}\nfunction isElement(xmlData, i){\n if(xmlData[i+1] === '!' &&\n xmlData[i+2] === 'E' &&\n xmlData[i+3] === 'L' &&\n xmlData[i+4] === 'E' &&\n xmlData[i+5] === 'M' &&\n xmlData[i+6] === 'E' &&\n xmlData[i+7] === 'N' &&\n xmlData[i+8] === 'T') return true\n return false\n}\n\nfunction isAttlist(xmlData, i){\n if(xmlData[i+1] === '!' &&\n xmlData[i+2] === 'A' &&\n xmlData[i+3] === 'T' &&\n xmlData[i+4] === 'T' &&\n xmlData[i+5] === 'L' &&\n xmlData[i+6] === 'I' &&\n xmlData[i+7] === 'S' &&\n xmlData[i+8] === 'T') return true\n return false\n}\nfunction isNotation(xmlData, i){\n if(xmlData[i+1] === '!' &&\n xmlData[i+2] === 'N' &&\n xmlData[i+3] === 'O' &&\n xmlData[i+4] === 'T' &&\n xmlData[i+5] === 'A' &&\n xmlData[i+6] === 'T' &&\n xmlData[i+7] === 'I' &&\n xmlData[i+8] === 'O' &&\n xmlData[i+9] === 'N') return true\n return false\n}\n\n//an entity name should not contains special characters that may be used in regex\n//Eg !?\\\\\\/[]$%{}^&*()<>\nconst specialChar = \"!?\\\\\\/[]$%{}^&*()<>\";\n\nfunction validateEntityName(name){\n for (let i = 0; i < specialChar.length; i++) {\n const ch = specialChar[i];\n if(name.indexOf(ch) !== -1) throw new Error(`Invalid character ${ch} in entity name`);\n }\n return name;\n}\n\nmodule.exports = readDocType;","\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: () => 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};\n \nconst buildOptions = function(options) {\n return Object.assign({}, defaultOptions, options);\n};\n\nexports.buildOptions = buildOptions;\nexports.defaultOptions = defaultOptions;","'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 '<((!\\\\[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\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: /&(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 };\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 }\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 && 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 < 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(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)\n\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 //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 && 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 if (this.isItStopNode(this.options.stopNodes, jPath, tagName)) { //TODO: namespace\n let tagContent = \"\";\n //self-closing tag\n if(tagExp.length > 0 && tagExp.lastIndexOf(\"/\") === tagExp.length - 1){\n i = result.closeIndex;\n }\n //unpaired 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 && 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)\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 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)\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)\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){\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);\n }else{\n currentNode.addChild(childNode);\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 = 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 && 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.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 < 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 (util.isExist(val)) {\n return val;\n } else {\n return '';\n }\n }\n}\n\n\nmodule.exports = OrderedObjParser;\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(\"&\") !== -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 '
'\")\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\nmodule.exports = XMLParser;","'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 < 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 && 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}\nexports.prettify = prettify;\n","'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 if(key === \"__proto__\") key = \"#__proto__\";\n this.child.push( {[key]: val });\n }\n addChild(node) {\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 };\n};\n\n\nmodule.exports = XmlNode;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(870);\n"],"names":["hexRegex","numRegex","Number","parseInt","window","parseFloat","consider","hex","leadingZeros","decimalPoint","eNotation","module","exports","str","options","Object","assign","trimmedStr","trim","undefined","skipLike","test","match","exec","sign","numTrimmedByZeros","numStr","indexOf","replace","length","substr","num","search","nameRegexp","regexName","RegExp","isExist","v","isEmptyObject","obj","keys","merge","target","a","arrayMode","len","i","getValue","isName","string","getAllMatches","regex","matches","allmatches","startIndex","lastIndex","index","push","util","require","defaultOptions","allowBooleanAttributes","unpairedTags","isWhiteSpace","char","readPI","xmlData","start","tagname","getErrorObject","getLineNumberForPosition","readCommentAndCDATA","angleBracketsCount","readAttributeStr","attrStr","startChar","tagClosed","value","validate","tags","tagFound","reachedRoot","err","tagStartPos","closingTag","tagName","substring","result","attrStrStart","isValid","validateAttributeString","code","msg","line","otg","pop","openPos","col","afterAmp","validateAmpersand","JSON","stringify","map","t","validAttrStrRegxp","attrNames","getPositionFromMatch","attrName","validateAttrName","hasOwnProperty","re","validateNumberAmpersand","count","message","lineNumber","lines","split","readEntityExp","entityName","Error","val","isComment","isEntity","isElement","isAttlist","isNotation","specialChar","validateEntityName","name","ch","entities","hasBody","comment","regx","preserveOrder","attributeNamePrefix","attributesGroupName","textNodeName","ignoreAttributes","removeNSPrefix","parseTagValue","parseAttributeValue","trimValues","cdataPropName","numberParseOptions","tagValueProcessor","attributeValueProcessor","stopNodes","alwaysCreateTextNode","isArray","commentPropName","processEntities","htmlEntities","ignoreDeclaration","ignorePiTags","transformTagName","transformAttributeName","updateTag","jPath","attrs","buildOptions","xmlNode","readDocType","toNumber","addExternalEntities","externalEntities","entKeys","ent","this","lastEntities","parseTextData","dontTrim","hasAttributes","isLeafNode","escapeEntities","replaceEntitiesValue","newval","parseValue","resolveNameSpace","prefix","charAt","attrsRegx","buildAttributesMap","oldVal","aName","newVal","attrCollection","parseXml","xmlObj","currentNode","textData","closeIndex","findClosingIndex","colonIndex","saveTextToParentTag","lastTagName","lastIndexOf","propIndex","tagsNodeStack","tagData","readTagExp","childNode","add","tagExp","attrExpPresent","addChild","endIndex","docTypeEntities","lastTag","isItStopNode","tagContent","readStopNodeData","child","entity","ampEntity","currentTagName","allNodesExp","stopNodePath","stopNodeExp","errMsg","closingIndex","closingChar","attrBoundary","data","tagExpWithClosingIndex","separatorIndex","openTagCount","shouldParse","OrderedObjParser","prettify","validator","XMLParser","parse","validationOption","toString","orderedObjParser","orderedResult","addEntity","key","compress","arr","text","compressedObj","newJpath","tagObj","property","propName","isLeaf","isLeafTag","assignAttributes","Array","attrMap","jpath","atrrName","propCount","node","XmlNode","__webpack_module_cache__","__webpack_exports__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""}