{"version":3,"file":"pzfx-parser.js","sources":["../node_modules/fast-xml-parser/src/util.js","../node_modules/fast-xml-parser/src/node2json.js","../node_modules/fast-xml-parser/src/xmlNode.js","../node_modules/fast-xml-parser/src/xmlstr2xmlnode.js","../node_modules/fast-xml-parser/src/validator.js","../node_modules/fast-xml-parser/src/nimndata.js","../node_modules/fast-xml-parser/src/node2json_str.js","../node_modules/fast-xml-parser/src/json2xml.js","../node_modules/fast-xml-parser/src/parser.js","../src/index.js"],"sourcesContent":["'use strict';\n\nconst nameStartChar = ':A-Za-z_\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD';\nconst nameChar = nameStartChar + '\\\\-.\\\\d\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040';\nconst nameRegexp = '[' + nameStartChar + '][' + nameChar + ']*'\nconst regexName = new RegExp('^' + nameRegexp + '$');\n\nconst getAllMatches = function(string, regex) {\n  const matches = [];\n  let match = regex.exec(string);\n  while (match) {\n    const allmatches = [];\n    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.buildOptions = function(options, defaultOptions, props) {\n  var newOptions = {};\n  if (!options) {\n    return defaultOptions; //if there are not options\n  }\n\n  for (let i = 0; i < props.length; i++) {\n    if (options[props[i]] !== undefined) {\n      newOptions[props[i]] = options[props[i]];\n    } else {\n      newOptions[props[i]] = defaultOptions[props[i]];\n    }\n  }\n  return newOptions;\n};\n\nexports.isName = isName;\nexports.getAllMatches = getAllMatches;\nexports.nameRegexp = nameRegexp;\n","'use strict';\n\nconst util = require('./util');\n\nconst convertToJson = function(node, options) {\n  const jObj = {};\n\n  //when no child node or attr is present\n  if ((!node.child || util.isEmptyObject(node.child)) && (!node.attrsMap || util.isEmptyObject(node.attrsMap))) {\n    return util.isExist(node.val) ? node.val : '';\n  } else {\n    //otherwise create a textnode if node has some text\n    if (util.isExist(node.val)) {\n      if (!(typeof node.val === 'string' && (node.val === '' || node.val === options.cdataPositionChar))) {\n        if(options.arrayMode === \"strict\"){\n          jObj[options.textNodeName] = [ node.val ];\n        }else{\n          jObj[options.textNodeName] = node.val;\n        }\n      }\n    }\n  }\n\n  util.merge(jObj, node.attrsMap, options.arrayMode);\n\n  const keys = Object.keys(node.child);\n  for (let index = 0; index < keys.length; index++) {\n    var tagname = keys[index];\n    if (node.child[tagname] && node.child[tagname].length > 1) {\n      jObj[tagname] = [];\n      for (var tag in node.child[tagname]) {\n        jObj[tagname].push(convertToJson(node.child[tagname][tag], options));\n      }\n    } else {\n      if(options.arrayMode === true){\n        const result = convertToJson(node.child[tagname][0], options)\n        if(typeof result === 'object')\n          jObj[tagname] = [ result ];\n        else\n          jObj[tagname] = result;\n      }else if(options.arrayMode === \"strict\"){\n        jObj[tagname] = [convertToJson(node.child[tagname][0], options) ];\n      }else{\n        jObj[tagname] = convertToJson(node.child[tagname][0], options);\n      }\n    }\n  }\n\n  //add value\n  return jObj;\n};\n\nexports.convertToJson = convertToJson;\n","'use strict';\n\nmodule.exports = function(tagname, parent, val) {\n  this.tagname = tagname;\n  this.parent = parent;\n  this.child = {}; //child tags\n  this.attrsMap = {}; //attributes map\n  this.val = val; //text only\n  this.addChild = function(child) {\n    if (Array.isArray(this.child[child.tagname])) {\n      //already presents\n      this.child[child.tagname].push(child);\n    } else {\n      this.child[child.tagname] = [child];\n    }\n  };\n};\n","'use strict';\n\nconst util = require('./util');\nconst buildOptions = require('./util').buildOptions;\nconst xmlNode = require('./xmlNode');\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\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\nconst defaultOptions = {\n  attributeNamePrefix: '@_',\n  attrNodeName: false,\n  textNodeName: '#text',\n  ignoreAttributes: true,\n  ignoreNameSpace: false,\n  allowBooleanAttributes: false, //a tag can have attributes without any value\n  //ignoreRootElement : false,\n  parseNodeValue: true,\n  parseAttributeValue: false,\n  arrayMode: false,\n  trimValues: true, //Trim string values of tag and attributes\n  cdataTagName: false,\n  cdataPositionChar: '\\\\c',\n  tagValueProcessor: function(a, tagName) {\n    return a;\n  },\n  attrValueProcessor: function(a, attrName) {\n    return a;\n  },\n  stopNodes: []\n  //decodeStrict: false,\n};\n\nexports.defaultOptions = defaultOptions;\n\nconst props = [\n  'attributeNamePrefix',\n  'attrNodeName',\n  'textNodeName',\n  'ignoreAttributes',\n  'ignoreNameSpace',\n  'allowBooleanAttributes',\n  'parseNodeValue',\n  'parseAttributeValue',\n  'arrayMode',\n  'trimValues',\n  'cdataTagName',\n  'cdataPositionChar',\n  'tagValueProcessor',\n  'attrValueProcessor',\n  'parseTrueNumberOnly',\n  'stopNodes'\n];\nexports.props = props;\n\n/**\n * Trim -> valueProcessor -> parse value\n * @param {string} tagName\n * @param {string} val\n * @param {object} options\n */\nfunction processTagValue(tagName, val, options) {\n  if (val) {\n    if (options.trimValues) {\n      val = val.trim();\n    }\n    val = options.tagValueProcessor(val, tagName);\n    val = parseValue(val, options.parseNodeValue, options.parseTrueNumberOnly);\n  }\n\n  return val;\n}\n\nfunction resolveNameSpace(tagname, options) {\n  if (options.ignoreNameSpace) {\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\nfunction parseValue(val, shouldParse, parseTrueNumberOnly) {\n  if (shouldParse && typeof val === 'string') {\n    let parsed;\n    if (val.trim() === '' || isNaN(val)) {\n      parsed = val === 'true' ? true : val === 'false' ? false : val;\n    } else {\n      if (val.indexOf('0x') !== -1) {\n        //support hexa decimal\n        parsed = Number.parseInt(val, 16);\n      } else if (val.indexOf('.') !== -1) {\n        parsed = Number.parseFloat(val);\n        val = val.replace(/\\.?0+$/, \"\");\n      } else {\n        parsed = Number.parseInt(val, 10);\n      }\n      if (parseTrueNumberOnly) {\n        parsed = String(parsed) === val ? parsed : val;\n      }\n    }\n    return parsed;\n  } else {\n    if (util.isExist(val)) {\n      return val;\n    } else {\n      return '';\n    }\n  }\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*([\\'\"])(.*?)\\\\3)?', 'g');\n\nfunction buildAttributesMap(attrStr, options) {\n  if (!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 = resolveNameSpace(matches[i][1], options);\n      if (attrName.length) {\n        if (matches[i][4] !== undefined) {\n          if (options.trimValues) {\n            matches[i][4] = matches[i][4].trim();\n          }\n          matches[i][4] = options.attrValueProcessor(matches[i][4], attrName);\n          attrs[options.attributeNamePrefix + attrName] = parseValue(\n            matches[i][4],\n            options.parseAttributeValue,\n            options.parseTrueNumberOnly\n          );\n        } else if (options.allowBooleanAttributes) {\n          attrs[options.attributeNamePrefix + attrName] = true;\n        }\n      }\n    }\n    if (!Object.keys(attrs).length) {\n      return;\n    }\n    if (options.attrNodeName) {\n      const attrCollection = {};\n      attrCollection[options.attrNodeName] = attrs;\n      return attrCollection;\n    }\n    return attrs;\n  }\n}\n\nconst getTraversalObj = function(xmlData, options) {\n  xmlData = xmlData.replace(/(\\r\\n)|\\n/, \" \");\n  options = buildOptions(options, defaultOptions, props);\n  const xmlObj = new xmlNode('!xml');\n  let currentNode = xmlObj;\n  let textData = \"\";\n\n//function match(xmlData){\n  for(let i=0; i< xmlData.length; i++){\n    const ch = xmlData[i];\n    if(ch === '<'){\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(options.ignoreNameSpace){\n          const colonIndex = tagName.indexOf(\":\");\n          if(colonIndex !== -1){\n            tagName = tagName.substr(colonIndex+1);\n          }\n        }\n\n        /* if (currentNode.parent) {\n          currentNode.parent.val = util.getValue(currentNode.parent.val) + '' + processTagValue2(tagName, textData , options);\n        } */\n        if(currentNode){\n          if(currentNode.val){\n            currentNode.val = util.getValue(currentNode.val) + '' + processTagValue(tagName, textData , options);\n          }else{\n            currentNode.val = processTagValue(tagName, textData , options);\n          }\n        }\n\n        if (options.stopNodes.length && options.stopNodes.includes(currentNode.tagname)) {\n          currentNode.child = []\n          if (currentNode.attrsMap == undefined) { currentNode.attrsMap = {}}\n          currentNode.val = xmlData.substr(currentNode.startIndex + 1, i - currentNode.startIndex - 1)\n        }\n        currentNode = currentNode.parent;\n        textData = \"\";\n        i = closeIndex;\n      } else if( xmlData[i+1] === '?') {\n        i = findClosingIndex(xmlData, \"?>\", i, \"Pi Tag is not closed.\")\n      } else if(xmlData.substr(i + 1, 3) === '!--') {\n        i = findClosingIndex(xmlData, \"-->\", i, \"Comment is not closed.\")\n      } else if( xmlData.substr(i + 1, 2) === '!D') {\n        const closeIndex = findClosingIndex(xmlData, \">\", i, \"DOCTYPE is not closed.\")\n        const tagExp = xmlData.substring(i, closeIndex);\n        if(tagExp.indexOf(\"[\") >= 0){\n          i = xmlData.indexOf(\"]>\", i) + 1;\n        }else{\n          i = closeIndex;\n        }\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        //considerations\n        //1. CDATA will always have parent node\n        //2. A tag with CDATA is not a leaf node so it's value would be string type.\n        if(textData){\n          currentNode.val = util.getValue(currentNode.val) + '' + processTagValue(currentNode.tagname, textData , options);\n          textData = \"\";\n        }\n\n        if (options.cdataTagName) {\n          //add cdata node\n          const childNode = new xmlNode(options.cdataTagName, currentNode, tagExp);\n          currentNode.addChild(childNode);\n          //for backtracking\n          currentNode.val = util.getValue(currentNode.val) + options.cdataPositionChar;\n          //add rest value to parent node\n          if (tagExp) {\n            childNode.val = tagExp;\n          }\n        } else {\n          currentNode.val = (currentNode.val || '') + (tagExp || '');\n        }\n\n        i = closeIndex + 2;\n      }else {//Opening tag\n        const result = closingIndexForOpeningTag(xmlData, i+1)\n        let tagExp = result.data;\n        const closeIndex = result.index;\n        const separatorIndex = tagExp.indexOf(\" \");\n        let tagName = tagExp;\n        if(separatorIndex !== -1){\n          tagName = tagExp.substr(0, separatorIndex).trimRight();\n          tagExp = tagExp.substr(separatorIndex + 1);\n        }\n\n        if(options.ignoreNameSpace){\n          const colonIndex = tagName.indexOf(\":\");\n          if(colonIndex !== -1){\n            tagName = tagName.substr(colonIndex+1);\n          }\n        }\n\n        //save text to parent node\n        if (currentNode && textData) {\n          if(currentNode.tagname !== '!xml'){\n            currentNode.val = util.getValue(currentNode.val) + '' + processTagValue( currentNode.tagname, textData, options);\n          }\n        }\n\n        if(tagExp.length > 0 && tagExp.lastIndexOf(\"/\") === tagExp.length - 1){//selfClosing tag\n\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          const childNode = new xmlNode(tagName, currentNode, '');\n          if(tagName !== tagExp){\n            childNode.attrsMap = buildAttributesMap(tagExp, options);\n          }\n          currentNode.addChild(childNode);\n        }else{//opening tag\n\n          const childNode = new xmlNode( tagName, currentNode );\n          if (options.stopNodes.length && options.stopNodes.includes(childNode.tagname)) {\n            childNode.startIndex=closeIndex;\n          }\n          if(tagName !== tagExp){\n            childNode.attrsMap = buildAttributesMap(tagExp, options);\n          }\n          currentNode.addChild(childNode);\n          currentNode = childNode;\n        }\n        textData = \"\";\n        i = closeIndex;\n      }\n    }else{\n      textData += xmlData[i];\n    }\n  }\n  return xmlObj;\n}\n\nfunction closingIndexForOpeningTag(data, i){\n  let attrBoundary;\n  let tagExp = \"\";\n  for (let index = i; index < data.length; index++) {\n    let ch = data[index];\n    if (attrBoundary) {\n        if (ch === attrBoundary) attrBoundary = \"\";//reset\n    } else if (ch === '\"' || ch === \"'\") {\n        attrBoundary = ch;\n    } else if (ch === '>') {\n        return {\n          data: tagExp,\n          index: index\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\nexports.getTraversalObj = getTraversalObj;\n","'use strict';\n\nconst util = require('./util');\n\nconst defaultOptions = {\n  allowBooleanAttributes: false, //A tag can have attributes without any value\n};\n\nconst props = ['allowBooleanAttributes'];\n\n//const tagsPattern = new RegExp(\"<\\\\/?([\\\\w:\\\\-_\\.]+)\\\\s*\\/?>\",\"g\");\nexports.validate = function (xmlData, options) {\n  options = util.buildOptions(options, defaultOptions, props);\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    if (xmlData[i] === '<') {\n      //starting of tag\n      //read until you reach to '>' avoiding any '>' in attribute value\n\n      i++;\n      if (xmlData[i] === '?') {\n        i = readPI(xmlData, ++i);\n        if (i.err) {\n          return i;\n        }\n      } else 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 = \"There is an unnecessary space between tag name and backward slash '</ ..'.\";\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          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, i - attrStr.length + 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, i));\n          } else {\n            const otg = tags.pop();\n            if (tagName !== otg) {\n              return getErrorObject('InvalidTag', \"Closing tag '\"+otg+\"' is expected inplace of '\"+tagName+\"'.\", getLineNumberForPosition(xmlData, i));\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 {\n            tags.push(tagName);\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 {\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          }\n        } //end of reading tag text value\n        if (xmlData[i] === '<') {\n          i--;\n        }\n      }\n    } else {\n      if (xmlData[i] === ' ' || xmlData[i] === '\\t' || xmlData[i] === '\\n' || xmlData[i] === '\\r') {\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 > 0) {\n    return getErrorObject('InvalidXml', \"Invalid '\"+JSON.stringify(tags, null, 4).replace(/\\r?\\n/g, '')+\"' found.\", 1);\n  }\n\n  return true;\n};\n\n/**\n * Read Processing insstructions and skip\n * @param {*} xmlData\n * @param {*} i\n */\nfunction readPI(xmlData, i) {\n  var start = i;\n  for (; i < xmlData.length; i++) {\n    if (xmlData[i] == '?' || xmlData[i] == ' ') {\n      //tagname\n      var 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\nvar doubleQuote = '\"';\nvar 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        continue;\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(attrStr, matches[i][0]))\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(attrStr, matches[i][0]));\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(attrStr, matches[i][0]));\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(attrStr, matches[i][0]));\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,\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  var lines = xmlData.substring(0, index).split(/\\r?\\n/);\n  return lines.length;\n}\n\n//this function returns the position of the last character of match within attrStr\nfunction getPositionFromMatch(attrStr, match) {\n  return attrStr.indexOf(match) + match.length;\n}\n","'use strict';\nconst char = function(a) {\n  return String.fromCharCode(a);\n};\n\nconst chars = {\n  nilChar: char(176),\n  missingChar: char(201),\n  nilPremitive: char(175),\n  missingPremitive: char(200),\n\n  emptyChar: char(178),\n  emptyValue: char(177), //empty Premitive\n\n  boundryChar: char(179),\n\n  objStart: char(198),\n  arrStart: char(204),\n  arrayEnd: char(185),\n};\n\nconst charsArr = [\n  chars.nilChar,\n  chars.nilPremitive,\n  chars.missingChar,\n  chars.missingPremitive,\n  chars.boundryChar,\n  chars.emptyChar,\n  chars.emptyValue,\n  chars.arrayEnd,\n  chars.objStart,\n  chars.arrStart,\n];\n\nconst _e = function(node, e_schema, options) {\n  if (typeof e_schema === 'string') {\n    //premitive\n    if (node && node[0] && node[0].val !== undefined) {\n      return getValue(node[0].val, e_schema);\n    } else {\n      return getValue(node, e_schema);\n    }\n  } else {\n    const hasValidData = hasData(node);\n    if (hasValidData === true) {\n      let str = '';\n      if (Array.isArray(e_schema)) {\n        //attributes can't be repeated. hence check in children tags only\n        str += chars.arrStart;\n        const itemSchema = e_schema[0];\n        //var itemSchemaType = itemSchema;\n        const arr_len = node.length;\n\n        if (typeof itemSchema === 'string') {\n          for (let arr_i = 0; arr_i < arr_len; arr_i++) {\n            const r = getValue(node[arr_i].val, itemSchema);\n            str = processValue(str, r);\n          }\n        } else {\n          for (let arr_i = 0; arr_i < arr_len; arr_i++) {\n            const r = _e(node[arr_i], itemSchema, options);\n            str = processValue(str, r);\n          }\n        }\n        str += chars.arrayEnd; //indicates that next item is not array item\n      } else {\n        //object\n        str += chars.objStart;\n        const keys = Object.keys(e_schema);\n        if (Array.isArray(node)) {\n          node = node[0];\n        }\n        for (let i in keys) {\n          const key = keys[i];\n          //a property defined in schema can be present either in attrsMap or children tags\n          //options.textNodeName will not present in both maps, take it's value from val\n          //options.attrNodeName will be present in attrsMap\n          let r;\n          if (!options.ignoreAttributes && node.attrsMap && node.attrsMap[key]) {\n            r = _e(node.attrsMap[key], e_schema[key], options);\n          } else if (key === options.textNodeName) {\n            r = _e(node.val, e_schema[key], options);\n          } else {\n            r = _e(node.child[key], e_schema[key], options);\n          }\n          str = processValue(str, r);\n        }\n      }\n      return str;\n    } else {\n      return hasValidData;\n    }\n  }\n};\n\nconst getValue = function(a /*, type*/) {\n  switch (a) {\n    case undefined:\n      return chars.missingPremitive;\n    case null:\n      return chars.nilPremitive;\n    case '':\n      return chars.emptyValue;\n    default:\n      return a;\n  }\n};\n\nconst processValue = function(str, r) {\n  if (!isAppChar(r[0]) && !isAppChar(str[str.length - 1])) {\n    str += chars.boundryChar;\n  }\n  return str + r;\n};\n\nconst isAppChar = function(ch) {\n  return charsArr.indexOf(ch) !== -1;\n};\n\nfunction hasData(jObj) {\n  if (jObj === undefined) {\n    return chars.missingChar;\n  } else if (jObj === null) {\n    return chars.nilChar;\n  } else if (\n    jObj.child &&\n    Object.keys(jObj.child).length === 0 &&\n    (!jObj.attrsMap || Object.keys(jObj.attrsMap).length === 0)\n  ) {\n    return chars.emptyChar;\n  } else {\n    return true;\n  }\n}\n\nconst x2j = require('./xmlstr2xmlnode');\nconst buildOptions = require('./util').buildOptions;\n\nconst convert2nimn = function(node, e_schema, options) {\n  options = buildOptions(options, x2j.defaultOptions, x2j.props);\n  return _e(node, e_schema, options);\n};\n\nexports.convert2nimn = convert2nimn;\n","'use strict';\n\nconst util = require('./util');\nconst buildOptions = require('./util').buildOptions;\nconst x2j = require('./xmlstr2xmlnode');\n\n//TODO: do it later\nconst convertToJsonString = function(node, options) {\n  options = buildOptions(options, x2j.defaultOptions, x2j.props);\n\n  options.indentBy = options.indentBy || '';\n  return _cToJsonStr(node, options, 0);\n};\n\nconst _cToJsonStr = function(node, options, level) {\n  let jObj = '{';\n\n  //traver through all the children\n  const keys = Object.keys(node.child);\n\n  for (let index = 0; index < keys.length; index++) {\n    var tagname = keys[index];\n    if (node.child[tagname] && node.child[tagname].length > 1) {\n      jObj += '\"' + tagname + '\" : [ ';\n      for (var tag in node.child[tagname]) {\n        jObj += _cToJsonStr(node.child[tagname][tag], options) + ' , ';\n      }\n      jObj = jObj.substr(0, jObj.length - 1) + ' ] '; //remove extra comma in last\n    } else {\n      jObj += '\"' + tagname + '\" : ' + _cToJsonStr(node.child[tagname][0], options) + ' ,';\n    }\n  }\n  util.merge(jObj, node.attrsMap);\n  //add attrsMap as new children\n  if (util.isEmptyObject(jObj)) {\n    return util.isExist(node.val) ? node.val : '';\n  } else {\n    if (util.isExist(node.val)) {\n      if (!(typeof node.val === 'string' && (node.val === '' || node.val === options.cdataPositionChar))) {\n        jObj += '\"' + options.textNodeName + '\" : ' + stringval(node.val);\n      }\n    }\n  }\n  //add value\n  if (jObj[jObj.length - 1] === ',') {\n    jObj = jObj.substr(0, jObj.length - 2);\n  }\n  return jObj + '}';\n};\n\nfunction stringval(v) {\n  if (v === true || v === false || !isNaN(v)) {\n    return v;\n  } else {\n    return '\"' + v + '\"';\n  }\n}\n\nfunction indentate(options, level) {\n  return options.indentBy.repeat(level);\n}\n\nexports.convertToJsonString = convertToJsonString;\n","'use strict';\n//parse Empty Node as self closing node\nconst buildOptions = require('./util').buildOptions;\n\nconst defaultOptions = {\n  attributeNamePrefix: '@_',\n  attrNodeName: false,\n  textNodeName: '#text',\n  ignoreAttributes: true,\n  cdataTagName: false,\n  cdataPositionChar: '\\\\c',\n  format: false,\n  indentBy: '  ',\n  supressEmptyNode: false,\n  tagValueProcessor: function(a) {\n    return a;\n  },\n  attrValueProcessor: function(a) {\n    return a;\n  },\n};\n\nconst props = [\n  'attributeNamePrefix',\n  'attrNodeName',\n  'textNodeName',\n  'ignoreAttributes',\n  'cdataTagName',\n  'cdataPositionChar',\n  'format',\n  'indentBy',\n  'supressEmptyNode',\n  'tagValueProcessor',\n  'attrValueProcessor',\n];\n\nfunction Parser(options) {\n  this.options = buildOptions(options, defaultOptions, props);\n  if (this.options.ignoreAttributes || this.options.attrNodeName) {\n    this.isAttribute = function(/*a*/) {\n      return false;\n    };\n  } else {\n    this.attrPrefixLen = this.options.attributeNamePrefix.length;\n    this.isAttribute = isAttribute;\n  }\n  if (this.options.cdataTagName) {\n    this.isCDATA = isCDATA;\n  } else {\n    this.isCDATA = function(/*a*/) {\n      return false;\n    };\n  }\n  this.replaceCDATAstr = replaceCDATAstr;\n  this.replaceCDATAarr = replaceCDATAarr;\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  if (this.options.supressEmptyNode) {\n    this.buildTextNode = buildEmptyTextNode;\n    this.buildObjNode = buildEmptyObjNode;\n  } else {\n    this.buildTextNode = buildTextValNode;\n    this.buildObjNode = buildObjectNode;\n  }\n\n  this.buildTextValNode = buildTextValNode;\n  this.buildObjectNode = buildObjectNode;\n}\n\nParser.prototype.parse = function(jObj) {\n  return this.j2x(jObj, 0).val;\n};\n\nParser.prototype.j2x = function(jObj, level) {\n  let attrStr = '';\n  let val = '';\n  const keys = Object.keys(jObj);\n  const len = keys.length;\n  for (let i = 0; i < len; i++) {\n    const key = keys[i];\n    if (typeof jObj[key] === 'undefined') {\n      // supress undefined node\n    } else if (jObj[key] === null) {\n      val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;\n    } else if (jObj[key] instanceof Date) {\n      val += this.buildTextNode(jObj[key], key, '', level);\n    } else if (typeof jObj[key] !== 'object') {\n      //premitive type\n      const attr = this.isAttribute(key);\n      if (attr) {\n        attrStr += ' ' + attr + '=\"' + this.options.attrValueProcessor('' + jObj[key]) + '\"';\n      } else if (this.isCDATA(key)) {\n        if (jObj[this.options.textNodeName]) {\n          val += this.replaceCDATAstr(jObj[this.options.textNodeName], jObj[key]);\n        } else {\n          val += this.replaceCDATAstr('', jObj[key]);\n        }\n      } else {\n        //tag value\n        if (key === this.options.textNodeName) {\n          if (jObj[this.options.cdataTagName]) {\n            //value will added while processing cdata\n          } else {\n            val += this.options.tagValueProcessor('' + jObj[key]);\n          }\n        } else {\n          val += this.buildTextNode(jObj[key], key, '', level);\n        }\n      }\n    } else if (Array.isArray(jObj[key])) {\n      //repeated nodes\n      if (this.isCDATA(key)) {\n        val += this.indentate(level);\n        if (jObj[this.options.textNodeName]) {\n          val += this.replaceCDATAarr(jObj[this.options.textNodeName], jObj[key]);\n        } else {\n          val += this.replaceCDATAarr('', jObj[key]);\n        }\n      } else {\n        //nested nodes\n        const arrLen = jObj[key].length;\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            val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;\n          } else if (typeof item === 'object') {\n            const result = this.j2x(item, level + 1);\n            val += this.buildObjNode(result.val, key, result.attrStr, level);\n          } else {\n            val += this.buildTextNode(item, key, '', level);\n          }\n        }\n      }\n    } else {\n      //nested node\n      if (this.options.attrNodeName && key === this.options.attrNodeName) {\n        const Ks = Object.keys(jObj[key]);\n        const L = Ks.length;\n        for (let j = 0; j < L; j++) {\n          attrStr += ' ' + Ks[j] + '=\"' + this.options.attrValueProcessor('' + jObj[key][Ks[j]]) + '\"';\n        }\n      } else {\n        const result = this.j2x(jObj[key], level + 1);\n        val += this.buildObjNode(result.val, key, result.attrStr, level);\n      }\n    }\n  }\n  return {attrStr: attrStr, val: val};\n};\n\nfunction replaceCDATAstr(str, cdata) {\n  str = this.options.tagValueProcessor('' + str);\n  if (this.options.cdataPositionChar === '' || str === '') {\n    return str + '<![CDATA[' + cdata + ']]' + this.tagEndChar;\n  } else {\n    return str.replace(this.options.cdataPositionChar, '<![CDATA[' + cdata + ']]' + this.tagEndChar);\n  }\n}\n\nfunction replaceCDATAarr(str, cdata) {\n  str = this.options.tagValueProcessor('' + str);\n  if (this.options.cdataPositionChar === '' || str === '') {\n    return str + '<![CDATA[' + cdata.join(']]><![CDATA[') + ']]' + this.tagEndChar;\n  } else {\n    for (let v in cdata) {\n      str = str.replace(this.options.cdataPositionChar, '<![CDATA[' + cdata[v] + ']]>');\n    }\n    return str + this.newLine;\n  }\n}\n\nfunction buildObjectNode(val, key, attrStr, level) {\n  if (attrStr && !val.includes('<')) {\n    return (\n      this.indentate(level) +\n      '<' +\n      key +\n      attrStr +\n      '>' +\n      val +\n      //+ this.newLine\n      // + this.indentate(level)\n      '</' +\n      key +\n      this.tagEndChar\n    );\n  } else {\n    return (\n      this.indentate(level) +\n      '<' +\n      key +\n      attrStr +\n      this.tagEndChar +\n      val +\n      //+ this.newLine\n      this.indentate(level) +\n      '</' +\n      key +\n      this.tagEndChar\n    );\n  }\n}\n\nfunction buildEmptyObjNode(val, key, attrStr, level) {\n  if (val !== '') {\n    return this.buildObjectNode(val, key, attrStr, level);\n  } else {\n    return this.indentate(level) + '<' + key + attrStr + '/' + this.tagEndChar;\n    //+ this.newLine\n  }\n}\n\nfunction buildTextValNode(val, key, attrStr, level) {\n  return (\n    this.indentate(level) +\n    '<' +\n    key +\n    attrStr +\n    '>' +\n    this.options.tagValueProcessor(val) +\n    '</' +\n    key +\n    this.tagEndChar\n  );\n}\n\nfunction buildEmptyTextNode(val, key, attrStr, level) {\n  if (val !== '') {\n    return this.buildTextValNode(val, key, attrStr, level);\n  } else {\n    return this.indentate(level) + '<' + key + attrStr + '/' + this.tagEndChar;\n  }\n}\n\nfunction indentate(level) {\n  return this.options.indentBy.repeat(level);\n}\n\nfunction isAttribute(name /*, options*/) {\n  if (name.startsWith(this.options.attributeNamePrefix)) {\n    return name.substr(this.attrPrefixLen);\n  } else {\n    return false;\n  }\n}\n\nfunction isCDATA(name) {\n  return name === this.options.cdataTagName;\n}\n\n//formatting\n//indentation\n//\\n after each closing or self closing tag\n\nmodule.exports = Parser;\n","'use strict';\n\nconst nodeToJson = require('./node2json');\nconst xmlToNodeobj = require('./xmlstr2xmlnode');\nconst x2xmlnode = require('./xmlstr2xmlnode');\nconst buildOptions = require('./util').buildOptions;\nconst validator = require('./validator');\n\nexports.parse = function(xmlData, options, validationOption) {\n  if( validationOption){\n    if(validationOption === true) validationOption = {}\n    \n    const result = validator.validate(xmlData, validationOption);\n    if (result !== true) {\n      throw Error( result.err.msg)\n    }\n  }\n  options = buildOptions(options, x2xmlnode.defaultOptions, x2xmlnode.props);\n  const traversableObj = xmlToNodeobj.getTraversalObj(xmlData, options)\n  //print(traversableObj, \"  \");\n  return nodeToJson.convertToJson(traversableObj, options);\n};\nexports.convertTonimn = require('../src/nimndata').convert2nimn;\nexports.getTraversalObj = xmlToNodeobj.getTraversalObj;\nexports.convertToJson = nodeToJson.convertToJson;\nexports.convertToJsonString = require('./node2json_str').convertToJsonString;\nexports.validate = validator.validate;\nexports.j2xParser = require('./json2xml');\nexports.parseToNimn = function(xmlData, schema, options) {\n  return exports.convertTonimn(exports.getTraversalObj(xmlData, options), schema, options);\n};\n\n\nfunction print(xmlNode, indentation){\n  if(xmlNode){\n    console.log(indentation + \"{\")\n    console.log(indentation + \"  \\\"tagName\\\": \\\"\" + xmlNode.tagname + \"\\\", \");\n    if(xmlNode.parent){\n      console.log(indentation + \"  \\\"parent\\\": \\\"\" + xmlNode.parent.tagname  + \"\\\", \");\n    }\n    console.log(indentation + \"  \\\"val\\\": \\\"\" + xmlNode.val  + \"\\\", \");\n    console.log(indentation + \"  \\\"attrs\\\": \" + JSON.stringify(xmlNode.attrsMap,null,4)  + \", \");\n\n    if(xmlNode.child){\n      console.log(indentation + \"\\\"child\\\": {\")\n      const indentation2 = indentation + indentation;\n      Object.keys(xmlNode.child).forEach( function(key) {\n        const node = xmlNode.child[key];\n\n        if(Array.isArray(node)){\n          console.log(indentation +  \"\\\"\"+key+\"\\\" :[\")\n          node.forEach( function(item,index) {\n            //console.log(indentation + \" \\\"\"+index+\"\\\" : [\")\n            print(item, indentation2);\n          })\n          console.log(indentation + \"],\")  \n        }else{\n          console.log(indentation + \" \\\"\"+key+\"\\\" : {\")\n          print(node, indentation2);\n          console.log(indentation + \"},\")  \n        }\n      });\n      console.log(indentation + \"},\")\n    }\n    console.log(indentation + \"},\")\n  }\n}","import { parse } from 'fast-xml-parser';\n\n/**\n * Returns a JSON with data about project information and tables from PZFX files.\n * @param {String} pzfx - File with the PZFX data.\n * @return {Object} [Object.information] Metadata of the experiment.\n * @return {Array} [Object.table] Table data from file.\n * @return {Array} [Object.hugeTable] Huge table data from file.\n */\n\nexport function pzfxParser(pzfx) {\n  pzfx = ensureText(pzfx);\n\n  if (typeof pzfx !== 'string') throw new TypeError('pzfx must be a string');\n\n  const parsed = parse(pzfx, {\n    textNodeName: '_data',\n    attributeNamePrefix: '',\n    parseAttributeValue: true,\n    attrNodeName: '_attr',\n    ignoreAttributes: false,\n  });\n\n  const table = parseTable(parsed.GraphPadPrismFile.Table);\n  const hugeTable = parseTable(parsed.GraphPadPrismFile.HugeTable);\n  const constant = parsed.GraphPadPrismFile.Info.Constant;\n  let information = {};\n  for (let i = 0; i < constant.length; i++) {\n    information[constant[i].Name.replace(/ /g, '')] = constant[i].Value;\n  }\n  information.notes = checkLabel(parsed.GraphPadPrismFile.Info.Notes);\n\n  return {\n    parsed: parsed,\n    information: information,\n    table: table,\n    hugeTable: hugeTable,\n  };\n}\n\nfunction parseTable(table) {\n  let dataTable = [];\n  if (!table) return dataTable;\n  if (Array.isArray(table)) {\n    for (let i = 0; i < table.length; i++) {\n      let element = Object.assign(table[i]._attr, {\n        title: table[i].Title,\n      });\n      if (table[0].XColumn) {\n        element.x = {\n          label: checkLabel(table[i].XColumn.Title),\n          data: table[i].XColumn.Subcolumn.d,\n        };\n      }\n      let y = [];\n      if (Array.isArray(table[i].YColumn)) {\n        for (let j = 0; j < table[i].YColumn.length; j++) {\n          y.push({\n            label: checkLabel(table[i].YColumn[j].Title),\n            data: Array.isArray(table[i].YColumn[j].Subcolumn)\n              ? table[i].YColumn[j].Subcolumn.map((x) => x.d)\n              : table[i].YColumn[j].Subcolumn.d,\n          });\n        }\n        element.y = y;\n      } else {\n        y.push({\n          label: checkLabel(table[i].YColumn.Title),\n          data: Array.isArray(table[i].YColumn.Subcolumn)\n            ? table[i].YColumn.Subcolumn.map((x) => x.d)\n            : table[i].YColumn.Subcolumn.d,\n        });\n        element.y = y;\n      }\n      dataTable.push(element);\n    }\n  } else {\n    let element = Object.assign(table._attr, {\n      title: table.Title,\n    });\n    if (table.XColumn) {\n      element.x = {\n        label: checkLabel(table.XColumn.Title),\n        data: table.XColumn.Subcolumn.d,\n      };\n    }\n    let y = [];\n    if (Array.isArray(table.YColumn)) {\n      for (let j = 0; j < table.YColumn.length; j++) {\n        y.push({\n          label: checkLabel(table.YColumn[j].Title),\n          data: Array.isArray(table.YColumn[j].Subcolumn)\n            ? table.YColumn[j].Subcolumn.map((x) => x.d)\n            : table.YColumn[j].Subcolumn.d,\n        });\n      }\n    } else {\n      y.push({\n        label: checkLabel(table.YColumn.Title),\n        data: Array.isArray(table.YColumn.Subcolumn)\n          ? table.YColumn.Subcolumn.map((x) => x.d)\n          : table.YColumn.Subcolumn.d,\n      });\n    }\n\n    element.y = y;\n    dataTable.push(element);\n  }\n\n  return dataTable;\n}\n\nfunction checkLabel(input) {\n  let result;\n  if (typeof input === 'object') {\n    let entries = Object.entries(input)[0];\n    result = entries.filter((item) => item._data)[0]._data;\n  } else {\n    return input;\n  }\n  return result;\n}\n\n/*\n  https://github.com/cheminfo/mzData/blob/master/src/util/ensureText.js\n  */\nexport function ensureText(data, options = {}) {\n  const { encoding = 'utf8' } = options;\n  if (typeof Buffer !== 'undefined' && data instanceof Buffer) {\n    return data.toString(encoding);\n  }\n  if (typeof ArrayBuffer !== 'undefined' && data instanceof ArrayBuffer) {\n    return new TextDecoder(encoding).decode(data);\n  }\n  return data;\n}\n"],"names":["nameStartChar","nameChar","nameRegexp","regexName","RegExp","getAllMatches","string","regex","matches","match","exec","allmatches","len","length","index","push","isName","exports","v","obj","Object","keys","target","a","arrayMode","i","isExist","options","defaultOptions","props","newOptions","undefined","convertToJson","node","jObj","child","util","isEmptyObject","attrsMap","val","cdataPositionChar","textNodeName","merge","tagname","tag","result","parent","addChild","Array","isArray","buildOptions","regx","replace","Number","parseInt","window","parseFloat","attributeNamePrefix","attrNodeName","ignoreAttributes","ignoreNameSpace","allowBooleanAttributes","parseNodeValue","parseAttributeValue","trimValues","cdataTagName","tagValueProcessor","tagName","attrValueProcessor","attrName","stopNodes","processTagValue","trim","parseValue","parseTrueNumberOnly","resolveNameSpace","tags","split","prefix","charAt","shouldParse","parsed","isNaN","indexOf","String","attrsRegx","buildAttributesMap","attrStr","attrs","attrCollection","getTraversalObj","xmlData","xmlObj","xmlNode","currentNode","textData","ch","closeIndex","findClosingIndex","substring","colonIndex","substr","getValue","includes","startIndex","tagExp","childNode","closingIndexForOpeningTag","data","separatorIndex","trimRight","lastIndexOf","attrBoundary","str","errMsg","closingIndex","Error","tagFound","reachedRoot","readPI","err","readCommentAndCDATA","closingTag","validateTagName","msg","getErrorObject","getLineNumberForPosition","readAttributeStr","value","isValid","validateAttributeString","code","line","tagClosed","otg","pop","afterAmp","validateAmpersand","JSON","stringify","start","angleBracketsCount","doubleQuote","singleQuote","startChar","validAttrStrRegxp","attrNames","getPositionFromMatch","validateAttrName","hasOwnProperty","validateNumberAmpersand","re","count","message","lineNumber","lines","char","fromCharCode","chars","nilChar","missingChar","nilPremitive","missingPremitive","emptyChar","emptyValue","boundryChar","objStart","arrStart","arrayEnd","charsArr","_e","e_schema","hasValidData","hasData","itemSchema","arr_len","arr_i","r","processValue","key","isAppChar","require$$0","convert2nimn","x2j","convertToJsonString","indentBy","_cToJsonStr","level","stringval","format","supressEmptyNode","Parser","isAttribute","attrPrefixLen","isCDATA","replaceCDATAstr","replaceCDATAarr","indentate","tagEndChar","newLine","buildTextNode","buildEmptyTextNode","buildObjNode","buildEmptyObjNode","buildTextValNode","buildObjectNode","prototype","parse","j2x","Date","attr","arrLen","j","item","Ks","L","cdata","join","repeat","name","startsWith","x2xmlnode","xmlToNodeobj","validationOption","validator","validate","traversableObj","nodeToJson","require$$1","require$$2","require$$3","schema","convertTonimn","pzfxParser","pzfx","ensureText","TypeError","table","parseTable","GraphPadPrismFile","Table","hugeTable","HugeTable","constant","Info","Constant","information","Name","Value","notes","checkLabel","Notes","dataTable","element","assign","_attr","title","Title","XColumn","x","label","Subcolumn","d","y","YColumn","map","input","entries","filter","_data","encoding","Buffer","toString","ArrayBuffer","TextDecoder","decode"],"mappings":"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"}