fast-xml-builder
Advanced tools
| (()=>{"use strict";var t={d:(e,i)=>{for(var s in i)t.o(i,s)&&!t.o(e,s)&&Object.defineProperty(e,s,{enumerable:!0,get:i[s]})},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:()=>f});class i{constructor(t,e={}){this.pattern=t,this.separator=e.separator||".",this.segments=this._parse(t),this._hasDeepWildcard=this.segments.some(t=>"deep-wildcard"===t.type),this._hasAttributeCondition=this.segments.some(t=>void 0!==t.attrName),this._hasPositionSelector=this.segments.some(t=>void 0!==t.position)}_parse(t){const e=[];let i=0,s="";for(;i<t.length;)t[i]===this.separator?i+1<t.length&&t[i+1]===this.separator?(s.trim()&&(e.push(this._parseSegment(s.trim())),s=""),e.push({type:"deep-wildcard"}),i+=2):(s.trim()&&e.push(this._parseSegment(s.trim())),s="",i++):(s+=t[i],i++);return s.trim()&&e.push(this._parseSegment(s.trim())),e}_parseSegment(t){const e={type:"tag"};let i=null,s=t;const n=t.match(/^([^\[]+)(\[[^\]]*\])(.*)$/);if(n&&(s=n[1]+n[3],n[2])){const t=n[2].slice(1,-1);t&&(i=t)}let o,r,a=s;if(s.includes("::")){const e=s.indexOf("::");if(o=s.substring(0,e).trim(),a=s.substring(e+2).trim(),!o)throw new Error(`Invalid namespace in pattern: ${t}`)}let h=null;if(a.includes(":")){const t=a.lastIndexOf(":"),e=a.substring(0,t).trim(),i=a.substring(t+1).trim();["first","last","odd","even"].includes(i)||/^nth\(\d+\)$/.test(i)?(r=e,h=i):r=a}else r=a;if(!r)throw new Error(`Invalid segment pattern: ${t}`);if(e.tag=r,o&&(e.namespace=o),i)if(i.includes("=")){const t=i.indexOf("=");e.attrName=i.substring(0,t).trim(),e.attrValue=i.substring(t+1).trim()}else e.attrName=i.trim();if(h){const t=h.match(/^nth\((\d+)\)$/);t?(e.position="nth",e.positionValue=parseInt(t[1],10)):e.position=h}return e}get length(){return this.segments.length}hasDeepWildcard(){return this._hasDeepWildcard}hasAttributeCondition(){return this._hasAttributeCondition}hasPositionSelector(){return this._hasPositionSelector}toString(){return this.pattern}}class s{constructor(t={}){this.separator=t.separator||".",this.path=[],this.siblingStacks=[]}push(t,e=null,i=null){this.path.length>0&&(this.path[this.path.length-1].values=void 0);const s=this.path.length;this.siblingStacks[s]||(this.siblingStacks[s]=new Map);const n=this.siblingStacks[s],o=i?`${i}:${t}`:t,r=n.get(o)||0;let a=0;for(const t of n.values())a+=t;n.set(o,r+1);const h={tag:t,position:a,counter:r};null!=i&&(h.namespace=i),null!=e&&(h.values=e),this.path.push(h)}pop(){if(0===this.path.length)return;const t=this.path.pop();return this.siblingStacks.length>this.path.length+1&&(this.siblingStacks.length=this.path.length+1),t}updateCurrent(t){if(this.path.length>0){const e=this.path[this.path.length-1];null!=t&&(e.values=t)}}getCurrentTag(){return this.path.length>0?this.path[this.path.length-1].tag:void 0}getCurrentNamespace(){return this.path.length>0?this.path[this.path.length-1].namespace:void 0}getAttrValue(t){if(0===this.path.length)return;const e=this.path[this.path.length-1];return e.values?.[t]}hasAttr(t){if(0===this.path.length)return!1;const e=this.path[this.path.length-1];return void 0!==e.values&&t in e.values}getPosition(){return 0===this.path.length?-1:this.path[this.path.length-1].position??0}getCounter(){return 0===this.path.length?-1:this.path[this.path.length-1].counter??0}getIndex(){return this.getPosition()}getDepth(){return this.path.length}toString(t,e=!0){const i=t||this.separator;return this.path.map(t=>e&&t.namespace?`${t.namespace}:${t.tag}`:t.tag).join(i)}toArray(){return this.path.map(t=>t.tag)}reset(){this.path=[],this.siblingStacks=[]}matches(t){const e=t.segments;return 0!==e.length&&(t.hasDeepWildcard()?this._matchWithDeepWildcard(e):this._matchSimple(e))}_matchSimple(t){if(this.path.length!==t.length)return!1;for(let e=0;e<t.length;e++){const i=t[e],s=this.path[e],n=e===this.path.length-1;if(!this._matchSegment(i,s,n))return!1}return!0}_matchWithDeepWildcard(t){let e=this.path.length-1,i=t.length-1;for(;i>=0&&e>=0;){const s=t[i];if("deep-wildcard"===s.type){if(i--,i<0)return!0;const s=t[i];let n=!1;for(let t=e;t>=0;t--){const o=t===this.path.length-1;if(this._matchSegment(s,this.path[t],o)){e=t-1,i--,n=!0;break}}if(!n)return!1}else{const t=e===this.path.length-1;if(!this._matchSegment(s,this.path[e],t))return!1;e--,i--}}return i<0}_matchSegment(t,e,i){if("*"!==t.tag&&t.tag!==e.tag)return!1;if(void 0!==t.namespace&&"*"!==t.namespace&&t.namespace!==e.namespace)return!1;if(void 0!==t.attrName){if(!i)return!1;if(!e.values||!(t.attrName in e.values))return!1;if(void 0!==t.attrValue){const i=e.values[t.attrName];if(String(i)!==String(t.attrValue))return!1}}if(void 0!==t.position){if(!i)return!1;const s=e.counter??0;if("first"===t.position&&0!==s)return!1;if("odd"===t.position&&s%2!=1)return!1;if("even"===t.position&&s%2!=0)return!1;if("nth"===t.position&&s!==t.positionValue)return!1}return!0}snapshot(){return{path:this.path.map(t=>({...t})),siblingStacks:this.siblingStacks.map(t=>new Map(t))}}restore(t){this.path=t.path.map(t=>({...t})),this.siblingStacks=t.siblingStacks.map(t=>new Map(t))}}function n(t,e){let n="";e.format&&e.indentBy.length>0&&(n="\n");const r=[];if(e.stopNodes&&Array.isArray(e.stopNodes))for(let t=0;t<e.stopNodes.length;t++){const s=e.stopNodes[t];"string"==typeof s?r.push(new i(s)):s instanceof i&&r.push(s)}return o(t,e,n,new s,r)}function o(t,e,i,s,n){let h="",d=!1;if(!Array.isArray(t)){if(null!=t){let i=t.toString();return i=c(i,e),i}return""}for(let f=0;f<t.length;f++){const g=t[f],m=p(g);if(void 0===m)continue;const b=r(g[":@"],e);s.push(m,b);const N=l(s,n);if(m===e.textNodeName){let t=g[m];N||(t=e.tagValueProcessor(m,t),t=c(t,e)),d&&(h+=i),h+=t,d=!1,s.pop();continue}if(m===e.cdataPropName){d&&(h+=i),h+=`<![CDATA[${g[m][0][e.textNodeName]}]]>`,d=!1,s.pop();continue}if(m===e.commentPropName){h+=i+`\x3c!--${g[m][0][e.textNodeName]}--\x3e`,d=!0,s.pop();continue}if("?"===m[0]){const t=u(g[":@"],e,N),n="?xml"===m?"":i;let o=g[m][0][e.textNodeName];o=0!==o.length?" "+o:"",h+=n+`<${m}${o}${t}?>`,d=!0,s.pop();continue}let y=i;""!==y&&(y+=e.indentBy);const x=i+`<${m}${u(g[":@"],e,N)}`;let P;P=N?a(g[m],e):o(g[m],e,y,s,n),-1!==e.unpairedTags.indexOf(m)?e.suppressUnpairedNode?h+=x+">":h+=x+"/>":P&&0!==P.length||!e.suppressEmptyNode?P&&P.endsWith(">")?h+=x+`>${P}${i}</${m}>`:(h+=x+">",P&&""!==i&&(P.includes("/>")||P.includes("</"))?h+=i+e.indentBy+P+i:h+=P,h+=`</${m}>`):h+=x+"/>",d=!0,s.pop()}return h}function r(t,e){if(!t||e.ignoreAttributes)return null;const i={};let s=!1;for(let n in t)Object.prototype.hasOwnProperty.call(t,n)&&(i[n.startsWith(e.attributeNamePrefix)?n.substr(e.attributeNamePrefix.length):n]=t[n],s=!0);return s?i:null}function a(t,e){if(!Array.isArray(t))return null!=t?t.toString():"";let i="";for(let s=0;s<t.length;s++){const n=t[s],o=p(n);if(o===e.textNodeName)i+=n[o];else if(o===e.cdataPropName)i+=n[o][0][e.textNodeName];else if(o===e.commentPropName)i+=n[o][0][e.textNodeName];else{if(o&&"?"===o[0])continue;if(o){const t=h(n[":@"],e),s=a(n[o],e);s&&0!==s.length?i+=`<${o}${t}>${s}</${o}>`:i+=`<${o}${t}/>`}}}return i}function h(t,e){let i="";if(t&&!e.ignoreAttributes)for(let s in t){if(!Object.prototype.hasOwnProperty.call(t,s))continue;let n=t[s];!0===n&&e.suppressBooleanAttributes?i+=` ${s.substr(e.attributeNamePrefix.length)}`:i+=` ${s.substr(e.attributeNamePrefix.length)}="${n}"`}return i}function p(t){const e=Object.keys(t);for(let i=0;i<e.length;i++){const s=e[i];if(Object.prototype.hasOwnProperty.call(t,s)&&":@"!==s)return s}}function u(t,e,i){let s="";if(t&&!e.ignoreAttributes)for(let n in t){if(!Object.prototype.hasOwnProperty.call(t,n))continue;let o;i?o=t[n]:(o=e.attributeValueProcessor(n,t[n]),o=c(o,e)),!0===o&&e.suppressBooleanAttributes?s+=` ${n.substr(e.attributeNamePrefix.length)}`:s+=` ${n.substr(e.attributeNamePrefix.length)}="${o}"`}return s}function l(t,e){if(!e||0===e.length)return!1;for(let i=0;i<e.length;i++)if(t.matches(e[i]))return!0;return!1}function c(t,e){if(t&&t.length>0&&e.processEntities)for(let i=0;i<e.entities.length;i++){const s=e.entities[i];t=t.replace(s.regex,s.val)}return t}const d={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,jPath:!0};function f(t){if(this.options=Object.assign({},d,t),this.options.stopNodes&&Array.isArray(this.options.stopNodes)&&(this.options.stopNodes=this.options.stopNodes.map(t=>"string"==typeof t&&t.startsWith("*.")?".."+t.substring(2):t)),this.stopNodeExpressions=[],this.options.stopNodes&&Array.isArray(this.options.stopNodes))for(let t=0;t<this.options.stopNodes.length;t++){const e=this.options.stopNodes[t];"string"==typeof e?this.stopNodeExpressions.push(new i(e)):e instanceof i&&this.stopNodeExpressions.push(e)}var e;!0===this.options.ignoreAttributes||this.options.attributesGroupName?this.isAttribute=function(){return!1}:(this.ignoreAttributesFn="function"==typeof(e=this.options.ignoreAttributes)?e:Array.isArray(e)?t=>{for(const i of e){if("string"==typeof i&&t===i)return!0;if(i instanceof RegExp&&i.test(t))return!0}}:()=>!1,this.attrPrefixLen=this.options.attributeNamePrefix.length,this.isAttribute=b),this.processTextOrObjNode=g,this.options.format?(this.indentate=m,this.tagEndChar=">\n",this.newLine="\n"):(this.indentate=function(){return""},this.tagEndChar=">",this.newLine="")}function g(t,e,i,s){const n=this.extractAttributes(t);if(s.push(e,n),this.checkStopNode(s)){const n=this.buildRawContent(t),o=this.buildAttributesForStopNode(t);return s.pop(),this.buildObjectNode(n,e,o,i)}const o=this.j2x(t,i+1,s);return s.pop(),void 0!==t[this.options.textNodeName]&&1===Object.keys(t).length?this.buildTextValNode(t[this.options.textNodeName],e,o.attrStr,i,s):this.buildObjectNode(o.val,e,o.attrStr,i)}function m(t){return this.options.indentBy.repeat(t)}function b(t){return!(!t.startsWith(this.options.attributeNamePrefix)||t===this.options.textNodeName)&&t.substr(this.attrPrefixLen)}f.prototype.build=function(t){if(this.options.preserveOrder)return n(t,this.options);{Array.isArray(t)&&this.options.arrayNodeName&&this.options.arrayNodeName.length>1&&(t={[this.options.arrayNodeName]:t});const e=new s;return this.j2x(t,0,e).val}},f.prototype.j2x=function(t,e,i){let s="",n="";const o=this.options.jPath?i.toString():i,r=this.checkStopNode(i);for(let 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,i);else if("object"!=typeof t[a]){const h=this.isAttribute(a);if(h&&!this.ignoreAttributesFn(h,o))s+=this.buildAttrPairStr(h,""+t[a],r);else if(!h)if(a===this.options.textNodeName){let e=this.options.tagValueProcessor(a,""+t[a]);n+=this.replaceEntitiesValue(e)}else{i.push(a);const s=this.checkStopNode(i);if(i.pop(),s){const i=""+t[a];n+=""===i?this.indentate(e)+"<"+a+this.closeTag(a)+this.tagEndChar:this.indentate(e)+"<"+a+">"+i+"</"+a+this.tagEndChar}else n+=this.buildTextValNode(t[a],a,"",e,i)}}else if(Array.isArray(t[a])){const s=t[a].length;let o="",r="";for(let h=0;h<s;h++){const s=t[a][h];if(void 0===s);else if(null===s)"?"===a[0]?n+=this.indentate(e)+"<"+a+"?"+this.tagEndChar:n+=this.indentate(e)+"<"+a+"/"+this.tagEndChar;else if("object"==typeof s)if(this.options.oneListGroup){i.push(a);const t=this.j2x(s,e+1,i);i.pop(),o+=t.val,this.options.attributesGroupName&&s.hasOwnProperty(this.options.attributesGroupName)&&(r+=t.attrStr)}else o+=this.processTextOrObjNode(s,a,e,i);else if(this.options.oneListGroup){let t=this.options.tagValueProcessor(a,s);t=this.replaceEntitiesValue(t),o+=t}else{i.push(a);const t=this.checkStopNode(i);if(i.pop(),t){const t=""+s;o+=""===t?this.indentate(e)+"<"+a+this.closeTag(a)+this.tagEndChar:this.indentate(e)+"<"+a+">"+t+"</"+a+this.tagEndChar}else o+=this.buildTextValNode(s,a,"",e,i)}}this.options.oneListGroup&&(o=this.buildObjectNode(o,a,r,e)),n+=o}else if(this.options.attributesGroupName&&a===this.options.attributesGroupName){const e=Object.keys(t[a]),i=e.length;for(let n=0;n<i;n++)s+=this.buildAttrPairStr(e[n],""+t[a][e[n]],r)}else n+=this.processTextOrObjNode(t[a],a,e,i);return{attrStr:s,val:n}},f.prototype.buildAttrPairStr=function(t,e,i){return i||(e=this.options.attributeValueProcessor(t,""+e),e=this.replaceEntitiesValue(e)),this.options.suppressBooleanAttributes&&"true"===e?" "+t:" "+t+'="'+e+'"'},f.prototype.extractAttributes=function(t){if(!t||"object"!=typeof t)return null;const e={};let i=!1;if(this.options.attributesGroupName&&t[this.options.attributesGroupName]){const s=t[this.options.attributesGroupName];for(let t in s)Object.prototype.hasOwnProperty.call(s,t)&&(e[t.startsWith(this.options.attributeNamePrefix)?t.substring(this.options.attributeNamePrefix.length):t]=s[t],i=!0)}else for(let s in t){if(!Object.prototype.hasOwnProperty.call(t,s))continue;const n=this.isAttribute(s);n&&(e[n]=t[s],i=!0)}return i?e:null},f.prototype.buildRawContent=function(t){if("string"==typeof t)return t;if("object"!=typeof t||null===t)return String(t);if(void 0!==t[this.options.textNodeName])return t[this.options.textNodeName];let e="";for(let i in t){if(!Object.prototype.hasOwnProperty.call(t,i))continue;if(this.isAttribute(i))continue;if(this.options.attributesGroupName&&i===this.options.attributesGroupName)continue;const s=t[i];if(i===this.options.textNodeName)e+=s;else if(Array.isArray(s)){for(let t of s)if("string"==typeof t||"number"==typeof t)e+=`<${i}>${t}</${i}>`;else if("object"==typeof t&&null!==t){const s=this.buildRawContent(t),n=this.buildAttributesForStopNode(t);e+=""===s?`<${i}${n}/>`:`<${i}${n}>${s}</${i}>`}}else if("object"==typeof s&&null!==s){const t=this.buildRawContent(s),n=this.buildAttributesForStopNode(s);e+=""===t?`<${i}${n}/>`:`<${i}${n}>${t}</${i}>`}else e+=`<${i}>${s}</${i}>`}return e},f.prototype.buildAttributesForStopNode=function(t){if(!t||"object"!=typeof t)return"";let e="";if(this.options.attributesGroupName&&t[this.options.attributesGroupName]){const i=t[this.options.attributesGroupName];for(let t in i){if(!Object.prototype.hasOwnProperty.call(i,t))continue;const s=t.startsWith(this.options.attributeNamePrefix)?t.substring(this.options.attributeNamePrefix.length):t,n=i[t];!0===n&&this.options.suppressBooleanAttributes?e+=" "+s:e+=" "+s+'="'+n+'"'}}else for(let i in t){if(!Object.prototype.hasOwnProperty.call(t,i))continue;const s=this.isAttribute(i);if(s){const n=t[i];!0===n&&this.options.suppressBooleanAttributes?e+=" "+s:e+=" "+s+'="'+n+'"'}}return e},f.prototype.buildObjectNode=function(t,e,i,s){if(""===t)return"?"===e[0]?this.indentate(s)+"<"+e+i+"?"+this.tagEndChar:this.indentate(s)+"<"+e+i+this.closeTag(e)+this.tagEndChar;{let n="</"+e+this.tagEndChar,o="";return"?"===e[0]&&(o="?",n=""),!i&&""!==i||-1!==t.indexOf("<")?!1!==this.options.commentPropName&&e===this.options.commentPropName&&0===o.length?this.indentate(s)+`\x3c!--${t}--\x3e`+this.newLine:this.indentate(s)+"<"+e+i+o+this.tagEndChar+t+this.indentate(s)+n:this.indentate(s)+"<"+e+i+o+">"+t+n}},f.prototype.closeTag=function(t){let e="";return-1!==this.options.unpairedTags.indexOf(t)?this.options.suppressUnpairedNode||(e="/"):e=this.options.suppressEmptyNode?"/":`></${t}`,e},f.prototype.checkStopNode=function(t){if(!this.stopNodeExpressions||0===this.stopNodeExpressions.length)return!1;for(let e=0;e<this.stopNodeExpressions.length;e++)if(t.matches(this.stopNodeExpressions[e]))return!0;return!1},f.prototype.buildTextValNode=function(t,e,i,s,n){if(!1!==this.options.cdataPropName&&e===this.options.cdataPropName)return this.indentate(s)+`<![CDATA[${t}]]>`+this.newLine;if(!1!==this.options.commentPropName&&e===this.options.commentPropName)return this.indentate(s)+`\x3c!--${t}--\x3e`+this.newLine;if("?"===e[0])return this.indentate(s)+"<"+e+i+"?"+this.tagEndChar;{let n=this.options.tagValueProcessor(e,t);return n=this.replaceEntitiesValue(n),""===n?this.indentate(s)+"<"+e+i+this.closeTag(e)+this.tagEndChar:this.indentate(s)+"<"+e+i+">"+n+"</"+e+this.tagEndChar}},f.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},module.exports=e})(); |
| !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.fxb=e():t.fxb=e()}(this,()=>(()=>{"use strict";var t={d:(e,i)=>{for(var r in i)t.o(i,r)&&!t.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:i[r]})},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:()=>b});class i{constructor(t,e={}){this.pattern=t,this.separator=e.separator||".",this.segments=this._parse(t),this._hasDeepWildcard=this.segments.some(t=>"deep-wildcard"===t.type),this._hasAttributeCondition=this.segments.some(t=>void 0!==t.attrName),this._hasPositionSelector=this.segments.some(t=>void 0!==t.position)}_parse(t){const e=[];let i=0,r="";for(;i<t.length;)t[i]===this.separator?i+1<t.length&&t[i+1]===this.separator?(r.trim()&&(e.push(this._parseSegment(r.trim())),r=""),e.push({type:"deep-wildcard"}),i+=2):(r.trim()&&e.push(this._parseSegment(r.trim())),r="",i++):(r+=t[i],i++);return r.trim()&&e.push(this._parseSegment(r.trim())),e}_parseSegment(t){const e={type:"tag"};let i=null,r=t;const s=t.match(/^([^\[]+)(\[[^\]]*\])(.*)$/);if(s&&(r=s[1]+s[3],s[2])){const t=s[2].slice(1,-1);t&&(i=t)}let n,o,a=r;if(r.includes("::")){const e=r.indexOf("::");if(n=r.substring(0,e).trim(),a=r.substring(e+2).trim(),!n)throw new Error(`Invalid namespace in pattern: ${t}`)}let h=null;if(a.includes(":")){const t=a.lastIndexOf(":"),e=a.substring(0,t).trim(),i=a.substring(t+1).trim();["first","last","odd","even"].includes(i)||/^nth\(\d+\)$/.test(i)?(o=e,h=i):o=a}else o=a;if(!o)throw new Error(`Invalid segment pattern: ${t}`);if(e.tag=o,n&&(e.namespace=n),i)if(i.includes("=")){const t=i.indexOf("=");e.attrName=i.substring(0,t).trim(),e.attrValue=i.substring(t+1).trim()}else e.attrName=i.trim();if(h){const t=h.match(/^nth\((\d+)\)$/);t?(e.position="nth",e.positionValue=parseInt(t[1],10)):e.position=h}return e}get length(){return this.segments.length}hasDeepWildcard(){return this._hasDeepWildcard}hasAttributeCondition(){return this._hasAttributeCondition}hasPositionSelector(){return this._hasPositionSelector}toString(){return this.pattern}}class r{constructor(t={}){this.separator=t.separator||".",this.path=[],this.siblingStacks=[]}push(t,e=null,i=null){this.path.length>0&&(this.path[this.path.length-1].values=void 0);const r=this.path.length;this.siblingStacks[r]||(this.siblingStacks[r]=new Map);const s=this.siblingStacks[r],n=i?`${i}:${t}`:t,o=s.get(n)||0;let a=0;for(const t of s.values())a+=t;s.set(n,o+1);const h={tag:t,position:a,counter:o};null!=i&&(h.namespace=i),null!=e&&(h.values=e),this.path.push(h)}pop(){if(0===this.path.length)return;const t=this.path.pop();return this.siblingStacks.length>this.path.length+1&&(this.siblingStacks.length=this.path.length+1),t}updateCurrent(t){if(this.path.length>0){const e=this.path[this.path.length-1];null!=t&&(e.values=t)}}getCurrentTag(){return this.path.length>0?this.path[this.path.length-1].tag:void 0}getCurrentNamespace(){return this.path.length>0?this.path[this.path.length-1].namespace:void 0}getAttrValue(t){if(0===this.path.length)return;const e=this.path[this.path.length-1];return e.values?.[t]}hasAttr(t){if(0===this.path.length)return!1;const e=this.path[this.path.length-1];return void 0!==e.values&&t in e.values}getPosition(){return 0===this.path.length?-1:this.path[this.path.length-1].position??0}getCounter(){return 0===this.path.length?-1:this.path[this.path.length-1].counter??0}getIndex(){return this.getPosition()}getDepth(){return this.path.length}toString(t,e=!0){const i=t||this.separator;return this.path.map(t=>e&&t.namespace?`${t.namespace}:${t.tag}`:t.tag).join(i)}toArray(){return this.path.map(t=>t.tag)}reset(){this.path=[],this.siblingStacks=[]}matches(t){const e=t.segments;return 0!==e.length&&(t.hasDeepWildcard()?this._matchWithDeepWildcard(e):this._matchSimple(e))}_matchSimple(t){if(this.path.length!==t.length)return!1;for(let e=0;e<t.length;e++){const i=t[e],r=this.path[e],s=e===this.path.length-1;if(!this._matchSegment(i,r,s))return!1}return!0}_matchWithDeepWildcard(t){let e=this.path.length-1,i=t.length-1;for(;i>=0&&e>=0;){const r=t[i];if("deep-wildcard"===r.type){if(i--,i<0)return!0;const r=t[i];let s=!1;for(let t=e;t>=0;t--){const n=t===this.path.length-1;if(this._matchSegment(r,this.path[t],n)){e=t-1,i--,s=!0;break}}if(!s)return!1}else{const t=e===this.path.length-1;if(!this._matchSegment(r,this.path[e],t))return!1;e--,i--}}return i<0}_matchSegment(t,e,i){if("*"!==t.tag&&t.tag!==e.tag)return!1;if(void 0!==t.namespace&&"*"!==t.namespace&&t.namespace!==e.namespace)return!1;if(void 0!==t.attrName){if(!i)return!1;if(!e.values||!(t.attrName in e.values))return!1;if(void 0!==t.attrValue){const i=e.values[t.attrName];if(String(i)!==String(t.attrValue))return!1}}if(void 0!==t.position){if(!i)return!1;const r=e.counter??0;if("first"===t.position&&0!==r)return!1;if("odd"===t.position&&r%2!=1)return!1;if("even"===t.position&&r%2!=0)return!1;if("nth"===t.position&&r!==t.positionValue)return!1}return!0}snapshot(){return{path:this.path.map(t=>({...t})),siblingStacks:this.siblingStacks.map(t=>new Map(t))}}restore(t){this.path=t.path.map(t=>({...t})),this.siblingStacks=t.siblingStacks.map(t=>new Map(t))}}function s(t,e){var s="";e.format&&e.indentBy.length>0&&(s="\n");var o=[];if(e.stopNodes&&Array.isArray(e.stopNodes))for(var a=0;a<e.stopNodes.length;a++){var h=e.stopNodes[a];"string"==typeof h?o.push(new i(h)):h instanceof i&&o.push(h)}return n(t,e,s,new r,o)}function n(t,e,i,r,s){var h="",f=!1;if(!Array.isArray(t)){if(null!=t){var d=t.toString();return c(d,e)}return""}for(var g=0;g<t.length;g++){var m=t[g],b=p(m);if(void 0!==b){var v=o(m[":@"],e);r.push(b,v);var N=l(r,s);if(b!==e.textNodeName)if(b!==e.cdataPropName)if(b!==e.commentPropName)if("?"!==b[0]){var y=i;""!==y&&(y+=e.indentBy);var x=i+"<"+b+u(m[":@"],e,N),A=void 0;A=N?a(m[b],e):n(m[b],e,y,r,s),-1!==e.unpairedTags.indexOf(b)?e.suppressUnpairedNode?h+=x+">":h+=x+"/>":A&&0!==A.length||!e.suppressEmptyNode?A&&A.endsWith(">")?h+=x+">"+A+i+"</"+b+">":(h+=x+">",A&&""!==i&&(A.includes("/>")||A.includes("</"))?h+=i+e.indentBy+A+i:h+=A,h+="</"+b+">"):h+=x+"/>",f=!0,r.pop()}else{var S=u(m[":@"],e,N),P="?xml"===b?"":i,O=m[b][0][e.textNodeName];h+=P+"<"+b+(O=0!==O.length?" "+O:"")+S+"?>",f=!0,r.pop()}else h+=i+"\x3c!--"+m[b][0][e.textNodeName]+"--\x3e",f=!0,r.pop();else f&&(h+=i),h+="<![CDATA["+m[b][0][e.textNodeName]+"]]>",f=!1,r.pop();else{var j=m[b];N||(j=c(j=e.tagValueProcessor(b,j),e)),f&&(h+=i),h+=j,f=!1,r.pop()}}}return h}function o(t,e){if(!t||e.ignoreAttributes)return null;var i={},r=!1;for(var s in t)Object.prototype.hasOwnProperty.call(t,s)&&(i[s.startsWith(e.attributeNamePrefix)?s.substr(e.attributeNamePrefix.length):s]=t[s],r=!0);return r?i:null}function a(t,e){if(!Array.isArray(t))return null!=t?t.toString():"";for(var i="",r=0;r<t.length;r++){var s=t[r],n=p(s);if(n===e.textNodeName)i+=s[n];else if(n===e.cdataPropName)i+=s[n][0][e.textNodeName];else if(n===e.commentPropName)i+=s[n][0][e.textNodeName];else{if(n&&"?"===n[0])continue;if(n){var o=h(s[":@"],e),u=a(s[n],e);u&&0!==u.length?i+="<"+n+o+">"+u+"</"+n+">":i+="<"+n+o+"/>"}}}return i}function h(t,e){var i="";if(t&&!e.ignoreAttributes)for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)){var s=t[r];!0===s&&e.suppressBooleanAttributes?i+=" "+r.substr(e.attributeNamePrefix.length):i+=" "+r.substr(e.attributeNamePrefix.length)+'="'+s+'"'}return i}function p(t){for(var e=Object.keys(t),i=0;i<e.length;i++){var r=e[i];if(Object.prototype.hasOwnProperty.call(t,r)&&":@"!==r)return r}}function u(t,e,i){var r="";if(t&&!e.ignoreAttributes)for(var s in t)if(Object.prototype.hasOwnProperty.call(t,s)){var n=void 0;!0===(n=i?t[s]:c(n=e.attributeValueProcessor(s,t[s]),e))&&e.suppressBooleanAttributes?r+=" "+s.substr(e.attributeNamePrefix.length):r+=" "+s.substr(e.attributeNamePrefix.length)+'="'+n+'"'}return r}function l(t,e){if(!e||0===e.length)return!1;for(var i=0;i<e.length;i++)if(t.matches(e[i]))return!0;return!1}function c(t,e){if(t&&t.length>0&&e.processEntities)for(var i=0;i<e.entities.length;i++){var r=e.entities[i];t=t.replace(r.regex,r.val)}return t}function f(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,r=Array(e);i<e;i++)r[i]=t[i];return r}function d(t,e){var i="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(i)return(i=i.call(t)).next.bind(i);if(Array.isArray(t)||(i=function(t,e){if(t){if("string"==typeof t)return g(t,e);var i={}.toString.call(t).slice(8,-1);return"Object"===i&&t.constructor&&(i=t.constructor.name),"Map"===i||"Set"===i?Array.from(t):"Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?g(t,e):void 0}}(t))||e&&t&&"number"==typeof t.length){i&&(t=i);var r=0;return function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function g(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,r=Array(e);i<e;i++)r[i]=t[i];return r}var m={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,jPath:!0};function b(t){if(this.options=Object.assign({},m,t),this.options.stopNodes&&Array.isArray(this.options.stopNodes)&&(this.options.stopNodes=this.options.stopNodes.map(function(t){return"string"==typeof t&&t.startsWith("*.")?".."+t.substring(2):t})),this.stopNodeExpressions=[],this.options.stopNodes&&Array.isArray(this.options.stopNodes))for(var e=0;e<this.options.stopNodes.length;e++){var r=this.options.stopNodes[e];"string"==typeof r?this.stopNodeExpressions.push(new i(r)):r instanceof i&&this.stopNodeExpressions.push(r)}var s;!0===this.options.ignoreAttributes||this.options.attributesGroupName?this.isAttribute=function(){return!1}:(this.ignoreAttributesFn="function"==typeof(s=this.options.ignoreAttributes)?s:Array.isArray(s)?function(t){for(var e,i=function(t,e){var i="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(i)return(i=i.call(t)).next.bind(i);if(Array.isArray(t)||(i=function(t,e){if(t){if("string"==typeof t)return f(t,e);var i={}.toString.call(t).slice(8,-1);return"Object"===i&&t.constructor&&(i=t.constructor.name),"Map"===i||"Set"===i?Array.from(t):"Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?f(t,e):void 0}}(t))||e&&t&&"number"==typeof t.length){i&&(t=i);var r=0;return function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(s);!(e=i()).done;){var r=e.value;if("string"==typeof r&&t===r)return!0;if(r instanceof RegExp&&r.test(t))return!0}}:function(){return!1},this.attrPrefixLen=this.options.attributeNamePrefix.length,this.isAttribute=y),this.processTextOrObjNode=v,this.options.format?(this.indentate=N,this.tagEndChar=">\n",this.newLine="\n"):(this.indentate=function(){return""},this.tagEndChar=">",this.newLine="")}function v(t,e,i,r){var s=this.extractAttributes(t);if(r.push(e,s),this.checkStopNode(r)){var n=this.buildRawContent(t),o=this.buildAttributesForStopNode(t);return r.pop(),this.buildObjectNode(n,e,o,i)}var a=this.j2x(t,i+1,r);return r.pop(),void 0!==t[this.options.textNodeName]&&1===Object.keys(t).length?this.buildTextValNode(t[this.options.textNodeName],e,a.attrStr,i,r):this.buildObjectNode(a.val,e,a.attrStr,i)}function N(t){return this.options.indentBy.repeat(t)}function y(t){return!(!t.startsWith(this.options.attributeNamePrefix)||t===this.options.textNodeName)&&t.substr(this.attrPrefixLen)}return b.prototype.build=function(t){if(this.options.preserveOrder)return s(t,this.options);var e;Array.isArray(t)&&this.options.arrayNodeName&&this.options.arrayNodeName.length>1&&((e={})[this.options.arrayNodeName]=t,t=e);var i=new r;return this.j2x(t,0,i).val},b.prototype.j2x=function(t,e,i){var r="",s="",n=this.options.jPath?i.toString():i,o=this.checkStopNode(i);for(var a in t)if(Object.prototype.hasOwnProperty.call(t,a))if(void 0===t[a])this.isAttribute(a)&&(s+="");else if(null===t[a])this.isAttribute(a)||a===this.options.cdataPropName?s+="":"?"===a[0]?s+=this.indentate(e)+"<"+a+"?"+this.tagEndChar:s+=this.indentate(e)+"<"+a+"/"+this.tagEndChar;else if(t[a]instanceof Date)s+=this.buildTextValNode(t[a],a,"",e,i);else if("object"!=typeof t[a]){var h=this.isAttribute(a);if(h&&!this.ignoreAttributesFn(h,n))r+=this.buildAttrPairStr(h,""+t[a],o);else if(!h)if(a===this.options.textNodeName){var p=this.options.tagValueProcessor(a,""+t[a]);s+=this.replaceEntitiesValue(p)}else{i.push(a);var u=this.checkStopNode(i);if(i.pop(),u){var l=""+t[a];s+=""===l?this.indentate(e)+"<"+a+this.closeTag(a)+this.tagEndChar:this.indentate(e)+"<"+a+">"+l+"</"+a+this.tagEndChar}else s+=this.buildTextValNode(t[a],a,"",e,i)}}else if(Array.isArray(t[a])){for(var c=t[a].length,f="",d="",g=0;g<c;g++){var m=t[a][g];if(void 0===m);else if(null===m)"?"===a[0]?s+=this.indentate(e)+"<"+a+"?"+this.tagEndChar:s+=this.indentate(e)+"<"+a+"/"+this.tagEndChar;else if("object"==typeof m)if(this.options.oneListGroup){i.push(a);var b=this.j2x(m,e+1,i);i.pop(),f+=b.val,this.options.attributesGroupName&&m.hasOwnProperty(this.options.attributesGroupName)&&(d+=b.attrStr)}else f+=this.processTextOrObjNode(m,a,e,i);else if(this.options.oneListGroup){var v=this.options.tagValueProcessor(a,m);f+=v=this.replaceEntitiesValue(v)}else{i.push(a);var N=this.checkStopNode(i);if(i.pop(),N){var y=""+m;f+=""===y?this.indentate(e)+"<"+a+this.closeTag(a)+this.tagEndChar:this.indentate(e)+"<"+a+">"+y+"</"+a+this.tagEndChar}else f+=this.buildTextValNode(m,a,"",e,i)}}this.options.oneListGroup&&(f=this.buildObjectNode(f,a,d,e)),s+=f}else if(this.options.attributesGroupName&&a===this.options.attributesGroupName)for(var x=Object.keys(t[a]),A=x.length,S=0;S<A;S++)r+=this.buildAttrPairStr(x[S],""+t[a][x[S]],o);else s+=this.processTextOrObjNode(t[a],a,e,i);return{attrStr:r,val:s}},b.prototype.buildAttrPairStr=function(t,e,i){return i||(e=this.options.attributeValueProcessor(t,""+e),e=this.replaceEntitiesValue(e)),this.options.suppressBooleanAttributes&&"true"===e?" "+t:" "+t+'="'+e+'"'},b.prototype.extractAttributes=function(t){if(!t||"object"!=typeof t)return null;var e={},i=!1;if(this.options.attributesGroupName&&t[this.options.attributesGroupName]){var r=t[this.options.attributesGroupName];for(var s in r)Object.prototype.hasOwnProperty.call(r,s)&&(e[s.startsWith(this.options.attributeNamePrefix)?s.substring(this.options.attributeNamePrefix.length):s]=r[s],i=!0)}else for(var n in t)if(Object.prototype.hasOwnProperty.call(t,n)){var o=this.isAttribute(n);o&&(e[o]=t[n],i=!0)}return i?e:null},b.prototype.buildRawContent=function(t){if("string"==typeof t)return t;if("object"!=typeof t||null===t)return String(t);if(void 0!==t[this.options.textNodeName])return t[this.options.textNodeName];var e="";for(var i in t)if(Object.prototype.hasOwnProperty.call(t,i)&&!(this.isAttribute(i)||this.options.attributesGroupName&&i===this.options.attributesGroupName)){var r=t[i];if(i===this.options.textNodeName)e+=r;else if(Array.isArray(r))for(var s,n=d(r);!(s=n()).done;){var o=s.value;if("string"==typeof o||"number"==typeof o)e+="<"+i+">"+o+"</"+i+">";else if("object"==typeof o&&null!==o){var a=this.buildRawContent(o),h=this.buildAttributesForStopNode(o);e+=""===a?"<"+i+h+"/>":"<"+i+h+">"+a+"</"+i+">"}}else if("object"==typeof r&&null!==r){var p=this.buildRawContent(r),u=this.buildAttributesForStopNode(r);e+=""===p?"<"+i+u+"/>":"<"+i+u+">"+p+"</"+i+">"}else e+="<"+i+">"+r+"</"+i+">"}return e},b.prototype.buildAttributesForStopNode=function(t){if(!t||"object"!=typeof t)return"";var e="";if(this.options.attributesGroupName&&t[this.options.attributesGroupName]){var i=t[this.options.attributesGroupName];for(var r in i)if(Object.prototype.hasOwnProperty.call(i,r)){var s=r.startsWith(this.options.attributeNamePrefix)?r.substring(this.options.attributeNamePrefix.length):r,n=i[r];!0===n&&this.options.suppressBooleanAttributes?e+=" "+s:e+=" "+s+'="'+n+'"'}}else for(var o in t)if(Object.prototype.hasOwnProperty.call(t,o)){var a=this.isAttribute(o);if(a){var h=t[o];!0===h&&this.options.suppressBooleanAttributes?e+=" "+a:e+=" "+a+'="'+h+'"'}}return e},b.prototype.buildObjectNode=function(t,e,i,r){if(""===t)return"?"===e[0]?this.indentate(r)+"<"+e+i+"?"+this.tagEndChar:this.indentate(r)+"<"+e+i+this.closeTag(e)+this.tagEndChar;var s="</"+e+this.tagEndChar,n="";return"?"===e[0]&&(n="?",s=""),!i&&""!==i||-1!==t.indexOf("<")?!1!==this.options.commentPropName&&e===this.options.commentPropName&&0===n.length?this.indentate(r)+"\x3c!--"+t+"--\x3e"+this.newLine:this.indentate(r)+"<"+e+i+n+this.tagEndChar+t+this.indentate(r)+s:this.indentate(r)+"<"+e+i+n+">"+t+s},b.prototype.closeTag=function(t){var e="";return-1!==this.options.unpairedTags.indexOf(t)?this.options.suppressUnpairedNode||(e="/"):e=this.options.suppressEmptyNode?"/":"></"+t,e},b.prototype.checkStopNode=function(t){if(!this.stopNodeExpressions||0===this.stopNodeExpressions.length)return!1;for(var e=0;e<this.stopNodeExpressions.length;e++)if(t.matches(this.stopNodeExpressions[e]))return!0;return!1},b.prototype.buildTextValNode=function(t,e,i,r,s){if(!1!==this.options.cdataPropName&&e===this.options.cdataPropName)return this.indentate(r)+"<![CDATA["+t+"]]>"+this.newLine;if(!1!==this.options.commentPropName&&e===this.options.commentPropName)return this.indentate(r)+"\x3c!--"+t+"--\x3e"+this.newLine;if("?"===e[0])return this.indentate(r)+"<"+e+i+"?"+this.tagEndChar;var n=this.options.tagValueProcessor(e,t);return""===(n=this.replaceEntitiesValue(n))?this.indentate(r)+"<"+e+i+this.closeTag(e)+this.tagEndChar:this.indentate(r)+"<"+e+i+">"+n+"</"+e+this.tagEndChar},b.prototype.replaceEntitiesValue=function(t){if(t&&t.length>0&&this.options.processEntities)for(var e=0;e<this.options.entities.length;e++){var i=this.options.entities[e];t=t.replace(i.regex,i.val)}return t},e})()); | ||
| //# sourceMappingURL=fxb.min.js.map |
Sorry, the diff of this file is too big to display
+6
-1
@@ -0,1 +1,2 @@ | ||
| const { Expression } = require('path-expression-matcher'); | ||
@@ -114,5 +115,9 @@ | ||
| * | ||
| * Accepts string patterns or Expression objects from path-expression-matcher | ||
| * | ||
| * String patterns starting with "*." are automatically converted to ".." for backward compatibility | ||
| * | ||
| * Defaults to `[]` | ||
| */ | ||
| stopNodes?: string[]; | ||
| stopNodes?: (string | Expression)[]; | ||
@@ -119,0 +124,0 @@ /** |
+7
-5
| { | ||
| "name": "fast-xml-builder", | ||
| "version": "1.0.0", | ||
| "version": "1.1.0", | ||
| "description": "Build XML from JSON without C/C++ based libraries", | ||
@@ -62,2 +62,4 @@ "main": "./lib/fxb.cjs", | ||
| "eslint": "^8.3.0", | ||
| "fast-xml-parser": "^5.3.9", | ||
| "he": "^1.2.0", | ||
| "jasmine": "^5.6.0", | ||
@@ -68,5 +70,3 @@ "prettier": "^3.5.1", | ||
| "webpack": "^5.64.4", | ||
| "webpack-cli": "^4.9.1", | ||
| "fast-xml-parser": "^5.3.9", | ||
| "he": "^1.2.0" | ||
| "webpack-cli": "^4.9.1" | ||
| }, | ||
@@ -79,3 +79,5 @@ "funding": [ | ||
| ], | ||
| "dependencies": {} | ||
| "dependencies": { | ||
| "path-expression-matcher": "^1.1.2" | ||
| } | ||
| } |
+1
-1
@@ -16,3 +16,3 @@ # fast-xml-builder | ||
| ```javascript | ||
| import { XMLBuilder } from 'fast-xml-builder'; | ||
| import XMLBuilder from 'fast-xml-builder'; | ||
@@ -19,0 +19,0 @@ const builder = new XMLBuilder(); |
+8
-2
@@ -0,1 +1,3 @@ | ||
| import { Expression } from 'path-expression-matcher'; | ||
| export type XmlBuilderOptions = { | ||
@@ -112,5 +114,9 @@ /** | ||
| * | ||
| * Accepts string patterns or Expression objects from path-expression-matcher | ||
| * | ||
| * String patterns starting with "*." are automatically converted to ".." for backward compatibility | ||
| * | ||
| * Defaults to `[]` | ||
| */ | ||
| stopNodes?: string[]; | ||
| stopNodes?: (string | Expression)[]; | ||
@@ -157,2 +163,2 @@ /** | ||
| build(jObj: any): string; | ||
| } | ||
| } |
+262
-21
@@ -5,2 +5,3 @@ 'use strict'; | ||
| import getIgnoreAttributesFn from "./ignoreAttributes.js"; | ||
| import { Expression, Matcher } from 'path-expression-matcher'; | ||
@@ -38,3 +39,4 @@ const defaultOptions = { | ||
| // transformAttributeName: false, | ||
| oneListGroup: false | ||
| oneListGroup: false, | ||
| jPath: true // When true, callbacks receive string jPath; when false, receive Matcher instance | ||
| }; | ||
@@ -44,2 +46,29 @@ | ||
| this.options = Object.assign({}, defaultOptions, options); | ||
| // Convert old-style stopNodes for backward compatibility | ||
| // Old syntax: "*.tag" meant "tag anywhere in tree" | ||
| // New syntax: "..tag" means "tag anywhere in tree" | ||
| if (this.options.stopNodes && Array.isArray(this.options.stopNodes)) { | ||
| this.options.stopNodes = this.options.stopNodes.map(node => { | ||
| if (typeof node === 'string' && node.startsWith('*.')) { | ||
| // Convert old wildcard syntax to deep wildcard | ||
| return '..' + node.substring(2); | ||
| } | ||
| return node; | ||
| }); | ||
| } | ||
| // Pre-compile stopNode expressions for pattern matching | ||
| this.stopNodeExpressions = []; | ||
| if (this.options.stopNodes && Array.isArray(this.options.stopNodes)) { | ||
| for (let i = 0; i < this.options.stopNodes.length; i++) { | ||
| const node = this.options.stopNodes[i]; | ||
| if (typeof node === 'string') { | ||
| this.stopNodeExpressions.push(new Expression(node)); | ||
| } else if (node instanceof Expression) { | ||
| this.stopNodeExpressions.push(node); | ||
| } | ||
| } | ||
| } | ||
| if (this.options.ignoreAttributes === true || this.options.attributesGroupName) { | ||
@@ -79,10 +108,18 @@ this.isAttribute = function (/*a*/) { | ||
| } | ||
| return this.j2x(jObj, 0, []).val; | ||
| // Initialize matcher for path tracking | ||
| const matcher = new Matcher(); | ||
| return this.j2x(jObj, 0, matcher).val; | ||
| } | ||
| }; | ||
| Builder.prototype.j2x = function (jObj, level, ajPath) { | ||
| Builder.prototype.j2x = function (jObj, level, matcher) { | ||
| let attrStr = ''; | ||
| let val = ''; | ||
| const jPath = ajPath.join('.') | ||
| // Get jPath based on option: string for backward compatibility, or Matcher for new features | ||
| const jPath = this.options.jPath ? matcher.toString() : matcher; | ||
| // Check if current node is a stopNode (will be used for attribute encoding) | ||
| const isCurrentStopNode = this.checkStopNode(matcher); | ||
| for (let key in jObj) { | ||
@@ -108,3 +145,3 @@ if (!Object.prototype.hasOwnProperty.call(jObj, key)) continue; | ||
| } else if (jObj[key] instanceof Date) { | ||
| val += this.buildTextValNode(jObj[key], key, '', level); | ||
| val += this.buildTextValNode(jObj[key], key, '', level, matcher); | ||
| } else if (typeof jObj[key] !== 'object') { | ||
@@ -114,3 +151,3 @@ //premitive type | ||
| if (attr && !this.ignoreAttributesFn(attr, jPath)) { | ||
| attrStr += this.buildAttrPairStr(attr, '' + jObj[key]); | ||
| attrStr += this.buildAttrPairStr(attr, '' + jObj[key], isCurrentStopNode); | ||
| } else if (!attr) { | ||
@@ -122,3 +159,18 @@ //tag value | ||
| } else { | ||
| val += this.buildTextValNode(jObj[key], key, '', level); | ||
| // Check if this is a stopNode before building | ||
| matcher.push(key); | ||
| const isStopNode = this.checkStopNode(matcher); | ||
| matcher.pop(); | ||
| if (isStopNode) { | ||
| // Build as raw content without encoding | ||
| const textValue = '' + jObj[key]; | ||
| if (textValue === '') { | ||
| val += this.indentate(level) + '<' + key + this.closeTag(key) + this.tagEndChar; | ||
| } else { | ||
| val += this.indentate(level) + '<' + key + '>' + textValue + '</' + key + this.tagEndChar; | ||
| } | ||
| } else { | ||
| val += this.buildTextValNode(jObj[key], key, '', level, matcher); | ||
| } | ||
| } | ||
@@ -141,3 +193,8 @@ } | ||
| if (this.options.oneListGroup) { | ||
| const result = this.j2x(item, level + 1, ajPath.concat(key)); | ||
| // Push tag to matcher before recursive call | ||
| matcher.push(key); | ||
| const result = this.j2x(item, level + 1, matcher); | ||
| // Pop tag from matcher after recursive call | ||
| matcher.pop(); | ||
| listTagVal += result.val; | ||
@@ -148,3 +205,3 @@ if (this.options.attributesGroupName && item.hasOwnProperty(this.options.attributesGroupName)) { | ||
| } else { | ||
| listTagVal += this.processTextOrObjNode(item, key, level, ajPath) | ||
| listTagVal += this.processTextOrObjNode(item, key, level, matcher) | ||
| } | ||
@@ -157,3 +214,18 @@ } else { | ||
| } else { | ||
| listTagVal += this.buildTextValNode(item, key, '', level); | ||
| // Check if this is a stopNode before building | ||
| matcher.push(key); | ||
| const isStopNode = this.checkStopNode(matcher); | ||
| matcher.pop(); | ||
| if (isStopNode) { | ||
| // Build as raw content without encoding | ||
| const textValue = '' + item; | ||
| if (textValue === '') { | ||
| listTagVal += this.indentate(level) + '<' + key + this.closeTag(key) + this.tagEndChar; | ||
| } else { | ||
| listTagVal += this.indentate(level) + '<' + key + '>' + textValue + '</' + key + this.tagEndChar; | ||
| } | ||
| } else { | ||
| listTagVal += this.buildTextValNode(item, key, '', level, matcher); | ||
| } | ||
| } | ||
@@ -172,6 +244,6 @@ } | ||
| for (let j = 0; j < L; j++) { | ||
| attrStr += this.buildAttrPairStr(Ks[j], '' + jObj[key][Ks[j]]); | ||
| attrStr += this.buildAttrPairStr(Ks[j], '' + jObj[key][Ks[j]], isCurrentStopNode); | ||
| } | ||
| } else { | ||
| val += this.processTextOrObjNode(jObj[key], key, level, ajPath) | ||
| val += this.processTextOrObjNode(jObj[key], key, level, matcher) | ||
| } | ||
@@ -183,5 +255,7 @@ } | ||
| Builder.prototype.buildAttrPairStr = function (attrName, val) { | ||
| val = this.options.attributeValueProcessor(attrName, '' + val); | ||
| val = this.replaceEntitiesValue(val); | ||
| Builder.prototype.buildAttrPairStr = function (attrName, val, isStopNode) { | ||
| if (!isStopNode) { | ||
| val = this.options.attributeValueProcessor(attrName, '' + val); | ||
| val = this.replaceEntitiesValue(val); | ||
| } | ||
| if (this.options.suppressBooleanAttributes && val === "true") { | ||
@@ -192,6 +266,26 @@ return ' ' + attrName; | ||
| function processTextOrObjNode(object, key, level, ajPath) { | ||
| const result = this.j2x(object, level + 1, ajPath.concat(key)); | ||
| function processTextOrObjNode(object, key, level, matcher) { | ||
| // Extract attributes to pass to matcher | ||
| const attrValues = this.extractAttributes(object); | ||
| // Push tag to matcher before recursion WITH attributes | ||
| matcher.push(key, attrValues); | ||
| // Check if this entire node is a stopNode | ||
| const isStopNode = this.checkStopNode(matcher); | ||
| if (isStopNode) { | ||
| // For stopNodes, build raw content without entity encoding | ||
| const rawContent = this.buildRawContent(object); | ||
| const attrStr = this.buildAttributesForStopNode(object); | ||
| matcher.pop(); | ||
| return this.buildObjectNode(rawContent, key, attrStr, level); | ||
| } | ||
| const result = this.j2x(object, level + 1, matcher); | ||
| // Pop tag from matcher after recursion | ||
| matcher.pop(); | ||
| if (object[this.options.textNodeName] !== undefined && Object.keys(object).length === 1) { | ||
| return this.buildTextValNode(object[this.options.textNodeName], key, result.attrStr, level); | ||
| return this.buildTextValNode(object[this.options.textNodeName], key, result.attrStr, level, matcher); | ||
| } else { | ||
@@ -202,2 +296,138 @@ return this.buildObjectNode(result.val, key, result.attrStr, level); | ||
| // Helper method to extract attributes from an object | ||
| Builder.prototype.extractAttributes = function (obj) { | ||
| if (!obj || typeof obj !== 'object') return null; | ||
| const attrValues = {}; | ||
| let hasAttrs = false; | ||
| // Check for attributesGroupName (when attributes are grouped) | ||
| if (this.options.attributesGroupName && obj[this.options.attributesGroupName]) { | ||
| const attrGroup = obj[this.options.attributesGroupName]; | ||
| for (let attrKey in attrGroup) { | ||
| if (!Object.prototype.hasOwnProperty.call(attrGroup, attrKey)) continue; | ||
| // Remove attribute prefix if present | ||
| const cleanKey = attrKey.startsWith(this.options.attributeNamePrefix) | ||
| ? attrKey.substring(this.options.attributeNamePrefix.length) | ||
| : attrKey; | ||
| attrValues[cleanKey] = attrGroup[attrKey]; | ||
| hasAttrs = true; | ||
| } | ||
| } else { | ||
| // Look for individual attributes (prefixed with attributeNamePrefix) | ||
| for (let key in obj) { | ||
| if (!Object.prototype.hasOwnProperty.call(obj, key)) continue; | ||
| const attr = this.isAttribute(key); | ||
| if (attr) { | ||
| attrValues[attr] = obj[key]; | ||
| hasAttrs = true; | ||
| } | ||
| } | ||
| } | ||
| return hasAttrs ? attrValues : null; | ||
| }; | ||
| // Build raw content for stopNode without entity encoding | ||
| Builder.prototype.buildRawContent = function (obj) { | ||
| if (typeof obj === 'string') { | ||
| return obj; // Already a string, return as-is | ||
| } | ||
| if (typeof obj !== 'object' || obj === null) { | ||
| return String(obj); | ||
| } | ||
| // Check if this is a stopNode data from parser: { "#text": "raw xml", "@_attr": "val" } | ||
| if (obj[this.options.textNodeName] !== undefined) { | ||
| return obj[this.options.textNodeName]; // Return raw text without encoding | ||
| } | ||
| // Build raw XML from nested structure | ||
| let content = ''; | ||
| for (let key in obj) { | ||
| if (!Object.prototype.hasOwnProperty.call(obj, key)) continue; | ||
| // Skip attributes | ||
| if (this.isAttribute(key)) continue; | ||
| if (this.options.attributesGroupName && key === this.options.attributesGroupName) continue; | ||
| const value = obj[key]; | ||
| if (key === this.options.textNodeName) { | ||
| content += value; // Raw text | ||
| } else if (Array.isArray(value)) { | ||
| // Array of same tag | ||
| for (let item of value) { | ||
| if (typeof item === 'string' || typeof item === 'number') { | ||
| content += `<${key}>${item}</${key}>`; | ||
| } else if (typeof item === 'object' && item !== null) { | ||
| const nestedContent = this.buildRawContent(item); | ||
| const nestedAttrs = this.buildAttributesForStopNode(item); | ||
| if (nestedContent === '') { | ||
| content += `<${key}${nestedAttrs}/>`; | ||
| } else { | ||
| content += `<${key}${nestedAttrs}>${nestedContent}</${key}>`; | ||
| } | ||
| } | ||
| } | ||
| } else if (typeof value === 'object' && value !== null) { | ||
| // Nested object | ||
| const nestedContent = this.buildRawContent(value); | ||
| const nestedAttrs = this.buildAttributesForStopNode(value); | ||
| if (nestedContent === '') { | ||
| content += `<${key}${nestedAttrs}/>`; | ||
| } else { | ||
| content += `<${key}${nestedAttrs}>${nestedContent}</${key}>`; | ||
| } | ||
| } else { | ||
| // Primitive value | ||
| content += `<${key}>${value}</${key}>`; | ||
| } | ||
| } | ||
| return content; | ||
| }; | ||
| // Build attribute string for stopNode (no entity encoding) | ||
| Builder.prototype.buildAttributesForStopNode = function (obj) { | ||
| if (!obj || typeof obj !== 'object') return ''; | ||
| let attrStr = ''; | ||
| // Check for attributesGroupName (when attributes are grouped) | ||
| if (this.options.attributesGroupName && obj[this.options.attributesGroupName]) { | ||
| const attrGroup = obj[this.options.attributesGroupName]; | ||
| for (let attrKey in attrGroup) { | ||
| if (!Object.prototype.hasOwnProperty.call(attrGroup, attrKey)) continue; | ||
| const cleanKey = attrKey.startsWith(this.options.attributeNamePrefix) | ||
| ? attrKey.substring(this.options.attributeNamePrefix.length) | ||
| : attrKey; | ||
| const val = attrGroup[attrKey]; | ||
| if (val === true && this.options.suppressBooleanAttributes) { | ||
| attrStr += ' ' + cleanKey; | ||
| } else { | ||
| attrStr += ' ' + cleanKey + '="' + val + '"'; // No encoding for stopNode | ||
| } | ||
| } | ||
| } else { | ||
| // Look for individual attributes | ||
| for (let key in obj) { | ||
| if (!Object.prototype.hasOwnProperty.call(obj, key)) continue; | ||
| const attr = this.isAttribute(key); | ||
| if (attr) { | ||
| const val = obj[key]; | ||
| if (val === true && this.options.suppressBooleanAttributes) { | ||
| attrStr += ' ' + attr; | ||
| } else { | ||
| attrStr += ' ' + attr + '="' + val + '"'; // No encoding for stopNode | ||
| } | ||
| } | ||
| } | ||
| } | ||
| return attrStr; | ||
| }; | ||
| Builder.prototype.buildObjectNode = function (val, key, attrStr, level) { | ||
@@ -245,2 +475,13 @@ if (val === "") { | ||
| Builder.prototype.checkStopNode = function (matcher) { | ||
| if (!this.stopNodeExpressions || this.stopNodeExpressions.length === 0) return false; | ||
| for (let i = 0; i < this.stopNodeExpressions.length; i++) { | ||
| if (matcher.matches(this.stopNodeExpressions[i])) { | ||
| return true; | ||
| } | ||
| } | ||
| return false; | ||
| } | ||
| function buildEmptyObjNode(val, key, attrStr, level) { | ||
@@ -258,3 +499,3 @@ if (val !== '') { | ||
| Builder.prototype.buildTextValNode = function (val, key, attrStr, level) { | ||
| Builder.prototype.buildTextValNode = function (val, key, attrStr, level, matcher) { | ||
| if (this.options.cdataPropName !== false && key === this.options.cdataPropName) { | ||
@@ -267,2 +508,3 @@ return this.indentate(level) + `<![CDATA[${val}]]>` + this.newLine; | ||
| } else { | ||
| // Normal processing: apply tagValueProcessor and entity replacement | ||
| let textValue = this.options.tagValueProcessor(key, val); | ||
@@ -301,3 +543,2 @@ textValue = this.replaceEntitiesValue(textValue); | ||
| } | ||
| } | ||
| } |
+161
-18
@@ -0,1 +1,3 @@ | ||
| import { Expression, Matcher } from 'path-expression-matcher'; | ||
| const EOL = "\n"; | ||
@@ -14,6 +16,23 @@ | ||
| } | ||
| return arrToStr(jArray, options, "", indentation); | ||
| // Pre-compile stopNode expressions for pattern matching | ||
| const stopNodeExpressions = []; | ||
| if (options.stopNodes && Array.isArray(options.stopNodes)) { | ||
| for (let i = 0; i < options.stopNodes.length; i++) { | ||
| const node = options.stopNodes[i]; | ||
| if (typeof node === 'string') { | ||
| stopNodeExpressions.push(new Expression(node)); | ||
| } else if (node instanceof Expression) { | ||
| stopNodeExpressions.push(node); | ||
| } | ||
| } | ||
| } | ||
| // Initialize matcher for path tracking | ||
| const matcher = new Matcher(); | ||
| return arrToStr(jArray, options, indentation, matcher, stopNodeExpressions); | ||
| } | ||
| function arrToStr(arr, options, jPath, indentation) { | ||
| function arrToStr(arr, options, indentation, matcher, stopNodeExpressions) { | ||
| let xmlStr = ""; | ||
@@ -38,9 +57,14 @@ let isPreviousElementTag = false; | ||
| let newJPath = ""; | ||
| if (jPath.length === 0) newJPath = tagName | ||
| else newJPath = `${jPath}.${tagName}`; | ||
| // Extract attributes from ":@" property | ||
| const attrValues = extractAttributeValues(tagObj[":@"], options); | ||
| // Push tag to matcher WITH attributes | ||
| matcher.push(tagName, attrValues); | ||
| // Check if this is a stop node using Expression matching | ||
| const isStopNode = checkStopNode(matcher, stopNodeExpressions); | ||
| if (tagName === options.textNodeName) { | ||
| let tagText = tagObj[tagName]; | ||
| if (!isStopNode(newJPath, options)) { | ||
| if (!isStopNode) { | ||
| tagText = options.tagValueProcessor(tagName, tagText); | ||
@@ -54,2 +78,3 @@ tagText = replaceEntitiesValue(tagText, options); | ||
| isPreviousElementTag = false; | ||
| matcher.pop(); | ||
| continue; | ||
@@ -62,2 +87,3 @@ } else if (tagName === options.cdataPropName) { | ||
| isPreviousElementTag = false; | ||
| matcher.pop(); | ||
| continue; | ||
@@ -67,5 +93,6 @@ } else if (tagName === options.commentPropName) { | ||
| isPreviousElementTag = true; | ||
| matcher.pop(); | ||
| continue; | ||
| } else if (tagName[0] === "?") { | ||
| const attStr = attr_to_str(tagObj[":@"], options); | ||
| const attStr = attr_to_str(tagObj[":@"], options, isStopNode); | ||
| const tempInd = tagName === "?xml" ? "" : indentation; | ||
@@ -76,4 +103,6 @@ let piTextNodeName = tagObj[tagName][0][options.textNodeName]; | ||
| isPreviousElementTag = true; | ||
| matcher.pop(); | ||
| continue; | ||
| } | ||
| let newIdentation = indentation; | ||
@@ -83,5 +112,15 @@ if (newIdentation !== "") { | ||
| } | ||
| const attStr = attr_to_str(tagObj[":@"], options); | ||
| // Pass isStopNode to attr_to_str so attributes are also not processed for stopNodes | ||
| const attStr = attr_to_str(tagObj[":@"], options, isStopNode); | ||
| const tagStart = indentation + `<${tagName}${attStr}`; | ||
| const tagValue = arrToStr(tagObj[tagName], options, newJPath, newIdentation); | ||
| // If this is a stopNode, get raw content without processing | ||
| let tagValue; | ||
| if (isStopNode) { | ||
| tagValue = getRawContent(tagObj[tagName], options); | ||
| } else { | ||
| tagValue = arrToStr(tagObj[tagName], options, newIdentation, matcher, stopNodeExpressions); | ||
| } | ||
| if (options.unpairedTags.indexOf(tagName) !== -1) { | ||
@@ -104,2 +143,5 @@ if (options.suppressUnpairedNode) xmlStr += tagStart + ">"; | ||
| isPreviousElementTag = true; | ||
| // Pop tag from matcher | ||
| matcher.pop(); | ||
| } | ||
@@ -110,2 +152,92 @@ | ||
| /** | ||
| * Extract attribute values from the ":@" object and return as plain object | ||
| * for passing to matcher.push() | ||
| */ | ||
| function extractAttributeValues(attrMap, options) { | ||
| if (!attrMap || options.ignoreAttributes) return null; | ||
| const attrValues = {}; | ||
| let hasAttrs = false; | ||
| for (let attr in attrMap) { | ||
| if (!Object.prototype.hasOwnProperty.call(attrMap, attr)) continue; | ||
| // Remove the attribute prefix to get clean attribute name | ||
| const cleanAttrName = attr.startsWith(options.attributeNamePrefix) | ||
| ? attr.substr(options.attributeNamePrefix.length) | ||
| : attr; | ||
| attrValues[cleanAttrName] = attrMap[attr]; | ||
| hasAttrs = true; | ||
| } | ||
| return hasAttrs ? attrValues : null; | ||
| } | ||
| /** | ||
| * Extract raw content from a stopNode without any processing | ||
| * This preserves the content exactly as-is, including special characters | ||
| */ | ||
| function getRawContent(arr, options) { | ||
| if (!Array.isArray(arr)) { | ||
| // Non-array values return as-is | ||
| if (arr !== undefined && arr !== null) { | ||
| return arr.toString(); | ||
| } | ||
| return ""; | ||
| } | ||
| let content = ""; | ||
| for (let i = 0; i < arr.length; i++) { | ||
| const item = arr[i]; | ||
| const tagName = propName(item); | ||
| if (tagName === options.textNodeName) { | ||
| // Raw text content - NO processing, NO entity replacement | ||
| content += item[tagName]; | ||
| } else if (tagName === options.cdataPropName) { | ||
| // CDATA content | ||
| content += item[tagName][0][options.textNodeName]; | ||
| } else if (tagName === options.commentPropName) { | ||
| // Comment content | ||
| content += item[tagName][0][options.textNodeName]; | ||
| } else if (tagName && tagName[0] === "?") { | ||
| // Processing instruction - skip for stopNodes | ||
| continue; | ||
| } else if (tagName) { | ||
| // Nested tags within stopNode | ||
| // Recursively get raw content and reconstruct the tag | ||
| // For stopNodes, we don't process attributes either | ||
| const attStr = attr_to_str_raw(item[":@"], options); | ||
| const nestedContent = getRawContent(item[tagName], options); | ||
| if (!nestedContent || nestedContent.length === 0) { | ||
| content += `<${tagName}${attStr}/>`; | ||
| } else { | ||
| content += `<${tagName}${attStr}>${nestedContent}</${tagName}>`; | ||
| } | ||
| } | ||
| } | ||
| return content; | ||
| } | ||
| /** | ||
| * Build attribute string for stopNodes - NO entity replacement | ||
| */ | ||
| function attr_to_str_raw(attrMap, options) { | ||
| let attrStr = ""; | ||
| if (attrMap && !options.ignoreAttributes) { | ||
| for (let attr in attrMap) { | ||
| if (!Object.prototype.hasOwnProperty.call(attrMap, attr)) continue; | ||
| // For stopNodes, use raw value without processing | ||
| let attrVal = attrMap[attr]; | ||
| if (attrVal === true && options.suppressBooleanAttributes) { | ||
| attrStr += ` ${attr.substr(options.attributeNamePrefix.length)}`; | ||
| } else { | ||
| attrStr += ` ${attr.substr(options.attributeNamePrefix.length)}="${attrVal}"`; | ||
| } | ||
| } | ||
| } | ||
| return attrStr; | ||
| } | ||
| function propName(obj) { | ||
@@ -120,3 +252,3 @@ const keys = Object.keys(obj); | ||
| function attr_to_str(attrMap, options) { | ||
| function attr_to_str(attrMap, options, isStopNode) { | ||
| let attrStr = ""; | ||
@@ -126,4 +258,13 @@ if (attrMap && !options.ignoreAttributes) { | ||
| if (!Object.prototype.hasOwnProperty.call(attrMap, attr)) continue; | ||
| let attrVal = options.attributeValueProcessor(attr, attrMap[attr]); | ||
| attrVal = replaceEntitiesValue(attrVal, options); | ||
| let attrVal; | ||
| if (isStopNode) { | ||
| // For stopNodes, use raw value without any processing | ||
| attrVal = attrMap[attr]; | ||
| } else { | ||
| // Normal processing: apply attributeValueProcessor and entity replacement | ||
| attrVal = options.attributeValueProcessor(attr, attrMap[attr]); | ||
| attrVal = replaceEntitiesValue(attrVal, options); | ||
| } | ||
| if (attrVal === true && options.suppressBooleanAttributes) { | ||
@@ -139,7 +280,9 @@ attrStr += ` ${attr.substr(options.attributeNamePrefix.length)}`; | ||
| function isStopNode(jPath, options) { | ||
| jPath = jPath.substr(0, jPath.length - options.textNodeName.length - 1); | ||
| let tagName = jPath.substr(jPath.lastIndexOf(".") + 1); | ||
| for (let index in options.stopNodes) { | ||
| if (options.stopNodes[index] === jPath || options.stopNodes[index] === "*." + tagName) return true; | ||
| function checkStopNode(matcher, stopNodeExpressions) { | ||
| if (!stopNodeExpressions || stopNodeExpressions.length === 0) return false; | ||
| for (let i = 0; i < stopNodeExpressions.length; i++) { | ||
| if (matcher.matches(stopNodeExpressions[i])) { | ||
| return true; | ||
| } | ||
| } | ||
@@ -157,2 +300,2 @@ return false; | ||
| return textValue; | ||
| } | ||
| } |
| (()=>{"use strict";var t={d:(e,i)=>{for(var s in i)t.o(i,s)&&!t.o(e,s)&&Object.defineProperty(e,s,{enumerable:!0,get:i[s]})},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={};function i(t,e){let i="";return e.format&&e.indentBy.length>0&&(i="\n"),s(t,e,"",i)}function s(t,e,i,p){let u="",h=!1;if(!Array.isArray(t)){if(null!=t){let i=t.toString();return i=a(i,e),i}return""}for(let l=0;l<t.length;l++){const d=t[l],c=n(d);if(void 0===c)continue;let f="";if(f=0===i.length?c:`${i}.${c}`,c===e.textNodeName){let t=d[c];r(f,e)||(t=e.tagValueProcessor(c,t),t=a(t,e)),h&&(u+=p),u+=t,h=!1;continue}if(c===e.cdataPropName){h&&(u+=p),u+=`<![CDATA[${d[c][0][e.textNodeName]}]]>`,h=!1;continue}if(c===e.commentPropName){u+=p+`\x3c!--${d[c][0][e.textNodeName]}--\x3e`,h=!0;continue}if("?"===c[0]){const t=o(d[":@"],e),i="?xml"===c?"":p;let s=d[c][0][e.textNodeName];s=0!==s.length?" "+s:"",u+=i+`<${c}${s}${t}?>`,h=!0;continue}let g=p;""!==g&&(g+=e.indentBy);const N=p+`<${c}${o(d[":@"],e)}`,b=s(d[c],e,f,g);-1!==e.unpairedTags.indexOf(c)?e.suppressUnpairedNode?u+=N+">":u+=N+"/>":b&&0!==b.length||!e.suppressEmptyNode?b&&b.endsWith(">")?u+=N+`>${b}${p}</${c}>`:(u+=N+">",b&&""!==p&&(b.includes("/>")||b.includes("</"))?u+=p+e.indentBy+b+p:u+=b,u+=`</${c}>`):u+=N+"/>",h=!0}return u}function n(t){const e=Object.keys(t);for(let i=0;i<e.length;i++){const s=e[i];if(Object.prototype.hasOwnProperty.call(t,s)&&":@"!==s)return s}}function o(t,e){let i="";if(t&&!e.ignoreAttributes)for(let s in t){if(!Object.prototype.hasOwnProperty.call(t,s))continue;let n=e.attributeValueProcessor(s,t[s]);n=a(n,e),!0===n&&e.suppressBooleanAttributes?i+=` ${s.substr(e.attributeNamePrefix.length)}`:i+=` ${s.substr(e.attributeNamePrefix.length)}="${n}"`}return i}function r(t,e){let i=(t=t.substr(0,t.length-e.textNodeName.length-1)).substr(t.lastIndexOf(".")+1);for(let s in e.stopNodes)if(e.stopNodes[s]===t||e.stopNodes[s]==="*."+i)return!0;return!1}function a(t,e){if(t&&t.length>0&&e.processEntities)for(let i=0;i<e.entities.length;i++){const s=e.entities[i];t=t.replace(s.regex,s.val)}return t}t.r(e),t.d(e,{default:()=>u});const p={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 u(t){var e;this.options=Object.assign({},p,t),!0===this.options.ignoreAttributes||this.options.attributesGroupName?this.isAttribute=function(){return!1}:(this.ignoreAttributesFn="function"==typeof(e=this.options.ignoreAttributes)?e:Array.isArray(e)?t=>{for(const i of e){if("string"==typeof i&&t===i)return!0;if(i instanceof RegExp&&i.test(t))return!0}}:()=>!1,this.attrPrefixLen=this.options.attributeNamePrefix.length,this.isAttribute=d),this.processTextOrObjNode=h,this.options.format?(this.indentate=l,this.tagEndChar=">\n",this.newLine="\n"):(this.indentate=function(){return""},this.tagEndChar=">",this.newLine="")}function h(t,e,i,s){const n=this.j2x(t,i+1,s.concat(e));return void 0!==t[this.options.textNodeName]&&1===Object.keys(t).length?this.buildTextValNode(t[this.options.textNodeName],e,n.attrStr,i):this.buildObjectNode(n.val,e,n.attrStr,i)}function l(t){return this.options.indentBy.repeat(t)}function d(t){return!(!t.startsWith(this.options.attributeNamePrefix)||t===this.options.textNodeName)&&t.substr(this.attrPrefixLen)}u.prototype.build=function(t){return this.options.preserveOrder?i(t,this.options):(Array.isArray(t)&&this.options.arrayNodeName&&this.options.arrayNodeName.length>1&&(t={[this.options.arrayNodeName]:t}),this.j2x(t,0,[]).val)},u.prototype.j2x=function(t,e,i){let s="",n="";const o=i.join(".");for(let r in t)if(Object.prototype.hasOwnProperty.call(t,r))if(void 0===t[r])this.isAttribute(r)&&(n+="");else if(null===t[r])this.isAttribute(r)||r===this.options.cdataPropName?n+="":"?"===r[0]?n+=this.indentate(e)+"<"+r+"?"+this.tagEndChar:n+=this.indentate(e)+"<"+r+"/"+this.tagEndChar;else if(t[r]instanceof Date)n+=this.buildTextValNode(t[r],r,"",e);else if("object"!=typeof t[r]){const i=this.isAttribute(r);if(i&&!this.ignoreAttributesFn(i,o))s+=this.buildAttrPairStr(i,""+t[r]);else if(!i)if(r===this.options.textNodeName){let e=this.options.tagValueProcessor(r,""+t[r]);n+=this.replaceEntitiesValue(e)}else n+=this.buildTextValNode(t[r],r,"",e)}else if(Array.isArray(t[r])){const s=t[r].length;let o="",a="";for(let p=0;p<s;p++){const s=t[r][p];if(void 0===s);else if(null===s)"?"===r[0]?n+=this.indentate(e)+"<"+r+"?"+this.tagEndChar:n+=this.indentate(e)+"<"+r+"/"+this.tagEndChar;else if("object"==typeof s)if(this.options.oneListGroup){const t=this.j2x(s,e+1,i.concat(r));o+=t.val,this.options.attributesGroupName&&s.hasOwnProperty(this.options.attributesGroupName)&&(a+=t.attrStr)}else o+=this.processTextOrObjNode(s,r,e,i);else if(this.options.oneListGroup){let t=this.options.tagValueProcessor(r,s);t=this.replaceEntitiesValue(t),o+=t}else o+=this.buildTextValNode(s,r,"",e)}this.options.oneListGroup&&(o=this.buildObjectNode(o,r,a,e)),n+=o}else if(this.options.attributesGroupName&&r===this.options.attributesGroupName){const e=Object.keys(t[r]),i=e.length;for(let n=0;n<i;n++)s+=this.buildAttrPairStr(e[n],""+t[r][e[n]])}else n+=this.processTextOrObjNode(t[r],r,e,i);return{attrStr:s,val:n}},u.prototype.buildAttrPairStr=function(t,e){return e=this.options.attributeValueProcessor(t,""+e),e=this.replaceEntitiesValue(e),this.options.suppressBooleanAttributes&&"true"===e?" "+t:" "+t+'="'+e+'"'},u.prototype.buildObjectNode=function(t,e,i,s){if(""===t)return"?"===e[0]?this.indentate(s)+"<"+e+i+"?"+this.tagEndChar:this.indentate(s)+"<"+e+i+this.closeTag(e)+this.tagEndChar;{let n="</"+e+this.tagEndChar,o="";return"?"===e[0]&&(o="?",n=""),!i&&""!==i||-1!==t.indexOf("<")?!1!==this.options.commentPropName&&e===this.options.commentPropName&&0===o.length?this.indentate(s)+`\x3c!--${t}--\x3e`+this.newLine:this.indentate(s)+"<"+e+i+o+this.tagEndChar+t+this.indentate(s)+n:this.indentate(s)+"<"+e+i+o+">"+t+n}},u.prototype.closeTag=function(t){let e="";return-1!==this.options.unpairedTags.indexOf(t)?this.options.suppressUnpairedNode||(e="/"):e=this.options.suppressEmptyNode?"/":`></${t}`,e},u.prototype.buildTextValNode=function(t,e,i,s){if(!1!==this.options.cdataPropName&&e===this.options.cdataPropName)return this.indentate(s)+`<![CDATA[${t}]]>`+this.newLine;if(!1!==this.options.commentPropName&&e===this.options.commentPropName)return this.indentate(s)+`\x3c!--${t}--\x3e`+this.newLine;if("?"===e[0])return this.indentate(s)+"<"+e+i+"?"+this.tagEndChar;{let n=this.options.tagValueProcessor(e,t);return n=this.replaceEntitiesValue(n),""===n?this.indentate(s)+"<"+e+i+this.closeTag(e)+this.tagEndChar:this.indentate(s)+"<"+e+i+">"+n+"</"+e+this.tagEndChar}},u.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},module.exports=e})(); |
| !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.fxpBuilder=e():t.fxpBuilder=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={};function r(t,e){var r="";return e.format&&e.indentBy.length>0&&(r="\n"),i(t,e,"",r)}function i(t,e,r,u){var p="",h=!1;if(!Array.isArray(t)){if(null!=t){var l=t.toString();return a(l,e)}return""}for(var d=0;d<t.length;d++){var f=t[d],c=n(f);if(void 0!==c){var g;if(g=0===r.length?c:r+"."+c,c!==e.textNodeName)if(c!==e.cdataPropName)if(c!==e.commentPropName)if("?"!==c[0]){var b=u;""!==b&&(b+=e.indentBy);var m=u+"<"+c+o(f[":@"],e),v=i(f[c],e,g,b);-1!==e.unpairedTags.indexOf(c)?e.suppressUnpairedNode?p+=m+">":p+=m+"/>":v&&0!==v.length||!e.suppressEmptyNode?v&&v.endsWith(">")?p+=m+">"+v+u+"</"+c+">":(p+=m+">",v&&""!==u&&(v.includes("/>")||v.includes("</"))?p+=u+e.indentBy+v+u:p+=v,p+="</"+c+">"):p+=m+"/>",h=!0}else{var N=o(f[":@"],e),y="?xml"===c?"":u,x=f[c][0][e.textNodeName];p+=y+"<"+c+(x=0!==x.length?" "+x:"")+N+"?>",h=!0}else p+=u+"\x3c!--"+f[c][0][e.textNodeName]+"--\x3e",h=!0;else h&&(p+=u),p+="<![CDATA["+f[c][0][e.textNodeName]+"]]>",h=!1;else{var P=f[c];s(g,e)||(P=a(P=e.tagValueProcessor(c,P),e)),h&&(p+=u),p+=P,h=!1}}}return p}function n(t){for(var e=Object.keys(t),r=0;r<e.length;r++){var i=e[r];if(Object.prototype.hasOwnProperty.call(t,i)&&":@"!==i)return i}}function o(t,e){var r="";if(t&&!e.ignoreAttributes)for(var i in t)if(Object.prototype.hasOwnProperty.call(t,i)){var n=e.attributeValueProcessor(i,t[i]);!0===(n=a(n,e))&&e.suppressBooleanAttributes?r+=" "+i.substr(e.attributeNamePrefix.length):r+=" "+i.substr(e.attributeNamePrefix.length)+'="'+n+'"'}return r}function s(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 a(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}function u(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}t.r(e),t.d(e,{default:()=>h});var p={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 h(t){var e;this.options=Object.assign({},p,t),!0===this.options.ignoreAttributes||this.options.attributesGroupName?this.isAttribute=function(){return!1}:(this.ignoreAttributesFn="function"==typeof(e=this.options.ignoreAttributes)?e:Array.isArray(e)?function(t){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 u(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)?u(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.")}(e);!(r=i()).done;){var n=r.value;if("string"==typeof n&&t===n)return!0;if(n instanceof RegExp&&n.test(t))return!0}}:function(){return!1},this.attrPrefixLen=this.options.attributeNamePrefix.length,this.isAttribute=f),this.processTextOrObjNode=l,this.options.format?(this.indentate=d,this.tagEndChar=">\n",this.newLine="\n"):(this.indentate=function(){return""},this.tagEndChar=">",this.newLine="")}function l(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 d(t){return this.options.indentBy.repeat(t)}function f(t){return!(!t.startsWith(this.options.attributeNamePrefix)||t===this.options.textNodeName)&&t.substr(this.attrPrefixLen)}return h.prototype.build=function(t){return this.options.preserveOrder?r(t,this.options):(Array.isArray(t)&&this.options.arrayNodeName&&this.options.arrayNodeName.length>1&&((e={})[this.options.arrayNodeName]=t,t=e),this.j2x(t,0,[]).val);var e},h.prototype.j2x=function(t,e,r){var i="",n="",o=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 a=this.isAttribute(s);if(a&&!this.ignoreAttributesFn(a,o))i+=this.buildAttrPairStr(a,""+t[s]);else if(!a)if(s===this.options.textNodeName){var u=this.options.tagValueProcessor(s,""+t[s]);n+=this.replaceEntitiesValue(u)}else n+=this.buildTextValNode(t[s],s,"",e)}else if(Array.isArray(t[s])){for(var p=t[s].length,h="",l="",d=0;d<p;d++){var f=t[s][d];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 c=this.j2x(f,e+1,r.concat(s));h+=c.val,this.options.attributesGroupName&&f.hasOwnProperty(this.options.attributesGroupName)&&(l+=c.attrStr)}else h+=this.processTextOrObjNode(f,s,e,r);else if(this.options.oneListGroup){var g=this.options.tagValueProcessor(s,f);h+=g=this.replaceEntitiesValue(g)}else h+=this.buildTextValNode(f,s,"",e)}this.options.oneListGroup&&(h=this.buildObjectNode(h,s,l,e)),n+=h}else if(this.options.attributesGroupName&&s===this.options.attributesGroupName)for(var b=Object.keys(t[s]),m=b.length,v=0;v<m;v++)i+=this.buildAttrPairStr(b[v],""+t[s][b[v]]);else n+=this.processTextOrObjNode(t[s],s,e,r);return{attrStr:i,val:n}},h.prototype.buildAttrPairStr=function(t,e){return e=this.options.attributeValueProcessor(t,""+e),e=this.replaceEntitiesValue(e),this.options.suppressBooleanAttributes&&"true"===e?" "+t:" "+t+'="'+e+'"'},h.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,o="";return"?"===e[0]&&(o="?",n=""),!r&&""!==r||-1!==t.indexOf("<")?!1!==this.options.commentPropName&&e===this.options.commentPropName&&0===o.length?this.indentate(i)+"\x3c!--"+t+"--\x3e"+this.newLine:this.indentate(i)+"<"+e+r+o+this.tagEndChar+t+this.indentate(i)+n:this.indentate(i)+"<"+e+r+o+">"+t+n},h.prototype.closeTag=function(t){var e="";return-1!==this.options.unpairedTags.indexOf(t)?this.options.suppressUnpairedNode||(e="/"):e=this.options.suppressEmptyNode?"/":"></"+t,e},h.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},h.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},e})()); | ||
| //# sourceMappingURL=builder.min.js.map |
| {"version":3,"file":"./lib/builder.min.js","mappings":"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","sources":["webpack://fxpBuilder/webpack/universalModuleDefinition","webpack://fxpBuilder/webpack/bootstrap","webpack://fxpBuilder/webpack/runtime/define property getters","webpack://fxpBuilder/webpack/runtime/hasOwnProperty shorthand","webpack://fxpBuilder/webpack/runtime/make namespace object","webpack://fxpBuilder/./src/orderedJs2Xml.js","webpack://fxpBuilder/./src/builder.js","webpack://fxpBuilder/./src/ignoreAttributes.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"fxpBuilder\"] = factory();\n\telse\n\t\troot[\"fxpBuilder\"] = factory();\n})(this, () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const EOL = \"\\n\";\n\n/**\n * \n * @param {array} jArray \n * @param {any} options \n * @returns \n */\nexport default function toXml(jArray, options) {\n let indentation = \"\";\n if (options.format && options.indentBy.length > 0) {\n indentation = EOL;\n }\n return arrToStr(jArray, options, \"\", indentation);\n}\n\nfunction arrToStr(arr, options, jPath, indentation) {\n let xmlStr = \"\";\n let isPreviousElementTag = false;\n\n\n if (!Array.isArray(arr)) {\n // Non-array values (e.g. string tag values) should be treated as text content\n if (arr !== undefined && arr !== null) {\n let text = arr.toString();\n text = replaceEntitiesValue(text, options);\n return text;\n }\n return \"\";\n }\n\n for (let i = 0; i < arr.length; i++) {\n const tagObj = arr[i];\n const tagName = propName(tagObj);\n if (tagName === undefined) continue;\n\n let newJPath = \"\";\n if (jPath.length === 0) newJPath = tagName\n else newJPath = `${jPath}.${tagName}`;\n\n if (tagName === options.textNodeName) {\n let tagText = tagObj[tagName];\n if (!isStopNode(newJPath, options)) {\n tagText = options.tagValueProcessor(tagName, tagText);\n tagText = replaceEntitiesValue(tagText, options);\n }\n if (isPreviousElementTag) {\n xmlStr += indentation;\n }\n xmlStr += tagText;\n isPreviousElementTag = false;\n continue;\n } else if (tagName === options.cdataPropName) {\n if (isPreviousElementTag) {\n xmlStr += indentation;\n }\n xmlStr += `<![CDATA[${tagObj[tagName][0][options.textNodeName]}]]>`;\n isPreviousElementTag = false;\n continue;\n } else if (tagName === options.commentPropName) {\n xmlStr += indentation + `<!--${tagObj[tagName][0][options.textNodeName]}-->`;\n isPreviousElementTag = true;\n continue;\n } else if (tagName[0] === \"?\") {\n const attStr = attr_to_str(tagObj[\":@\"], options);\n const tempInd = tagName === \"?xml\" ? \"\" : indentation;\n let piTextNodeName = tagObj[tagName][0][options.textNodeName];\n piTextNodeName = piTextNodeName.length !== 0 ? \" \" + piTextNodeName : \"\"; //remove extra spacing\n xmlStr += tempInd + `<${tagName}${piTextNodeName}${attStr}?>`;\n isPreviousElementTag = true;\n continue;\n }\n let newIdentation = indentation;\n if (newIdentation !== \"\") {\n newIdentation += options.indentBy;\n }\n const attStr = attr_to_str(tagObj[\":@\"], options);\n const tagStart = indentation + `<${tagName}${attStr}`;\n const tagValue = arrToStr(tagObj[tagName], options, newJPath, newIdentation);\n if (options.unpairedTags.indexOf(tagName) !== -1) {\n if (options.suppressUnpairedNode) xmlStr += tagStart + \">\";\n else xmlStr += tagStart + \"/>\";\n } else if ((!tagValue || tagValue.length === 0) && options.suppressEmptyNode) {\n xmlStr += tagStart + \"/>\";\n } else if (tagValue && tagValue.endsWith(\">\")) {\n xmlStr += tagStart + `>${tagValue}${indentation}</${tagName}>`;\n } else {\n xmlStr += tagStart + \">\";\n if (tagValue && indentation !== \"\" && (tagValue.includes(\"/>\") || tagValue.includes(\"</\"))) {\n xmlStr += indentation + options.indentBy + tagValue + indentation;\n } else {\n xmlStr += tagValue;\n }\n xmlStr += `</${tagName}>`;\n }\n isPreviousElementTag = true;\n }\n\n return xmlStr;\n}\n\nfunction propName(obj) {\n const keys = Object.keys(obj);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if (!Object.prototype.hasOwnProperty.call(obj, key)) continue;\n if (key !== \":@\") return key;\n }\n}\n\nfunction attr_to_str(attrMap, options) {\n let attrStr = \"\";\n if (attrMap && !options.ignoreAttributes) {\n for (let attr in attrMap) {\n if (!Object.prototype.hasOwnProperty.call(attrMap, attr)) continue;\n let attrVal = options.attributeValueProcessor(attr, attrMap[attr]);\n attrVal = replaceEntitiesValue(attrVal, options);\n if (attrVal === true && options.suppressBooleanAttributes) {\n attrStr += ` ${attr.substr(options.attributeNamePrefix.length)}`;\n } else {\n attrStr += ` ${attr.substr(options.attributeNamePrefix.length)}=\"${attrVal}\"`;\n }\n }\n }\n return attrStr;\n}\n\nfunction isStopNode(jPath, options) {\n jPath = jPath.substr(0, jPath.length - options.textNodeName.length - 1);\n let tagName = jPath.substr(jPath.lastIndexOf(\".\") + 1);\n for (let index in options.stopNodes) {\n if (options.stopNodes[index] === jPath || options.stopNodes[index] === \"*.\" + tagName) return true;\n }\n return false;\n}\n\nfunction replaceEntitiesValue(textValue, options) {\n if (textValue && textValue.length > 0 && options.processEntities) {\n for (let i = 0; i < options.entities.length; i++) {\n const entity = options.entities[i];\n textValue = textValue.replace(entity.regex, entity.val);\n }\n }\n return textValue;\n}\n","'use strict';\n//parse Empty Node as self closing node\nimport buildFromOrderedJs from './orderedJs2Xml.js';\nimport getIgnoreAttributesFn from \"./ignoreAttributes.js\";\n\nconst defaultOptions = {\n attributeNamePrefix: '@_',\n attributesGroupName: false,\n textNodeName: '#text',\n ignoreAttributes: true,\n cdataPropName: false,\n format: false,\n indentBy: ' ',\n suppressEmptyNode: false,\n suppressUnpairedNode: true,\n suppressBooleanAttributes: true,\n tagValueProcessor: function (key, a) {\n return a;\n },\n attributeValueProcessor: function (attrName, a) {\n return a;\n },\n preserveOrder: false,\n commentPropName: false,\n unpairedTags: [],\n entities: [\n { regex: new RegExp(\"&\", \"g\"), val: \"&\" },//it must be on top\n { regex: new RegExp(\">\", \"g\"), val: \">\" },\n { regex: new RegExp(\"<\", \"g\"), val: \"<\" },\n { regex: new RegExp(\"\\'\", \"g\"), val: \"'\" },\n { regex: new RegExp(\"\\\"\", \"g\"), val: \""\" }\n ],\n processEntities: true,\n stopNodes: [],\n // transformTagName: false,\n // transformAttributeName: false,\n oneListGroup: false\n};\n\nexport default function Builder(options) {\n this.options = Object.assign({}, defaultOptions, options);\n if (this.options.ignoreAttributes === true || this.options.attributesGroupName) {\n this.isAttribute = function (/*a*/) {\n return false;\n };\n } else {\n this.ignoreAttributesFn = getIgnoreAttributesFn(this.options.ignoreAttributes)\n this.attrPrefixLen = this.options.attributeNamePrefix.length;\n this.isAttribute = isAttribute;\n }\n\n this.processTextOrObjNode = processTextOrObjNode\n\n if (this.options.format) {\n this.indentate = indentate;\n this.tagEndChar = '>\\n';\n this.newLine = '\\n';\n } else {\n this.indentate = function () {\n return '';\n };\n this.tagEndChar = '>';\n this.newLine = '';\n }\n}\n\nBuilder.prototype.build = function (jObj) {\n if (this.options.preserveOrder) {\n return buildFromOrderedJs(jObj, this.options);\n } else {\n if (Array.isArray(jObj) && this.options.arrayNodeName && this.options.arrayNodeName.length > 1) {\n jObj = {\n [this.options.arrayNodeName]: jObj\n }\n }\n return this.j2x(jObj, 0, []).val;\n }\n};\n\nBuilder.prototype.j2x = function (jObj, level, ajPath) {\n let attrStr = '';\n let val = '';\n const jPath = ajPath.join('.')\n for (let key in jObj) {\n if (!Object.prototype.hasOwnProperty.call(jObj, key)) continue;\n if (typeof jObj[key] === 'undefined') {\n // supress undefined node only if it is not an attribute\n if (this.isAttribute(key)) {\n val += '';\n }\n } else if (jObj[key] === null) {\n // null attribute should be ignored by the attribute list, but should not cause the tag closing\n if (this.isAttribute(key)) {\n val += '';\n } else if (key === this.options.cdataPropName) {\n val += '';\n } else if (key[0] === '?') {\n val += this.indentate(level) + '<' + key + '?' + this.tagEndChar;\n } else {\n val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;\n }\n // val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;\n } else if (jObj[key] instanceof Date) {\n val += this.buildTextValNode(jObj[key], key, '', level);\n } else if (typeof jObj[key] !== 'object') {\n //premitive type\n const attr = this.isAttribute(key);\n if (attr && !this.ignoreAttributesFn(attr, jPath)) {\n attrStr += this.buildAttrPairStr(attr, '' + jObj[key]);\n } else if (!attr) {\n //tag value\n if (key === this.options.textNodeName) {\n let newval = this.options.tagValueProcessor(key, '' + jObj[key]);\n val += this.replaceEntitiesValue(newval);\n } else {\n val += this.buildTextValNode(jObj[key], key, '', level);\n }\n }\n } else if (Array.isArray(jObj[key])) {\n //repeated nodes\n const arrLen = jObj[key].length;\n let listTagVal = \"\";\n let listTagAttr = \"\";\n for (let j = 0; j < arrLen; j++) {\n const item = jObj[key][j];\n if (typeof item === 'undefined') {\n // supress undefined node\n } else if (item === null) {\n if (key[0] === \"?\") val += this.indentate(level) + '<' + key + '?' + this.tagEndChar;\n else val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;\n // val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;\n } else if (typeof item === 'object') {\n if (this.options.oneListGroup) {\n const result = this.j2x(item, level + 1, ajPath.concat(key));\n listTagVal += result.val;\n if (this.options.attributesGroupName && item.hasOwnProperty(this.options.attributesGroupName)) {\n listTagAttr += result.attrStr\n }\n } else {\n listTagVal += this.processTextOrObjNode(item, key, level, ajPath)\n }\n } else {\n if (this.options.oneListGroup) {\n let textValue = this.options.tagValueProcessor(key, item);\n textValue = this.replaceEntitiesValue(textValue);\n listTagVal += textValue;\n } else {\n listTagVal += this.buildTextValNode(item, key, '', level);\n }\n }\n }\n if (this.options.oneListGroup) {\n listTagVal = this.buildObjectNode(listTagVal, key, listTagAttr, level);\n }\n val += listTagVal;\n } else {\n //nested node\n if (this.options.attributesGroupName && key === this.options.attributesGroupName) {\n const Ks = Object.keys(jObj[key]);\n const L = Ks.length;\n for (let j = 0; j < L; j++) {\n attrStr += this.buildAttrPairStr(Ks[j], '' + jObj[key][Ks[j]]);\n }\n } else {\n val += this.processTextOrObjNode(jObj[key], key, level, ajPath)\n }\n }\n }\n return { attrStr: attrStr, val: val };\n};\n\nBuilder.prototype.buildAttrPairStr = function (attrName, val) {\n val = this.options.attributeValueProcessor(attrName, '' + val);\n val = this.replaceEntitiesValue(val);\n if (this.options.suppressBooleanAttributes && val === \"true\") {\n return ' ' + attrName;\n } else return ' ' + attrName + '=\"' + val + '\"';\n}\n\nfunction processTextOrObjNode(object, key, level, ajPath) {\n const result = this.j2x(object, level + 1, ajPath.concat(key));\n if (object[this.options.textNodeName] !== undefined && Object.keys(object).length === 1) {\n return this.buildTextValNode(object[this.options.textNodeName], key, result.attrStr, level);\n } else {\n return this.buildObjectNode(result.val, key, result.attrStr, level);\n }\n}\n\nBuilder.prototype.buildObjectNode = function (val, key, attrStr, level) {\n if (val === \"\") {\n if (key[0] === \"?\") return this.indentate(level) + '<' + key + attrStr + '?' + this.tagEndChar;\n else {\n return this.indentate(level) + '<' + key + attrStr + this.closeTag(key) + this.tagEndChar;\n }\n } else {\n\n let tagEndExp = '</' + key + this.tagEndChar;\n let piClosingChar = \"\";\n\n if (key[0] === \"?\") {\n piClosingChar = \"?\";\n tagEndExp = \"\";\n }\n\n // attrStr is an empty string in case the attribute came as undefined or null\n if ((attrStr || attrStr === '') && val.indexOf('<') === -1) {\n return (this.indentate(level) + '<' + key + attrStr + piClosingChar + '>' + val + tagEndExp);\n } else if (this.options.commentPropName !== false && key === this.options.commentPropName && piClosingChar.length === 0) {\n return this.indentate(level) + `<!--${val}-->` + this.newLine;\n } else {\n return (\n this.indentate(level) + '<' + key + attrStr + piClosingChar + this.tagEndChar +\n val +\n this.indentate(level) + tagEndExp);\n }\n }\n}\n\nBuilder.prototype.closeTag = function (key) {\n let closeTag = \"\";\n if (this.options.unpairedTags.indexOf(key) !== -1) { //unpaired\n if (!this.options.suppressUnpairedNode) closeTag = \"/\"\n } else if (this.options.suppressEmptyNode) { //empty\n closeTag = \"/\";\n } else {\n closeTag = `></${key}`\n }\n return closeTag;\n}\n\nfunction buildEmptyObjNode(val, key, attrStr, level) {\n if (val !== '') {\n return this.buildObjectNode(val, key, attrStr, level);\n } else {\n if (key[0] === \"?\") return this.indentate(level) + '<' + key + attrStr + '?' + this.tagEndChar;\n else {\n return this.indentate(level) + '<' + key + attrStr + '/' + this.tagEndChar;\n // return this.buildTagStr(level,key, attrStr);\n }\n }\n}\n\nBuilder.prototype.buildTextValNode = function (val, key, attrStr, level) {\n if (this.options.cdataPropName !== false && key === this.options.cdataPropName) {\n return this.indentate(level) + `<![CDATA[${val}]]>` + this.newLine;\n } else if (this.options.commentPropName !== false && key === this.options.commentPropName) {\n return this.indentate(level) + `<!--${val}-->` + this.newLine;\n } else if (key[0] === \"?\") {//PI tag\n return this.indentate(level) + '<' + key + attrStr + '?' + this.tagEndChar;\n } else {\n let textValue = this.options.tagValueProcessor(key, val);\n textValue = this.replaceEntitiesValue(textValue);\n\n if (textValue === '') {\n return this.indentate(level) + '<' + key + attrStr + this.closeTag(key) + this.tagEndChar;\n } else {\n return this.indentate(level) + '<' + key + attrStr + '>' +\n textValue +\n '</' + key + this.tagEndChar;\n }\n }\n}\n\nBuilder.prototype.replaceEntitiesValue = function (textValue) {\n if (textValue && textValue.length > 0 && this.options.processEntities) {\n for (let i = 0; i < this.options.entities.length; i++) {\n const entity = this.options.entities[i];\n textValue = textValue.replace(entity.regex, entity.val);\n }\n }\n return textValue;\n}\n\nfunction indentate(level) {\n return this.options.indentBy.repeat(level);\n}\n\nfunction isAttribute(name /*, options*/) {\n if (name.startsWith(this.options.attributeNamePrefix) && name !== this.options.textNodeName) {\n return name.substr(this.attrPrefixLen);\n } else {\n return false;\n }\n}\n\n","export default function getIgnoreAttributesFn(ignoreAttributes) {\n if (typeof ignoreAttributes === 'function') {\n return ignoreAttributes\n }\n if (Array.isArray(ignoreAttributes)) {\n return (attrName) => {\n for (const pattern of ignoreAttributes) {\n if (typeof pattern === 'string' && attrName === pattern) {\n return true\n }\n if (pattern instanceof RegExp && pattern.test(attrName)) {\n return true\n }\n }\n }\n }\n return () => false\n}"],"names":["root","factory","exports","module","define","amd","this","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","toXml","jArray","options","indentation","format","indentBy","length","arrToStr","arr","jPath","xmlStr","isPreviousElementTag","Array","isArray","text","toString","replaceEntitiesValue","i","tagObj","tagName","propName","undefined","newJPath","textNodeName","cdataPropName","commentPropName","newIdentation","tagStart","attr_to_str","tagValue","unpairedTags","indexOf","suppressUnpairedNode","suppressEmptyNode","endsWith","includes","attStr","tempInd","piTextNodeName","tagText","isStopNode","tagValueProcessor","keys","attrMap","attrStr","ignoreAttributes","attr","attrVal","attributeValueProcessor","suppressBooleanAttributes","substr","attributeNamePrefix","lastIndexOf","index","stopNodes","textValue","processEntities","entities","entity","replace","regex","val","defaultOptions","attributesGroupName","a","attrName","preserveOrder","RegExp","oneListGroup","Builder","assign","isAttribute","ignoreAttributesFn","_step","_iterator","_createForOfIteratorHelperLoose","done","pattern","test","attrPrefixLen","processTextOrObjNode","indentate","tagEndChar","newLine","object","level","ajPath","result","j2x","concat","buildTextValNode","buildObjectNode","repeat","name","startsWith","build","jObj","buildFromOrderedJs","arrayNodeName","_jObj","join","Date","buildAttrPairStr","newval","arrLen","listTagVal","listTagAttr","j","item","Ks","L","closeTag","tagEndExp","piClosingChar"],"sourceRoot":""} |
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
Minified code
QualityThis package contains minified code. This may be harmless in some cases where minified code is included in packaged libraries, however packages on npm should not minify code.
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
Minified code
QualityThis package contains minified code. This may be harmless in some cases where minified code is included in packaged libraries, however packages on npm should not minify code.
Found 1 instance in 1 package
153195
112.34%953
63.46%1
Infinity%7
250%+ Added