fast-xml-parser
Advanced tools
+6
-0
| <small>Note: If you find missing information about particular minor version, that version must have been changed without any functional change in this library.</small> | ||
| **5.3.6 / 2026-02-14** | ||
| - Improve security and performance of entity processing | ||
| - new options `maxEntitySize`, `maxExpansionDepth`, `maxTotalExpansions`, `maxExpandedLength`, `allowedTags`,`tagFilter` | ||
| - fast return when no edtity is present | ||
| - improvement replacement logic to reduce number of calls | ||
| **5.3.5 / 2026-02-08** | ||
@@ -5,0 +11,0 @@ - fix: Escape regex char in entity name |
+1
-1
@@ -1,1 +0,1 @@ | ||
| (()=>{"use strict";var t={d:(e,i)=>{for(var n in i)t.o(i,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:i[n]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{XMLBuilder:()=>ut,XMLParser:()=>et,XMLValidator:()=>ft});const i=":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",n=new RegExp("^["+i+"]["+i+"\\-.\\d\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$");function s(t,e){const i=[];let n=e.exec(t);for(;n;){const s=[];s.startIndex=e.lastIndex-n[0].length;const r=n.length;for(let t=0;t<r;t++)s.push(n[t]);i.push(s),n=e.exec(t)}return i}const r=function(t){return!(null==n.exec(t))},o={allowBooleanAttributes:!1,unpairedTags:[]};function a(t,e){e=Object.assign({},o,e);const i=[];let n=!1,s=!1;"\ufeff"===t[0]&&(t=t.substr(1));for(let o=0;o<t.length;o++)if("<"===t[o]&&"?"===t[o+1]){if(o+=2,o=u(t,o),o.err)return o}else{if("<"!==t[o]){if(l(t[o]))continue;return x("InvalidChar","char '"+t[o]+"' is not expected.",b(t,o))}{let a=o;if(o++,"!"===t[o]){o=h(t,o);continue}{let d=!1;"/"===t[o]&&(d=!0,o++);let p="";for(;o<t.length&&">"!==t[o]&&" "!==t[o]&&"\t"!==t[o]&&"\n"!==t[o]&&"\r"!==t[o];o++)p+=t[o];if(p=p.trim(),"/"===p[p.length-1]&&(p=p.substring(0,p.length-1),o--),!r(p)){let e;return e=0===p.trim().length?"Invalid space after '<'.":"Tag '"+p+"' is an invalid name.",x("InvalidTag",e,b(t,o))}const c=f(t,o);if(!1===c)return x("InvalidAttr","Attributes for '"+p+"' have open quote.",b(t,o));let N=c.value;if(o=c.index,"/"===N[N.length-1]){const i=o-N.length;N=N.substring(0,N.length-1);const s=g(N,e);if(!0!==s)return x(s.err.code,s.err.msg,b(t,i+s.err.line));n=!0}else if(d){if(!c.tagClosed)return x("InvalidTag","Closing tag '"+p+"' doesn't have proper closing.",b(t,o));if(N.trim().length>0)return x("InvalidTag","Closing tag '"+p+"' can't have attributes or invalid starting.",b(t,a));if(0===i.length)return x("InvalidTag","Closing tag '"+p+"' has not been opened.",b(t,a));{const e=i.pop();if(p!==e.tagName){let i=b(t,e.tagStartPos);return x("InvalidTag","Expected closing tag '"+e.tagName+"' (opened in line "+i.line+", col "+i.col+") instead of closing tag '"+p+"'.",b(t,a))}0==i.length&&(s=!0)}}else{const r=g(N,e);if(!0!==r)return x(r.err.code,r.err.msg,b(t,o-N.length+r.err.line));if(!0===s)return x("InvalidXml","Multiple possible root nodes found.",b(t,o));-1!==e.unpairedTags.indexOf(p)||i.push({tagName:p,tagStartPos:a}),n=!0}for(o++;o<t.length;o++)if("<"===t[o]){if("!"===t[o+1]){o++,o=h(t,o);continue}if("?"!==t[o+1])break;if(o=u(t,++o),o.err)return o}else if("&"===t[o]){const e=m(t,o);if(-1==e)return x("InvalidChar","char '&' is not expected.",b(t,o));o=e}else if(!0===s&&!l(t[o]))return x("InvalidXml","Extra text at the end",b(t,o));"<"===t[o]&&o--}}}return n?1==i.length?x("InvalidTag","Unclosed tag '"+i[0].tagName+"'.",b(t,i[0].tagStartPos)):!(i.length>0)||x("InvalidXml","Invalid '"+JSON.stringify(i.map((t=>t.tagName)),null,4).replace(/\r?\n/g,"")+"' found.",{line:1,col:1}):x("InvalidXml","Start tag expected.",1)}function l(t){return" "===t||"\t"===t||"\n"===t||"\r"===t}function u(t,e){const i=e;for(;e<t.length;e++)if("?"!=t[e]&&" "!=t[e]);else{const n=t.substr(i,e-i);if(e>5&&"xml"===n)return x("InvalidXml","XML declaration allowed only at the start of the document.",b(t,e));if("?"==t[e]&&">"==t[e+1]){e++;break}}return e}function h(t,e){if(t.length>e+5&&"-"===t[e+1]&&"-"===t[e+2]){for(e+=3;e<t.length;e++)if("-"===t[e]&&"-"===t[e+1]&&">"===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]){let i=1;for(e+=8;e<t.length;e++)if("<"===t[e])i++;else if(">"===t[e]&&(i--,0===i))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.length;e++)if("]"===t[e]&&"]"===t[e+1]&&">"===t[e+2]){e+=2;break}return e}const d='"',p="'";function f(t,e){let i="",n="",s=!1;for(;e<t.length;e++){if(t[e]===d||t[e]===p)""===n?n=t[e]:n!==t[e]||(n="");else if(">"===t[e]&&""===n){s=!0;break}i+=t[e]}return""===n&&{value:i,index:e,tagClosed:s}}const c=new RegExp("(\\s*)([^\\s=]+)(\\s*=)?(\\s*(['\"])(([\\s\\S])*?)\\5)?","g");function g(t,e){const i=s(t,c),n={};for(let t=0;t<i.length;t++){if(0===i[t][1].length)return x("InvalidAttr","Attribute '"+i[t][2]+"' has no space in starting.",E(i[t]));if(void 0!==i[t][3]&&void 0===i[t][4])return x("InvalidAttr","Attribute '"+i[t][2]+"' is without value.",E(i[t]));if(void 0===i[t][3]&&!e.allowBooleanAttributes)return x("InvalidAttr","boolean attribute '"+i[t][2]+"' is not allowed.",E(i[t]));const s=i[t][2];if(!N(s))return x("InvalidAttr","Attribute '"+s+"' is an invalid name.",E(i[t]));if(n.hasOwnProperty(s))return x("InvalidAttr","Attribute '"+s+"' is repeated.",E(i[t]));n[s]=1}return!0}function m(t,e){if(";"===t[++e])return-1;if("#"===t[e])return function(t,e){let i=/\d/;for("x"===t[e]&&(e++,i=/[\da-fA-F]/);e<t.length;e++){if(";"===t[e])return e;if(!t[e].match(i))break}return-1}(t,++e);let i=0;for(;e<t.length;e++,i++)if(!(t[e].match(/\w/)&&i<20)){if(";"===t[e])break;return-1}return e}function x(t,e,i){return{err:{code:t,msg:e,line:i.line||i,col:i.col}}}function N(t){return r(t)}function b(t,e){const i=t.substring(0,e).split(/\r?\n/);return{line:i.length,col:i[i.length-1].length+1}}function E(t){return t.startIndex+t[1].length}const v={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:()=>!1,commentPropName:!1,unpairedTags:[],processEntities:!0,htmlEntities:!1,ignoreDeclaration:!1,ignorePiTags:!1,transformTagName:!1,transformAttributeName:!1,updateTag:function(t,e,i){return t},captureMetaData:!1};let T;T="function"!=typeof Symbol?"@@xmlMetadata":Symbol("XML Node Metadata");class y{constructor(t){this.tagname=t,this.child=[],this[":@"]={}}add(t,e){"__proto__"===t&&(t="#__proto__"),this.child.push({[t]:e})}addChild(t,e){"__proto__"===t.tagname&&(t.tagname="#__proto__"),t[":@"]&&Object.keys(t[":@"]).length>0?this.child.push({[t.tagname]:t.child,":@":t[":@"]}):this.child.push({[t.tagname]:t.child}),void 0!==e&&(this.child[this.child.length-1][T]={startIndex:e})}static getMetaDataSymbol(){return T}}class w{constructor(t){this.suppressValidationErr=!t}readDocType(t,e){const i={};if("O"!==t[e+3]||"C"!==t[e+4]||"T"!==t[e+5]||"Y"!==t[e+6]||"P"!==t[e+7]||"E"!==t[e+8])throw new Error("Invalid Tag instead of DOCTYPE");{e+=9;let n=1,s=!1,r=!1,o="";for(;e<t.length;e++)if("<"!==t[e]||r)if(">"===t[e]){if(r?"-"===t[e-1]&&"-"===t[e-2]&&(r=!1,n--):n--,0===n)break}else"["===t[e]?s=!0:o+=t[e];else{if(s&&P(t,"!ENTITY",e)){let n,s;if(e+=7,[n,s,e]=this.readEntityExp(t,e+1,this.suppressValidationErr),-1===s.indexOf("&")){const t=n.replace(/[.\-+*:]/g,"\\.");i[n]={regx:RegExp(`&${t};`,"g"),val:s}}}else if(s&&P(t,"!ELEMENT",e)){e+=8;const{index:i}=this.readElementExp(t,e+1);e=i}else if(s&&P(t,"!ATTLIST",e))e+=8;else if(s&&P(t,"!NOTATION",e)){e+=9;const{index:i}=this.readNotationExp(t,e+1,this.suppressValidationErr);e=i}else{if(!P(t,"!--",e))throw new Error("Invalid DOCTYPE");r=!0}n++,o=""}if(0!==n)throw new Error("Unclosed DOCTYPE")}return{entities:i,i:e}}readEntityExp(t,e){e=I(t,e);let i="";for(;e<t.length&&!/\s/.test(t[e])&&'"'!==t[e]&&"'"!==t[e];)i+=t[e],e++;if(O(i),e=I(t,e),!this.suppressValidationErr){if("SYSTEM"===t.substring(e,e+6).toUpperCase())throw new Error("External entities are not supported");if("%"===t[e])throw new Error("Parameter entities are not supported")}let n="";return[e,n]=this.readIdentifierVal(t,e,"entity"),[i,n,--e]}readNotationExp(t,e){e=I(t,e);let i="";for(;e<t.length&&!/\s/.test(t[e]);)i+=t[e],e++;!this.suppressValidationErr&&O(i),e=I(t,e);const n=t.substring(e,e+6).toUpperCase();if(!this.suppressValidationErr&&"SYSTEM"!==n&&"PUBLIC"!==n)throw new Error(`Expected SYSTEM or PUBLIC, found "${n}"`);e+=n.length,e=I(t,e);let s=null,r=null;if("PUBLIC"===n)[e,s]=this.readIdentifierVal(t,e,"publicIdentifier"),'"'!==t[e=I(t,e)]&&"'"!==t[e]||([e,r]=this.readIdentifierVal(t,e,"systemIdentifier"));else if("SYSTEM"===n&&([e,r]=this.readIdentifierVal(t,e,"systemIdentifier"),!this.suppressValidationErr&&!r))throw new Error("Missing mandatory system identifier for SYSTEM notation");return{notationName:i,publicIdentifier:s,systemIdentifier:r,index:--e}}readIdentifierVal(t,e,i){let n="";const s=t[e];if('"'!==s&&"'"!==s)throw new Error(`Expected quoted string, found "${s}"`);for(e++;e<t.length&&t[e]!==s;)n+=t[e],e++;if(t[e]!==s)throw new Error(`Unterminated ${i} value`);return[++e,n]}readElementExp(t,e){e=I(t,e);let i="";for(;e<t.length&&!/\s/.test(t[e]);)i+=t[e],e++;if(!this.suppressValidationErr&&!r(i))throw new Error(`Invalid element name: "${i}"`);let n="";if("E"===t[e=I(t,e)]&&P(t,"MPTY",e))e+=4;else if("A"===t[e]&&P(t,"NY",e))e+=2;else if("("===t[e]){for(e++;e<t.length&&")"!==t[e];)n+=t[e],e++;if(")"!==t[e])throw new Error("Unterminated content model")}else if(!this.suppressValidationErr)throw new Error(`Invalid Element Expression, found "${t[e]}"`);return{elementName:i,contentModel:n.trim(),index:e}}readAttlistExp(t,e){e=I(t,e);let i="";for(;e<t.length&&!/\s/.test(t[e]);)i+=t[e],e++;O(i),e=I(t,e);let n="";for(;e<t.length&&!/\s/.test(t[e]);)n+=t[e],e++;if(!O(n))throw new Error(`Invalid attribute name: "${n}"`);e=I(t,e);let s="";if("NOTATION"===t.substring(e,e+8).toUpperCase()){if(s="NOTATION","("!==t[e=I(t,e+=8)])throw new Error(`Expected '(', found "${t[e]}"`);e++;let i=[];for(;e<t.length&&")"!==t[e];){let n="";for(;e<t.length&&"|"!==t[e]&&")"!==t[e];)n+=t[e],e++;if(n=n.trim(),!O(n))throw new Error(`Invalid notation name: "${n}"`);i.push(n),"|"===t[e]&&(e++,e=I(t,e))}if(")"!==t[e])throw new Error("Unterminated list of notations");e++,s+=" ("+i.join("|")+")"}else{for(;e<t.length&&!/\s/.test(t[e]);)s+=t[e],e++;const i=["CDATA","ID","IDREF","IDREFS","ENTITY","ENTITIES","NMTOKEN","NMTOKENS"];if(!this.suppressValidationErr&&!i.includes(s.toUpperCase()))throw new Error(`Invalid attribute type: "${s}"`)}e=I(t,e);let r="";return"#REQUIRED"===t.substring(e,e+8).toUpperCase()?(r="#REQUIRED",e+=8):"#IMPLIED"===t.substring(e,e+7).toUpperCase()?(r="#IMPLIED",e+=7):[e,r]=this.readIdentifierVal(t,e,"ATTLIST"),{elementName:i,attributeName:n,attributeType:s,defaultValue:r,index:e}}}const I=(t,e)=>{for(;e<t.length&&/\s/.test(t[e]);)e++;return e};function P(t,e,i){for(let n=0;n<e.length;n++)if(e[n]!==t[i+n+1])return!1;return!0}function O(t){if(r(t))return t;throw new Error(`Invalid entity name ${t}`)}const A=/^[-+]?0x[a-fA-F0-9]+$/,S=/^([\-\+])?(0*)([0-9]*(\.[0-9]*)?)$/,C={hex:!0,leadingZeros:!0,decimalPoint:".",eNotation:!0};const V=/^([-+])?(0*)(\d*(\.\d*)?[eE][-\+]?\d+)$/;function $(t){return"function"==typeof t?t:Array.isArray(t)?e=>{for(const i of t){if("string"==typeof i&&e===i)return!0;if(i instanceof RegExp&&i.test(e))return!0}}:()=>!1}class D{constructor(t){if(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:"₹"},num_dec:{regex:/&#([0-9]{1,7});/g,val:(t,e)=>Z(e,10,"&#")},num_hex:{regex:/&#x([0-9a-fA-F]{1,6});/g,val:(t,e)=>Z(e,16,"&#x")}},this.addExternalEntities=j,this.parseXml=L,this.parseTextData=M,this.resolveNameSpace=F,this.buildAttributesMap=k,this.isItStopNode=Y,this.replaceEntitiesValue=B,this.readStopNodeData=W,this.saveTextToParentTag=R,this.addChild=U,this.ignoreAttributesFn=$(this.options.ignoreAttributes),this.options.stopNodes&&this.options.stopNodes.length>0){this.stopNodesExact=new Set,this.stopNodesWildcard=new Set;for(let t=0;t<this.options.stopNodes.length;t++){const e=this.options.stopNodes[t];"string"==typeof e&&(e.startsWith("*.")?this.stopNodesWildcard.add(e.substring(2)):this.stopNodesExact.add(e))}}}}function j(t){const e=Object.keys(t);for(let i=0;i<e.length;i++){const n=e[i],s=n.replace(/[.\-+*:]/g,"\\.");this.lastEntities[n]={regex:new RegExp("&"+s+";","g"),val:t[n]}}}function M(t,e,i,n,s,r,o){if(void 0!==t&&(this.options.trimValues&&!n&&(t=t.trim()),t.length>0)){o||(t=this.replaceEntitiesValue(t));const n=this.options.tagValueProcessor(e,t,i,s,r);return null==n?t:typeof n!=typeof t||n!==t?n:this.options.trimValues||t.trim()===t?q(t,this.options.parseTagValue,this.options.numberParseOptions):t}}function F(t){if(this.options.removeNSPrefix){const e=t.split(":"),i="/"===t.charAt(0)?"/":"";if("xmlns"===e[0])return"";2===e.length&&(t=i+e[1])}return t}const _=new RegExp("([^\\s=]+)\\s*(=\\s*(['\"])([\\s\\S]*?)\\3)?","gm");function k(t,e){if(!0!==this.options.ignoreAttributes&&"string"==typeof t){const i=s(t,_),n=i.length,r={};for(let t=0;t<n;t++){const n=this.resolveNameSpace(i[t][1]);if(this.ignoreAttributesFn(n,e))continue;let s=i[t][4],o=this.options.attributeNamePrefix+n;if(n.length)if(this.options.transformAttributeName&&(o=this.options.transformAttributeName(o)),"__proto__"===o&&(o="#__proto__"),void 0!==s){this.options.trimValues&&(s=s.trim()),s=this.replaceEntitiesValue(s);const t=this.options.attributeValueProcessor(n,s,e);r[o]=null==t?s:typeof t!=typeof s||t!==s?t:q(s,this.options.parseAttributeValue,this.options.numberParseOptions)}else this.options.allowBooleanAttributes&&(r[o]=!0)}if(!Object.keys(r).length)return;if(this.options.attributesGroupName){const t={};return t[this.options.attributesGroupName]=r,t}return r}}const L=function(t){t=t.replace(/\r\n?/g,"\n");const e=new y("!xml");let i=e,n="",s="";const r=new w(this.options.processEntities);for(let o=0;o<t.length;o++)if("<"===t[o])if("/"===t[o+1]){const e=G(t,">",o,"Closing Tag is not closed.");let r=t.substring(o+2,e).trim();if(this.options.removeNSPrefix){const t=r.indexOf(":");-1!==t&&(r=r.substr(t+1))}this.options.transformTagName&&(r=this.options.transformTagName(r)),i&&(n=this.saveTextToParentTag(n,i,s));const a=s.substring(s.lastIndexOf(".")+1);if(r&&-1!==this.options.unpairedTags.indexOf(r))throw new Error(`Unpaired tag can not be used as closing tag: </${r}>`);let l=0;a&&-1!==this.options.unpairedTags.indexOf(a)?(l=s.lastIndexOf(".",s.lastIndexOf(".")-1),this.tagsNodeStack.pop()):l=s.lastIndexOf("."),s=s.substring(0,l),i=this.tagsNodeStack.pop(),n="",o=e}else if("?"===t[o+1]){let e=X(t,o,!1,"?>");if(!e)throw new Error("Pi Tag is not closed.");if(n=this.saveTextToParentTag(n,i,s),this.options.ignoreDeclaration&&"?xml"===e.tagName||this.options.ignorePiTags);else{const t=new y(e.tagName);t.add(this.options.textNodeName,""),e.tagName!==e.tagExp&&e.attrExpPresent&&(t[":@"]=this.buildAttributesMap(e.tagExp,s)),this.addChild(i,t,s,o)}o=e.closeIndex+1}else if("!--"===t.substr(o+1,3)){const e=G(t,"--\x3e",o+4,"Comment is not closed.");if(this.options.commentPropName){const r=t.substring(o+4,e-2);n=this.saveTextToParentTag(n,i,s),i.add(this.options.commentPropName,[{[this.options.textNodeName]:r}])}o=e}else if("!D"===t.substr(o+1,2)){const e=r.readDocType(t,o);this.docTypeEntities=e.entities,o=e.i}else if("!["===t.substr(o+1,2)){const e=G(t,"]]>",o,"CDATA is not closed.")-2,r=t.substring(o+9,e);n=this.saveTextToParentTag(n,i,s);let a=this.parseTextData(r,i.tagname,s,!0,!1,!0,!0);null==a&&(a=""),this.options.cdataPropName?i.add(this.options.cdataPropName,[{[this.options.textNodeName]:r}]):i.add(this.options.textNodeName,a),o=e+2}else{let r=X(t,o,this.options.removeNSPrefix),a=r.tagName;const l=r.rawTagName;let u=r.tagExp,h=r.attrExpPresent,d=r.closeIndex;if(this.options.transformTagName){const t=this.options.transformTagName(a);u===a&&(u=t),a=t}i&&n&&"!xml"!==i.tagname&&(n=this.saveTextToParentTag(n,i,s,!1));const p=i;p&&-1!==this.options.unpairedTags.indexOf(p.tagname)&&(i=this.tagsNodeStack.pop(),s=s.substring(0,s.lastIndexOf("."))),a!==e.tagname&&(s+=s?"."+a:a);const f=o;if(this.isItStopNode(this.stopNodesExact,this.stopNodesWildcard,s,a)){let e="";if(u.length>0&&u.lastIndexOf("/")===u.length-1)"/"===a[a.length-1]?(a=a.substr(0,a.length-1),s=s.substr(0,s.length-1),u=a):u=u.substr(0,u.length-1),o=r.closeIndex;else if(-1!==this.options.unpairedTags.indexOf(a))o=r.closeIndex;else{const i=this.readStopNodeData(t,l,d+1);if(!i)throw new Error(`Unexpected end of ${l}`);o=i.i,e=i.tagContent}const n=new y(a);a!==u&&h&&(n[":@"]=this.buildAttributesMap(u,s)),e&&(e=this.parseTextData(e,a,s,!0,h,!0,!0)),s=s.substr(0,s.lastIndexOf(".")),n.add(this.options.textNodeName,e),this.addChild(i,n,s,f)}else{if(u.length>0&&u.lastIndexOf("/")===u.length-1){if("/"===a[a.length-1]?(a=a.substr(0,a.length-1),s=s.substr(0,s.length-1),u=a):u=u.substr(0,u.length-1),this.options.transformTagName){const t=this.options.transformTagName(a);u===a&&(u=t),a=t}const t=new y(a);a!==u&&h&&(t[":@"]=this.buildAttributesMap(u,s)),this.addChild(i,t,s,f),s=s.substr(0,s.lastIndexOf("."))}else{const t=new y(a);this.tagsNodeStack.push(i),a!==u&&h&&(t[":@"]=this.buildAttributesMap(u,s)),this.addChild(i,t,s,f),i=t}n="",o=d}}else n+=t[o];return e.child};function U(t,e,i,n){this.options.captureMetaData||(n=void 0);const s=this.options.updateTag(e.tagname,i,e[":@"]);!1===s||("string"==typeof s?(e.tagname=s,t.addChild(e,n)):t.addChild(e,n))}const B=function(t){if(this.options.processEntities){for(let e in this.docTypeEntities){const i=this.docTypeEntities[e];t=t.replace(i.regx,i.val)}for(let e in this.lastEntities){const i=this.lastEntities[e];t=t.replace(i.regex,i.val)}if(this.options.htmlEntities)for(let e in this.htmlEntities){const i=this.htmlEntities[e];t=t.replace(i.regex,i.val)}t=t.replace(this.ampEntity.regex,this.ampEntity.val)}return t};function R(t,e,i,n){return t&&(void 0===n&&(n=0===e.child.length),void 0!==(t=this.parseTextData(t,e.tagname,i,!1,!!e[":@"]&&0!==Object.keys(e[":@"]).length,n))&&""!==t&&e.add(this.options.textNodeName,t),t=""),t}function Y(t,e,i,n){return!(!e||!e.has(n))||!(!t||!t.has(i))}function G(t,e,i,n){const s=t.indexOf(e,i);if(-1===s)throw new Error(n);return s+e.length-1}function X(t,e,i,n=">"){const s=function(t,e,i=">"){let n,s="";for(let r=e;r<t.length;r++){let e=t[r];if(n)e===n&&(n="");else if('"'===e||"'"===e)n=e;else if(e===i[0]){if(!i[1])return{data:s,index:r};if(t[r+1]===i[1])return{data:s,index:r}}else"\t"===e&&(e=" ");s+=e}}(t,e+1,n);if(!s)return;let r=s.data;const o=s.index,a=r.search(/\s/);let l=r,u=!0;-1!==a&&(l=r.substring(0,a),r=r.substring(a+1).trimStart());const h=l;if(i){const t=l.indexOf(":");-1!==t&&(l=l.substr(t+1),u=l!==s.data.substr(t+1))}return{tagName:l,tagExp:r,closeIndex:o,attrExpPresent:u,rawTagName:h}}function W(t,e,i){const n=i;let s=1;for(;i<t.length;i++)if("<"===t[i])if("/"===t[i+1]){const r=G(t,">",i,`${e} is not closed`);if(t.substring(i+2,r).trim()===e&&(s--,0===s))return{tagContent:t.substring(n,i),i:r};i=r}else if("?"===t[i+1])i=G(t,"?>",i+1,"StopNode is not closed.");else if("!--"===t.substr(i+1,3))i=G(t,"--\x3e",i+3,"StopNode is not closed.");else if("!["===t.substr(i+1,2))i=G(t,"]]>",i,"StopNode is not closed.")-2;else{const n=X(t,i,">");n&&((n&&n.tagName)===e&&"/"!==n.tagExp[n.tagExp.length-1]&&s++,i=n.closeIndex)}}function q(t,e,i){if(e&&"string"==typeof t){const e=t.trim();return"true"===e||"false"!==e&&function(t,e={}){if(e=Object.assign({},C,e),!t||"string"!=typeof t)return t;let i=t.trim();if(void 0!==e.skipLike&&e.skipLike.test(i))return t;if("0"===t)return 0;if(e.hex&&A.test(i))return function(t){if(parseInt)return parseInt(t,16);if(Number.parseInt)return Number.parseInt(t,16);if(window&&window.parseInt)return window.parseInt(t,16);throw new Error("parseInt, Number.parseInt, window.parseInt are not supported")}(i);if(-1!==i.search(/.+[eE].+/))return function(t,e,i){if(!i.eNotation)return t;const n=e.match(V);if(n){let s=n[1]||"";const r=-1===n[3].indexOf("e")?"E":"e",o=n[2],a=s?t[o.length+1]===r:t[o.length]===r;return o.length>1&&a?t:1!==o.length||!n[3].startsWith(`.${r}`)&&n[3][0]!==r?i.leadingZeros&&!a?(e=(n[1]||"")+n[3],Number(e)):t:Number(e)}return t}(t,i,e);{const s=S.exec(i);if(s){const r=s[1]||"",o=s[2];let a=(n=s[3])&&-1!==n.indexOf(".")?("."===(n=n.replace(/0+$/,""))?n="0":"."===n[0]?n="0"+n:"."===n[n.length-1]&&(n=n.substring(0,n.length-1)),n):n;const l=r?"."===t[o.length+1]:"."===t[o.length];if(!e.leadingZeros&&(o.length>1||1===o.length&&!l))return t;{const n=Number(i),s=String(n);if(0===n||-0===n)return n;if(-1!==s.search(/[eE]/))return e.eNotation?n:t;if(-1!==i.indexOf("."))return"0"===s||s===a||s===`${r}${a}`?n:t;let l=o?a:i;return o?l===s||r+l===s?n:t:l===s||l===r+s?n:t}}return t}var n}(t,i)}return void 0!==t?t:""}function Z(t,e,i){const n=Number.parseInt(t,e);return n>=0&&n<=1114111?String.fromCodePoint(n):i+t+";"}const K=y.getMetaDataSymbol();function Q(t,e){return z(t,e)}function z(t,e,i){let n;const s={};for(let r=0;r<t.length;r++){const o=t[r],a=J(o);let l="";if(l=void 0===i?a:i+"."+a,a===e.textNodeName)void 0===n?n=o[a]:n+=""+o[a];else{if(void 0===a)continue;if(o[a]){let t=z(o[a],e,l);const i=tt(t,e);void 0!==o[K]&&(t[K]=o[K]),o[":@"]?H(t,o[":@"],l,e):1!==Object.keys(t).length||void 0===t[e.textNodeName]||e.alwaysCreateTextNode?0===Object.keys(t).length&&(e.alwaysCreateTextNode?t[e.textNodeName]="":t=""):t=t[e.textNodeName],void 0!==s[a]&&s.hasOwnProperty(a)?(Array.isArray(s[a])||(s[a]=[s[a]]),s[a].push(t)):e.isArray(a,l,i)?s[a]=[t]:s[a]=t}}}return"string"==typeof n?n.length>0&&(s[e.textNodeName]=n):void 0!==n&&(s[e.textNodeName]=n),s}function J(t){const e=Object.keys(t);for(let t=0;t<e.length;t++){const i=e[t];if(":@"!==i)return i}}function H(t,e,i,n){if(e){const s=Object.keys(e),r=s.length;for(let o=0;o<r;o++){const r=s[o];n.isArray(r,i+"."+r,!0,!0)?t[r]=[e[r]]:t[r]=e[r]}}}function tt(t,e){const{textNodeName:i}=e,n=Object.keys(t).length;return 0===n||!(1!==n||!t[i]&&"boolean"!=typeof t[i]&&0!==t[i])}class et{constructor(t){this.externalEntities={},this.options=function(t){return Object.assign({},v,t)}(t)}parse(t,e){if("string"!=typeof t&&t.toString)t=t.toString();else if("string"!=typeof t)throw new Error("XML data is accepted in String or Bytes[] form.");if(e){!0===e&&(e={});const i=a(t,e);if(!0!==i)throw Error(`${i.err.msg}:${i.err.line}:${i.err.col}`)}const i=new D(this.options);i.addExternalEntities(this.externalEntities);const n=i.parseXml(t);return this.options.preserveOrder||void 0===n?n:Q(n,this.options)}addEntity(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}static getMetaDataSymbol(){return y.getMetaDataSymbol()}}function it(t,e){let i="";return e.format&&e.indentBy.length>0&&(i="\n"),nt(t,e,"",i)}function nt(t,e,i,n){let s="",r=!1;for(let o=0;o<t.length;o++){const a=t[o],l=st(a);if(void 0===l)continue;let u="";if(u=0===i.length?l:`${i}.${l}`,l===e.textNodeName){let t=a[l];ot(u,e)||(t=e.tagValueProcessor(l,t),t=at(t,e)),r&&(s+=n),s+=t,r=!1;continue}if(l===e.cdataPropName){r&&(s+=n),s+=`<![CDATA[${a[l][0][e.textNodeName]}]]>`,r=!1;continue}if(l===e.commentPropName){s+=n+`\x3c!--${a[l][0][e.textNodeName]}--\x3e`,r=!0;continue}if("?"===l[0]){const t=rt(a[":@"],e),i="?xml"===l?"":n;let o=a[l][0][e.textNodeName];o=0!==o.length?" "+o:"",s+=i+`<${l}${o}${t}?>`,r=!0;continue}let h=n;""!==h&&(h+=e.indentBy);const d=n+`<${l}${rt(a[":@"],e)}`,p=nt(a[l],e,u,h);-1!==e.unpairedTags.indexOf(l)?e.suppressUnpairedNode?s+=d+">":s+=d+"/>":p&&0!==p.length||!e.suppressEmptyNode?p&&p.endsWith(">")?s+=d+`>${p}${n}</${l}>`:(s+=d+">",p&&""!==n&&(p.includes("/>")||p.includes("</"))?s+=n+e.indentBy+p+n:s+=p,s+=`</${l}>`):s+=d+"/>",r=!0}return s}function st(t){const e=Object.keys(t);for(let i=0;i<e.length;i++){const n=e[i];if(t.hasOwnProperty(n)&&":@"!==n)return n}}function rt(t,e){let i="";if(t&&!e.ignoreAttributes)for(let n in t){if(!t.hasOwnProperty(n))continue;let s=e.attributeValueProcessor(n,t[n]);s=at(s,e),!0===s&&e.suppressBooleanAttributes?i+=` ${n.substr(e.attributeNamePrefix.length)}`:i+=` ${n.substr(e.attributeNamePrefix.length)}="${s}"`}return i}function ot(t,e){let i=(t=t.substr(0,t.length-e.textNodeName.length-1)).substr(t.lastIndexOf(".")+1);for(let n in e.stopNodes)if(e.stopNodes[n]===t||e.stopNodes[n]==="*."+i)return!0;return!1}function at(t,e){if(t&&t.length>0&&e.processEntities)for(let i=0;i<e.entities.length;i++){const n=e.entities[i];t=t.replace(n.regex,n.val)}return t}const lt={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 ut(t){this.options=Object.assign({},lt,t),!0===this.options.ignoreAttributes||this.options.attributesGroupName?this.isAttribute=function(){return!1}:(this.ignoreAttributesFn=$(this.options.ignoreAttributes),this.attrPrefixLen=this.options.attributeNamePrefix.length,this.isAttribute=pt),this.processTextOrObjNode=ht,this.options.format?(this.indentate=dt,this.tagEndChar=">\n",this.newLine="\n"):(this.indentate=function(){return""},this.tagEndChar=">",this.newLine="")}function ht(t,e,i,n){const s=this.j2x(t,i+1,n.concat(e));return void 0!==t[this.options.textNodeName]&&1===Object.keys(t).length?this.buildTextValNode(t[this.options.textNodeName],e,s.attrStr,i):this.buildObjectNode(s.val,e,s.attrStr,i)}function dt(t){return this.options.indentBy.repeat(t)}function pt(t){return!(!t.startsWith(this.options.attributeNamePrefix)||t===this.options.textNodeName)&&t.substr(this.attrPrefixLen)}ut.prototype.build=function(t){return this.options.preserveOrder?it(t,this.options):(Array.isArray(t)&&this.options.arrayNodeName&&this.options.arrayNodeName.length>1&&(t={[this.options.arrayNodeName]:t}),this.j2x(t,0,[]).val)},ut.prototype.j2x=function(t,e,i){let n="",s="";const r=i.join(".");for(let o in t)if(Object.prototype.hasOwnProperty.call(t,o))if(void 0===t[o])this.isAttribute(o)&&(s+="");else if(null===t[o])this.isAttribute(o)||o===this.options.cdataPropName?s+="":"?"===o[0]?s+=this.indentate(e)+"<"+o+"?"+this.tagEndChar:s+=this.indentate(e)+"<"+o+"/"+this.tagEndChar;else if(t[o]instanceof Date)s+=this.buildTextValNode(t[o],o,"",e);else if("object"!=typeof t[o]){const i=this.isAttribute(o);if(i&&!this.ignoreAttributesFn(i,r))n+=this.buildAttrPairStr(i,""+t[o]);else if(!i)if(o===this.options.textNodeName){let e=this.options.tagValueProcessor(o,""+t[o]);s+=this.replaceEntitiesValue(e)}else s+=this.buildTextValNode(t[o],o,"",e)}else if(Array.isArray(t[o])){const n=t[o].length;let r="",a="";for(let l=0;l<n;l++){const n=t[o][l];if(void 0===n);else if(null===n)"?"===o[0]?s+=this.indentate(e)+"<"+o+"?"+this.tagEndChar:s+=this.indentate(e)+"<"+o+"/"+this.tagEndChar;else if("object"==typeof n)if(this.options.oneListGroup){const t=this.j2x(n,e+1,i.concat(o));r+=t.val,this.options.attributesGroupName&&n.hasOwnProperty(this.options.attributesGroupName)&&(a+=t.attrStr)}else r+=this.processTextOrObjNode(n,o,e,i);else if(this.options.oneListGroup){let t=this.options.tagValueProcessor(o,n);t=this.replaceEntitiesValue(t),r+=t}else r+=this.buildTextValNode(n,o,"",e)}this.options.oneListGroup&&(r=this.buildObjectNode(r,o,a,e)),s+=r}else if(this.options.attributesGroupName&&o===this.options.attributesGroupName){const e=Object.keys(t[o]),i=e.length;for(let s=0;s<i;s++)n+=this.buildAttrPairStr(e[s],""+t[o][e[s]])}else s+=this.processTextOrObjNode(t[o],o,e,i);return{attrStr:n,val:s}},ut.prototype.buildAttrPairStr=function(t,e){return e=this.options.attributeValueProcessor(t,""+e),e=this.replaceEntitiesValue(e),this.options.suppressBooleanAttributes&&"true"===e?" "+t:" "+t+'="'+e+'"'},ut.prototype.buildObjectNode=function(t,e,i,n){if(""===t)return"?"===e[0]?this.indentate(n)+"<"+e+i+"?"+this.tagEndChar:this.indentate(n)+"<"+e+i+this.closeTag(e)+this.tagEndChar;{let s="</"+e+this.tagEndChar,r="";return"?"===e[0]&&(r="?",s=""),!i&&""!==i||-1!==t.indexOf("<")?!1!==this.options.commentPropName&&e===this.options.commentPropName&&0===r.length?this.indentate(n)+`\x3c!--${t}--\x3e`+this.newLine:this.indentate(n)+"<"+e+i+r+this.tagEndChar+t+this.indentate(n)+s:this.indentate(n)+"<"+e+i+r+">"+t+s}},ut.prototype.closeTag=function(t){let e="";return-1!==this.options.unpairedTags.indexOf(t)?this.options.suppressUnpairedNode||(e="/"):e=this.options.suppressEmptyNode?"/":`></${t}`,e},ut.prototype.buildTextValNode=function(t,e,i,n){if(!1!==this.options.cdataPropName&&e===this.options.cdataPropName)return this.indentate(n)+`<![CDATA[${t}]]>`+this.newLine;if(!1!==this.options.commentPropName&&e===this.options.commentPropName)return this.indentate(n)+`\x3c!--${t}--\x3e`+this.newLine;if("?"===e[0])return this.indentate(n)+"<"+e+i+"?"+this.tagEndChar;{let s=this.options.tagValueProcessor(e,t);return s=this.replaceEntitiesValue(s),""===s?this.indentate(n)+"<"+e+i+this.closeTag(e)+this.tagEndChar:this.indentate(n)+"<"+e+i+">"+s+"</"+e+this.tagEndChar}},ut.prototype.replaceEntitiesValue=function(t){if(t&&t.length>0&&this.options.processEntities)for(let e=0;e<this.options.entities.length;e++){const i=this.options.entities[e];t=t.replace(i.regex,i.val)}return t};const ft={validate:a};module.exports=e})(); | ||
| (()=>{"use strict";var t={d:(e,n)=>{for(var i in n)t.o(n,i)&&!t.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:n[i]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{XMLBuilder:()=>dt,XMLParser:()=>it,XMLValidator:()=>gt});const n=":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",i=new RegExp("^["+n+"]["+n+"\\-.\\d\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$");function s(t,e){const n=[];let i=e.exec(t);for(;i;){const s=[];s.startIndex=e.lastIndex-i[0].length;const r=i.length;for(let t=0;t<r;t++)s.push(i[t]);n.push(s),i=e.exec(t)}return n}const r=function(t){return!(null==i.exec(t))},o={allowBooleanAttributes:!1,unpairedTags:[]};function a(t,e){e=Object.assign({},o,e);const n=[];let i=!1,s=!1;"\ufeff"===t[0]&&(t=t.substr(1));for(let o=0;o<t.length;o++)if("<"===t[o]&&"?"===t[o+1]){if(o+=2,o=u(t,o),o.err)return o}else{if("<"!==t[o]){if(l(t[o]))continue;return m("InvalidChar","char '"+t[o]+"' is not expected.",b(t,o))}{let a=o;if(o++,"!"===t[o]){o=h(t,o);continue}{let d=!1;"/"===t[o]&&(d=!0,o++);let p="";for(;o<t.length&&">"!==t[o]&&" "!==t[o]&&"\t"!==t[o]&&"\n"!==t[o]&&"\r"!==t[o];o++)p+=t[o];if(p=p.trim(),"/"===p[p.length-1]&&(p=p.substring(0,p.length-1),o--),!r(p)){let e;return e=0===p.trim().length?"Invalid space after '<'.":"Tag '"+p+"' is an invalid name.",m("InvalidTag",e,b(t,o))}const c=f(t,o);if(!1===c)return m("InvalidAttr","Attributes for '"+p+"' have open quote.",b(t,o));let E=c.value;if(o=c.index,"/"===E[E.length-1]){const n=o-E.length;E=E.substring(0,E.length-1);const s=g(E,e);if(!0!==s)return m(s.err.code,s.err.msg,b(t,n+s.err.line));i=!0}else if(d){if(!c.tagClosed)return m("InvalidTag","Closing tag '"+p+"' doesn't have proper closing.",b(t,o));if(E.trim().length>0)return m("InvalidTag","Closing tag '"+p+"' can't have attributes or invalid starting.",b(t,a));if(0===n.length)return m("InvalidTag","Closing tag '"+p+"' has not been opened.",b(t,a));{const e=n.pop();if(p!==e.tagName){let n=b(t,e.tagStartPos);return m("InvalidTag","Expected closing tag '"+e.tagName+"' (opened in line "+n.line+", col "+n.col+") instead of closing tag '"+p+"'.",b(t,a))}0==n.length&&(s=!0)}}else{const r=g(E,e);if(!0!==r)return m(r.err.code,r.err.msg,b(t,o-E.length+r.err.line));if(!0===s)return m("InvalidXml","Multiple possible root nodes found.",b(t,o));-1!==e.unpairedTags.indexOf(p)||n.push({tagName:p,tagStartPos:a}),i=!0}for(o++;o<t.length;o++)if("<"===t[o]){if("!"===t[o+1]){o++,o=h(t,o);continue}if("?"!==t[o+1])break;if(o=u(t,++o),o.err)return o}else if("&"===t[o]){const e=x(t,o);if(-1==e)return m("InvalidChar","char '&' is not expected.",b(t,o));o=e}else if(!0===s&&!l(t[o]))return m("InvalidXml","Extra text at the end",b(t,o));"<"===t[o]&&o--}}}return i?1==n.length?m("InvalidTag","Unclosed tag '"+n[0].tagName+"'.",b(t,n[0].tagStartPos)):!(n.length>0)||m("InvalidXml","Invalid '"+JSON.stringify(n.map((t=>t.tagName)),null,4).replace(/\r?\n/g,"")+"' found.",{line:1,col:1}):m("InvalidXml","Start tag expected.",1)}function l(t){return" "===t||"\t"===t||"\n"===t||"\r"===t}function u(t,e){const n=e;for(;e<t.length;e++)if("?"!=t[e]&&" "!=t[e]);else{const i=t.substr(n,e-n);if(e>5&&"xml"===i)return m("InvalidXml","XML declaration allowed only at the start of the document.",b(t,e));if("?"==t[e]&&">"==t[e+1]){e++;break}}return e}function h(t,e){if(t.length>e+5&&"-"===t[e+1]&&"-"===t[e+2]){for(e+=3;e<t.length;e++)if("-"===t[e]&&"-"===t[e+1]&&">"===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]){let n=1;for(e+=8;e<t.length;e++)if("<"===t[e])n++;else if(">"===t[e]&&(n--,0===n))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.length;e++)if("]"===t[e]&&"]"===t[e+1]&&">"===t[e+2]){e+=2;break}return e}const d='"',p="'";function f(t,e){let n="",i="",s=!1;for(;e<t.length;e++){if(t[e]===d||t[e]===p)""===i?i=t[e]:i!==t[e]||(i="");else if(">"===t[e]&&""===i){s=!0;break}n+=t[e]}return""===i&&{value:n,index:e,tagClosed:s}}const c=new RegExp("(\\s*)([^\\s=]+)(\\s*=)?(\\s*(['\"])(([\\s\\S])*?)\\5)?","g");function g(t,e){const n=s(t,c),i={};for(let t=0;t<n.length;t++){if(0===n[t][1].length)return m("InvalidAttr","Attribute '"+n[t][2]+"' has no space in starting.",N(n[t]));if(void 0!==n[t][3]&&void 0===n[t][4])return m("InvalidAttr","Attribute '"+n[t][2]+"' is without value.",N(n[t]));if(void 0===n[t][3]&&!e.allowBooleanAttributes)return m("InvalidAttr","boolean attribute '"+n[t][2]+"' is not allowed.",N(n[t]));const s=n[t][2];if(!E(s))return m("InvalidAttr","Attribute '"+s+"' is an invalid name.",N(n[t]));if(i.hasOwnProperty(s))return m("InvalidAttr","Attribute '"+s+"' is repeated.",N(n[t]));i[s]=1}return!0}function x(t,e){if(";"===t[++e])return-1;if("#"===t[e])return function(t,e){let n=/\d/;for("x"===t[e]&&(e++,n=/[\da-fA-F]/);e<t.length;e++){if(";"===t[e])return e;if(!t[e].match(n))break}return-1}(t,++e);let n=0;for(;e<t.length;e++,n++)if(!(t[e].match(/\w/)&&n<20)){if(";"===t[e])break;return-1}return e}function m(t,e,n){return{err:{code:t,msg:e,line:n.line||n,col:n.col}}}function E(t){return r(t)}function b(t,e){const n=t.substring(0,e).split(/\r?\n/);return{line:n.length,col:n[n.length-1].length+1}}function N(t){return t.startIndex+t[1].length}const y={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:()=>!1,commentPropName:!1,unpairedTags:[],processEntities:!0,htmlEntities:!1,ignoreDeclaration:!1,ignorePiTags:!1,transformTagName:!1,transformAttributeName:!1,updateTag:function(t,e,n){return t},captureMetaData:!1};function T(t){return"boolean"==typeof t?{enabled:t,maxEntitySize:1e4,maxExpansionDepth:10,maxTotalExpansions:1e3,maxExpandedLength:1e5,allowedTags:null,tagFilter:null}:"object"==typeof t&&null!==t?{enabled:!1!==t.enabled,maxEntitySize:t.maxEntitySize??1e4,maxExpansionDepth:t.maxExpansionDepth??10,maxTotalExpansions:t.maxTotalExpansions??1e3,maxExpandedLength:t.maxExpandedLength??1e5,allowedTags:t.allowedTags??null,tagFilter:t.tagFilter??null}:T(!0)}const w=function(t){const e=Object.assign({},y,t);return e.processEntities=T(e.processEntities),e};let v;v="function"!=typeof Symbol?"@@xmlMetadata":Symbol("XML Node Metadata");class I{constructor(t){this.tagname=t,this.child=[],this[":@"]={}}add(t,e){"__proto__"===t&&(t="#__proto__"),this.child.push({[t]:e})}addChild(t,e){"__proto__"===t.tagname&&(t.tagname="#__proto__"),t[":@"]&&Object.keys(t[":@"]).length>0?this.child.push({[t.tagname]:t.child,":@":t[":@"]}):this.child.push({[t.tagname]:t.child}),void 0!==e&&(this.child[this.child.length-1][v]={startIndex:e})}static getMetaDataSymbol(){return v}}class O{constructor(t){this.suppressValidationErr=!t,this.options=t}readDocType(t,e){const n={};if("O"!==t[e+3]||"C"!==t[e+4]||"T"!==t[e+5]||"Y"!==t[e+6]||"P"!==t[e+7]||"E"!==t[e+8])throw new Error("Invalid Tag instead of DOCTYPE");{e+=9;let i=1,s=!1,r=!1,o="";for(;e<t.length;e++)if("<"!==t[e]||r)if(">"===t[e]){if(r?"-"===t[e-1]&&"-"===t[e-2]&&(r=!1,i--):i--,0===i)break}else"["===t[e]?s=!0:o+=t[e];else{if(s&&A(t,"!ENTITY",e)){let i,s;if(e+=7,[i,s,e]=this.readEntityExp(t,e+1,this.suppressValidationErr),-1===s.indexOf("&")){const t=i.replace(/[.\-+*:]/g,"\\.");n[i]={regx:RegExp(`&${t};`,"g"),val:s}}}else if(s&&A(t,"!ELEMENT",e)){e+=8;const{index:n}=this.readElementExp(t,e+1);e=n}else if(s&&A(t,"!ATTLIST",e))e+=8;else if(s&&A(t,"!NOTATION",e)){e+=9;const{index:n}=this.readNotationExp(t,e+1,this.suppressValidationErr);e=n}else{if(!A(t,"!--",e))throw new Error("Invalid DOCTYPE");r=!0}i++,o=""}if(0!==i)throw new Error("Unclosed DOCTYPE")}return{entities:n,i:e}}readEntityExp(t,e){e=P(t,e);let n="";for(;e<t.length&&!/\s/.test(t[e])&&'"'!==t[e]&&"'"!==t[e];)n+=t[e],e++;if(S(n),e=P(t,e),!this.suppressValidationErr){if("SYSTEM"===t.substring(e,e+6).toUpperCase())throw new Error("External entities are not supported");if("%"===t[e])throw new Error("Parameter entities are not supported")}let i="";if([e,i]=this.readIdentifierVal(t,e,"entity"),!1!==this.options.enabled&&this.options.maxEntitySize&&i.length>this.options.maxEntitySize)throw new Error(`Entity "${n}" size (${i.length}) exceeds maximum allowed size (${this.options.maxEntitySize})`);return[n,i,--e]}readNotationExp(t,e){e=P(t,e);let n="";for(;e<t.length&&!/\s/.test(t[e]);)n+=t[e],e++;!this.suppressValidationErr&&S(n),e=P(t,e);const i=t.substring(e,e+6).toUpperCase();if(!this.suppressValidationErr&&"SYSTEM"!==i&&"PUBLIC"!==i)throw new Error(`Expected SYSTEM or PUBLIC, found "${i}"`);e+=i.length,e=P(t,e);let s=null,r=null;if("PUBLIC"===i)[e,s]=this.readIdentifierVal(t,e,"publicIdentifier"),'"'!==t[e=P(t,e)]&&"'"!==t[e]||([e,r]=this.readIdentifierVal(t,e,"systemIdentifier"));else if("SYSTEM"===i&&([e,r]=this.readIdentifierVal(t,e,"systemIdentifier"),!this.suppressValidationErr&&!r))throw new Error("Missing mandatory system identifier for SYSTEM notation");return{notationName:n,publicIdentifier:s,systemIdentifier:r,index:--e}}readIdentifierVal(t,e,n){let i="";const s=t[e];if('"'!==s&&"'"!==s)throw new Error(`Expected quoted string, found "${s}"`);for(e++;e<t.length&&t[e]!==s;)i+=t[e],e++;if(t[e]!==s)throw new Error(`Unterminated ${n} value`);return[++e,i]}readElementExp(t,e){e=P(t,e);let n="";for(;e<t.length&&!/\s/.test(t[e]);)n+=t[e],e++;if(!this.suppressValidationErr&&!r(n))throw new Error(`Invalid element name: "${n}"`);let i="";if("E"===t[e=P(t,e)]&&A(t,"MPTY",e))e+=4;else if("A"===t[e]&&A(t,"NY",e))e+=2;else if("("===t[e]){for(e++;e<t.length&&")"!==t[e];)i+=t[e],e++;if(")"!==t[e])throw new Error("Unterminated content model")}else if(!this.suppressValidationErr)throw new Error(`Invalid Element Expression, found "${t[e]}"`);return{elementName:n,contentModel:i.trim(),index:e}}readAttlistExp(t,e){e=P(t,e);let n="";for(;e<t.length&&!/\s/.test(t[e]);)n+=t[e],e++;S(n),e=P(t,e);let i="";for(;e<t.length&&!/\s/.test(t[e]);)i+=t[e],e++;if(!S(i))throw new Error(`Invalid attribute name: "${i}"`);e=P(t,e);let s="";if("NOTATION"===t.substring(e,e+8).toUpperCase()){if(s="NOTATION","("!==t[e=P(t,e+=8)])throw new Error(`Expected '(', found "${t[e]}"`);e++;let n=[];for(;e<t.length&&")"!==t[e];){let i="";for(;e<t.length&&"|"!==t[e]&&")"!==t[e];)i+=t[e],e++;if(i=i.trim(),!S(i))throw new Error(`Invalid notation name: "${i}"`);n.push(i),"|"===t[e]&&(e++,e=P(t,e))}if(")"!==t[e])throw new Error("Unterminated list of notations");e++,s+=" ("+n.join("|")+")"}else{for(;e<t.length&&!/\s/.test(t[e]);)s+=t[e],e++;const n=["CDATA","ID","IDREF","IDREFS","ENTITY","ENTITIES","NMTOKEN","NMTOKENS"];if(!this.suppressValidationErr&&!n.includes(s.toUpperCase()))throw new Error(`Invalid attribute type: "${s}"`)}e=P(t,e);let r="";return"#REQUIRED"===t.substring(e,e+8).toUpperCase()?(r="#REQUIRED",e+=8):"#IMPLIED"===t.substring(e,e+7).toUpperCase()?(r="#IMPLIED",e+=7):[e,r]=this.readIdentifierVal(t,e,"ATTLIST"),{elementName:n,attributeName:i,attributeType:s,defaultValue:r,index:e}}}const P=(t,e)=>{for(;e<t.length&&/\s/.test(t[e]);)e++;return e};function A(t,e,n){for(let i=0;i<e.length;i++)if(e[i]!==t[n+i+1])return!1;return!0}function S(t){if(r(t))return t;throw new Error(`Invalid entity name ${t}`)}const C=/^[-+]?0x[a-fA-F0-9]+$/,$=/^([\-\+])?(0*)([0-9]*(\.[0-9]*)?)$/,V={hex:!0,leadingZeros:!0,decimalPoint:".",eNotation:!0};const D=/^([-+])?(0*)(\d*(\.\d*)?[eE][-\+]?\d+)$/;function L(t){return"function"==typeof t?t:Array.isArray(t)?e=>{for(const n of t){if("string"==typeof n&&e===n)return!0;if(n instanceof RegExp&&n.test(e))return!0}}:()=>!1}class F{constructor(t){if(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:"₹"},num_dec:{regex:/&#([0-9]{1,7});/g,val:(t,e)=>K(e,10,"&#")},num_hex:{regex:/&#x([0-9a-fA-F]{1,6});/g,val:(t,e)=>K(e,16,"&#x")}},this.addExternalEntities=j,this.parseXml=B,this.parseTextData=M,this.resolveNameSpace=_,this.buildAttributesMap=U,this.isItStopNode=X,this.replaceEntitiesValue=Y,this.readStopNodeData=q,this.saveTextToParentTag=G,this.addChild=R,this.ignoreAttributesFn=L(this.options.ignoreAttributes),this.entityExpansionCount=0,this.currentExpandedLength=0,this.options.stopNodes&&this.options.stopNodes.length>0){this.stopNodesExact=new Set,this.stopNodesWildcard=new Set;for(let t=0;t<this.options.stopNodes.length;t++){const e=this.options.stopNodes[t];"string"==typeof e&&(e.startsWith("*.")?this.stopNodesWildcard.add(e.substring(2)):this.stopNodesExact.add(e))}}}}function j(t){const e=Object.keys(t);for(let n=0;n<e.length;n++){const i=e[n],s=i.replace(/[.\-+*:]/g,"\\.");this.lastEntities[i]={regex:new RegExp("&"+s+";","g"),val:t[i]}}}function M(t,e,n,i,s,r,o){if(void 0!==t&&(this.options.trimValues&&!i&&(t=t.trim()),t.length>0)){o||(t=this.replaceEntitiesValue(t,e,n));const i=this.options.tagValueProcessor(e,t,n,s,r);return null==i?t:typeof i!=typeof t||i!==t?i:this.options.trimValues||t.trim()===t?Z(t,this.options.parseTagValue,this.options.numberParseOptions):t}}function _(t){if(this.options.removeNSPrefix){const e=t.split(":"),n="/"===t.charAt(0)?"/":"";if("xmlns"===e[0])return"";2===e.length&&(t=n+e[1])}return t}const k=new RegExp("([^\\s=]+)\\s*(=\\s*(['\"])([\\s\\S]*?)\\3)?","gm");function U(t,e,n){if(!0!==this.options.ignoreAttributes&&"string"==typeof t){const i=s(t,k),r=i.length,o={};for(let t=0;t<r;t++){const s=this.resolveNameSpace(i[t][1]);if(this.ignoreAttributesFn(s,e))continue;let r=i[t][4],a=this.options.attributeNamePrefix+s;if(s.length)if(this.options.transformAttributeName&&(a=this.options.transformAttributeName(a)),"__proto__"===a&&(a="#__proto__"),void 0!==r){this.options.trimValues&&(r=r.trim()),r=this.replaceEntitiesValue(r,n,e);const t=this.options.attributeValueProcessor(s,r,e);o[a]=null==t?r:typeof t!=typeof r||t!==r?t:Z(r,this.options.parseAttributeValue,this.options.numberParseOptions)}else this.options.allowBooleanAttributes&&(o[a]=!0)}if(!Object.keys(o).length)return;if(this.options.attributesGroupName){const t={};return t[this.options.attributesGroupName]=o,t}return o}}const B=function(t){t=t.replace(/\r\n?/g,"\n");const e=new I("!xml");let n=e,i="",s="";this.entityExpansionCount=0,this.currentExpandedLength=0;const r=new O(this.options.processEntities);for(let o=0;o<t.length;o++)if("<"===t[o])if("/"===t[o+1]){const e=z(t,">",o,"Closing Tag is not closed.");let r=t.substring(o+2,e).trim();if(this.options.removeNSPrefix){const t=r.indexOf(":");-1!==t&&(r=r.substr(t+1))}this.options.transformTagName&&(r=this.options.transformTagName(r)),n&&(i=this.saveTextToParentTag(i,n,s));const a=s.substring(s.lastIndexOf(".")+1);if(r&&-1!==this.options.unpairedTags.indexOf(r))throw new Error(`Unpaired tag can not be used as closing tag: </${r}>`);let l=0;a&&-1!==this.options.unpairedTags.indexOf(a)?(l=s.lastIndexOf(".",s.lastIndexOf(".")-1),this.tagsNodeStack.pop()):l=s.lastIndexOf("."),s=s.substring(0,l),n=this.tagsNodeStack.pop(),i="",o=e}else if("?"===t[o+1]){let e=W(t,o,!1,"?>");if(!e)throw new Error("Pi Tag is not closed.");if(i=this.saveTextToParentTag(i,n,s),this.options.ignoreDeclaration&&"?xml"===e.tagName||this.options.ignorePiTags);else{const t=new I(e.tagName);t.add(this.options.textNodeName,""),e.tagName!==e.tagExp&&e.attrExpPresent&&(t[":@"]=this.buildAttributesMap(e.tagExp,s,e.tagName)),this.addChild(n,t,s,o)}o=e.closeIndex+1}else if("!--"===t.substr(o+1,3)){const e=z(t,"--\x3e",o+4,"Comment is not closed.");if(this.options.commentPropName){const r=t.substring(o+4,e-2);i=this.saveTextToParentTag(i,n,s),n.add(this.options.commentPropName,[{[this.options.textNodeName]:r}])}o=e}else if("!D"===t.substr(o+1,2)){const e=r.readDocType(t,o);this.docTypeEntities=e.entities,o=e.i}else if("!["===t.substr(o+1,2)){const e=z(t,"]]>",o,"CDATA is not closed.")-2,r=t.substring(o+9,e);i=this.saveTextToParentTag(i,n,s);let a=this.parseTextData(r,n.tagname,s,!0,!1,!0,!0);null==a&&(a=""),this.options.cdataPropName?n.add(this.options.cdataPropName,[{[this.options.textNodeName]:r}]):n.add(this.options.textNodeName,a),o=e+2}else{let r=W(t,o,this.options.removeNSPrefix),a=r.tagName;const l=r.rawTagName;let u=r.tagExp,h=r.attrExpPresent,d=r.closeIndex;if(this.options.transformTagName){const t=this.options.transformTagName(a);u===a&&(u=t),a=t}n&&i&&"!xml"!==n.tagname&&(i=this.saveTextToParentTag(i,n,s,!1));const p=n;p&&-1!==this.options.unpairedTags.indexOf(p.tagname)&&(n=this.tagsNodeStack.pop(),s=s.substring(0,s.lastIndexOf("."))),a!==e.tagname&&(s+=s?"."+a:a);const f=o;if(this.isItStopNode(this.stopNodesExact,this.stopNodesWildcard,s,a)){let e="";if(u.length>0&&u.lastIndexOf("/")===u.length-1)"/"===a[a.length-1]?(a=a.substr(0,a.length-1),s=s.substr(0,s.length-1),u=a):u=u.substr(0,u.length-1),o=r.closeIndex;else if(-1!==this.options.unpairedTags.indexOf(a))o=r.closeIndex;else{const n=this.readStopNodeData(t,l,d+1);if(!n)throw new Error(`Unexpected end of ${l}`);o=n.i,e=n.tagContent}const i=new I(a);a!==u&&h&&(i[":@"]=this.buildAttributesMap(u,s,a)),e&&(e=this.parseTextData(e,a,s,!0,h,!0,!0)),s=s.substr(0,s.lastIndexOf(".")),i.add(this.options.textNodeName,e),this.addChild(n,i,s,f)}else{if(u.length>0&&u.lastIndexOf("/")===u.length-1){if("/"===a[a.length-1]?(a=a.substr(0,a.length-1),s=s.substr(0,s.length-1),u=a):u=u.substr(0,u.length-1),this.options.transformTagName){const t=this.options.transformTagName(a);u===a&&(u=t),a=t}const t=new I(a);a!==u&&h&&(t[":@"]=this.buildAttributesMap(u,s,a)),this.addChild(n,t,s,f),s=s.substr(0,s.lastIndexOf("."))}else{const t=new I(a);this.tagsNodeStack.push(n),a!==u&&h&&(t[":@"]=this.buildAttributesMap(u,s,a)),this.addChild(n,t,s,f),n=t}i="",o=d}}else i+=t[o];return e.child};function R(t,e,n,i){this.options.captureMetaData||(i=void 0);const s=this.options.updateTag(e.tagname,n,e[":@"]);!1===s||("string"==typeof s?(e.tagname=s,t.addChild(e,i)):t.addChild(e,i))}const Y=function(t,e,n){if(-1===t.indexOf("&"))return t;const i=this.options.processEntities;if(!i.enabled)return t;if(i.allowedTags&&!i.allowedTags.includes(e))return t;if(i.tagFilter&&!i.tagFilter(e,n))return t;for(let e in this.docTypeEntities){const n=this.docTypeEntities[e],s=t.match(n.regx);if(s){if(this.entityExpansionCount+=s.length,i.maxTotalExpansions&&this.entityExpansionCount>i.maxTotalExpansions)throw new Error(`Entity expansion limit exceeded: ${this.entityExpansionCount} > ${i.maxTotalExpansions}`);const e=t.length;if(t=t.replace(n.regx,n.val),i.maxExpandedLength&&(this.currentExpandedLength+=t.length-e,this.currentExpandedLength>i.maxExpandedLength))throw new Error(`Total expanded content size exceeded: ${this.currentExpandedLength} > ${i.maxExpandedLength}`)}}if(-1===t.indexOf("&"))return t;for(let e in this.lastEntities){const n=this.lastEntities[e];t=t.replace(n.regex,n.val)}if(-1===t.indexOf("&"))return t;if(this.options.htmlEntities)for(let e in this.htmlEntities){const n=this.htmlEntities[e];t=t.replace(n.regex,n.val)}return t.replace(this.ampEntity.regex,this.ampEntity.val)};function G(t,e,n,i){return t&&(void 0===i&&(i=0===e.child.length),void 0!==(t=this.parseTextData(t,e.tagname,n,!1,!!e[":@"]&&0!==Object.keys(e[":@"]).length,i))&&""!==t&&e.add(this.options.textNodeName,t),t=""),t}function X(t,e,n,i){return!(!e||!e.has(i))||!(!t||!t.has(n))}function z(t,e,n,i){const s=t.indexOf(e,n);if(-1===s)throw new Error(i);return s+e.length-1}function W(t,e,n,i=">"){const s=function(t,e,n=">"){let i,s="";for(let r=e;r<t.length;r++){let e=t[r];if(i)e===i&&(i="");else if('"'===e||"'"===e)i=e;else if(e===n[0]){if(!n[1])return{data:s,index:r};if(t[r+1]===n[1])return{data:s,index:r}}else"\t"===e&&(e=" ");s+=e}}(t,e+1,i);if(!s)return;let r=s.data;const o=s.index,a=r.search(/\s/);let l=r,u=!0;-1!==a&&(l=r.substring(0,a),r=r.substring(a+1).trimStart());const h=l;if(n){const t=l.indexOf(":");-1!==t&&(l=l.substr(t+1),u=l!==s.data.substr(t+1))}return{tagName:l,tagExp:r,closeIndex:o,attrExpPresent:u,rawTagName:h}}function q(t,e,n){const i=n;let s=1;for(;n<t.length;n++)if("<"===t[n])if("/"===t[n+1]){const r=z(t,">",n,`${e} is not closed`);if(t.substring(n+2,r).trim()===e&&(s--,0===s))return{tagContent:t.substring(i,n),i:r};n=r}else if("?"===t[n+1])n=z(t,"?>",n+1,"StopNode is not closed.");else if("!--"===t.substr(n+1,3))n=z(t,"--\x3e",n+3,"StopNode is not closed.");else if("!["===t.substr(n+1,2))n=z(t,"]]>",n,"StopNode is not closed.")-2;else{const i=W(t,n,">");i&&((i&&i.tagName)===e&&"/"!==i.tagExp[i.tagExp.length-1]&&s++,n=i.closeIndex)}}function Z(t,e,n){if(e&&"string"==typeof t){const e=t.trim();return"true"===e||"false"!==e&&function(t,e={}){if(e=Object.assign({},V,e),!t||"string"!=typeof t)return t;let n=t.trim();if(void 0!==e.skipLike&&e.skipLike.test(n))return t;if("0"===t)return 0;if(e.hex&&C.test(n))return function(t){if(parseInt)return parseInt(t,16);if(Number.parseInt)return Number.parseInt(t,16);if(window&&window.parseInt)return window.parseInt(t,16);throw new Error("parseInt, Number.parseInt, window.parseInt are not supported")}(n);if(-1!==n.search(/.+[eE].+/))return function(t,e,n){if(!n.eNotation)return t;const i=e.match(D);if(i){let s=i[1]||"";const r=-1===i[3].indexOf("e")?"E":"e",o=i[2],a=s?t[o.length+1]===r:t[o.length]===r;return o.length>1&&a?t:1!==o.length||!i[3].startsWith(`.${r}`)&&i[3][0]!==r?n.leadingZeros&&!a?(e=(i[1]||"")+i[3],Number(e)):t:Number(e)}return t}(t,n,e);{const s=$.exec(n);if(s){const r=s[1]||"",o=s[2];let a=(i=s[3])&&-1!==i.indexOf(".")?("."===(i=i.replace(/0+$/,""))?i="0":"."===i[0]?i="0"+i:"."===i[i.length-1]&&(i=i.substring(0,i.length-1)),i):i;const l=r?"."===t[o.length+1]:"."===t[o.length];if(!e.leadingZeros&&(o.length>1||1===o.length&&!l))return t;{const i=Number(n),s=String(i);if(0===i||-0===i)return i;if(-1!==s.search(/[eE]/))return e.eNotation?i:t;if(-1!==n.indexOf("."))return"0"===s||s===a||s===`${r}${a}`?i:t;let l=o?a:n;return o?l===s||r+l===s?i:t:l===s||l===r+s?i:t}}return t}var i}(t,n)}return void 0!==t?t:""}function K(t,e,n){const i=Number.parseInt(t,e);return i>=0&&i<=1114111?String.fromCodePoint(i):n+t+";"}const Q=I.getMetaDataSymbol();function J(t,e){return H(t,e)}function H(t,e,n){let i;const s={};for(let r=0;r<t.length;r++){const o=t[r],a=tt(o);let l="";if(l=void 0===n?a:n+"."+a,a===e.textNodeName)void 0===i?i=o[a]:i+=""+o[a];else{if(void 0===a)continue;if(o[a]){let t=H(o[a],e,l);const n=nt(t,e);void 0!==o[Q]&&(t[Q]=o[Q]),o[":@"]?et(t,o[":@"],l,e):1!==Object.keys(t).length||void 0===t[e.textNodeName]||e.alwaysCreateTextNode?0===Object.keys(t).length&&(e.alwaysCreateTextNode?t[e.textNodeName]="":t=""):t=t[e.textNodeName],void 0!==s[a]&&s.hasOwnProperty(a)?(Array.isArray(s[a])||(s[a]=[s[a]]),s[a].push(t)):e.isArray(a,l,n)?s[a]=[t]:s[a]=t}}}return"string"==typeof i?i.length>0&&(s[e.textNodeName]=i):void 0!==i&&(s[e.textNodeName]=i),s}function tt(t){const e=Object.keys(t);for(let t=0;t<e.length;t++){const n=e[t];if(":@"!==n)return n}}function et(t,e,n,i){if(e){const s=Object.keys(e),r=s.length;for(let o=0;o<r;o++){const r=s[o];i.isArray(r,n+"."+r,!0,!0)?t[r]=[e[r]]:t[r]=e[r]}}}function nt(t,e){const{textNodeName:n}=e,i=Object.keys(t).length;return 0===i||!(1!==i||!t[n]&&"boolean"!=typeof t[n]&&0!==t[n])}class it{constructor(t){this.externalEntities={},this.options=w(t)}parse(t,e){if("string"!=typeof t&&t.toString)t=t.toString();else if("string"!=typeof t)throw new Error("XML data is accepted in String or Bytes[] form.");if(e){!0===e&&(e={});const n=a(t,e);if(!0!==n)throw Error(`${n.err.msg}:${n.err.line}:${n.err.col}`)}const n=new F(this.options);n.addExternalEntities(this.externalEntities);const i=n.parseXml(t);return this.options.preserveOrder||void 0===i?i:J(i,this.options)}addEntity(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}static getMetaDataSymbol(){return I.getMetaDataSymbol()}}function st(t,e){let n="";return e.format&&e.indentBy.length>0&&(n="\n"),rt(t,e,"",n)}function rt(t,e,n,i){let s="",r=!1;for(let o=0;o<t.length;o++){const a=t[o],l=ot(a);if(void 0===l)continue;let u="";if(u=0===n.length?l:`${n}.${l}`,l===e.textNodeName){let t=a[l];lt(u,e)||(t=e.tagValueProcessor(l,t),t=ut(t,e)),r&&(s+=i),s+=t,r=!1;continue}if(l===e.cdataPropName){r&&(s+=i),s+=`<![CDATA[${a[l][0][e.textNodeName]}]]>`,r=!1;continue}if(l===e.commentPropName){s+=i+`\x3c!--${a[l][0][e.textNodeName]}--\x3e`,r=!0;continue}if("?"===l[0]){const t=at(a[":@"],e),n="?xml"===l?"":i;let o=a[l][0][e.textNodeName];o=0!==o.length?" "+o:"",s+=n+`<${l}${o}${t}?>`,r=!0;continue}let h=i;""!==h&&(h+=e.indentBy);const d=i+`<${l}${at(a[":@"],e)}`,p=rt(a[l],e,u,h);-1!==e.unpairedTags.indexOf(l)?e.suppressUnpairedNode?s+=d+">":s+=d+"/>":p&&0!==p.length||!e.suppressEmptyNode?p&&p.endsWith(">")?s+=d+`>${p}${i}</${l}>`:(s+=d+">",p&&""!==i&&(p.includes("/>")||p.includes("</"))?s+=i+e.indentBy+p+i:s+=p,s+=`</${l}>`):s+=d+"/>",r=!0}return s}function ot(t){const e=Object.keys(t);for(let n=0;n<e.length;n++){const i=e[n];if(t.hasOwnProperty(i)&&":@"!==i)return i}}function at(t,e){let n="";if(t&&!e.ignoreAttributes)for(let i in t){if(!t.hasOwnProperty(i))continue;let s=e.attributeValueProcessor(i,t[i]);s=ut(s,e),!0===s&&e.suppressBooleanAttributes?n+=` ${i.substr(e.attributeNamePrefix.length)}`:n+=` ${i.substr(e.attributeNamePrefix.length)}="${s}"`}return n}function lt(t,e){let n=(t=t.substr(0,t.length-e.textNodeName.length-1)).substr(t.lastIndexOf(".")+1);for(let i in e.stopNodes)if(e.stopNodes[i]===t||e.stopNodes[i]==="*."+n)return!0;return!1}function ut(t,e){if(t&&t.length>0&&e.processEntities)for(let n=0;n<e.entities.length;n++){const i=e.entities[n];t=t.replace(i.regex,i.val)}return t}const ht={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 dt(t){this.options=Object.assign({},ht,t),!0===this.options.ignoreAttributes||this.options.attributesGroupName?this.isAttribute=function(){return!1}:(this.ignoreAttributesFn=L(this.options.ignoreAttributes),this.attrPrefixLen=this.options.attributeNamePrefix.length,this.isAttribute=ct),this.processTextOrObjNode=pt,this.options.format?(this.indentate=ft,this.tagEndChar=">\n",this.newLine="\n"):(this.indentate=function(){return""},this.tagEndChar=">",this.newLine="")}function pt(t,e,n,i){const s=this.j2x(t,n+1,i.concat(e));return void 0!==t[this.options.textNodeName]&&1===Object.keys(t).length?this.buildTextValNode(t[this.options.textNodeName],e,s.attrStr,n):this.buildObjectNode(s.val,e,s.attrStr,n)}function ft(t){return this.options.indentBy.repeat(t)}function ct(t){return!(!t.startsWith(this.options.attributeNamePrefix)||t===this.options.textNodeName)&&t.substr(this.attrPrefixLen)}dt.prototype.build=function(t){return this.options.preserveOrder?st(t,this.options):(Array.isArray(t)&&this.options.arrayNodeName&&this.options.arrayNodeName.length>1&&(t={[this.options.arrayNodeName]:t}),this.j2x(t,0,[]).val)},dt.prototype.j2x=function(t,e,n){let i="",s="";const r=n.join(".");for(let o in t)if(Object.prototype.hasOwnProperty.call(t,o))if(void 0===t[o])this.isAttribute(o)&&(s+="");else if(null===t[o])this.isAttribute(o)||o===this.options.cdataPropName?s+="":"?"===o[0]?s+=this.indentate(e)+"<"+o+"?"+this.tagEndChar:s+=this.indentate(e)+"<"+o+"/"+this.tagEndChar;else if(t[o]instanceof Date)s+=this.buildTextValNode(t[o],o,"",e);else if("object"!=typeof t[o]){const n=this.isAttribute(o);if(n&&!this.ignoreAttributesFn(n,r))i+=this.buildAttrPairStr(n,""+t[o]);else if(!n)if(o===this.options.textNodeName){let e=this.options.tagValueProcessor(o,""+t[o]);s+=this.replaceEntitiesValue(e)}else s+=this.buildTextValNode(t[o],o,"",e)}else if(Array.isArray(t[o])){const i=t[o].length;let r="",a="";for(let l=0;l<i;l++){const i=t[o][l];if(void 0===i);else if(null===i)"?"===o[0]?s+=this.indentate(e)+"<"+o+"?"+this.tagEndChar:s+=this.indentate(e)+"<"+o+"/"+this.tagEndChar;else if("object"==typeof i)if(this.options.oneListGroup){const t=this.j2x(i,e+1,n.concat(o));r+=t.val,this.options.attributesGroupName&&i.hasOwnProperty(this.options.attributesGroupName)&&(a+=t.attrStr)}else r+=this.processTextOrObjNode(i,o,e,n);else if(this.options.oneListGroup){let t=this.options.tagValueProcessor(o,i);t=this.replaceEntitiesValue(t),r+=t}else r+=this.buildTextValNode(i,o,"",e)}this.options.oneListGroup&&(r=this.buildObjectNode(r,o,a,e)),s+=r}else if(this.options.attributesGroupName&&o===this.options.attributesGroupName){const e=Object.keys(t[o]),n=e.length;for(let s=0;s<n;s++)i+=this.buildAttrPairStr(e[s],""+t[o][e[s]])}else s+=this.processTextOrObjNode(t[o],o,e,n);return{attrStr:i,val:s}},dt.prototype.buildAttrPairStr=function(t,e){return e=this.options.attributeValueProcessor(t,""+e),e=this.replaceEntitiesValue(e),this.options.suppressBooleanAttributes&&"true"===e?" "+t:" "+t+'="'+e+'"'},dt.prototype.buildObjectNode=function(t,e,n,i){if(""===t)return"?"===e[0]?this.indentate(i)+"<"+e+n+"?"+this.tagEndChar:this.indentate(i)+"<"+e+n+this.closeTag(e)+this.tagEndChar;{let s="</"+e+this.tagEndChar,r="";return"?"===e[0]&&(r="?",s=""),!n&&""!==n||-1!==t.indexOf("<")?!1!==this.options.commentPropName&&e===this.options.commentPropName&&0===r.length?this.indentate(i)+`\x3c!--${t}--\x3e`+this.newLine:this.indentate(i)+"<"+e+n+r+this.tagEndChar+t+this.indentate(i)+s:this.indentate(i)+"<"+e+n+r+">"+t+s}},dt.prototype.closeTag=function(t){let e="";return-1!==this.options.unpairedTags.indexOf(t)?this.options.suppressUnpairedNode||(e="/"):e=this.options.suppressEmptyNode?"/":`></${t}`,e},dt.prototype.buildTextValNode=function(t,e,n,i){if(!1!==this.options.cdataPropName&&e===this.options.cdataPropName)return this.indentate(i)+`<![CDATA[${t}]]>`+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+n+"?"+this.tagEndChar;{let s=this.options.tagValueProcessor(e,t);return s=this.replaceEntitiesValue(s),""===s?this.indentate(i)+"<"+e+n+this.closeTag(e)+this.tagEndChar:this.indentate(i)+"<"+e+n+">"+s+"</"+e+this.tagEndChar}},dt.prototype.replaceEntitiesValue=function(t){if(t&&t.length>0&&this.options.processEntities)for(let e=0;e<this.options.entities.length;e++){const n=this.options.entities[e];t=t.replace(n.regex,n.val)}return t};const gt={validate:a};module.exports=e})(); |
+76
-13
@@ -1,3 +0,59 @@ | ||
| type X2jOptions = { | ||
| type ProcessEntitiesOptions = { | ||
| /** | ||
| * Whether to enable entity processing | ||
| * | ||
| * Defaults to `true` | ||
| */ | ||
| enabled?: boolean; | ||
| /** | ||
| * Maximum size in characters for a single entity definition | ||
| * | ||
| * Defaults to `10000` | ||
| */ | ||
| maxEntitySize?: number; | ||
| /** | ||
| * Maximum depth for nested entity references (reserved for future use) | ||
| * | ||
| * Defaults to `10` | ||
| */ | ||
| maxExpansionDepth?: number; | ||
| /** | ||
| * Maximum total number of entity expansions allowed | ||
| * | ||
| * Defaults to `1000` | ||
| */ | ||
| maxTotalExpansions?: number; | ||
| /** | ||
| * Maximum total expanded content length in characters | ||
| * | ||
| * Defaults to `100000` | ||
| */ | ||
| maxExpandedLength?: number; | ||
| /** | ||
| * Array of tag names where entity replacement is allowed. | ||
| * If null, entities are replaced in all tags. | ||
| * | ||
| * Defaults to `null` | ||
| */ | ||
| allowedTags?: string[] | null; | ||
| /** | ||
| * Custom filter function to determine if entities should be replaced in a tag | ||
| * | ||
| * @param tagName - The name of the current tag | ||
| * @param jPath - The jPath of the current tag | ||
| * @returns `true` to allow entity replacement, `false` to skip | ||
| * | ||
| * Defaults to `null` | ||
| */ | ||
| tagFilter?: ((tagName: string, jPath: string) => boolean) | null; | ||
| }; | ||
| export type X2jOptions = { | ||
| /** | ||
| * Preserve the order of tags in resulting JS object | ||
@@ -13,3 +69,3 @@ * | ||
| * Defaults to '@_' | ||
| */ | ||
| */ | ||
| attributeNamePrefix?: string; | ||
@@ -68,3 +124,3 @@ | ||
| /** | ||
| * Whether to parse tag value with `strnum` package | ||
| * Whether to parse attribute value with `strnum` package | ||
| * | ||
@@ -166,5 +222,11 @@ * Defaults to `false` | ||
| * | ||
| * When `true` - enables entity processing with default limits | ||
| * | ||
| * When `false` - disables all entity processing | ||
| * | ||
| * When `ProcessEntitiesOptions` - enables entity processing with custom configuration | ||
| * | ||
| * Defaults to `true` | ||
| */ | ||
| processEntities?: boolean; | ||
| processEntities?: boolean | ProcessEntitiesOptions; | ||
@@ -215,3 +277,3 @@ /** | ||
| */ | ||
| updateTag?: (tagName: string, jPath: string, attrs: {[k: string]: string}) => string | boolean; | ||
| updateTag?: (tagName: string, jPath: string, attrs: { [k: string]: string }) => string | boolean; | ||
@@ -239,3 +301,3 @@ /** | ||
| allowBooleanAttributes?: boolean; | ||
| /** | ||
@@ -254,3 +316,3 @@ * List of tags without closing tags | ||
| * Defaults to '@_' | ||
| */ | ||
| */ | ||
| attributeNamePrefix?: string; | ||
@@ -402,10 +464,10 @@ | ||
| type ESchema = string | object | Array<string|object>; | ||
| type ESchema = string | object | Array<string | object>; | ||
| type ValidationError = { | ||
| err: { | ||
| err: { | ||
| code: string; | ||
| msg: string, | ||
| line: number, | ||
| col: number | ||
| col: number | ||
| }; | ||
@@ -416,3 +478,3 @@ }; | ||
| constructor(options?: X2jOptions); | ||
| parse(xmlData: string | Uint8Array ,validationOptions?: validationOptions | boolean): any; | ||
| parse(xmlData: string | Uint8Array, validationOptions?: validationOptions | boolean): any; | ||
| /** | ||
@@ -435,6 +497,6 @@ * Add Entity which is not by default supported by this library | ||
| */ | ||
| static getMetaDataSymbol() : Symbol; | ||
| static getMetaDataSymbol(): Symbol; | ||
| } | ||
| declare class XMLValidator{ | ||
| declare class XMLValidator { | ||
| static validate(xmlData: string, options?: validationOptions): true | ValidationError; | ||
@@ -470,2 +532,3 @@ } | ||
| validationOptions, | ||
| ProcessEntitiesOptions, | ||
| } | ||
@@ -472,0 +535,0 @@ } |
+1
-1
@@ -1,2 +0,2 @@ | ||
| !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.fxp=e():t.fxp=e()}(this,(()=>(()=>{"use strict";var t={d:(e,r)=>{for(var i in r)t.o(r,i)&&!t.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:r[i]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{XMLBuilder:()=>dt,XMLParser:()=>rt,XMLValidator:()=>gt});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",i=new RegExp("^["+r+"]["+r+"\\-.\\d\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$");function n(t,e){for(var r=[],i=e.exec(t);i;){var n=[];n.startIndex=e.lastIndex-i[0].length;for(var s=i.length,a=0;a<s;a++)n.push(i[a]);r.push(n),i=e.exec(t)}return r}var s=function(t){return!(null==i.exec(t))},a={allowBooleanAttributes:!1,unpairedTags:[]};function o(t,e){e=Object.assign({},a,e);var r=[],i=!1,n=!1;"\ufeff"===t[0]&&(t=t.substr(1));for(var o=0;o<t.length;o++)if("<"===t[o]&&"?"===t[o+1]){if((o=u(t,o+=2)).err)return o}else{if("<"!==t[o]){if(l(t[o]))continue;return m("InvalidChar","char '"+t[o]+"' is not expected.",b(t,o))}var h=o;if("!"===t[++o]){o=d(t,o);continue}var f=!1;"/"===t[o]&&(f=!0,o++);for(var g="";o<t.length&&">"!==t[o]&&" "!==t[o]&&"\t"!==t[o]&&"\n"!==t[o]&&"\r"!==t[o];o++)g+=t[o];if("/"===(g=g.trim())[g.length-1]&&(g=g.substring(0,g.length-1),o--),!s(g))return m("InvalidTag",0===g.trim().length?"Invalid space after '<'.":"Tag '"+g+"' is an invalid name.",b(t,o));var x=p(t,o);if(!1===x)return m("InvalidAttr","Attributes for '"+g+"' have open quote.",b(t,o));var N=x.value;if(o=x.index,"/"===N[N.length-1]){var E=o-N.length,y=c(N=N.substring(0,N.length-1),e);if(!0!==y)return m(y.err.code,y.err.msg,b(t,E+y.err.line));i=!0}else if(f){if(!x.tagClosed)return m("InvalidTag","Closing tag '"+g+"' doesn't have proper closing.",b(t,o));if(N.trim().length>0)return m("InvalidTag","Closing tag '"+g+"' can't have attributes or invalid starting.",b(t,h));if(0===r.length)return m("InvalidTag","Closing tag '"+g+"' has not been opened.",b(t,h));var T=r.pop();if(g!==T.tagName){var w=b(t,T.tagStartPos);return m("InvalidTag","Expected closing tag '"+T.tagName+"' (opened in line "+w.line+", col "+w.col+") instead of closing tag '"+g+"'.",b(t,h))}0==r.length&&(n=!0)}else{var I=c(N,e);if(!0!==I)return m(I.err.code,I.err.msg,b(t,o-N.length+I.err.line));if(!0===n)return m("InvalidXml","Multiple possible root nodes found.",b(t,o));-1!==e.unpairedTags.indexOf(g)||r.push({tagName:g,tagStartPos:h}),i=!0}for(o++;o<t.length;o++)if("<"===t[o]){if("!"===t[o+1]){o=d(t,++o);continue}if("?"!==t[o+1])break;if((o=u(t,++o)).err)return o}else if("&"===t[o]){var A=v(t,o);if(-1==A)return m("InvalidChar","char '&' is not expected.",b(t,o));o=A}else if(!0===n&&!l(t[o]))return m("InvalidXml","Extra text at the end",b(t,o));"<"===t[o]&&o--}return i?1==r.length?m("InvalidTag","Unclosed tag '"+r[0].tagName+"'.",b(t,r[0].tagStartPos)):!(r.length>0)||m("InvalidXml","Invalid '"+JSON.stringify(r.map((function(t){return t.tagName})),null,4).replace(/\r?\n/g,"")+"' found.",{line:1,col:1}):m("InvalidXml","Start tag expected.",1)}function l(t){return" "===t||"\t"===t||"\n"===t||"\r"===t}function u(t,e){for(var r=e;e<t.length;e++)if("?"!=t[e]&&" "!=t[e]);else{var i=t.substr(r,e-r);if(e>5&&"xml"===i)return m("InvalidXml","XML declaration allowed only at the start of the document.",b(t,e));if("?"==t[e]&&">"==t[e+1]){e++;break}}return e}function d(t,e){if(t.length>e+5&&"-"===t[e+1]&&"-"===t[e+2]){for(e+=3;e<t.length;e++)if("-"===t[e]&&"-"===t[e+1]&&">"===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.length;e++)if("<"===t[e])r++;else if(">"===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.length;e++)if("]"===t[e]&&"]"===t[e+1]&&">"===t[e+2]){e+=2;break}return e}var h='"',f="'";function p(t,e){for(var r="",i="",n=!1;e<t.length;e++){if(t[e]===h||t[e]===f)""===i?i=t[e]:i!==t[e]||(i="");else if(">"===t[e]&&""===i){n=!0;break}r+=t[e]}return""===i&&{value:r,index:e,tagClosed:n}}var g=new RegExp("(\\s*)([^\\s=]+)(\\s*=)?(\\s*(['\"])(([\\s\\S])*?)\\5)?","g");function c(t,e){for(var r=n(t,g),i={},s=0;s<r.length;s++){if(0===r[s][1].length)return m("InvalidAttr","Attribute '"+r[s][2]+"' has no space in starting.",N(r[s]));if(void 0!==r[s][3]&&void 0===r[s][4])return m("InvalidAttr","Attribute '"+r[s][2]+"' is without value.",N(r[s]));if(void 0===r[s][3]&&!e.allowBooleanAttributes)return m("InvalidAttr","boolean attribute '"+r[s][2]+"' is not allowed.",N(r[s]));var a=r[s][2];if(!x(a))return m("InvalidAttr","Attribute '"+a+"' is an invalid name.",N(r[s]));if(i.hasOwnProperty(a))return m("InvalidAttr","Attribute '"+a+"' is repeated.",N(r[s]));i[a]=1}return!0}function v(t,e){if(";"===t[++e])return-1;if("#"===t[e])return function(t,e){var r=/\d/;for("x"===t[e]&&(e++,r=/[\da-fA-F]/);e<t.length;e++){if(";"===t[e])return e;if(!t[e].match(r))break}return-1}(t,++e);for(var r=0;e<t.length;e++,r++)if(!(t[e].match(/\w/)&&r<20)){if(";"===t[e])break;return-1}return e}function m(t,e,r){return{err:{code:t,msg:e,line:r.line||r,col:r.col}}}function x(t){return s(t)}function b(t,e){var r=t.substring(0,e).split(/\r?\n/);return{line:r.length,col:r[r.length-1].length+1}}function N(t){return t.startIndex+t[1].length}var E,y={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},captureMetaData:!1};E="function"!=typeof Symbol?"@@xmlMetadata":Symbol("XML Node Metadata");var T=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,e){var r,i;"__proto__"===t.tagname&&(t.tagname="#__proto__"),t[":@"]&&Object.keys(t[":@"]).length>0?this.child.push(((r={})[t.tagname]=t.child,r[":@"]=t[":@"],r)):this.child.push(((i={})[t.tagname]=t.child,i)),void 0!==e&&(this.child[this.child.length-1][E]={startIndex:e})},t.getMetaDataSymbol=function(){return E},t}(),w=function(){function t(t){this.suppressValidationErr=!t}var e=t.prototype;return e.readDocType=function(t,e){var r={};if("O"!==t[e+3]||"C"!==t[e+4]||"T"!==t[e+5]||"Y"!==t[e+6]||"P"!==t[e+7]||"E"!==t[e+8])throw new Error("Invalid Tag instead of DOCTYPE");e+=9;for(var i=1,n=!1,s=!1;e<t.length;e++)if("<"!==t[e]||s)if(">"===t[e]){if(s?"-"===t[e-1]&&"-"===t[e-2]&&(s=!1,i--):i--,0===i)break}else"["===t[e]?n=!0:t[e];else{if(n&&A(t,"!ENTITY",e)){e+=7;var a=void 0,o=void 0,l=this.readEntityExp(t,e+1,this.suppressValidationErr);if(a=l[0],o=l[1],e=l[2],-1===o.indexOf("&")){var u=a.replace(/[.\-+*:]/g,"\\.");r[a]={regx:RegExp("&"+u+";","g"),val:o}}}else if(n&&A(t,"!ELEMENT",e))e+=8,e=this.readElementExp(t,e+1).index;else if(n&&A(t,"!ATTLIST",e))e+=8;else if(n&&A(t,"!NOTATION",e))e+=9,e=this.readNotationExp(t,e+1,this.suppressValidationErr).index;else{if(!A(t,"!--",e))throw new Error("Invalid DOCTYPE");s=!0}i++}if(0!==i)throw new Error("Unclosed DOCTYPE");return{entities:r,i:e}},e.readEntityExp=function(t,e){e=I(t,e);for(var r="";e<t.length&&!/\s/.test(t[e])&&'"'!==t[e]&&"'"!==t[e];)r+=t[e],e++;if(P(r),e=I(t,e),!this.suppressValidationErr){if("SYSTEM"===t.substring(e,e+6).toUpperCase())throw new Error("External entities are not supported");if("%"===t[e])throw new Error("Parameter entities are not supported")}var i=this.readIdentifierVal(t,e,"entity");return e=i[0],[r,i[1],--e]},e.readNotationExp=function(t,e){e=I(t,e);for(var r="";e<t.length&&!/\s/.test(t[e]);)r+=t[e],e++;!this.suppressValidationErr&&P(r),e=I(t,e);var i=t.substring(e,e+6).toUpperCase();if(!this.suppressValidationErr&&"SYSTEM"!==i&&"PUBLIC"!==i)throw new Error('Expected SYSTEM or PUBLIC, found "'+i+'"');e+=i.length,e=I(t,e);var n=null,s=null;if("PUBLIC"===i){var a=this.readIdentifierVal(t,e,"publicIdentifier");if(e=a[0],n=a[1],'"'===t[e=I(t,e)]||"'"===t[e]){var o=this.readIdentifierVal(t,e,"systemIdentifier");e=o[0],s=o[1]}}else if("SYSTEM"===i){var l=this.readIdentifierVal(t,e,"systemIdentifier");if(e=l[0],s=l[1],!this.suppressValidationErr&&!s)throw new Error("Missing mandatory system identifier for SYSTEM notation")}return{notationName:r,publicIdentifier:n,systemIdentifier:s,index:--e}},e.readIdentifierVal=function(t,e,r){var i="",n=t[e];if('"'!==n&&"'"!==n)throw new Error('Expected quoted string, found "'+n+'"');for(e++;e<t.length&&t[e]!==n;)i+=t[e],e++;if(t[e]!==n)throw new Error("Unterminated "+r+" value");return[++e,i]},e.readElementExp=function(t,e){e=I(t,e);for(var r="";e<t.length&&!/\s/.test(t[e]);)r+=t[e],e++;if(!this.suppressValidationErr&&!s(r))throw new Error('Invalid element name: "'+r+'"');var i="";if("E"===t[e=I(t,e)]&&A(t,"MPTY",e))e+=4;else if("A"===t[e]&&A(t,"NY",e))e+=2;else if("("===t[e]){for(e++;e<t.length&&")"!==t[e];)i+=t[e],e++;if(")"!==t[e])throw new Error("Unterminated content model")}else if(!this.suppressValidationErr)throw new Error('Invalid Element Expression, found "'+t[e]+'"');return{elementName:r,contentModel:i.trim(),index:e}},e.readAttlistExp=function(t,e){e=I(t,e);for(var r="";e<t.length&&!/\s/.test(t[e]);)r+=t[e],e++;P(r),e=I(t,e);for(var i="";e<t.length&&!/\s/.test(t[e]);)i+=t[e],e++;if(!P(i))throw new Error('Invalid attribute name: "'+i+'"');e=I(t,e);var n="";if("NOTATION"===t.substring(e,e+8).toUpperCase()){if(n="NOTATION","("!==t[e=I(t,e+=8)])throw new Error("Expected '(', found \""+t[e]+'"');e++;for(var s=[];e<t.length&&")"!==t[e];){for(var a="";e<t.length&&"|"!==t[e]&&")"!==t[e];)a+=t[e],e++;if(!P(a=a.trim()))throw new Error('Invalid notation name: "'+a+'"');s.push(a),"|"===t[e]&&(e++,e=I(t,e))}if(")"!==t[e])throw new Error("Unterminated list of notations");e++,n+=" ("+s.join("|")+")"}else{for(;e<t.length&&!/\s/.test(t[e]);)n+=t[e],e++;if(!this.suppressValidationErr&&!["CDATA","ID","IDREF","IDREFS","ENTITY","ENTITIES","NMTOKEN","NMTOKENS"].includes(n.toUpperCase()))throw new Error('Invalid attribute type: "'+n+'"')}e=I(t,e);var o="";if("#REQUIRED"===t.substring(e,e+8).toUpperCase())o="#REQUIRED",e+=8;else if("#IMPLIED"===t.substring(e,e+7).toUpperCase())o="#IMPLIED",e+=7;else{var l=this.readIdentifierVal(t,e,"ATTLIST");e=l[0],o=l[1]}return{elementName:r,attributeName:i,attributeType:n,defaultValue:o,index:e}},t}(),I=function(t,e){for(;e<t.length&&/\s/.test(t[e]);)e++;return e};function A(t,e,r){for(var i=0;i<e.length;i++)if(e[i]!==t[r+i+1])return!1;return!0}function P(t){if(s(t))return t;throw new Error("Invalid entity name "+t)}const O=/^[-+]?0x[a-fA-F0-9]+$/,S=/^([\-\+])?(0*)([0-9]*(\.[0-9]*)?)$/,C={hex:!0,leadingZeros:!0,decimalPoint:".",eNotation:!0};const V=/^([-+])?(0*)(\d*(\.\d*)?[eE][-\+]?\d+)$/;function D(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,i=Array(e);r<e;r++)i[r]=t[r];return i}function j(t){return"function"==typeof t?t:Array.isArray(t)?function(e){for(var r,i=function(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(r)return(r=r.call(t)).next.bind(r);if(Array.isArray(t)||(r=function(t,e){if(t){if("string"==typeof t)return D(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?D(t,e):void 0}}(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var i=0;return function(){return i>=t.length?{done:!0}:{done:!1,value:t[i++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(t);!(r=i()).done;){var n=r.value;if("string"==typeof n&&e===n)return!0;if(n instanceof RegExp&&n.test(e))return!0}}:function(){return!1}}var M=function(t){if(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:"₹"},num_dec:{regex:/&#([0-9]{1,7});/g,val:function(t,e){return K(e,10,"&#")}},num_hex:{regex:/&#x([0-9a-fA-F]{1,6});/g,val:function(t,e){return K(e,16,"&#x")}}},this.addExternalEntities=F,this.parseXml=B,this.parseTextData=_,this.resolveNameSpace=k,this.buildAttributesMap=U,this.isItStopNode=X,this.replaceEntitiesValue=Y,this.readStopNodeData=q,this.saveTextToParentTag=G,this.addChild=R,this.ignoreAttributesFn=j(this.options.ignoreAttributes),this.options.stopNodes&&this.options.stopNodes.length>0){this.stopNodesExact=new Set,this.stopNodesWildcard=new Set;for(var e=0;e<this.options.stopNodes.length;e++){var r=this.options.stopNodes[e];"string"==typeof r&&(r.startsWith("*.")?this.stopNodesWildcard.add(r.substring(2)):this.stopNodesExact.add(r))}}};function F(t){for(var e=Object.keys(t),r=0;r<e.length;r++){var i=e[r],n=i.replace(/[.\-+*:]/g,"\\.");this.lastEntities[i]={regex:new RegExp("&"+n+";","g"),val:t[i]}}}function _(t,e,r,i,n,s,a){if(void 0!==t&&(this.options.trimValues&&!i&&(t=t.trim()),t.length>0)){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?Z(t,this.options.parseTagValue,this.options.numberParseOptions):t}}function k(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}var L=new RegExp("([^\\s=]+)\\s*(=\\s*(['\"])([\\s\\S]*?)\\3)?","gm");function U(t,e){if(!0!==this.options.ignoreAttributes&&"string"==typeof t){for(var r=n(t,L),i=r.length,s={},a=0;a<i;a++){var o=this.resolveNameSpace(r[a][1]);if(!this.ignoreAttributesFn(o,e)){var l=r[a][4],u=this.options.attributeNamePrefix+o;if(o.length)if(this.options.transformAttributeName&&(u=this.options.transformAttributeName(u)),"__proto__"===u&&(u="#__proto__"),void 0!==l){this.options.trimValues&&(l=l.trim()),l=this.replaceEntitiesValue(l);var d=this.options.attributeValueProcessor(o,l,e);s[u]=null==d?l:typeof d!=typeof l||d!==l?d:Z(l,this.options.parseAttributeValue,this.options.numberParseOptions)}else this.options.allowBooleanAttributes&&(s[u]=!0)}}if(!Object.keys(s).length)return;if(this.options.attributesGroupName){var h={};return h[this.options.attributesGroupName]=s,h}return s}}var B=function(t){t=t.replace(/\r\n?/g,"\n");for(var e=new T("!xml"),r=e,i="",n="",s=new w(this.options.processEntities),a=0;a<t.length;a++)if("<"===t[a])if("/"===t[a+1]){var o=$(t,">",a,"Closing Tag is not closed."),l=t.substring(a+2,o).trim();if(this.options.removeNSPrefix){var u=l.indexOf(":");-1!==u&&(l=l.substr(u+1))}this.options.transformTagName&&(l=this.options.transformTagName(l)),r&&(i=this.saveTextToParentTag(i,r,n));var d=n.substring(n.lastIndexOf(".")+1);if(l&&-1!==this.options.unpairedTags.indexOf(l))throw new Error("Unpaired tag can not be used as closing tag: </"+l+">");var h=0;d&&-1!==this.options.unpairedTags.indexOf(d)?(h=n.lastIndexOf(".",n.lastIndexOf(".")-1),this.tagsNodeStack.pop()):h=n.lastIndexOf("."),n=n.substring(0,h),r=this.tagsNodeStack.pop(),i="",a=o}else if("?"===t[a+1]){var f=W(t,a,!1,"?>");if(!f)throw new Error("Pi Tag is not closed.");if(i=this.saveTextToParentTag(i,r,n),this.options.ignoreDeclaration&&"?xml"===f.tagName||this.options.ignorePiTags);else{var p=new T(f.tagName);p.add(this.options.textNodeName,""),f.tagName!==f.tagExp&&f.attrExpPresent&&(p[":@"]=this.buildAttributesMap(f.tagExp,n)),this.addChild(r,p,n,a)}a=f.closeIndex+1}else if("!--"===t.substr(a+1,3)){var g=$(t,"--\x3e",a+4,"Comment is not closed.");if(this.options.commentPropName){var c,v=t.substring(a+4,g-2);i=this.saveTextToParentTag(i,r,n),r.add(this.options.commentPropName,[(c={},c[this.options.textNodeName]=v,c)])}a=g}else if("!D"===t.substr(a+1,2)){var m=s.readDocType(t,a);this.docTypeEntities=m.entities,a=m.i}else if("!["===t.substr(a+1,2)){var x=$(t,"]]>",a,"CDATA is not closed.")-2,b=t.substring(a+9,x);i=this.saveTextToParentTag(i,r,n);var N,E=this.parseTextData(b,r.tagname,n,!0,!1,!0,!0);null==E&&(E=""),this.options.cdataPropName?r.add(this.options.cdataPropName,[(N={},N[this.options.textNodeName]=b,N)]):r.add(this.options.textNodeName,E),a=x+2}else{var y=W(t,a,this.options.removeNSPrefix),I=y.tagName,A=y.rawTagName,P=y.tagExp,O=y.attrExpPresent,S=y.closeIndex;if(this.options.transformTagName){var C=this.options.transformTagName(I);P===I&&(P=C),I=C}r&&i&&"!xml"!==r.tagname&&(i=this.saveTextToParentTag(i,r,n,!1));var V=r;V&&-1!==this.options.unpairedTags.indexOf(V.tagname)&&(r=this.tagsNodeStack.pop(),n=n.substring(0,n.lastIndexOf("."))),I!==e.tagname&&(n+=n?"."+I:I);var D=a;if(this.isItStopNode(this.stopNodesExact,this.stopNodesWildcard,n,I)){var j="";if(P.length>0&&P.lastIndexOf("/")===P.length-1)"/"===I[I.length-1]?(I=I.substr(0,I.length-1),n=n.substr(0,n.length-1),P=I):P=P.substr(0,P.length-1),a=y.closeIndex;else if(-1!==this.options.unpairedTags.indexOf(I))a=y.closeIndex;else{var M=this.readStopNodeData(t,A,S+1);if(!M)throw new Error("Unexpected end of "+A);a=M.i,j=M.tagContent}var F=new T(I);I!==P&&O&&(F[":@"]=this.buildAttributesMap(P,n)),j&&(j=this.parseTextData(j,I,n,!0,O,!0,!0)),n=n.substr(0,n.lastIndexOf(".")),F.add(this.options.textNodeName,j),this.addChild(r,F,n,D)}else{if(P.length>0&&P.lastIndexOf("/")===P.length-1){if("/"===I[I.length-1]?(I=I.substr(0,I.length-1),n=n.substr(0,n.length-1),P=I):P=P.substr(0,P.length-1),this.options.transformTagName){var _=this.options.transformTagName(I);P===I&&(P=_),I=_}var k=new T(I);I!==P&&O&&(k[":@"]=this.buildAttributesMap(P,n)),this.addChild(r,k,n,D),n=n.substr(0,n.lastIndexOf("."))}else{var L=new T(I);this.tagsNodeStack.push(r),I!==P&&O&&(L[":@"]=this.buildAttributesMap(P,n)),this.addChild(r,L,n,D),r=L}i="",a=S}}else i+=t[a];return e.child};function R(t,e,r,i){this.options.captureMetaData||(i=void 0);var n=this.options.updateTag(e.tagname,r,e[":@"]);!1===n||("string"==typeof n?(e.tagname=n,t.addChild(e,i)):t.addChild(e,i))}var Y=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 G(t,e,r,i){return t&&(void 0===i&&(i=0===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 X(t,e,r,i){return!(!e||!e.has(i))||!(!t||!t.has(r))}function $(t,e,r,i){var n=t.indexOf(e,r);if(-1===n)throw new Error(i);return n+e.length-1}function W(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<t.length;s++){var a=t[s];if(i)a===i&&(i="");else if('"'===a||"'"===a)i=a;else if(a===r[0]){if(!r[1])return{data:n,index:s};if(t[s+1]===r[1])return{data:n,index:s}}else"\t"===a&&(a=" ");n+=a}}(t,e+1,i);if(n){var s=n.data,a=n.index,o=s.search(/\s/),l=s,u=!0;-1!==o&&(l=s.substring(0,o),s=s.substring(o+1).trimStart());var d=l;if(r){var h=l.indexOf(":");-1!==h&&(u=(l=l.substr(h+1))!==n.data.substr(h+1))}return{tagName:l,tagExp:s,closeIndex:a,attrExpPresent:u,rawTagName:d}}}function q(t,e,r){for(var i=r,n=1;r<t.length;r++)if("<"===t[r])if("/"===t[r+1]){var s=$(t,">",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=$(t,"?>",r+1,"StopNode is not closed.");else if("!--"===t.substr(r+1,3))r=$(t,"--\x3e",r+3,"StopNode is not closed.");else if("!["===t.substr(r+1,2))r=$(t,"]]>",r,"StopNode is not closed.")-2;else{var a=W(t,r,">");a&&((a&&a.tagName)===e&&"/"!==a.tagExp[a.tagExp.length-1]&&n++,r=a.closeIndex)}}function Z(t,e,r){if(e&&"string"==typeof t){var i=t.trim();return"true"===i||"false"!==i&&function(t,e={}){if(e=Object.assign({},C,e),!t||"string"!=typeof t)return t;let r=t.trim();if(void 0!==e.skipLike&&e.skipLike.test(r))return t;if("0"===t)return 0;if(e.hex&&O.test(r))return function(t){if(parseInt)return parseInt(t,16);if(Number.parseInt)return Number.parseInt(t,16);if(window&&window.parseInt)return window.parseInt(t,16);throw new Error("parseInt, Number.parseInt, window.parseInt are not supported")}(r);if(-1!==r.search(/.+[eE].+/))return function(t,e,r){if(!r.eNotation)return t;const i=e.match(V);if(i){let n=i[1]||"";const s=-1===i[3].indexOf("e")?"E":"e",a=i[2],o=n?t[a.length+1]===s:t[a.length]===s;return a.length>1&&o?t:1!==a.length||!i[3].startsWith(`.${s}`)&&i[3][0]!==s?r.leadingZeros&&!o?(e=(i[1]||"")+i[3],Number(e)):t:Number(e)}return t}(t,r,e);{const n=S.exec(r);if(n){const s=n[1]||"",a=n[2];let o=(i=n[3])&&-1!==i.indexOf(".")?("."===(i=i.replace(/0+$/,""))?i="0":"."===i[0]?i="0"+i:"."===i[i.length-1]&&(i=i.substring(0,i.length-1)),i):i;const l=s?"."===t[a.length+1]:"."===t[a.length];if(!e.leadingZeros&&(a.length>1||1===a.length&&!l))return t;{const i=Number(r),n=String(i);if(0===i||-0===i)return i;if(-1!==n.search(/[eE]/))return e.eNotation?i:t;if(-1!==r.indexOf("."))return"0"===n||n===o||n===`${s}${o}`?i:t;let l=a?o:r;return a?l===n||s+l===n?i:t:l===n||l===s+n?i:t}}return t}var i}(t,r)}return void 0!==t?t:""}function K(t,e,r){var i=Number.parseInt(t,e);return i>=0&&i<=1114111?String.fromCodePoint(i):r+t+";"}var Q=T.getMetaDataSymbol();function z(t,e){return J(t,e)}function J(t,e,r){for(var i,n={},s=0;s<t.length;s++){var a,o=t[s],l=H(o);if(a=void 0===r?l:r+"."+l,l===e.textNodeName)void 0===i?i=o[l]:i+=""+o[l];else{if(void 0===l)continue;if(o[l]){var u=J(o[l],e,a),d=et(u,e);void 0!==o[Q]&&(u[Q]=o[Q]),o[":@"]?tt(u,o[":@"],a,e):1!==Object.keys(u).length||void 0===u[e.textNodeName]||e.alwaysCreateTextNode?0===Object.keys(u).length&&(e.alwaysCreateTextNode?u[e.textNodeName]="":u=""):u=u[e.textNodeName],void 0!==n[l]&&n.hasOwnProperty(l)?(Array.isArray(n[l])||(n[l]=[n[l]]),n[l].push(u)):e.isArray(l,a,d)?n[l]=[u]:n[l]=u}}}return"string"==typeof i?i.length>0&&(n[e.textNodeName]=i):void 0!==i&&(n[e.textNodeName]=i),n}function H(t){for(var e=Object.keys(t),r=0;r<e.length;r++){var i=e[r];if(":@"!==i)return i}}function tt(t,e,r,i){if(e)for(var n=Object.keys(e),s=n.length,a=0;a<s;a++){var o=n[a];i.isArray(o,r+"."+o,!0,!0)?t[o]=[e[o]]:t[o]=e[o]}}function et(t,e){var r=e.textNodeName,i=Object.keys(t).length;return 0===i||!(1!==i||!t[r]&&"boolean"!=typeof t[r]&&0!==t[r])}var rt=function(){function t(t){this.externalEntities={},this.options=function(t){return Object.assign({},y,t)}(t)}var e=t.prototype;return e.parse=function(t,e){if("string"!=typeof t&&t.toString)t=t.toString();else if("string"!=typeof t)throw new Error("XML data is accepted in String or Bytes[] form.");if(e){!0===e&&(e={});var r=o(t,e);if(!0!==r)throw Error(r.err.msg+":"+r.err.line+":"+r.err.col)}var i=new M(this.options);i.addExternalEntities(this.externalEntities);var n=i.parseXml(t);return this.options.preserveOrder||void 0===n?n:z(n,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.getMetaDataSymbol=function(){return T.getMetaDataSymbol()},t}();function it(t,e){var r="";return e.format&&e.indentBy.length>0&&(r="\n"),nt(t,e,"",r)}function nt(t,e,r,i){for(var n="",s=!1,a=0;a<t.length;a++){var o=t[a],l=st(o);if(void 0!==l){var u;if(u=0===r.length?l:r+"."+l,l!==e.textNodeName)if(l!==e.cdataPropName)if(l!==e.commentPropName)if("?"!==l[0]){var d=i;""!==d&&(d+=e.indentBy);var h=i+"<"+l+at(o[":@"],e),f=nt(o[l],e,u,d);-1!==e.unpairedTags.indexOf(l)?e.suppressUnpairedNode?n+=h+">":n+=h+"/>":f&&0!==f.length||!e.suppressEmptyNode?f&&f.endsWith(">")?n+=h+">"+f+i+"</"+l+">":(n+=h+">",f&&""!==i&&(f.includes("/>")||f.includes("</"))?n+=i+e.indentBy+f+i:n+=f,n+="</"+l+">"):n+=h+"/>",s=!0}else{var p=at(o[":@"],e),g="?xml"===l?"":i,c=o[l][0][e.textNodeName];n+=g+"<"+l+(c=0!==c.length?" "+c:"")+p+"?>",s=!0}else n+=i+"\x3c!--"+o[l][0][e.textNodeName]+"--\x3e",s=!0;else s&&(n+=i),n+="<![CDATA["+o[l][0][e.textNodeName]+"]]>",s=!1;else{var v=o[l];ot(u,e)||(v=lt(v=e.tagValueProcessor(l,v),e)),s&&(n+=i),n+=v,s=!1}}}return n}function st(t){for(var e=Object.keys(t),r=0;r<e.length;r++){var i=e[r];if(t.hasOwnProperty(i)&&":@"!==i)return i}}function at(t,e){var r="";if(t&&!e.ignoreAttributes)for(var i in t)if(t.hasOwnProperty(i)){var n=e.attributeValueProcessor(i,t[i]);!0===(n=lt(n,e))&&e.suppressBooleanAttributes?r+=" "+i.substr(e.attributeNamePrefix.length):r+=" "+i.substr(e.attributeNamePrefix.length)+'="'+n+'"'}return r}function ot(t,e){var r=(t=t.substr(0,t.length-e.textNodeName.length-1)).substr(t.lastIndexOf(".")+1);for(var i in e.stopNodes)if(e.stopNodes[i]===t||e.stopNodes[i]==="*."+r)return!0;return!1}function lt(t,e){if(t&&t.length>0&&e.processEntities)for(var r=0;r<e.entities.length;r++){var i=e.entities[r];t=t.replace(i.regex,i.val)}return t}var ut={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 dt(t){this.options=Object.assign({},ut,t),!0===this.options.ignoreAttributes||this.options.attributesGroupName?this.isAttribute=function(){return!1}:(this.ignoreAttributesFn=j(this.options.ignoreAttributes),this.attrPrefixLen=this.options.attributeNamePrefix.length,this.isAttribute=pt),this.processTextOrObjNode=ht,this.options.format?(this.indentate=ft,this.tagEndChar=">\n",this.newLine="\n"):(this.indentate=function(){return""},this.tagEndChar=">",this.newLine="")}function ht(t,e,r,i){var n=this.j2x(t,r+1,i.concat(e));return void 0!==t[this.options.textNodeName]&&1===Object.keys(t).length?this.buildTextValNode(t[this.options.textNodeName],e,n.attrStr,r):this.buildObjectNode(n.val,e,n.attrStr,r)}function ft(t){return this.options.indentBy.repeat(t)}function pt(t){return!(!t.startsWith(this.options.attributeNamePrefix)||t===this.options.textNodeName)&&t.substr(this.attrPrefixLen)}dt.prototype.build=function(t){return this.options.preserveOrder?it(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},dt.prototype.j2x=function(t,e,r){var i="",n="",s=r.join(".");for(var a in t)if(Object.prototype.hasOwnProperty.call(t,a))if(void 0===t[a])this.isAttribute(a)&&(n+="");else if(null===t[a])this.isAttribute(a)||a===this.options.cdataPropName?n+="":"?"===a[0]?n+=this.indentate(e)+"<"+a+"?"+this.tagEndChar:n+=this.indentate(e)+"<"+a+"/"+this.tagEndChar;else if(t[a]instanceof Date)n+=this.buildTextValNode(t[a],a,"",e);else if("object"!=typeof t[a]){var o=this.isAttribute(a);if(o&&!this.ignoreAttributesFn(o,s))i+=this.buildAttrPairStr(o,""+t[a]);else if(!o)if(a===this.options.textNodeName){var l=this.options.tagValueProcessor(a,""+t[a]);n+=this.replaceEntitiesValue(l)}else n+=this.buildTextValNode(t[a],a,"",e)}else if(Array.isArray(t[a])){for(var u=t[a].length,d="",h="",f=0;f<u;f++){var p=t[a][f];if(void 0===p);else if(null===p)"?"===a[0]?n+=this.indentate(e)+"<"+a+"?"+this.tagEndChar:n+=this.indentate(e)+"<"+a+"/"+this.tagEndChar;else if("object"==typeof p)if(this.options.oneListGroup){var g=this.j2x(p,e+1,r.concat(a));d+=g.val,this.options.attributesGroupName&&p.hasOwnProperty(this.options.attributesGroupName)&&(h+=g.attrStr)}else d+=this.processTextOrObjNode(p,a,e,r);else if(this.options.oneListGroup){var c=this.options.tagValueProcessor(a,p);d+=c=this.replaceEntitiesValue(c)}else d+=this.buildTextValNode(p,a,"",e)}this.options.oneListGroup&&(d=this.buildObjectNode(d,a,h,e)),n+=d}else if(this.options.attributesGroupName&&a===this.options.attributesGroupName)for(var v=Object.keys(t[a]),m=v.length,x=0;x<m;x++)i+=this.buildAttrPairStr(v[x],""+t[a][v[x]]);else n+=this.processTextOrObjNode(t[a],a,e,r);return{attrStr:i,val:n}},dt.prototype.buildAttrPairStr=function(t,e){return e=this.options.attributeValueProcessor(t,""+e),e=this.replaceEntitiesValue(e),this.options.suppressBooleanAttributes&&"true"===e?" "+t:" "+t+'="'+e+'"'},dt.prototype.buildObjectNode=function(t,e,r,i){if(""===t)return"?"===e[0]?this.indentate(i)+"<"+e+r+"?"+this.tagEndChar:this.indentate(i)+"<"+e+r+this.closeTag(e)+this.tagEndChar;var n="</"+e+this.tagEndChar,s="";return"?"===e[0]&&(s="?",n=""),!r&&""!==r||-1!==t.indexOf("<")?!1!==this.options.commentPropName&&e===this.options.commentPropName&&0===s.length?this.indentate(i)+"\x3c!--"+t+"--\x3e"+this.newLine:this.indentate(i)+"<"+e+r+s+this.tagEndChar+t+this.indentate(i)+n:this.indentate(i)+"<"+e+r+s+">"+t+n},dt.prototype.closeTag=function(t){var e="";return-1!==this.options.unpairedTags.indexOf(t)?this.options.suppressUnpairedNode||(e="/"):e=this.options.suppressEmptyNode?"/":"></"+t,e},dt.prototype.buildTextValNode=function(t,e,r,i){if(!1!==this.options.cdataPropName&&e===this.options.cdataPropName)return this.indentate(i)+"<![CDATA["+t+"]]>"+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+"</"+e+this.tagEndChar},dt.prototype.replaceEntitiesValue=function(t){if(t&&t.length>0&&this.options.processEntities)for(var e=0;e<this.options.entities.length;e++){var r=this.options.entities[e];t=t.replace(r.regex,r.val)}return t};var gt={validate:o};return e})())); | ||
| !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.fxp=e():t.fxp=e()}(this,(()=>(()=>{"use strict";var t={d:(e,r)=>{for(var i in r)t.o(r,i)&&!t.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:r[i]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{XMLBuilder:()=>pt,XMLParser:()=>nt,XMLValidator:()=>vt});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",i=new RegExp("^["+r+"]["+r+"\\-.\\d\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$");function n(t,e){for(var r=[],i=e.exec(t);i;){var n=[];n.startIndex=e.lastIndex-i[0].length;for(var a=i.length,s=0;s<a;s++)n.push(i[s]);r.push(n),i=e.exec(t)}return r}var a=function(t){return!(null==i.exec(t))},s={allowBooleanAttributes:!1,unpairedTags:[]};function o(t,e){e=Object.assign({},s,e);var r=[],i=!1,n=!1;"\ufeff"===t[0]&&(t=t.substr(1));for(var o=0;o<t.length;o++)if("<"===t[o]&&"?"===t[o+1]){if((o=u(t,o+=2)).err)return o}else{if("<"!==t[o]){if(l(t[o]))continue;return x("InvalidChar","char '"+t[o]+"' is not expected.",b(t,o))}var h=o;if("!"===t[++o]){o=d(t,o);continue}var p=!1;"/"===t[o]&&(p=!0,o++);for(var g="";o<t.length&&">"!==t[o]&&" "!==t[o]&&"\t"!==t[o]&&"\n"!==t[o]&&"\r"!==t[o];o++)g+=t[o];if("/"===(g=g.trim())[g.length-1]&&(g=g.substring(0,g.length-1),o--),!a(g))return x("InvalidTag",0===g.trim().length?"Invalid space after '<'.":"Tag '"+g+"' is an invalid name.",b(t,o));var m=f(t,o);if(!1===m)return x("InvalidAttr","Attributes for '"+g+"' have open quote.",b(t,o));var E=m.value;if(o=m.index,"/"===E[E.length-1]){var N=o-E.length,y=c(E=E.substring(0,E.length-1),e);if(!0!==y)return x(y.err.code,y.err.msg,b(t,N+y.err.line));i=!0}else if(p){if(!m.tagClosed)return x("InvalidTag","Closing tag '"+g+"' doesn't have proper closing.",b(t,o));if(E.trim().length>0)return x("InvalidTag","Closing tag '"+g+"' can't have attributes or invalid starting.",b(t,h));if(0===r.length)return x("InvalidTag","Closing tag '"+g+"' has not been opened.",b(t,h));var T=r.pop();if(g!==T.tagName){var w=b(t,T.tagStartPos);return x("InvalidTag","Expected closing tag '"+T.tagName+"' (opened in line "+w.line+", col "+w.col+") instead of closing tag '"+g+"'.",b(t,h))}0==r.length&&(n=!0)}else{var I=c(E,e);if(!0!==I)return x(I.err.code,I.err.msg,b(t,o-E.length+I.err.line));if(!0===n)return x("InvalidXml","Multiple possible root nodes found.",b(t,o));-1!==e.unpairedTags.indexOf(g)||r.push({tagName:g,tagStartPos:h}),i=!0}for(o++;o<t.length;o++)if("<"===t[o]){if("!"===t[o+1]){o=d(t,++o);continue}if("?"!==t[o+1])break;if((o=u(t,++o)).err)return o}else if("&"===t[o]){var O=v(t,o);if(-1==O)return x("InvalidChar","char '&' is not expected.",b(t,o));o=O}else if(!0===n&&!l(t[o]))return x("InvalidXml","Extra text at the end",b(t,o));"<"===t[o]&&o--}return i?1==r.length?x("InvalidTag","Unclosed tag '"+r[0].tagName+"'.",b(t,r[0].tagStartPos)):!(r.length>0)||x("InvalidXml","Invalid '"+JSON.stringify(r.map((function(t){return t.tagName})),null,4).replace(/\r?\n/g,"")+"' found.",{line:1,col:1}):x("InvalidXml","Start tag expected.",1)}function l(t){return" "===t||"\t"===t||"\n"===t||"\r"===t}function u(t,e){for(var r=e;e<t.length;e++)if("?"!=t[e]&&" "!=t[e]);else{var i=t.substr(r,e-r);if(e>5&&"xml"===i)return x("InvalidXml","XML declaration allowed only at the start of the document.",b(t,e));if("?"==t[e]&&">"==t[e+1]){e++;break}}return e}function d(t,e){if(t.length>e+5&&"-"===t[e+1]&&"-"===t[e+2]){for(e+=3;e<t.length;e++)if("-"===t[e]&&"-"===t[e+1]&&">"===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.length;e++)if("<"===t[e])r++;else if(">"===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.length;e++)if("]"===t[e]&&"]"===t[e+1]&&">"===t[e+2]){e+=2;break}return e}var h='"',p="'";function f(t,e){for(var r="",i="",n=!1;e<t.length;e++){if(t[e]===h||t[e]===p)""===i?i=t[e]:i!==t[e]||(i="");else if(">"===t[e]&&""===i){n=!0;break}r+=t[e]}return""===i&&{value:r,index:e,tagClosed:n}}var g=new RegExp("(\\s*)([^\\s=]+)(\\s*=)?(\\s*(['\"])(([\\s\\S])*?)\\5)?","g");function c(t,e){for(var r=n(t,g),i={},a=0;a<r.length;a++){if(0===r[a][1].length)return x("InvalidAttr","Attribute '"+r[a][2]+"' has no space in starting.",E(r[a]));if(void 0!==r[a][3]&&void 0===r[a][4])return x("InvalidAttr","Attribute '"+r[a][2]+"' is without value.",E(r[a]));if(void 0===r[a][3]&&!e.allowBooleanAttributes)return x("InvalidAttr","boolean attribute '"+r[a][2]+"' is not allowed.",E(r[a]));var s=r[a][2];if(!m(s))return x("InvalidAttr","Attribute '"+s+"' is an invalid name.",E(r[a]));if(i.hasOwnProperty(s))return x("InvalidAttr","Attribute '"+s+"' is repeated.",E(r[a]));i[s]=1}return!0}function v(t,e){if(";"===t[++e])return-1;if("#"===t[e])return function(t,e){var r=/\d/;for("x"===t[e]&&(e++,r=/[\da-fA-F]/);e<t.length;e++){if(";"===t[e])return e;if(!t[e].match(r))break}return-1}(t,++e);for(var r=0;e<t.length;e++,r++)if(!(t[e].match(/\w/)&&r<20)){if(";"===t[e])break;return-1}return e}function x(t,e,r){return{err:{code:t,msg:e,line:r.line||r,col:r.col}}}function m(t){return a(t)}function b(t,e){var r=t.substring(0,e).split(/\r?\n/);return{line:r.length,col:r[r.length-1].length+1}}function E(t){return t.startIndex+t[1].length}var N={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},captureMetaData:!1};function y(t){return"boolean"==typeof t?{enabled:t,maxEntitySize:1e4,maxExpansionDepth:10,maxTotalExpansions:1e3,maxExpandedLength:1e5,allowedTags:null,tagFilter:null}:"object"==typeof t&&null!==t?{enabled:!1!==t.enabled,maxEntitySize:null!=(e=t.maxEntitySize)?e:1e4,maxExpansionDepth:null!=(r=t.maxExpansionDepth)?r:10,maxTotalExpansions:null!=(i=t.maxTotalExpansions)?i:1e3,maxExpandedLength:null!=(n=t.maxExpandedLength)?n:1e5,allowedTags:null!=(a=t.allowedTags)?a:null,tagFilter:null!=(s=t.tagFilter)?s:null}:y(!0);var e,r,i,n,a,s}var T,w=function(t){var e=Object.assign({},N,t);return e.processEntities=y(e.processEntities),e};T="function"!=typeof Symbol?"@@xmlMetadata":Symbol("XML Node Metadata");var I=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,e){var r,i;"__proto__"===t.tagname&&(t.tagname="#__proto__"),t[":@"]&&Object.keys(t[":@"]).length>0?this.child.push(((r={})[t.tagname]=t.child,r[":@"]=t[":@"],r)):this.child.push(((i={})[t.tagname]=t.child,i)),void 0!==e&&(this.child[this.child.length-1][T]={startIndex:e})},t.getMetaDataSymbol=function(){return T},t}(),O=function(){function t(t){this.suppressValidationErr=!t,this.options=t}var e=t.prototype;return e.readDocType=function(t,e){var r={};if("O"!==t[e+3]||"C"!==t[e+4]||"T"!==t[e+5]||"Y"!==t[e+6]||"P"!==t[e+7]||"E"!==t[e+8])throw new Error("Invalid Tag instead of DOCTYPE");e+=9;for(var i=1,n=!1,a=!1;e<t.length;e++)if("<"!==t[e]||a)if(">"===t[e]){if(a?"-"===t[e-1]&&"-"===t[e-2]&&(a=!1,i--):i--,0===i)break}else"["===t[e]?n=!0:t[e];else{if(n&&P(t,"!ENTITY",e)){e+=7;var s=void 0,o=void 0,l=this.readEntityExp(t,e+1,this.suppressValidationErr);if(s=l[0],o=l[1],e=l[2],-1===o.indexOf("&")){var u=s.replace(/[.\-+*:]/g,"\\.");r[s]={regx:RegExp("&"+u+";","g"),val:o}}}else if(n&&P(t,"!ELEMENT",e))e+=8,e=this.readElementExp(t,e+1).index;else if(n&&P(t,"!ATTLIST",e))e+=8;else if(n&&P(t,"!NOTATION",e))e+=9,e=this.readNotationExp(t,e+1,this.suppressValidationErr).index;else{if(!P(t,"!--",e))throw new Error("Invalid DOCTYPE");a=!0}i++}if(0!==i)throw new Error("Unclosed DOCTYPE");return{entities:r,i:e}},e.readEntityExp=function(t,e){e=A(t,e);for(var r="";e<t.length&&!/\s/.test(t[e])&&'"'!==t[e]&&"'"!==t[e];)r+=t[e],e++;if(S(r),e=A(t,e),!this.suppressValidationErr){if("SYSTEM"===t.substring(e,e+6).toUpperCase())throw new Error("External entities are not supported");if("%"===t[e])throw new Error("Parameter entities are not supported")}var i,n=this.readIdentifierVal(t,e,"entity");if(e=n[0],i=n[1],!1!==this.options.enabled&&this.options.maxEntitySize&&i.length>this.options.maxEntitySize)throw new Error('Entity "'+r+'" size ('+i.length+") exceeds maximum allowed size ("+this.options.maxEntitySize+")");return[r,i,--e]},e.readNotationExp=function(t,e){e=A(t,e);for(var r="";e<t.length&&!/\s/.test(t[e]);)r+=t[e],e++;!this.suppressValidationErr&&S(r),e=A(t,e);var i=t.substring(e,e+6).toUpperCase();if(!this.suppressValidationErr&&"SYSTEM"!==i&&"PUBLIC"!==i)throw new Error('Expected SYSTEM or PUBLIC, found "'+i+'"');e+=i.length,e=A(t,e);var n=null,a=null;if("PUBLIC"===i){var s=this.readIdentifierVal(t,e,"publicIdentifier");if(e=s[0],n=s[1],'"'===t[e=A(t,e)]||"'"===t[e]){var o=this.readIdentifierVal(t,e,"systemIdentifier");e=o[0],a=o[1]}}else if("SYSTEM"===i){var l=this.readIdentifierVal(t,e,"systemIdentifier");if(e=l[0],a=l[1],!this.suppressValidationErr&&!a)throw new Error("Missing mandatory system identifier for SYSTEM notation")}return{notationName:r,publicIdentifier:n,systemIdentifier:a,index:--e}},e.readIdentifierVal=function(t,e,r){var i="",n=t[e];if('"'!==n&&"'"!==n)throw new Error('Expected quoted string, found "'+n+'"');for(e++;e<t.length&&t[e]!==n;)i+=t[e],e++;if(t[e]!==n)throw new Error("Unterminated "+r+" value");return[++e,i]},e.readElementExp=function(t,e){e=A(t,e);for(var r="";e<t.length&&!/\s/.test(t[e]);)r+=t[e],e++;if(!this.suppressValidationErr&&!a(r))throw new Error('Invalid element name: "'+r+'"');var i="";if("E"===t[e=A(t,e)]&&P(t,"MPTY",e))e+=4;else if("A"===t[e]&&P(t,"NY",e))e+=2;else if("("===t[e]){for(e++;e<t.length&&")"!==t[e];)i+=t[e],e++;if(")"!==t[e])throw new Error("Unterminated content model")}else if(!this.suppressValidationErr)throw new Error('Invalid Element Expression, found "'+t[e]+'"');return{elementName:r,contentModel:i.trim(),index:e}},e.readAttlistExp=function(t,e){e=A(t,e);for(var r="";e<t.length&&!/\s/.test(t[e]);)r+=t[e],e++;S(r),e=A(t,e);for(var i="";e<t.length&&!/\s/.test(t[e]);)i+=t[e],e++;if(!S(i))throw new Error('Invalid attribute name: "'+i+'"');e=A(t,e);var n="";if("NOTATION"===t.substring(e,e+8).toUpperCase()){if(n="NOTATION","("!==t[e=A(t,e+=8)])throw new Error("Expected '(', found \""+t[e]+'"');e++;for(var a=[];e<t.length&&")"!==t[e];){for(var s="";e<t.length&&"|"!==t[e]&&")"!==t[e];)s+=t[e],e++;if(!S(s=s.trim()))throw new Error('Invalid notation name: "'+s+'"');a.push(s),"|"===t[e]&&(e++,e=A(t,e))}if(")"!==t[e])throw new Error("Unterminated list of notations");e++,n+=" ("+a.join("|")+")"}else{for(;e<t.length&&!/\s/.test(t[e]);)n+=t[e],e++;if(!this.suppressValidationErr&&!["CDATA","ID","IDREF","IDREFS","ENTITY","ENTITIES","NMTOKEN","NMTOKENS"].includes(n.toUpperCase()))throw new Error('Invalid attribute type: "'+n+'"')}e=A(t,e);var o="";if("#REQUIRED"===t.substring(e,e+8).toUpperCase())o="#REQUIRED",e+=8;else if("#IMPLIED"===t.substring(e,e+7).toUpperCase())o="#IMPLIED",e+=7;else{var l=this.readIdentifierVal(t,e,"ATTLIST");e=l[0],o=l[1]}return{elementName:r,attributeName:i,attributeType:n,defaultValue:o,index:e}},t}(),A=function(t,e){for(;e<t.length&&/\s/.test(t[e]);)e++;return e};function P(t,e,r){for(var i=0;i<e.length;i++)if(e[i]!==t[r+i+1])return!1;return!0}function S(t){if(a(t))return t;throw new Error("Invalid entity name "+t)}const C=/^[-+]?0x[a-fA-F0-9]+$/,V=/^([\-\+])?(0*)([0-9]*(\.[0-9]*)?)$/,D={hex:!0,leadingZeros:!0,decimalPoint:".",eNotation:!0};const j=/^([-+])?(0*)(\d*(\.\d*)?[eE][-\+]?\d+)$/;function L(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,i=Array(e);r<e;r++)i[r]=t[r];return i}function F(t){return"function"==typeof t?t:Array.isArray(t)?function(e){for(var r,i=function(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(r)return(r=r.call(t)).next.bind(r);if(Array.isArray(t)||(r=function(t,e){if(t){if("string"==typeof t)return L(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?L(t,e):void 0}}(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var i=0;return function(){return i>=t.length?{done:!0}:{done:!1,value:t[i++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(t);!(r=i()).done;){var n=r.value;if("string"==typeof n&&e===n)return!0;if(n instanceof RegExp&&n.test(e))return!0}}:function(){return!1}}var M=function(t){if(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:"₹"},num_dec:{regex:/&#([0-9]{1,7});/g,val:function(t,e){return Q(e,10,"&#")}},num_hex:{regex:/&#x([0-9a-fA-F]{1,6});/g,val:function(t,e){return Q(e,16,"&#x")}}},this.addExternalEntities=_,this.parseXml=Y,this.parseTextData=k,this.resolveNameSpace=U,this.buildAttributesMap=R,this.isItStopNode=$,this.replaceEntitiesValue=X,this.readStopNodeData=Z,this.saveTextToParentTag=z,this.addChild=G,this.ignoreAttributesFn=F(this.options.ignoreAttributes),this.entityExpansionCount=0,this.currentExpandedLength=0,this.options.stopNodes&&this.options.stopNodes.length>0){this.stopNodesExact=new Set,this.stopNodesWildcard=new Set;for(var e=0;e<this.options.stopNodes.length;e++){var r=this.options.stopNodes[e];"string"==typeof r&&(r.startsWith("*.")?this.stopNodesWildcard.add(r.substring(2)):this.stopNodesExact.add(r))}}};function _(t){for(var e=Object.keys(t),r=0;r<e.length;r++){var i=e[r],n=i.replace(/[.\-+*:]/g,"\\.");this.lastEntities[i]={regex:new RegExp("&"+n+";","g"),val:t[i]}}}function k(t,e,r,i,n,a,s){if(void 0!==t&&(this.options.trimValues&&!i&&(t=t.trim()),t.length>0)){s||(t=this.replaceEntitiesValue(t,e,r));var o=this.options.tagValueProcessor(e,t,r,n,a);return null==o?t:typeof o!=typeof t||o!==t?o:this.options.trimValues||t.trim()===t?K(t,this.options.parseTagValue,this.options.numberParseOptions):t}}function U(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}var B=new RegExp("([^\\s=]+)\\s*(=\\s*(['\"])([\\s\\S]*?)\\3)?","gm");function R(t,e,r){if(!0!==this.options.ignoreAttributes&&"string"==typeof t){for(var i=n(t,B),a=i.length,s={},o=0;o<a;o++){var l=this.resolveNameSpace(i[o][1]);if(!this.ignoreAttributesFn(l,e)){var u=i[o][4],d=this.options.attributeNamePrefix+l;if(l.length)if(this.options.transformAttributeName&&(d=this.options.transformAttributeName(d)),"__proto__"===d&&(d="#__proto__"),void 0!==u){this.options.trimValues&&(u=u.trim()),u=this.replaceEntitiesValue(u,r,e);var h=this.options.attributeValueProcessor(l,u,e);s[d]=null==h?u:typeof h!=typeof u||h!==u?h:K(u,this.options.parseAttributeValue,this.options.numberParseOptions)}else this.options.allowBooleanAttributes&&(s[d]=!0)}}if(!Object.keys(s).length)return;if(this.options.attributesGroupName){var p={};return p[this.options.attributesGroupName]=s,p}return s}}var Y=function(t){t=t.replace(/\r\n?/g,"\n");var e=new I("!xml"),r=e,i="",n="";this.entityExpansionCount=0,this.currentExpandedLength=0;for(var a=new O(this.options.processEntities),s=0;s<t.length;s++)if("<"===t[s])if("/"===t[s+1]){var o=W(t,">",s,"Closing Tag is not closed."),l=t.substring(s+2,o).trim();if(this.options.removeNSPrefix){var u=l.indexOf(":");-1!==u&&(l=l.substr(u+1))}this.options.transformTagName&&(l=this.options.transformTagName(l)),r&&(i=this.saveTextToParentTag(i,r,n));var d=n.substring(n.lastIndexOf(".")+1);if(l&&-1!==this.options.unpairedTags.indexOf(l))throw new Error("Unpaired tag can not be used as closing tag: </"+l+">");var h=0;d&&-1!==this.options.unpairedTags.indexOf(d)?(h=n.lastIndexOf(".",n.lastIndexOf(".")-1),this.tagsNodeStack.pop()):h=n.lastIndexOf("."),n=n.substring(0,h),r=this.tagsNodeStack.pop(),i="",s=o}else if("?"===t[s+1]){var p=q(t,s,!1,"?>");if(!p)throw new Error("Pi Tag is not closed.");if(i=this.saveTextToParentTag(i,r,n),this.options.ignoreDeclaration&&"?xml"===p.tagName||this.options.ignorePiTags);else{var f=new I(p.tagName);f.add(this.options.textNodeName,""),p.tagName!==p.tagExp&&p.attrExpPresent&&(f[":@"]=this.buildAttributesMap(p.tagExp,n,p.tagName)),this.addChild(r,f,n,s)}s=p.closeIndex+1}else if("!--"===t.substr(s+1,3)){var g=W(t,"--\x3e",s+4,"Comment is not closed.");if(this.options.commentPropName){var c,v=t.substring(s+4,g-2);i=this.saveTextToParentTag(i,r,n),r.add(this.options.commentPropName,[(c={},c[this.options.textNodeName]=v,c)])}s=g}else if("!D"===t.substr(s+1,2)){var x=a.readDocType(t,s);this.docTypeEntities=x.entities,s=x.i}else if("!["===t.substr(s+1,2)){var m=W(t,"]]>",s,"CDATA is not closed.")-2,b=t.substring(s+9,m);i=this.saveTextToParentTag(i,r,n);var E,N=this.parseTextData(b,r.tagname,n,!0,!1,!0,!0);null==N&&(N=""),this.options.cdataPropName?r.add(this.options.cdataPropName,[(E={},E[this.options.textNodeName]=b,E)]):r.add(this.options.textNodeName,N),s=m+2}else{var y=q(t,s,this.options.removeNSPrefix),T=y.tagName,w=y.rawTagName,A=y.tagExp,P=y.attrExpPresent,S=y.closeIndex;if(this.options.transformTagName){var C=this.options.transformTagName(T);A===T&&(A=C),T=C}r&&i&&"!xml"!==r.tagname&&(i=this.saveTextToParentTag(i,r,n,!1));var V=r;V&&-1!==this.options.unpairedTags.indexOf(V.tagname)&&(r=this.tagsNodeStack.pop(),n=n.substring(0,n.lastIndexOf("."))),T!==e.tagname&&(n+=n?"."+T:T);var D=s;if(this.isItStopNode(this.stopNodesExact,this.stopNodesWildcard,n,T)){var j="";if(A.length>0&&A.lastIndexOf("/")===A.length-1)"/"===T[T.length-1]?(T=T.substr(0,T.length-1),n=n.substr(0,n.length-1),A=T):A=A.substr(0,A.length-1),s=y.closeIndex;else if(-1!==this.options.unpairedTags.indexOf(T))s=y.closeIndex;else{var L=this.readStopNodeData(t,w,S+1);if(!L)throw new Error("Unexpected end of "+w);s=L.i,j=L.tagContent}var F=new I(T);T!==A&&P&&(F[":@"]=this.buildAttributesMap(A,n,T)),j&&(j=this.parseTextData(j,T,n,!0,P,!0,!0)),n=n.substr(0,n.lastIndexOf(".")),F.add(this.options.textNodeName,j),this.addChild(r,F,n,D)}else{if(A.length>0&&A.lastIndexOf("/")===A.length-1){if("/"===T[T.length-1]?(T=T.substr(0,T.length-1),n=n.substr(0,n.length-1),A=T):A=A.substr(0,A.length-1),this.options.transformTagName){var M=this.options.transformTagName(T);A===T&&(A=M),T=M}var _=new I(T);T!==A&&P&&(_[":@"]=this.buildAttributesMap(A,n,T)),this.addChild(r,_,n,D),n=n.substr(0,n.lastIndexOf("."))}else{var k=new I(T);this.tagsNodeStack.push(r),T!==A&&P&&(k[":@"]=this.buildAttributesMap(A,n,T)),this.addChild(r,k,n,D),r=k}i="",s=S}}else i+=t[s];return e.child};function G(t,e,r,i){this.options.captureMetaData||(i=void 0);var n=this.options.updateTag(e.tagname,r,e[":@"]);!1===n||("string"==typeof n?(e.tagname=n,t.addChild(e,i)):t.addChild(e,i))}var X=function(t,e,r){if(-1===t.indexOf("&"))return t;var i=this.options.processEntities;if(!i.enabled)return t;if(i.allowedTags&&!i.allowedTags.includes(e))return t;if(i.tagFilter&&!i.tagFilter(e,r))return t;for(var n in this.docTypeEntities){var a=this.docTypeEntities[n],s=t.match(a.regx);if(s){if(this.entityExpansionCount+=s.length,i.maxTotalExpansions&&this.entityExpansionCount>i.maxTotalExpansions)throw new Error("Entity expansion limit exceeded: "+this.entityExpansionCount+" > "+i.maxTotalExpansions);var o=t.length;if(t=t.replace(a.regx,a.val),i.maxExpandedLength&&(this.currentExpandedLength+=t.length-o,this.currentExpandedLength>i.maxExpandedLength))throw new Error("Total expanded content size exceeded: "+this.currentExpandedLength+" > "+i.maxExpandedLength)}}if(-1===t.indexOf("&"))return t;for(var l in this.lastEntities){var u=this.lastEntities[l];t=t.replace(u.regex,u.val)}if(-1===t.indexOf("&"))return t;if(this.options.htmlEntities)for(var d in this.htmlEntities){var h=this.htmlEntities[d];t=t.replace(h.regex,h.val)}return t.replace(this.ampEntity.regex,this.ampEntity.val)};function z(t,e,r,i){return t&&(void 0===i&&(i=0===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 $(t,e,r,i){return!(!e||!e.has(i))||!(!t||!t.has(r))}function W(t,e,r,i){var n=t.indexOf(e,r);if(-1===n)throw new Error(i);return n+e.length-1}function q(t,e,r,i){void 0===i&&(i=">");var n=function(t,e,r){var i;void 0===r&&(r=">");for(var n="",a=e;a<t.length;a++){var s=t[a];if(i)s===i&&(i="");else if('"'===s||"'"===s)i=s;else if(s===r[0]){if(!r[1])return{data:n,index:a};if(t[a+1]===r[1])return{data:n,index:a}}else"\t"===s&&(s=" ");n+=s}}(t,e+1,i);if(n){var a=n.data,s=n.index,o=a.search(/\s/),l=a,u=!0;-1!==o&&(l=a.substring(0,o),a=a.substring(o+1).trimStart());var d=l;if(r){var h=l.indexOf(":");-1!==h&&(u=(l=l.substr(h+1))!==n.data.substr(h+1))}return{tagName:l,tagExp:a,closeIndex:s,attrExpPresent:u,rawTagName:d}}}function Z(t,e,r){for(var i=r,n=1;r<t.length;r++)if("<"===t[r])if("/"===t[r+1]){var a=W(t,">",r,e+" is not closed");if(t.substring(r+2,a).trim()===e&&0==--n)return{tagContent:t.substring(i,r),i:a};r=a}else if("?"===t[r+1])r=W(t,"?>",r+1,"StopNode is not closed.");else if("!--"===t.substr(r+1,3))r=W(t,"--\x3e",r+3,"StopNode is not closed.");else if("!["===t.substr(r+1,2))r=W(t,"]]>",r,"StopNode is not closed.")-2;else{var s=q(t,r,">");s&&((s&&s.tagName)===e&&"/"!==s.tagExp[s.tagExp.length-1]&&n++,r=s.closeIndex)}}function K(t,e,r){if(e&&"string"==typeof t){var i=t.trim();return"true"===i||"false"!==i&&function(t,e={}){if(e=Object.assign({},D,e),!t||"string"!=typeof t)return t;let r=t.trim();if(void 0!==e.skipLike&&e.skipLike.test(r))return t;if("0"===t)return 0;if(e.hex&&C.test(r))return function(t){if(parseInt)return parseInt(t,16);if(Number.parseInt)return Number.parseInt(t,16);if(window&&window.parseInt)return window.parseInt(t,16);throw new Error("parseInt, Number.parseInt, window.parseInt are not supported")}(r);if(-1!==r.search(/.+[eE].+/))return function(t,e,r){if(!r.eNotation)return t;const i=e.match(j);if(i){let n=i[1]||"";const a=-1===i[3].indexOf("e")?"E":"e",s=i[2],o=n?t[s.length+1]===a:t[s.length]===a;return s.length>1&&o?t:1!==s.length||!i[3].startsWith(`.${a}`)&&i[3][0]!==a?r.leadingZeros&&!o?(e=(i[1]||"")+i[3],Number(e)):t:Number(e)}return t}(t,r,e);{const n=V.exec(r);if(n){const a=n[1]||"",s=n[2];let o=(i=n[3])&&-1!==i.indexOf(".")?("."===(i=i.replace(/0+$/,""))?i="0":"."===i[0]?i="0"+i:"."===i[i.length-1]&&(i=i.substring(0,i.length-1)),i):i;const l=a?"."===t[s.length+1]:"."===t[s.length];if(!e.leadingZeros&&(s.length>1||1===s.length&&!l))return t;{const i=Number(r),n=String(i);if(0===i||-0===i)return i;if(-1!==n.search(/[eE]/))return e.eNotation?i:t;if(-1!==r.indexOf("."))return"0"===n||n===o||n===`${a}${o}`?i:t;let l=s?o:r;return s?l===n||a+l===n?i:t:l===n||l===a+n?i:t}}return t}var i}(t,r)}return void 0!==t?t:""}function Q(t,e,r){var i=Number.parseInt(t,e);return i>=0&&i<=1114111?String.fromCodePoint(i):r+t+";"}var J=I.getMetaDataSymbol();function H(t,e){return tt(t,e)}function tt(t,e,r){for(var i,n={},a=0;a<t.length;a++){var s,o=t[a],l=et(o);if(s=void 0===r?l:r+"."+l,l===e.textNodeName)void 0===i?i=o[l]:i+=""+o[l];else{if(void 0===l)continue;if(o[l]){var u=tt(o[l],e,s),d=it(u,e);void 0!==o[J]&&(u[J]=o[J]),o[":@"]?rt(u,o[":@"],s,e):1!==Object.keys(u).length||void 0===u[e.textNodeName]||e.alwaysCreateTextNode?0===Object.keys(u).length&&(e.alwaysCreateTextNode?u[e.textNodeName]="":u=""):u=u[e.textNodeName],void 0!==n[l]&&n.hasOwnProperty(l)?(Array.isArray(n[l])||(n[l]=[n[l]]),n[l].push(u)):e.isArray(l,s,d)?n[l]=[u]:n[l]=u}}}return"string"==typeof i?i.length>0&&(n[e.textNodeName]=i):void 0!==i&&(n[e.textNodeName]=i),n}function et(t){for(var e=Object.keys(t),r=0;r<e.length;r++){var i=e[r];if(":@"!==i)return i}}function rt(t,e,r,i){if(e)for(var n=Object.keys(e),a=n.length,s=0;s<a;s++){var o=n[s];i.isArray(o,r+"."+o,!0,!0)?t[o]=[e[o]]:t[o]=e[o]}}function it(t,e){var r=e.textNodeName,i=Object.keys(t).length;return 0===i||!(1!==i||!t[r]&&"boolean"!=typeof t[r]&&0!==t[r])}var nt=function(){function t(t){this.externalEntities={},this.options=w(t)}var e=t.prototype;return e.parse=function(t,e){if("string"!=typeof t&&t.toString)t=t.toString();else if("string"!=typeof t)throw new Error("XML data is accepted in String or Bytes[] form.");if(e){!0===e&&(e={});var r=o(t,e);if(!0!==r)throw Error(r.err.msg+":"+r.err.line+":"+r.err.col)}var i=new M(this.options);i.addExternalEntities(this.externalEntities);var n=i.parseXml(t);return this.options.preserveOrder||void 0===n?n:H(n,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.getMetaDataSymbol=function(){return I.getMetaDataSymbol()},t}();function at(t,e){var r="";return e.format&&e.indentBy.length>0&&(r="\n"),st(t,e,"",r)}function st(t,e,r,i){for(var n="",a=!1,s=0;s<t.length;s++){var o=t[s],l=ot(o);if(void 0!==l){var u;if(u=0===r.length?l:r+"."+l,l!==e.textNodeName)if(l!==e.cdataPropName)if(l!==e.commentPropName)if("?"!==l[0]){var d=i;""!==d&&(d+=e.indentBy);var h=i+"<"+l+lt(o[":@"],e),p=st(o[l],e,u,d);-1!==e.unpairedTags.indexOf(l)?e.suppressUnpairedNode?n+=h+">":n+=h+"/>":p&&0!==p.length||!e.suppressEmptyNode?p&&p.endsWith(">")?n+=h+">"+p+i+"</"+l+">":(n+=h+">",p&&""!==i&&(p.includes("/>")||p.includes("</"))?n+=i+e.indentBy+p+i:n+=p,n+="</"+l+">"):n+=h+"/>",a=!0}else{var f=lt(o[":@"],e),g="?xml"===l?"":i,c=o[l][0][e.textNodeName];n+=g+"<"+l+(c=0!==c.length?" "+c:"")+f+"?>",a=!0}else n+=i+"\x3c!--"+o[l][0][e.textNodeName]+"--\x3e",a=!0;else a&&(n+=i),n+="<![CDATA["+o[l][0][e.textNodeName]+"]]>",a=!1;else{var v=o[l];ut(u,e)||(v=dt(v=e.tagValueProcessor(l,v),e)),a&&(n+=i),n+=v,a=!1}}}return n}function ot(t){for(var e=Object.keys(t),r=0;r<e.length;r++){var i=e[r];if(t.hasOwnProperty(i)&&":@"!==i)return i}}function lt(t,e){var r="";if(t&&!e.ignoreAttributes)for(var i in t)if(t.hasOwnProperty(i)){var n=e.attributeValueProcessor(i,t[i]);!0===(n=dt(n,e))&&e.suppressBooleanAttributes?r+=" "+i.substr(e.attributeNamePrefix.length):r+=" "+i.substr(e.attributeNamePrefix.length)+'="'+n+'"'}return r}function ut(t,e){var r=(t=t.substr(0,t.length-e.textNodeName.length-1)).substr(t.lastIndexOf(".")+1);for(var i in e.stopNodes)if(e.stopNodes[i]===t||e.stopNodes[i]==="*."+r)return!0;return!1}function dt(t,e){if(t&&t.length>0&&e.processEntities)for(var r=0;r<e.entities.length;r++){var i=e.entities[r];t=t.replace(i.regex,i.val)}return t}var ht={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 pt(t){this.options=Object.assign({},ht,t),!0===this.options.ignoreAttributes||this.options.attributesGroupName?this.isAttribute=function(){return!1}:(this.ignoreAttributesFn=F(this.options.ignoreAttributes),this.attrPrefixLen=this.options.attributeNamePrefix.length,this.isAttribute=ct),this.processTextOrObjNode=ft,this.options.format?(this.indentate=gt,this.tagEndChar=">\n",this.newLine="\n"):(this.indentate=function(){return""},this.tagEndChar=">",this.newLine="")}function ft(t,e,r,i){var n=this.j2x(t,r+1,i.concat(e));return void 0!==t[this.options.textNodeName]&&1===Object.keys(t).length?this.buildTextValNode(t[this.options.textNodeName],e,n.attrStr,r):this.buildObjectNode(n.val,e,n.attrStr,r)}function gt(t){return this.options.indentBy.repeat(t)}function ct(t){return!(!t.startsWith(this.options.attributeNamePrefix)||t===this.options.textNodeName)&&t.substr(this.attrPrefixLen)}pt.prototype.build=function(t){return this.options.preserveOrder?at(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},pt.prototype.j2x=function(t,e,r){var i="",n="",a=r.join(".");for(var s in t)if(Object.prototype.hasOwnProperty.call(t,s))if(void 0===t[s])this.isAttribute(s)&&(n+="");else if(null===t[s])this.isAttribute(s)||s===this.options.cdataPropName?n+="":"?"===s[0]?n+=this.indentate(e)+"<"+s+"?"+this.tagEndChar:n+=this.indentate(e)+"<"+s+"/"+this.tagEndChar;else if(t[s]instanceof Date)n+=this.buildTextValNode(t[s],s,"",e);else if("object"!=typeof t[s]){var o=this.isAttribute(s);if(o&&!this.ignoreAttributesFn(o,a))i+=this.buildAttrPairStr(o,""+t[s]);else if(!o)if(s===this.options.textNodeName){var l=this.options.tagValueProcessor(s,""+t[s]);n+=this.replaceEntitiesValue(l)}else n+=this.buildTextValNode(t[s],s,"",e)}else if(Array.isArray(t[s])){for(var u=t[s].length,d="",h="",p=0;p<u;p++){var f=t[s][p];if(void 0===f);else if(null===f)"?"===s[0]?n+=this.indentate(e)+"<"+s+"?"+this.tagEndChar:n+=this.indentate(e)+"<"+s+"/"+this.tagEndChar;else if("object"==typeof f)if(this.options.oneListGroup){var g=this.j2x(f,e+1,r.concat(s));d+=g.val,this.options.attributesGroupName&&f.hasOwnProperty(this.options.attributesGroupName)&&(h+=g.attrStr)}else d+=this.processTextOrObjNode(f,s,e,r);else if(this.options.oneListGroup){var c=this.options.tagValueProcessor(s,f);d+=c=this.replaceEntitiesValue(c)}else d+=this.buildTextValNode(f,s,"",e)}this.options.oneListGroup&&(d=this.buildObjectNode(d,s,h,e)),n+=d}else if(this.options.attributesGroupName&&s===this.options.attributesGroupName)for(var v=Object.keys(t[s]),x=v.length,m=0;m<x;m++)i+=this.buildAttrPairStr(v[m],""+t[s][v[m]]);else n+=this.processTextOrObjNode(t[s],s,e,r);return{attrStr:i,val:n}},pt.prototype.buildAttrPairStr=function(t,e){return e=this.options.attributeValueProcessor(t,""+e),e=this.replaceEntitiesValue(e),this.options.suppressBooleanAttributes&&"true"===e?" "+t:" "+t+'="'+e+'"'},pt.prototype.buildObjectNode=function(t,e,r,i){if(""===t)return"?"===e[0]?this.indentate(i)+"<"+e+r+"?"+this.tagEndChar:this.indentate(i)+"<"+e+r+this.closeTag(e)+this.tagEndChar;var n="</"+e+this.tagEndChar,a="";return"?"===e[0]&&(a="?",n=""),!r&&""!==r||-1!==t.indexOf("<")?!1!==this.options.commentPropName&&e===this.options.commentPropName&&0===a.length?this.indentate(i)+"\x3c!--"+t+"--\x3e"+this.newLine:this.indentate(i)+"<"+e+r+a+this.tagEndChar+t+this.indentate(i)+n:this.indentate(i)+"<"+e+r+a+">"+t+n},pt.prototype.closeTag=function(t){var e="";return-1!==this.options.unpairedTags.indexOf(t)?this.options.suppressUnpairedNode||(e="/"):e=this.options.suppressEmptyNode?"/":"></"+t,e},pt.prototype.buildTextValNode=function(t,e,r,i){if(!1!==this.options.cdataPropName&&e===this.options.cdataPropName)return this.indentate(i)+"<![CDATA["+t+"]]>"+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+"</"+e+this.tagEndChar},pt.prototype.replaceEntitiesValue=function(t){if(t&&t.length>0&&this.options.processEntities)for(var e=0;e<this.options.entities.length;e++){var r=this.options.entities[e];t=t.replace(r.regex,r.val)}return t};var vt={validate:o};return e})())); | ||
| //# sourceMappingURL=fxp.min.js.map |
@@ -1,2 +0,2 @@ | ||
| !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.XMLParser=e():t.XMLParser=e()}(this,(()=>(()=>{"use strict";var t={d:(e,r)=>{for(var n in r)t.o(r,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:r[n]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{default:()=>J});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},captureMetaData:!1},n=":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",i=new RegExp("^["+n+"]["+n+"\\-.\\d\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$");function a(t,e){for(var r=[],n=e.exec(t);n;){var i=[];i.startIndex=e.lastIndex-n[0].length;for(var a=n.length,s=0;s<a;s++)i.push(n[s]);r.push(i),n=e.exec(t)}return r}var s,o=function(t){return!(null==i.exec(t))};s="function"!=typeof Symbol?"@@xmlMetadata":Symbol("XML Node Metadata");var l=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,e){var r,n;"__proto__"===t.tagname&&(t.tagname="#__proto__"),t[":@"]&&Object.keys(t[":@"]).length>0?this.child.push(((r={})[t.tagname]=t.child,r[":@"]=t[":@"],r)):this.child.push(((n={})[t.tagname]=t.child,n)),void 0!==e&&(this.child[this.child.length-1][s]={startIndex:e})},t.getMetaDataSymbol=function(){return s},t}(),u=function(){function t(t){this.suppressValidationErr=!t}var e=t.prototype;return e.readDocType=function(t,e){var r={};if("O"!==t[e+3]||"C"!==t[e+4]||"T"!==t[e+5]||"Y"!==t[e+6]||"P"!==t[e+7]||"E"!==t[e+8])throw new Error("Invalid Tag instead of DOCTYPE");e+=9;for(var n=1,i=!1,a=!1;e<t.length;e++)if("<"!==t[e]||a)if(">"===t[e]){if(a?"-"===t[e-1]&&"-"===t[e-2]&&(a=!1,n--):n--,0===n)break}else"["===t[e]?i=!0:t[e];else{if(i&&d(t,"!ENTITY",e)){e+=7;var s=void 0,o=void 0,l=this.readEntityExp(t,e+1,this.suppressValidationErr);if(s=l[0],o=l[1],e=l[2],-1===o.indexOf("&")){var u=s.replace(/[.\-+*:]/g,"\\.");r[s]={regx:RegExp("&"+u+";","g"),val:o}}}else if(i&&d(t,"!ELEMENT",e))e+=8,e=this.readElementExp(t,e+1).index;else if(i&&d(t,"!ATTLIST",e))e+=8;else if(i&&d(t,"!NOTATION",e))e+=9,e=this.readNotationExp(t,e+1,this.suppressValidationErr).index;else{if(!d(t,"!--",e))throw new Error("Invalid DOCTYPE");a=!0}n++}if(0!==n)throw new Error("Unclosed DOCTYPE");return{entities:r,i:e}},e.readEntityExp=function(t,e){e=f(t,e);for(var r="";e<t.length&&!/\s/.test(t[e])&&'"'!==t[e]&&"'"!==t[e];)r+=t[e],e++;if(h(r),e=f(t,e),!this.suppressValidationErr){if("SYSTEM"===t.substring(e,e+6).toUpperCase())throw new Error("External entities are not supported");if("%"===t[e])throw new Error("Parameter entities are not supported")}var n=this.readIdentifierVal(t,e,"entity");return e=n[0],[r,n[1],--e]},e.readNotationExp=function(t,e){e=f(t,e);for(var r="";e<t.length&&!/\s/.test(t[e]);)r+=t[e],e++;!this.suppressValidationErr&&h(r),e=f(t,e);var n=t.substring(e,e+6).toUpperCase();if(!this.suppressValidationErr&&"SYSTEM"!==n&&"PUBLIC"!==n)throw new Error('Expected SYSTEM or PUBLIC, found "'+n+'"');e+=n.length,e=f(t,e);var i=null,a=null;if("PUBLIC"===n){var s=this.readIdentifierVal(t,e,"publicIdentifier");if(e=s[0],i=s[1],'"'===t[e=f(t,e)]||"'"===t[e]){var o=this.readIdentifierVal(t,e,"systemIdentifier");e=o[0],a=o[1]}}else if("SYSTEM"===n){var l=this.readIdentifierVal(t,e,"systemIdentifier");if(e=l[0],a=l[1],!this.suppressValidationErr&&!a)throw new Error("Missing mandatory system identifier for SYSTEM notation")}return{notationName:r,publicIdentifier:i,systemIdentifier:a,index:--e}},e.readIdentifierVal=function(t,e,r){var n="",i=t[e];if('"'!==i&&"'"!==i)throw new Error('Expected quoted string, found "'+i+'"');for(e++;e<t.length&&t[e]!==i;)n+=t[e],e++;if(t[e]!==i)throw new Error("Unterminated "+r+" value");return[++e,n]},e.readElementExp=function(t,e){e=f(t,e);for(var r="";e<t.length&&!/\s/.test(t[e]);)r+=t[e],e++;if(!this.suppressValidationErr&&!o(r))throw new Error('Invalid element name: "'+r+'"');var n="";if("E"===t[e=f(t,e)]&&d(t,"MPTY",e))e+=4;else if("A"===t[e]&&d(t,"NY",e))e+=2;else if("("===t[e]){for(e++;e<t.length&&")"!==t[e];)n+=t[e],e++;if(")"!==t[e])throw new Error("Unterminated content model")}else if(!this.suppressValidationErr)throw new Error('Invalid Element Expression, found "'+t[e]+'"');return{elementName:r,contentModel:n.trim(),index:e}},e.readAttlistExp=function(t,e){e=f(t,e);for(var r="";e<t.length&&!/\s/.test(t[e]);)r+=t[e],e++;h(r),e=f(t,e);for(var n="";e<t.length&&!/\s/.test(t[e]);)n+=t[e],e++;if(!h(n))throw new Error('Invalid attribute name: "'+n+'"');e=f(t,e);var i="";if("NOTATION"===t.substring(e,e+8).toUpperCase()){if(i="NOTATION","("!==t[e=f(t,e+=8)])throw new Error("Expected '(', found \""+t[e]+'"');e++;for(var a=[];e<t.length&&")"!==t[e];){for(var s="";e<t.length&&"|"!==t[e]&&")"!==t[e];)s+=t[e],e++;if(!h(s=s.trim()))throw new Error('Invalid notation name: "'+s+'"');a.push(s),"|"===t[e]&&(e++,e=f(t,e))}if(")"!==t[e])throw new Error("Unterminated list of notations");e++,i+=" ("+a.join("|")+")"}else{for(;e<t.length&&!/\s/.test(t[e]);)i+=t[e],e++;if(!this.suppressValidationErr&&!["CDATA","ID","IDREF","IDREFS","ENTITY","ENTITIES","NMTOKEN","NMTOKENS"].includes(i.toUpperCase()))throw new Error('Invalid attribute type: "'+i+'"')}e=f(t,e);var o="";if("#REQUIRED"===t.substring(e,e+8).toUpperCase())o="#REQUIRED",e+=8;else if("#IMPLIED"===t.substring(e,e+7).toUpperCase())o="#IMPLIED",e+=7;else{var l=this.readIdentifierVal(t,e,"ATTLIST");e=l[0],o=l[1]}return{elementName:r,attributeName:n,attributeType:i,defaultValue:o,index:e}},t}(),f=function(t,e){for(;e<t.length&&/\s/.test(t[e]);)e++;return e};function d(t,e,r){for(var n=0;n<e.length;n++)if(e[n]!==t[r+n+1])return!1;return!0}function h(t){if(o(t))return t;throw new Error("Invalid entity name "+t)}const g=/^[-+]?0x[a-fA-F0-9]+$/,p=/^([\-\+])?(0*)([0-9]*(\.[0-9]*)?)$/,c={hex:!0,leadingZeros:!0,decimalPoint:".",eNotation:!0};const v=/^([-+])?(0*)(\d*(\.\d*)?[eE][-\+]?\d+)$/;function m(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}var x=function(t){var e;if(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:"₹"},num_dec:{regex:/&#([0-9]{1,7});/g,val:function(t,e){return V(e,10,"&#")}},num_hex:{regex:/&#x([0-9a-fA-F]{1,6});/g,val:function(t,e){return V(e,16,"&#x")}}},this.addExternalEntities=b,this.parseXml=w,this.parseTextData=E,this.resolveNameSpace=N,this.buildAttributesMap=T,this.isItStopNode=O,this.replaceEntitiesValue=S,this.readStopNodeData=D,this.saveTextToParentTag=A,this.addChild=I,this.ignoreAttributesFn="function"==typeof(e=this.options.ignoreAttributes)?e:Array.isArray(e)?function(t){for(var r,n=function(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(r)return(r=r.call(t)).next.bind(r);if(Array.isArray(t)||(r=function(t,e){if(t){if("string"==typeof t)return m(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?m(t,e):void 0}}(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0;return function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(e);!(r=n()).done;){var i=r.value;if("string"==typeof i&&t===i)return!0;if(i instanceof RegExp&&i.test(t))return!0}}:function(){return!1},this.options.stopNodes&&this.options.stopNodes.length>0){this.stopNodesExact=new Set,this.stopNodesWildcard=new Set;for(var r=0;r<this.options.stopNodes.length;r++){var n=this.options.stopNodes[r];"string"==typeof n&&(n.startsWith("*.")?this.stopNodesWildcard.add(n.substring(2)):this.stopNodesExact.add(n))}}};function b(t){for(var e=Object.keys(t),r=0;r<e.length;r++){var n=e[r],i=n.replace(/[.\-+*:]/g,"\\.");this.lastEntities[n]={regex:new RegExp("&"+i+";","g"),val:t[n]}}}function E(t,e,r,n,i,a,s){if(void 0!==t&&(this.options.trimValues&&!n&&(t=t.trim()),t.length>0)){s||(t=this.replaceEntitiesValue(t));var o=this.options.tagValueProcessor(e,t,r,i,a);return null==o?t:typeof o!=typeof t||o!==t?o:this.options.trimValues||t.trim()===t?M(t,this.options.parseTagValue,this.options.numberParseOptions):t}}function N(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}var y=new RegExp("([^\\s=]+)\\s*(=\\s*(['\"])([\\s\\S]*?)\\3)?","gm");function T(t,e){if(!0!==this.options.ignoreAttributes&&"string"==typeof t){for(var r=a(t,y),n=r.length,i={},s=0;s<n;s++){var o=this.resolveNameSpace(r[s][1]);if(!this.ignoreAttributesFn(o,e)){var l=r[s][4],u=this.options.attributeNamePrefix+o;if(o.length)if(this.options.transformAttributeName&&(u=this.options.transformAttributeName(u)),"__proto__"===u&&(u="#__proto__"),void 0!==l){this.options.trimValues&&(l=l.trim()),l=this.replaceEntitiesValue(l);var f=this.options.attributeValueProcessor(o,l,e);i[u]=null==f?l:typeof f!=typeof l||f!==l?f:M(l,this.options.parseAttributeValue,this.options.numberParseOptions)}else this.options.allowBooleanAttributes&&(i[u]=!0)}}if(!Object.keys(i).length)return;if(this.options.attributesGroupName){var d={};return d[this.options.attributesGroupName]=i,d}return i}}var w=function(t){t=t.replace(/\r\n?/g,"\n");for(var e=new l("!xml"),r=e,n="",i="",a=new u(this.options.processEntities),s=0;s<t.length;s++)if("<"===t[s])if("/"===t[s+1]){var o=P(t,">",s,"Closing Tag is not closed."),f=t.substring(s+2,o).trim();if(this.options.removeNSPrefix){var d=f.indexOf(":");-1!==d&&(f=f.substr(d+1))}this.options.transformTagName&&(f=this.options.transformTagName(f)),r&&(n=this.saveTextToParentTag(n,r,i));var h=i.substring(i.lastIndexOf(".")+1);if(f&&-1!==this.options.unpairedTags.indexOf(f))throw new Error("Unpaired tag can not be used as closing tag: </"+f+">");var g=0;h&&-1!==this.options.unpairedTags.indexOf(h)?(g=i.lastIndexOf(".",i.lastIndexOf(".")-1),this.tagsNodeStack.pop()):g=i.lastIndexOf("."),i=i.substring(0,g),r=this.tagsNodeStack.pop(),n="",s=o}else if("?"===t[s+1]){var p=C(t,s,!1,"?>");if(!p)throw new Error("Pi Tag is not closed.");if(n=this.saveTextToParentTag(n,r,i),this.options.ignoreDeclaration&&"?xml"===p.tagName||this.options.ignorePiTags);else{var c=new l(p.tagName);c.add(this.options.textNodeName,""),p.tagName!==p.tagExp&&p.attrExpPresent&&(c[":@"]=this.buildAttributesMap(p.tagExp,i)),this.addChild(r,c,i,s)}s=p.closeIndex+1}else if("!--"===t.substr(s+1,3)){var v=P(t,"--\x3e",s+4,"Comment is not closed.");if(this.options.commentPropName){var m,x=t.substring(s+4,v-2);n=this.saveTextToParentTag(n,r,i),r.add(this.options.commentPropName,[(m={},m[this.options.textNodeName]=x,m)])}s=v}else if("!D"===t.substr(s+1,2)){var b=a.readDocType(t,s);this.docTypeEntities=b.entities,s=b.i}else if("!["===t.substr(s+1,2)){var E=P(t,"]]>",s,"CDATA is not closed.")-2,N=t.substring(s+9,E);n=this.saveTextToParentTag(n,r,i);var y,T=this.parseTextData(N,r.tagname,i,!0,!1,!0,!0);null==T&&(T=""),this.options.cdataPropName?r.add(this.options.cdataPropName,[(y={},y[this.options.textNodeName]=N,y)]):r.add(this.options.textNodeName,T),s=E+2}else{var w=C(t,s,this.options.removeNSPrefix),I=w.tagName,S=w.rawTagName,A=w.tagExp,O=w.attrExpPresent,D=w.closeIndex;if(this.options.transformTagName){var M=this.options.transformTagName(I);A===I&&(A=M),I=M}r&&n&&"!xml"!==r.tagname&&(n=this.saveTextToParentTag(n,r,i,!1));var V=r;V&&-1!==this.options.unpairedTags.indexOf(V.tagname)&&(r=this.tagsNodeStack.pop(),i=i.substring(0,i.lastIndexOf("."))),I!==e.tagname&&(i+=i?"."+I:I);var F=s;if(this.isItStopNode(this.stopNodesExact,this.stopNodesWildcard,i,I)){var _="";if(A.length>0&&A.lastIndexOf("/")===A.length-1)"/"===I[I.length-1]?(I=I.substr(0,I.length-1),i=i.substr(0,i.length-1),A=I):A=A.substr(0,A.length-1),s=w.closeIndex;else if(-1!==this.options.unpairedTags.indexOf(I))s=w.closeIndex;else{var k=this.readStopNodeData(t,S,D+1);if(!k)throw new Error("Unexpected end of "+S);s=k.i,_=k.tagContent}var j=new l(I);I!==A&&O&&(j[":@"]=this.buildAttributesMap(A,i)),_&&(_=this.parseTextData(_,I,i,!0,O,!0,!0)),i=i.substr(0,i.lastIndexOf(".")),j.add(this.options.textNodeName,_),this.addChild(r,j,i,F)}else{if(A.length>0&&A.lastIndexOf("/")===A.length-1){if("/"===I[I.length-1]?(I=I.substr(0,I.length-1),i=i.substr(0,i.length-1),A=I):A=A.substr(0,A.length-1),this.options.transformTagName){var U=this.options.transformTagName(I);A===I&&(A=U),I=U}var L=new l(I);I!==A&&O&&(L[":@"]=this.buildAttributesMap(A,i)),this.addChild(r,L,i,F),i=i.substr(0,i.lastIndexOf("."))}else{var Y=new l(I);this.tagsNodeStack.push(r),I!==A&&O&&(Y[":@"]=this.buildAttributesMap(A,i)),this.addChild(r,Y,i,F),r=Y}n="",s=D}}else n+=t[s];return e.child};function I(t,e,r,n){this.options.captureMetaData||(n=void 0);var i=this.options.updateTag(e.tagname,r,e[":@"]);!1===i||("string"==typeof i?(e.tagname=i,t.addChild(e,n)):t.addChild(e,n))}var S=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 n in this.lastEntities){var i=this.lastEntities[n];t=t.replace(i.regex,i.val)}if(this.options.htmlEntities)for(var a in this.htmlEntities){var s=this.htmlEntities[a];t=t.replace(s.regex,s.val)}t=t.replace(this.ampEntity.regex,this.ampEntity.val)}return t};function A(t,e,r,n){return t&&(void 0===n&&(n=0===e.child.length),void 0!==(t=this.parseTextData(t,e.tagname,r,!1,!!e[":@"]&&0!==Object.keys(e[":@"]).length,n))&&""!==t&&e.add(this.options.textNodeName,t),t=""),t}function O(t,e,r,n){return!(!e||!e.has(n))||!(!t||!t.has(r))}function P(t,e,r,n){var i=t.indexOf(e,r);if(-1===i)throw new Error(n);return i+e.length-1}function C(t,e,r,n){void 0===n&&(n=">");var i=function(t,e,r){var n;void 0===r&&(r=">");for(var i="",a=e;a<t.length;a++){var s=t[a];if(n)s===n&&(n="");else if('"'===s||"'"===s)n=s;else if(s===r[0]){if(!r[1])return{data:i,index:a};if(t[a+1]===r[1])return{data:i,index:a}}else"\t"===s&&(s=" ");i+=s}}(t,e+1,n);if(i){var a=i.data,s=i.index,o=a.search(/\s/),l=a,u=!0;-1!==o&&(l=a.substring(0,o),a=a.substring(o+1).trimStart());var f=l;if(r){var d=l.indexOf(":");-1!==d&&(u=(l=l.substr(d+1))!==i.data.substr(d+1))}return{tagName:l,tagExp:a,closeIndex:s,attrExpPresent:u,rawTagName:f}}}function D(t,e,r){for(var n=r,i=1;r<t.length;r++)if("<"===t[r])if("/"===t[r+1]){var a=P(t,">",r,e+" is not closed");if(t.substring(r+2,a).trim()===e&&0==--i)return{tagContent:t.substring(n,r),i:a};r=a}else if("?"===t[r+1])r=P(t,"?>",r+1,"StopNode is not closed.");else if("!--"===t.substr(r+1,3))r=P(t,"--\x3e",r+3,"StopNode is not closed.");else if("!["===t.substr(r+1,2))r=P(t,"]]>",r,"StopNode is not closed.")-2;else{var s=C(t,r,">");s&&((s&&s.tagName)===e&&"/"!==s.tagExp[s.tagExp.length-1]&&i++,r=s.closeIndex)}}function M(t,e,r){if(e&&"string"==typeof t){var n=t.trim();return"true"===n||"false"!==n&&function(t,e={}){if(e=Object.assign({},c,e),!t||"string"!=typeof t)return t;let r=t.trim();if(void 0!==e.skipLike&&e.skipLike.test(r))return t;if("0"===t)return 0;if(e.hex&&g.test(r))return function(t){if(parseInt)return parseInt(t,16);if(Number.parseInt)return Number.parseInt(t,16);if(window&&window.parseInt)return window.parseInt(t,16);throw new Error("parseInt, Number.parseInt, window.parseInt are not supported")}(r);if(-1!==r.search(/.+[eE].+/))return function(t,e,r){if(!r.eNotation)return t;const n=e.match(v);if(n){let i=n[1]||"";const a=-1===n[3].indexOf("e")?"E":"e",s=n[2],o=i?t[s.length+1]===a:t[s.length]===a;return s.length>1&&o?t:1!==s.length||!n[3].startsWith(`.${a}`)&&n[3][0]!==a?r.leadingZeros&&!o?(e=(n[1]||"")+n[3],Number(e)):t:Number(e)}return t}(t,r,e);{const i=p.exec(r);if(i){const a=i[1]||"",s=i[2];let o=(n=i[3])&&-1!==n.indexOf(".")?("."===(n=n.replace(/0+$/,""))?n="0":"."===n[0]?n="0"+n:"."===n[n.length-1]&&(n=n.substring(0,n.length-1)),n):n;const l=a?"."===t[s.length+1]:"."===t[s.length];if(!e.leadingZeros&&(s.length>1||1===s.length&&!l))return t;{const n=Number(r),i=String(n);if(0===n||-0===n)return n;if(-1!==i.search(/[eE]/))return e.eNotation?n:t;if(-1!==r.indexOf("."))return"0"===i||i===o||i===`${a}${o}`?n:t;let l=s?o:r;return s?l===i||a+l===i?n:t:l===i||l===a+i?n:t}}return t}var n}(t,r)}return void 0!==t?t:""}function V(t,e,r){var n=Number.parseInt(t,e);return n>=0&&n<=1114111?String.fromCodePoint(n):r+t+";"}var F=l.getMetaDataSymbol();function _(t,e){return k(t,e)}function k(t,e,r){for(var n,i={},a=0;a<t.length;a++){var s,o=t[a],l=j(o);if(s=void 0===r?l:r+"."+l,l===e.textNodeName)void 0===n?n=o[l]:n+=""+o[l];else{if(void 0===l)continue;if(o[l]){var u=k(o[l],e,s),f=L(u,e);void 0!==o[F]&&(u[F]=o[F]),o[":@"]?U(u,o[":@"],s,e):1!==Object.keys(u).length||void 0===u[e.textNodeName]||e.alwaysCreateTextNode?0===Object.keys(u).length&&(e.alwaysCreateTextNode?u[e.textNodeName]="":u=""):u=u[e.textNodeName],void 0!==i[l]&&i.hasOwnProperty(l)?(Array.isArray(i[l])||(i[l]=[i[l]]),i[l].push(u)):e.isArray(l,s,f)?i[l]=[u]:i[l]=u}}}return"string"==typeof n?n.length>0&&(i[e.textNodeName]=n):void 0!==n&&(i[e.textNodeName]=n),i}function j(t){for(var e=Object.keys(t),r=0;r<e.length;r++){var n=e[r];if(":@"!==n)return n}}function U(t,e,r,n){if(e)for(var i=Object.keys(e),a=i.length,s=0;s<a;s++){var o=i[s];n.isArray(o,r+"."+o,!0,!0)?t[o]=[e[o]]:t[o]=e[o]}}function L(t,e){var r=e.textNodeName,n=Object.keys(t).length;return 0===n||!(1!==n||!t[r]&&"boolean"!=typeof t[r]&&0!==t[r])}var Y={allowBooleanAttributes:!1,unpairedTags:[]};function R(t){return" "===t||"\t"===t||"\n"===t||"\r"===t}function X(t,e){for(var r=e;e<t.length;e++)if("?"!=t[e]&&" "!=t[e]);else{var n=t.substr(r,e-r);if(e>5&&"xml"===n)return G("InvalidXml","XML declaration allowed only at the start of the document.",Q(t,e));if("?"==t[e]&&">"==t[e+1]){e++;break}}return e}function B(t,e){if(t.length>e+5&&"-"===t[e+1]&&"-"===t[e+2]){for(e+=3;e<t.length;e++)if("-"===t[e]&&"-"===t[e+1]&&">"===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.length;e++)if("<"===t[e])r++;else if(">"===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.length;e++)if("]"===t[e]&&"]"===t[e+1]&&">"===t[e+2]){e+=2;break}return e}function $(t,e){for(var r="",n="",i=!1;e<t.length;e++){if('"'===t[e]||"'"===t[e])""===n?n=t[e]:n!==t[e]||(n="");else if(">"===t[e]&&""===n){i=!0;break}r+=t[e]}return""===n&&{value:r,index:e,tagClosed:i}}var W=new RegExp("(\\s*)([^\\s=]+)(\\s*=)?(\\s*(['\"])(([\\s\\S])*?)\\5)?","g");function Z(t,e){for(var r=a(t,W),n={},i=0;i<r.length;i++){if(0===r[i][1].length)return G("InvalidAttr","Attribute '"+r[i][2]+"' has no space in starting.",z(r[i]));if(void 0!==r[i][3]&&void 0===r[i][4])return G("InvalidAttr","Attribute '"+r[i][2]+"' is without value.",z(r[i]));if(void 0===r[i][3]&&!e.allowBooleanAttributes)return G("InvalidAttr","boolean attribute '"+r[i][2]+"' is not allowed.",z(r[i]));var s=r[i][2];if(!K(s))return G("InvalidAttr","Attribute '"+s+"' is an invalid name.",z(r[i]));if(n.hasOwnProperty(s))return G("InvalidAttr","Attribute '"+s+"' is repeated.",z(r[i]));n[s]=1}return!0}function q(t,e){if(";"===t[++e])return-1;if("#"===t[e])return function(t,e){var r=/\d/;for("x"===t[e]&&(e++,r=/[\da-fA-F]/);e<t.length;e++){if(";"===t[e])return e;if(!t[e].match(r))break}return-1}(t,++e);for(var r=0;e<t.length;e++,r++)if(!(t[e].match(/\w/)&&r<20)){if(";"===t[e])break;return-1}return e}function G(t,e,r){return{err:{code:t,msg:e,line:r.line||r,col:r.col}}}function K(t){return o(t)}function Q(t,e){var r=t.substring(0,e).split(/\r?\n/);return{line:r.length,col:r[r.length-1].length+1}}function z(t){return t.startIndex+t[1].length}var J=function(){function t(t){this.externalEntities={},this.options=function(t){return Object.assign({},r,t)}(t)}var e=t.prototype;return e.parse=function(t,e){if("string"!=typeof t&&t.toString)t=t.toString();else if("string"!=typeof t)throw new Error("XML data is accepted in String or Bytes[] form.");if(e){!0===e&&(e={});var r=function(t,e){e=Object.assign({},Y,e);var r=[],n=!1,i=!1;"\ufeff"===t[0]&&(t=t.substr(1));for(var a=0;a<t.length;a++)if("<"===t[a]&&"?"===t[a+1]){if((a=X(t,a+=2)).err)return a}else{if("<"!==t[a]){if(R(t[a]))continue;return G("InvalidChar","char '"+t[a]+"' is not expected.",Q(t,a))}var s=a;if("!"===t[++a]){a=B(t,a);continue}var l=!1;"/"===t[a]&&(l=!0,a++);for(var u="";a<t.length&&">"!==t[a]&&" "!==t[a]&&"\t"!==t[a]&&"\n"!==t[a]&&"\r"!==t[a];a++)u+=t[a];if("/"===(u=u.trim())[u.length-1]&&(u=u.substring(0,u.length-1),a--),!o(u))return G("InvalidTag",0===u.trim().length?"Invalid space after '<'.":"Tag '"+u+"' is an invalid name.",Q(t,a));var f=$(t,a);if(!1===f)return G("InvalidAttr","Attributes for '"+u+"' have open quote.",Q(t,a));var d=f.value;if(a=f.index,"/"===d[d.length-1]){var h=a-d.length,g=Z(d=d.substring(0,d.length-1),e);if(!0!==g)return G(g.err.code,g.err.msg,Q(t,h+g.err.line));n=!0}else if(l){if(!f.tagClosed)return G("InvalidTag","Closing tag '"+u+"' doesn't have proper closing.",Q(t,a));if(d.trim().length>0)return G("InvalidTag","Closing tag '"+u+"' can't have attributes or invalid starting.",Q(t,s));if(0===r.length)return G("InvalidTag","Closing tag '"+u+"' has not been opened.",Q(t,s));var p=r.pop();if(u!==p.tagName){var c=Q(t,p.tagStartPos);return G("InvalidTag","Expected closing tag '"+p.tagName+"' (opened in line "+c.line+", col "+c.col+") instead of closing tag '"+u+"'.",Q(t,s))}0==r.length&&(i=!0)}else{var v=Z(d,e);if(!0!==v)return G(v.err.code,v.err.msg,Q(t,a-d.length+v.err.line));if(!0===i)return G("InvalidXml","Multiple possible root nodes found.",Q(t,a));-1!==e.unpairedTags.indexOf(u)||r.push({tagName:u,tagStartPos:s}),n=!0}for(a++;a<t.length;a++)if("<"===t[a]){if("!"===t[a+1]){a=B(t,++a);continue}if("?"!==t[a+1])break;if((a=X(t,++a)).err)return a}else if("&"===t[a]){var m=q(t,a);if(-1==m)return G("InvalidChar","char '&' is not expected.",Q(t,a));a=m}else if(!0===i&&!R(t[a]))return G("InvalidXml","Extra text at the end",Q(t,a));"<"===t[a]&&a--}return n?1==r.length?G("InvalidTag","Unclosed tag '"+r[0].tagName+"'.",Q(t,r[0].tagStartPos)):!(r.length>0)||G("InvalidXml","Invalid '"+JSON.stringify(r.map((function(t){return t.tagName})),null,4).replace(/\r?\n/g,"")+"' found.",{line:1,col:1}):G("InvalidXml","Start tag expected.",1)}(t,e);if(!0!==r)throw Error(r.err.msg+":"+r.err.line+":"+r.err.col)}var n=new x(this.options);n.addExternalEntities(this.externalEntities);var i=n.parseXml(t);return this.options.preserveOrder||void 0===i?i:_(i,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.getMetaDataSymbol=function(){return l.getMetaDataSymbol()},t}();return e})())); | ||
| !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.XMLParser=e():t.XMLParser=e()}(this,(()=>(()=>{"use strict";var t={d:(e,r)=>{for(var n in r)t.o(r,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:r[n]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{default:()=>tt});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},captureMetaData:!1};function n(t){return"boolean"==typeof t?{enabled:t,maxEntitySize:1e4,maxExpansionDepth:10,maxTotalExpansions:1e3,maxExpandedLength:1e5,allowedTags:null,tagFilter:null}:"object"==typeof t&&null!==t?{enabled:!1!==t.enabled,maxEntitySize:null!=(e=t.maxEntitySize)?e:1e4,maxExpansionDepth:null!=(r=t.maxExpansionDepth)?r:10,maxTotalExpansions:null!=(i=t.maxTotalExpansions)?i:1e3,maxExpandedLength:null!=(a=t.maxExpandedLength)?a:1e5,allowedTags:null!=(s=t.allowedTags)?s:null,tagFilter:null!=(o=t.tagFilter)?o:null}:n(!0);var e,r,i,a,s,o}var i=function(t){var e=Object.assign({},r,t);return e.processEntities=n(e.processEntities),e},a=":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",s=new RegExp("^["+a+"]["+a+"\\-.\\d\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$");function o(t,e){for(var r=[],n=e.exec(t);n;){var i=[];i.startIndex=e.lastIndex-n[0].length;for(var a=n.length,s=0;s<a;s++)i.push(n[s]);r.push(i),n=e.exec(t)}return r}var l,u=function(t){return!(null==s.exec(t))};l="function"!=typeof Symbol?"@@xmlMetadata":Symbol("XML Node Metadata");var d=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,e){var r,n;"__proto__"===t.tagname&&(t.tagname="#__proto__"),t[":@"]&&Object.keys(t[":@"]).length>0?this.child.push(((r={})[t.tagname]=t.child,r[":@"]=t[":@"],r)):this.child.push(((n={})[t.tagname]=t.child,n)),void 0!==e&&(this.child[this.child.length-1][l]={startIndex:e})},t.getMetaDataSymbol=function(){return l},t}(),f=function(){function t(t){this.suppressValidationErr=!t,this.options=t}var e=t.prototype;return e.readDocType=function(t,e){var r={};if("O"!==t[e+3]||"C"!==t[e+4]||"T"!==t[e+5]||"Y"!==t[e+6]||"P"!==t[e+7]||"E"!==t[e+8])throw new Error("Invalid Tag instead of DOCTYPE");e+=9;for(var n=1,i=!1,a=!1;e<t.length;e++)if("<"!==t[e]||a)if(">"===t[e]){if(a?"-"===t[e-1]&&"-"===t[e-2]&&(a=!1,n--):n--,0===n)break}else"["===t[e]?i=!0:t[e];else{if(i&&p(t,"!ENTITY",e)){e+=7;var s=void 0,o=void 0,l=this.readEntityExp(t,e+1,this.suppressValidationErr);if(s=l[0],o=l[1],e=l[2],-1===o.indexOf("&")){var u=s.replace(/[.\-+*:]/g,"\\.");r[s]={regx:RegExp("&"+u+";","g"),val:o}}}else if(i&&p(t,"!ELEMENT",e))e+=8,e=this.readElementExp(t,e+1).index;else if(i&&p(t,"!ATTLIST",e))e+=8;else if(i&&p(t,"!NOTATION",e))e+=9,e=this.readNotationExp(t,e+1,this.suppressValidationErr).index;else{if(!p(t,"!--",e))throw new Error("Invalid DOCTYPE");a=!0}n++}if(0!==n)throw new Error("Unclosed DOCTYPE");return{entities:r,i:e}},e.readEntityExp=function(t,e){e=h(t,e);for(var r="";e<t.length&&!/\s/.test(t[e])&&'"'!==t[e]&&"'"!==t[e];)r+=t[e],e++;if(g(r),e=h(t,e),!this.suppressValidationErr){if("SYSTEM"===t.substring(e,e+6).toUpperCase())throw new Error("External entities are not supported");if("%"===t[e])throw new Error("Parameter entities are not supported")}var n,i=this.readIdentifierVal(t,e,"entity");if(e=i[0],n=i[1],!1!==this.options.enabled&&this.options.maxEntitySize&&n.length>this.options.maxEntitySize)throw new Error('Entity "'+r+'" size ('+n.length+") exceeds maximum allowed size ("+this.options.maxEntitySize+")");return[r,n,--e]},e.readNotationExp=function(t,e){e=h(t,e);for(var r="";e<t.length&&!/\s/.test(t[e]);)r+=t[e],e++;!this.suppressValidationErr&&g(r),e=h(t,e);var n=t.substring(e,e+6).toUpperCase();if(!this.suppressValidationErr&&"SYSTEM"!==n&&"PUBLIC"!==n)throw new Error('Expected SYSTEM or PUBLIC, found "'+n+'"');e+=n.length,e=h(t,e);var i=null,a=null;if("PUBLIC"===n){var s=this.readIdentifierVal(t,e,"publicIdentifier");if(e=s[0],i=s[1],'"'===t[e=h(t,e)]||"'"===t[e]){var o=this.readIdentifierVal(t,e,"systemIdentifier");e=o[0],a=o[1]}}else if("SYSTEM"===n){var l=this.readIdentifierVal(t,e,"systemIdentifier");if(e=l[0],a=l[1],!this.suppressValidationErr&&!a)throw new Error("Missing mandatory system identifier for SYSTEM notation")}return{notationName:r,publicIdentifier:i,systemIdentifier:a,index:--e}},e.readIdentifierVal=function(t,e,r){var n="",i=t[e];if('"'!==i&&"'"!==i)throw new Error('Expected quoted string, found "'+i+'"');for(e++;e<t.length&&t[e]!==i;)n+=t[e],e++;if(t[e]!==i)throw new Error("Unterminated "+r+" value");return[++e,n]},e.readElementExp=function(t,e){e=h(t,e);for(var r="";e<t.length&&!/\s/.test(t[e]);)r+=t[e],e++;if(!this.suppressValidationErr&&!u(r))throw new Error('Invalid element name: "'+r+'"');var n="";if("E"===t[e=h(t,e)]&&p(t,"MPTY",e))e+=4;else if("A"===t[e]&&p(t,"NY",e))e+=2;else if("("===t[e]){for(e++;e<t.length&&")"!==t[e];)n+=t[e],e++;if(")"!==t[e])throw new Error("Unterminated content model")}else if(!this.suppressValidationErr)throw new Error('Invalid Element Expression, found "'+t[e]+'"');return{elementName:r,contentModel:n.trim(),index:e}},e.readAttlistExp=function(t,e){e=h(t,e);for(var r="";e<t.length&&!/\s/.test(t[e]);)r+=t[e],e++;g(r),e=h(t,e);for(var n="";e<t.length&&!/\s/.test(t[e]);)n+=t[e],e++;if(!g(n))throw new Error('Invalid attribute name: "'+n+'"');e=h(t,e);var i="";if("NOTATION"===t.substring(e,e+8).toUpperCase()){if(i="NOTATION","("!==t[e=h(t,e+=8)])throw new Error("Expected '(', found \""+t[e]+'"');e++;for(var a=[];e<t.length&&")"!==t[e];){for(var s="";e<t.length&&"|"!==t[e]&&")"!==t[e];)s+=t[e],e++;if(!g(s=s.trim()))throw new Error('Invalid notation name: "'+s+'"');a.push(s),"|"===t[e]&&(e++,e=h(t,e))}if(")"!==t[e])throw new Error("Unterminated list of notations");e++,i+=" ("+a.join("|")+")"}else{for(;e<t.length&&!/\s/.test(t[e]);)i+=t[e],e++;if(!this.suppressValidationErr&&!["CDATA","ID","IDREF","IDREFS","ENTITY","ENTITIES","NMTOKEN","NMTOKENS"].includes(i.toUpperCase()))throw new Error('Invalid attribute type: "'+i+'"')}e=h(t,e);var o="";if("#REQUIRED"===t.substring(e,e+8).toUpperCase())o="#REQUIRED",e+=8;else if("#IMPLIED"===t.substring(e,e+7).toUpperCase())o="#IMPLIED",e+=7;else{var l=this.readIdentifierVal(t,e,"ATTLIST");e=l[0],o=l[1]}return{elementName:r,attributeName:n,attributeType:i,defaultValue:o,index:e}},t}(),h=function(t,e){for(;e<t.length&&/\s/.test(t[e]);)e++;return e};function p(t,e,r){for(var n=0;n<e.length;n++)if(e[n]!==t[r+n+1])return!1;return!0}function g(t){if(u(t))return t;throw new Error("Invalid entity name "+t)}const c=/^[-+]?0x[a-fA-F0-9]+$/,v=/^([\-\+])?(0*)([0-9]*(\.[0-9]*)?)$/,x={hex:!0,leadingZeros:!0,decimalPoint:".",eNotation:!0};const m=/^([-+])?(0*)(\d*(\.\d*)?[eE][-\+]?\d+)$/;function E(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}var b=function(t){var e;if(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:"₹"},num_dec:{regex:/&#([0-9]{1,7});/g,val:function(t,e){return _(e,10,"&#")}},num_hex:{regex:/&#x([0-9a-fA-F]{1,6});/g,val:function(t,e){return _(e,16,"&#x")}}},this.addExternalEntities=N,this.parseXml=S,this.parseTextData=y,this.resolveNameSpace=T,this.buildAttributesMap=I,this.isItStopNode=C,this.replaceEntitiesValue=A,this.readStopNodeData=M,this.saveTextToParentTag=P,this.addChild=O,this.ignoreAttributesFn="function"==typeof(e=this.options.ignoreAttributes)?e:Array.isArray(e)?function(t){for(var r,n=function(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(r)return(r=r.call(t)).next.bind(r);if(Array.isArray(t)||(r=function(t,e){if(t){if("string"==typeof t)return E(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?E(t,e):void 0}}(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0;return function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(e);!(r=n()).done;){var i=r.value;if("string"==typeof i&&t===i)return!0;if(i instanceof RegExp&&i.test(t))return!0}}:function(){return!1},this.entityExpansionCount=0,this.currentExpandedLength=0,this.options.stopNodes&&this.options.stopNodes.length>0){this.stopNodesExact=new Set,this.stopNodesWildcard=new Set;for(var r=0;r<this.options.stopNodes.length;r++){var n=this.options.stopNodes[r];"string"==typeof n&&(n.startsWith("*.")?this.stopNodesWildcard.add(n.substring(2)):this.stopNodesExact.add(n))}}};function N(t){for(var e=Object.keys(t),r=0;r<e.length;r++){var n=e[r],i=n.replace(/[.\-+*:]/g,"\\.");this.lastEntities[n]={regex:new RegExp("&"+i+";","g"),val:t[n]}}}function y(t,e,r,n,i,a,s){if(void 0!==t&&(this.options.trimValues&&!n&&(t=t.trim()),t.length>0)){s||(t=this.replaceEntitiesValue(t,e,r));var o=this.options.tagValueProcessor(e,t,r,i,a);return null==o?t:typeof o!=typeof t||o!==t?o:this.options.trimValues||t.trim()===t?V(t,this.options.parseTagValue,this.options.numberParseOptions):t}}function T(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}var w=new RegExp("([^\\s=]+)\\s*(=\\s*(['\"])([\\s\\S]*?)\\3)?","gm");function I(t,e,r){if(!0!==this.options.ignoreAttributes&&"string"==typeof t){for(var n=o(t,w),i=n.length,a={},s=0;s<i;s++){var l=this.resolveNameSpace(n[s][1]);if(!this.ignoreAttributesFn(l,e)){var u=n[s][4],d=this.options.attributeNamePrefix+l;if(l.length)if(this.options.transformAttributeName&&(d=this.options.transformAttributeName(d)),"__proto__"===d&&(d="#__proto__"),void 0!==u){this.options.trimValues&&(u=u.trim()),u=this.replaceEntitiesValue(u,r,e);var f=this.options.attributeValueProcessor(l,u,e);a[d]=null==f?u:typeof f!=typeof u||f!==u?f:V(u,this.options.parseAttributeValue,this.options.numberParseOptions)}else this.options.allowBooleanAttributes&&(a[d]=!0)}}if(!Object.keys(a).length)return;if(this.options.attributesGroupName){var h={};return h[this.options.attributesGroupName]=a,h}return a}}var S=function(t){t=t.replace(/\r\n?/g,"\n");var e=new d("!xml"),r=e,n="",i="";this.entityExpansionCount=0,this.currentExpandedLength=0;for(var a=new f(this.options.processEntities),s=0;s<t.length;s++)if("<"===t[s])if("/"===t[s+1]){var o=D(t,">",s,"Closing Tag is not closed."),l=t.substring(s+2,o).trim();if(this.options.removeNSPrefix){var u=l.indexOf(":");-1!==u&&(l=l.substr(u+1))}this.options.transformTagName&&(l=this.options.transformTagName(l)),r&&(n=this.saveTextToParentTag(n,r,i));var h=i.substring(i.lastIndexOf(".")+1);if(l&&-1!==this.options.unpairedTags.indexOf(l))throw new Error("Unpaired tag can not be used as closing tag: </"+l+">");var p=0;h&&-1!==this.options.unpairedTags.indexOf(h)?(p=i.lastIndexOf(".",i.lastIndexOf(".")-1),this.tagsNodeStack.pop()):p=i.lastIndexOf("."),i=i.substring(0,p),r=this.tagsNodeStack.pop(),n="",s=o}else if("?"===t[s+1]){var g=F(t,s,!1,"?>");if(!g)throw new Error("Pi Tag is not closed.");if(n=this.saveTextToParentTag(n,r,i),this.options.ignoreDeclaration&&"?xml"===g.tagName||this.options.ignorePiTags);else{var c=new d(g.tagName);c.add(this.options.textNodeName,""),g.tagName!==g.tagExp&&g.attrExpPresent&&(c[":@"]=this.buildAttributesMap(g.tagExp,i,g.tagName)),this.addChild(r,c,i,s)}s=g.closeIndex+1}else if("!--"===t.substr(s+1,3)){var v=D(t,"--\x3e",s+4,"Comment is not closed.");if(this.options.commentPropName){var x,m=t.substring(s+4,v-2);n=this.saveTextToParentTag(n,r,i),r.add(this.options.commentPropName,[(x={},x[this.options.textNodeName]=m,x)])}s=v}else if("!D"===t.substr(s+1,2)){var E=a.readDocType(t,s);this.docTypeEntities=E.entities,s=E.i}else if("!["===t.substr(s+1,2)){var b=D(t,"]]>",s,"CDATA is not closed.")-2,N=t.substring(s+9,b);n=this.saveTextToParentTag(n,r,i);var y,T=this.parseTextData(N,r.tagname,i,!0,!1,!0,!0);null==T&&(T=""),this.options.cdataPropName?r.add(this.options.cdataPropName,[(y={},y[this.options.textNodeName]=N,y)]):r.add(this.options.textNodeName,T),s=b+2}else{var w=F(t,s,this.options.removeNSPrefix),I=w.tagName,S=w.rawTagName,O=w.tagExp,A=w.attrExpPresent,P=w.closeIndex;if(this.options.transformTagName){var C=this.options.transformTagName(I);O===I&&(O=C),I=C}r&&n&&"!xml"!==r.tagname&&(n=this.saveTextToParentTag(n,r,i,!1));var M=r;M&&-1!==this.options.unpairedTags.indexOf(M.tagname)&&(r=this.tagsNodeStack.pop(),i=i.substring(0,i.lastIndexOf("."))),I!==e.tagname&&(i+=i?"."+I:I);var V=s;if(this.isItStopNode(this.stopNodesExact,this.stopNodesWildcard,i,I)){var _="";if(O.length>0&&O.lastIndexOf("/")===O.length-1)"/"===I[I.length-1]?(I=I.substr(0,I.length-1),i=i.substr(0,i.length-1),O=I):O=O.substr(0,O.length-1),s=w.closeIndex;else if(-1!==this.options.unpairedTags.indexOf(I))s=w.closeIndex;else{var k=this.readStopNodeData(t,S,P+1);if(!k)throw new Error("Unexpected end of "+S);s=k.i,_=k.tagContent}var L=new d(I);I!==O&&A&&(L[":@"]=this.buildAttributesMap(O,i,I)),_&&(_=this.parseTextData(_,I,i,!0,A,!0,!0)),i=i.substr(0,i.lastIndexOf(".")),L.add(this.options.textNodeName,_),this.addChild(r,L,i,V)}else{if(O.length>0&&O.lastIndexOf("/")===O.length-1){if("/"===I[I.length-1]?(I=I.substr(0,I.length-1),i=i.substr(0,i.length-1),O=I):O=O.substr(0,O.length-1),this.options.transformTagName){var j=this.options.transformTagName(I);O===I&&(O=j),I=j}var U=new d(I);I!==O&&A&&(U[":@"]=this.buildAttributesMap(O,i,I)),this.addChild(r,U,i,V),i=i.substr(0,i.lastIndexOf("."))}else{var Y=new d(I);this.tagsNodeStack.push(r),I!==O&&A&&(Y[":@"]=this.buildAttributesMap(O,i,I)),this.addChild(r,Y,i,V),r=Y}n="",s=P}}else n+=t[s];return e.child};function O(t,e,r,n){this.options.captureMetaData||(n=void 0);var i=this.options.updateTag(e.tagname,r,e[":@"]);!1===i||("string"==typeof i?(e.tagname=i,t.addChild(e,n)):t.addChild(e,n))}var A=function(t,e,r){if(-1===t.indexOf("&"))return t;var n=this.options.processEntities;if(!n.enabled)return t;if(n.allowedTags&&!n.allowedTags.includes(e))return t;if(n.tagFilter&&!n.tagFilter(e,r))return t;for(var i in this.docTypeEntities){var a=this.docTypeEntities[i],s=t.match(a.regx);if(s){if(this.entityExpansionCount+=s.length,n.maxTotalExpansions&&this.entityExpansionCount>n.maxTotalExpansions)throw new Error("Entity expansion limit exceeded: "+this.entityExpansionCount+" > "+n.maxTotalExpansions);var o=t.length;if(t=t.replace(a.regx,a.val),n.maxExpandedLength&&(this.currentExpandedLength+=t.length-o,this.currentExpandedLength>n.maxExpandedLength))throw new Error("Total expanded content size exceeded: "+this.currentExpandedLength+" > "+n.maxExpandedLength)}}if(-1===t.indexOf("&"))return t;for(var l in this.lastEntities){var u=this.lastEntities[l];t=t.replace(u.regex,u.val)}if(-1===t.indexOf("&"))return t;if(this.options.htmlEntities)for(var d in this.htmlEntities){var f=this.htmlEntities[d];t=t.replace(f.regex,f.val)}return t.replace(this.ampEntity.regex,this.ampEntity.val)};function P(t,e,r,n){return t&&(void 0===n&&(n=0===e.child.length),void 0!==(t=this.parseTextData(t,e.tagname,r,!1,!!e[":@"]&&0!==Object.keys(e[":@"]).length,n))&&""!==t&&e.add(this.options.textNodeName,t),t=""),t}function C(t,e,r,n){return!(!e||!e.has(n))||!(!t||!t.has(r))}function D(t,e,r,n){var i=t.indexOf(e,r);if(-1===i)throw new Error(n);return i+e.length-1}function F(t,e,r,n){void 0===n&&(n=">");var i=function(t,e,r){var n;void 0===r&&(r=">");for(var i="",a=e;a<t.length;a++){var s=t[a];if(n)s===n&&(n="");else if('"'===s||"'"===s)n=s;else if(s===r[0]){if(!r[1])return{data:i,index:a};if(t[a+1]===r[1])return{data:i,index:a}}else"\t"===s&&(s=" ");i+=s}}(t,e+1,n);if(i){var a=i.data,s=i.index,o=a.search(/\s/),l=a,u=!0;-1!==o&&(l=a.substring(0,o),a=a.substring(o+1).trimStart());var d=l;if(r){var f=l.indexOf(":");-1!==f&&(u=(l=l.substr(f+1))!==i.data.substr(f+1))}return{tagName:l,tagExp:a,closeIndex:s,attrExpPresent:u,rawTagName:d}}}function M(t,e,r){for(var n=r,i=1;r<t.length;r++)if("<"===t[r])if("/"===t[r+1]){var a=D(t,">",r,e+" is not closed");if(t.substring(r+2,a).trim()===e&&0==--i)return{tagContent:t.substring(n,r),i:a};r=a}else if("?"===t[r+1])r=D(t,"?>",r+1,"StopNode is not closed.");else if("!--"===t.substr(r+1,3))r=D(t,"--\x3e",r+3,"StopNode is not closed.");else if("!["===t.substr(r+1,2))r=D(t,"]]>",r,"StopNode is not closed.")-2;else{var s=F(t,r,">");s&&((s&&s.tagName)===e&&"/"!==s.tagExp[s.tagExp.length-1]&&i++,r=s.closeIndex)}}function V(t,e,r){if(e&&"string"==typeof t){var n=t.trim();return"true"===n||"false"!==n&&function(t,e={}){if(e=Object.assign({},x,e),!t||"string"!=typeof t)return t;let r=t.trim();if(void 0!==e.skipLike&&e.skipLike.test(r))return t;if("0"===t)return 0;if(e.hex&&c.test(r))return function(t){if(parseInt)return parseInt(t,16);if(Number.parseInt)return Number.parseInt(t,16);if(window&&window.parseInt)return window.parseInt(t,16);throw new Error("parseInt, Number.parseInt, window.parseInt are not supported")}(r);if(-1!==r.search(/.+[eE].+/))return function(t,e,r){if(!r.eNotation)return t;const n=e.match(m);if(n){let i=n[1]||"";const a=-1===n[3].indexOf("e")?"E":"e",s=n[2],o=i?t[s.length+1]===a:t[s.length]===a;return s.length>1&&o?t:1!==s.length||!n[3].startsWith(`.${a}`)&&n[3][0]!==a?r.leadingZeros&&!o?(e=(n[1]||"")+n[3],Number(e)):t:Number(e)}return t}(t,r,e);{const i=v.exec(r);if(i){const a=i[1]||"",s=i[2];let o=(n=i[3])&&-1!==n.indexOf(".")?("."===(n=n.replace(/0+$/,""))?n="0":"."===n[0]?n="0"+n:"."===n[n.length-1]&&(n=n.substring(0,n.length-1)),n):n;const l=a?"."===t[s.length+1]:"."===t[s.length];if(!e.leadingZeros&&(s.length>1||1===s.length&&!l))return t;{const n=Number(r),i=String(n);if(0===n||-0===n)return n;if(-1!==i.search(/[eE]/))return e.eNotation?n:t;if(-1!==r.indexOf("."))return"0"===i||i===o||i===`${a}${o}`?n:t;let l=s?o:r;return s?l===i||a+l===i?n:t:l===i||l===a+i?n:t}}return t}var n}(t,r)}return void 0!==t?t:""}function _(t,e,r){var n=Number.parseInt(t,e);return n>=0&&n<=1114111?String.fromCodePoint(n):r+t+";"}var k=d.getMetaDataSymbol();function L(t,e){return j(t,e)}function j(t,e,r){for(var n,i={},a=0;a<t.length;a++){var s,o=t[a],l=U(o);if(s=void 0===r?l:r+"."+l,l===e.textNodeName)void 0===n?n=o[l]:n+=""+o[l];else{if(void 0===l)continue;if(o[l]){var u=j(o[l],e,s),d=R(u,e);void 0!==o[k]&&(u[k]=o[k]),o[":@"]?Y(u,o[":@"],s,e):1!==Object.keys(u).length||void 0===u[e.textNodeName]||e.alwaysCreateTextNode?0===Object.keys(u).length&&(e.alwaysCreateTextNode?u[e.textNodeName]="":u=""):u=u[e.textNodeName],void 0!==i[l]&&i.hasOwnProperty(l)?(Array.isArray(i[l])||(i[l]=[i[l]]),i[l].push(u)):e.isArray(l,s,d)?i[l]=[u]:i[l]=u}}}return"string"==typeof n?n.length>0&&(i[e.textNodeName]=n):void 0!==n&&(i[e.textNodeName]=n),i}function U(t){for(var e=Object.keys(t),r=0;r<e.length;r++){var n=e[r];if(":@"!==n)return n}}function Y(t,e,r,n){if(e)for(var i=Object.keys(e),a=i.length,s=0;s<a;s++){var o=i[s];n.isArray(o,r+"."+o,!0,!0)?t[o]=[e[o]]:t[o]=e[o]}}function R(t,e){var r=e.textNodeName,n=Object.keys(t).length;return 0===n||!(1!==n||!t[r]&&"boolean"!=typeof t[r]&&0!==t[r])}var X={allowBooleanAttributes:!1,unpairedTags:[]};function z(t){return" "===t||"\t"===t||"\n"===t||"\r"===t}function B(t,e){for(var r=e;e<t.length;e++)if("?"!=t[e]&&" "!=t[e]);else{var n=t.substr(r,e-r);if(e>5&&"xml"===n)return K("InvalidXml","XML declaration allowed only at the start of the document.",J(t,e));if("?"==t[e]&&">"==t[e+1]){e++;break}}return e}function $(t,e){if(t.length>e+5&&"-"===t[e+1]&&"-"===t[e+2]){for(e+=3;e<t.length;e++)if("-"===t[e]&&"-"===t[e+1]&&">"===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.length;e++)if("<"===t[e])r++;else if(">"===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.length;e++)if("]"===t[e]&&"]"===t[e+1]&&">"===t[e+2]){e+=2;break}return e}function W(t,e){for(var r="",n="",i=!1;e<t.length;e++){if('"'===t[e]||"'"===t[e])""===n?n=t[e]:n!==t[e]||(n="");else if(">"===t[e]&&""===n){i=!0;break}r+=t[e]}return""===n&&{value:r,index:e,tagClosed:i}}var Z=new RegExp("(\\s*)([^\\s=]+)(\\s*=)?(\\s*(['\"])(([\\s\\S])*?)\\5)?","g");function q(t,e){for(var r=o(t,Z),n={},i=0;i<r.length;i++){if(0===r[i][1].length)return K("InvalidAttr","Attribute '"+r[i][2]+"' has no space in starting.",H(r[i]));if(void 0!==r[i][3]&&void 0===r[i][4])return K("InvalidAttr","Attribute '"+r[i][2]+"' is without value.",H(r[i]));if(void 0===r[i][3]&&!e.allowBooleanAttributes)return K("InvalidAttr","boolean attribute '"+r[i][2]+"' is not allowed.",H(r[i]));var a=r[i][2];if(!Q(a))return K("InvalidAttr","Attribute '"+a+"' is an invalid name.",H(r[i]));if(n.hasOwnProperty(a))return K("InvalidAttr","Attribute '"+a+"' is repeated.",H(r[i]));n[a]=1}return!0}function G(t,e){if(";"===t[++e])return-1;if("#"===t[e])return function(t,e){var r=/\d/;for("x"===t[e]&&(e++,r=/[\da-fA-F]/);e<t.length;e++){if(";"===t[e])return e;if(!t[e].match(r))break}return-1}(t,++e);for(var r=0;e<t.length;e++,r++)if(!(t[e].match(/\w/)&&r<20)){if(";"===t[e])break;return-1}return e}function K(t,e,r){return{err:{code:t,msg:e,line:r.line||r,col:r.col}}}function Q(t){return u(t)}function J(t,e){var r=t.substring(0,e).split(/\r?\n/);return{line:r.length,col:r[r.length-1].length+1}}function H(t){return t.startIndex+t[1].length}var tt=function(){function t(t){this.externalEntities={},this.options=i(t)}var e=t.prototype;return e.parse=function(t,e){if("string"!=typeof t&&t.toString)t=t.toString();else if("string"!=typeof t)throw new Error("XML data is accepted in String or Bytes[] form.");if(e){!0===e&&(e={});var r=function(t,e){e=Object.assign({},X,e);var r=[],n=!1,i=!1;"\ufeff"===t[0]&&(t=t.substr(1));for(var a=0;a<t.length;a++)if("<"===t[a]&&"?"===t[a+1]){if((a=B(t,a+=2)).err)return a}else{if("<"!==t[a]){if(z(t[a]))continue;return K("InvalidChar","char '"+t[a]+"' is not expected.",J(t,a))}var s=a;if("!"===t[++a]){a=$(t,a);continue}var o=!1;"/"===t[a]&&(o=!0,a++);for(var l="";a<t.length&&">"!==t[a]&&" "!==t[a]&&"\t"!==t[a]&&"\n"!==t[a]&&"\r"!==t[a];a++)l+=t[a];if("/"===(l=l.trim())[l.length-1]&&(l=l.substring(0,l.length-1),a--),!u(l))return K("InvalidTag",0===l.trim().length?"Invalid space after '<'.":"Tag '"+l+"' is an invalid name.",J(t,a));var d=W(t,a);if(!1===d)return K("InvalidAttr","Attributes for '"+l+"' have open quote.",J(t,a));var f=d.value;if(a=d.index,"/"===f[f.length-1]){var h=a-f.length,p=q(f=f.substring(0,f.length-1),e);if(!0!==p)return K(p.err.code,p.err.msg,J(t,h+p.err.line));n=!0}else if(o){if(!d.tagClosed)return K("InvalidTag","Closing tag '"+l+"' doesn't have proper closing.",J(t,a));if(f.trim().length>0)return K("InvalidTag","Closing tag '"+l+"' can't have attributes or invalid starting.",J(t,s));if(0===r.length)return K("InvalidTag","Closing tag '"+l+"' has not been opened.",J(t,s));var g=r.pop();if(l!==g.tagName){var c=J(t,g.tagStartPos);return K("InvalidTag","Expected closing tag '"+g.tagName+"' (opened in line "+c.line+", col "+c.col+") instead of closing tag '"+l+"'.",J(t,s))}0==r.length&&(i=!0)}else{var v=q(f,e);if(!0!==v)return K(v.err.code,v.err.msg,J(t,a-f.length+v.err.line));if(!0===i)return K("InvalidXml","Multiple possible root nodes found.",J(t,a));-1!==e.unpairedTags.indexOf(l)||r.push({tagName:l,tagStartPos:s}),n=!0}for(a++;a<t.length;a++)if("<"===t[a]){if("!"===t[a+1]){a=$(t,++a);continue}if("?"!==t[a+1])break;if((a=B(t,++a)).err)return a}else if("&"===t[a]){var x=G(t,a);if(-1==x)return K("InvalidChar","char '&' is not expected.",J(t,a));a=x}else if(!0===i&&!z(t[a]))return K("InvalidXml","Extra text at the end",J(t,a));"<"===t[a]&&a--}return n?1==r.length?K("InvalidTag","Unclosed tag '"+r[0].tagName+"'.",J(t,r[0].tagStartPos)):!(r.length>0)||K("InvalidXml","Invalid '"+JSON.stringify(r.map((function(t){return t.tagName})),null,4).replace(/\r?\n/g,"")+"' found.",{line:1,col:1}):K("InvalidXml","Start tag expected.",1)}(t,e);if(!0!==r)throw Error(r.err.msg+":"+r.err.line+":"+r.err.col)}var n=new b(this.options);n.addExternalEntities(this.externalEntities);var i=n.parseXml(t);return this.options.preserveOrder||void 0===i?i:L(i,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.getMetaDataSymbol=function(){return d.getMetaDataSymbol()},t}();return e})())); | ||
| //# sourceMappingURL=fxparser.min.js.map |
+3
-3
| { | ||
| "name": "fast-xml-parser", | ||
| "version": "5.3.5", | ||
| "version": "5.3.6", | ||
| "description": "Validate XML, Parse XML, Build XML without C/C++ based libraries", | ||
@@ -36,3 +36,3 @@ "main": "./lib/fxp.cjs", | ||
| "bin": { | ||
| "fxparser": "./src/cli/cli.js" | ||
| "fxparser": "src/cli/cli.js" | ||
| }, | ||
@@ -46,3 +46,3 @@ "files": [ | ||
| "type": "git", | ||
| "url": "https://github.com/NaturalIntelligence/fast-xml-parser" | ||
| "url": "git+https://github.com/NaturalIntelligence/fast-xml-parser.git" | ||
| }, | ||
@@ -49,0 +49,0 @@ "keywords": [ |
+74
-12
@@ -0,1 +1,57 @@ | ||
| export type ProcessEntitiesOptions = { | ||
| /** | ||
| * Whether to enable entity processing | ||
| * | ||
| * Defaults to `true` | ||
| */ | ||
| enabled?: boolean; | ||
| /** | ||
| * Maximum size in characters for a single entity definition | ||
| * | ||
| * Defaults to `10000` | ||
| */ | ||
| maxEntitySize?: number; | ||
| /** | ||
| * Maximum depth for nested entity references (reserved for future use) | ||
| * | ||
| * Defaults to `10` | ||
| */ | ||
| maxExpansionDepth?: number; | ||
| /** | ||
| * Maximum total number of entity expansions allowed | ||
| * | ||
| * Defaults to `1000` | ||
| */ | ||
| maxTotalExpansions?: number; | ||
| /** | ||
| * Maximum total expanded content length in characters | ||
| * | ||
| * Defaults to `100000` | ||
| */ | ||
| maxExpandedLength?: number; | ||
| /** | ||
| * Array of tag names where entity replacement is allowed. | ||
| * If null, entities are replaced in all tags. | ||
| * | ||
| * Defaults to `null` | ||
| */ | ||
| allowedTags?: string[] | null; | ||
| /** | ||
| * Custom filter function to determine if entities should be replaced in a tag | ||
| * | ||
| * @param tagName - The name of the current tag | ||
| * @param jPath - The jPath of the current tag | ||
| * @returns `true` to allow entity replacement, `false` to skip | ||
| * | ||
| * Defaults to `null` | ||
| */ | ||
| tagFilter?: ((tagName: string, jPath: string) => boolean) | null; | ||
| }; | ||
| export type X2jOptions = { | ||
@@ -13,3 +69,3 @@ /** | ||
| * Defaults to '@_' | ||
| */ | ||
| */ | ||
| attributeNamePrefix?: string; | ||
@@ -165,5 +221,11 @@ | ||
| * | ||
| * When `true` - enables entity processing with default limits | ||
| * | ||
| * When `false` - disables all entity processing | ||
| * | ||
| * When `ProcessEntitiesOptions` - enables entity processing with custom configuration | ||
| * | ||
| * Defaults to `true` | ||
| */ | ||
| processEntities?: boolean; | ||
| processEntities?: boolean | ProcessEntitiesOptions; | ||
@@ -214,3 +276,3 @@ /** | ||
| */ | ||
| updateTag?: (tagName: string, jPath: string, attrs: {[k: string]: string}) => string | boolean; | ||
| updateTag?: (tagName: string, jPath: string, attrs: { [k: string]: string }) => string | boolean; | ||
@@ -238,3 +300,3 @@ /** | ||
| allowBooleanAttributes?: boolean; | ||
| /** | ||
@@ -253,3 +315,3 @@ * List of tags without closing tags | ||
| * Defaults to '@_' | ||
| */ | ||
| */ | ||
| attributeNamePrefix?: string; | ||
@@ -401,10 +463,10 @@ | ||
| type ESchema = string | object | Array<string|object>; | ||
| type ESchema = string | object | Array<string | object>; | ||
| export type ValidationError = { | ||
| err: { | ||
| err: { | ||
| code: string; | ||
| msg: string, | ||
| line: number, | ||
| col: number | ||
| col: number | ||
| }; | ||
@@ -433,7 +495,7 @@ }; | ||
| */ | ||
| static getMetaDataSymbol() : Symbol; | ||
| static getMetaDataSymbol(): Symbol; | ||
| } | ||
| export class XMLValidator{ | ||
| static validate( xmlData: string, options?: validationOptions): true | ValidationError; | ||
| export class XMLValidator { | ||
| static validate(xmlData: string, options?: validationOptions): true | ValidationError; | ||
| } | ||
@@ -452,2 +514,2 @@ export class XMLBuilder { | ||
| startIndex?: number; | ||
| } | ||
| } |
@@ -1,12 +0,13 @@ | ||
| import {isName} from '../util.js'; | ||
| import { isName } from '../util.js'; | ||
| export default class DocTypeReader{ | ||
| constructor(processEntities){ | ||
| this.suppressValidationErr = !processEntities; | ||
| export default class DocTypeReader { | ||
| constructor(options) { | ||
| this.suppressValidationErr = !options; | ||
| this.options = options; | ||
| } | ||
| readDocType(xmlData, i){ | ||
| readDocType(xmlData, i) { | ||
| const entities = {}; | ||
| if( xmlData[i + 3] === 'O' && | ||
| if (xmlData[i + 3] === 'O' && | ||
| xmlData[i + 4] === 'C' && | ||
@@ -16,18 +17,17 @@ xmlData[i + 5] === 'T' && | ||
| xmlData[i + 7] === 'P' && | ||
| xmlData[i + 8] === 'E') | ||
| { | ||
| i = i+9; | ||
| xmlData[i + 8] === 'E') { | ||
| i = i + 9; | ||
| let angleBracketsCount = 1; | ||
| let hasBody = false, comment = false; | ||
| let exp = ""; | ||
| for(;i<xmlData.length;i++){ | ||
| for (; i < xmlData.length; i++) { | ||
| if (xmlData[i] === '<' && !comment) { //Determine the tag type | ||
| if( hasBody && hasSeq(xmlData, "!ENTITY",i)){ | ||
| i += 7; | ||
| if (hasBody && hasSeq(xmlData, "!ENTITY", i)) { | ||
| i += 7; | ||
| let entityName, val; | ||
| [entityName, val,i] = this.readEntityExp(xmlData,i+1,this.suppressValidationErr); | ||
| if(val.indexOf("&") === -1){ //Parameter entities are not supported | ||
| [entityName, val, i] = this.readEntityExp(xmlData, i + 1, this.suppressValidationErr); | ||
| if (val.indexOf("&") === -1) { //Parameter entities are not supported | ||
| const escaped = entityName.replace(/[.\-+*:]/g, '\\.'); | ||
| entities[ entityName ] = { | ||
| regx : RegExp( `&${escaped};`,"g"), | ||
| entities[entityName] = { | ||
| regx: RegExp(`&${escaped};`, "g"), | ||
| val: val | ||
@@ -37,15 +37,15 @@ }; | ||
| } | ||
| else if( hasBody && hasSeq(xmlData, "!ELEMENT",i)) { | ||
| else if (hasBody && hasSeq(xmlData, "!ELEMENT", i)) { | ||
| i += 8;//Not supported | ||
| const {index} = this.readElementExp(xmlData,i+1); | ||
| const { index } = this.readElementExp(xmlData, i + 1); | ||
| i = index; | ||
| }else if( hasBody && hasSeq(xmlData, "!ATTLIST",i)){ | ||
| } else if (hasBody && hasSeq(xmlData, "!ATTLIST", i)) { | ||
| i += 8;//Not supported | ||
| // const {index} = this.readAttlistExp(xmlData,i+1); | ||
| // i = index; | ||
| }else if( hasBody && hasSeq(xmlData, "!NOTATION",i)) { | ||
| } else if (hasBody && hasSeq(xmlData, "!NOTATION", i)) { | ||
| i += 9;//Not supported | ||
| const {index} = this.readNotationExp(xmlData,i+1,this.suppressValidationErr); | ||
| const { index } = this.readNotationExp(xmlData, i + 1, this.suppressValidationErr); | ||
| i = index; | ||
| }else if( hasSeq(xmlData, "!--",i) ) comment = true; | ||
| } else if (hasSeq(xmlData, "!--", i)) comment = true; | ||
| else throw new Error(`Invalid DOCTYPE`); | ||
@@ -56,28 +56,28 @@ | ||
| } else if (xmlData[i] === '>') { //Read tag content | ||
| if(comment){ | ||
| if( xmlData[i - 1] === "-" && xmlData[i - 2] === "-"){ | ||
| if (comment) { | ||
| if (xmlData[i - 1] === "-" && xmlData[i - 2] === "-") { | ||
| comment = false; | ||
| angleBracketsCount--; | ||
| } | ||
| }else{ | ||
| } else { | ||
| angleBracketsCount--; | ||
| } | ||
| if (angleBracketsCount === 0) { | ||
| break; | ||
| break; | ||
| } | ||
| }else if( xmlData[i] === '['){ | ||
| } else if (xmlData[i] === '[') { | ||
| hasBody = true; | ||
| }else{ | ||
| } else { | ||
| exp += xmlData[i]; | ||
| } | ||
| } | ||
| if(angleBracketsCount !== 0){ | ||
| if (angleBracketsCount !== 0) { | ||
| throw new Error(`Unclosed DOCTYPE`); | ||
| } | ||
| }else{ | ||
| } else { | ||
| throw new Error(`Invalid Tag instead of DOCTYPE`); | ||
| } | ||
| return {entities, i}; | ||
| return { entities, i }; | ||
| } | ||
| readEntityExp(xmlData, i) { | ||
| readEntityExp(xmlData, i) { | ||
| //External entities are not supported | ||
@@ -107,6 +107,6 @@ // <!ENTITY ext SYSTEM "http://normal-website.com" > | ||
| // Check for unsupported constructs (external entities or parameter entities) | ||
| if(!this.suppressValidationErr){ | ||
| if (!this.suppressValidationErr) { | ||
| if (xmlData.substring(i, i + 6).toUpperCase() === "SYSTEM") { | ||
| throw new Error("External entities are not supported"); | ||
| }else if (xmlData[i] === "%") { | ||
| } else if (xmlData[i] === "%") { | ||
| throw new Error("Parameter entities are not supported"); | ||
@@ -119,4 +119,14 @@ } | ||
| [i, entityValue] = this.readIdentifierVal(xmlData, i, "entity"); | ||
| // Validate entity size | ||
| if (this.options.enabled !== false && | ||
| this.options.maxEntitySize && | ||
| entityValue.length > this.options.maxEntitySize) { | ||
| throw new Error( | ||
| `Entity "${entityName}" size (${entityValue.length}) exceeds maximum allowed size (${this.options.maxEntitySize})` | ||
| ); | ||
| } | ||
| i--; | ||
| return [entityName, entityValue, i ]; | ||
| return [entityName, entityValue, i]; | ||
| } | ||
@@ -154,3 +164,3 @@ | ||
| if (identifierType === "PUBLIC") { | ||
| [i, publicIdentifier ] = this.readIdentifierVal(xmlData, i, "publicIdentifier"); | ||
| [i, publicIdentifier] = this.readIdentifierVal(xmlData, i, "publicIdentifier"); | ||
@@ -162,7 +172,7 @@ // Skip whitespace after public identifier | ||
| if (xmlData[i] === '"' || xmlData[i] === "'") { | ||
| [i, systemIdentifier ] = this.readIdentifierVal(xmlData, i,"systemIdentifier"); | ||
| [i, systemIdentifier] = this.readIdentifierVal(xmlData, i, "systemIdentifier"); | ||
| } | ||
| } else if (identifierType === "SYSTEM") { | ||
| // Read system identifier (mandatory for SYSTEM) | ||
| [i, systemIdentifier ] = this.readIdentifierVal(xmlData, i, "systemIdentifier"); | ||
| [i, systemIdentifier] = this.readIdentifierVal(xmlData, i, "systemIdentifier"); | ||
@@ -173,4 +183,4 @@ if (!this.suppressValidationErr && !systemIdentifier) { | ||
| } | ||
| return {notationName, publicIdentifier, systemIdentifier, index: --i}; | ||
| return { notationName, publicIdentifier, systemIdentifier, index: --i }; | ||
| } | ||
@@ -204,3 +214,3 @@ | ||
| // <!ELEMENT name (content-model)> | ||
| // Skip leading whitespace after <!ELEMENT | ||
@@ -225,4 +235,4 @@ i = skipWhitespace(xmlData, i); | ||
| // Expect '(' to start content model | ||
| if(xmlData[i] === "E" && hasSeq(xmlData, "MPTY",i)) i+=4; | ||
| else if(xmlData[i] === "A" && hasSeq(xmlData, "NY",i)) i+=2; | ||
| if (xmlData[i] === "E" && hasSeq(xmlData, "MPTY", i)) i += 4; | ||
| else if (xmlData[i] === "A" && hasSeq(xmlData, "NY", i)) i += 2; | ||
| else if (xmlData[i] === "(") { | ||
@@ -240,6 +250,6 @@ i++; // Move past '(' | ||
| }else if(!this.suppressValidationErr){ | ||
| } else if (!this.suppressValidationErr) { | ||
| throw new Error(`Invalid Element Expression, found "${xmlData[i]}"`); | ||
| } | ||
| return { | ||
@@ -380,5 +390,5 @@ elementName, | ||
| function hasSeq(data, seq,i){ | ||
| for(let j=0;j<seq.length;j++){ | ||
| if(seq[j]!==data[i+j+1]) return false; | ||
| function hasSeq(data, seq, i) { | ||
| for (let j = 0; j < seq.length; j++) { | ||
| if (seq[j] !== data[i + j + 1]) return false; | ||
| } | ||
@@ -388,7 +398,7 @@ return true; | ||
| function validateEntityName(name){ | ||
| function validateEntityName(name) { | ||
| if (isName(name)) | ||
| return name; | ||
| return name; | ||
| else | ||
| throw new Error(`Invalid entity name ${name}`); | ||
| } | ||
| } |
@@ -1,46 +0,86 @@ | ||
| export const defaultOptions = { | ||
| preserveOrder: false, | ||
| attributeNamePrefix: '@_', | ||
| attributesGroupName: false, | ||
| textNodeName: '#text', | ||
| ignoreAttributes: true, | ||
| removeNSPrefix: false, // remove NS from tag name or attribute name if true | ||
| allowBooleanAttributes: false, //a tag can have attributes without any value | ||
| //ignoreRootElement : false, | ||
| parseTagValue: true, | ||
| parseAttributeValue: false, | ||
| trimValues: true, //Trim string values of tag and attributes | ||
| cdataPropName: false, | ||
| numberParseOptions: { | ||
| hex: true, | ||
| leadingZeros: true, | ||
| eNotation: true | ||
| }, | ||
| tagValueProcessor: function(tagName, val) { | ||
| return val; | ||
| }, | ||
| attributeValueProcessor: function(attrName, val) { | ||
| return val; | ||
| }, | ||
| stopNodes: [], //nested tags will not be parsed even for errors | ||
| alwaysCreateTextNode: false, | ||
| isArray: () => false, | ||
| commentPropName: false, | ||
| unpairedTags: [], | ||
| processEntities: true, | ||
| htmlEntities: false, | ||
| ignoreDeclaration: false, | ||
| ignorePiTags: false, | ||
| transformTagName: false, | ||
| transformAttributeName: false, | ||
| updateTag: function(tagName, jPath, attrs){ | ||
| return tagName | ||
| }, | ||
| // skipEmptyListItem: false | ||
| captureMetaData: false, | ||
| preserveOrder: false, | ||
| attributeNamePrefix: '@_', | ||
| attributesGroupName: false, | ||
| textNodeName: '#text', | ||
| ignoreAttributes: true, | ||
| removeNSPrefix: false, // remove NS from tag name or attribute name if true | ||
| allowBooleanAttributes: false, //a tag can have attributes without any value | ||
| //ignoreRootElement : false, | ||
| parseTagValue: true, | ||
| parseAttributeValue: false, | ||
| trimValues: true, //Trim string values of tag and attributes | ||
| cdataPropName: false, | ||
| numberParseOptions: { | ||
| hex: true, | ||
| leadingZeros: true, | ||
| eNotation: true | ||
| }, | ||
| tagValueProcessor: function (tagName, val) { | ||
| return val; | ||
| }, | ||
| attributeValueProcessor: function (attrName, val) { | ||
| return val; | ||
| }, | ||
| stopNodes: [], //nested tags will not be parsed even for errors | ||
| alwaysCreateTextNode: false, | ||
| isArray: () => false, | ||
| commentPropName: false, | ||
| unpairedTags: [], | ||
| processEntities: true, | ||
| htmlEntities: false, | ||
| ignoreDeclaration: false, | ||
| ignorePiTags: false, | ||
| transformTagName: false, | ||
| transformAttributeName: false, | ||
| updateTag: function (tagName, jPath, attrs) { | ||
| return tagName | ||
| }, | ||
| // skipEmptyListItem: false | ||
| captureMetaData: false, | ||
| }; | ||
| export const buildOptions = function(options) { | ||
| return Object.assign({}, defaultOptions, options); | ||
| }; | ||
| /** | ||
| * Normalizes processEntities option for backward compatibility | ||
| * @param {boolean|object} value | ||
| * @returns {object} Always returns normalized object | ||
| */ | ||
| function normalizeProcessEntities(value) { | ||
| // Boolean backward compatibility | ||
| if (typeof value === 'boolean') { | ||
| return { | ||
| enabled: value, // true or false | ||
| maxEntitySize: 10000, | ||
| maxExpansionDepth: 10, | ||
| maxTotalExpansions: 1000, | ||
| maxExpandedLength: 100000, | ||
| allowedTags: null, | ||
| tagFilter: null | ||
| }; | ||
| } | ||
| // Object config - merge with defaults | ||
| if (typeof value === 'object' && value !== null) { | ||
| return { | ||
| enabled: value.enabled !== false, // default true if not specified | ||
| maxEntitySize: value.maxEntitySize ?? 10000, | ||
| maxExpansionDepth: value.maxExpansionDepth ?? 10, | ||
| maxTotalExpansions: value.maxTotalExpansions ?? 1000, | ||
| maxExpandedLength: value.maxExpandedLength ?? 100000, | ||
| allowedTags: value.allowedTags ?? null, | ||
| tagFilter: value.tagFilter ?? null | ||
| }; | ||
| } | ||
| // Default to enabled with limits | ||
| return normalizeProcessEntities(true); | ||
| } | ||
| export const buildOptions = function (options) { | ||
| const built = Object.assign({}, defaultOptions, options); | ||
| // Always normalize processEntities for backward compatibility and validation | ||
| built.processEntities = normalizeProcessEntities(built.processEntities); | ||
| //console.debug(built.processEntities) | ||
| return built; | ||
| }; |
| 'use strict'; | ||
| ///@ts-check | ||
| import {getAllMatches, isExist} from '../util.js'; | ||
| import { getAllMatches, isExist } from '../util.js'; | ||
| import xmlNode from './xmlNode.js'; | ||
@@ -17,4 +17,4 @@ import DocTypeReader from './DocTypeReader.js'; | ||
| export default class OrderedObjParser{ | ||
| constructor(options){ | ||
| export default class OrderedObjParser { | ||
| constructor(options) { | ||
| this.options = options; | ||
@@ -25,8 +25,8 @@ this.currentNode = null; | ||
| 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 : "\""}, | ||
| "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.ampEntity = { regex: /&(amp|#38|#x26);/g, val: "&" }; | ||
| this.htmlEntities = { | ||
@@ -39,11 +39,11 @@ "space": { regex: /&(nbsp|#160);/g, val: " " }, | ||
| // "apos" : { regex: /&(apos|#39);/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: "₹" }, | ||
| "num_dec": { regex: /&#([0-9]{1,7});/g, val : (_, str) => fromCodePoint(str, 10, "&#") }, | ||
| "num_hex": { regex: /&#x([0-9a-fA-F]{1,6});/g, val : (_, str) => fromCodePoint(str, 16, "&#x") }, | ||
| "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: "₹" }, | ||
| "num_dec": { regex: /&#([0-9]{1,7});/g, val: (_, str) => fromCodePoint(str, 10, "&#") }, | ||
| "num_hex": { regex: /&#x([0-9a-fA-F]{1,6});/g, val: (_, str) => fromCodePoint(str, 16, "&#x") }, | ||
| }; | ||
@@ -61,12 +61,14 @@ this.addExternalEntities = addExternalEntities; | ||
| this.ignoreAttributesFn = getIgnoreAttributesFn(this.options.ignoreAttributes) | ||
| this.entityExpansionCount = 0; | ||
| this.currentExpandedLength = 0; | ||
| if(this.options.stopNodes && this.options.stopNodes.length > 0){ | ||
| if (this.options.stopNodes && this.options.stopNodes.length > 0) { | ||
| this.stopNodesExact = new Set(); | ||
| this.stopNodesWildcard = new Set(); | ||
| for(let i = 0; i < this.options.stopNodes.length; i++){ | ||
| for (let i = 0; i < this.options.stopNodes.length; i++) { | ||
| const stopNodeExp = this.options.stopNodes[i]; | ||
| if(typeof stopNodeExp !== 'string') continue; | ||
| if(stopNodeExp.startsWith("*.")){ | ||
| if (typeof stopNodeExp !== 'string') continue; | ||
| if (stopNodeExp.startsWith("*.")) { | ||
| this.stopNodesWildcard.add(stopNodeExp.substring(2)); | ||
| }else{ | ||
| } else { | ||
| this.stopNodesExact.add(stopNodeExp); | ||
@@ -80,3 +82,3 @@ } | ||
| function addExternalEntities(externalEntities){ | ||
| function addExternalEntities(externalEntities) { | ||
| const entKeys = Object.keys(externalEntities); | ||
@@ -87,4 +89,4 @@ for (let i = 0; i < entKeys.length; i++) { | ||
| this.lastEntities[ent] = { | ||
| regex: new RegExp("&"+escaped+";","g"), | ||
| val : externalEntities[ent] | ||
| regex: new RegExp("&" + escaped + ";", "g"), | ||
| val: externalEntities[ent] | ||
| } | ||
@@ -108,19 +110,19 @@ } | ||
| } | ||
| if(val.length > 0){ | ||
| if(!escapeEntities) val = this.replaceEntitiesValue(val); | ||
| if (val.length > 0) { | ||
| if (!escapeEntities) val = this.replaceEntitiesValue(val, tagName, jPath); | ||
| const newval = this.options.tagValueProcessor(tagName, val, jPath, hasAttributes, isLeafNode); | ||
| if(newval === null || newval === undefined){ | ||
| if (newval === null || newval === undefined) { | ||
| //don't parse | ||
| return val; | ||
| }else if(typeof newval !== typeof val || newval !== val){ | ||
| } else if (typeof newval !== typeof val || newval !== val) { | ||
| //overwrite | ||
| return newval; | ||
| }else if(this.options.trimValues){ | ||
| } else if (this.options.trimValues) { | ||
| return parseValue(val, this.options.parseTagValue, this.options.numberParseOptions); | ||
| }else{ | ||
| } else { | ||
| const trimmedVal = val.trim(); | ||
| if(trimmedVal === val){ | ||
| if (trimmedVal === val) { | ||
| return parseValue(val, this.options.parseTagValue, this.options.numberParseOptions); | ||
| }else{ | ||
| } else { | ||
| return val; | ||
@@ -151,3 +153,3 @@ } | ||
| function buildAttributesMap(attrStr, jPath) { | ||
| function buildAttributesMap(attrStr, jPath, tagName) { | ||
| if (this.options.ignoreAttributes !== true && typeof attrStr === 'string') { | ||
@@ -171,3 +173,3 @@ // attrStr = attrStr.replace(/\r?\n/g, ' '); | ||
| } | ||
| if(aName === "__proto__") aName = "#__proto__"; | ||
| if (aName === "__proto__") aName = "#__proto__"; | ||
| if (oldVal !== undefined) { | ||
@@ -177,11 +179,11 @@ if (this.options.trimValues) { | ||
| } | ||
| oldVal = this.replaceEntitiesValue(oldVal); | ||
| oldVal = this.replaceEntitiesValue(oldVal, tagName, jPath); | ||
| const newVal = this.options.attributeValueProcessor(attrName, oldVal, jPath); | ||
| if(newVal === null || newVal === undefined){ | ||
| if (newVal === null || newVal === undefined) { | ||
| //don't parse | ||
| attrs[aName] = oldVal; | ||
| }else if(typeof newVal !== typeof oldVal || newVal !== oldVal){ | ||
| } else if (typeof newVal !== typeof oldVal || newVal !== oldVal) { | ||
| //overwrite | ||
| attrs[aName] = newVal; | ||
| }else{ | ||
| } else { | ||
| //parse | ||
@@ -211,3 +213,3 @@ attrs[aName] = parseValue( | ||
| const parseXml = function(xmlData) { | ||
| const parseXml = function (xmlData) { | ||
| xmlData = xmlData.replace(/\r\n?/g, "\n"); //TODO: remove this line | ||
@@ -218,24 +220,29 @@ const xmlObj = new xmlNode('!xml'); | ||
| let jPath = ""; | ||
| // Reset entity expansion counters for this document | ||
| this.entityExpansionCount = 0; | ||
| this.currentExpandedLength = 0; | ||
| const docTypeReader = new DocTypeReader(this.options.processEntities); | ||
| for(let i=0; i< xmlData.length; i++){//for each char in XML data | ||
| for (let i = 0; i < xmlData.length; i++) {//for each char in XML data | ||
| const ch = xmlData[i]; | ||
| if(ch === '<'){ | ||
| if (ch === '<') { | ||
| // const nextIndex = i+1; | ||
| // const _2ndChar = xmlData[nextIndex]; | ||
| if( xmlData[i+1] === '/') {//Closing Tag | ||
| if (xmlData[i + 1] === '/') {//Closing Tag | ||
| const closeIndex = findClosingIndex(xmlData, ">", i, "Closing Tag is not closed.") | ||
| let tagName = xmlData.substring(i+2,closeIndex).trim(); | ||
| let tagName = xmlData.substring(i + 2, closeIndex).trim(); | ||
| if(this.options.removeNSPrefix){ | ||
| if (this.options.removeNSPrefix) { | ||
| const colonIndex = tagName.indexOf(":"); | ||
| if(colonIndex !== -1){ | ||
| tagName = tagName.substr(colonIndex+1); | ||
| if (colonIndex !== -1) { | ||
| tagName = tagName.substr(colonIndex + 1); | ||
| } | ||
| } | ||
| if(this.options.transformTagName) { | ||
| if (this.options.transformTagName) { | ||
| tagName = this.options.transformTagName(tagName); | ||
| } | ||
| if(currentNode){ | ||
| if (currentNode) { | ||
| textData = this.saveTextToParentTag(textData, currentNode, jPath); | ||
@@ -245,11 +252,11 @@ } | ||
| //check if last tag of nested tag was unpaired tag | ||
| const lastTagName = jPath.substring(jPath.lastIndexOf(".")+1); | ||
| if(tagName && this.options.unpairedTags.indexOf(tagName) !== -1 ){ | ||
| const lastTagName = jPath.substring(jPath.lastIndexOf(".") + 1); | ||
| if (tagName && this.options.unpairedTags.indexOf(tagName) !== -1) { | ||
| throw new Error(`Unpaired tag can not be used as closing tag: </${tagName}>`); | ||
| } | ||
| let propIndex = 0 | ||
| if(lastTagName && this.options.unpairedTags.indexOf(lastTagName) !== -1 ){ | ||
| propIndex = jPath.lastIndexOf('.', jPath.lastIndexOf('.')-1) | ||
| if (lastTagName && this.options.unpairedTags.indexOf(lastTagName) !== -1) { | ||
| propIndex = jPath.lastIndexOf('.', jPath.lastIndexOf('.') - 1) | ||
| this.tagsNodeStack.pop(); | ||
| }else{ | ||
| } else { | ||
| propIndex = jPath.lastIndexOf("."); | ||
@@ -262,17 +269,17 @@ } | ||
| i = closeIndex; | ||
| } else if( xmlData[i+1] === '?') { | ||
| } else if (xmlData[i + 1] === '?') { | ||
| let tagData = readTagExp(xmlData,i, false, "?>"); | ||
| if(!tagData) throw new Error("Pi Tag is not closed."); | ||
| let tagData = readTagExp(xmlData, i, false, "?>"); | ||
| if (!tagData) throw new Error("Pi Tag is not closed."); | ||
| textData = this.saveTextToParentTag(textData, currentNode, jPath); | ||
| if( (this.options.ignoreDeclaration && tagData.tagName === "?xml") || this.options.ignorePiTags){ | ||
| if ((this.options.ignoreDeclaration && tagData.tagName === "?xml") || this.options.ignorePiTags) { | ||
| //do nothing | ||
| }else{ | ||
| } else { | ||
| const childNode = new xmlNode(tagData.tagName); | ||
| childNode.add(this.options.textNodeName, ""); | ||
| if(tagData.tagName !== tagData.tagExp && tagData.attrExpPresent){ | ||
| childNode[":@"] = this.buildAttributesMap(tagData.tagExp, jPath); | ||
| if (tagData.tagName !== tagData.tagExp && tagData.attrExpPresent) { | ||
| childNode[":@"] = this.buildAttributesMap(tagData.tagExp, jPath, tagData.tagName); | ||
| } | ||
@@ -284,5 +291,5 @@ this.addChild(currentNode, childNode, jPath, i); | ||
| i = tagData.closeIndex + 1; | ||
| } else if(xmlData.substr(i + 1, 3) === '!--') { | ||
| const endIndex = findClosingIndex(xmlData, "-->", i+4, "Comment is not closed.") | ||
| if(this.options.commentPropName){ | ||
| } else if (xmlData.substr(i + 1, 3) === '!--') { | ||
| const endIndex = findClosingIndex(xmlData, "-->", i + 4, "Comment is not closed.") | ||
| if (this.options.commentPropName) { | ||
| const comment = xmlData.substring(i + 4, endIndex - 2); | ||
@@ -292,12 +299,12 @@ | ||
| currentNode.add(this.options.commentPropName, [ { [this.options.textNodeName] : comment } ]); | ||
| currentNode.add(this.options.commentPropName, [{ [this.options.textNodeName]: comment }]); | ||
| } | ||
| i = endIndex; | ||
| } else if( xmlData.substr(i + 1, 2) === '!D') { | ||
| } else if (xmlData.substr(i + 1, 2) === '!D') { | ||
| const result = docTypeReader.readDocType(xmlData, i); | ||
| this.docTypeEntities = result.entities; | ||
| i = result.i; | ||
| }else if(xmlData.substr(i + 1, 2) === '![') { | ||
| } else if (xmlData.substr(i + 1, 2) === '![') { | ||
| const closeIndex = findClosingIndex(xmlData, "]]>", i, "CDATA is not closed.") - 2; | ||
| const tagExp = xmlData.substring(i + 9,closeIndex); | ||
| const tagExp = xmlData.substring(i + 9, closeIndex); | ||
@@ -307,15 +314,15 @@ textData = this.saveTextToParentTag(textData, currentNode, jPath); | ||
| let val = this.parseTextData(tagExp, currentNode.tagname, jPath, true, false, true, true); | ||
| if(val == undefined) val = ""; | ||
| if (val == undefined) val = ""; | ||
| //cdata should be set even if it is 0 length string | ||
| if(this.options.cdataPropName){ | ||
| currentNode.add(this.options.cdataPropName, [ { [this.options.textNodeName] : tagExp } ]); | ||
| }else{ | ||
| if (this.options.cdataPropName) { | ||
| currentNode.add(this.options.cdataPropName, [{ [this.options.textNodeName]: tagExp }]); | ||
| } else { | ||
| currentNode.add(this.options.textNodeName, val); | ||
| } | ||
| i = closeIndex + 2; | ||
| }else {//Opening tag | ||
| let result = readTagExp(xmlData,i, this.options.removeNSPrefix); | ||
| let tagName= result.tagName; | ||
| } else {//Opening tag | ||
| let result = readTagExp(xmlData, i, this.options.removeNSPrefix); | ||
| let tagName = result.tagName; | ||
| const rawTagName = result.rawTagName; | ||
@@ -329,3 +336,3 @@ let tagExp = result.tagExp; | ||
| const newTagName = this.options.transformTagName(tagName); | ||
| if(tagExp === tagName) { | ||
| if (tagExp === tagName) { | ||
| tagExp = newTagName | ||
@@ -335,6 +342,6 @@ } | ||
| } | ||
| //save text as child node | ||
| if (currentNode && textData) { | ||
| if(currentNode.tagname !== '!xml'){ | ||
| if (currentNode.tagname !== '!xml') { | ||
| //when nested tag is found | ||
@@ -347,7 +354,7 @@ textData = this.saveTextToParentTag(textData, currentNode, jPath, false); | ||
| const lastTag = currentNode; | ||
| if(lastTag && this.options.unpairedTags.indexOf(lastTag.tagname) !== -1 ){ | ||
| if (lastTag && this.options.unpairedTags.indexOf(lastTag.tagname) !== -1) { | ||
| currentNode = this.tagsNodeStack.pop(); | ||
| jPath = jPath.substring(0, jPath.lastIndexOf(".")); | ||
| } | ||
| if(tagName !== xmlObj.tagname){ | ||
| if (tagName !== xmlObj.tagname) { | ||
| jPath += jPath ? "." + tagName : tagName; | ||
@@ -359,8 +366,8 @@ } | ||
| //self-closing tag | ||
| if(tagExp.length > 0 && tagExp.lastIndexOf("/") === tagExp.length - 1){ | ||
| if(tagName[tagName.length - 1] === "/"){ //remove trailing '/' | ||
| if (tagExp.length > 0 && tagExp.lastIndexOf("/") === tagExp.length - 1) { | ||
| if (tagName[tagName.length - 1] === "/") { //remove trailing '/' | ||
| tagName = tagName.substr(0, tagName.length - 1); | ||
| jPath = jPath.substr(0, jPath.length - 1); | ||
| tagExp = tagName; | ||
| }else{ | ||
| } else { | ||
| tagExp = tagExp.substr(0, tagExp.length - 1); | ||
@@ -371,11 +378,11 @@ } | ||
| //unpaired tag | ||
| else if(this.options.unpairedTags.indexOf(tagName) !== -1){ | ||
| else if (this.options.unpairedTags.indexOf(tagName) !== -1) { | ||
| i = result.closeIndex; | ||
| } | ||
| //normal tag | ||
| else{ | ||
| else { | ||
| //read until closing tag is found | ||
| const result = this.readStopNodeData(xmlData, rawTagName, closeIndex + 1); | ||
| if(!result) throw new Error(`Unexpected end of ${rawTagName}`); | ||
| if (!result) throw new Error(`Unexpected end of ${rawTagName}`); | ||
| i = result.i; | ||
@@ -387,28 +394,27 @@ tagContent = result.tagContent; | ||
| if(tagName !== tagExp && attrExpPresent){ | ||
| childNode[":@"] = this.buildAttributesMap(tagExp, jPath | ||
| ); | ||
| if (tagName !== tagExp && attrExpPresent) { | ||
| childNode[":@"] = this.buildAttributesMap(tagExp, jPath, tagName); | ||
| } | ||
| if(tagContent) { | ||
| if (tagContent) { | ||
| tagContent = this.parseTextData(tagContent, tagName, jPath, true, attrExpPresent, true, true); | ||
| } | ||
| jPath = jPath.substr(0, jPath.lastIndexOf(".")); | ||
| childNode.add(this.options.textNodeName, tagContent); | ||
| this.addChild(currentNode, childNode, jPath, startIndex); | ||
| }else{ | ||
| //selfClosing tag | ||
| if(tagExp.length > 0 && tagExp.lastIndexOf("/") === tagExp.length - 1){ | ||
| if(tagName[tagName.length - 1] === "/"){ //remove trailing '/' | ||
| } else { | ||
| //selfClosing tag | ||
| if (tagExp.length > 0 && tagExp.lastIndexOf("/") === tagExp.length - 1) { | ||
| if (tagName[tagName.length - 1] === "/") { //remove trailing '/' | ||
| tagName = tagName.substr(0, tagName.length - 1); | ||
| jPath = jPath.substr(0, jPath.length - 1); | ||
| tagExp = tagName; | ||
| }else{ | ||
| } else { | ||
| tagExp = tagExp.substr(0, tagExp.length - 1); | ||
| } | ||
| if(this.options.transformTagName) { | ||
| if (this.options.transformTagName) { | ||
| const newTagName = this.options.transformTagName(tagName); | ||
| if(tagExp === tagName) { | ||
| if (tagExp === tagName) { | ||
| tagExp = newTagName | ||
@@ -420,4 +426,4 @@ } | ||
| const childNode = new xmlNode(tagName); | ||
| if(tagName !== tagExp && attrExpPresent){ | ||
| childNode[":@"] = this.buildAttributesMap(tagExp, jPath); | ||
| if (tagName !== tagExp && attrExpPresent) { | ||
| childNode[":@"] = this.buildAttributesMap(tagExp, jPath, tagName); | ||
| } | ||
@@ -427,9 +433,9 @@ this.addChild(currentNode, childNode, jPath, startIndex); | ||
| } | ||
| //opening tag | ||
| else{ | ||
| const childNode = new xmlNode( tagName); | ||
| //opening tag | ||
| else { | ||
| const childNode = new xmlNode(tagName); | ||
| this.tagsNodeStack.push(currentNode); | ||
| if(tagName !== tagExp && attrExpPresent){ | ||
| childNode[":@"] = this.buildAttributesMap(tagExp, jPath); | ||
| if (tagName !== tagExp && attrExpPresent) { | ||
| childNode[":@"] = this.buildAttributesMap(tagExp, jPath, tagName); | ||
| } | ||
@@ -443,3 +449,3 @@ this.addChild(currentNode, childNode, jPath, startIndex); | ||
| } | ||
| }else{ | ||
| } else { | ||
| textData += xmlData[i]; | ||
@@ -451,12 +457,12 @@ } | ||
| function addChild(currentNode, childNode, jPath, startIndex){ | ||
| function addChild(currentNode, childNode, jPath, startIndex) { | ||
| // unset startIndex if not requested | ||
| if (!this.options.captureMetaData) startIndex = undefined; | ||
| const result = this.options.updateTag(childNode.tagname, jPath, childNode[":@"]) | ||
| if(result === false){ | ||
| if (result === false) { | ||
| //do nothing | ||
| } else if(typeof result === "string"){ | ||
| } else if (typeof result === "string") { | ||
| childNode.tagname = result | ||
| currentNode.addChild(childNode, startIndex); | ||
| }else{ | ||
| } else { | ||
| currentNode.addChild(childNode, startIndex); | ||
@@ -466,27 +472,88 @@ } | ||
| const replaceEntitiesValue = function(val){ | ||
| const replaceEntitiesValue = function (val, tagName, jPath) { | ||
| // Performance optimization: Early return if no entities to replace | ||
| if (val.indexOf('&') === -1) { | ||
| return val; | ||
| } | ||
| if(this.options.processEntities){ | ||
| for(let entityName in this.docTypeEntities){ | ||
| const entity = this.docTypeEntities[entityName]; | ||
| val = val.replace( entity.regx, entity.val); | ||
| const entityConfig = this.options.processEntities; | ||
| if (!entityConfig.enabled) { | ||
| return val; | ||
| } | ||
| // Check tag-specific filtering | ||
| if (entityConfig.allowedTags) { | ||
| if (!entityConfig.allowedTags.includes(tagName)) { | ||
| return val; // Skip entity replacement for current tag as not set | ||
| } | ||
| for(let entityName in this.lastEntities){ | ||
| const entity = this.lastEntities[entityName]; | ||
| val = val.replace( entity.regex, entity.val); | ||
| } | ||
| if (entityConfig.tagFilter) { | ||
| if (!entityConfig.tagFilter(tagName, jPath)) { | ||
| return val; // Skip based on custom filter | ||
| } | ||
| if(this.options.htmlEntities){ | ||
| for(let entityName in this.htmlEntities){ | ||
| const entity = this.htmlEntities[entityName]; | ||
| val = val.replace( entity.regex, entity.val); | ||
| } | ||
| // Replace DOCTYPE entities | ||
| for (let entityName in this.docTypeEntities) { | ||
| const entity = this.docTypeEntities[entityName]; | ||
| const matches = val.match(entity.regx); | ||
| if (matches) { | ||
| // Track expansions | ||
| this.entityExpansionCount += matches.length; | ||
| // Check expansion limit | ||
| if (entityConfig.maxTotalExpansions && | ||
| this.entityExpansionCount > entityConfig.maxTotalExpansions) { | ||
| throw new Error( | ||
| `Entity expansion limit exceeded: ${this.entityExpansionCount} > ${entityConfig.maxTotalExpansions}` | ||
| ); | ||
| } | ||
| // Store length before replacement | ||
| const lengthBefore = val.length; | ||
| val = val.replace(entity.regx, entity.val); | ||
| // Check expanded length immediately after replacement | ||
| if (entityConfig.maxExpandedLength) { | ||
| this.currentExpandedLength += (val.length - lengthBefore); | ||
| if (this.currentExpandedLength > entityConfig.maxExpandedLength) { | ||
| throw new Error( | ||
| `Total expanded content size exceeded: ${this.currentExpandedLength} > ${entityConfig.maxExpandedLength}` | ||
| ); | ||
| } | ||
| } | ||
| } | ||
| val = val.replace( this.ampEntity.regex, this.ampEntity.val); | ||
| } | ||
| if (val.indexOf('&') === -1) return val; // Early exit | ||
| // Replace standard entities | ||
| for (let entityName in this.lastEntities) { | ||
| const entity = this.lastEntities[entityName]; | ||
| val = val.replace(entity.regex, entity.val); | ||
| } | ||
| if (val.indexOf('&') === -1) return val; // Early exit | ||
| // Replace HTML entities if enabled | ||
| if (this.options.htmlEntities) { | ||
| for (let entityName in this.htmlEntities) { | ||
| const entity = this.htmlEntities[entityName]; | ||
| val = val.replace(entity.regex, entity.val); | ||
| } | ||
| } | ||
| // Replace ampersand entity last | ||
| val = val.replace(this.ampEntity.regex, this.ampEntity.val); | ||
| return val; | ||
| } | ||
| function saveTextToParentTag(textData, currentNode, jPath, isLeafNode) { | ||
| if (textData) { //store previously collected data as textNode | ||
| if(isLeafNode === undefined) isLeafNode = currentNode.child.length === 0 | ||
| if (isLeafNode === undefined) isLeafNode = currentNode.child.length === 0 | ||
| textData = this.parseTextData(textData, | ||
@@ -513,5 +580,5 @@ currentNode.tagname, | ||
| */ | ||
| function isItStopNode(stopNodesExact, stopNodesWildcard, jPath, currentTagName){ | ||
| if(stopNodesWildcard && stopNodesWildcard.has(currentTagName)) return true; | ||
| if(stopNodesExact && stopNodesExact.has(jPath)) return true; | ||
| function isItStopNode(stopNodesExact, stopNodesWildcard, jPath, currentTagName) { | ||
| if (stopNodesWildcard && stopNodesWildcard.has(currentTagName)) return true; | ||
| if (stopNodesExact && stopNodesExact.has(jPath)) return true; | ||
| return false; | ||
@@ -526,3 +593,3 @@ } | ||
| */ | ||
| function tagExpWithClosingIndex(xmlData, i, closingChar = ">"){ | ||
| function tagExpWithClosingIndex(xmlData, i, closingChar = ">") { | ||
| let attrBoundary; | ||
@@ -533,8 +600,8 @@ let tagExp = ""; | ||
| if (attrBoundary) { | ||
| if (ch === attrBoundary) attrBoundary = "";//reset | ||
| if (ch === attrBoundary) attrBoundary = "";//reset | ||
| } else if (ch === '"' || ch === "'") { | ||
| attrBoundary = ch; | ||
| attrBoundary = ch; | ||
| } else if (ch === closingChar[0]) { | ||
| if(closingChar[1]){ | ||
| if(xmlData[index + 1] === closingChar[1]){ | ||
| if (closingChar[1]) { | ||
| if (xmlData[index + 1] === closingChar[1]) { | ||
| return { | ||
@@ -545,3 +612,3 @@ data: tagExp, | ||
| } | ||
| }else{ | ||
| } else { | ||
| return { | ||
@@ -559,7 +626,7 @@ data: tagExp, | ||
| function findClosingIndex(xmlData, str, i, errMsg){ | ||
| function findClosingIndex(xmlData, str, i, errMsg) { | ||
| const closingIndex = xmlData.indexOf(str, i); | ||
| if(closingIndex === -1){ | ||
| if (closingIndex === -1) { | ||
| throw new Error(errMsg) | ||
| }else{ | ||
| } else { | ||
| return closingIndex + str.length - 1; | ||
@@ -569,5 +636,5 @@ } | ||
| function readTagExp(xmlData,i, removeNSPrefix, closingChar = ">"){ | ||
| const result = tagExpWithClosingIndex(xmlData, i+1, closingChar); | ||
| if(!result) return; | ||
| function readTagExp(xmlData, i, removeNSPrefix, closingChar = ">") { | ||
| const result = tagExpWithClosingIndex(xmlData, i + 1, closingChar); | ||
| if (!result) return; | ||
| let tagExp = result.data; | ||
@@ -578,3 +645,3 @@ const closeIndex = result.index; | ||
| let attrExpPresent = true; | ||
| if(separatorIndex !== -1){//separate tag name and attributes expression | ||
| if (separatorIndex !== -1) {//separate tag name and attributes expression | ||
| tagName = tagExp.substring(0, separatorIndex); | ||
@@ -585,6 +652,6 @@ tagExp = tagExp.substring(separatorIndex + 1).trimStart(); | ||
| const rawTagName = tagName; | ||
| if(removeNSPrefix){ | ||
| if (removeNSPrefix) { | ||
| const colonIndex = tagName.indexOf(":"); | ||
| if(colonIndex !== -1){ | ||
| tagName = tagName.substr(colonIndex+1); | ||
| if (colonIndex !== -1) { | ||
| tagName = tagName.substr(colonIndex + 1); | ||
| attrExpPresent = tagName !== result.data.substr(colonIndex + 1); | ||
@@ -608,3 +675,3 @@ } | ||
| */ | ||
| function readStopNodeData(xmlData, tagName, i){ | ||
| function readStopNodeData(xmlData, tagName, i) { | ||
| const startIndex = i; | ||
@@ -615,37 +682,37 @@ // Starting at 1 since we already have an open tag | ||
| for (; i < xmlData.length; i++) { | ||
| if( xmlData[i] === "<"){ | ||
| if (xmlData[i+1] === "/") {//close tag | ||
| const closeIndex = findClosingIndex(xmlData, ">", i, `${tagName} is not closed`); | ||
| let closeTagName = xmlData.substring(i+2,closeIndex).trim(); | ||
| if(closeTagName === tagName){ | ||
| openTagCount--; | ||
| if (openTagCount === 0) { | ||
| return { | ||
| tagContent: xmlData.substring(startIndex, i), | ||
| i : closeIndex | ||
| } | ||
| if (xmlData[i] === "<") { | ||
| if (xmlData[i + 1] === "/") {//close tag | ||
| const closeIndex = findClosingIndex(xmlData, ">", i, `${tagName} is not closed`); | ||
| let closeTagName = xmlData.substring(i + 2, closeIndex).trim(); | ||
| if (closeTagName === tagName) { | ||
| openTagCount--; | ||
| if (openTagCount === 0) { | ||
| return { | ||
| tagContent: xmlData.substring(startIndex, i), | ||
| i: closeIndex | ||
| } | ||
| } | ||
| i=closeIndex; | ||
| } else if(xmlData[i+1] === '?') { | ||
| const closeIndex = findClosingIndex(xmlData, "?>", i+1, "StopNode is not closed.") | ||
| i=closeIndex; | ||
| } else if(xmlData.substr(i + 1, 3) === '!--') { | ||
| const closeIndex = findClosingIndex(xmlData, "-->", i+3, "StopNode is not closed.") | ||
| i=closeIndex; | ||
| } else if(xmlData.substr(i + 1, 2) === '![') { | ||
| const closeIndex = findClosingIndex(xmlData, "]]>", i, "StopNode is not closed.") - 2; | ||
| i=closeIndex; | ||
| } else { | ||
| const tagData = readTagExp(xmlData, i, '>') | ||
| } | ||
| i = closeIndex; | ||
| } else if (xmlData[i + 1] === '?') { | ||
| const closeIndex = findClosingIndex(xmlData, "?>", i + 1, "StopNode is not closed.") | ||
| i = closeIndex; | ||
| } else if (xmlData.substr(i + 1, 3) === '!--') { | ||
| const closeIndex = findClosingIndex(xmlData, "-->", i + 3, "StopNode is not closed.") | ||
| i = closeIndex; | ||
| } else if (xmlData.substr(i + 1, 2) === '![') { | ||
| const closeIndex = findClosingIndex(xmlData, "]]>", i, "StopNode is not closed.") - 2; | ||
| i = closeIndex; | ||
| } else { | ||
| const tagData = readTagExp(xmlData, i, '>') | ||
| if (tagData) { | ||
| const openTagName = tagData && tagData.tagName; | ||
| if (openTagName === tagName && tagData.tagExp[tagData.tagExp.length-1] !== "/") { | ||
| openTagCount++; | ||
| } | ||
| i=tagData.closeIndex; | ||
| if (tagData) { | ||
| const openTagName = tagData && tagData.tagName; | ||
| if (openTagName === tagName && tagData.tagExp[tagData.tagExp.length - 1] !== "/") { | ||
| openTagCount++; | ||
| } | ||
| i = tagData.closeIndex; | ||
| } | ||
| } | ||
| } | ||
| }//end for loop | ||
@@ -658,4 +725,4 @@ } | ||
| const newval = val.trim(); | ||
| if(newval === 'true' ) return true; | ||
| else if(newval === 'false' ) return false; | ||
| if (newval === 'true') return true; | ||
| else if (newval === 'false') return false; | ||
| else return toNumber(val, options); | ||
@@ -671,10 +738,10 @@ } else { | ||
| function fromCodePoint(str, base, prefix){ | ||
| function fromCodePoint(str, base, prefix) { | ||
| const codePoint = Number.parseInt(str, base); | ||
| if (codePoint >= 0 && codePoint <= 0x10FFFF) { | ||
| return String.fromCodePoint(codePoint); | ||
| return String.fromCodePoint(codePoint); | ||
| } else { | ||
| return prefix +str + ";"; | ||
| return prefix + str + ";"; | ||
| } | ||
| } |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
614111
3.98%4630
3.58%