diff --git a/CHANGELOG.md b/CHANGELOG.md index e32e1674..047d7ab3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ Note: If you find missing information about particular minor version, that version must have been changed without any functional change in this library. +**4.3.2 / 2023-10-02** +* fix `jObj.hasOwnProperty` when give input is null (By [Arda TANRIKULU](https://github.com/ardatan)) + **4.3.1 / 2023-09-24** * revert back "Fix typings for builder and parser to make return type generic" to avoid failure of existing projects. Need to decide a common approach. diff --git a/lib/fxbuilder.min.js b/lib/fxbuilder.min.js index 1ae7b09d..205d8f15 100644 --- a/lib/fxbuilder.min.js +++ b/lib/fxbuilder.min.js @@ -1,2 +1,2 @@ -var XMLBuilder;(()=>{var t={784:(t,e,i)=>{"use strict";var r=i(687),s={attributeNamePrefix:"@_",attributesGroupName:!1,textNodeName:"#text",ignoreAttributes:!0,cdataPropName:!1,format:!1,indentBy:" ",suppressEmptyNode:!1,suppressUnpairedNode:!0,suppressBooleanAttributes:!0,tagValueProcessor:function(t,e){return e},attributeValueProcessor:function(t,e){return e},preserveOrder:!1,commentPropName:!1,unpairedTags:[],entities:[{regex:new RegExp("&","g"),val:"&"},{regex:new RegExp(">","g"),val:">"},{regex:new RegExp("<","g"),val:"<"},{regex:new RegExp("'","g"),val:"'"},{regex:new RegExp('"',"g"),val:"""}],processEntities:!0,stopNodes:[],oneListGroup:!1};function n(t){this.options=Object.assign({},s,t),this.options.ignoreAttributes||this.options.attributesGroupName?this.isAttribute=function(){return!1}:(this.attrPrefixLen=this.options.attributeNamePrefix.length,this.isAttribute=h),this.processTextOrObjNode=o,this.options.format?(this.indentate=a,this.tagEndChar=">\n",this.newLine="\n"):(this.indentate=function(){return""},this.tagEndChar=">",this.newLine="")}function o(t,e,i){var r=this.j2x(t,i+1);return void 0!==t[this.options.textNodeName]&&1===Object.keys(t).length?this.buildTextValNode(t[this.options.textNodeName],e,r.attrStr,i):this.buildObjectNode(r.val,e,r.attrStr,i)}function a(t){return this.options.indentBy.repeat(t)}function h(t){return!(!t.startsWith(this.options.attributeNamePrefix)||t===this.options.textNodeName)&&t.substr(this.attrPrefixLen)}n.prototype.build=function(t){return this.options.preserveOrder?r(t,this.options):(Array.isArray(t)&&this.options.arrayNodeName&&this.options.arrayNodeName.length>1&&((e={})[this.options.arrayNodeName]=t,t=e),this.j2x(t,0).val);var e},n.prototype.j2x=function(t,e){var i="",r="";for(var s in t)if(t.hasOwnProperty(s))if(void 0===t[s])this.isAttribute(s)&&(r+="");else if(null===t[s])this.isAttribute(s)?r+="":"?"===s[0]?r+=this.indentate(e)+"<"+s+"?"+this.tagEndChar:r+=this.indentate(e)+"<"+s+"/"+this.tagEndChar;else if(t[s]instanceof Date)r+=this.buildTextValNode(t[s],s,"",e);else if("object"!=typeof t[s]){var n=this.isAttribute(s);if(n)i+=this.buildAttrPairStr(n,""+t[s]);else if(s===this.options.textNodeName){var o=this.options.tagValueProcessor(s,""+t[s]);r+=this.replaceEntitiesValue(o)}else r+=this.buildTextValNode(t[s],s,"",e)}else if(Array.isArray(t[s])){for(var a=t[s].length,h="",p=0;p"+t+s},n.prototype.closeTag=function(t){var e="";return-1!==this.options.unpairedTags.indexOf(t)?this.options.suppressUnpairedNode||(e="/"):e=this.options.suppressEmptyNode?"/":">"+this.newLine;if(!1!==this.options.commentPropName&&e===this.options.commentPropName)return this.indentate(r)+"\x3c!--"+t+"--\x3e"+this.newLine;if("?"===e[0])return this.indentate(r)+"<"+e+i+"?"+this.tagEndChar;var s=this.options.tagValueProcessor(e,t);return""===(s=this.replaceEntitiesValue(s))?this.indentate(r)+"<"+e+i+this.closeTag(e)+this.tagEndChar:this.indentate(r)+"<"+e+i+">"+s+"0&&this.options.processEntities)for(var e=0;e{function e(t,o,a,h){for(var p="",u=!1,d=0;d":p+=g+"/>":x&&0!==x.length||!o.suppressEmptyNode?x&&x.endsWith(">")?p+=g+">"+x+h+"":(p+=g+">",x&&""!==h&&(x.includes("/>")||x.includes(""):p+=g+"/>",u=!0}else{var v=r(l[":@"],o),b="?xml"===f?"":h,m=l[f][0][o.textNodeName];p+=b+"<"+f+(m=0!==m.length?" "+m:"")+v+"?>",u=!0}else p+=h+"\x3c!--"+l[f][0][o.textNodeName]+"--\x3e",u=!0;else u&&(p+=h),p+="",u=!1;else{var y=l[f];s(c,o)||(y=n(y=o.tagValueProcessor(f,y),o)),u&&(p+=h),p+=y,u=!1}}}return p}function i(t){for(var e=Object.keys(t),i=0;i0&&e.processEntities)for(var i=0;i0&&(r="\n"),e(t,i,"",r)}}},e={},i=function i(r){var s=e[r];if(void 0!==s)return s.exports;var n=e[r]={exports:{}};return t[r](n,n.exports,i),n.exports}(784);XMLBuilder=i})(); +var XMLBuilder;(()=>{var t={784:(t,e,i)=>{"use strict";var r=i(687),s={attributeNamePrefix:"@_",attributesGroupName:!1,textNodeName:"#text",ignoreAttributes:!0,cdataPropName:!1,format:!1,indentBy:" ",suppressEmptyNode:!1,suppressUnpairedNode:!0,suppressBooleanAttributes:!0,tagValueProcessor:function(t,e){return e},attributeValueProcessor:function(t,e){return e},preserveOrder:!1,commentPropName:!1,unpairedTags:[],entities:[{regex:new RegExp("&","g"),val:"&"},{regex:new RegExp(">","g"),val:">"},{regex:new RegExp("<","g"),val:"<"},{regex:new RegExp("'","g"),val:"'"},{regex:new RegExp('"',"g"),val:"""}],processEntities:!0,stopNodes:[],oneListGroup:!1};function n(t){this.options=Object.assign({},s,t),this.options.ignoreAttributes||this.options.attributesGroupName?this.isAttribute=function(){return!1}:(this.attrPrefixLen=this.options.attributeNamePrefix.length,this.isAttribute=h),this.processTextOrObjNode=o,this.options.format?(this.indentate=a,this.tagEndChar=">\n",this.newLine="\n"):(this.indentate=function(){return""},this.tagEndChar=">",this.newLine="")}function o(t,e,i){var r=this.j2x(t,i+1);return void 0!==t[this.options.textNodeName]&&1===Object.keys(t).length?this.buildTextValNode(t[this.options.textNodeName],e,r.attrStr,i):this.buildObjectNode(r.val,e,r.attrStr,i)}function a(t){return this.options.indentBy.repeat(t)}function h(t){return!(!t.startsWith(this.options.attributeNamePrefix)||t===this.options.textNodeName)&&t.substr(this.attrPrefixLen)}n.prototype.build=function(t){return this.options.preserveOrder?r(t,this.options):(Array.isArray(t)&&this.options.arrayNodeName&&this.options.arrayNodeName.length>1&&((e={})[this.options.arrayNodeName]=t,t=e),this.j2x(t,0).val);var e},n.prototype.j2x=function(t,e){var i="",r="";for(var s in t)if(Object.prototype.hasOwnProperty.call(t,s))if(void 0===t[s])this.isAttribute(s)&&(r+="");else if(null===t[s])this.isAttribute(s)?r+="":"?"===s[0]?r+=this.indentate(e)+"<"+s+"?"+this.tagEndChar:r+=this.indentate(e)+"<"+s+"/"+this.tagEndChar;else if(t[s]instanceof Date)r+=this.buildTextValNode(t[s],s,"",e);else if("object"!=typeof t[s]){var n=this.isAttribute(s);if(n)i+=this.buildAttrPairStr(n,""+t[s]);else if(s===this.options.textNodeName){var o=this.options.tagValueProcessor(s,""+t[s]);r+=this.replaceEntitiesValue(o)}else r+=this.buildTextValNode(t[s],s,"",e)}else if(Array.isArray(t[s])){for(var a=t[s].length,h="",p=0;p"+t+s},n.prototype.closeTag=function(t){var e="";return-1!==this.options.unpairedTags.indexOf(t)?this.options.suppressUnpairedNode||(e="/"):e=this.options.suppressEmptyNode?"/":">"+this.newLine;if(!1!==this.options.commentPropName&&e===this.options.commentPropName)return this.indentate(r)+"\x3c!--"+t+"--\x3e"+this.newLine;if("?"===e[0])return this.indentate(r)+"<"+e+i+"?"+this.tagEndChar;var s=this.options.tagValueProcessor(e,t);return""===(s=this.replaceEntitiesValue(s))?this.indentate(r)+"<"+e+i+this.closeTag(e)+this.tagEndChar:this.indentate(r)+"<"+e+i+">"+s+"0&&this.options.processEntities)for(var e=0;e{function e(t,o,a,h){for(var p="",u=!1,d=0;d":p+=g+"/>":x&&0!==x.length||!o.suppressEmptyNode?x&&x.endsWith(">")?p+=g+">"+x+h+"":(p+=g+">",x&&""!==h&&(x.includes("/>")||x.includes(""):p+=g+"/>",u=!0}else{var v=r(l[":@"],o),b="?xml"===f?"":h,m=l[f][0][o.textNodeName];p+=b+"<"+f+(m=0!==m.length?" "+m:"")+v+"?>",u=!0}else p+=h+"\x3c!--"+l[f][0][o.textNodeName]+"--\x3e",u=!0;else u&&(p+=h),p+="",u=!1;else{var y=l[f];s(c,o)||(y=n(y=o.tagValueProcessor(f,y),o)),u&&(p+=h),p+=y,u=!1}}}return p}function i(t){for(var e=Object.keys(t),i=0;i0&&e.processEntities)for(var i=0;i0&&(r="\n"),e(t,i,"",r)}}},e={},i=function i(r){var s=e[r];if(void 0!==s)return s.exports;var n=e[r]={exports:{}};return t[r](n,n.exports,i),n.exports}(784);XMLBuilder=i})(); //# sourceMappingURL=fxbuilder.min.js.map \ No newline at end of file diff --git a/lib/fxbuilder.min.js.map b/lib/fxbuilder.min.js.map index 68e46dd9..4371df88 100644 --- a/lib/fxbuilder.min.js.map +++ b/lib/fxbuilder.min.js.map @@ -1 +1 @@ -{"version":3,"file":"./lib/fxbuilder.min.js","mappings":"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","sources":["webpack://XMLBuilder/./src/xmlbuilder/json2xml.js","webpack://XMLBuilder/./src/xmlbuilder/orderedJs2Xml.js","webpack://XMLBuilder/webpack/bootstrap","webpack://XMLBuilder/webpack/startup"],"sourcesContent":["'use strict';\n//parse Empty Node as self closing node\nconst buildFromOrderedJs = require('./orderedJs2Xml');\n\nconst defaultOptions = {\n attributeNamePrefix: '@_',\n attributesGroupName: false,\n textNodeName: '#text',\n ignoreAttributes: true,\n cdataPropName: false,\n format: false,\n indentBy: ' ',\n suppressEmptyNode: false,\n suppressUnpairedNode: true,\n suppressBooleanAttributes: true,\n tagValueProcessor: function(key, a) {\n return a;\n },\n attributeValueProcessor: function(attrName, a) {\n return a;\n },\n preserveOrder: false,\n commentPropName: false,\n unpairedTags: [],\n entities: [\n { regex: new RegExp(\"&\", \"g\"), val: \"&\" },//it must be on top\n { regex: new RegExp(\">\", \"g\"), val: \">\" },\n { regex: new RegExp(\"<\", \"g\"), val: \"<\" },\n { regex: new RegExp(\"\\'\", \"g\"), val: \"'\" },\n { regex: new RegExp(\"\\\"\", \"g\"), val: \""\" }\n ],\n processEntities: true,\n stopNodes: [],\n // transformTagName: false,\n // transformAttributeName: false,\n oneListGroup: false\n};\n\nfunction Builder(options) {\n this.options = Object.assign({}, defaultOptions, options);\n if (this.options.ignoreAttributes || this.options.attributesGroupName) {\n this.isAttribute = function(/*a*/) {\n return false;\n };\n } else {\n this.attrPrefixLen = this.options.attributeNamePrefix.length;\n this.isAttribute = isAttribute;\n }\n\n this.processTextOrObjNode = processTextOrObjNode\n\n if (this.options.format) {\n this.indentate = indentate;\n this.tagEndChar = '>\\n';\n this.newLine = '\\n';\n } else {\n this.indentate = function() {\n return '';\n };\n this.tagEndChar = '>';\n this.newLine = '';\n }\n}\n\nBuilder.prototype.build = function(jObj) {\n if(this.options.preserveOrder){\n return buildFromOrderedJs(jObj, this.options);\n }else {\n if(Array.isArray(jObj) && this.options.arrayNodeName && this.options.arrayNodeName.length > 1){\n jObj = {\n [this.options.arrayNodeName] : jObj\n }\n }\n return this.j2x(jObj, 0).val;\n }\n};\n\nBuilder.prototype.j2x = function(jObj, level) {\n let attrStr = '';\n let val = '';\n for (let key in jObj) {\n if(!jObj.hasOwnProperty(key)) continue;\n if (typeof jObj[key] === 'undefined') {\n // supress undefined node only if it is not an attribute\n if (this.isAttribute(key)) {\n val += '';\n }\n } else if (jObj[key] === null) {\n // null attribute should be ignored by the attribute list, but should not cause the tag closing\n if (this.isAttribute(key)) {\n val += '';\n } else if (key[0] === '?') {\n val += this.indentate(level) + '<' + key + '?' + this.tagEndChar;\n } else {\n val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;\n }\n // val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;\n } else if (jObj[key] instanceof Date) {\n val += this.buildTextValNode(jObj[key], key, '', level);\n } else if (typeof jObj[key] !== 'object') {\n //premitive type\n const attr = this.isAttribute(key);\n if (attr) {\n attrStr += this.buildAttrPairStr(attr, '' + jObj[key]);\n }else {\n //tag value\n if (key === this.options.textNodeName) {\n let newval = this.options.tagValueProcessor(key, '' + jObj[key]);\n val += this.replaceEntitiesValue(newval);\n } else {\n val += this.buildTextValNode(jObj[key], key, '', level);\n }\n }\n } else if (Array.isArray(jObj[key])) {\n //repeated nodes\n const arrLen = jObj[key].length;\n let listTagVal = \"\";\n for (let j = 0; j < arrLen; j++) {\n const item = jObj[key][j];\n if (typeof item === 'undefined') {\n // supress undefined node\n } else if (item === null) {\n if(key[0] === \"?\") val += this.indentate(level) + '<' + key + '?' + this.tagEndChar;\n else val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;\n // val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;\n } else if (typeof item === 'object') {\n if(this.options.oneListGroup ){\n listTagVal += this.j2x(item, level + 1).val;\n }else{\n listTagVal += this.processTextOrObjNode(item, key, level)\n }\n } else {\n listTagVal += this.buildTextValNode(item, key, '', level);\n }\n }\n if(this.options.oneListGroup){\n listTagVal = this.buildObjectNode(listTagVal, key, '', level);\n }\n val += listTagVal;\n } else {\n //nested node\n if (this.options.attributesGroupName && key === this.options.attributesGroupName) {\n const Ks = Object.keys(jObj[key]);\n const L = Ks.length;\n for (let j = 0; j < L; j++) {\n attrStr += this.buildAttrPairStr(Ks[j], '' + jObj[key][Ks[j]]);\n }\n } else {\n val += this.processTextOrObjNode(jObj[key], key, level)\n }\n }\n }\n return {attrStr: attrStr, val: val};\n};\n\nBuilder.prototype.buildAttrPairStr = function(attrName, val){\n val = this.options.attributeValueProcessor(attrName, '' + val);\n val = this.replaceEntitiesValue(val);\n if (this.options.suppressBooleanAttributes && val === \"true\") {\n return ' ' + attrName;\n } else return ' ' + attrName + '=\"' + val + '\"';\n}\n\nfunction processTextOrObjNode (object, key, level) {\n const result = this.j2x(object, level + 1);\n if (object[this.options.textNodeName] !== undefined && Object.keys(object).length === 1) {\n return this.buildTextValNode(object[this.options.textNodeName], key, result.attrStr, level);\n } else {\n return this.buildObjectNode(result.val, key, result.attrStr, level);\n }\n}\n\nBuilder.prototype.buildObjectNode = function(val, key, attrStr, level) {\n if(val === \"\"){\n if(key[0] === \"?\") return this.indentate(level) + '<' + key + attrStr+ '?' + this.tagEndChar;\n else {\n return this.indentate(level) + '<' + key + attrStr + this.closeTag(key) + this.tagEndChar;\n }\n }else{\n\n let tagEndExp = '' + val + tagEndExp );\n } else if (this.options.commentPropName !== false && key === this.options.commentPropName && piClosingChar.length === 0) {\n return this.indentate(level) + `` + this.newLine;\n }else {\n return (\n this.indentate(level) + '<' + key + attrStr + piClosingChar + this.tagEndChar +\n val +\n this.indentate(level) + tagEndExp );\n }\n }\n}\n\nBuilder.prototype.closeTag = function(key){\n let closeTag = \"\";\n if(this.options.unpairedTags.indexOf(key) !== -1){ //unpaired\n if(!this.options.suppressUnpairedNode) closeTag = \"/\"\n }else if(this.options.suppressEmptyNode){ //empty\n closeTag = \"/\";\n }else{\n closeTag = `>` + this.newLine;\n }else if (this.options.commentPropName !== false && key === this.options.commentPropName) {\n return this.indentate(level) + `` + this.newLine;\n }else if(key[0] === \"?\") {//PI tag\n return this.indentate(level) + '<' + key + attrStr+ '?' + this.tagEndChar; \n }else{\n let textValue = this.options.tagValueProcessor(key, val);\n textValue = this.replaceEntitiesValue(textValue);\n \n if( textValue === ''){\n return this.indentate(level) + '<' + key + attrStr + this.closeTag(key) + this.tagEndChar;\n }else{\n return this.indentate(level) + '<' + key + attrStr + '>' +\n textValue +\n ' 0 && this.options.processEntities){\n for (let i=0; i 0) {\n indentation = EOL;\n }\n return arrToStr(jArray, options, \"\", indentation);\n}\n\nfunction arrToStr(arr, options, jPath, indentation) {\n let xmlStr = \"\";\n let isPreviousElementTag = false;\n\n for (let i = 0; i < arr.length; i++) {\n const tagObj = arr[i];\n const tagName = propName(tagObj);\n if(tagName === undefined) continue;\n\n let newJPath = \"\";\n if (jPath.length === 0) newJPath = tagName\n else newJPath = `${jPath}.${tagName}`;\n\n if (tagName === options.textNodeName) {\n let tagText = tagObj[tagName];\n if (!isStopNode(newJPath, options)) {\n tagText = options.tagValueProcessor(tagName, tagText);\n tagText = replaceEntitiesValue(tagText, options);\n }\n if (isPreviousElementTag) {\n xmlStr += indentation;\n }\n xmlStr += tagText;\n isPreviousElementTag = false;\n continue;\n } else if (tagName === options.cdataPropName) {\n if (isPreviousElementTag) {\n xmlStr += indentation;\n }\n xmlStr += ``;\n isPreviousElementTag = false;\n continue;\n } else if (tagName === options.commentPropName) {\n xmlStr += indentation + ``;\n isPreviousElementTag = true;\n continue;\n } else if (tagName[0] === \"?\") {\n const attStr = attr_to_str(tagObj[\":@\"], options);\n const tempInd = tagName === \"?xml\" ? \"\" : indentation;\n let piTextNodeName = tagObj[tagName][0][options.textNodeName];\n piTextNodeName = piTextNodeName.length !== 0 ? \" \" + piTextNodeName : \"\"; //remove extra spacing\n xmlStr += tempInd + `<${tagName}${piTextNodeName}${attStr}?>`;\n isPreviousElementTag = true;\n continue;\n }\n let newIdentation = indentation;\n if (newIdentation !== \"\") {\n newIdentation += options.indentBy;\n }\n const attStr = attr_to_str(tagObj[\":@\"], options);\n const tagStart = indentation + `<${tagName}${attStr}`;\n const tagValue = arrToStr(tagObj[tagName], options, newJPath, newIdentation);\n if (options.unpairedTags.indexOf(tagName) !== -1) {\n if (options.suppressUnpairedNode) xmlStr += tagStart + \">\";\n else xmlStr += tagStart + \"/>\";\n } else if ((!tagValue || tagValue.length === 0) && options.suppressEmptyNode) {\n xmlStr += tagStart + \"/>\";\n } else if (tagValue && tagValue.endsWith(\">\")) {\n xmlStr += tagStart + `>${tagValue}${indentation}`;\n } else {\n xmlStr += tagStart + \">\";\n if (tagValue && indentation !== \"\" && (tagValue.includes(\"/>\") || tagValue.includes(\"`;\n }\n isPreviousElementTag = true;\n }\n\n return xmlStr;\n}\n\nfunction propName(obj) {\n const keys = Object.keys(obj);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if(!obj.hasOwnProperty(key)) continue;\n if (key !== \":@\") return key;\n }\n}\n\nfunction attr_to_str(attrMap, options) {\n let attrStr = \"\";\n if (attrMap && !options.ignoreAttributes) {\n for (let attr in attrMap) {\n if(!attrMap.hasOwnProperty(attr)) continue;\n let attrVal = options.attributeValueProcessor(attr, attrMap[attr]);\n attrVal = replaceEntitiesValue(attrVal, options);\n if (attrVal === true && options.suppressBooleanAttributes) {\n attrStr += ` ${attr.substr(options.attributeNamePrefix.length)}`;\n } else {\n attrStr += ` ${attr.substr(options.attributeNamePrefix.length)}=\"${attrVal}\"`;\n }\n }\n }\n return attrStr;\n}\n\nfunction isStopNode(jPath, options) {\n jPath = jPath.substr(0, jPath.length - options.textNodeName.length - 1);\n let tagName = jPath.substr(jPath.lastIndexOf(\".\") + 1);\n for (let index in options.stopNodes) {\n if (options.stopNodes[index] === jPath || options.stopNodes[index] === \"*.\" + tagName) return true;\n }\n return false;\n}\n\nfunction replaceEntitiesValue(textValue, options) {\n if (textValue && textValue.length > 0 && options.processEntities) {\n for (let i = 0; i < options.entities.length; i++) {\n const entity = options.entities[i];\n textValue = textValue.replace(entity.regex, entity.val);\n }\n }\n return textValue;\n}\nmodule.exports = toXml;\n","// 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__(784);\n"],"names":["buildFromOrderedJs","require","defaultOptions","attributeNamePrefix","attributesGroupName","textNodeName","ignoreAttributes","cdataPropName","format","indentBy","suppressEmptyNode","suppressUnpairedNode","suppressBooleanAttributes","tagValueProcessor","key","a","attributeValueProcessor","attrName","preserveOrder","commentPropName","unpairedTags","entities","regex","RegExp","val","processEntities","stopNodes","oneListGroup","Builder","options","this","Object","assign","isAttribute","attrPrefixLen","length","processTextOrObjNode","indentate","tagEndChar","newLine","object","level","result","j2x","undefined","keys","buildTextValNode","attrStr","buildObjectNode","repeat","name","startsWith","substr","prototype","build","jObj","Array","isArray","arrayNodeName","hasOwnProperty","Date","attr","buildAttrPairStr","newval","replaceEntitiesValue","arrLen","listTagVal","j","item","Ks","L","closeTag","tagEndExp","piClosingChar","indexOf","textValue","i","entity","replace","module","exports","arrToStr","arr","jPath","indentation","xmlStr","isPreviousElementTag","tagObj","tagName","propName","newJPath","newIdentation","tagStart","attr_to_str","tagValue","endsWith","includes","attStr","tempInd","piTextNodeName","tagText","isStopNode","obj","attrMap","attrVal","lastIndexOf","index","jArray","__webpack_module_cache__","__webpack_exports__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"./lib/fxbuilder.min.js","mappings":"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","sources":["webpack://XMLBuilder/./src/xmlbuilder/json2xml.js","webpack://XMLBuilder/./src/xmlbuilder/orderedJs2Xml.js","webpack://XMLBuilder/webpack/bootstrap","webpack://XMLBuilder/webpack/startup"],"sourcesContent":["'use strict';\n//parse Empty Node as self closing node\nconst buildFromOrderedJs = require('./orderedJs2Xml');\n\nconst defaultOptions = {\n attributeNamePrefix: '@_',\n attributesGroupName: false,\n textNodeName: '#text',\n ignoreAttributes: true,\n cdataPropName: false,\n format: false,\n indentBy: ' ',\n suppressEmptyNode: false,\n suppressUnpairedNode: true,\n suppressBooleanAttributes: true,\n tagValueProcessor: function(key, a) {\n return a;\n },\n attributeValueProcessor: function(attrName, a) {\n return a;\n },\n preserveOrder: false,\n commentPropName: false,\n unpairedTags: [],\n entities: [\n { regex: new RegExp(\"&\", \"g\"), val: \"&\" },//it must be on top\n { regex: new RegExp(\">\", \"g\"), val: \">\" },\n { regex: new RegExp(\"<\", \"g\"), val: \"<\" },\n { regex: new RegExp(\"\\'\", \"g\"), val: \"'\" },\n { regex: new RegExp(\"\\\"\", \"g\"), val: \""\" }\n ],\n processEntities: true,\n stopNodes: [],\n // transformTagName: false,\n // transformAttributeName: false,\n oneListGroup: false\n};\n\nfunction Builder(options) {\n this.options = Object.assign({}, defaultOptions, options);\n if (this.options.ignoreAttributes || this.options.attributesGroupName) {\n this.isAttribute = function(/*a*/) {\n return false;\n };\n } else {\n this.attrPrefixLen = this.options.attributeNamePrefix.length;\n this.isAttribute = isAttribute;\n }\n\n this.processTextOrObjNode = processTextOrObjNode\n\n if (this.options.format) {\n this.indentate = indentate;\n this.tagEndChar = '>\\n';\n this.newLine = '\\n';\n } else {\n this.indentate = function() {\n return '';\n };\n this.tagEndChar = '>';\n this.newLine = '';\n }\n}\n\nBuilder.prototype.build = function(jObj) {\n if(this.options.preserveOrder){\n return buildFromOrderedJs(jObj, this.options);\n }else {\n if(Array.isArray(jObj) && this.options.arrayNodeName && this.options.arrayNodeName.length > 1){\n jObj = {\n [this.options.arrayNodeName] : jObj\n }\n }\n return this.j2x(jObj, 0).val;\n }\n};\n\nBuilder.prototype.j2x = function(jObj, level) {\n let attrStr = '';\n let val = '';\n for (let key in jObj) {\n if(!Object.prototype.hasOwnProperty.call(jObj, key)) continue;\n if (typeof jObj[key] === 'undefined') {\n // supress undefined node only if it is not an attribute\n if (this.isAttribute(key)) {\n val += '';\n }\n } else if (jObj[key] === null) {\n // null attribute should be ignored by the attribute list, but should not cause the tag closing\n if (this.isAttribute(key)) {\n val += '';\n } else if (key[0] === '?') {\n val += this.indentate(level) + '<' + key + '?' + this.tagEndChar;\n } else {\n val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;\n }\n // val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;\n } else if (jObj[key] instanceof Date) {\n val += this.buildTextValNode(jObj[key], key, '', level);\n } else if (typeof jObj[key] !== 'object') {\n //premitive type\n const attr = this.isAttribute(key);\n if (attr) {\n attrStr += this.buildAttrPairStr(attr, '' + jObj[key]);\n }else {\n //tag value\n if (key === this.options.textNodeName) {\n let newval = this.options.tagValueProcessor(key, '' + jObj[key]);\n val += this.replaceEntitiesValue(newval);\n } else {\n val += this.buildTextValNode(jObj[key], key, '', level);\n }\n }\n } else if (Array.isArray(jObj[key])) {\n //repeated nodes\n const arrLen = jObj[key].length;\n let listTagVal = \"\";\n for (let j = 0; j < arrLen; j++) {\n const item = jObj[key][j];\n if (typeof item === 'undefined') {\n // supress undefined node\n } else if (item === null) {\n if(key[0] === \"?\") val += this.indentate(level) + '<' + key + '?' + this.tagEndChar;\n else val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;\n // val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;\n } else if (typeof item === 'object') {\n if(this.options.oneListGroup ){\n listTagVal += this.j2x(item, level + 1).val;\n }else{\n listTagVal += this.processTextOrObjNode(item, key, level)\n }\n } else {\n listTagVal += this.buildTextValNode(item, key, '', level);\n }\n }\n if(this.options.oneListGroup){\n listTagVal = this.buildObjectNode(listTagVal, key, '', level);\n }\n val += listTagVal;\n } else {\n //nested node\n if (this.options.attributesGroupName && key === this.options.attributesGroupName) {\n const Ks = Object.keys(jObj[key]);\n const L = Ks.length;\n for (let j = 0; j < L; j++) {\n attrStr += this.buildAttrPairStr(Ks[j], '' + jObj[key][Ks[j]]);\n }\n } else {\n val += this.processTextOrObjNode(jObj[key], key, level)\n }\n }\n }\n return {attrStr: attrStr, val: val};\n};\n\nBuilder.prototype.buildAttrPairStr = function(attrName, val){\n val = this.options.attributeValueProcessor(attrName, '' + val);\n val = this.replaceEntitiesValue(val);\n if (this.options.suppressBooleanAttributes && val === \"true\") {\n return ' ' + attrName;\n } else return ' ' + attrName + '=\"' + val + '\"';\n}\n\nfunction processTextOrObjNode (object, key, level) {\n const result = this.j2x(object, level + 1);\n if (object[this.options.textNodeName] !== undefined && Object.keys(object).length === 1) {\n return this.buildTextValNode(object[this.options.textNodeName], key, result.attrStr, level);\n } else {\n return this.buildObjectNode(result.val, key, result.attrStr, level);\n }\n}\n\nBuilder.prototype.buildObjectNode = function(val, key, attrStr, level) {\n if(val === \"\"){\n if(key[0] === \"?\") return this.indentate(level) + '<' + key + attrStr+ '?' + this.tagEndChar;\n else {\n return this.indentate(level) + '<' + key + attrStr + this.closeTag(key) + this.tagEndChar;\n }\n }else{\n\n let tagEndExp = '' + val + tagEndExp );\n } else if (this.options.commentPropName !== false && key === this.options.commentPropName && piClosingChar.length === 0) {\n return this.indentate(level) + `` + this.newLine;\n }else {\n return (\n this.indentate(level) + '<' + key + attrStr + piClosingChar + this.tagEndChar +\n val +\n this.indentate(level) + tagEndExp );\n }\n }\n}\n\nBuilder.prototype.closeTag = function(key){\n let closeTag = \"\";\n if(this.options.unpairedTags.indexOf(key) !== -1){ //unpaired\n if(!this.options.suppressUnpairedNode) closeTag = \"/\"\n }else if(this.options.suppressEmptyNode){ //empty\n closeTag = \"/\";\n }else{\n closeTag = `>` + this.newLine;\n }else if (this.options.commentPropName !== false && key === this.options.commentPropName) {\n return this.indentate(level) + `` + this.newLine;\n }else if(key[0] === \"?\") {//PI tag\n return this.indentate(level) + '<' + key + attrStr+ '?' + this.tagEndChar; \n }else{\n let textValue = this.options.tagValueProcessor(key, val);\n textValue = this.replaceEntitiesValue(textValue);\n \n if( textValue === ''){\n return this.indentate(level) + '<' + key + attrStr + this.closeTag(key) + this.tagEndChar;\n }else{\n return this.indentate(level) + '<' + key + attrStr + '>' +\n textValue +\n ' 0 && this.options.processEntities){\n for (let i=0; i 0) {\n indentation = EOL;\n }\n return arrToStr(jArray, options, \"\", indentation);\n}\n\nfunction arrToStr(arr, options, jPath, indentation) {\n let xmlStr = \"\";\n let isPreviousElementTag = false;\n\n for (let i = 0; i < arr.length; i++) {\n const tagObj = arr[i];\n const tagName = propName(tagObj);\n if(tagName === undefined) continue;\n\n let newJPath = \"\";\n if (jPath.length === 0) newJPath = tagName\n else newJPath = `${jPath}.${tagName}`;\n\n if (tagName === options.textNodeName) {\n let tagText = tagObj[tagName];\n if (!isStopNode(newJPath, options)) {\n tagText = options.tagValueProcessor(tagName, tagText);\n tagText = replaceEntitiesValue(tagText, options);\n }\n if (isPreviousElementTag) {\n xmlStr += indentation;\n }\n xmlStr += tagText;\n isPreviousElementTag = false;\n continue;\n } else if (tagName === options.cdataPropName) {\n if (isPreviousElementTag) {\n xmlStr += indentation;\n }\n xmlStr += ``;\n isPreviousElementTag = false;\n continue;\n } else if (tagName === options.commentPropName) {\n xmlStr += indentation + ``;\n isPreviousElementTag = true;\n continue;\n } else if (tagName[0] === \"?\") {\n const attStr = attr_to_str(tagObj[\":@\"], options);\n const tempInd = tagName === \"?xml\" ? \"\" : indentation;\n let piTextNodeName = tagObj[tagName][0][options.textNodeName];\n piTextNodeName = piTextNodeName.length !== 0 ? \" \" + piTextNodeName : \"\"; //remove extra spacing\n xmlStr += tempInd + `<${tagName}${piTextNodeName}${attStr}?>`;\n isPreviousElementTag = true;\n continue;\n }\n let newIdentation = indentation;\n if (newIdentation !== \"\") {\n newIdentation += options.indentBy;\n }\n const attStr = attr_to_str(tagObj[\":@\"], options);\n const tagStart = indentation + `<${tagName}${attStr}`;\n const tagValue = arrToStr(tagObj[tagName], options, newJPath, newIdentation);\n if (options.unpairedTags.indexOf(tagName) !== -1) {\n if (options.suppressUnpairedNode) xmlStr += tagStart + \">\";\n else xmlStr += tagStart + \"/>\";\n } else if ((!tagValue || tagValue.length === 0) && options.suppressEmptyNode) {\n xmlStr += tagStart + \"/>\";\n } else if (tagValue && tagValue.endsWith(\">\")) {\n xmlStr += tagStart + `>${tagValue}${indentation}`;\n } else {\n xmlStr += tagStart + \">\";\n if (tagValue && indentation !== \"\" && (tagValue.includes(\"/>\") || tagValue.includes(\"`;\n }\n isPreviousElementTag = true;\n }\n\n return xmlStr;\n}\n\nfunction propName(obj) {\n const keys = Object.keys(obj);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if(!obj.hasOwnProperty(key)) continue;\n if (key !== \":@\") return key;\n }\n}\n\nfunction attr_to_str(attrMap, options) {\n let attrStr = \"\";\n if (attrMap && !options.ignoreAttributes) {\n for (let attr in attrMap) {\n if(!attrMap.hasOwnProperty(attr)) continue;\n let attrVal = options.attributeValueProcessor(attr, attrMap[attr]);\n attrVal = replaceEntitiesValue(attrVal, options);\n if (attrVal === true && options.suppressBooleanAttributes) {\n attrStr += ` ${attr.substr(options.attributeNamePrefix.length)}`;\n } else {\n attrStr += ` ${attr.substr(options.attributeNamePrefix.length)}=\"${attrVal}\"`;\n }\n }\n }\n return attrStr;\n}\n\nfunction isStopNode(jPath, options) {\n jPath = jPath.substr(0, jPath.length - options.textNodeName.length - 1);\n let tagName = jPath.substr(jPath.lastIndexOf(\".\") + 1);\n for (let index in options.stopNodes) {\n if (options.stopNodes[index] === jPath || options.stopNodes[index] === \"*.\" + tagName) return true;\n }\n return false;\n}\n\nfunction replaceEntitiesValue(textValue, options) {\n if (textValue && textValue.length > 0 && options.processEntities) {\n for (let i = 0; i < options.entities.length; i++) {\n const entity = options.entities[i];\n textValue = textValue.replace(entity.regex, entity.val);\n }\n }\n return textValue;\n}\nmodule.exports = toXml;\n","// 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__(784);\n"],"names":["buildFromOrderedJs","require","defaultOptions","attributeNamePrefix","attributesGroupName","textNodeName","ignoreAttributes","cdataPropName","format","indentBy","suppressEmptyNode","suppressUnpairedNode","suppressBooleanAttributes","tagValueProcessor","key","a","attributeValueProcessor","attrName","preserveOrder","commentPropName","unpairedTags","entities","regex","RegExp","val","processEntities","stopNodes","oneListGroup","Builder","options","this","Object","assign","isAttribute","attrPrefixLen","length","processTextOrObjNode","indentate","tagEndChar","newLine","object","level","result","j2x","undefined","keys","buildTextValNode","attrStr","buildObjectNode","repeat","name","startsWith","substr","prototype","build","jObj","Array","isArray","arrayNodeName","hasOwnProperty","call","Date","attr","buildAttrPairStr","newval","replaceEntitiesValue","arrLen","listTagVal","j","item","Ks","L","closeTag","tagEndExp","piClosingChar","indexOf","textValue","i","entity","replace","module","exports","arrToStr","arr","jPath","indentation","xmlStr","isPreviousElementTag","tagObj","tagName","propName","newJPath","newIdentation","tagStart","attr_to_str","tagValue","endsWith","includes","attStr","tempInd","piTextNodeName","tagText","isStopNode","obj","attrMap","attrVal","lastIndexOf","index","jArray","__webpack_module_cache__","__webpack_exports__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""} \ No newline at end of file diff --git a/lib/fxp.min.js b/lib/fxp.min.js index af4b8f11..dd53a918 100644 --- a/lib/fxp.min.js +++ b/lib/fxp.min.js @@ -1,2 +1,2 @@ -var fxp;(()=>{var t={807:t=>{const e=/^[-+]?0x[a-fA-F0-9]+$/,r=/^([\-\+])?(0*)(\.[0-9]+([eE]\-?[0-9]+)?|[0-9]+(\.[0-9]+([eE]\-?[0-9]+)?)?)$/;!Number.parseInt&&window.parseInt&&(Number.parseInt=window.parseInt),!Number.parseFloat&&window.parseFloat&&(Number.parseFloat=window.parseFloat);const i={hex:!0,leadingZeros:!0,decimalPoint:".",eNotation:!0};t.exports=function(t,n={}){if(n=Object.assign({},i,n),!t||"string"!=typeof t)return t;let s=t.trim();if(void 0!==n.skipLike&&n.skipLike.test(s))return t;if(n.hex&&e.test(s))return Number.parseInt(s,16);{const e=r.exec(s);if(e){const r=e[1],i=e[2];let o=(a=e[3])&&-1!==a.indexOf(".")?("."===(a=a.replace(/0+$/,""))?a="0":"."===a[0]?a="0"+a:"."===a[a.length-1]&&(a=a.substr(0,a.length-1)),a):a;const u=e[4]||e[6];if(!n.leadingZeros&&i.length>0&&r&&"."!==s[2])return t;if(!n.leadingZeros&&i.length>0&&!r&&"."!==s[1])return t;{const e=Number(s),a=""+e;return-1!==a.search(/[eE]/)||u?n.eNotation?e:t:-1!==s.indexOf(".")?"0"===a&&""===o||a===o||r&&a==="-"+o?e:t:i?o===a||r+o===a?e:t:s===a||s===r+a?e:t}}return t}var a}},316:(t,e,r)=>{"use strict";var i=r(239),n=r(870),s=r(784);t.exports={XMLParser:n,XMLValidator:i,XMLBuilder:s}},839:(t,e)=>{"use strict";var r="[: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][: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\\-.\\d\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*",i=new RegExp("^"+r+"$");e.isExist=function(t){return void 0!==t},e.isEmptyObject=function(t){return 0===Object.keys(t).length},e.merge=function(t,e,r){if(e)for(var i=Object.keys(e),n=i.length,s=0;s{"use strict";var i=r(839),n={allowBooleanAttributes:!1,unpairedTags:[]};function s(t){return" "===t||"\t"===t||"\n"===t||"\r"===t}function a(t,e){for(var r=e;e5&&"xml"===i)return d("InvalidXml","XML declaration allowed only at the start of the document.",g(t,e));if("?"==t[e]&&">"==t[e+1]){e++;break}}return e}function o(t,e){if(t.length>e+5&&"-"===t[e+1]&&"-"===t[e+2]){for(e+=3;e"===t[e+2]){e+=2;break}}else if(t.length>e+8&&"D"===t[e+1]&&"O"===t[e+2]&&"C"===t[e+3]&&"T"===t[e+4]&&"Y"===t[e+5]&&"P"===t[e+6]&&"E"===t[e+7]){var r=1;for(e+=8;e"===t[e]&&0==--r)break}else if(t.length>e+9&&"["===t[e+1]&&"C"===t[e+2]&&"D"===t[e+3]&&"A"===t[e+4]&&"T"===t[e+5]&&"A"===t[e+6]&&"["===t[e+7])for(e+=8;e"===t[e+2]){e+=2;break}return e}function u(t,e){for(var r="",i="",n=!1;e"===t[e]&&""===i){n=!0;break}r+=t[e]}return""===i&&{value:r,index:e,tagClosed:n}}e.validate=function(t,e){e=Object.assign({},n,e);var r,l=[],f=!1,c=!1;"\ufeff"===t[0]&&(t=t.substr(1));for(var v=0;v"!==t[v]&&" "!==t[v]&&"\t"!==t[v]&&"\n"!==t[v]&&"\r"!==t[v];v++)N+=t[v];if("/"===(N=N.trim())[N.length-1]&&(N=N.substring(0,N.length-1),v--),r=N,!i.isName(r))return d("InvalidTag",0===N.trim().length?"Invalid space after '<'.":"Tag '"+N+"' is an invalid name.",g(t,v));var b=u(t,v);if(!1===b)return d("InvalidAttr","Attributes for '"+N+"' have open quote.",g(t,v));var E=b.value;if(v=b.index,"/"===E[E.length-1]){var T=v-E.length,y=h(E=E.substring(0,E.length-1),e);if(!0!==y)return d(y.err.code,y.err.msg,g(t,T+y.err.line));f=!0}else if(m){if(!b.tagClosed)return d("InvalidTag","Closing tag '"+N+"' doesn't have proper closing.",g(t,v));if(E.trim().length>0)return d("InvalidTag","Closing tag '"+N+"' can't have attributes or invalid starting.",g(t,x));var O=l.pop();if(N!==O.tagName){var A=g(t,O.tagStartPos);return d("InvalidTag","Expected closing tag '"+O.tagName+"' (opened in line "+A.line+", col "+A.col+") instead of closing tag '"+N+"'.",g(t,x))}0==l.length&&(c=!0)}else{var w=h(E,e);if(!0!==w)return d(w.err.code,w.err.msg,g(t,v-E.length+w.err.line));if(!0===c)return d("InvalidXml","Multiple possible root nodes found.",g(t,v));-1!==e.unpairedTags.indexOf(N)||l.push({tagName:N,tagStartPos:x}),f=!0}for(v++;v0)||d("InvalidXml","Invalid '"+JSON.stringify(l.map((function(t){return t.tagName})),null,4).replace(/\r?\n/g,"")+"' found.",{line:1,col:1}):d("InvalidXml","Start tag expected.",1)};var l=new RegExp("(\\s*)([^\\s=]+)(\\s*=)?(\\s*(['\"])(([\\s\\S])*?)\\5)?","g");function h(t,e){for(var r=i.getAllMatches(t,l),n={},s=0;s{"use strict";var i=r(687),n={attributeNamePrefix:"@_",attributesGroupName:!1,textNodeName:"#text",ignoreAttributes:!0,cdataPropName:!1,format:!1,indentBy:" ",suppressEmptyNode:!1,suppressUnpairedNode:!0,suppressBooleanAttributes:!0,tagValueProcessor:function(t,e){return e},attributeValueProcessor:function(t,e){return e},preserveOrder:!1,commentPropName:!1,unpairedTags:[],entities:[{regex:new RegExp("&","g"),val:"&"},{regex:new RegExp(">","g"),val:">"},{regex:new RegExp("<","g"),val:"<"},{regex:new RegExp("'","g"),val:"'"},{regex:new RegExp('"',"g"),val:"""}],processEntities:!0,stopNodes:[],oneListGroup:!1};function s(t){this.options=Object.assign({},n,t),this.options.ignoreAttributes||this.options.attributesGroupName?this.isAttribute=function(){return!1}:(this.attrPrefixLen=this.options.attributeNamePrefix.length,this.isAttribute=u),this.processTextOrObjNode=a,this.options.format?(this.indentate=o,this.tagEndChar=">\n",this.newLine="\n"):(this.indentate=function(){return""},this.tagEndChar=">",this.newLine="")}function a(t,e,r){var i=this.j2x(t,r+1);return void 0!==t[this.options.textNodeName]&&1===Object.keys(t).length?this.buildTextValNode(t[this.options.textNodeName],e,i.attrStr,r):this.buildObjectNode(i.val,e,i.attrStr,r)}function o(t){return this.options.indentBy.repeat(t)}function u(t){return!(!t.startsWith(this.options.attributeNamePrefix)||t===this.options.textNodeName)&&t.substr(this.attrPrefixLen)}s.prototype.build=function(t){return this.options.preserveOrder?i(t,this.options):(Array.isArray(t)&&this.options.arrayNodeName&&this.options.arrayNodeName.length>1&&((e={})[this.options.arrayNodeName]=t,t=e),this.j2x(t,0).val);var e},s.prototype.j2x=function(t,e){var r="",i="";for(var n in t)if(t.hasOwnProperty(n))if(void 0===t[n])this.isAttribute(n)&&(i+="");else if(null===t[n])this.isAttribute(n)?i+="":"?"===n[0]?i+=this.indentate(e)+"<"+n+"?"+this.tagEndChar:i+=this.indentate(e)+"<"+n+"/"+this.tagEndChar;else if(t[n]instanceof Date)i+=this.buildTextValNode(t[n],n,"",e);else if("object"!=typeof t[n]){var s=this.isAttribute(n);if(s)r+=this.buildAttrPairStr(s,""+t[n]);else if(n===this.options.textNodeName){var a=this.options.tagValueProcessor(n,""+t[n]);i+=this.replaceEntitiesValue(a)}else i+=this.buildTextValNode(t[n],n,"",e)}else if(Array.isArray(t[n])){for(var o=t[n].length,u="",l=0;l"+t+n},s.prototype.closeTag=function(t){var e="";return-1!==this.options.unpairedTags.indexOf(t)?this.options.suppressUnpairedNode||(e="/"):e=this.options.suppressEmptyNode?"/":">"+this.newLine;if(!1!==this.options.commentPropName&&e===this.options.commentPropName)return this.indentate(i)+"\x3c!--"+t+"--\x3e"+this.newLine;if("?"===e[0])return this.indentate(i)+"<"+e+r+"?"+this.tagEndChar;var n=this.options.tagValueProcessor(e,t);return""===(n=this.replaceEntitiesValue(n))?this.indentate(i)+"<"+e+r+this.closeTag(e)+this.tagEndChar:this.indentate(i)+"<"+e+r+">"+n+"0&&this.options.processEntities)for(var e=0;e{function e(t,a,o,u){for(var l="",h=!1,p=0;p":l+=v+"/>":x&&0!==x.length||!a.suppressEmptyNode?x&&x.endsWith(">")?l+=v+">"+x+u+"":(l+=v+">",x&&""!==u&&(x.includes("/>")||x.includes(""):l+=v+"/>",h=!0}else{var m=i(d[":@"],a),N="?xml"===f?"":u,b=d[f][0][a.textNodeName];l+=N+"<"+f+(b=0!==b.length?" "+b:"")+m+"?>",h=!0}else l+=u+"\x3c!--"+d[f][0][a.textNodeName]+"--\x3e",h=!0;else h&&(l+=u),l+="",h=!1;else{var E=d[f];n(g,a)||(E=s(E=a.tagValueProcessor(f,E),a)),h&&(l+=u),l+=E,h=!1}}}return l}function r(t){for(var e=Object.keys(t),r=0;r0&&e.processEntities)for(var r=0;r0&&(i="\n"),e(t,r,"",i)}},106:(t,e,r)=>{var i=r(839);function n(t,e){for(var r="";e"===t[e]){if(d?"-"===t[e-1]&&"-"===t[e-2]&&(d=!1,i--):i--,0===i)break}else"["===t[e]?p=!0:t[e];else{if(p&&a(t,e)){var f=n(t,(e+=7)+1);entityName=f[0],val=f[1],e=f[2],-1===val.indexOf("&")&&(r[h(entityName)]={regx:RegExp("&"+entityName+";","g"),val})}else if(p&&o(t,e))e+=8;else if(p&&u(t,e))e+=8;else if(p&&l(t,e))e+=9;else{if(!s)throw new Error("Invalid DOCTYPE");d=!0}i++}if(0!==i)throw new Error("Unclosed DOCTYPE");return{entities:r,i:e}}},348:(t,e)=>{var r={preserveOrder:!1,attributeNamePrefix:"@_",attributesGroupName:!1,textNodeName:"#text",ignoreAttributes:!0,removeNSPrefix:!1,allowBooleanAttributes:!1,parseTagValue:!0,parseAttributeValue:!1,trimValues:!0,cdataPropName:!1,numberParseOptions:{hex:!0,leadingZeros:!0,eNotation:!0},tagValueProcessor:function(t,e){return e},attributeValueProcessor:function(t,e){return e},stopNodes:[],alwaysCreateTextNode:!1,isArray:function(){return!1},commentPropName:!1,unpairedTags:[],processEntities:!0,htmlEntities:!1,ignoreDeclaration:!1,ignorePiTags:!1,transformTagName:!1,transformAttributeName:!1,updateTag:function(t,e,r){return t}};e.buildOptions=function(t){return Object.assign({},r,t)},e.defaultOptions=r},498:(t,e,r)=>{"use strict";var i=r(839),n=r(876),s=r(106),a=r(807);function o(t){for(var e=Object.keys(t),r=0;r0)){a||(t=this.replaceEntitiesValue(t));var o=this.options.tagValueProcessor(e,t,r,n,s);return null==o?t:typeof o!=typeof t||o!==t?o:this.options.trimValues||t.trim()===t?b(t,this.options.parseTagValue,this.options.numberParseOptions):t}}function l(t){if(this.options.removeNSPrefix){var e=t.split(":"),r="/"===t.charAt(0)?"/":"";if("xmlns"===e[0])return"";2===e.length&&(t=r+e[1])}return t}"<((!\\[CDATA\\[([\\s\\S]*?)(]]>))|((NAME:)?(NAME))([^>]*)>|((\\/)(NAME)\\s*>))([^<]*)".replace(/NAME/g,i.nameRegexp);var h=new RegExp("([^\\s=]+)\\s*(=\\s*(['\"])([\\s\\S]*?)\\3)?","gm");function p(t,e,r){if(!this.options.ignoreAttributes&&"string"==typeof t){for(var n=i.getAllMatches(t,h),s=n.length,a={},o=0;o",o,"Closing Tag is not closed."),l=t.substring(o+2,u).trim();if(this.options.removeNSPrefix){var h=l.indexOf(":");-1!==h&&(l=l.substr(h+1))}this.options.transformTagName&&(l=this.options.transformTagName(l)),r&&(i=this.saveTextToParentTag(i,r,a));var p=a.substring(a.lastIndexOf(".")+1);if(l&&-1!==this.options.unpairedTags.indexOf(l))throw new Error("Unpaired tag can not be used as closing tag: ");var d=0;p&&-1!==this.options.unpairedTags.indexOf(p)?(d=a.lastIndexOf(".",a.lastIndexOf(".")-1),this.tagsNodeStack.pop()):d=a.lastIndexOf("."),a=a.substring(0,d),r=this.tagsNodeStack.pop(),i="",o=u}else if("?"===t[o+1]){var f=m(t,o,!1,"?>");if(!f)throw new Error("Pi Tag is not closed.");if(i=this.saveTextToParentTag(i,r,a),this.options.ignoreDeclaration&&"?xml"===f.tagName||this.options.ignorePiTags);else{var g=new n(f.tagName);g.add(this.options.textNodeName,""),f.tagName!==f.tagExp&&f.attrExpPresent&&(g[":@"]=this.buildAttributesMap(f.tagExp,a,f.tagName)),this.addChild(r,g,a)}o=f.closeIndex+1}else if("!--"===t.substr(o+1,3)){var c=x(t,"--\x3e",o+4,"Comment is not closed.");if(this.options.commentPropName){var v,N=t.substring(o+4,c-2);i=this.saveTextToParentTag(i,r,a),r.add(this.options.commentPropName,[(v={},v[this.options.textNodeName]=N,v)])}o=c}else if("!D"===t.substr(o+1,2)){var b=s(t,o);this.docTypeEntities=b.entities,o=b.i}else if("!["===t.substr(o+1,2)){var E=x(t,"]]>",o,"CDATA is not closed.")-2,T=t.substring(o+9,E);if(i=this.saveTextToParentTag(i,r,a),this.options.cdataPropName){var y;r.add(this.options.cdataPropName,[(y={},y[this.options.textNodeName]=T,y)])}else{var O=this.parseTextData(T,r.tagname,a,!0,!1,!0);null==O&&(O=""),r.add(this.options.textNodeName,O)}o=E+2}else{var A=m(t,o,this.options.removeNSPrefix),w=A.tagName,P=A.rawTagName,C=A.tagExp,I=A.attrExpPresent,F=A.closeIndex;this.options.transformTagName&&(w=this.options.transformTagName(w)),r&&i&&"!xml"!==r.tagname&&(i=this.saveTextToParentTag(i,r,a,!1));var D=r;if(D&&-1!==this.options.unpairedTags.indexOf(D.tagname)&&(r=this.tagsNodeStack.pop(),a=a.substring(0,a.lastIndexOf("."))),w!==e.tagname&&(a+=a?"."+w:w),this.isItStopNode(this.options.stopNodes,a,w)){var S="";if(C.length>0&&C.lastIndexOf("/")===C.length-1)o=A.closeIndex;else if(-1!==this.options.unpairedTags.indexOf(w))o=A.closeIndex;else{var k=this.readStopNodeData(t,P,F+1);if(!k)throw new Error("Unexpected end of "+P);o=k.i,S=k.tagContent}var V=new n(w);w!==C&&I&&(V[":@"]=this.buildAttributesMap(C,a,w)),S&&(S=this.parseTextData(S,w,a,!0,I,!0,!0)),a=a.substr(0,a.lastIndexOf(".")),V.add(this.options.textNodeName,S),this.addChild(r,V,a)}else{if(C.length>0&&C.lastIndexOf("/")===C.length-1){"/"===w[w.length-1]?(w=w.substr(0,w.length-1),a=a.substr(0,a.length-1),C=w):C=C.substr(0,C.length-1),this.options.transformTagName&&(w=this.options.transformTagName(w));var j=new n(w);w!==C&&I&&(j[":@"]=this.buildAttributesMap(C,a,w)),this.addChild(r,j,a),a=a.substr(0,a.lastIndexOf("."))}else{var _=new n(w);this.tagsNodeStack.push(r),w!==C&&I&&(_[":@"]=this.buildAttributesMap(C,a,w)),this.addChild(r,_,a),r=_}i="",o=F}}else i+=t[o];return e.child};function f(t,e,r){var i=this.options.updateTag(e.tagname,r,e[":@"]);!1===i||("string"==typeof i?(e.tagname=i,t.addChild(e)):t.addChild(e))}var g=function(t){if(this.options.processEntities){for(var e in this.docTypeEntities){var r=this.docTypeEntities[e];t=t.replace(r.regx,r.val)}for(var i in this.lastEntities){var n=this.lastEntities[i];t=t.replace(n.regex,n.val)}if(this.options.htmlEntities)for(var s in this.htmlEntities){var a=this.htmlEntities[s];t=t.replace(a.regex,a.val)}t=t.replace(this.ampEntity.regex,this.ampEntity.val)}return t};function c(t,e,r,i){return t&&(void 0===i&&(i=0===Object.keys(e.child).length),void 0!==(t=this.parseTextData(t,e.tagname,r,!1,!!e[":@"]&&0!==Object.keys(e[":@"]).length,i))&&""!==t&&e.add(this.options.textNodeName,t),t=""),t}function v(t,e,r){var i="*."+r;for(var n in t){var s=t[n];if(i===s||e===s)return!0}return!1}function x(t,e,r,i){var n=t.indexOf(e,r);if(-1===n)throw new Error(i);return n+e.length-1}function m(t,e,r,i){void 0===i&&(i=">");var n=function(t,e,r){var i;void 0===r&&(r=">");for(var n="",s=e;s",r,e+" is not closed");if(t.substring(r+2,s).trim()===e&&0==--n)return{tagContent:t.substring(i,r),i:s};r=s}else if("?"===t[r+1])r=x(t,"?>",r+1,"StopNode is not closed.");else if("!--"===t.substr(r+1,3))r=x(t,"--\x3e",r+3,"StopNode is not closed.");else if("!["===t.substr(r+1,2))r=x(t,"]]>",r,"StopNode is not closed.")-2;else{var a=m(t,r,">");a&&((a&&a.tagName)===e&&"/"!==a.tagExp[a.tagExp.length-1]&&n++,r=a.closeIndex)}}function b(t,e,r){if(e&&"string"==typeof t){var n=t.trim();return"true"===n||"false"!==n&&a(t,r)}return i.isExist(t)?t:""}t.exports=function(t){this.options=t,this.currentNode=null,this.tagsNodeStack=[],this.docTypeEntities={},this.lastEntities={apos:{regex:/&(apos|#39|#x27);/g,val:"'"},gt:{regex:/&(gt|#62|#x3E);/g,val:">"},lt:{regex:/&(lt|#60|#x3C);/g,val:"<"},quot:{regex:/&(quot|#34|#x22);/g,val:'"'}},this.ampEntity={regex:/&(amp|#38|#x26);/g,val:"&"},this.htmlEntities={space:{regex:/&(nbsp|#160);/g,val:" "},cent:{regex:/&(cent|#162);/g,val:"¢"},pound:{regex:/&(pound|#163);/g,val:"£"},yen:{regex:/&(yen|#165);/g,val:"¥"},euro:{regex:/&(euro|#8364);/g,val:"€"},copyright:{regex:/&(copy|#169);/g,val:"©"},reg:{regex:/&(reg|#174);/g,val:"®"},inr:{regex:/&(inr|#8377);/g,val:"₹"}},this.addExternalEntities=o,this.parseXml=d,this.parseTextData=u,this.resolveNameSpace=l,this.buildAttributesMap=p,this.isItStopNode=v,this.replaceEntitiesValue=g,this.readStopNodeData=N,this.saveTextToParentTag=c,this.addChild=f}},870:(t,e,r)=>{var i=r(348).buildOptions,n=r(498),s=r(400).prettify,a=r(239),o=function(){function t(t){this.externalEntities={},this.options=i(t)}var e=t.prototype;return e.parse=function(t,e){if("string"==typeof t);else{if(!t.toString)throw new Error("XML data is accepted in String or Bytes[] form.");t=t.toString()}if(e){!0===e&&(e={});var r=a.validate(t,e);if(!0!==r)throw Error(r.err.msg+":"+r.err.line+":"+r.err.col)}var i=new n(this.options);i.addExternalEntities(this.externalEntities);var o=i.parseXml(t);return this.options.preserveOrder||void 0===o?o:s(o,this.options)},e.addEntity=function(t,e){if(-1!==e.indexOf("&"))throw new Error("Entity value can't have '&'");if(-1!==t.indexOf("&")||-1!==t.indexOf(";"))throw new Error("An entity must be set without '&' and ';'. Eg. use '#xD' for ' '");if("&"===e)throw new Error("An entity with value '&' is not permitted");this.externalEntities[t]=e},t}();t.exports=o},400:(t,e)=>{"use strict";function r(t,e,a){for(var o,u={},l=0;l0&&(u[e.textNodeName]=o):void 0!==o&&(u[e.textNodeName]=o),u}function i(t){for(var e=Object.keys(t),r=0;r{"use strict";var e=function(){function t(t){this.tagname=t,this.child=[],this[":@"]={}}var e=t.prototype;return e.add=function(t,e){var r;"__proto__"===t&&(t="#__proto__"),this.child.push(((r={})[t]=e,r))},e.addChild=function(t){var e,r;"__proto__"===t.tagname&&(t.tagname="#__proto__"),t[":@"]&&Object.keys(t[":@"]).length>0?this.child.push(((e={})[t.tagname]=t.child,e[":@"]=t[":@"],e)):this.child.push(((r={})[t.tagname]=t.child,r))},t}();t.exports=e}},e={},r=function r(i){var n=e[i];if(void 0!==n)return n.exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}(316);fxp=r})(); +var fxp;(()=>{var t={807:t=>{const e=/^[-+]?0x[a-fA-F0-9]+$/,r=/^([\-\+])?(0*)(\.[0-9]+([eE]\-?[0-9]+)?|[0-9]+(\.[0-9]+([eE]\-?[0-9]+)?)?)$/;!Number.parseInt&&window.parseInt&&(Number.parseInt=window.parseInt),!Number.parseFloat&&window.parseFloat&&(Number.parseFloat=window.parseFloat);const i={hex:!0,leadingZeros:!0,decimalPoint:".",eNotation:!0};t.exports=function(t,n={}){if(n=Object.assign({},i,n),!t||"string"!=typeof t)return t;let s=t.trim();if(void 0!==n.skipLike&&n.skipLike.test(s))return t;if(n.hex&&e.test(s))return Number.parseInt(s,16);{const e=r.exec(s);if(e){const r=e[1],i=e[2];let o=(a=e[3])&&-1!==a.indexOf(".")?("."===(a=a.replace(/0+$/,""))?a="0":"."===a[0]?a="0"+a:"."===a[a.length-1]&&(a=a.substr(0,a.length-1)),a):a;const u=e[4]||e[6];if(!n.leadingZeros&&i.length>0&&r&&"."!==s[2])return t;if(!n.leadingZeros&&i.length>0&&!r&&"."!==s[1])return t;{const e=Number(s),a=""+e;return-1!==a.search(/[eE]/)||u?n.eNotation?e:t:-1!==s.indexOf(".")?"0"===a&&""===o||a===o||r&&a==="-"+o?e:t:i?o===a||r+o===a?e:t:s===a||s===r+a?e:t}}return t}var a}},316:(t,e,r)=>{"use strict";var i=r(239),n=r(870),s=r(784);t.exports={XMLParser:n,XMLValidator:i,XMLBuilder:s}},839:(t,e)=>{"use strict";var r="[: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][: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\\-.\\d\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*",i=new RegExp("^"+r+"$");e.isExist=function(t){return void 0!==t},e.isEmptyObject=function(t){return 0===Object.keys(t).length},e.merge=function(t,e,r){if(e)for(var i=Object.keys(e),n=i.length,s=0;s{"use strict";var i=r(839),n={allowBooleanAttributes:!1,unpairedTags:[]};function s(t){return" "===t||"\t"===t||"\n"===t||"\r"===t}function a(t,e){for(var r=e;e5&&"xml"===i)return d("InvalidXml","XML declaration allowed only at the start of the document.",g(t,e));if("?"==t[e]&&">"==t[e+1]){e++;break}}return e}function o(t,e){if(t.length>e+5&&"-"===t[e+1]&&"-"===t[e+2]){for(e+=3;e"===t[e+2]){e+=2;break}}else if(t.length>e+8&&"D"===t[e+1]&&"O"===t[e+2]&&"C"===t[e+3]&&"T"===t[e+4]&&"Y"===t[e+5]&&"P"===t[e+6]&&"E"===t[e+7]){var r=1;for(e+=8;e"===t[e]&&0==--r)break}else if(t.length>e+9&&"["===t[e+1]&&"C"===t[e+2]&&"D"===t[e+3]&&"A"===t[e+4]&&"T"===t[e+5]&&"A"===t[e+6]&&"["===t[e+7])for(e+=8;e"===t[e+2]){e+=2;break}return e}function u(t,e){for(var r="",i="",n=!1;e"===t[e]&&""===i){n=!0;break}r+=t[e]}return""===i&&{value:r,index:e,tagClosed:n}}e.validate=function(t,e){e=Object.assign({},n,e);var r,l=[],f=!1,c=!1;"\ufeff"===t[0]&&(t=t.substr(1));for(var v=0;v"!==t[v]&&" "!==t[v]&&"\t"!==t[v]&&"\n"!==t[v]&&"\r"!==t[v];v++)N+=t[v];if("/"===(N=N.trim())[N.length-1]&&(N=N.substring(0,N.length-1),v--),r=N,!i.isName(r))return d("InvalidTag",0===N.trim().length?"Invalid space after '<'.":"Tag '"+N+"' is an invalid name.",g(t,v));var b=u(t,v);if(!1===b)return d("InvalidAttr","Attributes for '"+N+"' have open quote.",g(t,v));var E=b.value;if(v=b.index,"/"===E[E.length-1]){var T=v-E.length,y=h(E=E.substring(0,E.length-1),e);if(!0!==y)return d(y.err.code,y.err.msg,g(t,T+y.err.line));f=!0}else if(m){if(!b.tagClosed)return d("InvalidTag","Closing tag '"+N+"' doesn't have proper closing.",g(t,v));if(E.trim().length>0)return d("InvalidTag","Closing tag '"+N+"' can't have attributes or invalid starting.",g(t,x));var O=l.pop();if(N!==O.tagName){var A=g(t,O.tagStartPos);return d("InvalidTag","Expected closing tag '"+O.tagName+"' (opened in line "+A.line+", col "+A.col+") instead of closing tag '"+N+"'.",g(t,x))}0==l.length&&(c=!0)}else{var w=h(E,e);if(!0!==w)return d(w.err.code,w.err.msg,g(t,v-E.length+w.err.line));if(!0===c)return d("InvalidXml","Multiple possible root nodes found.",g(t,v));-1!==e.unpairedTags.indexOf(N)||l.push({tagName:N,tagStartPos:x}),f=!0}for(v++;v0)||d("InvalidXml","Invalid '"+JSON.stringify(l.map((function(t){return t.tagName})),null,4).replace(/\r?\n/g,"")+"' found.",{line:1,col:1}):d("InvalidXml","Start tag expected.",1)};var l=new RegExp("(\\s*)([^\\s=]+)(\\s*=)?(\\s*(['\"])(([\\s\\S])*?)\\5)?","g");function h(t,e){for(var r=i.getAllMatches(t,l),n={},s=0;s{"use strict";var i=r(687),n={attributeNamePrefix:"@_",attributesGroupName:!1,textNodeName:"#text",ignoreAttributes:!0,cdataPropName:!1,format:!1,indentBy:" ",suppressEmptyNode:!1,suppressUnpairedNode:!0,suppressBooleanAttributes:!0,tagValueProcessor:function(t,e){return e},attributeValueProcessor:function(t,e){return e},preserveOrder:!1,commentPropName:!1,unpairedTags:[],entities:[{regex:new RegExp("&","g"),val:"&"},{regex:new RegExp(">","g"),val:">"},{regex:new RegExp("<","g"),val:"<"},{regex:new RegExp("'","g"),val:"'"},{regex:new RegExp('"',"g"),val:"""}],processEntities:!0,stopNodes:[],oneListGroup:!1};function s(t){this.options=Object.assign({},n,t),this.options.ignoreAttributes||this.options.attributesGroupName?this.isAttribute=function(){return!1}:(this.attrPrefixLen=this.options.attributeNamePrefix.length,this.isAttribute=u),this.processTextOrObjNode=a,this.options.format?(this.indentate=o,this.tagEndChar=">\n",this.newLine="\n"):(this.indentate=function(){return""},this.tagEndChar=">",this.newLine="")}function a(t,e,r){var i=this.j2x(t,r+1);return void 0!==t[this.options.textNodeName]&&1===Object.keys(t).length?this.buildTextValNode(t[this.options.textNodeName],e,i.attrStr,r):this.buildObjectNode(i.val,e,i.attrStr,r)}function o(t){return this.options.indentBy.repeat(t)}function u(t){return!(!t.startsWith(this.options.attributeNamePrefix)||t===this.options.textNodeName)&&t.substr(this.attrPrefixLen)}s.prototype.build=function(t){return this.options.preserveOrder?i(t,this.options):(Array.isArray(t)&&this.options.arrayNodeName&&this.options.arrayNodeName.length>1&&((e={})[this.options.arrayNodeName]=t,t=e),this.j2x(t,0).val);var e},s.prototype.j2x=function(t,e){var r="",i="";for(var n in t)if(Object.prototype.hasOwnProperty.call(t,n))if(void 0===t[n])this.isAttribute(n)&&(i+="");else if(null===t[n])this.isAttribute(n)?i+="":"?"===n[0]?i+=this.indentate(e)+"<"+n+"?"+this.tagEndChar:i+=this.indentate(e)+"<"+n+"/"+this.tagEndChar;else if(t[n]instanceof Date)i+=this.buildTextValNode(t[n],n,"",e);else if("object"!=typeof t[n]){var s=this.isAttribute(n);if(s)r+=this.buildAttrPairStr(s,""+t[n]);else if(n===this.options.textNodeName){var a=this.options.tagValueProcessor(n,""+t[n]);i+=this.replaceEntitiesValue(a)}else i+=this.buildTextValNode(t[n],n,"",e)}else if(Array.isArray(t[n])){for(var o=t[n].length,u="",l=0;l"+t+n},s.prototype.closeTag=function(t){var e="";return-1!==this.options.unpairedTags.indexOf(t)?this.options.suppressUnpairedNode||(e="/"):e=this.options.suppressEmptyNode?"/":">"+this.newLine;if(!1!==this.options.commentPropName&&e===this.options.commentPropName)return this.indentate(i)+"\x3c!--"+t+"--\x3e"+this.newLine;if("?"===e[0])return this.indentate(i)+"<"+e+r+"?"+this.tagEndChar;var n=this.options.tagValueProcessor(e,t);return""===(n=this.replaceEntitiesValue(n))?this.indentate(i)+"<"+e+r+this.closeTag(e)+this.tagEndChar:this.indentate(i)+"<"+e+r+">"+n+"0&&this.options.processEntities)for(var e=0;e{function e(t,a,o,u){for(var l="",h=!1,p=0;p":l+=v+"/>":x&&0!==x.length||!a.suppressEmptyNode?x&&x.endsWith(">")?l+=v+">"+x+u+"":(l+=v+">",x&&""!==u&&(x.includes("/>")||x.includes(""):l+=v+"/>",h=!0}else{var m=i(d[":@"],a),N="?xml"===f?"":u,b=d[f][0][a.textNodeName];l+=N+"<"+f+(b=0!==b.length?" "+b:"")+m+"?>",h=!0}else l+=u+"\x3c!--"+d[f][0][a.textNodeName]+"--\x3e",h=!0;else h&&(l+=u),l+="",h=!1;else{var E=d[f];n(g,a)||(E=s(E=a.tagValueProcessor(f,E),a)),h&&(l+=u),l+=E,h=!1}}}return l}function r(t){for(var e=Object.keys(t),r=0;r0&&e.processEntities)for(var r=0;r0&&(i="\n"),e(t,r,"",i)}},106:(t,e,r)=>{var i=r(839);function n(t,e){for(var r="";e"===t[e]){if(d?"-"===t[e-1]&&"-"===t[e-2]&&(d=!1,i--):i--,0===i)break}else"["===t[e]?p=!0:t[e];else{if(p&&a(t,e)){var f=n(t,(e+=7)+1);entityName=f[0],val=f[1],e=f[2],-1===val.indexOf("&")&&(r[h(entityName)]={regx:RegExp("&"+entityName+";","g"),val})}else if(p&&o(t,e))e+=8;else if(p&&u(t,e))e+=8;else if(p&&l(t,e))e+=9;else{if(!s)throw new Error("Invalid DOCTYPE");d=!0}i++}if(0!==i)throw new Error("Unclosed DOCTYPE");return{entities:r,i:e}}},348:(t,e)=>{var r={preserveOrder:!1,attributeNamePrefix:"@_",attributesGroupName:!1,textNodeName:"#text",ignoreAttributes:!0,removeNSPrefix:!1,allowBooleanAttributes:!1,parseTagValue:!0,parseAttributeValue:!1,trimValues:!0,cdataPropName:!1,numberParseOptions:{hex:!0,leadingZeros:!0,eNotation:!0},tagValueProcessor:function(t,e){return e},attributeValueProcessor:function(t,e){return e},stopNodes:[],alwaysCreateTextNode:!1,isArray:function(){return!1},commentPropName:!1,unpairedTags:[],processEntities:!0,htmlEntities:!1,ignoreDeclaration:!1,ignorePiTags:!1,transformTagName:!1,transformAttributeName:!1,updateTag:function(t,e,r){return t}};e.buildOptions=function(t){return Object.assign({},r,t)},e.defaultOptions=r},498:(t,e,r)=>{"use strict";var i=r(839),n=r(876),s=r(106),a=r(807);function o(t){for(var e=Object.keys(t),r=0;r0)){a||(t=this.replaceEntitiesValue(t));var o=this.options.tagValueProcessor(e,t,r,n,s);return null==o?t:typeof o!=typeof t||o!==t?o:this.options.trimValues||t.trim()===t?b(t,this.options.parseTagValue,this.options.numberParseOptions):t}}function l(t){if(this.options.removeNSPrefix){var e=t.split(":"),r="/"===t.charAt(0)?"/":"";if("xmlns"===e[0])return"";2===e.length&&(t=r+e[1])}return t}"<((!\\[CDATA\\[([\\s\\S]*?)(]]>))|((NAME:)?(NAME))([^>]*)>|((\\/)(NAME)\\s*>))([^<]*)".replace(/NAME/g,i.nameRegexp);var h=new RegExp("([^\\s=]+)\\s*(=\\s*(['\"])([\\s\\S]*?)\\3)?","gm");function p(t,e,r){if(!this.options.ignoreAttributes&&"string"==typeof t){for(var n=i.getAllMatches(t,h),s=n.length,a={},o=0;o",o,"Closing Tag is not closed."),l=t.substring(o+2,u).trim();if(this.options.removeNSPrefix){var h=l.indexOf(":");-1!==h&&(l=l.substr(h+1))}this.options.transformTagName&&(l=this.options.transformTagName(l)),r&&(i=this.saveTextToParentTag(i,r,a));var p=a.substring(a.lastIndexOf(".")+1);if(l&&-1!==this.options.unpairedTags.indexOf(l))throw new Error("Unpaired tag can not be used as closing tag: ");var d=0;p&&-1!==this.options.unpairedTags.indexOf(p)?(d=a.lastIndexOf(".",a.lastIndexOf(".")-1),this.tagsNodeStack.pop()):d=a.lastIndexOf("."),a=a.substring(0,d),r=this.tagsNodeStack.pop(),i="",o=u}else if("?"===t[o+1]){var f=m(t,o,!1,"?>");if(!f)throw new Error("Pi Tag is not closed.");if(i=this.saveTextToParentTag(i,r,a),this.options.ignoreDeclaration&&"?xml"===f.tagName||this.options.ignorePiTags);else{var g=new n(f.tagName);g.add(this.options.textNodeName,""),f.tagName!==f.tagExp&&f.attrExpPresent&&(g[":@"]=this.buildAttributesMap(f.tagExp,a,f.tagName)),this.addChild(r,g,a)}o=f.closeIndex+1}else if("!--"===t.substr(o+1,3)){var c=x(t,"--\x3e",o+4,"Comment is not closed.");if(this.options.commentPropName){var v,N=t.substring(o+4,c-2);i=this.saveTextToParentTag(i,r,a),r.add(this.options.commentPropName,[(v={},v[this.options.textNodeName]=N,v)])}o=c}else if("!D"===t.substr(o+1,2)){var b=s(t,o);this.docTypeEntities=b.entities,o=b.i}else if("!["===t.substr(o+1,2)){var E=x(t,"]]>",o,"CDATA is not closed.")-2,T=t.substring(o+9,E);if(i=this.saveTextToParentTag(i,r,a),this.options.cdataPropName){var y;r.add(this.options.cdataPropName,[(y={},y[this.options.textNodeName]=T,y)])}else{var O=this.parseTextData(T,r.tagname,a,!0,!1,!0);null==O&&(O=""),r.add(this.options.textNodeName,O)}o=E+2}else{var A=m(t,o,this.options.removeNSPrefix),w=A.tagName,P=A.rawTagName,C=A.tagExp,I=A.attrExpPresent,F=A.closeIndex;this.options.transformTagName&&(w=this.options.transformTagName(w)),r&&i&&"!xml"!==r.tagname&&(i=this.saveTextToParentTag(i,r,a,!1));var D=r;if(D&&-1!==this.options.unpairedTags.indexOf(D.tagname)&&(r=this.tagsNodeStack.pop(),a=a.substring(0,a.lastIndexOf("."))),w!==e.tagname&&(a+=a?"."+w:w),this.isItStopNode(this.options.stopNodes,a,w)){var S="";if(C.length>0&&C.lastIndexOf("/")===C.length-1)o=A.closeIndex;else if(-1!==this.options.unpairedTags.indexOf(w))o=A.closeIndex;else{var j=this.readStopNodeData(t,P,F+1);if(!j)throw new Error("Unexpected end of "+P);o=j.i,S=j.tagContent}var k=new n(w);w!==C&&I&&(k[":@"]=this.buildAttributesMap(C,a,w)),S&&(S=this.parseTextData(S,w,a,!0,I,!0,!0)),a=a.substr(0,a.lastIndexOf(".")),k.add(this.options.textNodeName,S),this.addChild(r,k,a)}else{if(C.length>0&&C.lastIndexOf("/")===C.length-1){"/"===w[w.length-1]?(w=w.substr(0,w.length-1),a=a.substr(0,a.length-1),C=w):C=C.substr(0,C.length-1),this.options.transformTagName&&(w=this.options.transformTagName(w));var V=new n(w);w!==C&&I&&(V[":@"]=this.buildAttributesMap(C,a,w)),this.addChild(r,V,a),a=a.substr(0,a.lastIndexOf("."))}else{var _=new n(w);this.tagsNodeStack.push(r),w!==C&&I&&(_[":@"]=this.buildAttributesMap(C,a,w)),this.addChild(r,_,a),r=_}i="",o=F}}else i+=t[o];return e.child};function f(t,e,r){var i=this.options.updateTag(e.tagname,r,e[":@"]);!1===i||("string"==typeof i?(e.tagname=i,t.addChild(e)):t.addChild(e))}var g=function(t){if(this.options.processEntities){for(var e in this.docTypeEntities){var r=this.docTypeEntities[e];t=t.replace(r.regx,r.val)}for(var i in this.lastEntities){var n=this.lastEntities[i];t=t.replace(n.regex,n.val)}if(this.options.htmlEntities)for(var s in this.htmlEntities){var a=this.htmlEntities[s];t=t.replace(a.regex,a.val)}t=t.replace(this.ampEntity.regex,this.ampEntity.val)}return t};function c(t,e,r,i){return t&&(void 0===i&&(i=0===Object.keys(e.child).length),void 0!==(t=this.parseTextData(t,e.tagname,r,!1,!!e[":@"]&&0!==Object.keys(e[":@"]).length,i))&&""!==t&&e.add(this.options.textNodeName,t),t=""),t}function v(t,e,r){var i="*."+r;for(var n in t){var s=t[n];if(i===s||e===s)return!0}return!1}function x(t,e,r,i){var n=t.indexOf(e,r);if(-1===n)throw new Error(i);return n+e.length-1}function m(t,e,r,i){void 0===i&&(i=">");var n=function(t,e,r){var i;void 0===r&&(r=">");for(var n="",s=e;s",r,e+" is not closed");if(t.substring(r+2,s).trim()===e&&0==--n)return{tagContent:t.substring(i,r),i:s};r=s}else if("?"===t[r+1])r=x(t,"?>",r+1,"StopNode is not closed.");else if("!--"===t.substr(r+1,3))r=x(t,"--\x3e",r+3,"StopNode is not closed.");else if("!["===t.substr(r+1,2))r=x(t,"]]>",r,"StopNode is not closed.")-2;else{var a=m(t,r,">");a&&((a&&a.tagName)===e&&"/"!==a.tagExp[a.tagExp.length-1]&&n++,r=a.closeIndex)}}function b(t,e,r){if(e&&"string"==typeof t){var n=t.trim();return"true"===n||"false"!==n&&a(t,r)}return i.isExist(t)?t:""}t.exports=function(t){this.options=t,this.currentNode=null,this.tagsNodeStack=[],this.docTypeEntities={},this.lastEntities={apos:{regex:/&(apos|#39|#x27);/g,val:"'"},gt:{regex:/&(gt|#62|#x3E);/g,val:">"},lt:{regex:/&(lt|#60|#x3C);/g,val:"<"},quot:{regex:/&(quot|#34|#x22);/g,val:'"'}},this.ampEntity={regex:/&(amp|#38|#x26);/g,val:"&"},this.htmlEntities={space:{regex:/&(nbsp|#160);/g,val:" "},cent:{regex:/&(cent|#162);/g,val:"¢"},pound:{regex:/&(pound|#163);/g,val:"£"},yen:{regex:/&(yen|#165);/g,val:"¥"},euro:{regex:/&(euro|#8364);/g,val:"€"},copyright:{regex:/&(copy|#169);/g,val:"©"},reg:{regex:/&(reg|#174);/g,val:"®"},inr:{regex:/&(inr|#8377);/g,val:"₹"}},this.addExternalEntities=o,this.parseXml=d,this.parseTextData=u,this.resolveNameSpace=l,this.buildAttributesMap=p,this.isItStopNode=v,this.replaceEntitiesValue=g,this.readStopNodeData=N,this.saveTextToParentTag=c,this.addChild=f}},870:(t,e,r)=>{var i=r(348).buildOptions,n=r(498),s=r(400).prettify,a=r(239),o=function(){function t(t){this.externalEntities={},this.options=i(t)}var e=t.prototype;return e.parse=function(t,e){if("string"==typeof t);else{if(!t.toString)throw new Error("XML data is accepted in String or Bytes[] form.");t=t.toString()}if(e){!0===e&&(e={});var r=a.validate(t,e);if(!0!==r)throw Error(r.err.msg+":"+r.err.line+":"+r.err.col)}var i=new n(this.options);i.addExternalEntities(this.externalEntities);var o=i.parseXml(t);return this.options.preserveOrder||void 0===o?o:s(o,this.options)},e.addEntity=function(t,e){if(-1!==e.indexOf("&"))throw new Error("Entity value can't have '&'");if(-1!==t.indexOf("&")||-1!==t.indexOf(";"))throw new Error("An entity must be set without '&' and ';'. Eg. use '#xD' for ' '");if("&"===e)throw new Error("An entity with value '&' is not permitted");this.externalEntities[t]=e},t}();t.exports=o},400:(t,e)=>{"use strict";function r(t,e,a){for(var o,u={},l=0;l0&&(u[e.textNodeName]=o):void 0!==o&&(u[e.textNodeName]=o),u}function i(t){for(var e=Object.keys(t),r=0;r{"use strict";var e=function(){function t(t){this.tagname=t,this.child=[],this[":@"]={}}var e=t.prototype;return e.add=function(t,e){var r;"__proto__"===t&&(t="#__proto__"),this.child.push(((r={})[t]=e,r))},e.addChild=function(t){var e,r;"__proto__"===t.tagname&&(t.tagname="#__proto__"),t[":@"]&&Object.keys(t[":@"]).length>0?this.child.push(((e={})[t.tagname]=t.child,e[":@"]=t[":@"],e)):this.child.push(((r={})[t.tagname]=t.child,r))},t}();t.exports=e}},e={},r=function r(i){var n=e[i];if(void 0!==n)return n.exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}(316);fxp=r})(); //# sourceMappingURL=fxp.min.js.map \ No newline at end of file diff --git a/lib/fxp.min.js.map b/lib/fxp.min.js.map index fa48a6c8..e7ee6e55 100644 --- a/lib/fxp.min.js.map +++ b/lib/fxp.min.js.map @@ -1 +1 @@ -{"version":3,"file":"./lib/fxp.min.js","mappings":"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","sources":["webpack://fxp/./node_modules/strnum/strnum.js","webpack://fxp/./src/fxp.js","webpack://fxp/./src/util.js","webpack://fxp/./src/validator.js","webpack://fxp/./src/xmlbuilder/json2xml.js","webpack://fxp/./src/xmlbuilder/orderedJs2Xml.js","webpack://fxp/./src/xmlparser/DocTypeReader.js","webpack://fxp/./src/xmlparser/OptionsBuilder.js","webpack://fxp/./src/xmlparser/OrderedObjParser.js","webpack://fxp/./src/xmlparser/XMLParser.js","webpack://fxp/./src/xmlparser/node2json.js","webpack://fxp/./src/xmlparser/xmlNode.js","webpack://fxp/webpack/bootstrap","webpack://fxp/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 validator = require('./validator');\nconst XMLParser = require('./xmlparser/XMLParser');\nconst XMLBuilder = require('./xmlbuilder/json2xml');\n\nmodule.exports = {\n XMLParser: XMLParser,\n XMLValidator: validator,\n XMLBuilder: XMLBuilder\n}","'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(/()/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","'use strict';\n//parse Empty Node as self closing node\nconst buildFromOrderedJs = require('./orderedJs2Xml');\n\nconst defaultOptions = {\n attributeNamePrefix: '@_',\n attributesGroupName: false,\n textNodeName: '#text',\n ignoreAttributes: true,\n cdataPropName: false,\n format: false,\n indentBy: ' ',\n suppressEmptyNode: false,\n suppressUnpairedNode: true,\n suppressBooleanAttributes: true,\n tagValueProcessor: function(key, a) {\n return a;\n },\n attributeValueProcessor: function(attrName, a) {\n return a;\n },\n preserveOrder: false,\n commentPropName: false,\n unpairedTags: [],\n entities: [\n { regex: new RegExp(\"&\", \"g\"), val: \"&\" },//it must be on top\n { regex: new RegExp(\">\", \"g\"), val: \">\" },\n { regex: new RegExp(\"<\", \"g\"), val: \"<\" },\n { regex: new RegExp(\"\\'\", \"g\"), val: \"'\" },\n { regex: new RegExp(\"\\\"\", \"g\"), val: \""\" }\n ],\n processEntities: true,\n stopNodes: [],\n // transformTagName: false,\n // transformAttributeName: false,\n oneListGroup: false\n};\n\nfunction Builder(options) {\n this.options = Object.assign({}, defaultOptions, options);\n if (this.options.ignoreAttributes || this.options.attributesGroupName) {\n this.isAttribute = function(/*a*/) {\n return false;\n };\n } else {\n this.attrPrefixLen = this.options.attributeNamePrefix.length;\n this.isAttribute = isAttribute;\n }\n\n this.processTextOrObjNode = processTextOrObjNode\n\n if (this.options.format) {\n this.indentate = indentate;\n this.tagEndChar = '>\\n';\n this.newLine = '\\n';\n } else {\n this.indentate = function() {\n return '';\n };\n this.tagEndChar = '>';\n this.newLine = '';\n }\n}\n\nBuilder.prototype.build = function(jObj) {\n if(this.options.preserveOrder){\n return buildFromOrderedJs(jObj, this.options);\n }else {\n if(Array.isArray(jObj) && this.options.arrayNodeName && this.options.arrayNodeName.length > 1){\n jObj = {\n [this.options.arrayNodeName] : jObj\n }\n }\n return this.j2x(jObj, 0).val;\n }\n};\n\nBuilder.prototype.j2x = function(jObj, level) {\n let attrStr = '';\n let val = '';\n for (let key in jObj) {\n if(!jObj.hasOwnProperty(key)) continue;\n if (typeof jObj[key] === 'undefined') {\n // supress undefined node only if it is not an attribute\n if (this.isAttribute(key)) {\n val += '';\n }\n } else if (jObj[key] === null) {\n // null attribute should be ignored by the attribute list, but should not cause the tag closing\n if (this.isAttribute(key)) {\n val += '';\n } else if (key[0] === '?') {\n val += this.indentate(level) + '<' + key + '?' + this.tagEndChar;\n } else {\n val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;\n }\n // val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;\n } else if (jObj[key] instanceof Date) {\n val += this.buildTextValNode(jObj[key], key, '', level);\n } else if (typeof jObj[key] !== 'object') {\n //premitive type\n const attr = this.isAttribute(key);\n if (attr) {\n attrStr += this.buildAttrPairStr(attr, '' + jObj[key]);\n }else {\n //tag value\n if (key === this.options.textNodeName) {\n let newval = this.options.tagValueProcessor(key, '' + jObj[key]);\n val += this.replaceEntitiesValue(newval);\n } else {\n val += this.buildTextValNode(jObj[key], key, '', level);\n }\n }\n } else if (Array.isArray(jObj[key])) {\n //repeated nodes\n const arrLen = jObj[key].length;\n let listTagVal = \"\";\n for (let j = 0; j < arrLen; j++) {\n const item = jObj[key][j];\n if (typeof item === 'undefined') {\n // supress undefined node\n } else if (item === null) {\n if(key[0] === \"?\") val += this.indentate(level) + '<' + key + '?' + this.tagEndChar;\n else val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;\n // val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;\n } else if (typeof item === 'object') {\n if(this.options.oneListGroup ){\n listTagVal += this.j2x(item, level + 1).val;\n }else{\n listTagVal += this.processTextOrObjNode(item, key, level)\n }\n } else {\n listTagVal += this.buildTextValNode(item, key, '', level);\n }\n }\n if(this.options.oneListGroup){\n listTagVal = this.buildObjectNode(listTagVal, key, '', level);\n }\n val += listTagVal;\n } else {\n //nested node\n if (this.options.attributesGroupName && key === this.options.attributesGroupName) {\n const Ks = Object.keys(jObj[key]);\n const L = Ks.length;\n for (let j = 0; j < L; j++) {\n attrStr += this.buildAttrPairStr(Ks[j], '' + jObj[key][Ks[j]]);\n }\n } else {\n val += this.processTextOrObjNode(jObj[key], key, level)\n }\n }\n }\n return {attrStr: attrStr, val: val};\n};\n\nBuilder.prototype.buildAttrPairStr = function(attrName, val){\n val = this.options.attributeValueProcessor(attrName, '' + val);\n val = this.replaceEntitiesValue(val);\n if (this.options.suppressBooleanAttributes && val === \"true\") {\n return ' ' + attrName;\n } else return ' ' + attrName + '=\"' + val + '\"';\n}\n\nfunction processTextOrObjNode (object, key, level) {\n const result = this.j2x(object, level + 1);\n if (object[this.options.textNodeName] !== undefined && Object.keys(object).length === 1) {\n return this.buildTextValNode(object[this.options.textNodeName], key, result.attrStr, level);\n } else {\n return this.buildObjectNode(result.val, key, result.attrStr, level);\n }\n}\n\nBuilder.prototype.buildObjectNode = function(val, key, attrStr, level) {\n if(val === \"\"){\n if(key[0] === \"?\") return this.indentate(level) + '<' + key + attrStr+ '?' + this.tagEndChar;\n else {\n return this.indentate(level) + '<' + key + attrStr + this.closeTag(key) + this.tagEndChar;\n }\n }else{\n\n let tagEndExp = '' + val + tagEndExp );\n } else if (this.options.commentPropName !== false && key === this.options.commentPropName && piClosingChar.length === 0) {\n return this.indentate(level) + `` + this.newLine;\n }else {\n return (\n this.indentate(level) + '<' + key + attrStr + piClosingChar + this.tagEndChar +\n val +\n this.indentate(level) + tagEndExp );\n }\n }\n}\n\nBuilder.prototype.closeTag = function(key){\n let closeTag = \"\";\n if(this.options.unpairedTags.indexOf(key) !== -1){ //unpaired\n if(!this.options.suppressUnpairedNode) closeTag = \"/\"\n }else if(this.options.suppressEmptyNode){ //empty\n closeTag = \"/\";\n }else{\n closeTag = `>` + this.newLine;\n }else if (this.options.commentPropName !== false && key === this.options.commentPropName) {\n return this.indentate(level) + `` + this.newLine;\n }else if(key[0] === \"?\") {//PI tag\n return this.indentate(level) + '<' + key + attrStr+ '?' + this.tagEndChar; \n }else{\n let textValue = this.options.tagValueProcessor(key, val);\n textValue = this.replaceEntitiesValue(textValue);\n \n if( textValue === ''){\n return this.indentate(level) + '<' + key + attrStr + this.closeTag(key) + this.tagEndChar;\n }else{\n return this.indentate(level) + '<' + key + attrStr + '>' +\n textValue +\n ' 0 && this.options.processEntities){\n for (let i=0; i 0) {\n indentation = EOL;\n }\n return arrToStr(jArray, options, \"\", indentation);\n}\n\nfunction arrToStr(arr, options, jPath, indentation) {\n let xmlStr = \"\";\n let isPreviousElementTag = false;\n\n for (let i = 0; i < arr.length; i++) {\n const tagObj = arr[i];\n const tagName = propName(tagObj);\n if(tagName === undefined) continue;\n\n let newJPath = \"\";\n if (jPath.length === 0) newJPath = tagName\n else newJPath = `${jPath}.${tagName}`;\n\n if (tagName === options.textNodeName) {\n let tagText = tagObj[tagName];\n if (!isStopNode(newJPath, options)) {\n tagText = options.tagValueProcessor(tagName, tagText);\n tagText = replaceEntitiesValue(tagText, options);\n }\n if (isPreviousElementTag) {\n xmlStr += indentation;\n }\n xmlStr += tagText;\n isPreviousElementTag = false;\n continue;\n } else if (tagName === options.cdataPropName) {\n if (isPreviousElementTag) {\n xmlStr += indentation;\n }\n xmlStr += ``;\n isPreviousElementTag = false;\n continue;\n } else if (tagName === options.commentPropName) {\n xmlStr += indentation + ``;\n isPreviousElementTag = true;\n continue;\n } else if (tagName[0] === \"?\") {\n const attStr = attr_to_str(tagObj[\":@\"], options);\n const tempInd = tagName === \"?xml\" ? \"\" : indentation;\n let piTextNodeName = tagObj[tagName][0][options.textNodeName];\n piTextNodeName = piTextNodeName.length !== 0 ? \" \" + piTextNodeName : \"\"; //remove extra spacing\n xmlStr += tempInd + `<${tagName}${piTextNodeName}${attStr}?>`;\n isPreviousElementTag = true;\n continue;\n }\n let newIdentation = indentation;\n if (newIdentation !== \"\") {\n newIdentation += options.indentBy;\n }\n const attStr = attr_to_str(tagObj[\":@\"], options);\n const tagStart = indentation + `<${tagName}${attStr}`;\n const tagValue = arrToStr(tagObj[tagName], options, newJPath, newIdentation);\n if (options.unpairedTags.indexOf(tagName) !== -1) {\n if (options.suppressUnpairedNode) xmlStr += tagStart + \">\";\n else xmlStr += tagStart + \"/>\";\n } else if ((!tagValue || tagValue.length === 0) && options.suppressEmptyNode) {\n xmlStr += tagStart + \"/>\";\n } else if (tagValue && tagValue.endsWith(\">\")) {\n xmlStr += tagStart + `>${tagValue}${indentation}`;\n } else {\n xmlStr += tagStart + \">\";\n if (tagValue && indentation !== \"\" && (tagValue.includes(\"/>\") || tagValue.includes(\"`;\n }\n isPreviousElementTag = true;\n }\n\n return xmlStr;\n}\n\nfunction propName(obj) {\n const keys = Object.keys(obj);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if(!obj.hasOwnProperty(key)) continue;\n if (key !== \":@\") return key;\n }\n}\n\nfunction attr_to_str(attrMap, options) {\n let attrStr = \"\";\n if (attrMap && !options.ignoreAttributes) {\n for (let attr in attrMap) {\n if(!attrMap.hasOwnProperty(attr)) continue;\n let attrVal = options.attributeValueProcessor(attr, attrMap[attr]);\n attrVal = replaceEntitiesValue(attrVal, options);\n if (attrVal === true && options.suppressBooleanAttributes) {\n attrStr += ` ${attr.substr(options.attributeNamePrefix.length)}`;\n } else {\n attrStr += ` ${attr.substr(options.attributeNamePrefix.length)}=\"${attrVal}\"`;\n }\n }\n }\n return attrStr;\n}\n\nfunction isStopNode(jPath, options) {\n jPath = jPath.substr(0, jPath.length - options.textNodeName.length - 1);\n let tagName = jPath.substr(jPath.lastIndexOf(\".\") + 1);\n for (let index in options.stopNodes) {\n if (options.stopNodes[index] === jPath || options.stopNodes[index] === \"*.\" + tagName) return true;\n }\n return false;\n}\n\nfunction replaceEntitiesValue(textValue, options) {\n if (textValue && textValue.length > 0 && options.processEntities) {\n for (let i = 0; i < options.entities.length; i++) {\n const entity = options.entities[i];\n textValue = textValue.replace(entity.regex, entity.val);\n }\n }\n return textValue;\n}\nmodule.exports = toXml;\n","const util = require('../util');\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') { //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 // \n\n //Parameter entities are not supported\n // \n\n //Internal entities are supported\n // \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\nfunction validateEntityName(name){\n if (util.isName(name))\n\treturn name;\n else\n throw new Error(`Invalid entity name ${name}`);\n}\n\nmodule.exports = readDocType;\n","\nconst defaultOptions = {\n preserveOrder: false,\n attributeNamePrefix: '@_',\n attributesGroupName: false,\n textNodeName: '#text',\n ignoreAttributes: true,\n removeNSPrefix: false, // remove NS from tag name or attribute name if true\n allowBooleanAttributes: false, //a tag can have attributes without any value\n //ignoreRootElement : false,\n parseTagValue: true,\n parseAttributeValue: false,\n trimValues: true, //Trim string values of tag and attributes\n cdataPropName: false,\n numberParseOptions: {\n hex: true,\n leadingZeros: true,\n eNotation: true\n },\n tagValueProcessor: function(tagName, val) {\n return val;\n },\n attributeValueProcessor: function(attrName, val) {\n return val;\n },\n stopNodes: [], //nested tags will not be parsed even for errors\n alwaysCreateTextNode: false,\n isArray: () => 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: `);\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 const rawTagName = result.rawTagName;\n let tagExp = result.tagExp;\n let attrExpPresent = result.attrExpPresent;\n let closeIndex = result.closeIndex;\n\n if (this.options.transformTagName) {\n tagName = this.options.transformTagName(tagName);\n }\n \n //save text as child node\n if (currentNode && textData) {\n if(currentNode.tagname !== '!xml'){\n //when nested tag is found\n textData = this.saveTextToParentTag(textData, currentNode, jPath, false);\n }\n }\n\n //check if last tag was unpaired tag\n const lastTag = currentNode;\n if(lastTag && this.options.unpairedTags.indexOf(lastTag.tagname) !== -1 ){\n currentNode = this.tagsNodeStack.pop();\n jPath = jPath.substring(0, jPath.lastIndexOf(\".\"));\n }\n if(tagName !== xmlObj.tagname){\n jPath += jPath ? \".\" + tagName : tagName;\n }\n if (this.isItStopNode(this.options.stopNodes, jPath, tagName)) {\n let tagContent = \"\";\n //self-closing tag\n if(tagExp.length > 0 && tagExp.lastIndexOf(\"/\") === tagExp.length - 1){\n 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, rawTagName, closeIndex + 1);\n if(!result) throw new Error(`Unexpected end of ${rawTagName}`);\n i = result.i;\n tagContent = result.tagContent;\n }\n\n const childNode = new xmlNode(tagName);\n 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 jPath = jPath.substr(0, jPath.length - 1);\n tagExp = tagName;\n }else{\n tagExp = tagExp.substr(0, tagExp.length - 1);\n }\n \n if(this.options.transformTagName) {\n tagName = this.options.transformTagName(tagName);\n }\n\n const childNode = new xmlNode(tagName);\n if(tagName !== tagExp && attrExpPresent){\n childNode[\":@\"] = this.buildAttributesMap(tagExp, jPath, tagName);\n }\n this.addChild(currentNode, childNode, jPath)\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 const rawTagName = tagName;\n if(removeNSPrefix){\n const colonIndex = tagName.indexOf(\":\");\n if(colonIndex !== -1){\n tagName = tagName.substr(colonIndex+1);\n attrExpPresent = tagName !== result.data.substr(colonIndex + 1);\n }\n }\n\n return {\n tagName: tagName,\n tagExp: tagExp,\n closeIndex: closeIndex,\n attrExpPresent: attrExpPresent,\n rawTagName: rawTagName,\n }\n}\n/**\n * find paired tag for a stop node\n * @param {string} xmlData \n * @param {string} tagName \n * @param {number} i \n */\nfunction readStopNodeData(xmlData, tagName, i){\n const startIndex = i;\n // Starting at 1 since we already have an open tag\n let openTagCount = 1;\n\n for (; i < xmlData.length; i++) {\n if( xmlData[i] === \"<\"){ \n if (xmlData[i+1] === \"/\") {//close tag\n const closeIndex = findClosingIndex(xmlData, \">\", i, `${tagName} is not closed`);\n let closeTagName = xmlData.substring(i+2,closeIndex).trim();\n if(closeTagName === tagName){\n openTagCount--;\n if (openTagCount === 0) {\n return {\n tagContent: xmlData.substring(startIndex, i),\n i : closeIndex\n }\n }\n }\n i=closeIndex;\n } else if(xmlData[i+1] === '?') { \n const closeIndex = findClosingIndex(xmlData, \"?>\", i+1, \"StopNode is not closed.\")\n i=closeIndex;\n } else if(xmlData.substr(i + 1, 3) === '!--') { \n const closeIndex = findClosingIndex(xmlData, \"-->\", i+3, \"StopNode is not closed.\")\n i=closeIndex;\n } else if(xmlData.substr(i + 1, 2) === '![') { \n const closeIndex = findClosingIndex(xmlData, \"]]>\", i, \"StopNode is not closed.\") - 2;\n i=closeIndex;\n } else {\n const tagData = readTagExp(xmlData, i, '>')\n\n if (tagData) {\n const openTagName = tagData && tagData.tagName;\n if (openTagName === tagName && tagData.tagExp[tagData.tagExp.length-1] !== \"/\") {\n openTagCount++;\n }\n i=tagData.closeIndex;\n }\n }\n }\n }//end for loop\n}\n\nfunction parseValue(val, shouldParse, options) {\n if (shouldParse && typeof val === 'string') {\n //console.log(options)\n const newval = val.trim();\n if(newval === 'true' ) return true;\n else if(newval === 'false' ) return false;\n else return toNumber(val, options);\n } else {\n if (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__(316);\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","validator","require","XMLParser","XMLBuilder","XMLValidator","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","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","buildFromOrderedJs","attributeNamePrefix","attributesGroupName","textNodeName","ignoreAttributes","cdataPropName","format","indentBy","suppressEmptyNode","suppressUnpairedNode","suppressBooleanAttributes","tagValueProcessor","key","attributeValueProcessor","preserveOrder","commentPropName","entities","val","processEntities","stopNodes","oneListGroup","Builder","this","isAttribute","attrPrefixLen","processTextOrObjNode","indentate","tagEndChar","newLine","object","level","j2x","buildTextValNode","buildObjectNode","repeat","name","startsWith","prototype","build","jObj","Array","isArray","arrayNodeName","Date","attr","buildAttrPairStr","newval","replaceEntitiesValue","arrLen","listTagVal","j","item","Ks","L","closeTag","tagEndExp","piClosingChar","textValue","entity","arrToStr","arr","jPath","indentation","xmlStr","isPreviousElementTag","tagObj","propName","newJPath","newIdentation","tagStart","attr_to_str","tagValue","endsWith","includes","attStr","tempInd","piTextNodeName","tagText","isStopNode","attrMap","attrVal","lastIndexOf","jArray","readEntityExp","entityName","Error","isComment","isEntity","isElement","isAttlist","isNotation","validateEntityName","hasBody","comment","regx","removeNSPrefix","parseTagValue","parseAttributeValue","trimValues","numberParseOptions","alwaysCreateTextNode","htmlEntities","ignoreDeclaration","ignorePiTags","transformTagName","transformAttributeName","updateTag","attrs","buildOptions","xmlNode","readDocType","toNumber","addExternalEntities","externalEntities","entKeys","ent","lastEntities","parseTextData","dontTrim","hasAttributes","isLeafNode","escapeEntities","parseValue","resolveNameSpace","prefix","charAt","attrsRegx","buildAttributesMap","oldVal","aName","newVal","attrCollection","parseXml","xmlObj","currentNode","textData","closeIndex","findClosingIndex","colonIndex","saveTextToParentTag","lastTagName","propIndex","tagsNodeStack","tagData","readTagExp","childNode","add","tagExp","attrExpPresent","addChild","endIndex","docTypeEntities","rawTagName","lastTag","isItStopNode","tagContent","readStopNodeData","child","ampEntity","currentTagName","allNodesExp","stopNodePath","stopNodeExp","errMsg","closingIndex","closingChar","attrBoundary","ch","data","tagExpWithClosingIndex","separatorIndex","openTagCount","shouldParse","OrderedObjParser","prettify","parse","validationOption","toString","orderedObjParser","orderedResult","addEntity","compress","text","compressedObj","newJpath","property","isLeaf","isLeafTag","assignAttributes","jpath","atrrName","propCount","node","XmlNode","__webpack_module_cache__","__webpack_exports__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"./lib/fxp.min.js","mappings":"6BAAA,MAAMA,EAAW,wBACXC,EAAW,+EAMZC,OAAOC,UAAYC,OAAOD,WAC3BD,OAAOC,SAAWC,OAAOD,WAExBD,OAAOG,YAAcD,OAAOC,aAC7BH,OAAOG,WAAaD,OAAOC,YAI/B,MAAMC,EAAW,CACbC,KAAO,EACPC,cAAc,EACdC,aAAc,IACdC,WAAW,GAwGfC,EAAOC,QApGP,SAAkBC,EAAKC,EAAU,CAAC,GAS9B,GADAA,EAAUC,OAAOC,OAAO,CAAC,EAAGV,EAAUQ,IAClCD,GAAsB,iBAARA,EAAmB,OAAOA,EAE5C,IAAII,EAAcJ,EAAIK,OAKtB,QAAwBC,IAArBL,EAAQM,UAA0BN,EAAQM,SAASC,KAAKJ,GAAa,OAAOJ,EAC1E,GAAIC,EAAQP,KAAOP,EAASqB,KAAKJ,GAClC,OAAOf,OAAOC,SAASc,EAAY,IAKlC,CAED,MAAMK,EAAQrB,EAASsB,KAAKN,GAC5B,GAAGK,EAAM,CACL,MAAME,EAAOF,EAAM,GACbd,EAAec,EAAM,GAC3B,IAAIG,GA6DGC,EA7D2BJ,EAAM,MA8DV,IAAzBI,EAAOC,QAAQ,MAEV,OADdD,EAASA,EAAOE,QAAQ,MAAO,KACXF,EAAS,IACP,MAAdA,EAAO,GAAaA,EAAS,IAAIA,EACL,MAA5BA,EAAOA,EAAOG,OAAO,KAAaH,EAASA,EAAOI,OAAO,EAAEJ,EAAOG,OAAO,IAC1EH,GAEJA,EAlEC,MAAMhB,EAAYY,EAAM,IAAMA,EAAM,GACpC,IAAIR,EAAQN,cAAgBA,EAAaqB,OAAS,GAAKL,GAA0B,MAAlBP,EAAW,GAAY,OAAOJ,EACxF,IAAIC,EAAQN,cAAgBA,EAAaqB,OAAS,IAAML,GAA0B,MAAlBP,EAAW,GAAY,OAAOJ,EAC/F,CACA,MAAMkB,EAAM7B,OAAOe,GACbS,EAAS,GAAKK,EACpB,OAA8B,IAA3BL,EAAOM,OAAO,SAGRtB,EAFFI,EAAQJ,UAAkBqB,EACjBlB,GAIsB,IAA7BI,EAAWU,QAAQ,KAQV,MAAXD,GAAyC,KAAtBD,GACdC,IAAWD,GACVD,GAAQE,IAAW,IAAID,EAFyBM,EAG7ClB,EAGbL,EAKIiB,IAAsBC,GACjBF,EAAKC,IAAsBC,EADKK,EAE5BlB,EAGbI,IAAeS,GACVT,IAAeO,EAAKE,EADKK,EAO1BlB,CACV,CAGJ,CACG,OAAOA,CAEd,CAQL,IAAmBa,CAPlB,C,6BCxGD,IAAMO,EAAYC,EAAQ,KACpBC,EAAYD,EAAQ,KACpBE,EAAaF,EAAQ,KAE3BvB,EAAOC,QAAU,CACfuB,UAAWA,EACXE,aAAcJ,EACdG,WAAYA,E,2BCPd,IAEME,EAAa,8YACbC,EAAY,IAAIC,OAAO,IAAMF,EAAa,KAuBhD1B,EAAQ6B,QAAU,SAASC,GACzB,YAAoB,IAANA,CACf,EAED9B,EAAQ+B,cAAgB,SAASC,GAC/B,OAAmC,IAA5B7B,OAAO8B,KAAKD,GAAKf,MACzB,EAODjB,EAAQkC,MAAQ,SAASC,EAAQC,EAAGC,GAClC,GAAID,EAGF,IAFA,IAAMH,EAAO9B,OAAO8B,KAAKG,GACnBE,EAAML,EAAKhB,OACRsB,EAAI,EAAGA,EAAID,EAAKC,IAErBJ,EAAOF,EAAKM,IADI,WAAdF,EACgB,CAAED,EAAEH,EAAKM,KAETH,EAAEH,EAAKM,GAIhC,EAKDvC,EAAQwC,SAAW,SAASV,GAC1B,OAAI9B,EAAQ6B,QAAQC,GACXA,EAEA,EAEV,EAKD9B,EAAQyC,OA9CO,SAASC,GAEtB,QAAQ,MADMf,EAAUhB,KAAK+B,GAE9B,EA4CD1C,EAAQ2C,cA/Dc,SAASD,EAAQE,GAGrC,IAFA,IAAMC,EAAU,GACZnC,EAAQkC,EAAMjC,KAAK+B,GAChBhC,GAAO,CACZ,IAAMoC,EAAa,GACnBA,EAAWC,WAAaH,EAAMI,UAAYtC,EAAM,GAAGO,OAEnD,IADA,IAAMqB,EAAM5B,EAAMO,OACTgC,EAAQ,EAAGA,EAAQX,EAAKW,IAC/BH,EAAWI,KAAKxC,EAAMuC,IAExBJ,EAAQK,KAAKJ,GACbpC,EAAQkC,EAAMjC,KAAK+B,EACpB,CACD,OAAOG,CACR,EAkDD7C,EAAQ0B,WAAaA,C,6BCrErB,IAAMyB,EAAO7B,EAAQ,KAEf8B,EAAiB,CACrBC,wBAAwB,EACxBC,aAAc,IAwLhB,SAASC,EAAaC,GACpB,MAAgB,MAATA,GAAyB,OAATA,GAA0B,OAATA,GAA2B,OAATA,CAC3D,CAMD,SAASC,EAAOC,EAASnB,GAEvB,IADA,IAAMoB,EAAQpB,EACPA,EAAImB,EAAQzC,OAAQsB,IACzB,GAAkB,KAAdmB,EAAQnB,IAA2B,KAAdmB,EAAQnB,QAAjC,CAEE,IAAMqB,EAAUF,EAAQxC,OAAOyC,EAAOpB,EAAIoB,GAC1C,GAAIpB,EAAI,GAAiB,QAAZqB,EACX,OAAOC,EAAe,aAAc,6DAA8DC,EAAyBJ,EAASnB,IAC/H,GAAkB,KAAdmB,EAAQnB,IAA+B,KAAlBmB,EAAQnB,EAAI,GAAW,CAErDA,IACA,KACD,CAGF,CAEH,OAAOA,CACR,CAED,SAASwB,EAAoBL,EAASnB,GACpC,GAAImB,EAAQzC,OAASsB,EAAI,GAAwB,MAAnBmB,EAAQnB,EAAI,IAAiC,MAAnBmB,EAAQnB,EAAI,IAElE,IAAKA,GAAK,EAAGA,EAAImB,EAAQzC,OAAQsB,IAC/B,GAAmB,MAAfmB,EAAQnB,IAAiC,MAAnBmB,EAAQnB,EAAI,IAAiC,MAAnBmB,EAAQnB,EAAI,GAAY,CAC1EA,GAAK,EACL,KACD,OAEE,GACLmB,EAAQzC,OAASsB,EAAI,GACF,MAAnBmB,EAAQnB,EAAI,IACO,MAAnBmB,EAAQnB,EAAI,IACO,MAAnBmB,EAAQnB,EAAI,IACO,MAAnBmB,EAAQnB,EAAI,IACO,MAAnBmB,EAAQnB,EAAI,IACO,MAAnBmB,EAAQnB,EAAI,IACO,MAAnBmB,EAAQnB,EAAI,GACZ,CACA,IAAIyB,EAAqB,EACzB,IAAKzB,GAAK,EAAGA,EAAImB,EAAQzC,OAAQsB,IAC/B,GAAmB,MAAfmB,EAAQnB,GACVyB,SACK,GAAmB,MAAfN,EAAQnB,IAEU,KAD3ByB,EAEE,KAIP,MAAM,GACLN,EAAQzC,OAASsB,EAAI,GACF,MAAnBmB,EAAQnB,EAAI,IACO,MAAnBmB,EAAQnB,EAAI,IACO,MAAnBmB,EAAQnB,EAAI,IACO,MAAnBmB,EAAQnB,EAAI,IACO,MAAnBmB,EAAQnB,EAAI,IACO,MAAnBmB,EAAQnB,EAAI,IACO,MAAnBmB,EAAQnB,EAAI,GAEZ,IAAKA,GAAK,EAAGA,EAAImB,EAAQzC,OAAQsB,IAC/B,GAAmB,MAAfmB,EAAQnB,IAAiC,MAAnBmB,EAAQnB,EAAI,IAAiC,MAAnBmB,EAAQnB,EAAI,GAAY,CAC1EA,GAAK,EACL,KACD,CAIL,OAAOA,CACR,CAUD,SAAS0B,EAAiBP,EAASnB,GAIjC,IAHA,IAAI2B,EAAU,GACVC,EAAY,GACZC,GAAY,EACT7B,EAAImB,EAAQzC,OAAQsB,IAAK,CAC9B,GAbgB,MAaZmB,EAAQnB,IAZI,MAYkBmB,EAAQnB,GACtB,KAAd4B,EACFA,EAAYT,EAAQnB,GACX4B,IAAcT,EAAQnB,KAG/B4B,EAAY,SAET,GAAmB,MAAfT,EAAQnB,IACC,KAAd4B,EAAkB,CACpBC,GAAY,EACZ,KACD,CAEHF,GAAWR,EAAQnB,EACpB,CACD,MAAkB,KAAd4B,GAIG,CACLE,MAAOH,EACPjB,MAAOV,EACP6B,UAAWA,EAEd,CAzSDpE,EAAQsE,SAAW,SAAUZ,EAASxD,GACpCA,EAAUC,OAAOC,OAAO,CAAC,EAAGgD,EAAgBlD,GAK5C,IAoYuB0D,EApYjBW,EAAO,GACTC,GAAW,EAGXC,GAAc,EAEC,WAAff,EAAQ,KAEVA,EAAUA,EAAQxC,OAAO,IAG3B,IAAK,IAAIqB,EAAI,EAAGA,EAAImB,EAAQzC,OAAQsB,IAElC,GAAmB,MAAfmB,EAAQnB,IAA+B,MAAjBmB,EAAQnB,EAAE,IAGlC,IADAA,EAAIkB,EAAOC,EADXnB,GAAG,IAEGmC,IAAK,OAAOnC,MACd,IAAmB,MAAfmB,EAAQnB,GAwIX,CACL,GAAKgB,EAAaG,EAAQnB,IACxB,SAEF,OAAOsB,EAAe,cAAe,SAASH,EAAQnB,GAAG,qBAAsBuB,EAAyBJ,EAASnB,GAClH,CA1IC,IAAIoC,EAAcpC,EAGlB,GAAmB,MAAfmB,IAFJnB,GAEwB,CACtBA,EAAIwB,EAAoBL,EAASnB,GACjC,QACD,CACC,IAAIqC,GAAa,EACE,MAAflB,EAAQnB,KAEVqC,GAAa,EACbrC,KAIF,IADA,IAAIsC,EAAU,GACPtC,EAAImB,EAAQzC,QACF,MAAfyC,EAAQnB,IACO,MAAfmB,EAAQnB,IACO,OAAfmB,EAAQnB,IACO,OAAfmB,EAAQnB,IACO,OAAfmB,EAAQnB,GAAaA,IAErBsC,GAAWnB,EAAQnB,GAWrB,GANoC,OAHpCsC,EAAUA,EAAQvE,QAGNuE,EAAQ5D,OAAS,KAE3B4D,EAAUA,EAAQC,UAAU,EAAGD,EAAQ5D,OAAS,GAEhDsB,KAiVeqB,EA/UIiB,GAgVpB1B,EAAKV,OAAOmB,GAzUX,OAAOC,EAAe,aALQ,IAA1BgB,EAAQvE,OAAOW,OACX,2BAEA,QAAQ4D,EAAQ,wBAEiBf,EAAyBJ,EAASnB,IAG7E,IAAMwC,EAASd,EAAiBP,EAASnB,GACzC,IAAe,IAAXwC,EACF,OAAOlB,EAAe,cAAe,mBAAmBgB,EAAQ,qBAAsBf,EAAyBJ,EAASnB,IAE1H,IAAI2B,EAAUa,EAAOV,MAGrB,GAFA9B,EAAIwC,EAAO9B,MAEyB,MAAhCiB,EAAQA,EAAQjD,OAAS,GAAY,CAEvC,IAAM+D,EAAezC,EAAI2B,EAAQjD,OAE3BgE,EAAUC,EADhBhB,EAAUA,EAAQY,UAAU,EAAGZ,EAAQjD,OAAS,GACCf,GACjD,IAAgB,IAAZ+E,EAOF,OAAOpB,EAAeoB,EAAQP,IAAIS,KAAMF,EAAQP,IAAIU,IAAKtB,EAAyBJ,EAASsB,EAAeC,EAAQP,IAAIW,OANtHb,GAAW,CAQd,MAAM,GAAII,EAAY,CACrB,IAAKG,EAAOX,UACV,OAAOP,EAAe,aAAc,gBAAgBgB,EAAQ,iCAAkCf,EAAyBJ,EAASnB,IAC3H,GAAI2B,EAAQ5D,OAAOW,OAAS,EACjC,OAAO4C,EAAe,aAAc,gBAAgBgB,EAAQ,+CAAgDf,EAAyBJ,EAASiB,IAE9I,IAAMW,EAAMf,EAAKgB,MACjB,GAAIV,IAAYS,EAAIT,QAAS,CAC3B,IAAIW,EAAU1B,EAAyBJ,EAAS4B,EAAIX,aACpD,OAAOd,EAAe,aACpB,yBAAyByB,EAAIT,QAAQ,qBAAqBW,EAAQH,KAAK,SAASG,EAAQC,IAAI,6BAA6BZ,EAAQ,KACjIf,EAAyBJ,EAASiB,GACrC,CAGkB,GAAfJ,EAAKtD,SACPwD,GAAc,EAGnB,KAAM,CACL,IAAMQ,EAAUC,EAAwBhB,EAAShE,GACjD,IAAgB,IAAZ+E,EAIF,OAAOpB,EAAeoB,EAAQP,IAAIS,KAAMF,EAAQP,IAAIU,IAAKtB,EAAyBJ,EAASnB,EAAI2B,EAAQjD,OAASgE,EAAQP,IAAIW,OAI9H,IAAoB,IAAhBZ,EACF,OAAOZ,EAAe,aAAc,sCAAuCC,EAAyBJ,EAASnB,KAC1D,IAA3CrC,EAAQoD,aAAavC,QAAQ8D,IAGrCN,EAAKrB,KAAK,CAAC2B,QAAAA,EAASF,YAAAA,IAEtBH,GAAW,CACZ,CAID,IAAKjC,IAAKA,EAAImB,EAAQzC,OAAQsB,IAC5B,GAAmB,MAAfmB,EAAQnB,GAAY,CACtB,GAAuB,MAAnBmB,EAAQnB,EAAI,GAAY,CAG1BA,EAAIwB,EAAoBL,IADxBnB,GAEA,QACD,CAAM,GAAqB,MAAjBmB,EAAQnB,EAAE,GAInB,MAFA,IADAA,EAAIkB,EAAOC,IAAWnB,IAChBmC,IAAK,OAAOnC,CAIrB,MAAM,GAAmB,MAAfmB,EAAQnB,GAAY,CAC7B,IAAMmD,EAAWC,EAAkBjC,EAASnB,GAC5C,IAAiB,GAAbmD,EACF,OAAO7B,EAAe,cAAe,4BAA6BC,EAAyBJ,EAASnB,IACtGA,EAAImD,CACL,MACC,IAAoB,IAAhBjB,IAAyBlB,EAAaG,EAAQnB,IAChD,OAAOsB,EAAe,aAAc,wBAAyBC,EAAyBJ,EAASnB,IAIlF,MAAfmB,EAAQnB,IACVA,GAQL,CAGH,OAAKiC,EAEoB,GAAfD,EAAKtD,OACJ4C,EAAe,aAAc,iBAAiBU,EAAK,GAAGM,QAAQ,KAAMf,EAAyBJ,EAASa,EAAK,GAAGI,gBAC/GJ,EAAKtD,OAAS,IACb4C,EAAe,aAAc,YAChC+B,KAAKC,UAAUtB,EAAKuB,KAAI,SAAAC,GAAC,OAAIA,EAAElB,OAAN,IAAgB,KAAM,GAAG7D,QAAQ,SAAU,IACpE,WAAY,CAACqE,KAAM,EAAGI,IAAK,IAN1B5B,EAAe,aAAc,sBAAuB,EAU9D,EA4HD,IAAMmC,EAAoB,IAAIpE,OAAO,0DAA2D,KAIhG,SAASsD,EAAwBhB,EAAShE,GAQxC,IAHA,IAAM2C,EAAUM,EAAKR,cAAcuB,EAAS8B,GACtCC,EAAY,CAAC,EAEV1D,EAAI,EAAGA,EAAIM,EAAQ5B,OAAQsB,IAAK,CACvC,GAA6B,IAAzBM,EAAQN,GAAG,GAAGtB,OAEhB,OAAO4C,EAAe,cAAe,cAAchB,EAAQN,GAAG,GAAG,8BAA+B2D,EAAqBrD,EAAQN,KACxH,QAAsBhC,IAAlBsC,EAAQN,GAAG,SAAsChC,IAAlBsC,EAAQN,GAAG,GACnD,OAAOsB,EAAe,cAAe,cAAchB,EAAQN,GAAG,GAAG,sBAAuB2D,EAAqBrD,EAAQN,KAChH,QAAsBhC,IAAlBsC,EAAQN,GAAG,KAAqBrC,EAAQmD,uBAEjD,OAAOQ,EAAe,cAAe,sBAAsBhB,EAAQN,GAAG,GAAG,oBAAqB2D,EAAqBrD,EAAQN,KAK7H,IAAM4D,EAAWtD,EAAQN,GAAG,GAC5B,IAAK6D,EAAiBD,GACpB,OAAOtC,EAAe,cAAe,cAAcsC,EAAS,wBAAyBD,EAAqBrD,EAAQN,KAEpH,GAAK0D,EAAUI,eAAeF,GAI5B,OAAOtC,EAAe,cAAe,cAAcsC,EAAS,iBAAkBD,EAAqBrD,EAAQN,KAF3G0D,EAAUE,GAAY,CAIzB,CAED,OAAO,CACR,CAiBD,SAASR,EAAkBjC,EAASnB,GAGlC,GAAmB,MAAfmB,IADJnB,GAEE,OAAQ,EACV,GAAmB,MAAfmB,EAAQnB,GAEV,OAtBJ,SAAiCmB,EAASnB,GACxC,IAAI+D,EAAK,KAKT,IAJmB,MAAf5C,EAAQnB,KACVA,IACA+D,EAAK,cAEA/D,EAAImB,EAAQzC,OAAQsB,IAAK,CAC9B,GAAmB,MAAfmB,EAAQnB,GACV,OAAOA,EACT,IAAKmB,EAAQnB,GAAG7B,MAAM4F,GACpB,KACH,CACD,OAAQ,CACT,CASUC,CAAwB7C,IAD/BnB,GAIF,IADA,IAAIiE,EAAQ,EACLjE,EAAImB,EAAQzC,OAAQsB,IAAKiE,IAC9B,KAAI9C,EAAQnB,GAAG7B,MAAM,OAAS8F,EAAQ,IAAtC,CAEA,GAAmB,MAAf9C,EAAQnB,GACV,MACF,OAAQ,CAHE,CAKZ,OAAOA,CACR,CAED,SAASsB,EAAesB,EAAMsB,EAASC,GACrC,MAAO,CACLhC,IAAK,CACHS,KAAMA,EACNC,IAAKqB,EACLpB,KAAMqB,EAAWrB,MAAQqB,EACzBjB,IAAKiB,EAAWjB,KAGrB,CAED,SAASW,EAAiBD,GACxB,OAAOhD,EAAKV,OAAO0D,EACpB,CASD,SAASrC,EAAyBJ,EAAST,GACzC,IAAM0D,EAAQjD,EAAQoB,UAAU,EAAG7B,GAAO2D,MAAM,SAChD,MAAO,CACLvB,KAAMsB,EAAM1F,OAGZwE,IAAKkB,EAAMA,EAAM1F,OAAS,GAAGA,OAAS,EAEzC,CAGD,SAASiF,EAAqBxF,GAC5B,OAAOA,EAAMqC,WAAarC,EAAM,GAAGO,MACpC,C,6BCpaD,IAAM4F,EAAqBvF,EAAQ,KAE7B8B,EAAiB,CACrB0D,oBAAqB,KACrBC,qBAAqB,EACrBC,aAAc,QACdC,kBAAkB,EAClBC,eAAe,EACfC,QAAQ,EACRC,SAAU,KACVC,mBAAmB,EACnBC,sBAAsB,EACtBC,2BAA2B,EAC3BC,kBAAmB,SAASC,EAAKrF,GAC/B,OAAOA,CACR,EACDsF,wBAAyB,SAASvB,EAAU/D,GAC1C,OAAOA,CACR,EACDuF,eAAe,EACfC,iBAAiB,EACjBtE,aAAc,GACduE,SAAU,CACR,CAAEjF,MAAO,IAAIhB,OAAO,IAAK,KAAMkG,IAAK,SACpC,CAAElF,MAAO,IAAIhB,OAAO,IAAK,KAAMkG,IAAK,QACpC,CAAElF,MAAO,IAAIhB,OAAO,IAAK,KAAMkG,IAAK,QACpC,CAAElF,MAAO,IAAIhB,OAAO,IAAM,KAAMkG,IAAK,UACrC,CAAElF,MAAO,IAAIhB,OAAO,IAAM,KAAMkG,IAAK,WAEvCC,iBAAiB,EACjBC,UAAW,GAGXC,cAAc,GAGhB,SAASC,EAAQhI,GACfiI,KAAKjI,QAAUC,OAAOC,OAAO,CAAC,EAAGgD,EAAgBlD,GAC7CiI,KAAKjI,QAAQ+G,kBAAoBkB,KAAKjI,QAAQ6G,oBAChDoB,KAAKC,YAAc,WACjB,OAAO,CACR,GAEDD,KAAKE,cAAgBF,KAAKjI,QAAQ4G,oBAAoB7F,OACtDkH,KAAKC,YAAcA,GAGrBD,KAAKG,qBAAuBA,EAExBH,KAAKjI,QAAQiH,QACfgB,KAAKI,UAAYA,EACjBJ,KAAKK,WAAa,MAClBL,KAAKM,QAAU,OAEfN,KAAKI,UAAY,WACf,MAAO,EACR,EACDJ,KAAKK,WAAa,IAClBL,KAAKM,QAAU,GAElB,CAqGD,SAASH,EAAsBI,EAAQjB,EAAKkB,GAC1C,IAAM5D,EAASoD,KAAKS,IAAIF,EAAQC,EAAQ,GACxC,YAA0CpI,IAAtCmI,EAAOP,KAAKjI,QAAQ8G,eAA8D,IAA/B7G,OAAO8B,KAAKyG,GAAQzH,OAClEkH,KAAKU,iBAAiBH,EAAOP,KAAKjI,QAAQ8G,cAAeS,EAAK1C,EAAOb,QAASyE,GAE9ER,KAAKW,gBAAgB/D,EAAO+C,IAAKL,EAAK1C,EAAOb,QAASyE,EAEhE,CAuFD,SAASJ,EAAUI,GACjB,OAAOR,KAAKjI,QAAQkH,SAAS2B,OAAOJ,EACrC,CAED,SAASP,EAAYY,GACnB,SAAIA,EAAKC,WAAWd,KAAKjI,QAAQ4G,sBAAwBkC,IAASb,KAAKjI,QAAQ8G,eACtEgC,EAAK9H,OAAOiH,KAAKE,cAI3B,CA3MDH,EAAQgB,UAAUC,MAAQ,SAASC,GACjC,OAAGjB,KAAKjI,QAAQyH,cACPd,EAAmBuC,EAAMjB,KAAKjI,UAElCmJ,MAAMC,QAAQF,IAASjB,KAAKjI,QAAQqJ,eAAiBpB,KAAKjI,QAAQqJ,cAActI,OAAS,KACtF,MACDkH,KAAKjI,QAAQqJ,eAAiBH,EADjCA,EAAI,GAICjB,KAAKS,IAAIQ,EAAM,GAAGtB,KALsE,IAAD,CAOjG,EAEDI,EAAQgB,UAAUN,IAAM,SAASQ,EAAMT,GACrC,IAAIzE,EAAU,GACV4D,EAAM,GACV,IAAK,IAAIL,KAAO2B,EACd,GAAIjJ,OAAO+I,UAAU7C,eAAemD,KAAKJ,EAAM3B,GAC/C,QAAyB,IAAd2B,EAAK3B,GAEVU,KAAKC,YAAYX,KACnBK,GAAO,SAEJ,GAAkB,OAAdsB,EAAK3B,GAEVU,KAAKC,YAAYX,GACnBK,GAAO,GACa,MAAXL,EAAI,GACbK,GAAOK,KAAKI,UAAUI,GAAS,IAAMlB,EAAM,IAAMU,KAAKK,WAEtDV,GAAOK,KAAKI,UAAUI,GAAS,IAAMlB,EAAM,IAAMU,KAAKK,gBAGnD,GAAIY,EAAK3B,aAAgBgC,KAC9B3B,GAAOK,KAAKU,iBAAiBO,EAAK3B,GAAMA,EAAK,GAAIkB,QAC5C,GAAyB,iBAAdS,EAAK3B,GAAmB,CAExC,IAAMiC,EAAOvB,KAAKC,YAAYX,GAC9B,GAAIiC,EACFxF,GAAWiE,KAAKwB,iBAAiBD,EAAM,GAAKN,EAAK3B,SAGjD,GAAIA,IAAQU,KAAKjI,QAAQ8G,aAAc,CACrC,IAAI4C,EAASzB,KAAKjI,QAAQsH,kBAAkBC,EAAK,GAAK2B,EAAK3B,IAC3DK,GAAOK,KAAK0B,qBAAqBD,EAClC,MACC9B,GAAOK,KAAKU,iBAAiBO,EAAK3B,GAAMA,EAAK,GAAIkB,EAGtD,MAAM,GAAIU,MAAMC,QAAQF,EAAK3B,IAAO,CAInC,IAFA,IAAMqC,EAASV,EAAK3B,GAAKxG,OACrB8I,EAAa,GACRC,EAAI,EAAGA,EAAIF,EAAQE,IAAK,CAC/B,IAAMC,EAAOb,EAAK3B,GAAKuC,QACH,IAATC,IAES,OAATA,EACK,MAAXxC,EAAI,GAAYK,GAAOK,KAAKI,UAAUI,GAAS,IAAMlB,EAAM,IAAMU,KAAKK,WACpEV,GAAOK,KAAKI,UAAUI,GAAS,IAAMlB,EAAM,IAAMU,KAAKK,WAElC,iBAATyB,EACb9B,KAAKjI,QAAQ+H,aACd8B,GAAc5B,KAAKS,IAAIqB,EAAMtB,EAAQ,GAAGb,IAExCiC,GAAc5B,KAAKG,qBAAqB2B,EAAMxC,EAAKkB,GAGrDoB,GAAc5B,KAAKU,iBAAiBoB,EAAMxC,EAAK,GAAIkB,GAEtD,CACER,KAAKjI,QAAQ+H,eACd8B,EAAa5B,KAAKW,gBAAgBiB,EAAYtC,EAAK,GAAIkB,IAEzDb,GAAOiC,CACR,MAEC,GAAI5B,KAAKjI,QAAQ6G,qBAAuBU,IAAQU,KAAKjI,QAAQ6G,oBAG3D,IAFA,IAAMmD,EAAK/J,OAAO8B,KAAKmH,EAAK3B,IACtB0C,EAAID,EAAGjJ,OACJ+I,EAAI,EAAGA,EAAIG,EAAGH,IACrB9F,GAAWiE,KAAKwB,iBAAiBO,EAAGF,GAAI,GAAKZ,EAAK3B,GAAKyC,EAAGF,UAG5DlC,GAAOK,KAAKG,qBAAqBc,EAAK3B,GAAMA,EAAKkB,GAIvD,MAAO,CAACzE,QAASA,EAAS4D,IAAKA,EAChC,EAEDI,EAAQgB,UAAUS,iBAAmB,SAASxD,EAAU2B,GAGtD,OAFAA,EAAMK,KAAKjI,QAAQwH,wBAAwBvB,EAAU,GAAK2B,GAC1DA,EAAMK,KAAK0B,qBAAqB/B,GAC5BK,KAAKjI,QAAQqH,2BAAqC,SAARO,EACrC,IAAM3B,EACD,IAAMA,EAAW,KAAO2B,EAAM,GAC7C,EAWDI,EAAQgB,UAAUJ,gBAAkB,SAAShB,EAAKL,EAAKvD,EAASyE,GAC9D,GAAW,KAARb,EACD,MAAc,MAAXL,EAAI,GAAoBU,KAAKI,UAAUI,GAAS,IAAMlB,EAAMvD,EAAS,IAAMiE,KAAKK,WAE1EL,KAAKI,UAAUI,GAAS,IAAMlB,EAAMvD,EAAUiE,KAAKiC,SAAS3C,GAAOU,KAAKK,WAIjF,IAAI6B,EAAY,KAAO5C,EAAMU,KAAKK,WAC9B8B,EAAgB,GAQpB,MANc,MAAX7C,EAAI,KACL6C,EAAgB,IAChBD,EAAY,KAITnG,GAAuB,KAAZA,IAAyC,IAAtB4D,EAAI/G,QAAQ,MAEH,IAAjCoH,KAAKjI,QAAQ0H,iBAA6BH,IAAQU,KAAKjI,QAAQ0H,iBAA4C,IAAzB0C,EAAcrJ,OAClGkH,KAAKI,UAAUI,GAAf,UAA+Bb,EAA/B,SAA0CK,KAAKM,QAGpDN,KAAKI,UAAUI,GAAS,IAAMlB,EAAMvD,EAAUoG,EAAgBnC,KAAKK,WACnEV,EACAK,KAAKI,UAAUI,GAAS0B,EAPjBlC,KAAKI,UAAUI,GAAS,IAAOlB,EAAMvD,EAAUoG,EAAgB,IAAMxC,EAAMuC,CAUzF,EAEDnC,EAAQgB,UAAUkB,SAAW,SAAS3C,GACpC,IAAI2C,EAAW,GAQf,OAP+C,IAA5CjC,KAAKjI,QAAQoD,aAAavC,QAAQ0G,GAC/BU,KAAKjI,QAAQoH,uBAAsB8C,EAAW,KAElDA,EADOjC,KAAKjI,QAAQmH,kBACT,IAEH,MAASI,EAEZ2C,CACR,EAcDlC,EAAQgB,UAAUL,iBAAmB,SAASf,EAAKL,EAAKvD,EAASyE,GAC/D,IAAmC,IAA/BR,KAAKjI,QAAQgH,eAA2BO,IAAQU,KAAKjI,QAAQgH,cAC/D,OAAOiB,KAAKI,UAAUI,GAAf,YAAoCb,EAApC,MAAgDK,KAAKM,QACxD,IAAqC,IAAjCN,KAAKjI,QAAQ0H,iBAA6BH,IAAQU,KAAKjI,QAAQ0H,gBACvE,OAAOO,KAAKI,UAAUI,GAAf,UAA+Bb,EAA/B,SAA2CK,KAAKM,QACnD,GAAc,MAAXhB,EAAI,GACX,OAAQU,KAAKI,UAAUI,GAAS,IAAMlB,EAAMvD,EAAS,IAAMiE,KAAKK,WAEhE,IAAI+B,EAAYpC,KAAKjI,QAAQsH,kBAAkBC,EAAKK,GAGpD,MAAkB,MAFlByC,EAAYpC,KAAK0B,qBAAqBU,IAG7BpC,KAAKI,UAAUI,GAAS,IAAMlB,EAAMvD,EAAUiE,KAAKiC,SAAS3C,GAAOU,KAAKK,WAExEL,KAAKI,UAAUI,GAAS,IAAMlB,EAAMvD,EAAU,IAClDqG,EACD,KAAO9C,EAAMU,KAAKK,UAGzB,EAEDN,EAAQgB,UAAUW,qBAAuB,SAASU,GAChD,GAAGA,GAAaA,EAAUtJ,OAAS,GAAKkH,KAAKjI,QAAQ6H,gBACnD,IAAK,IAAIxF,EAAE,EAAGA,EAAE4F,KAAKjI,QAAQ2H,SAAS5G,OAAQsB,IAAK,CACjD,IAAMiI,EAASrC,KAAKjI,QAAQ2H,SAAStF,GACrCgI,EAAYA,EAAUvJ,QAAQwJ,EAAO5H,MAAO4H,EAAO1C,IACpD,CAEH,OAAOyC,CACR,EAcDxK,EAAOC,QAAUkI,C,UC7PjB,SAASuC,EAASC,EAAKxK,EAASyK,EAAOC,GAInC,IAHA,IAAIC,EAAS,GACTC,GAAuB,EAElBvI,EAAI,EAAGA,EAAImI,EAAIzJ,OAAQsB,IAAK,CACjC,IAAMwI,EAASL,EAAInI,GACbsC,EAAUmG,EAASD,GACzB,QAAexK,IAAZsE,EAAH,CAEA,IAAIoG,EAIJ,GAHwBA,EAAH,IAAjBN,EAAM1J,OAAyB4D,EAChB8F,EAAN,IAAe9F,EAExBA,IAAY3E,EAAQ8G,aAYjB,GAAInC,IAAY3E,EAAQgH,cAOxB,GAAIrC,IAAY3E,EAAQ0H,gBAIxB,GAAmB,MAAf/C,EAAQ,GAAZ,CASP,IAAIqG,EAAgBN,EACE,KAAlBM,IACAA,GAAiBhL,EAAQkH,UAE7B,IACM+D,EAAWP,EAAW,IAAO/F,EADpBuG,EAAYL,EAAO,MAAO7K,GAEnCmL,EAAWZ,EAASM,EAAOlG,GAAU3E,EAAS+K,EAAUC,IACf,IAA3ChL,EAAQoD,aAAavC,QAAQ8D,GACzB3E,EAAQoH,qBAAsBuD,GAAUM,EAAW,IAClDN,GAAUM,EAAW,KACjBE,GAAgC,IAApBA,EAASpK,SAAiBf,EAAQmH,kBAEhDgE,GAAYA,EAASC,SAAS,KACrCT,GAAUM,EAAQ,IAAOE,EAAWT,EAAlB,KAAkC/F,EAAlC,KAElBgG,GAAUM,EAAW,IACjBE,GAA4B,KAAhBT,IAAuBS,EAASE,SAAS,OAASF,EAASE,SAAS,OAChFV,GAAUD,EAAc1K,EAAQkH,SAAWiE,EAAWT,EAEtDC,GAAUQ,EAEdR,GAAM,KAAShG,EAAT,KAVNgG,GAAUM,EAAW,KAYzBL,GAAuB,CAxBtB,KARM,CACH,IAAMU,EAASJ,EAAYL,EAAO,MAAO7K,GACnCuL,EAAsB,SAAZ5G,EAAqB,GAAK+F,EACtCc,EAAiBX,EAAOlG,GAAS,GAAG3E,EAAQ8G,cAEhD6D,GAAUY,EAAO,IAAO5G,GADxB6G,EAA2C,IAA1BA,EAAezK,OAAe,IAAMyK,EAAiB,IACnBF,EAAlC,KACjBV,GAAuB,CAE1B,MAXGD,GAAUD,EAAW,UAAUG,EAAOlG,GAAS,GAAG3E,EAAQ8G,cAArC,SACrB8D,GAAuB,OARnBA,IACAD,GAAUD,GAEdC,GAAM,YAAgBE,EAAOlG,GAAS,GAAG3E,EAAQ8G,cAA3C,MACN8D,GAAuB,MAjB3B,CACI,IAAIa,EAAUZ,EAAOlG,GAChB+G,EAAWX,EAAU/K,KAEtByL,EAAU9B,EADV8B,EAAUzL,EAAQsH,kBAAkB3C,EAAS8G,GACLzL,IAExC4K,IACAD,GAAUD,GAEdC,GAAUc,EACVb,GAAuB,CAqB1B,CArCiC,CA8DrC,CAED,OAAOD,CACV,CAED,SAASG,EAAShJ,GAEd,IADA,IAAMC,EAAO9B,OAAO8B,KAAKD,GAChBO,EAAI,EAAGA,EAAIN,EAAKhB,OAAQsB,IAAK,CAClC,IAAMkF,EAAMxF,EAAKM,GACjB,GAAIP,EAAIqE,eAAeoB,IACX,OAARA,EAAc,OAAOA,CAC5B,CACJ,CAED,SAAS2D,EAAYS,EAAS3L,GAC1B,IAAIgE,EAAU,GACd,GAAI2H,IAAY3L,EAAQ+G,iBACpB,IAAK,IAAIyC,KAAQmC,EACb,GAAIA,EAAQxF,eAAeqD,GAA3B,CACA,IAAIoC,EAAU5L,EAAQwH,wBAAwBgC,EAAMmC,EAAQnC,KAE5C,KADhBoC,EAAUjC,EAAqBiC,EAAS5L,KAChBA,EAAQqH,0BAC5BrD,GAAO,IAAQwF,EAAKxI,OAAOhB,EAAQ4G,oBAAoB7F,QAEvDiD,GAAO,IAAQwF,EAAKxI,OAAOhB,EAAQ4G,oBAAoB7F,QAAhD,KAA4D6K,EAA5D,GAN+B,CAUlD,OAAO5H,CACV,CAED,SAAS0H,EAAWjB,EAAOzK,GAEvB,IAAI2E,GADJ8F,EAAQA,EAAMzJ,OAAO,EAAGyJ,EAAM1J,OAASf,EAAQ8G,aAAa/F,OAAS,IACjDC,OAAOyJ,EAAMoB,YAAY,KAAO,GACpD,IAAK,IAAI9I,KAAS/C,EAAQ8H,UACtB,GAAI9H,EAAQ8H,UAAU/E,KAAW0H,GAASzK,EAAQ8H,UAAU/E,KAAW,KAAO4B,EAAS,OAAO,EAElG,OAAO,CACV,CAED,SAASgF,EAAqBU,EAAWrK,GACrC,GAAIqK,GAAaA,EAAUtJ,OAAS,GAAKf,EAAQ6H,gBAC7C,IAAK,IAAIxF,EAAI,EAAGA,EAAIrC,EAAQ2H,SAAS5G,OAAQsB,IAAK,CAC9C,IAAMiI,EAAStK,EAAQ2H,SAAStF,GAChCgI,EAAYA,EAAUvJ,QAAQwJ,EAAO5H,MAAO4H,EAAO1C,IACtD,CAEL,OAAOyC,CACV,CACDxK,EAAOC,QA9HP,SAAegM,EAAQ9L,GACnB,IAAI0K,EAAc,GAIlB,OAHI1K,EAAQiH,QAAUjH,EAAQkH,SAASnG,OAAS,IAC5C2J,EAXI,MAaDH,EAASuB,EAAQ9L,EAAS,GAAI0K,EACxC,C,gBCdD,IAAMzH,EAAO7B,EAAQ,KA+DrB,SAAS2K,EAAcvI,EAAQnB,GAY3B,IADA,IAAI2J,EAAa,GACV3J,EAAImB,EAAQzC,QAA0B,MAAfyC,EAAQnB,IAA6B,MAAfmB,EAAQnB,GAAcA,IAGtE2J,GAAcxI,EAAQnB,GAG1B,IAAgC,KADhC2J,EAAaA,EAAW5L,QACVS,QAAQ,KAAa,MAAM,IAAIoL,MAAM,sCAKnD,IAFA,IAAMhI,EAAYT,EAAQnB,KACtBuF,EAAM,GACHvF,EAAImB,EAAQzC,QAAUyC,EAAQnB,KAAO4B,EAAY5B,IACpDuF,GAAOpE,EAAQnB,GAEnB,MAAO,CAAC2J,EAAYpE,EAAKvF,EAC5B,CAED,SAAS6J,EAAU1I,EAASnB,GACxB,MAAoB,MAAjBmB,EAAQnB,EAAE,IACI,MAAjBmB,EAAQnB,EAAE,IACO,MAAjBmB,EAAQnB,EAAE,EAEb,CACD,SAAS8J,EAAS3I,EAASnB,GACvB,MAAoB,MAAjBmB,EAAQnB,EAAE,IACI,MAAjBmB,EAAQnB,EAAE,IACO,MAAjBmB,EAAQnB,EAAE,IACO,MAAjBmB,EAAQnB,EAAE,IACO,MAAjBmB,EAAQnB,EAAE,IACO,MAAjBmB,EAAQnB,EAAE,IACO,MAAjBmB,EAAQnB,EAAE,EAEb,CACD,SAAS+J,EAAU5I,EAASnB,GACxB,MAAoB,MAAjBmB,EAAQnB,EAAE,IACI,MAAjBmB,EAAQnB,EAAE,IACO,MAAjBmB,EAAQnB,EAAE,IACO,MAAjBmB,EAAQnB,EAAE,IACO,MAAjBmB,EAAQnB,EAAE,IACO,MAAjBmB,EAAQnB,EAAE,IACO,MAAjBmB,EAAQnB,EAAE,IACO,MAAjBmB,EAAQnB,EAAE,EAEb,CAED,SAASgK,EAAU7I,EAASnB,GACxB,MAAoB,MAAjBmB,EAAQnB,EAAE,IACI,MAAjBmB,EAAQnB,EAAE,IACO,MAAjBmB,EAAQnB,EAAE,IACO,MAAjBmB,EAAQnB,EAAE,IACO,MAAjBmB,EAAQnB,EAAE,IACO,MAAjBmB,EAAQnB,EAAE,IACO,MAAjBmB,EAAQnB,EAAE,IACO,MAAjBmB,EAAQnB,EAAE,EAEb,CACD,SAASiK,EAAW9I,EAASnB,GACzB,MAAoB,MAAjBmB,EAAQnB,EAAE,IACI,MAAjBmB,EAAQnB,EAAE,IACO,MAAjBmB,EAAQnB,EAAE,IACO,MAAjBmB,EAAQnB,EAAE,IACO,MAAjBmB,EAAQnB,EAAE,IACO,MAAjBmB,EAAQnB,EAAE,IACO,MAAjBmB,EAAQnB,EAAE,IACO,MAAjBmB,EAAQnB,EAAE,IACO,MAAjBmB,EAAQnB,EAAE,EAEb,CAED,SAASkK,EAAmBzD,GACxB,GAAI7F,EAAKV,OAAOuG,GACnB,OAAOA,EAEA,MAAM,IAAImD,MAAJ,uBAAiCnD,EAC9C,CAEDjJ,EAAOC,QApJP,SAAqB0D,EAASnB,GAE1B,IAAMsF,EAAW,CAAC,EAClB,GAAuB,MAAnBnE,EAAQnB,EAAI,IACQ,MAAnBmB,EAAQnB,EAAI,IACO,MAAnBmB,EAAQnB,EAAI,IACO,MAAnBmB,EAAQnB,EAAI,IACO,MAAnBmB,EAAQnB,EAAI,IACO,MAAnBmB,EAAQnB,EAAI,GA+Cb,MAAM,IAAI4J,MAAJ,kCA7CN5J,GAAM,EAIN,IAHA,IAAIyB,EAAqB,EACrB0I,GAAU,EAAOC,GAAU,EAE1BpK,EAAEmB,EAAQzC,OAAOsB,IAClB,GAAmB,MAAfmB,EAAQnB,IAAeoK,EAkBpB,GAAmB,MAAfjJ,EAAQnB,IASf,GARGoK,EACwB,MAAnBjJ,EAAQnB,EAAI,IAAiC,MAAnBmB,EAAQnB,EAAI,KACtCoK,GAAU,EACV3I,KAGJA,IAEuB,IAAvBA,EACF,UAEmB,MAAfN,EAAQnB,GACdmK,GAAU,EAEHhJ,EAAQnB,OAjCiB,CAChC,GAAImK,GAAWL,EAAS3I,EAASnB,GAAG,OAEV0J,EAAcvI,GADpCnB,GAAK,GACyC,GAA7C2J,WAF+B,KAEnBpE,IAFmB,KAEfvF,EAFe,MAGP,IAAtBuF,IAAI/G,QAAQ,OACX8G,EAAU4E,EAAmBP,aAAgB,CACzCU,KAAOhL,OAAO,IAAKsK,WAAN,IAAoB,KACjCpE,KAEX,MACI,GAAI4E,GAAWJ,EAAU5I,EAASnB,GAAKA,GAAK,OAC5C,GAAImK,GAAWH,EAAU7I,EAASnB,GAAKA,GAAK,OAC5C,GAAImK,GAAWF,EAAW9I,EAASnB,GAAIA,GAAK,MAC5C,KAAI6J,EACmC,MAAM,IAAID,MAAM,mBADhBQ,GAAU,CACV,CAE5C3I,GAEH,CAkBL,GAA0B,IAAvBA,EACC,MAAM,IAAImI,MAAJ,oBAKd,MAAO,CAACtE,SAAAA,EAAUtF,EAAAA,EACrB,C,cC5DD,IAAMa,EAAiB,CACnBuE,eAAe,EACfb,oBAAqB,KACrBC,qBAAqB,EACrBC,aAAc,QACdC,kBAAkB,EAClB4F,gBAAgB,EAChBxJ,wBAAwB,EAExByJ,eAAe,EACfC,qBAAqB,EACrBC,YAAY,EACZ9F,eAAe,EACf+F,mBAAoB,CAClBtN,KAAK,EACLC,cAAc,EACdE,WAAW,GAEb0H,kBAAmB,SAAS3C,EAASiD,GACnC,OAAOA,CACR,EACDJ,wBAAyB,SAASvB,EAAU2B,GAC1C,OAAOA,CACR,EACDE,UAAW,GACXkF,sBAAsB,EACtB5D,QAAS,kBAAM,CAAN,EACT1B,iBAAiB,EACjBtE,aAAc,GACdyE,iBAAiB,EACjBoF,cAAc,EACdC,mBAAmB,EACnBC,cAAc,EACdC,kBAAkB,EAClBC,wBAAwB,EACxBC,UAAW,SAAS3I,EAAS8F,EAAO8C,GAClC,OAAO5I,CACR,GAQL7E,EAAQ0N,aAJa,SAASxN,GAC1B,OAAOC,OAAOC,OAAO,CAAC,EAAGgD,EAAgBlD,EAC5C,EAGDF,EAAQoD,eAAiBA,C,6BC5CzB,IAAMD,EAAO7B,EAAQ,KACfqM,EAAUrM,EAAQ,KAClBsM,EAActM,EAAQ,KACtBuM,EAAWvM,EAAQ,KAmDzB,SAASwM,EAAoBC,GAE3B,IADA,IAAMC,EAAU7N,OAAO8B,KAAK8L,GACnBxL,EAAI,EAAGA,EAAIyL,EAAQ/M,OAAQsB,IAAK,CACvC,IAAM0L,EAAMD,EAAQzL,GACpB4F,KAAK+F,aAAaD,GAAO,CACtBrL,MAAO,IAAIhB,OAAO,IAAIqM,EAAI,IAAI,KAC9BnG,IAAMiG,EAAiBE,GAE3B,CACF,CAWD,SAASE,EAAcrG,EAAKjD,EAAS8F,EAAOyD,EAAUC,EAAeC,EAAYC,GAC/E,QAAYhO,IAARuH,IACEK,KAAKjI,QAAQ8M,aAAeoB,IAC9BtG,EAAMA,EAAIxH,QAETwH,EAAI7G,OAAS,GAAE,CACZsN,IAAgBzG,EAAMK,KAAK0B,qBAAqB/B,IAEpD,IAAM8B,EAASzB,KAAKjI,QAAQsH,kBAAkB3C,EAASiD,EAAK6C,EAAO0D,EAAeC,GAClF,OAAG1E,QAEM9B,SACO8B,UAAkB9B,GAAO8B,IAAW9B,EAE3C8B,EACAzB,KAAKjI,QAAQ8M,YAGDlF,EAAIxH,SACLwH,EAHX0G,EAAW1G,EAAKK,KAAKjI,QAAQ4M,cAAe3E,KAAKjI,QAAQ+M,oBAMvDnF,CAGZ,CAEJ,CAED,SAAS2G,EAAiB7K,GACxB,GAAIuE,KAAKjI,QAAQ2M,eAAgB,CAC/B,IAAMtI,EAAOX,EAAQgD,MAAM,KACrB8H,EAA+B,MAAtB9K,EAAQ+K,OAAO,GAAa,IAAM,GACjD,GAAgB,UAAZpK,EAAK,GACP,MAAO,GAEW,IAAhBA,EAAKtD,SACP2C,EAAU8K,EAASnK,EAAK,GAE3B,CACD,OAAOX,CACR,CA7GC,wFACC5C,QAAQ,QAASmC,EAAKzB,YAgHzB,IAAMkN,EAAY,IAAIhN,OAAO,+CAAgD,MAE7E,SAASiN,EAAmB3K,EAASyG,EAAO9F,GAC1C,IAAKsD,KAAKjI,QAAQ+G,kBAAuC,iBAAZ/C,EAAsB,CAOjE,IAHA,IAAMrB,EAAUM,EAAKR,cAAcuB,EAAS0K,GACtCtM,EAAMO,EAAQ5B,OACdwM,EAAQ,CAAC,EACNlL,EAAI,EAAGA,EAAID,EAAKC,IAAK,CAC5B,IAAM4D,EAAWgC,KAAKsG,iBAAiB5L,EAAQN,GAAG,IAC9CuM,EAASjM,EAAQN,GAAG,GACpBwM,EAAQ5G,KAAKjI,QAAQ4G,oBAAsBX,EAC/C,GAAIA,EAASlF,OAKX,GAJIkH,KAAKjI,QAAQqN,yBACfwB,EAAQ5G,KAAKjI,QAAQqN,uBAAuBwB,IAEjC,cAAVA,IAAuBA,EAAS,mBACpBxO,IAAXuO,EAAsB,CACpB3G,KAAKjI,QAAQ8M,aACf8B,EAASA,EAAOxO,QAElBwO,EAAS3G,KAAK0B,qBAAqBiF,GACnC,IAAME,EAAS7G,KAAKjI,QAAQwH,wBAAwBvB,EAAU2I,EAAQnE,GAGpE8C,EAAMsB,GAFLC,QAEcF,SACDE,UAAkBF,GAAUE,IAAWF,EAEtCE,EAGAR,EACbM,EACA3G,KAAKjI,QAAQ6M,oBACb5E,KAAKjI,QAAQ+M,mBAGlB,MAAU9E,KAAKjI,QAAQmD,yBACtBoK,EAAMsB,IAAS,EAGpB,CACD,IAAK5O,OAAO8B,KAAKwL,GAAOxM,OACtB,OAEF,GAAIkH,KAAKjI,QAAQ6G,oBAAqB,CACpC,IAAMkI,EAAiB,CAAC,EAExB,OADAA,EAAe9G,KAAKjI,QAAQ6G,qBAAuB0G,EAC5CwB,CACR,CACD,OAAOxB,CACR,CACF,CAED,IAAMyB,EAAW,SAASxL,GACxBA,EAAUA,EAAQ1C,QAAQ,SAAU,MAKpC,IAJA,IAAMmO,EAAS,IAAIxB,EAAQ,QACvByB,EAAcD,EACdE,EAAW,GACX1E,EAAQ,GACJpI,EAAE,EAAGA,EAAGmB,EAAQzC,OAAQsB,IAE9B,GAAU,MADCmB,EAAQnB,GAIjB,GAAqB,MAAjBmB,EAAQnB,EAAE,GAAY,CACxB,IAAM+M,EAAaC,EAAiB7L,EAAS,IAAKnB,EAAG,8BACjDsC,EAAUnB,EAAQoB,UAAUvC,EAAE,EAAE+M,GAAYhP,OAEhD,GAAG6H,KAAKjI,QAAQ2M,eAAe,CAC7B,IAAM2C,EAAa3K,EAAQ9D,QAAQ,MAChB,IAAhByO,IACD3K,EAAUA,EAAQ3D,OAAOsO,EAAW,GAEvC,CAEErH,KAAKjI,QAAQoN,mBACdzI,EAAUsD,KAAKjI,QAAQoN,iBAAiBzI,IAGvCuK,IACDC,EAAWlH,KAAKsH,oBAAoBJ,EAAUD,EAAazE,IAI7D,IAAM+E,EAAc/E,EAAM7F,UAAU6F,EAAMoB,YAAY,KAAK,GAC3D,GAAGlH,IAA2D,IAAhDsD,KAAKjI,QAAQoD,aAAavC,QAAQ8D,GAC9C,MAAM,IAAIsH,MAAJ,kDAA4DtH,EAA5D,KAER,IAAI8K,EAAY,EACbD,IAAmE,IAApDvH,KAAKjI,QAAQoD,aAAavC,QAAQ2O,IAClDC,EAAYhF,EAAMoB,YAAY,IAAKpB,EAAMoB,YAAY,KAAK,GAC1D5D,KAAKyH,cAAcrK,OAEnBoK,EAAYhF,EAAMoB,YAAY,KAEhCpB,EAAQA,EAAM7F,UAAU,EAAG6K,GAE3BP,EAAcjH,KAAKyH,cAAcrK,MACjC8J,EAAW,GACX9M,EAAI+M,CACL,MAAM,GAAqB,MAAjB5L,EAAQnB,EAAE,GAAY,CAE/B,IAAIsN,EAAUC,EAAWpM,EAAQnB,GAAG,EAAO,MAC3C,IAAIsN,EAAS,MAAM,IAAI1D,MAAM,yBAG7B,GADAkD,EAAWlH,KAAKsH,oBAAoBJ,EAAUD,EAAazE,GACtDxC,KAAKjI,QAAQkN,mBAAyC,SAApByC,EAAQhL,SAAuBsD,KAAKjI,QAAQmN,kBAE9E,CAEH,IAAM0C,EAAY,IAAIpC,EAAQkC,EAAQhL,SACtCkL,EAAUC,IAAI7H,KAAKjI,QAAQ8G,aAAc,IAEtC6I,EAAQhL,UAAYgL,EAAQI,QAAUJ,EAAQK,iBAC/CH,EAAU,MAAQ5H,KAAK0G,mBAAmBgB,EAAQI,OAAQtF,EAAOkF,EAAQhL,UAE3EsD,KAAKgI,SAASf,EAAaW,EAAWpF,EAEvC,CAGDpI,EAAIsN,EAAQP,WAAa,CAC1B,MAAM,GAAgC,QAA7B5L,EAAQxC,OAAOqB,EAAI,EAAG,GAAc,CAC5C,IAAM6N,EAAWb,EAAiB7L,EAAS,SAAOnB,EAAE,EAAG,0BACvD,GAAG4F,KAAKjI,QAAQ0H,gBAAgB,CAAC,IAAD,EACxB+E,EAAUjJ,EAAQoB,UAAUvC,EAAI,EAAG6N,EAAW,GAEpDf,EAAWlH,KAAKsH,oBAAoBJ,EAAUD,EAAazE,GAE3DyE,EAAYY,IAAI7H,KAAKjI,QAAQ0H,gBAAiB,SAAKO,KAAKjI,QAAQ8G,cAAgB2F,EAAlC,IAC/C,CACDpK,EAAI6N,CACL,MAAM,GAAiC,OAA7B1M,EAAQxC,OAAOqB,EAAI,EAAG,GAAa,CAC5C,IAAMwC,EAAS6I,EAAYlK,EAASnB,GACpC4F,KAAKkI,gBAAkBtL,EAAO8C,SAC9BtF,EAAIwC,EAAOxC,CACZ,MAAK,GAAgC,OAA7BmB,EAAQxC,OAAOqB,EAAI,EAAG,GAAa,CAC1C,IAAM+M,EAAaC,EAAiB7L,EAAS,MAAOnB,EAAG,wBAA0B,EAC3E0N,EAASvM,EAAQoB,UAAUvC,EAAI,EAAE+M,GAKvC,GAHAD,EAAWlH,KAAKsH,oBAAoBJ,EAAUD,EAAazE,GAGxDxC,KAAKjI,QAAQgH,cAAc,CAAC,IAAD,EAG5BkI,EAAYY,IAAI7H,KAAKjI,QAAQgH,cAAe,SAAKiB,KAAKjI,QAAQ8G,cAAgBiJ,EAAlC,IAC7C,KAAI,CACH,IAAInI,EAAMK,KAAKgG,cAAc8B,EAAQb,EAAYxL,QAAS+G,GAAO,GAAM,GAAO,GACpEpK,MAAPuH,IAAkBA,EAAM,IAC3BsH,EAAYY,IAAI7H,KAAKjI,QAAQ8G,aAAcc,EAC5C,CAEDvF,EAAI+M,EAAa,CAClB,KAAK,CACJ,IAAIvK,EAAS+K,EAAWpM,EAAQnB,EAAG4F,KAAKjI,QAAQ2M,gBAC5ChI,EAASE,EAAOF,QACdyL,EAAavL,EAAOuL,WACtBL,EAASlL,EAAOkL,OAChBC,EAAiBnL,EAAOmL,eACxBZ,EAAavK,EAAOuK,WAEpBnH,KAAKjI,QAAQoN,mBACfzI,EAAUsD,KAAKjI,QAAQoN,iBAAiBzI,IAItCuK,GAAeC,GACU,SAAxBD,EAAYxL,UAEbyL,EAAWlH,KAAKsH,oBAAoBJ,EAAUD,EAAazE,GAAO,IAKtE,IAAM4F,EAAUnB,EAQhB,GAPGmB,IAAmE,IAAxDpI,KAAKjI,QAAQoD,aAAavC,QAAQwP,EAAQ3M,WACtDwL,EAAcjH,KAAKyH,cAAcrK,MACjCoF,EAAQA,EAAM7F,UAAU,EAAG6F,EAAMoB,YAAY,OAE5ClH,IAAYsK,EAAOvL,UACpB+G,GAASA,EAAQ,IAAM9F,EAAUA,GAE/BsD,KAAKqI,aAAarI,KAAKjI,QAAQ8H,UAAW2C,EAAO9F,GAAU,CAC7D,IAAI4L,EAAa,GAEjB,GAAGR,EAAOhP,OAAS,GAAKgP,EAAOlE,YAAY,OAASkE,EAAOhP,OAAS,EAClEsB,EAAIwC,EAAOuK,gBAGR,IAAmD,IAAhDnH,KAAKjI,QAAQoD,aAAavC,QAAQ8D,GACxCtC,EAAIwC,EAAOuK,eAGT,CAEF,IAAMvK,EAASoD,KAAKuI,iBAAiBhN,EAAS4M,EAAYhB,EAAa,GACvE,IAAIvK,EAAQ,MAAM,IAAIoH,MAAJ,qBAA+BmE,GACjD/N,EAAIwC,EAAOxC,EACXkO,EAAa1L,EAAO0L,UACrB,CAED,IAAMV,EAAY,IAAIpC,EAAQ9I,GAC3BA,IAAYoL,GAAUC,IACvBH,EAAU,MAAQ5H,KAAK0G,mBAAmBoB,EAAQtF,EAAO9F,IAExD4L,IACDA,EAAatI,KAAKgG,cAAcsC,EAAY5L,EAAS8F,GAAO,EAAMuF,GAAgB,GAAM,IAG1FvF,EAAQA,EAAMzJ,OAAO,EAAGyJ,EAAMoB,YAAY,MAC1CgE,EAAUC,IAAI7H,KAAKjI,QAAQ8G,aAAcyJ,GAEzCtI,KAAKgI,SAASf,EAAaW,EAAWpF,EACvC,KAAI,CAEH,GAAGsF,EAAOhP,OAAS,GAAKgP,EAAOlE,YAAY,OAASkE,EAAOhP,OAAS,EAAE,CACjC,MAAhC4D,EAAQA,EAAQ5D,OAAS,IAC1B4D,EAAUA,EAAQ3D,OAAO,EAAG2D,EAAQ5D,OAAS,GAC7C0J,EAAQA,EAAMzJ,OAAO,EAAGyJ,EAAM1J,OAAS,GACvCgP,EAASpL,GAEToL,EAASA,EAAO/O,OAAO,EAAG+O,EAAOhP,OAAS,GAGzCkH,KAAKjI,QAAQoN,mBACdzI,EAAUsD,KAAKjI,QAAQoN,iBAAiBzI,IAG1C,IAAMkL,EAAY,IAAIpC,EAAQ9I,GAC3BA,IAAYoL,GAAUC,IACvBH,EAAU,MAAQ5H,KAAK0G,mBAAmBoB,EAAQtF,EAAO9F,IAE3DsD,KAAKgI,SAASf,EAAaW,EAAWpF,GACtCA,EAAQA,EAAMzJ,OAAO,EAAGyJ,EAAMoB,YAAY,KAC3C,KAEG,CACF,IAAMgE,EAAY,IAAIpC,EAAS9I,GAC/BsD,KAAKyH,cAAc1M,KAAKkM,GAErBvK,IAAYoL,GAAUC,IACvBH,EAAU,MAAQ5H,KAAK0G,mBAAmBoB,EAAQtF,EAAO9F,IAE3DsD,KAAKgI,SAASf,EAAaW,EAAWpF,GACtCyE,EAAcW,CACf,CACDV,EAAW,GACX9M,EAAI+M,CACL,CACF,MAEDD,GAAY3L,EAAQnB,GAGxB,OAAO4M,EAAOwB,KACf,EAED,SAASR,EAASf,EAAaW,EAAWpF,GACxC,IAAM5F,EAASoD,KAAKjI,QAAQsN,UAAUuC,EAAUnM,QAAS+G,EAAOoF,EAAU,QAC5D,IAAXhL,IACwB,iBAAXA,GACdgL,EAAUnM,QAAUmB,EACpBqK,EAAYe,SAASJ,IAErBX,EAAYe,SAASJ,GAExB,CAED,IAAMlG,EAAuB,SAAS/B,GAEpC,GAAGK,KAAKjI,QAAQ6H,gBAAgB,CAC9B,IAAI,IAAImE,KAAc/D,KAAKkI,gBAAgB,CACzC,IAAM7F,EAASrC,KAAKkI,gBAAgBnE,GACpCpE,EAAMA,EAAI9G,QAASwJ,EAAOoC,KAAMpC,EAAO1C,IACxC,CACD,IAAI,IAAIoE,KAAc/D,KAAK+F,aAAa,CACtC,IAAM1D,EAASrC,KAAK+F,aAAahC,GACjCpE,EAAMA,EAAI9G,QAASwJ,EAAO5H,MAAO4H,EAAO1C,IACzC,CACD,GAAGK,KAAKjI,QAAQiN,aACd,IAAI,IAAIjB,KAAc/D,KAAKgF,aAAa,CACtC,IAAM3C,EAASrC,KAAKgF,aAAajB,GACjCpE,EAAMA,EAAI9G,QAASwJ,EAAO5H,MAAO4H,EAAO1C,IACzC,CAEHA,EAAMA,EAAI9G,QAASmH,KAAKyI,UAAUhO,MAAOuF,KAAKyI,UAAU9I,IACzD,CACD,OAAOA,CACR,EACD,SAAS2H,EAAoBJ,EAAUD,EAAazE,EAAO2D,GAezD,OAdIe,SACgB9O,IAAf+N,IAA0BA,EAAuD,IAA1CnO,OAAO8B,KAAKmN,EAAYuB,OAAO1P,aASxDV,KAPjB8O,EAAWlH,KAAKgG,cAAckB,EAC5BD,EAAYxL,QACZ+G,GACA,IACAyE,EAAY,OAAkD,IAA1CjP,OAAO8B,KAAKmN,EAAY,OAAOnO,OACnDqN,KAEyC,KAAbe,GAC5BD,EAAYY,IAAI7H,KAAKjI,QAAQ8G,aAAcqI,GAC7CA,EAAW,IAENA,CACR,CASD,SAASmB,EAAaxI,EAAW2C,EAAOkG,GACtC,IAAMC,EAAc,KAAOD,EAC3B,IAAK,IAAME,KAAgB/I,EAAW,CACpC,IAAMgJ,EAAchJ,EAAU+I,GAC9B,GAAID,IAAgBE,GAAerG,IAAUqG,EAAe,OAAO,CACpE,CACD,OAAO,CACR,CAsCD,SAASzB,EAAiB7L,EAASzD,EAAKsC,EAAG0O,GACzC,IAAMC,EAAexN,EAAQ3C,QAAQd,EAAKsC,GAC1C,IAAqB,IAAlB2O,EACD,MAAM,IAAI/E,MAAM8E,GAEhB,OAAOC,EAAejR,EAAIgB,OAAS,CAEtC,CAED,SAAS6O,EAAWpM,EAAQnB,EAAGsK,EAAgBsE,QAAkB,IAAlBA,IAAAA,EAAc,KAC3D,IAAMpM,EAxCR,SAAgCrB,EAASnB,EAAG4O,GAC1C,IAAIC,OADwD,IAAlBD,IAAAA,EAAc,KAGxD,IADA,IAAIlB,EAAS,GACJhN,EAAQV,EAAGU,EAAQS,EAAQzC,OAAQgC,IAAS,CACnD,IAAIoO,EAAK3N,EAAQT,GACjB,GAAImO,EACIC,IAAOD,IAAcA,EAAe,SACrC,GAAW,MAAPC,GAAqB,MAAPA,EACrBD,EAAeC,OACZ,GAAIA,IAAOF,EAAY,GAAI,CAChC,IAAGA,EAAY,GAQb,MAAO,CACLG,KAAMrB,EACNhN,MAAOA,GATT,GAAGS,EAAQT,EAAQ,KAAOkO,EAAY,GACpC,MAAO,CACLG,KAAMrB,EACNhN,MAAOA,EASd,KAAiB,OAAPoO,IACTA,EAAK,KAEPpB,GAAUoB,CACX,CACF,CAYgBE,CAAuB7N,EAASnB,EAAE,EAAG4O,GACpD,GAAIpM,EAAJ,CACA,IAAIkL,EAASlL,EAAOuM,KACdhC,EAAavK,EAAO9B,MACpBuO,EAAiBvB,EAAO7O,OAAO,MACjCyD,EAAUoL,EACVC,GAAiB,GACE,IAApBsB,IACD3M,EAAUoL,EAAO/O,OAAO,EAAGsQ,GAAgBxQ,QAAQ,SAAU,IAC7DiP,EAASA,EAAO/O,OAAOsQ,EAAiB,IAG1C,IAAMlB,EAAazL,EACnB,GAAGgI,EAAe,CAChB,IAAM2C,EAAa3K,EAAQ9D,QAAQ,MAChB,IAAhByO,IAEDU,GADArL,EAAUA,EAAQ3D,OAAOsO,EAAW,MACPzK,EAAOuM,KAAKpQ,OAAOsO,EAAa,GAEhE,CAED,MAAO,CACL3K,QAASA,EACToL,OAAQA,EACRX,WAAYA,EACZY,eAAgBA,EAChBI,WAAYA,EAzBI,CA2BnB,CAOD,SAASI,EAAiBhN,EAASmB,EAAStC,GAK1C,IAJA,IAAMQ,EAAaR,EAEfkP,EAAe,EAEZlP,EAAImB,EAAQzC,OAAQsB,IACzB,GAAmB,MAAfmB,EAAQnB,GACV,GAAqB,MAAjBmB,EAAQnB,EAAE,GAAY,CACtB,IAAM+M,EAAaC,EAAiB7L,EAAS,IAAKnB,EAAMsC,EAArB,kBAEnC,GADmBnB,EAAQoB,UAAUvC,EAAE,EAAE+M,GAAYhP,SACjCuE,GAEG,KADrB4M,EAEE,MAAO,CACLhB,WAAY/M,EAAQoB,UAAU/B,EAAYR,GAC1CA,EAAI+M,GAIV/M,EAAE+M,CACH,MAAM,GAAoB,MAAjB5L,EAAQnB,EAAE,GAElBA,EADmBgN,EAAiB7L,EAAS,KAAMnB,EAAE,EAAG,gCAEnD,GAAgC,QAA7BmB,EAAQxC,OAAOqB,EAAI,EAAG,GAE9BA,EADmBgN,EAAiB7L,EAAS,SAAOnB,EAAE,EAAG,gCAEpD,GAAgC,OAA7BmB,EAAQxC,OAAOqB,EAAI,EAAG,GAE9BA,EADmBgN,EAAiB7L,EAAS,MAAOnB,EAAG,2BAA6B,MAE/E,CACL,IAAMsN,EAAUC,EAAWpM,EAASnB,EAAG,KAEnCsN,KACkBA,GAAWA,EAAQhL,WACnBA,GAAuD,MAA5CgL,EAAQI,OAAOJ,EAAQI,OAAOhP,OAAO,IAClEwQ,IAEFlP,EAAEsN,EAAQP,WAEb,CAGR,CAED,SAASd,EAAW1G,EAAK4J,EAAaxR,GACpC,GAAIwR,GAA8B,iBAAR5J,EAAkB,CAE1C,IAAM8B,EAAS9B,EAAIxH,OACnB,MAAc,SAAXsJ,GACgB,UAAXA,GACIiE,EAAS/F,EAAK5H,EAC3B,CACC,OAAIiD,EAAKtB,QAAQiG,GACRA,EAEA,EAGZ,CAGD/H,EAAOC,QA/jBL,SAAYE,GACViI,KAAKjI,QAAUA,EACfiI,KAAKiH,YAAc,KACnBjH,KAAKyH,cAAgB,GACrBzH,KAAKkI,gBAAkB,CAAC,EACxBlI,KAAK+F,aAAe,CAClB,KAAS,CAAEtL,MAAO,qBAAsBkF,IAAM,KAC9C,GAAO,CAAElF,MAAO,mBAAoBkF,IAAM,KAC1C,GAAO,CAAElF,MAAO,mBAAoBkF,IAAM,KAC1C,KAAS,CAAElF,MAAO,qBAAsBkF,IAAM,MAEhDK,KAAKyI,UAAY,CAAEhO,MAAO,oBAAqBkF,IAAM,KACrDK,KAAKgF,aAAe,CAClB,MAAS,CAAEvK,MAAO,iBAAkBkF,IAAK,KAMzC,KAAS,CAAElF,MAAO,iBAAkBkF,IAAK,KACzC,MAAU,CAAElF,MAAO,kBAAmBkF,IAAK,KAC3C,IAAQ,CAAElF,MAAO,gBAAiBkF,IAAK,KACvC,KAAS,CAAElF,MAAO,kBAAmBkF,IAAK,KAC1C,UAAc,CAAElF,MAAO,iBAAkBkF,IAAK,KAC9C,IAAQ,CAAElF,MAAO,gBAAiBkF,IAAK,KACvC,IAAQ,CAAElF,MAAO,iBAAkBkF,IAAK,MAE1CK,KAAK2F,oBAAsBA,EAC3B3F,KAAK+G,SAAWA,EAChB/G,KAAKgG,cAAgBA,EACrBhG,KAAKsG,iBAAmBA,EACxBtG,KAAK0G,mBAAqBA,EAC1B1G,KAAKqI,aAAeA,EACpBrI,KAAK0B,qBAAuBA,EAC5B1B,KAAKuI,iBAAmBA,EACxBvI,KAAKsH,oBAAsBA,EAC3BtH,KAAKgI,SAAWA,CACjB,C,gBCrDH,IAAQzC,EAAgBpM,EAAQ,KAAxBoM,aACFiE,EAAmBrQ,EAAQ,KACzBsQ,EAAYtQ,EAAQ,KAApBsQ,SACFvQ,EAAYC,EAAQ,KAEpBC,EAAAA,WAEF,WAAYrB,GACRiI,KAAK4F,iBAAmB,CAAC,EACzB5F,KAAKjI,QAAUwN,EAAaxN,EAE/B,CAKE,IAAP,cAsCK,OAtCL,EACI2R,MAAA,SAAMnO,EAAQoO,GACV,GAAsB,iBAAZpO,OACJ,KAAIA,EAAQqO,SAGd,MAAM,IAAI5F,MAAM,mDAFhBzI,EAAUA,EAAQqO,UAGrB,CACD,GAAID,EAAiB,EACO,IAArBA,IAA2BA,EAAmB,CAAC,GAElD,IAAM/M,EAAS1D,EAAUiD,SAASZ,EAASoO,GAC3C,IAAe,IAAX/M,EACF,MAAMoH,MAAUpH,EAAOL,IAAIU,IAAhB,IAAuBL,EAAOL,IAAIW,KAAlC,IAA0CN,EAAOL,IAAIe,IAEnE,CACH,IAAMuM,EAAmB,IAAIL,EAAiBxJ,KAAKjI,SACnD8R,EAAiBlE,oBAAoB3F,KAAK4F,kBAC1C,IAAMkE,EAAgBD,EAAiB9C,SAASxL,GAChD,OAAGyE,KAAKjI,QAAQyH,oBAAmCpH,IAAlB0R,EAAoCA,EACzDL,EAASK,EAAe9J,KAAKjI,QAC5C,EAML,EACIgS,UAAA,SAAUzK,EAAKpD,GACX,IAA2B,IAAxBA,EAAMtD,QAAQ,KACb,MAAM,IAAIoL,MAAM,+BACd,IAAyB,IAAtB1E,EAAI1G,QAAQ,OAAqC,IAAtB0G,EAAI1G,QAAQ,KAC5C,MAAM,IAAIoL,MAAM,wEACd,GAAa,MAAV9H,EACL,MAAM,IAAI8H,MAAM,6CAEhBhE,KAAK4F,iBAAiBtG,GAAOpD,CAEpC,IAjDC9C,GAoDNxB,EAAOC,QAAUuB,C,2BCtCjB,SAAS4Q,EAASzH,EAAKxK,EAASyK,GAG9B,IAFA,IAAIyH,EACEC,EAAgB,CAAC,EACd9P,EAAI,EAAGA,EAAImI,EAAIzJ,OAAQsB,IAAK,CACnC,IAEI+P,EAFEvH,EAASL,EAAInI,GACbgQ,EAAWvH,EAASD,GAK1B,GAHwBuH,OAAX/R,IAAVoK,EAAgC4H,EACnB5H,EAAQ,IAAM4H,EAE3BA,IAAarS,EAAQ8G,kBACVzG,IAAT6R,EAAoBA,EAAOrH,EAAOwH,GAChCH,GAAQ,GAAKrH,EAAOwH,OACrB,SAAgBhS,IAAbgS,EACP,SACI,GAAGxH,EAAOwH,GAAU,CAExB,IAAIzK,EAAMqK,EAASpH,EAAOwH,GAAWrS,EAASoS,GACxCE,EAASC,EAAU3K,EAAK5H,GAE3B6K,EAAO,MACR2H,EAAkB5K,EAAKiD,EAAO,MAAOuH,EAAUpS,GACZ,IAA5BC,OAAO8B,KAAK6F,GAAK7G,aAA8CV,IAA9BuH,EAAI5H,EAAQ8G,eAAgC9G,EAAQgN,qBAEzD,IAA5B/M,OAAO8B,KAAK6F,GAAK7G,SACrBf,EAAQgN,qBAAsBpF,EAAI5H,EAAQ8G,cAAgB,GACxDc,EAAM,IAHXA,EAAMA,EAAI5H,EAAQ8G,mBAMWzG,IAA5B8R,EAAcE,IAA2BF,EAAchM,eAAekM,IACnElJ,MAAMC,QAAQ+I,EAAcE,MAC5BF,EAAcE,GAAY,CAAEF,EAAcE,KAE9CF,EAAcE,GAAUrP,KAAK4E,IAIzB5H,EAAQoJ,QAAQiJ,EAAUD,EAAUE,GACtCH,EAAcE,GAAY,CAACzK,GAE3BuK,EAAcE,GAAYzK,CAG/B,EAEF,CAKD,MAHmB,iBAATsK,EACLA,EAAKnR,OAAS,IAAGoR,EAAcnS,EAAQ8G,cAAgBoL,QAC1C7R,IAAT6R,IAAoBC,EAAcnS,EAAQ8G,cAAgBoL,GAC5DC,CACR,CAED,SAASrH,EAAShJ,GAEhB,IADA,IAAMC,EAAO9B,OAAO8B,KAAKD,GAChBO,EAAI,EAAGA,EAAIN,EAAKhB,OAAQsB,IAAK,CACpC,IAAMkF,EAAMxF,EAAKM,GACjB,GAAW,OAARkF,EAAc,OAAOA,CACzB,CACF,CAED,SAASiL,EAAiB1Q,EAAK6J,EAAS8G,EAAOzS,GAC7C,GAAI2L,EAGF,IAFA,IAAM5J,EAAO9B,OAAO8B,KAAK4J,GACnBvJ,EAAML,EAAKhB,OACRsB,EAAI,EAAGA,EAAID,EAAKC,IAAK,CAC5B,IAAMqQ,EAAW3Q,EAAKM,GAClBrC,EAAQoJ,QAAQsJ,EAAUD,EAAQ,IAAMC,GAAU,GAAM,GAC1D5Q,EAAI4Q,GAAY,CAAE/G,EAAQ+G,IAE1B5Q,EAAI4Q,GAAY/G,EAAQ+G,EAE3B,CAEJ,CAED,SAASH,EAAUzQ,EAAK9B,GACtB,IAAQ8G,EAAiB9G,EAAjB8G,aACF6L,EAAY1S,OAAO8B,KAAKD,GAAKf,OAEnC,OAAkB,IAAd4R,KAKY,IAAdA,IACC7Q,EAAIgF,IAA8C,kBAAtBhF,EAAIgF,IAAqD,IAAtBhF,EAAIgF,GAMvE,CACDhH,EAAQ4R,SAxGR,SAAkBkB,EAAM5S,GACtB,OAAOiS,EAAUW,EAAM5S,EACxB,C,2BCRK6S,EAAAA,WACJ,WAAYnP,GACVuE,KAAKvE,QAAUA,EACfuE,KAAKwI,MAAQ,GACbxI,KAAK,MAAQ,CAAC,CACf,mBAaA,OAbA,EACD6H,IAAA,SAAIvI,EAAIK,GAAK,IAAD,EAEC,cAARL,IAAqBA,EAAM,cAC9BU,KAAKwI,MAAMzN,OAAX,MAAmBuE,GAAMK,EAAzB,GACD,IACDqI,SAAA,SAAS2C,GAE8C,IAAD,EAE/C,EAHe,cAAjBA,EAAKlP,UAAyBkP,EAAKlP,QAAU,cAC7CkP,EAAK,OAAS3S,OAAO8B,KAAK6Q,EAAK,OAAO7R,OAAS,EAChDkH,KAAKwI,MAAMzN,OAAX,MAAoB4P,EAAKlP,SAAUkP,EAAKnC,MAAxC,EAAgD,MAAOmC,EAAK,MAA5D,IAEA3K,KAAKwI,MAAMzN,OAAX,MAAoB4P,EAAKlP,SAAUkP,EAAKnC,MAAxC,GAEH,IAlBGoC,GAsBNhT,EAAOC,QAAU+S,C,GCvBbC,EAA2B,CAAC,ECE5BC,EDCJ,SAASC,EAAoBC,GAE5B,IAAIC,EAAeJ,EAAyBG,GAC5C,QAAqB5S,IAAjB6S,EACH,OAAOA,EAAapT,QAGrB,IAAID,EAASiT,EAAyBG,GAAY,CAGjDnT,QAAS,CAAC,GAOX,OAHAqT,EAAoBF,GAAUpT,EAAQA,EAAOC,QAASkT,GAG/CnT,EAAOC,OACf,CCnB0BkT,CAAoB,K","sources":["webpack://fxp/./node_modules/strnum/strnum.js","webpack://fxp/./src/fxp.js","webpack://fxp/./src/util.js","webpack://fxp/./src/validator.js","webpack://fxp/./src/xmlbuilder/json2xml.js","webpack://fxp/./src/xmlbuilder/orderedJs2Xml.js","webpack://fxp/./src/xmlparser/DocTypeReader.js","webpack://fxp/./src/xmlparser/OptionsBuilder.js","webpack://fxp/./src/xmlparser/OrderedObjParser.js","webpack://fxp/./src/xmlparser/XMLParser.js","webpack://fxp/./src/xmlparser/node2json.js","webpack://fxp/./src/xmlparser/xmlNode.js","webpack://fxp/webpack/bootstrap","webpack://fxp/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 validator = require('./validator');\nconst XMLParser = require('./xmlparser/XMLParser');\nconst XMLBuilder = require('./xmlbuilder/json2xml');\n\nmodule.exports = {\n XMLParser: XMLParser,\n XMLValidator: validator,\n XMLBuilder: XMLBuilder\n}","'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(/()/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","'use strict';\n//parse Empty Node as self closing node\nconst buildFromOrderedJs = require('./orderedJs2Xml');\n\nconst defaultOptions = {\n attributeNamePrefix: '@_',\n attributesGroupName: false,\n textNodeName: '#text',\n ignoreAttributes: true,\n cdataPropName: false,\n format: false,\n indentBy: ' ',\n suppressEmptyNode: false,\n suppressUnpairedNode: true,\n suppressBooleanAttributes: true,\n tagValueProcessor: function(key, a) {\n return a;\n },\n attributeValueProcessor: function(attrName, a) {\n return a;\n },\n preserveOrder: false,\n commentPropName: false,\n unpairedTags: [],\n entities: [\n { regex: new RegExp(\"&\", \"g\"), val: \"&\" },//it must be on top\n { regex: new RegExp(\">\", \"g\"), val: \">\" },\n { regex: new RegExp(\"<\", \"g\"), val: \"<\" },\n { regex: new RegExp(\"\\'\", \"g\"), val: \"'\" },\n { regex: new RegExp(\"\\\"\", \"g\"), val: \""\" }\n ],\n processEntities: true,\n stopNodes: [],\n // transformTagName: false,\n // transformAttributeName: false,\n oneListGroup: false\n};\n\nfunction Builder(options) {\n this.options = Object.assign({}, defaultOptions, options);\n if (this.options.ignoreAttributes || this.options.attributesGroupName) {\n this.isAttribute = function(/*a*/) {\n return false;\n };\n } else {\n this.attrPrefixLen = this.options.attributeNamePrefix.length;\n this.isAttribute = isAttribute;\n }\n\n this.processTextOrObjNode = processTextOrObjNode\n\n if (this.options.format) {\n this.indentate = indentate;\n this.tagEndChar = '>\\n';\n this.newLine = '\\n';\n } else {\n this.indentate = function() {\n return '';\n };\n this.tagEndChar = '>';\n this.newLine = '';\n }\n}\n\nBuilder.prototype.build = function(jObj) {\n if(this.options.preserveOrder){\n return buildFromOrderedJs(jObj, this.options);\n }else {\n if(Array.isArray(jObj) && this.options.arrayNodeName && this.options.arrayNodeName.length > 1){\n jObj = {\n [this.options.arrayNodeName] : jObj\n }\n }\n return this.j2x(jObj, 0).val;\n }\n};\n\nBuilder.prototype.j2x = function(jObj, level) {\n let attrStr = '';\n let val = '';\n for (let key in jObj) {\n if(!Object.prototype.hasOwnProperty.call(jObj, key)) continue;\n if (typeof jObj[key] === 'undefined') {\n // supress undefined node only if it is not an attribute\n if (this.isAttribute(key)) {\n val += '';\n }\n } else if (jObj[key] === null) {\n // null attribute should be ignored by the attribute list, but should not cause the tag closing\n if (this.isAttribute(key)) {\n val += '';\n } else if (key[0] === '?') {\n val += this.indentate(level) + '<' + key + '?' + this.tagEndChar;\n } else {\n val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;\n }\n // val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;\n } else if (jObj[key] instanceof Date) {\n val += this.buildTextValNode(jObj[key], key, '', level);\n } else if (typeof jObj[key] !== 'object') {\n //premitive type\n const attr = this.isAttribute(key);\n if (attr) {\n attrStr += this.buildAttrPairStr(attr, '' + jObj[key]);\n }else {\n //tag value\n if (key === this.options.textNodeName) {\n let newval = this.options.tagValueProcessor(key, '' + jObj[key]);\n val += this.replaceEntitiesValue(newval);\n } else {\n val += this.buildTextValNode(jObj[key], key, '', level);\n }\n }\n } else if (Array.isArray(jObj[key])) {\n //repeated nodes\n const arrLen = jObj[key].length;\n let listTagVal = \"\";\n for (let j = 0; j < arrLen; j++) {\n const item = jObj[key][j];\n if (typeof item === 'undefined') {\n // supress undefined node\n } else if (item === null) {\n if(key[0] === \"?\") val += this.indentate(level) + '<' + key + '?' + this.tagEndChar;\n else val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;\n // val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;\n } else if (typeof item === 'object') {\n if(this.options.oneListGroup ){\n listTagVal += this.j2x(item, level + 1).val;\n }else{\n listTagVal += this.processTextOrObjNode(item, key, level)\n }\n } else {\n listTagVal += this.buildTextValNode(item, key, '', level);\n }\n }\n if(this.options.oneListGroup){\n listTagVal = this.buildObjectNode(listTagVal, key, '', level);\n }\n val += listTagVal;\n } else {\n //nested node\n if (this.options.attributesGroupName && key === this.options.attributesGroupName) {\n const Ks = Object.keys(jObj[key]);\n const L = Ks.length;\n for (let j = 0; j < L; j++) {\n attrStr += this.buildAttrPairStr(Ks[j], '' + jObj[key][Ks[j]]);\n }\n } else {\n val += this.processTextOrObjNode(jObj[key], key, level)\n }\n }\n }\n return {attrStr: attrStr, val: val};\n};\n\nBuilder.prototype.buildAttrPairStr = function(attrName, val){\n val = this.options.attributeValueProcessor(attrName, '' + val);\n val = this.replaceEntitiesValue(val);\n if (this.options.suppressBooleanAttributes && val === \"true\") {\n return ' ' + attrName;\n } else return ' ' + attrName + '=\"' + val + '\"';\n}\n\nfunction processTextOrObjNode (object, key, level) {\n const result = this.j2x(object, level + 1);\n if (object[this.options.textNodeName] !== undefined && Object.keys(object).length === 1) {\n return this.buildTextValNode(object[this.options.textNodeName], key, result.attrStr, level);\n } else {\n return this.buildObjectNode(result.val, key, result.attrStr, level);\n }\n}\n\nBuilder.prototype.buildObjectNode = function(val, key, attrStr, level) {\n if(val === \"\"){\n if(key[0] === \"?\") return this.indentate(level) + '<' + key + attrStr+ '?' + this.tagEndChar;\n else {\n return this.indentate(level) + '<' + key + attrStr + this.closeTag(key) + this.tagEndChar;\n }\n }else{\n\n let tagEndExp = '' + val + tagEndExp );\n } else if (this.options.commentPropName !== false && key === this.options.commentPropName && piClosingChar.length === 0) {\n return this.indentate(level) + `` + this.newLine;\n }else {\n return (\n this.indentate(level) + '<' + key + attrStr + piClosingChar + this.tagEndChar +\n val +\n this.indentate(level) + tagEndExp );\n }\n }\n}\n\nBuilder.prototype.closeTag = function(key){\n let closeTag = \"\";\n if(this.options.unpairedTags.indexOf(key) !== -1){ //unpaired\n if(!this.options.suppressUnpairedNode) closeTag = \"/\"\n }else if(this.options.suppressEmptyNode){ //empty\n closeTag = \"/\";\n }else{\n closeTag = `>` + this.newLine;\n }else if (this.options.commentPropName !== false && key === this.options.commentPropName) {\n return this.indentate(level) + `` + this.newLine;\n }else if(key[0] === \"?\") {//PI tag\n return this.indentate(level) + '<' + key + attrStr+ '?' + this.tagEndChar; \n }else{\n let textValue = this.options.tagValueProcessor(key, val);\n textValue = this.replaceEntitiesValue(textValue);\n \n if( textValue === ''){\n return this.indentate(level) + '<' + key + attrStr + this.closeTag(key) + this.tagEndChar;\n }else{\n return this.indentate(level) + '<' + key + attrStr + '>' +\n textValue +\n ' 0 && this.options.processEntities){\n for (let i=0; i 0) {\n indentation = EOL;\n }\n return arrToStr(jArray, options, \"\", indentation);\n}\n\nfunction arrToStr(arr, options, jPath, indentation) {\n let xmlStr = \"\";\n let isPreviousElementTag = false;\n\n for (let i = 0; i < arr.length; i++) {\n const tagObj = arr[i];\n const tagName = propName(tagObj);\n if(tagName === undefined) continue;\n\n let newJPath = \"\";\n if (jPath.length === 0) newJPath = tagName\n else newJPath = `${jPath}.${tagName}`;\n\n if (tagName === options.textNodeName) {\n let tagText = tagObj[tagName];\n if (!isStopNode(newJPath, options)) {\n tagText = options.tagValueProcessor(tagName, tagText);\n tagText = replaceEntitiesValue(tagText, options);\n }\n if (isPreviousElementTag) {\n xmlStr += indentation;\n }\n xmlStr += tagText;\n isPreviousElementTag = false;\n continue;\n } else if (tagName === options.cdataPropName) {\n if (isPreviousElementTag) {\n xmlStr += indentation;\n }\n xmlStr += ``;\n isPreviousElementTag = false;\n continue;\n } else if (tagName === options.commentPropName) {\n xmlStr += indentation + ``;\n isPreviousElementTag = true;\n continue;\n } else if (tagName[0] === \"?\") {\n const attStr = attr_to_str(tagObj[\":@\"], options);\n const tempInd = tagName === \"?xml\" ? \"\" : indentation;\n let piTextNodeName = tagObj[tagName][0][options.textNodeName];\n piTextNodeName = piTextNodeName.length !== 0 ? \" \" + piTextNodeName : \"\"; //remove extra spacing\n xmlStr += tempInd + `<${tagName}${piTextNodeName}${attStr}?>`;\n isPreviousElementTag = true;\n continue;\n }\n let newIdentation = indentation;\n if (newIdentation !== \"\") {\n newIdentation += options.indentBy;\n }\n const attStr = attr_to_str(tagObj[\":@\"], options);\n const tagStart = indentation + `<${tagName}${attStr}`;\n const tagValue = arrToStr(tagObj[tagName], options, newJPath, newIdentation);\n if (options.unpairedTags.indexOf(tagName) !== -1) {\n if (options.suppressUnpairedNode) xmlStr += tagStart + \">\";\n else xmlStr += tagStart + \"/>\";\n } else if ((!tagValue || tagValue.length === 0) && options.suppressEmptyNode) {\n xmlStr += tagStart + \"/>\";\n } else if (tagValue && tagValue.endsWith(\">\")) {\n xmlStr += tagStart + `>${tagValue}${indentation}`;\n } else {\n xmlStr += tagStart + \">\";\n if (tagValue && indentation !== \"\" && (tagValue.includes(\"/>\") || tagValue.includes(\"`;\n }\n isPreviousElementTag = true;\n }\n\n return xmlStr;\n}\n\nfunction propName(obj) {\n const keys = Object.keys(obj);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if(!obj.hasOwnProperty(key)) continue;\n if (key !== \":@\") return key;\n }\n}\n\nfunction attr_to_str(attrMap, options) {\n let attrStr = \"\";\n if (attrMap && !options.ignoreAttributes) {\n for (let attr in attrMap) {\n if(!attrMap.hasOwnProperty(attr)) continue;\n let attrVal = options.attributeValueProcessor(attr, attrMap[attr]);\n attrVal = replaceEntitiesValue(attrVal, options);\n if (attrVal === true && options.suppressBooleanAttributes) {\n attrStr += ` ${attr.substr(options.attributeNamePrefix.length)}`;\n } else {\n attrStr += ` ${attr.substr(options.attributeNamePrefix.length)}=\"${attrVal}\"`;\n }\n }\n }\n return attrStr;\n}\n\nfunction isStopNode(jPath, options) {\n jPath = jPath.substr(0, jPath.length - options.textNodeName.length - 1);\n let tagName = jPath.substr(jPath.lastIndexOf(\".\") + 1);\n for (let index in options.stopNodes) {\n if (options.stopNodes[index] === jPath || options.stopNodes[index] === \"*.\" + tagName) return true;\n }\n return false;\n}\n\nfunction replaceEntitiesValue(textValue, options) {\n if (textValue && textValue.length > 0 && options.processEntities) {\n for (let i = 0; i < options.entities.length; i++) {\n const entity = options.entities[i];\n textValue = textValue.replace(entity.regex, entity.val);\n }\n }\n return textValue;\n}\nmodule.exports = toXml;\n","const util = require('../util');\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') { //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 // \n\n //Parameter entities are not supported\n // \n\n //Internal entities are supported\n // \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\nfunction validateEntityName(name){\n if (util.isName(name))\n\treturn name;\n else\n throw new Error(`Invalid entity name ${name}`);\n}\n\nmodule.exports = readDocType;\n","\nconst defaultOptions = {\n preserveOrder: false,\n attributeNamePrefix: '@_',\n attributesGroupName: false,\n textNodeName: '#text',\n ignoreAttributes: true,\n removeNSPrefix: false, // remove NS from tag name or attribute name if true\n allowBooleanAttributes: false, //a tag can have attributes without any value\n //ignoreRootElement : false,\n parseTagValue: true,\n parseAttributeValue: false,\n trimValues: true, //Trim string values of tag and attributes\n cdataPropName: false,\n numberParseOptions: {\n hex: true,\n leadingZeros: true,\n eNotation: true\n },\n tagValueProcessor: function(tagName, val) {\n return val;\n },\n attributeValueProcessor: function(attrName, val) {\n return val;\n },\n stopNodes: [], //nested tags will not be parsed even for errors\n alwaysCreateTextNode: false,\n isArray: () => 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: `);\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 const rawTagName = result.rawTagName;\n let tagExp = result.tagExp;\n let attrExpPresent = result.attrExpPresent;\n let closeIndex = result.closeIndex;\n\n if (this.options.transformTagName) {\n tagName = this.options.transformTagName(tagName);\n }\n \n //save text as child node\n if (currentNode && textData) {\n if(currentNode.tagname !== '!xml'){\n //when nested tag is found\n textData = this.saveTextToParentTag(textData, currentNode, jPath, false);\n }\n }\n\n //check if last tag was unpaired tag\n const lastTag = currentNode;\n if(lastTag && this.options.unpairedTags.indexOf(lastTag.tagname) !== -1 ){\n currentNode = this.tagsNodeStack.pop();\n jPath = jPath.substring(0, jPath.lastIndexOf(\".\"));\n }\n if(tagName !== xmlObj.tagname){\n jPath += jPath ? \".\" + tagName : tagName;\n }\n if (this.isItStopNode(this.options.stopNodes, jPath, tagName)) {\n let tagContent = \"\";\n //self-closing tag\n if(tagExp.length > 0 && tagExp.lastIndexOf(\"/\") === tagExp.length - 1){\n 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, rawTagName, closeIndex + 1);\n if(!result) throw new Error(`Unexpected end of ${rawTagName}`);\n i = result.i;\n tagContent = result.tagContent;\n }\n\n const childNode = new xmlNode(tagName);\n 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 jPath = jPath.substr(0, jPath.length - 1);\n tagExp = tagName;\n }else{\n tagExp = tagExp.substr(0, tagExp.length - 1);\n }\n \n if(this.options.transformTagName) {\n tagName = this.options.transformTagName(tagName);\n }\n\n const childNode = new xmlNode(tagName);\n if(tagName !== tagExp && attrExpPresent){\n childNode[\":@\"] = this.buildAttributesMap(tagExp, jPath, tagName);\n }\n this.addChild(currentNode, childNode, jPath)\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 const rawTagName = tagName;\n if(removeNSPrefix){\n const colonIndex = tagName.indexOf(\":\");\n if(colonIndex !== -1){\n tagName = tagName.substr(colonIndex+1);\n attrExpPresent = tagName !== result.data.substr(colonIndex + 1);\n }\n }\n\n return {\n tagName: tagName,\n tagExp: tagExp,\n closeIndex: closeIndex,\n attrExpPresent: attrExpPresent,\n rawTagName: rawTagName,\n }\n}\n/**\n * find paired tag for a stop node\n * @param {string} xmlData \n * @param {string} tagName \n * @param {number} i \n */\nfunction readStopNodeData(xmlData, tagName, i){\n const startIndex = i;\n // Starting at 1 since we already have an open tag\n let openTagCount = 1;\n\n for (; i < xmlData.length; i++) {\n if( xmlData[i] === \"<\"){ \n if (xmlData[i+1] === \"/\") {//close tag\n const closeIndex = findClosingIndex(xmlData, \">\", i, `${tagName} is not closed`);\n let closeTagName = xmlData.substring(i+2,closeIndex).trim();\n if(closeTagName === tagName){\n openTagCount--;\n if (openTagCount === 0) {\n return {\n tagContent: xmlData.substring(startIndex, i),\n i : closeIndex\n }\n }\n }\n i=closeIndex;\n } else if(xmlData[i+1] === '?') { \n const closeIndex = findClosingIndex(xmlData, \"?>\", i+1, \"StopNode is not closed.\")\n i=closeIndex;\n } else if(xmlData.substr(i + 1, 3) === '!--') { \n const closeIndex = findClosingIndex(xmlData, \"-->\", i+3, \"StopNode is not closed.\")\n i=closeIndex;\n } else if(xmlData.substr(i + 1, 2) === '![') { \n const closeIndex = findClosingIndex(xmlData, \"]]>\", i, \"StopNode is not closed.\") - 2;\n i=closeIndex;\n } else {\n const tagData = readTagExp(xmlData, i, '>')\n\n if (tagData) {\n const openTagName = tagData && tagData.tagName;\n if (openTagName === tagName && tagData.tagExp[tagData.tagExp.length-1] !== \"/\") {\n openTagCount++;\n }\n i=tagData.closeIndex;\n }\n }\n }\n }//end for loop\n}\n\nfunction parseValue(val, shouldParse, options) {\n if (shouldParse && typeof val === 'string') {\n //console.log(options)\n const newval = val.trim();\n if(newval === 'true' ) return true;\n else if(newval === 'false' ) return false;\n else return toNumber(val, options);\n } else {\n if (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__(316);\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","validator","require","XMLParser","XMLBuilder","XMLValidator","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","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","buildFromOrderedJs","attributeNamePrefix","attributesGroupName","textNodeName","ignoreAttributes","cdataPropName","format","indentBy","suppressEmptyNode","suppressUnpairedNode","suppressBooleanAttributes","tagValueProcessor","key","attributeValueProcessor","preserveOrder","commentPropName","entities","val","processEntities","stopNodes","oneListGroup","Builder","this","isAttribute","attrPrefixLen","processTextOrObjNode","indentate","tagEndChar","newLine","object","level","j2x","buildTextValNode","buildObjectNode","repeat","name","startsWith","prototype","build","jObj","Array","isArray","arrayNodeName","call","Date","attr","buildAttrPairStr","newval","replaceEntitiesValue","arrLen","listTagVal","j","item","Ks","L","closeTag","tagEndExp","piClosingChar","textValue","entity","arrToStr","arr","jPath","indentation","xmlStr","isPreviousElementTag","tagObj","propName","newJPath","newIdentation","tagStart","attr_to_str","tagValue","endsWith","includes","attStr","tempInd","piTextNodeName","tagText","isStopNode","attrMap","attrVal","lastIndexOf","jArray","readEntityExp","entityName","Error","isComment","isEntity","isElement","isAttlist","isNotation","validateEntityName","hasBody","comment","regx","removeNSPrefix","parseTagValue","parseAttributeValue","trimValues","numberParseOptions","alwaysCreateTextNode","htmlEntities","ignoreDeclaration","ignorePiTags","transformTagName","transformAttributeName","updateTag","attrs","buildOptions","xmlNode","readDocType","toNumber","addExternalEntities","externalEntities","entKeys","ent","lastEntities","parseTextData","dontTrim","hasAttributes","isLeafNode","escapeEntities","parseValue","resolveNameSpace","prefix","charAt","attrsRegx","buildAttributesMap","oldVal","aName","newVal","attrCollection","parseXml","xmlObj","currentNode","textData","closeIndex","findClosingIndex","colonIndex","saveTextToParentTag","lastTagName","propIndex","tagsNodeStack","tagData","readTagExp","childNode","add","tagExp","attrExpPresent","addChild","endIndex","docTypeEntities","rawTagName","lastTag","isItStopNode","tagContent","readStopNodeData","child","ampEntity","currentTagName","allNodesExp","stopNodePath","stopNodeExp","errMsg","closingIndex","closingChar","attrBoundary","ch","data","tagExpWithClosingIndex","separatorIndex","openTagCount","shouldParse","OrderedObjParser","prettify","parse","validationOption","toString","orderedObjParser","orderedResult","addEntity","compress","text","compressedObj","newJpath","property","isLeaf","isLeafTag","assignAttributes","jpath","atrrName","propCount","node","XmlNode","__webpack_module_cache__","__webpack_exports__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 1db4d56e..31070ca3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "fast-xml-parser", - "version": "4.3.1", + "version": "4.3.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "fast-xml-parser", - "version": "4.3.1", + "version": "4.3.2", "funding": [ { "type": "paypal", diff --git a/package.json b/package.json index 3801c6a1..2ed0e05b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fast-xml-parser", - "version": "4.3.1", + "version": "4.3.2", "description": "Validate XML, Parse XML, Build XML without C/C++ based libraries", "main": "./src/fxp.js", "scripts": { @@ -39,7 +39,7 @@ "json2xml", "html" ], - "author": "Amit Gupta (https://amitguptagwl.github.io)", + "author": "Amit Gupta (https://solothought.com)", "license": "MIT", "devDependencies": { "@babel/core": "^7.13.10", @@ -59,11 +59,11 @@ }, "typings": "src/fxp.d.ts", "funding": [{ - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" - },{ "type": "github", "url": "https://github.com/sponsors/NaturalIntelligence" + },{ + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" }], "dependencies": { "strnum": "^1.0.5"