markuno_lib 1.2.111 → 1.2.112

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/bin/markuno.js CHANGED
@@ -1 +1 @@
1
- function testsync(t,e){return t+e}const tk=()=>(new Date).valueOf();function seedarray(t,e){if(t&&t.length){let a=[];for(let e=0;e<t.length;e++){let s=t[e];if(s.p)for(let t=0;t<s.p;t++)a.push(e);else a.push(e)}return t[a[seeder(a.length,e)]]}}function seeder(t,e="seed42"){const a=function mulberry32(t){return function(){t=(t|=0)+1831565813|0;let e=Math.imul(t^t>>>15,1|t);return e=e+Math.imul(e^e>>>7,61|e)^e,((e^e>>>14)>>>0)/4294967296}}(function xmur3(t){let e=1779033703^t.length;for(let a=0;a<t.length;a++)e=Math.imul(e^t.charCodeAt(a),3432918353),e=e<<13|e>>>19;return function(){return e=Math.imul(e^e>>>16,2246822507),e=Math.imul(e^e>>>13,3266489909),(e^=e>>>16)>>>0}}(String(e))());return Math.floor(a()*t)}function isJsonStr(t){if("string"!=typeof t)return!1;const e=t.trim();return e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")}const isObject=t=>!(!t||!Array.isArray(t)&&"object"!=typeof t);function quote(t){if((t=(t||"").trim()).length>1){if(t.startsWith('"')&&t.endsWith('"'))return t;if(t.startsWith("(")&&t.endsWith(")"))return t}return`"${t}"`}function noquote(t){return(t=t.trim()).startsWith('"')&&t.endsWith('"')||t.startsWith("(")&&t.endsWith(")")?t.slice(1,-1):t}function hash(t){let e="";if("string"==typeof t||"number"==typeof t)e=t+"";else if("object"==typeof t&&t){const a=Object.keys(t).sort(),s="\0";e=a.map((e=>`${e}${s}${String(t[e])}`)).join(s)}let a=2166136261,s=2218511855;for(let t=0;t<e.length;t++){const i=e.charCodeAt(t);a^=i,a+=a<<5^2779096485,s^=a,s=((s<<3)+i^2134516169)>>>0}return a>>>=0,a.toString(16)+s.toString(16)}function geterrdes(t){if(t&&"object"==typeof t){let e=t.stack?.toString().replace(/^.*?node_modules.*$/gim,"")||t.message||"";e=e.replaceAll("/","_").replaceAll(".js","").replaceAll("\n\n","\n").replace(/;\s+/gi,"\n"),t=e}return(t=t.replace(/sqlite/gi,"SQL ")).replaceAll(";",",").trim()}let t,e,a,s,i,r;const logga=(...t)=>{r?r(t):console.log(...t)};function setcallbacks(n,o,c,l,u,h){e=n,t=o,a=c,s=l,i=u,r=h}const xdt=()=>(new Date).valueOf();function clean(t,e=!1){return e?(t||"").trim().toLowerCase():(t||"").trim()}function getcouple(t,e="=",a=!0){const s=(t=t||"").indexOf(e);return s>=0?{v:clean(t.substring(0,s),a),o:t.substring(s+e.length).trim(),fl:!0}:{v:clean(t,a),o:"",fl:!1}}function checkmu(t,e){if((t=(t||"").trim()).indexOf("/")>0){const a=t.split("/");e=a[0]||"",t=a[1]||""}if(!e)throw new Error("manca il catalogo per "+t);return{name:t,cat:e=checkname(e)}}function checkname(t,e=!1){if(t=(t||"").trim(),e&&!t)return"";if(!t||!/^[a-zA-Z_][a-z0-9A-Z_+-]*$/gim.test(t))throw new Error(`nome non valido: "${t}" \n deve contenere solo lettere, _, -, e numeri`);return t.toLowerCase()}function getcolonne(t,e=!1){t=String(t||"");const a=/^(\d*)\.\.(\d*)$/.exec(t);if(a){let t=parseInt(a[1])||0,e=parseInt(a[2])||0;const s=[];for(let a=t;a<=e;a++)s.push(a+"");return s}if(!/["({[]/.test(t))return t.split(/[,;]/).map((t=>t.trim()));const s=[];let i="",r=0,n=!1;for(let e=0;e<t.length;e++){const a=t[e];if(0===r&&'"'===a&&(0!==e&&"\\"===t[e-1]||(n=!n)),n||("("===a||"["===a||"{"===a?r++:")"!==a&&"]"!==a&&"}"!==a||(r=Math.max(0,r-1))),","!==a&&";"!==a||0!==r||n)i+=a;else{const t=i.trim();s.push(t),i=""}}const o=i.trim();return o&&s.push(o),s.map((t=>(t=t.trim(),!e&&(t.startsWith('"')&&t.endsWith('"')||t.startsWith("(")&&t.endsWith(")"))?t.slice(1,-1):t)))}const parsevar=(t,e,a,s,i=!1)=>{const r=["[","(","{"],n=["]",")","}"];s||(s="["==a?"]":"("==a?")":"}");const o=r.includes(a);let c=1,l=0;const u=[];for(let h=e;h<t.length;h++)if(o&&r.includes(t[h])||t[h]==a)c++;else if(o&&n.includes(t[h])||t[h]==s){if(c--,0==c&&t[h]==s)return u[l]=t.substring(e,h),{i:h,res:u}}else if(":"==t[h])1==c&&(u[l]=t.substring(e,h),e=h+1,l++);else if("\n"==t[h]&&i)return{i:h,res:u};return{i:-1,res:t.substring(e)}};function setOggetto(t,e){"object"==typeof t&&"object"==typeof e&&Object.keys(e).forEach((a=>{Object.hasOwn(t,a)&&"function"!=typeof t[a]&&(t[a]=e[a])}))}function getOggetto(t,e=[]){if(Array.isArray(t))return t.map((t=>getOggetto(t,e)));if(t&&"object"==typeof t){const a={};for(const[s,i]of Object.entries(t))"function"==typeof i||e&&e.includes(s)||(a[s]=getOggetto(i,e));return a}return t}function fromjson(t,e){if(Array.isArray(t))return t;if("string"!=typeof t)return t;if(""==t)return e||{};try{return JSON.parse(t)}catch(a){return logga(`Errore parsing JSON: ${a}\n${t}`),e||{}}}const n=new class Errori{constructor(){this.azzera()}azzera(){this.err=[]}add(t,e){this.err.push({msg:t,row:e})}get(){return this.err}get length(){return this.err.length}toString(){const t=[];for(const e of this.err){const a="object"==typeof e.msg?JSON.stringify(e.msg):e.msg||"";t.push(`${e.row?e.row+":":""}${a}`)}return t.join("\n")}},round=(t,e=-1)=>{const a="string"==typeof t?parseFloat(t)||0:t;if(e<0)return Math.round(a||0);const s=Math.pow(10,e);return Math.round(a*s)/s||0};function getheaddims(t){let e;try{e="object"==typeof t&&t?t:JSON.parse(t||"{}")}catch(t){e={}}return e||(e={}),e.l||(e.l={visible:1,val:1e3,min:0,max:1e4}),e.a||(e.a={visible:1,val:1e3,min:0,max:1e4}),e.p||(e.p={visible:1,val:1e3,min:0,max:1e4}),e}function sortrows(t){const e=Object.keys(t).sort(),a={};for(let s=0;s<e.length;s++){const i=e[s],r=t[i];s+1<e.length&&e[s+1].startsWith(i+".")?r.hasliv=1:delete r.hasliv,a[i]=r}return a}const o=/(?<!\w)\(/g,c=/^-?[0-9.]+$/,l=/^(\w+)(!)?\[(.*)?\]$/,u=/[0-9.]/,h=/[+\-*/^%]/,f=/[a-zA-Z]/i;function valutaparentesi(t){for(t=(t+"").trim();;){const e=o.exec(t);if(!e)break;{const{i:a,res:s}=parsevar(t,e.index+1,"(",")");if(a<=0)break;t=t.substring(0,e.index)+valutaparentesi(s[0])+(a>=0?t.substring(a+1):"")}}return function operatoricomparazione(t){let e,a;const s={"||":()=>valutaparentesi(e)||valutaparentesi(a)?1:0,"|":()=>valutaparentesi(e)||valutaparentesi(a)?1:0,"&&":()=>valutaparentesi(e)&&valutaparentesi(a)?1:0,"&":()=>valutaparentesi(e)&&valutaparentesi(a)?1:0,"<<=":()=>clean(e)<=clean(a),">>=":()=>clean(e)>=clean(a),"===":()=>clean(e)==clean(a),"==":()=>clean(e)==clean(a),"!!":()=>clean(e)!=clean(a),"<<":()=>clean(e)<clean(a),">>":()=>clean(e)>clean(a),"<=":()=>muCalcbase(e)<=muCalcbase(a),">=":()=>muCalcbase(e)>=muCalcbase(a),"<":()=>muCalcbase(e)<muCalcbase(a),">":()=>muCalcbase(e)>muCalcbase(a),"=":()=>muCalcbase(e)==muCalcbase(a),"!":()=>muCalcbase(e)!=muCalcbase(a)};let i=-1,r="";for(const e in s)if(i=t.indexOf(e),i>=0){r=e;break}return-1!==i?(e=t.slice(0,i),a=t.slice(i+r.length),s[r]&&s[r]()?1:0):muCalcbase(t)}(t=function valutainsiemi(t){if(t.includes("[")){function resinisiemi(t){const e=t[1],a=!!t[2],s=getcolonne(t[3]);for(const t of s)if(t==e)return a?"0":"1";return a?"1":"0"}for(;;){const e=l.exec(t);if(!e)break;{const a=resinisiemi(e);t=t.substring(0,e.index)+a+t.substring(e.index+e[0].length)}}}return t}(t))}const d={sqrt:t=>Math.sqrt(t),sqr:t=>Math.sqrt(t),pow:(t,e)=>Math.pow(t,e),int:t=>Math.floor(t),floor:(t,e=0)=>Math.floor((Number.parseFloat(t)||0)*10**e)/10**e,round:(t,e=0)=>Math.round((Number.parseFloat(t)||0)*10**e)/10**e,dec:(t,e=0)=>Math.floor((Number.parseFloat(t)||0)*10**e)/10**e,abs:t=>Math.abs(t),sin:t=>Math.sin(t*Math.PI/180),cos:t=>Math.cos(t*Math.PI/180),tan:t=>Math.tan(t*Math.PI/180),asin:t=>180*Math.asin(t)/Math.PI,acos:t=>180*Math.acos(t)/Math.PI,atan:t=>180*Math.atan(t)/Math.PI,atan2:(t,e)=>180*Math.atan2(t,e)/Math.PI,seeder:(t,e)=>seeder(t,e),log:t=>Math.log(t),log10:t=>Math.log10(t),min:(...t)=>Math.min(...t),max:(...t)=>Math.max(...t),clamp:(t,e,a)=>Math.max(e,Math.min(a,t)),rnd:(t,e)=>t?e?Math.floor(Math.random()*(e-t+1))+t:Math.floor(Math.random()*t):Math.random(),cas:(t,e)=>Math.floor(Math.random()*(e-t+1))+t};function muCalcbase(t){let e=0;function parseOperator(){const a=t[e];return h.test(a)?(e++,a):null}function parsePrimary(){if("+"===t[e]||"-"===t[e]){return("-"===t[e++]?-1:1)*parsePrimary()}if(u.test(t[e]))return function parseNumber(){const a=e;for(;e<t.length&&u.test(t[e]);)e++;return Number(t.slice(a,e))}();if("("===t[e]){e++;const a=parseExpr();return")"===t[e]&&e++,a}return f.test(t[e])?function parseFunctions(){const a=t.slice(e);if(!a)return 0;for(const[s,i]of Object.entries(d)){const r=new RegExp(`^(${s})\\(`,"i").exec(a);if(r){e+=r[0].length;let a=[];for(;;){let s=parseExpr();if(a.push(s),")"===t[e]){e++;break}if(","!=t[e])break;e++}return i(...a)}}return e++,parseExpr()}():0}function parseFactor(){let a=parsePrimary();for(;e<t.length&&/[/*^%]/.test(t[e]);){const t=parseOperator(),e=parsePrimary();"*"===t?a*=e:"/"===t?a=e?a/e:0:"%"===t?a=e?a%e:0:"^"===t&&(a=Math.pow(a,e))}return a}function parseExpr(){let a=parseFactor();for(;e<t.length&&/[+-]/.test(t[e]);){const t=parseOperator(),e=parseFactor();"+"===t?a+=e:"-"===t&&(a-=e)}return a}return t=t.replace(/\s/g,""),parseExpr()}function muCalc(t){if(!t)return 0;if("number"==typeof t)return t||0;if("string"!=typeof t)return 0;const e=t.replaceAll(",",".");return c.test(e)?Number(e)||0:valutaparentesi(t)||0}const tonum=(t,e=-1)=>{if(!t)return 0;let a=0;if("number"==typeof t)a=t||0;else if("string"==typeof t){const e=(t=t.replaceAll(",",".")).match(/^-?[0-9.]+$/);a=e&&e.length>0?Number(e[0])||0:muCalc(t)}if(e>=0)switch(e){case 0:a=Math.round(a);break;case 1:a=Math.round(10*a)/10;break;case 2:a=Math.round(100*a)/100;break;case 3:a=Math.round(1e3*a)/1e3;break;case 4:a=Math.round(1e4*a)/1e4;break;case 5:a=Math.round(1e5*a)/1e5;break;case 6:a=Math.round(1e6*a)/1e6}return a||0},m=100;function valutavar(t,e){const a=e[0]||"";if(!a)return"";if(t.counter>=m)return a;const s=valuta0(t,a);let i;if(t.stl[s])i=`-- R:${s} --`;else{const e=t.var(s);if(isObject(e))return e;t.stl[s]=!0,i=valutabase(t,e),delete t.stl[s]}if(t.counter>=m)return a;if(e[1]){let a=getcolonne(i);if("l"==e[1])return String(a.length);const s=valuta0(t,e[1]);let r;if(/^[\d.]+$/.test(s)){let t=s.split(".").map((t=>parseInt(t)));for(let e=0;e<t.length-1;e++){let s=t[e];if(!(s>=0&&s<a.length))return"";a=getcolonne(a[s])}r=t[t.length-1]}else r=muCalc(s);if(!(r>=0&&r<a.length))return"";for(i=valuta0(t,a[r]);;){let e=i.indexOf("$[");if(e<0)break;const{i:a}=parsevar(i,e+2,"[","]");if(a<e)break;let s=i.slice(e+2,a);i=i.substring(0,e)+valutaquadra(t,s)+i.substring(a+1)}}if(e[2]){const a=muCalc(valuta0(t,e[2]));if(a){let s=0;return e[3]&&(s=muCalc(valuta0(t,e[3]))),a<0?i.slice(a):s?i.substring(a-1,a+s-1):i.substring(a-1)}}return i}function valutaquadra(t,e){let a=getcolonne(e||"");const s=clean(a[0]);function replacecharcode(t){return"\\t"==t?"\t":"\\n"==t?"\n":(t||"").replace(/&(\d+)/g,((t,e)=>String.fromCharCode(parseInt(e))))}switch(s){case"set":{const e=valuta0(t,a[1]||""),s=valuta0(t,a[2]||"");t.add(e,t.var(s))}break;case"ex":{const e=valuta0(t,a[1]||"");let s=valuta0(t,a[2]||"");s||(s=",");const i=muCalc(valuta0(t,a[3]||"")),r=e.split(s);return i>0&&r[i-1]||""}case"ex2":{const e=replacecharcode(a[1]||""),s=muCalc(valuta0(t,a[2]||""));a.splice(0,3);return a.join(";").split(e)[s>0?s-1:0]||""}case"replace":return a[1].replace(new RegExp(a[2]||"x","gim"),(a[3]||"").trim());case"replace2":case"rp2":try{let t=replacecharcode(a[1]||"x");const e=replacecharcode(a[2]||"").trim();a.splice(0,3),t=t.replace(/&(\d+)/g,((t,e)=>`\\u${parseInt(e).toString(16).padStart(4,"0")}`));return a.join(";").replace(new RegExp(t,"im"),e)}catch(t){return""}case"look":case"lookb":{const t=parseFloat(a[1]||"");if(a=a.slice(2).map((t=>parseFloat(t)||0)),"lookb"==s){const e=a.filter((e=>e<=t));return e.length?Math.max(...e):t}{const e=a.filter((e=>e>=t));return e.length?Math.min(...e):t}}case"tk":{let e=muCalc(valuta0(t,a[1]||""))||0;if(!e){e=muCalc(valuta0(t,a[2]||""));const s=a[1]||"";return e?a[3].split(s)[e-1]:""}return a[e>0?e+1:2]||""}case"totab":return a.splice(0,1),a.join("\t");case"tosep":{const t=replacecharcode(a[1]||"")||";";return a.splice(0,2),a.join(t)}case"len":{let t;return a.length>2?(a.shift(),t=a.join(";")):t=a[1]||"",t.length}case"mid":{const e=valuta0(t,a[1]||""),s=muCalc(valuta0(t,a[2]||"")),i=muCalc(valuta0(t,a[3]||""));return e.substring(s-1,s+i-1)}case"arrotonda":{const t=muCalc(a[1]);let e=1;return["0","1","2","3","4","5","6"].includes(a[2])?e=Math.pow(10,parseInt(a[2])):(e=muCalc(a[2]),0==e&&(e=1e3)),Math.round(t*e)/e}case"iif":return muCalc(valuta0(t,a[1]))?a[2]||1:a[3]||0;case"instr":case"instr2a":{const t=a[1]||"",e=a[2]||"";return t.toLowerCase().indexOf(e.toLowerCase())+1}case"instr2":{const t=a[1]||"";return a.splice(0,2),a.join(";").toLowerCase().indexOf(t.toLowerCase())+1}default:return s.startsWith(".")?{fun:e,pars:[]}:{fun:s,pars:a}}}function valuta0(t,e){if(e+="",t.counter>=m)return e;for(;;){const a=/\$([{(])/im.exec(e);if(!a)break;{const s=a.index,{i:i,res:r}="("==a[1]?parsevar(e,s+2,"(",")"):parsevar(e,s+2,"{","}");let n=valutavar(t,r);if(isObject(n))return n;e=valuta0(t,e.substring(0,s))+n+(i>=0?valuta0(t,e.substring(i+1)):"")}}return e=(e=e.replace(/\$([a-z|][\w|.]*)/gi,((e,a)=>{let s="";for(;a.length;){let e;if(t.stl[a]?e=`--R: ${a} --`:(t.stl[a]=!0,e=valutabase(t,t.var(a)),delete t.stl[a]),e||!(a.length>1)){s=e+s;break}s=a.slice(-1)+s,a=a.substring(0,a.length-1)}return s}))).replace(/\$(\d+):(\d+)(:(\d+))?/g,((t,e,a,s,i)=>{i=i?+i:1;const r=[];for(let t=+e;t<=+a;t+=i)r.push(t.toString());return r.join(";")}))}function valutabase(t,e){return e&&(t.counter++,t.counter<=m&&(e=valuta0(t,e)),t.counter--),e}class Variabile{constructor(){this.stl={},this.dictionary={},this.vec=[],this.counter=0,this.fndotcallback=void 0}static isValidKey(t){return/^[\w][\w\d.[\]]*$/.test(t)}static sanitizeKey(t){return t.replace(/[^a-zA-Z0-9_.[\]]/g,"_")}setfndot(t){this.fndotcallback=t}push(){this.vec.push({saves:[],dic:{...this.dictionary}})}pop(){if(this.vec.length>0){let t=this.vec.pop(),e={};if(t.saves&&t.saves.length)for(let a of t.saves)e[a]=this.dictionary[a];if(this.dictionary=t.dic,t.saves&&t.saves.length)for(let a of t.saves)this.dictionary[a]=e[a]}}savevars(t){if(!this.vec.length>0)return;let e=this.vec[this.vec.length-1];e.saves||(e.saves=[]);let a=t.split(",");for(let t of a){const a=Variabile.sanitizeKey(t);a&&!e.saves.includes(a)&&e.saves.push(a)}}clear(){this.vec=[],this.dictionary={}}azzera=()=>this.clear();var(t){let e="";const a=/^(\d*)\.\.(\d*)$/.exec(t);if(a){let t=parseInt(a[1])||0,e=parseInt(a[2])||0;const s=[];for(let a=t;a<=e;a++)s.push(a+"");return s}if(t.indexOf("|")>=0){const a=t.split("|");t=a[0],e=a[1]}function toformat(t,e){switch(e.trim().toLowerCase()){case"0":return String(parseInt(t)||0);case"-":return String((parseInt(t)||1)-1);case"+":return String((parseInt(t)||0)+1);case"data":return a=parseFloat(t)||0,new Intl.DateTimeFormat("it",{day:"2-digit",month:"short",year:"2-digit"}).format(a.toDate());case"euro":return((t,e="")=>{if(t){let e=Intl.NumberFormat("en",{style:"currency",currency:"EUR"}).format(t);return e=e.replace(/€/g,"").replace(/\./g,";").replace(/,/g,".").replace(/;/g,",")+"€",e}return e})(parseFloat(t));case"num":return tonum(parseFloat(t));case"n":case"n0":case"n1":case"n2":case"n3":case"n4":{const a=parseInt(e.slice(1))||0;return tonum(parseFloat(t),a)}case"u":return String(t).toUpperCase();case"l":return String(t).toLowerCase();default:return t}var a}const s=Variabile.sanitizeKey(t);if(s.startsWith(".")&&this.fndotcallback){const t=this.fndotcallback(s.toLowerCase());if(t)return toformat(t,e)}if(Variabile.isValidKey(s)){const t=s.toLowerCase(),a=/^([\w][\w\d]*)([.[])/.exec(t);if(a){const s=this.dictionary[a[1]];if(s&&"object"==typeof s)return toformat(function objval(t,e){const a=e.split(".");let s=t;for(let t=0;t<a.length;t++){const e=a[t],i=e.match(/(.*?)\[(\d*)\]/);if(i){if(i[1]&&(s=s[i[1]]),void 0===s)return"";s=s[parseInt(i[2],10)||0]}else switch(e){case"_k":s=(Object.keys(s)||[]).join(",");break;case"_v":s=Object.values(s)||[];break;case"_l":s=s.length||0;break;default:s=s[e]}if(void 0===s)return""}return"number"==typeof s?s+"":s}(s,("["==a[2]?a[2]:"")+t.substring(a[0].length)),e)}return toformat(this.dictionary[t]||"",e)}return""}getvar(t){return this.var(t)}colonna(t,e){return getcolonne[e]||t}dump(t=!1){let e=[];for(const t in this.dictionary)e.push({cod:t,val:this.dictionary[t]});return e=e.sort(((t,e)=>t.cod>e.cod)),t?e.map((t=>`${t.cod} = ${isObject(t.val)?JSON.stringify(t.val,null,2):t.val}`)):e}add(t,e){if("number"==typeof e&&(e=String(e)),t.includes("*")){const a=Variabile.sanitizeKey(t.split("*")[0]);if(Variabile.isValidKey(a)){const t=a.toLowerCase();let s=Object.keys(this.dictionary).filter((e=>e.startsWith(t)));for(let t of s)e?this.dictionary[t]=e:delete this.dictionary[t]}}else{const a=Variabile.sanitizeKey(t);if(Variabile.isValidKey(a)){const t=a.toLowerCase();0===e||e?this.dictionary[t]=e:delete this.dictionary[t]}else logga(`Invalid key: ${t}`)}}removeallvars(t){if(Array.isArray(t)){let e=Object.keys(this.dictionary);for(let a of e)t.includes(a)||delete this.dictionary[a]}else this.dictionary={}}valutasync(t){return valutabase(this,t)}async valuta(t,e){this.stl={};let a=await async function valutafunc(t,e,a){if(e){for(let s=0;s<20;s++){const s=e.lastIndexOf("$[");if(!(s>=0)){e=valutabase(t,e);break}{const{i:i,res:r}=parsevar(e,s+2,"[","]"),n=valutabase(t,e.substring(0,s)),o=r?r[0].startsWith(".")?valutabase(t,r.join(":")):valutabase(t,r[0]):"",c=i>=0?valutabase(t,e.substring(i+1)):"";let l=valutaquadra(t,o);if("object"==typeof l&&(l=a?await a(l?.fun,l.pars):`** fun: ${l.fun} ** `),isObject(l))return l;e=n+l+c}}return e}return""}(this,t,e);return isObject(a)||(a=(t=>{for(;;){const e=t.indexOf("{");if(!(e>=0))break;{const{i:a,res:s}=parsevar(t,e+1,"{","}");if(a<0)return t;t=t.substring(0,e)+muCalc(s[0])+(a>=0?t.substring(a+1):"")}}return t})(a)),a}async parametrokeyval(t){if("string"!=typeof t)return{};if(!(t=t.trim()))return{};let e,a,s,i=!1;return t.startsWith("#")&&(i=!0,t=t.slice(1)),s=t.indexOf("="),s>0?(e=clean(t.slice(0,s)),a=t.slice(s+1)):(s=t.indexOf(":"),s>0?(e=clean(t.slice(0,s)),a=t.slice(s+1),a=this.var(a)):(e=clean(t),a=this.var(e))),a&&"string"==typeof a&&a.includes("$")&&(a=await this.valuta(a)),["l","a","p"].includes(e)&&(i=!0),i&&(a=muCalc(a)),{k:e,v:a}}}class CodiceBarra{constructor(){this.barre={}}azzera(){this.barre={}}oriented(t,e,a,s){switch(t=(t||"1").substr(0,1).toLowerCase()){case"0":break;case"l":return{t:"l",x:e};case"a":return{t:"a",x:a};case"p":return{t:"p",x:s};case"2":return{t:t,x:e,y:s,z:a};case"5":return{t:t,x:e,y:a,z:s};case"4":return{t:t,x:s,y:e,z:a};case"3":return{t:t,x:a,y:s,z:e};case"6":return{t:t,x:s,y:a,z:e};default:return{t:"1",x:a,y:e,z:s}}}async getcode(t,e,a,s,i){let[r,n]=t.split(":");n=n||"";const getcode0=async(t,r)=>{let n=this.barre[t];if(!n&&i&&(n=await i(t),n||(n={t:"1",r:[]}),this.barre[t]=n,n.coderr&&"errore"!=n.coderr||(n.coderr=`#err_${t}`)),!n||0==n.r.length)return{extra:{err:"missing codicebarra"},c:`#err_${t}`,fm:10};const{t:o,x:c,y:l,z:u}=this.oriented(t,e,a,s),h={barra:t,fm:n.fm,t:o,liv:r,items:n.r.length,err:""};let f=n.r;if(u){const t=f.filter((t=>t.z===u||!t.z));t.length>0?f=t:h.err=`spessore non coerente: ${u}`}if("l"==o||"a"==o||"p"==o){const t=f.find((t=>t.x>=c));if(t)return{c:t.c,fm:t.x==c?0:1,x1:t.x,x:c,extra:h}}else{let t=f.find((t=>t.x==c&&t.y==l));if(t)return{c:t.c,fm:0,x:c,y:l,z:u,x1:t.x,y1:t.y,z1:t.z,extra:h};if(0!=n.fm&&(t=f.find((t=>t.x>=c&&t.y==l)),t))return{c:t.c,fm:1,x:c,y:l,z:u,x1:t.x,y1:t.y,z1:t.z,extra:h};if(0!=n.fm&&2!=n.fm&&(t=f.find((t=>t.x>=c&&t.y>=l)),t))return{c:t.c,fm:2,x:c,y:l,z:u,x1:t.x,y1:t.y,z1:t.z,extra:h}}return n.codalt&&r<5?await getcode0(n.codalt,r+1):{c:n.coderr,fm:9,x:c,y:l,z:u,extra:h}};return await getcode0(r,0)}compila(t,e){e||(e={});const a={};if(Array.isArray(t)){for(const s of t)if(s.cod=clean(s.cod),s.barcode=clean(s.barcode),s.barcode.length>2&&"+"==s.barcode[0]){s.barcode=s.barcode.substr(1);const t=this.oriented(s.barcode.substr(0,1),s.l,s.a,s.p);t.c=s.modello?{c:s.cod,m:s.modello}:s.cod,a[s.barcode]||(a[s.barcode]={t:s.barcode.substr(0,1),r:[]},e[s.barcode]&&(a[s.barcode]=Object.assign(e[s.barcode],a[s.barcode]))),a[s.barcode].r.push(t)}for(const t in a){a[t].r.sort(((t,e)=>t.y?1e4*(t.x-e.x)+(t.y-e.y):t.x-e.x))}}this.barre=a}}const p="IFDEF|IFNDEF|SETDEF|CACHE|RET|CVAR|LOOK|LOOKB|SELECT|CASES|CASE|LOG|MSG|DEFAULT|ELSEIFDEF|ELSEIFNDEF|ELSEIF|ELSE|ENDIF|ENDSELECT|PUSH|POP|FUNC|MACRO|LETS|LETO|LETM|LETT|LETV|LETM|LET|DEF|DO|VARIANTE|FORVAR|FOR|LOOP|ENDFOR|BREAK|EXIT|EXITFOR|CONTINUE|IF|INC|I|F|M|J|:P".split("|");function toCadPars(t){const e=muClComments(t),a=[];for(const t of e){const e=t.includes("(")||t.includes("[")?[t]:getcolonne(t,!0);let s=!1;for(const t of e)!t.startsWith('"')&&t.includes("=")?(a.push(t),s=!0):s&&(a[a.length-1]+=","+t)}const s={};for(const t of a){let{v:e,o:a}=getcouple(t,"=",!1);a=a||"",e&&(/^[-+]?\d*\.?\d+$/.test(a)&&(a=parseFloat(a)),s[e]=a)}return s}function muClComments(t,e){const a=(s=t,s.replace(/("(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*')|\/\*[\s\S]*?\*\//g,((t,e)=>e||""))).split(/\r?\n/);var s;const i=[];let r="";for(const t of a){let a=t;if(/(^|[^:])\/\/.*/.test(a)&&(a=a.replace(/(^|[^:])\/\/.*/,((t,e)=>e.trim()))),a=a.trim(),0!==a.length||e)if(r.length>0&&(a=r+" "+a,r=""),a.endsWith("\\")){a=a.slice(0,-1);const t=a.lastIndexOf("//");-1!==t&&(a=a.slice(0,t).trim()),r=a}else i.push(a)}return i}function muClean(t,e=!1){if(!Array.isArray(t))return void n.add("muClean: expected array!");const a=[];function addgen(t){if(a.length>0&&""==a[a.length-1].tipo){const s=a[a.length-1];e||!(!t.startsWith("!")&!t.startsWith("."))||t.startsWith("$")||t.startsWith("{")||t.startsWith("#")||s.contenuto.startsWith("!")||s.contenuto.startsWith(".")||s.contenuto.startsWith("$")||s.contenuto.startsWith("{")||s.contenuto.startsWith("#")?a.push({tipo:"",contenuto:t}):s.contenuto=s.contenuto+"\n"+t}else a.push({tipo:"",contenuto:t})}for(const e of t){const t=e.match(/^#([\w.]+)\s*(.*)$/);if(t){let s=t[1].toUpperCase().trim(),i="";if(s.includes(".")){const t=s.split(".");s=t[0],i=t[1]}if(p.includes(s)){const e=t[2];if("IF"!==s&&"IFDEF"!=s&&"IFNDEF"!=s||!e.includes("#")){const e={tipo:s,contenuto:t[2]};i&&(e.tipo2=i),a.push(e)}else{let i=e.match(/^(.*?)\s*#\s*(\w+)\s*(.*?)\s*#\s*(\w+)\s*(.*)$/);i?(a.push({tipo:s,contenuto:i[1].trim()}),a.push({tipo:i[2].toUpperCase(),contenuto:i[3]}),a.push({tipo:"ELSE",contenuto:""}),a.push({tipo:i[4].toUpperCase(),contenuto:i[5]}),a.push({tipo:"ENDIF",contenuto:""})):(i=e.match(/^(.*?)\s*#\s*(\w+)\s*(.*)$/),i?(a.push({tipo:s,contenuto:i[1].trim()}),a.push({tipo:i[2].toUpperCase(),contenuto:i[3]}),a.push({tipo:"ENDIF",contenuto:""})):a.push({tipo:t[1].toUpperCase(),contenuto:t[2]}))}}else addgen(e)}else addgen(e)}let s=0,i=0,r=0,o=[],c=[],l=[];for(let t=0;t<a.length;t++){const e=a[t];switch(e.i=t,e.tipo){case"FOR":case"FORVAR":case"VARIANTE":case"DO":i++,c[i]={pos:t,bk:[]};break;case"LOOP":case"ENDFOR":if(i>0){const{pos:s}=c[i];for(const e of c[i].bk)e.next=t,e.prev=s;e.prev=s,a[s].next=t,i--}break;case"BREAK":case"EXIT":case"EXITFOR":case"CONTINUE":i>0&&c[i].bk.push(e);break;case"IF":case"IFDEF":case"IFNDEF":s++,o[s]={pos:t,bk:[e]};break;case"SELECT":r++,l[r]={pos:t,bk:[e],first:t};break;case"ELSEIF":case"ELSEIFDEF":case"ELSEIFNDEF":case"ELSE":if(s>0){const{pos:i}=o[s];o[s].bk.push(e),a[i].next=t,o[s].pos=t}break;case"CASE":case"CASES":case"DEFAULT":if(r>0){const{pos:s,first:i}=l[r];l[r].bk.push(e),a[s].next=t,e.first=i,l[r].pos=t}break;case"ENDIF":if(s>0){const{pos:e,next:i}=o[s];a[e].next=t;for(const e of o[s].bk)e.last=t;s--}break;case"ENDSELECT":if(r>0){const{pos:e,next:s}=l[r];a[e].next=t;for(const e of l[r].bk)e.last=t;r--}}}return a}function muLimits(t){const e=muClComments(t),a=[];let s;const parsa=t=>t?[...new Set(t.split(",").map((t=>t.trim())).sort().filter((t=>t)))]:void 0;for(const t of e){let e=/^\s*\{(.*)?\}/im.exec(t);if(e)"limit"==clean(e[1])?(s={},a.push(s)):s=void 0;else if(s&&(e=/^\s*:(\w+)\s*(.*)/.exec(t),e))switch(e[1].toLowerCase()){case"opz":case"o":s.opz=parsa(e[2]);break;case"obs":case"obsolete":s.obsolete=parsa(e[2]);break;case"scons":case"sconsigliate":s.scons=parsa(e[2]);break;case"neutri":s.neutri=parsa(e[2]);break;case"art":s.art=parsa(e[2]);break;case"mod":s.mod=parsa(e[2]);break;default:logga("missing:",e[1])}}return a}function parselimitifromdb(t){let e,a=[];if(t&&t.length)for(const s of t){e={},s.varfilter=fromjson(s.varfilter,[]),s.result=fromjson(s.result,[]),s.result2=fromjson(s.result2,[]),s.exclude=parseInt(s.exclude)?1:0,s.exclude2=parseInt(s.exclude2)?1:0;const{item:i,model:r,rule:n,varfilter:o,result:c,result2:l,exclude:u,exclude2:h,datai:f,dataf:d}=s;function remap(t){return t.map((t=>clean("string"==typeof t?t:t.Value,!0))).filter((t=>t))}if(c.length||l.length){if(c.length&&(u?e.ex=remap(c):e.valid=remap(c)),l.length&&(h?e.ex2=remap(l):e.valid2=remap(l)),i&&(e.i=clean(i).split(";")),r&&(e.m=clean(r).split(";")),n&&(e.r=clean(n).split(";")),(f||d)&&f<d&&(e.datai=parseInt(f),e.dataf=parseInt(d)),o&&o.length){e.v=[];for(const m of o){let p=e.v.find((t=>t.v==clean(m.Variant)));p||(p={v:clean(m.Variant),o:[]},e.v.push(p)),p.o=[...p.o,...clean(m.Value).split(";")],p.o=[...new Set(p.o.filter((t=>t)))]}}setlevelimite(e),a.push(e)}}return a=a.sort(((t,e)=>e.l-t.l)),a}function setlevelimite(t){let e=0;t.i&&t.i.length&&(e+=5),t.m&&t.m.length&&(e+=3),t.r&&t.r.length&&(e+=2),t.v&&t.v.length&&(e+=3),t.datai&&t.dataf&&(e+=1),t.l=e}function parselimitifromrule(t){function parsevettorelimiti(t){const e={},a=/^\s*[!:]\s*(\w+)\s*(.*)$/i;function addres(t,a){function addres0(t,a){(a=clean(a))&&(e[t]||(e[t]=[]),e[t].includes(a)||e[t].push(a))}if(Array.isArray(a))for(const e of a)addres0(t,e);else addres0(t,a)}for(const s of t){const t=a.exec(s);if(t)switch(t[1]){case"var":case"v":case"variante":{const a=(t[2]||"").indexOf(" ");if(a>0){const s=clean(t[2].substring(0,a)),i=getcolonne(t[2].substring(a+1));if(s&&i&&i.length){e.v||(e.v=[]);let t=e.v.find((t=>t.v==s));t||(t={v:s,o:[]},e.v.push(t));for(const e of i)t.o.includes(e)||t.o.push(e)}}}break;case"d":case"dt":case"data":case"date":{const a=t[2].split(" "),s=parseInt(a[0]),i=parseInt(a[1]);(s||i)&&(e.datai=s,e.dataf=i)}break;case"rule":case"r":case"mu":addres("r",getcolonne(t[2]));break;case"item":case"i":addres("i",getcolonne(t[2]));break;case"model":case"m":addres("m",getcolonne(t[2]));break;case"e":case"escludi":case"exclude":addres("ex",getcolonne(t[2]))}else addres("valid",getcolonne(s))}return setlevelimite(e),e}let e;if(t&&t.length){for(const a of t){const t=parsevettorelimiti(a);if(t&&(t.valid&&t.valid.length||t.ex&&t.ex.length)){let a=0;t.i&&t.i.length&&(a+=5),t.m&&t.m.length&&(a+=3),t.r&&t.r.length&&(a+=2),t.v&&t.v.length&&(a+=3),t.datai&&t.dataf&&(a+=1),t.l=a,e||(e=[]),e.push(t)}}e&&(e=e.sort(((t,e)=>e.l-t.l)))}return e}class Variante{constructor(t){this.rows={},this.name="$",this.key="$",this.limits=void 0,this.amb=t}setheader(t,e){const{name:a,cat:s}=checkmu(t,e);return this.cat=s,this.name=a,this.alias="",this.obbligo=!1,this.des=a,this.vdef=[],this.rows={},this.h=[],this.key=`${s}/${a}`,{name:a,cat:s}}fromdim(t,e=2){"number"!=typeof t&&(t=muCalc(t)),e>0&&e--;let a,s=1e9;for(const i in this.rows){const r=this.rows[i];if(!r.annulla){const i=parseFloat(r.v[e])||0;i<=s&&i>=t&&(s=i,a=r)}}return this.#t(t,a)}async load(e,a,i=!1){const{name:r,cat:n}=this.setheader(e,a);if(t){const e=await t(n,r);if(e){if(await this.loadContentExtended(e),e.filter)this.limits=parselimitifromdb(e.filter);else if(s&&!i){const t=await s("filter",n,r);t&&t.length&&(this.limits=parselimitifromdb(t))}return!0}}return!1}async _loadContent(t){const e=/^\s*[!:]\s*(\w+)\s*(.*)$/i;let a="";const s=[];let i,r=!1;for(const n of t){const t=n.toLowerCase();if("{limit}"==t)i=[],s.push(i),r=!0;else if("{:limit}"==t)r=!1;else if(r)i.push(n);else{let t=e.exec(clean(n));if(t)if(a&&"extra"==t[1].toLowerCase()){const e=getcolonne(t[2]);for(const t of e){const e=t.indexOf("=");if(e>0){const s=clean(t.substring(0,e));"v"!=s&&(this.rows[a][s]=t.substring(e+1).trim())}}}else switch(t[1].toLowerCase()){case"alias":{const e=t[2].toLowerCase().split(";");if(e[0].trim()!=this.name)if(1==e.length)this.alias=e[0];else{let a;if(this.amb?a=await this.amb.getvariante(e[0]):(a=new Variante,await a.load(e[0],this.cat)),t=a?.rows,t){let a=Object.keys(t);if(a.length){e.splice(0,1);const addrows=e=>{e&&e.forEach((e=>this.rows[e]=t[e]))};for(const t of e){const e=/([ei])\s*:\s*(.*)\s*$/im.exec(t);if(e){const t=e[2].split(",");for(let e=0;e<t.length;e++)t[e]=t[e].trim();a="e"==e[1]?a.filter((e=>{for(const a of t)if(e.startsWith(a))return!1;return!0})):a.filter((e=>{for(const a of t)if(e.startsWith(a))return!0;return!1}))}}addrows(a)}}}}break;case"h":this.h=getcolonne(t[2]).map((t=>({des:t})));break;case"t":{const e=getcolonne(t[2]);if(this.h)for(let t=0;t<this.h.length;t++)this.h[t].t=e[t]||""}break;case"des":this.des=t[2];break;case"default":case"vdef":this.vdef=getcolonne(t[2]);break;case"obbligo":this.obbligo=!0;break;case"noerp":this.noerp=!0;break;case"noobbligo":this.obbligo=!1}else{const t=getcolonne(n),e=clean(t[0]);e&&(a=e,this.rows[a]={annulla:0,v:t})}}}const n=Object.keys(this.rows);for(const t of n)if(t.includes(".")){const e=t.split(".");for(let t=0;t<e.length-1;t++){const a=e.slice(0,t+1).join(".");this.rows[a]||(this.rows[a]={annulla:0,v:[a]})}}return this.limits=parselimitifromrule(s),!0}tovec(){const t=this.rows,e=[],a=Object.keys(t).sort();for(const t of a)this.rows[t].annulla<2&&e.push(this.#t(t,this.rows[t]));return e}#t(t,e){const a=[t];if(e)for(const t of e.v)"string"==typeof t&&(t.includes(",")||t.includes(";"))?a.push(quote(t)):a.push(t||"");return a.join(",")}tovar(t,e=""){const a=clean(t);if(!this.rows[a])return e||t;const s=this.rows[a];return 2==s.annulla?"":this.#t(e||t,s)}isvalidopz(t){const e=clean(t),a=this.rows[e];return!!a&&(1!=a.annulla&&!a.hasliv)}firstvalid(t,e=void 0){const a=t.indexOf(",");if(a>0&&(t=t.slice(0,a).trim()),t&&this.isvalidopz(t))return t;if(e&&e.length)for(const t of e)if(this.isvalidopz(t))return t;if(this.vdef&&this.vdef.length)for(const t of this.vdef)if(this.isvalidopz(t))return t;const s=Object.keys(this.rows).sort();for(let t=0;t<s.length;t++){const e=s[t];if(!(t<s.length-1&&s[t+1].startsWith(e+"."))&&this.isvalidopz(e))return e}}resetfilter(){delete this._valids;for(const t in this.rows)this.rows[t].annulla=0}validkeys(){let t=Object.keys(this.rows)||[];return t=t.filter((t=>0==this.rows[t].annulla)).sort(),t}limitfiltra(t){if(!t)return;t=muClComments(t.toLowerCase());const e=[];for(const a of t){const t=/^#(i|e|xe|xi|x\+|x-|x)(\d*)\s+(.+)$/i.exec(a);if(t){const a={ex:t[1],col:(parseInt(t[2])||1)-1,val:"x"==t[1]?t[3]:getcolonne(t[3])};a.val.length&&e.push(a)}}if(e.length)for(const t in this.rows){const a=this.rows[t];for(const t of e)if("e"==t.ex){if(_check((a.v[t.col]+"").toLowerCase(),t.val)){a.annulla=1;break}}else if(t.ex.startsWith("x")){const e=(a.v[t.col]+"").toLowerCase().split(/[,;]/).map((t=>t.trim()));if("xe"==t.ex){if(_check((t.val+"").toLowerCase(),e)){a.annulla=1;break}}else if("x+"==t.ex){if(parseFloat(a.v[t.col])<=parseFloat(t.val)){a.annulla=1;break}}else if("x-"==t.ex){if(parseFloat(a.v[t.col])>=parseFloat(t.val)){a.annulla=1;break}}else if(!_check((t.val+"").toLowerCase(),e)){a.annulla=1;break}}else if(!_check((a.v[t.col]+"").toLowerCase(),t.val)){a.annulla=1;break}}function _check(t,e){if(1==e?.length&&"."==e[0])return!!t;return!!e.find((e=>e.startsWith(t)))}}limita(t){if(this.resetfilter(),t&&t.length&&this.limitfiltra(t),!this.limits||!this.amb)return this;const{item:e,rule:a,model:s,vari:i,data:r}=this.amb,valid=(t,e)=>!e||!e.length||!!t&&e.includes(t),n=this.limits.filter((t=>{if(!valid(e,t.i))return!1;if(!valid(a,t.r))return!1;if(!valid(s,t.m))return!1;if(r&&t.datai&&r<t.datai)return!1;if(r&&t.dataf&&r>t.dataf)return!1;if(t.v&&t.v.length)for(const e of t.v){const t=clean(i.var(e.v).split(",")[0],!0);if(t&&!e.o.includes(t))return!1}return!0}));if(!n||!n.length)return this;const o=new Set,c=new Set,l=new Set,u=new Set;let h=!1,f=!1;for(const t of n){if(t.valid&&t.valid.length){h=!0;t.valid.filter((t=>t.indexOf("*")>0)).map((t=>t.split("*")[0])).forEach((t=>o.add(t))),t.valid.filter((t=>!t.includes("*"))).forEach((t=>l.add(t)))}if(t.ex&&t.ex.length){f=!0;t.ex.filter((t=>t.indexOf("*")>0)).map((t=>t.split("*")[0])).forEach((t=>c.add(t))),t.ex.filter((t=>!t.includes("*"))).forEach((t=>u.add(t)))}}for(const t in this.rows){const e=this.rows[t];let a=!1,s=!1;if(h){for(const e of o)if(t.startsWith(e)){a=!0;break}!a&&l.has(t)&&(a=!0)}if(f){for(const e of c)if(t.startsWith(e)){s=!0;break}!s&&u.has(t)&&(s=!0)}h&&!a&&(e.annulla=1),f&&s&&(e.annulla=1)}return n}async loadContentExtended(t){if("object"==typeof t){for(const e in t)["rows","des","h","alias","obbligo"].includes(e)&&(this[e]=t[e]);"string"==typeof t.def&&t.def.length&&(this.vdef=getcolonne(t.def.trim().toLowerCase())),t.filter&&t.filter.length&&(this.limits=parselimitifromdb(t.filter))}else await this._loadContent(muClComments(t,!1))}todata(){return{name:this.name,des:this.des,alias:this.alias,obbligo:this.obbligo,h:this.h,rows:this.rows,limits:this.limits,key:this.key}}}const v={};async function getcbfunc(t,e,s,i,r,n){if(a){if(v[e])return"";let t=await a(e,s,i,r,n);return isObject(t)||(t=(t||"").trim(),"!"==t&&(v[e]=!0,t="")),t}return t}async function intvaluta(t,e,a){return t.vari.valuta(a,(async(a,s)=>{switch(a){case"dim":{let a=muCalc(s[1]),i=await dammivariante(t,e,s[2]),r=parseInt(s[3])||2;return i&&i.fromdim?i.fromdim(a,r):a}case"seed":{let t=s[1],e=getcolonne(s[2]);return e[seeder(e.length,t)]||""}case"seedvar":{let a=await dammivariante(t,e,s[2]),i=s[1],r=a.validkeys();if(s[3]&&s[4]){let t=muCalc(s[3])-1;if(t>=0){let e=getcolonne(s[4]);r=r.filter((s=>{let i=a.rows[s];if(i&&i.v&&i.v[t]){let a=getcolonne(i.v[t]);if(a)for(let t of e)if(a.includes(t))return!0}return!1}))}}let n=seeder(r.length,i);return n>=0&&a.tovar(r[n])||""}default:return await getcbfunc(`**fun:${a}**`,a,s,t.vari,t)}}))}async function dammivariante(t,e,a){let s;return s=e&&e?.localvar&&e.localvar[a]?e.localvar[a]:await t.getvariante(a),s}async function impostavariante(t,e,a,s,i){let r,n=a;if((s=s||"")&&"string"==typeof s){const t=s.indexOf(":");t>=0&&(t>0&&(n=clean(s.slice(0,t))),s=s.slice(t+1))}if(i&&i.alias&&(n=i.alias),e&&e.paralias&&e.paralias[a]&&(n=e.paralias[a]),r=await dammivariante(t,e,n),r)if(i&&i.t){i.des||(i.des=r.des);let e=i?.filtra||"";if(e.includes("$")&&(e=await t.vari.valuta(e)),"m"===i.t){let t=2;if(s.includes(":")){const e=s.split(":");t=parseInt(e[1]),s=e[0]}r.limita(e),s=r.fromdim(parseFloat(s),t)}else{r.limita(e);const t=r.firstvalid(s,getcolonne(i.def));s=r.tovar(t)}}else r.resetfilter(),s=r.firstvalid(s),s=r.tovar(s);else i&&i.t&&i.t;return t.vari.add(a,s),s}async function pushpars(t,e,a,s){const i={},r=[];if(a)for(const s of a){const{v:a,o:n,fl:o}=getcouple(s);i[a]||(i[a]=!0,r.push({v:a,o:t.vari.var[a]}),o&&await impostavariante(t,e,a,n))}if(s)for(const a of s){const{v:s,o:n,fl:o}=getcouple(a);i[s]||(i[s]=!0,r.push({v:s,o:t.vari.var[s]}),o&&await impostavariante(t,e,s,n))}return r}function poppars(t,e){if(e)for(const a of e)t.vari.add(a.v,a.o)}const outpush=(t,e)=>{null!=e&&null!=e&&("object"==typeof e?t.push(JSON.stringify(e,null,2)):"string"==typeof e&&e.startsWith("_ ")&&t.length>0&&"string"==typeof t[t.length-1]?t[t.length-1]+=e.slice(2):t.push(...e.split("\n")))};async function muEval(t,e,a,s){if(!Array.isArray(a))return n.add("codice is not a valid parsed array"),[];s||(s={}),s.id||(s.id="_"),s._stackmacro||(s._stackmacro=0),s.limited||(s.limited=!1),t||n.add("amb deve essere definito");const i=t.vari;t.maxdelays,t.cat;const r=[];let o,c,l;tk();for(let u=0;u<a.length;){let h=a[u];switch(h.tipo){case"IFDEF":case"IFNDEF":case"IF":{const f="IF"==h.tipo?muCalc(await intvaluta(t,e,h.contenuto)):"IFDEF"==h.tipo?""!=await intvaluta(t,e,h.contenuto):""==await intvaluta(t,e,h.contenuto);h.next?(a[h.next].jlast=f?1:0,f||(u=h.next-1)):n.add("Troppo tempo",h)}break;case"SELECT":h.next?(a[h.next].t1=await intvaluta(t,e,h.contenuto),u=h.next-1):n.add("manca endselect",h);break;case"CASE":case"CASES":case"DEFAULT":if(h.next)if(h.jlast)h.jlast=0,u=h.last-1;else{let d,m=1;const _getvv=async()=>{let a=await intvaluta(t,e,h.contenuto);return a=a.includes(":")&&!a.includes(",")?a.split(":").map((t=>(t||"").trim())):getcolonne(a),a};if("CASE"==h.tipo){m=0,d=await _getvv();const p=muCalc(h.t1||"");d.find((t=>muCalc(t)==p))&&(m=1)}else if("CASES"==h.tipo){m=0,d=await _getvv();const v=h.t1||"";d.find((t=>t==v))&&(m=1)}a[h.next].jlast=m?1:0,a[h.next].t1=h.t1,m||(u=h.next-1)}else n.add("manca select",h);break;case"ELSEIF":case"ELSEIFDEF":case"ELSEIFNDEF":case"ELSE":if(h.next)if(h.jlast)h.jlast=0,u=h.last-1;else{const g="ELSE"==h.tipo?1:"ELSEIF"==h.tipo?muCalc(await intvaluta(t,e,h.contenuto)):"ELSEIFDEF"==h.tipo?""!=await intvaluta(t,e,h.contenuto):""==await intvaluta(t,e,h.contenuto);a[h.next].jlast=g?1:0,g||(u=h.next-1)}else n.add("manca endif",h);break;case"ENDIF":case"ENDSELECT":case"CACHE":case"CVAR":break;case"PUSH":i.push();break;case"POP":i.pop();break;case"INC":case"I":if(s._stackmacro>500)n.add("stack chiamate macro troppo profondo!",h);else if(({macro:o,pars:c,xid:l}=await t.getmacro(h)||{}),o){s._inc=!0,s._stackmacro++;const b={},w=o.parametri?._;if(w&&w.length)for(const k of w){const x=clean(k.split("=")[0]||"",!0);x&&(b[x]=i.dictionary[x])}await o.impostaparametri(w,c);const y=await muEval(t,o,o.codice,s);for(const C in b)b[C]?i.dictionary[C]=b[C]:delete i.dictionary[C];r.push(...y),s._stackmacro--,s._inc=!1}break;case"RET":{const E=await intvaluta(t,e,h.contenuto);t.vari.savevars(E)}break;case"MACRO":case"M":case"FUNC":case"F":if(s._stackmacro>500)n.add("stack chiamate macro troppo profondo!",h);else{let{macro:O,pars:_,xid:$}=await t.getmacro(h)||{};if(O){const F=!!s.grafica||["F","FUNC"].includes(h.tipo),S=s.id||"",I=O.parametri?._,L={};if(F)i.push();else{if(O.head)for(const A of O.head)L[A.cod]=t.vari.var(A.cod);if(I&&I.length)for(const z of I){const M=(z.split("=")[0]||"").trim().toLowerCase();M&&(L[M]=i.dictionary[M])}}if(O.codice.length){if(s._stackmacro++,s.grafica&&"function"==typeof s.grafica){let j="",W="";_&&_.length?(j=_.find((t=>t.startsWith("#id"))),j?(j=await i.valuta(j.slice(4)),j.startsWith("#")?s.id=j:s.id=hash(`${u}${O.name}${S}${j}`),_=_.filter((t=>!t.startsWith("#id"))),W=s.id):s.id=hash(`z${S}${u}`)):s.id=hash(`z${S}${u}`);let N=t.pick.key;t.pick.key=s.id;const T=await s.grafica({tipo:h.tipo,id:W,pars:_,parametri:I,macro:O,options:s,vari:t.vari,amb:t});t.pick.key=N,r.push(T)}else{await O.impostaparametri(I,_);let V=t.vari.var("_rootnode");t.vari.add("_rootnode","0");const D=await muEval(t,O,O.codice,s);t.vari.add("_rootnode",V),r.push(...D)}s._stackmacro--}if(F)i.pop();else for(const R in L)L[R]?i.dictionary[R]=L[R]:delete i.dictionary[R];s.id=S}else n.add("Macro non trovata!",h)}break;case"SETDEF":{let P=getcolonne(h.contenuto.toLowerCase()),J=await dammivariante(t,o,P[0]),K=P[1]||"def_",U=P[2];if(K.endsWith("_")||(K+="_"),J&&J.rows){P=Object.keys(J.rows),U&&(P=P.filter((t=>t.startsWith(U))));for(let q of P){let G=`${K}${q}`;if(!i.dictionary[G]){function torow(t){const e=[];if(t)for(const a of t.v.slice(1))"string"==typeof a&&(a.includes(",")||a.includes(";"))?e.push(quote(a)):e.push(a||"");return e.join(",")}i.add(G,await intvaluta(t,e,torow(J.rows[q])))}}}}break;case"LET":case"LETS":{let B=h.contenuto.indexOf("="),H=-1;if(B>=0&&(H=h.contenuto.indexOf("=",B+1)),H<0){const X=h.contenuto;if(B=X.indexOf("="),B>0){const Z=await intvaluta(t,e,X.slice(0,B).trim());let Q=X.slice(B+1).trim();Q="LET"==h.tipo?muCalc(await intvaluta(t,e,Q))||"":await intvaluta(t,e,Q),i.add(Z,Q)}}else{const Y=getcolonne(h.contenuto);for(const tt of Y)if(B=tt.indexOf("="),B>0){const et=await intvaluta(t,e,tt.slice(0,B));let at=tt.slice(B+1).trim();at="LET"==h.tipo?muCalc(await intvaluta(t,e,at))||"":await intvaluta(t,e,at),i.add(et,at)}}}break;case"LETT":{const st=h.contenuto.indexOf("=");if(st>0){const it=await intvaluta(t,e,h.contenuto.slice(0,st).trim()),rt=await intvaluta(t,e,h.contenuto.slice(st+1).trim());i.add(it,rt)}}break;case"LOOK":case"LOOKB":{const nt=getcolonne(await intvaluta(t,e,h.contenuto)),ot=muCalc(nt[1]),ct=muCalc(nt[3]),lt=await dammivariante(t,o,nt[2]);if(lt&&lt.rows){const ut=Object.values(lt.rows).reduce(((t,e)=>{const a=parseInt(e.v[ct?ct-1:0]);return a&&("LOOKB"==h.tipo?a<=ot&&a>t.v&&(t.v=a,t.c=e.v[0]):a>=ot&&a<t.v&&(t.v=a,t.c=e.v[0])),t}),{v:"LOOKB"==h.tipo?0:1/0,c:""});ut&&ut.c&&(t.vari.add(nt[0],lt.tovar(ut.c)),s.checkheader&&"function"==typeof s.checkheader&&await s.checkheader({variante:nt[0],valore:lt.tovar(ut.c),riga:h}))}else t.vari.add(nt[0],`${ot},no,no`)}break;case"LETV":case"LETM":case"DEF":{const ht=getcolonne(h.contenuto);if(ht)for(const ft of ht){let{v:dt,o:mt,fl:pt}=getcouple(ft);if(pt){dt=await i.valuta(dt),mt=await intvaluta(t,e,mt);const vt=await impostavariante(t,e,dt.trim().toLowerCase(),mt.trim().toLowerCase(),"LETM"==h.tipo?{t:"m"}:{t:"v"});s._stackmacro<=0&&s.checkheader&&"function"==typeof s.checkheader&&await s.checkheader({variante:dt,valore:vt,riga:h})}}}break;case"DO":{const gt=(h.contenuto||"").trim();let bt=!0;gt&&!muCalc(await intvaluta(t,e,gt))&&(bt=!1),h.next&&(bt||(u=h.next+1))}break;case"VARIANTE":case"FORVAR":case"FOR":{let wt,yt,kt,xt;if(s.oldstyle?(wt=h.contenuto.split(","),xt=wt[2]||"i",kt=wt[0],yt=wt[1]):(wt=getcolonne(h.contenuto||""),xt=wt[0]||"",kt=clean(wt[1],!0),yt=wt[2]||""),xt=xt.includes("$")?await intvaluta(t,e,xt):xt||"","FORVAR"==h.tipo||"VARIANTE"==h.tipo){const Et=await intvaluta(t,e,kt),Ot=Et?await dammivariante(t,e,Et):void 0;Ot?kt=Ot.tovec():(kt=[],n.add("getvariante not found!",h))}else{const _t=await intvaluta(t,e,kt||"");kt=kt?getcolonne(_t):void 0}kt=kt||[];const Ct=0;if(h.next){a[h.next].for={v:xt,elenco:kt,nc:Ct,valido:yt};let $t,Ft=!0;xt&&kt.length>0?Ct>=kt.length?Ft=!1:($t=kt[Ct],i.add(xt,$t),yt&&(Ft=!muCalc(await intvaluta(t,e,yt)))):Ft=!1,Ft||(u=h.next-1)}else n.add("manca endfor/loop",h)}break;case"LOOP":{let St=!0;h.contenuto&&!muCalc(await intvaluta(t,e,h.contenuto))&&(St=!1),St&&(u=h.prev-1);break}case"ENDFOR":if(!h.contenuto||muCalc(await intvaluta(t,e,h.contenuto)))if(h.for){const{v:It,elenco:Lt,valido:At}=h.for;if(It&&Lt.length>0&&h.for.nc<500)for(;;){if(h.for.nc++,h.for.nc<Lt.length){if(i.add(It,Lt[h.for.nc]),At&&muCalc(await intvaluta(t,e,At)))continue;u=h.prev;break}break}}else n.add("manca istruzione for",h);break;case"BREAK":case"EXIT":case"EXITFOR":h.next?h.contenuto.trim()?muCalc(await intvaluta(t,e,h.contenuto))&&(u=h.next):u=h.next:n.add("break outside loop",h);break;case"CONTINUE":h.next?h.contenuto&&!muCalc(await intvaluta(t,e,h.contenuto))||(u=h.next-1):n.add("continue outside loop",h);break;case"MSG":case"LOG":{const zt=await intvaluta(t,e,h.contenuto);logga(zt),n.add(zt)}break;default:{let Mt;if(h.contenuto.startsWith("!")){Mt=await intvaluta(t,e,h.contenuto);let jt="";const Wt=/^!(.\w+)[\s;,]\s*(.+)?$/gim.exec(Mt);if(Wt)if(Wt[1].startsWith("."))await getcbfunc(Mt,Mt.slice(1),[],i,t),jt="";else{const Nt=Wt[1].toLowerCase(),Tt=getcolonne(Wt[2]||"");jt=await getcbfunc(Mt,Nt,Tt,i,t)}jt&&outpush(r,jt)}else s.parsefnpunto&&"function"==typeof s.parsefnpunto&&h.contenuto.startsWith(".")?await s.parsefnpunto({dati:h.contenuto,output:r,id:s.id,vari:t.vari,amb:t}):(Mt=await intvaluta(t,e,h.contenuto),outpush(r,Mt))}}u++}return r}async function muGenerate(t,e,a,s,i=0){if(t.isgenera&&s){const r={counter:0,keys:{},isTestmode:i};if(a){if(!t.genera[a])return!1;await muGenerate_0(t,e,a,s,r)}else for(const a in t.genera)await muGenerate_0(t,e,a,s,r);return!0}}async function muGenerate_0(t,e,a,s,i){const r=t.genera[a];if(r){i.counter2=0;const n={};async function processavariante(o){if(i.isTestmode&&i.counter>i.isTestmode)return;if(o<r.vars.length){const a=r.vars[o];if(!n[a]){const s=await dammivariante(e,t,a),i=s?Object.keys(s.rows):void 0;if(i&&i.length>0){for(const t of i)e.vari.add(s.name,s.tovar(t)),n[a]=!0,await processavariante(o+1),n[a]=!1;return}logga("manca la variante",a)}}for(const a of r.calcola)t.formula[a]&&await muEval(e,t,t.formula[a],{limited:!0});for(const a of r.exclude)if(t.formula[a]){const s=await muEval(e,t,t.formula[a],{limited:!0});if(s)for(const t of s){if(muCalc(t))return}}const c=await muEval(e,t,r.codice,{limited:!0,localvar:t.localvar}),l={};for(const a of r.bom)if(t.formula[a]){let s=await muEval(e,t,t.formula[a],{limited:!0});s=s.join("\n").split("\n");for(const t of s)if(t){const e=getcolonne(t);l[a]||(l[a]=[]);const s={};for(let t=0;t<e.length;t++)s[`c${t}`]=e[t];l[a].push(s)}}await async function docallback(t,e,a,s,i,r){let n=!0;for(const o of e){const e=getcolonne(o);if(e[0]&&!r[e[0]]){r[e[0]]=1,r.counter++,r.counter2++;const o={__id:r.counter};for(let t=0;t<e.length;t++){let a=s.head[t]?s.head[t]:`c${t}`;"#"==a[0]?(a=a.substr(1),o[a]=Math.round(1e3*muCalc(e[t]))/1e3):o[a]=e[t]}await t(i,o,n?a:void 0,r.counter,r.counter2),n=!1}}}(s,c,l,r,a,i)}await processavariante(0)}}const g=["l","a","p"],b=/^\{(:?(var|valid|formula|genera|header|v|f|g|h))[\s|}]/im,w=["s","g","h","p","q"],y=[{cod:"t",des:"Variante"},{cod:"q",des:"V.Query"},{cod:"f",des:"Valore Fisso"},{cod:"g",des:"Gruppo"},{cod:"s",des:"Libero"},{cod:"m",des:"Misura"},{cod:"c",des:"Check (no/si)"},{cod:"z",des:"Check (si/no)"},{cod:"h",des:"Hidden"},{cod:"p",des:"Programmato"}],k=[{cod:"",des:"Libero"},{cod:"a",des:"Area"},{cod:"t",des:"Thumb",folder:"thumbs"},{cod:"i",des:"Image",folder:"textures"},{cod:"x",des:"3D file",folder:"3d"},{cod:"f",des:"Funzione",folder:"script"}];function valutaCondizioniTestata(t,e){const a=e.split("\n");for(const e of a)if(e.trim()){if(muCalc(t.valutasync(e)))return!0}return!1}class Macro{constructor(t,e){const{name:a,cat:s}=checkmu(e,t.cat||"");this.name=a,this.cat=s,this.amb=t,this.azzera()}azzera(){this.key=`${this.cat}/${this.name}`,this.localvar={},this.head=[],this.frontend=!1,this.valid=[],this.parametri={},this.paralias={},this.formula={},this.settings={},this.errori=[],this.codice=[],this.genera={}}get isgenera(){return Object.keys(this.genera).length||0}get iscodice(){return this.codice.length||0}get isheader(){return this.head?.length||0}geterrori(){const t=[];return this.errori.forEach((e=>t.push({e:e}))),t}getparametri(t={}){const{noderiva:e}=t,a={};if(this.dims&&g.forEach((t=>{const e=muCalc(this.amb.vari.var(t));e&&(a[t]=String(e))})),this.head){for(const t of this.head)if(!t._h){if(e&&t._d&&t._d.cod)continue;let s=this.amb.vari.var(t.cod);w.includes(t.t)||"string"==typeof s&&(s=s.split(",")[0]),a[t.cod]=s}}else if(this.parametri?._)for(const t of this.parametri._){const e=(t.split("=")[0]||"").trim().toLowerCase();let s=this.amb.vari.var[e];s=(s||"").split(",")[0],a[e]=s}return a}async setparametri(t){const e={},a=this.amb.ruleset||{};t||(t={}),this.dims&&g.forEach((e=>{let a=t[e]||this.dims[e].val;a=parseFloat(a)||0,this.dims[e].visible&&(a<this.dims[e].min&&(a=this.dims[e].min),a>this.dims[e].max&&(a=this.dims[e].max)),t[e]=String(a)}));for(const s of this.head){const i=a[s.cod];i&&(i.islock?(s.visible="0",t[s.cod]=i.opz,s._islock=!0):t[s.cod]||(t[s.cod]=i.opz)),"g"!=s.t&&("z"!=s.t||t[s.cod]||(t[s.cod]="1"),s._v=t[s.cod]||"",e[s.cod]=!0)}for(const a in t)e[a]||(e[a]=!0,await impostavariante(this.amb,this,a,t[a]));return this.head?.length>0&&await this.setparametro(this.head[0].cod,t[this.head[0].cod]||void 0,!0,t),this.getparametri()}async setparametro(t,e,a=!1,s={}){if(e&&"string"==typeof e&&e.includes("$")&&(e=await intvaluta(this.amb,this,e)),s||(s={}),this.head){const _imposta=async(t,e,a,i)=>{const r=t?.cod;if(t.valid&&!t._h1){const e=!valutaCondizioniTestata(this.amb.vari,t.valid);if(t._h!=e&&(t._h=e,["g","g1","g2"].includes(t.t)))for(let e=a+1;e<this.head.length;e++){const a=this.head[e];if(a){if(["g","g1","g2"].includes(a.t))break;a._h1=t._h}}}if(t._h||t._h1)return this.amb.vari.add(r,""),t._v=void 0,"";{if(delete t._h2,t.visible){const e=!valutaCondizioniTestata(this.amb.vari,t.visible);if(e&&(t._h2=e),["g","g1","g2"].includes(t.t))for(let e=a+1;e<this.head.length;e++){const a=this.head[e];if(a){if(["g","g1","g2"].includes(a.t))break;t._h2?a._h3=t._h2:delete a._h3}}}let i=this.amb.vari.var(r)||"";"thlm".includes(t.t)&&"string"==typeof i&&(i=i.split(",")[0]);let n=i;if("z"!=t.t||i||(this.amb.vari.add(r,"1"),i="1"),"m"==t.t&&t.spars){let e=t.spars;(e||"").includes("$")&&(e=await intvaluta(this.amb,this,e));const a=getcolonne(e);i=parseFloat(i||a[0])||0,(!a[1]||"").includes(";")&&(a[1]&&parseFloat(i)<a[1]&&(i=parseFloat(a[1])||0),a[2]&&parseFloat(i)>a[2]&&(i=parseFloat(a[2])||0)),i=String(i),this.amb.vari.add(r,i)}const o=await impostavariante(this.amb,this,r,e||t._v||i,t);if(t._v=void 0,i=this.amb.vari.var(r)||"","thl".includes(t.t)&&"string"==typeof i&&(i=i.split(",")[0],this.amb&&this.amb.deriva&&this.amb.deriva.length>0)){const e=this.amb.deriva.filter((t=>t.cod==r&&((!t.item||t.item==this.amb.item)&&((!t.model||t.model==this.amb.model)&&((!t.rule||t.rule==this.amb.rule)&&(!t.opz||t.opz==i))))));e.length&&e.forEach((e=>{let a=this.head.find((t=>t.cod==e.tocod));if(a){let r=this.amb.vari.var(a.cod);s&&s[a.cod]&&(r=s[a.cod]),"string"==typeof r&&(r=r.split(",")[0],r&&r!=n&&r!=i?delete a._d:(a._v=e.toopz||i,a._d={cod:t.cod,opz:e.toopz}))}}))}return o}};let i,r=-1;if("#dim"==t)a=1;else{if(r=this.head.findIndex((e=>e.cod===t)),r<0)return;const s=this.head[r];i=await _imposta(s,e,r),a&&delete s._d}if(a)for(let t=r+1;t<this.head.length;t++)await _imposta(this.head[t],void 0,t);return i}return await impostavariante(this.amb,this,t,e)}getmarker(){let t;if(this.head&&this.head.length){let e=this.head.find((t=>"marker"==(t.stipo||"").trim().toLowerCase().split(/[;,]/)[0].trim()));e&&e.cod&&(t=e.cod)}return t}isderivato(t){return"string"==typeof t&&(t=this.head.find((e=>e.cod==t))),!!(t&&t._d&&t._d.cod)}async impostaparametri(t,e,a=!1,s){if(this.head){this.paralias||(this.paralias={}),Array.isArray(this.head)||(this.head=[]);for(const t of this.head)t._v="",delete t._h,delete t._h1,delete t._h2,t.alias&&(this.paralias[t.cod]=t.alias)}s||(s={}),t||(t=[]),e||(e=[]);for(const a of[...t,...e]){const t=a.indexOf("=");if(t>0){let e=clean(a.substr(0,t));e.includes("$")&&(e=await intvaluta(this.amb,this,e));let s,i=a.substr(t+1);i.includes("$")&&(i=await intvaluta(this.amb,this,i)),this.head&&(s=this.head.find((t=>t.cod==e)))?s._v=i:await impostavariante(this.amb,this,e,i)}}if(this.head){let t=!0;for(const e of this.head){let i=await this.checkvalid(e.valid);a&&(i=!0),["g","g1","g2"].includes(e.t)?t=i:t&&i&&await this.setparametro(e.cod,s[e.cod]||e._v)}}}async checkvalid(t){if(!t)return!0;return!!muCalc(await intvaluta(this.amb,this,t))}getmacrostr(){return JSON.stringify(this.getmacro())}getmacro(){return getOggetto(this,["amb"])}setmacro(t){if(setOggetto(this,fromjson(t,{})),this.localvar)for(const t in this.localvar){const e=new Variante;setOggetto(e,this.localvar[t]),this.localvar[t]=e}}async load(t,a){let s,i;try{let r;if(({name:s,cat:i}=checkmu(t||this.name,a||this.cat||"")),this.name||(this.name=s),this.cat||(this.cat=i),this.azzera(),e&&(r=await e(i,s),"string"==typeof r&&(r.startsWith("{")||r.startsWith("["))&&(r=fromjson(r)),r&&r.head&&!Array.isArray(r.head)&&(r.head=[]),this.amb.checkscripts(r.linkscript),delete r.linkscript,r.head&&(r.dims=getheaddims(r.dims))),r){if("string"==typeof r)await this.parsedata(r);else for(const t in r)this[t]=r[t];return!0}n.add(`missing cbGetFile: ${i}/${s}`)}catch(t){n.add(geterrdes(t),`macro.load: ${s}/${i}`)}}async loadAndCompile(t,e,a=!1){let s;const{name:r,cat:o}=checkmu(t,this.cat||e);return this.azzera(),i&&(s=await i(o,r)),s?(await this.parsedata(s,a),this.getmacro()):void n.add(`missing cbGetFile: ${r}/${o}`)}async#e(t,e,a,s){let r;const{name:n,cat:o}=checkmu(t,this.cat);if(i&&(r=await i(o,n)),!r)return[];if(r.includes("$1")&&s&&s.length>0)for(let t=1;t<s.length;t++)r=r.replaceAll(`$${t}`,s[t]);let c=muClComments(r);const l=[];e&&(c=c.filter((t=>!/^\{(:?(var|valid|formula|header|genera|v|f|h))[\s|}]/im.test(t))));for(const t of c){const s=b.exec(t);if(s)e=!s[1].startsWith(":"),l.push(t);else{const s=/^\s*\{i\s(.+)?\}/im.exec(t);if(s){const t=getcolonne(s[1]);if(!a.includes(t[0])){a.push(t[0]);const s=await this.loadinclude(t[0],e,a,t);Array.isArray(s)&&l.push(...s),a.pop()}}else l.push(t)}}return l}async parsedata(t,e=!1){if(this.azzera(),!t)return;const a=[];let s=muClComments(t),i=!1;const r=[];for(const t of s){const e=b.exec(t);if(e)i=!e[1].startsWith(":"),a.push(t);else{const e=/^\s*\{i\s(.+)?\}/im.exec(t);if(e){const t=getcolonne(e[1]),s=await this.#e(t[0],i,[t[0]],t);Array.isArray(s)&&a.push(...s)}else a.push(t)}}i=!1;let n=this.codice;for(const t of a){const e=b.exec(t);if(e)if(e[1].startsWith(":"))n=this.codice;else switch(e[1]){case"genera":case"g":{let e=/^\s*\{(genera|g)\s+(.+)?\}/im.exec(t);if(e){const t=checkname(getcolonne(e[2])[0]);this.genera[t]=[],n=this.genera[t]}else n=this.errori,n.push(t)}break;case"valid":n=this.valid;break;case"var":case"v":{const e=/^\s*\{(var|v)\s+(.+)?\}/im.exec(t);if(e){const t=getcolonne(e[2]),a=checkname(t[0]);this.localvar[a]={name:a,des:t[1]||"",rows:[]},n=this.localvar[a].rows}else n=this.errori,n.push(t)}break;case"formula":case"f":{const e=/^\s*\{(formula|f)\s+(.+)?\}/im.exec(t);if(e){const t=checkname(e[2]);this.formula[t]=[],n=this.formula[t]}else n=this.errori,n.push(t)}break;case"h":case"header":n=r;break;default:this.errori.push(t),n=this.errori}else t.startsWith("{")&&(n=this.codice),n.push(t)}this.parametri={},this.codice=this.cleanfiltraparametri("_",this.codice,e);for(const t in this.formula)this.formula[t]=this.cleanfiltraparametri(t,this.formula[t],e);for(const t in this.localvar){const e=new Variante,a=this.localvar[t];e.setheader(t,this.cat),e.rows={};for(const t of a.rows){const a=getcolonne(t),s=a[0].trim().toLowerCase();e.rows[s]={annulla:0,v:a}}a.des&&(e.des=a.des),this.localvar[t]=e}s=this.valid,this.valid=[];for(const t of s){let e=getcouple(t,",");e={v:e.v,msg:e.o},e.v&&(e.v.startsWith("#")?this.formula[e.v.substring(1)]&&this.valid.push(e):this.valid.push(e))}s=r;const o=[];for(const t of s){const e=/^\s*([\w\-_]+)+[;,\s]\s*(.*)?$/im.exec(t);if(e){const t=getcolonne(e[2]),a=clean(e[1]);let s;if(a){s=o.find((t=>t.cod==a)),s||(s={cod:a,t:"t"},o.push(s));for(const e of t){const t=getcouple(e);switch(t.v){case"t":s.t=t.o;break;case"def":case"default":s.def=t.o;break;case"valid":case"colonna":case"hidden":t.o.startsWith("#")?this.formula[t.o.substring(1)]&&(s[t.v]=t.o):s[t.v]=t.o;break;default:s[t.v]=t.o}}}}}this.head=o,s=this.genera;const c={};for(const t in s)if(Array.isArray(s[t])){const e={codice:[],head:"",calcola:[],bom:[],vars:[],exclude:[]},a=/^\s*[!:]\s*(\w+)\s*(.*)$/i;for(const i of s[t]){const s=a.exec(clean(i));if(s)switch(s[1]){case"calcola":case"c":e.calcola=[...e.calcola,...getcolonne(s[2])];break;case"exclude":case"e":case"escludi":e.exclude=[...e.exclude,...getcolonne(s[2])];break;case"bom":case"db":e.bom=[...e.bom,...getcolonne(s[2])];break;case"vars":case"v":e.vars=[...e.vars,...getcolonne(s[2])];break;case"head":case"h":e.head=getcolonne(s[2]);break;default:this.errori.push(`genera ${t} => ${i}`)}else e.codice.push(i)}e.codice=muClean(e.codice,!0),c[t]=e}this.genera=c}cleanfiltraparametri(t,e,a){if(this.paralias||(this.paralias={}),e&&e.length){let a=!1;const getparalias=t=>{const e=[],a=getcolonne(t);for(const t of a)if(t.includes(":")){const a=t.split(":");this.paralias[a[0]]=a[1],e.push(a[0])}else e.push(t);return e};for(let s=0;s<e.length;s++){const i=/^:p[;,\s]+(.*)?$/im.exec(e[s]);if(i)e[s]=null,a=!0,this.parametri[t]=getparalias(i[1]);else{const i=/^!(parametri|pars|p)[;,\s]+(.*)?$/im.exec(e[s]);i&&(e[s]=null,a=!0,this.parametri[t]=getparalias(i[2]))}}a&&(e=e.filter((t=>null!=t)))}return e=muClean(e,a)}}function parsevariabili(t){let e=!1;const a=[];for(;;){const s=/\$([{[(])/m.exec(t);if(!s){t&&e&&a.push({class:"",text:t});break}{e=!0;const i="["==s[1]?"inline":"variabile";s.index>0&&a.push({class:"",text:t.substring(0,s.index)});const{i:r}=parsevar(t,s.index+2,s[1],null);if(!(r>s.index)){a.push({class:i,text:t.substring(s.index)});break}a.push({class:i,text:t.substring(s.index,r+1)}),t=t.substring(r+1)}}return{fl:e,tk:a}}function parseexp(t,e,a){if(!a)throw new Error("missing callback");let s=!1;const i=[];for(;;){const r=e.exec(t);if(!r){t&&s&&i.push({class:"",text:t});break}r.index>0&&i.push({class:"",text:t.substring(0,r.index)}),i.push(...a(r)),s=!0,t=t.substring(r.index+r[0].length)}return{fl:s,tk:i}}function muParsecode(t,e){t||(t=" "),t.endsWith("\n")&&(t+=" ");const a=[{class:"",text:t}];for(let t=0;t<a.length;t++)if(!a[t].class){{const{fl:e,tk:s}=parseexp(a[t].text,/(\/\*[^]+?\*\/)/im,(t=>[{class:"comment",text:t[1]}]));e&&a.splice(t,1,...s)}if(!a[t].class){{const{fl:e,tk:s}=parseexp(a[t].text,/(\/\/.*)$/im,(t=>[{class:"commento2",text:t[1]}]));e&&a.splice(t,1,...s)}if(!a[t].class){{const{fl:e,tk:s}=parseexp(a[t].text,/(^\s*\{.+?\})/m,(t=>[{class:"header",text:t[1]}]));e&&a.splice(t,1,...s)}if(!a[t].class){{const{fl:e,tk:s}=parseexp(a[t].text,/(^\s*:\w+)(.*?$)/m,(t=>[{class:"param",text:t[1]},{class:"param2",text:t[2]}]));e&&a.splice(t,1,...s)}if(!e){if(a[t].class)continue;{const{fl:e,tk:s}=parseexp(a[t].text,/(^\s*!\w+)/m,(t=>[{class:"function",text:t[1]}]));e&&a.splice(t,1,...s)}if(a[t].class)continue;{const{fl:e,tk:s}=parseexp(a[t].text,/(#let.? +)([\w_.]+)/im,(t=>[{class:"comando",text:t[1]},{class:"variabile",text:t[2]}]));e&&a.splice(t,1,...s)}if(a[t].class)continue;{const{fl:e,tk:s}=parseexp(a[t].text,/(#(push|pop|ret|select|cases|endselect|ifndef|elseifndef|ifdef|endif|elseifdef|variante|forvar|for|endfor|continue|break|inc|macro|default|letm|lets|letv|lett|leto|cat))/im,(t=>[{class:"comando",text:t[1]}]));e&&a.splice(t,1,...s)}if(a[t].class)continue;{const{fl:e,tk:s}=parseexp(a[t].text,/(#(if\s*|elseif\s*))/im,(t=>[{class:"comando",text:t[1]}]));e&&a.splice(t,1,...s)}if(a[t].class)continue;{const{fl:e,tk:s}=parseexp(a[t].text,/(#(else|i |m |f |j |case|def ))/im,(t=>[{class:"comando",text:t[1]}]));e&&a.splice(t,1,...s)}if(a[t].class)continue;{const{fl:e,tk:s}=parsevariabili(a[t].text);e&&a.splice(t,1,...s)}if(a[t].class)continue;{const{fl:e,tk:s}=parseexp(a[t].text,/(\$[\w_.]+)/im,(t=>[{class:"variabile",text:t[1]}]));e&&a.splice(t,1,...s)}}}}}}return a}class Pickers{constructor(){this.clear()}clear(){this.d={},this.keypics={},this.key="",this.keypics[this.key]=0}reset(){this.keypics={},this.key="";for(let t in this.d)this.d[t]._invalid=!0}pack(){let t=[];Object.entries(this.d).forEach((([e,a])=>{a._invalid&&t.push(e),delete a._invalid}));for(let e of t)delete this.d[e]}setkey(t){this.key=t,this.keypics[t]||(this.keypics[t]=0)}add(t){let e=this.keypics[this.key]||0,a=`${this.key}_${e}`;this.keypics[this.key]=e+1;let s=this.d[a]??{};return t=t??{},this.d[a]={...s,...t,_invalid:!1,_key:this.key,_id:e},a}}function toruleset(t){const e={};if(t&&t.length)for(const a of t)e[a.cod]=a;return e}function headerconvert(t){const e=muClComments(t,!1);t={};let a={r:[]},s=!1;for(const i of e){const e=/^\s*\{(h|head|header)\s+(\w+)\}/im.exec(i);if(e)a={cod:e[2],des:e[2],r:[]},s=!1,t[e[2]]=a;else if(!/^\s*:/.exec(i)){const t=i.split(","),e={cod:clean(t[0])};let r;r=(t[1]||"").trim(),r&&(e.des=r),r=clean(t[2]),r&&(e.tipo=r),r=clean(t[3]),r&&(e.alias=r),r=clean(t[4]),r&&(e.valid=r),r=clean(t[5]),r&&(e.visible=r),e.cod&&(s||"sep"!=e.tipo?a.r.push(e):(a.des=e.des,a.valid=e.valid,a.visible=e.visible,s=!0))}}return t}function aliasconvert(t){const e=muClComments(t.toLowerCase(),!1),a={};for(const t of e)if(!/^\s*:/.exec(t)){const e=getcolonne(t);e[0]&&e[1]&&(a[e[0]]={cod:e[1]})}return a}class Ambiente{#a=void 0;#s=void 0;#i=void 0;#r=void 0;constructor(t=".",e=100,a=!1){this.righevuote=a,this.maxdelays=e,this.setcatalog(t),this.fndotcallback=void 0,this.pick=new Pickers}setcatalog(t){return t=clean(t),this.cat!=t&&(this.cat=t,this.item=this.rule=this.model="",this.azzera(!0)),t}get muvalutatore(){return{getcolonne:getcolonne,muCalc:muCalc,muEval:muEval,tipifree:w}}azzera(t=!1){this.imgpreview={},this.vari=new Variabile,this.ruleset={},this.fndotcallback&&this.vari.setfndot(this.fndotcallback),this.ruleheader="",t&&(this.macro={},this.varianti={},this.varelenco={},this.macroelenco={},this.scripts={},this.#a=void 0,this.#s=void 0,this.#i=void 0,this.#r=void 0)}setimgpreview(t,e){e?this.imgpreview[t]=e:delete this.imgpreview[t]}getimgpreview(t){return this?.imgpreview[t||""]}setfndot(t){this.fndotcallback=t,this.vari.setfndot(t)}async#n(t){if(s&&!this.varelenco[t]){const e=await s("headers",t,"_varianti");Array.isArray(e)?this.varelenco[t]=e:e.vars&&(this.varelenco[t]=e.vars,e.alias&&(this.#s=e.alias)),this.varelenco[t]||(this.varelenco[t]=[])}}parseheaderfrominfo(t){if(t&&t.length>0)for(const e of t)switch(e.tipo){case"_headers":"string"==typeof e.value&&(e.value=headerconvert(e.value)),this.#a=e.value||{};break;case"_alias":"string"==typeof e.value&&(e.value=aliasconvert(e.value)),this.#s=e.value||{};break;case"_typos":if("string"==typeof e.value){const t=fromjson(e.value);for(const e in t){const a=t[e];a.db&&(a.db=muClean(muClComments(a.db))),a.list&&(a.list=muClean(muClComments(a.list)))}e.value=t}this.#r=e.value||{}}}setitem(t,e,a,s=[],i=0){this.item=clean(t,!0),this.rule=clean(e,!0),this.model=clean(a,!0),this.ruleset=toruleset(s),this.data=i||(new Date).toInt()}async getheader(t){let e;return!this.#a&&s&&(e=await s("headers",this.cat,"_headers"),this.parseheaderfrominfo(e)),this.#a||(this.#a={}),this.#a[t]}async getalias(){let t;return!this.#s&&s&&(t=await s("headers",this.cat,"_alias"),this.parseheaderfrominfo(t)),this.#s||(this.#s={}),this.#s}get deriva(){return this.#i,this.#i||[]}async getmacro(t){try{if("string"==typeof t&&(t={tipo:"M",contenuto:t}),!t||!t.contenuto)return;let e=t.contenuto;e.startsWith("$")&&(e=await this.vari.valuta(e));const a=/^([({}):$\w.\\/]+)[\s;,]*(.*)?$/im.exec(e);if(!a)return void n.add("Macro non valida:"+e,t);let s=clean(a[1],!0);s.includes("$")&&(s=await this.vari.valuta(s));const i=getcolonne(a[2]),{name:r,cat:o}=checkmu(s,this.cat);this.cat=o;const c=`${o}/${r}`;if(!this.macro[c]){const e=new Macro(this,r);await e.load()?this.macro[c]=e:n.add(`macro fail to load ${c}`,t)}return s=this.macro[c],s?{macro:s,pars:i}:(n.add(`macro non trovata ${c}`,t),{})}catch(e){n.add(geterrdes(e),`ambiente.getmacro: ${t?.contenuto}`)}}async getvariante(t){const{name:e,cat:a}=checkmu(t,this.cat);let s=e,i={};if(a==this.cat&&this.#s&&this.#s[e]&&(i=this.#s[e]||{},s=i.cod),await this.#n(a),this.varelenco[a]&&!this.varelenco[a].includes(e))return;const r=`${a}/${s}`;let n;return this.varianti[r]?n=this.varianti[r]:(n=new Variante(this),await n.load(r,a),this.varianti[r]=n),i&&(i.des&&(n.des=i.des),i.vdef&&(n.vdef=i.vdef)),n}async varcompila(t,e){const a=new Variante(this);if(await a.load(t,this.cat,!0),a.alias){(await this.getalias())[t]=a.alias}e("variants",{cod:t,des:a.des||"",alias:a.alias,info:a.alias?"":JSON.stringify(getOggetto(a,["amb"]))})}async macrocompila(t,e){const a=new Macro(this,t);await a.loadAndCompile(`${t}.mu`);const s=a.getmacro();e("macros",{cod:t,info:JSON.stringify(s),isgenera:a.isgenera,isheader:a.isheader,iscodice:a.iscodice})}async barrecompila(t,e,a){const s=new CodiceBarra;await s.compila(t,e);for(const t in s.barre){a("barcodes",{cod:t,des:"",info:JSON.stringify(s.barre[t])})}return s}async tojson(t){let e;return a&&(e=await a("json",t)),e}async compila(t,e){if(e){for(const a of t.var)await this.varcompila(a,e);for(const a of t.mu)await this.macrocompila(a,e);if(e("infos",{cod:"info",des:t.cat,info:JSON.stringify({cat:t.cat,md:t.info})}),this.#a=void 0,this.#s=void 0,this.#i=void 0,this.#r=void 0,s){const t=await s("headers",this.cat,["_headers","_alias","_deriva","_typos"]);this.parseheaderfrominfo(t)}this.#a?e("infos",{cod:"headers",des:"",info:JSON.stringify(this.#a)}):logga("missing headers"),this.#s&&e("infos",{cod:"alias",des:"",info:JSON.stringify(this.#s)}),this.#i&&e("infos",{cod:"deriva",des:"",info:JSON.stringify(this.#i)}),this.#r&&e("infos",{cod:"typos",des:"tipologie",info:JSON.stringify(this.#r)})}}async checkvarianti(e,a){if(!e||!a?.length)return;e=checkname(e),await this.#n(e);const s=this.varelenco[e],i=[];for(let t of a){t=clean(t,!0);const a=`${e}/${t}`;this.varianti[a]||s&&s.includes(t)&&i.push(t)}if(i.length&&t){const a=await t(e,i);if(a&&a.length)for(const t of a){const{name:a,content:s}=t,i=new Variante(this);i.setheader(a,e),s&&await i.loadContentExtended(s),this.varianti[i.key]=i}}}async getheaderfromdb(e){const a=await s("header",this.cat,e,!this.#i);let{head:i,rows:r,macros:n,deriva:o,llvars:c}=a;for(const t of r)t.cod=clean(t.cod),t.alias=clean(t.alias),t.t=clean(t.t);if(!c){c=new Set;for(const t of r)if("p"==t.tipo);else{const e=t.alias?t.alias:t.cod;c.add(e)}c=[...c]}this.#i||(this.#i=o),await this.#n(this.cat),i.cod=clean(i.cod),i.rule=clean(i.rule),i.ruledef=i.ruledef||[];const l=[],u=this.varelenco[this.cat];for(const t of c)this.varianti[`${this.cat}/${t}`]||u&&u.includes(t)&&l.push(t);if(l.length&&t){const e=await t(this.cat,l);if(e&&e.length)for(const t of e){const{name:e,content:a}=t,s=new Variante(this);s.setheader(e,this.cat),a&&await s.loadContentExtended(a),this.varianti[s.key]=s}}return{head:i,rows:r,macros:n}}async getlinkedmacros(t,a){const getkey=t=>t.includes("/")?t:`${this.cat}/${t}`,s=[];let i;if(t&&(i=getkey(t),this.macro[i]||s.push(t)),a&&"string"==typeof a){const t=a.split(";");for(const e of t)i=getkey(e),this.macro[i]||s.push(e)}if(s&&s.length>0&&e){const t=await e(this.cat,s);if(t&&t.length>0)for(const e of t){this.checkscripts(e.content?.linkscript),delete e.content?.linkscript;const t=new Macro(this,e.name);for(const a in e.content){const s=e.content[a];t[a]=s}this.macro[t.key]=t}}}checkscripts(t){if(Array.isArray(t)&&t.length)for(let e of t)this.scripts[e.name]||(this.scripts[e.name]=e.value)}async setruleheader(t,e,a){const{name:s,cat:i}=checkmu(t,this.cat);a&&a.length&&(this.ruleset=toruleset(a));const r=`${i}/${s}`;if(!this.macro[r]){const e=await this.getheaderfromdb(s),{head:a,rows:o,macros:c}=e;await this.getlinkedmacros(a.rule,c);const l=new Macro(this,s);if(!a)return void n.add("Missing rule: "+t);if(a.rule){const t=this.macro[`${i}/${a.rule}`];if(t)for(const e in t)["cat","name","key"].includes(e)||(l[e]=t[e])}o&&o.length&&(l.head=o),this.macro[r]=l}this.ruleheader=r;const o=this.macro[r];return n.azzera(),await o.setparametri(e),o}getruleheader(){return this.macro[this.ruleheader]}async setvariante(t,e){return await impostavariante(this,null,t,e)}async valuta(t){let e;return"string"==typeof t&&(t=muClean(muClComments(t,this.righevuote))),Array.isArray(t)&&(logga("m1",t),e=await muEval(this,null,t)),e}setinfos(t){t&&(this.#a=t.headers,this.#s=t.alias,this.#i=void 0,this.#r=t.typos)}async splitteroggetti(t){let e=await this.getvariante(t),a=[];return e?.rows&&Object.values(e.rows).forEach((t=>{a.push({tipo:t.v[2]||"",cod:t.v[0]||"",des:t.v[1]||"",macro:t.v[4]||"",sps:parseInt(t.v[3])||0,isshape:parseInt(t.v[5])})})),a.length||a.push({tipo:"avob",cod:"__",des:"Vuoto",macro:"",sps:0}),a}}function toJson(t){return JSON.stringify(t,null,2)}function clamp(t,e=-1/0,a=1/0){return(t=Number(t)||0)<e&&(t=e),t>a&&(t=a),t}function gettipocolonna(t){return k.find((e=>e.cod==t))?.des||k[0].des}function gettipofolder(t){return k.find((e=>e.cod==t))?.folder||""}function newVariabile(){return new Variabile}async function newVariante(t,e,a){const s=new Variante(a);return await s.load(t,e),s}function newAmbiente(t,e=100){return new Ambiente(t,e)}function newMacro(t,e){return new Macro(t,e)}function sanitize(t,e=!1,a=!1){if(!t)return"";let s=String(t).trim().replace(a?/[^a-zA-Z0-9-+_\.]/g:/[^a-zA-Z0-9-+_]/g,"_");return e?s.toLowerCase():s}function muValuta(t,e,a){a&&t.azzera();return t.valuta(e)}function muInit(t,e,a,s,i,r,n){const o=new Ambiente(t);return setcallbacks(e,a,s,i,r,n),o}function muCompileScript(t){return t&&"object"==typeof t?t:t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")?JSON.stringify(t):muClean(muClComments(t))}async function muEvalScript(t,e,a,s=!0){if(e=muCompileScript(e),s&&t.azzera(),a)for(const e of a){const{v:a,o:s}=getcouple(e);t.vari.add(a,s)}return{output:await muEval(t,null,e,{}),vari:t.vari.dictionary,errori:n}}Date.prototype.toInt||(Date.prototype.toInt=function(){const t=this;return t.getDate()+100*(t.getMonth()+1)+1e4*t.getFullYear()}),Date.prototype.toFloat||(Date.prototype.toFloat=function(){return Math.floor(1e4*this.getDate()+1e6*(this.getMonth()+1)+1e8*this.getFullYear()+100*this.getHours()+this.getMinutes()+.5)/1e4});const x={mus:{variants:{cod:"s",des:"s",alias:"s",info:"s",md:"s",__pk:"cod"},extras:{tipo:"s",cod:"s",info:"s",__pk:"tipo, cod"},macros:{cod:"s",des:"s",info:"s",md:"s",def:"s",isgenera:"i",iscodice:"i",isheader:"i",__pk:"cod"},infos:{cod:"s",des:"s",info:"s",__pk:"cod"},barcodes:{cod:"s",des:"s",info:"s",__pk:"cod"}}};export{Ambiente,CodiceBarra,Macro,Variabile,Variante,checkmu,checkname,clamp,clean,dammivariante,n as errori,fromjson,getOggetto,getcolonne,getcouple,geterrdes,getheaddims,gettipocolonna,gettipofolder,hash,impostavariante,intvaluta,isJsonStr,isObject,muInit as jsTest,logga,muCalc,muClComments,muClean,muCompileScript,muEval,muEvalScript,muGenerate,muInit,muLimits,muParsecode,muValuta,x as mustr,newAmbiente,newMacro,newVariabile,newVariante,noquote,parselimitifromdb,parselimitifromrule,parsevar,poppars,pushpars,quote,round,sanitize,seedarray,seeder,setOggetto,sortrows,testsync,k as tipicolonna,w as tipifree,y as tipiheader,tk,toCadPars,toJson,tonum,xdt};
1
+ function testsync(t,e){return t+e}const tk=()=>(new Date).valueOf();function seedarray(t,e){if(t&&t.length){let a=[];for(let e=0;e<t.length;e++){let s=t[e];if(s.p)for(let t=0;t<s.p;t++)a.push(e);else a.push(e)}return t[a[seeder(a.length,e)]]}}function seeder(t,e="seed42"){const a=function mulberry32(t){return function(){t=(t|=0)+1831565813|0;let e=Math.imul(t^t>>>15,1|t);return e=e+Math.imul(e^e>>>7,61|e)^e,((e^e>>>14)>>>0)/4294967296}}(function xmur3(t){let e=1779033703^t.length;for(let a=0;a<t.length;a++)e=Math.imul(e^t.charCodeAt(a),3432918353),e=e<<13|e>>>19;return function(){return e=Math.imul(e^e>>>16,2246822507),e=Math.imul(e^e>>>13,3266489909),(e^=e>>>16)>>>0}}(String(e))());return Math.floor(a()*t)}function isJsonStr(t){if("string"!=typeof t)return!1;const e=t.trim();return e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")}const isObject=t=>!(!t||!Array.isArray(t)&&"object"!=typeof t);function quote(t){if((t=(t||"").trim()).length>1){if(t.startsWith('"')&&t.endsWith('"'))return t;if(t.startsWith("(")&&t.endsWith(")"))return t}return`"${t}"`}function noquote(t){return(t=t.trim()).startsWith('"')&&t.endsWith('"')||t.startsWith("(")&&t.endsWith(")")?t.slice(1,-1):t}function hash(t){let e="";if("string"==typeof t||"number"==typeof t)e=t+"";else if("object"==typeof t&&t){const a=Object.keys(t).sort(),s="\0";e=a.map((e=>`${e}${s}${String(t[e])}`)).join(s)}let a=2166136261,s=2218511855;for(let t=0;t<e.length;t++){const i=e.charCodeAt(t);a^=i,a+=a<<5^2779096485,s^=a,s=((s<<3)+i^2134516169)>>>0}return a>>>=0,a.toString(16)+s.toString(16)}function geterrdes(t){if(t&&"object"==typeof t){let e=t.stack?.toString().replace(/^.*?node_modules.*$/gim,"")||t.message||"";e=e.replaceAll("/","_").replaceAll(".js","").replaceAll("\n\n","\n").replace(/;\s+/gi,"\n"),t=e}return(t=t.replace(/sqlite/gi,"SQL ")).replaceAll(";",",").trim()}let t,e,a,s,i,r;const logga=(...t)=>{r?r(t):console.log(...t)};function setcallbacks(n,o,c,l,u,h){e=n,t=o,a=c,s=l,i=u,r=h}const xdt=()=>(new Date).valueOf();function clean(t,e=!1){return e?(t||"").trim().toLowerCase():(t||"").trim()}function getcouple(t,e="=",a=!0){const s=(t=t||"").indexOf(e);return s>=0?{v:clean(t.substring(0,s),a),o:t.substring(s+e.length).trim(),fl:!0}:{v:clean(t,a),o:"",fl:!1}}function checkmu(t,e){if((t=(t||"").trim()).indexOf("/")>0){const a=t.split("/");e=a[0]||"",t=a[1]||""}if(!e)throw new Error("manca il catalogo per "+t);return{name:t,cat:e=checkname(e)}}function checkname(t,e=!1){if(t=(t||"").trim(),e&&!t)return"";if(!t||!/^[a-zA-Z_][a-z0-9A-Z_+-]*$/gim.test(t))throw new Error(`nome non valido: "${t}" \n deve contenere solo lettere, _, -, e numeri`);return t.toLowerCase()}function getcolonne(t,e=!1){t=String(t||"");const a=/^(\d*)\.\.(\d*)$/.exec(t);if(a){let t=parseInt(a[1])||0,e=parseInt(a[2])||0;const s=[];for(let a=t;a<=e;a++)s.push(a+"");return s}if(!/["({[]/.test(t))return t.split(/[,;]/).map((t=>t.trim()));const s=[];let i="",r=0,n=!1;for(let e=0;e<t.length;e++){const a=t[e];if(0===r&&'"'===a&&(0!==e&&"\\"===t[e-1]||(n=!n)),n||("("===a||"["===a||"{"===a?r++:")"!==a&&"]"!==a&&"}"!==a||(r=Math.max(0,r-1))),","!==a&&";"!==a||0!==r||n)i+=a;else{const t=i.trim();s.push(t),i=""}}const o=i.trim();return o&&s.push(o),s.map((t=>(t=t.trim(),!e&&(t.startsWith('"')&&t.endsWith('"')||t.startsWith("(")&&t.endsWith(")"))?t.slice(1,-1):t)))}const parsevar=(t,e,a,s,i=!1)=>{const r=["[","(","{"],n=["]",")","}"];s||(s="["==a?"]":"("==a?")":"}");const o=r.includes(a);let c=1,l=0;const u=[];for(let h=e;h<t.length;h++)if(o&&r.includes(t[h])||t[h]==a)c++;else if(o&&n.includes(t[h])||t[h]==s){if(c--,0==c&&t[h]==s)return u[l]=t.substring(e,h),{i:h,res:u}}else if(":"==t[h])1==c&&(u[l]=t.substring(e,h),e=h+1,l++);else if("\n"==t[h]&&i)return{i:h,res:u};return{i:-1,res:t.substring(e)}};function setOggetto(t,e){"object"==typeof t&&"object"==typeof e&&Object.keys(e).forEach((a=>{Object.hasOwn(t,a)&&"function"!=typeof t[a]&&(t[a]=e[a])}))}function getOggetto(t,e=[]){if(Array.isArray(t))return t.map((t=>getOggetto(t,e)));if(t&&"object"==typeof t){const a={};for(const[s,i]of Object.entries(t))"function"==typeof i||e&&e.includes(s)||(a[s]=getOggetto(i,e));return a}return t}function fromjson(t,e){if(Array.isArray(t))return t;if("string"!=typeof t)return t;if(""==t)return e||{};try{return JSON.parse(t)}catch(a){return logga(`Errore parsing JSON: ${a}\n${t}`),e||{}}}const n=new class Errori{constructor(){this.azzera()}azzera(){this.err=[]}add(t,e){this.err.push({msg:t,row:e})}get(){return this.err}get length(){return this.err.length}toString(){const t=[];for(const e of this.err){const a="object"==typeof e.msg?JSON.stringify(e.msg):e.msg||"";t.push(`${e.row?e.row+":":""}${a}`)}return t.join("\n")}},round=(t,e=-1)=>{const a="string"==typeof t?parseFloat(t)||0:t;if(e<0)return Math.round(a||0);const s=Math.pow(10,e);return Math.round(a*s)/s||0};function getheaddims(t){let e;try{e="object"==typeof t&&t?t:JSON.parse(t||"{}")}catch(t){e={}}return e||(e={}),e.l||(e.l={visible:1,val:1e3,min:0,max:1e4}),e.a||(e.a={visible:1,val:1e3,min:0,max:1e4}),e.p||(e.p={visible:1,val:1e3,min:0,max:1e4}),e}function sortrows(t){const e=Object.keys(t).sort(),a={};for(let s=0;s<e.length;s++){const i=e[s],r=t[i];s+1<e.length&&e[s+1].startsWith(i+".")?r.hasliv=1:delete r.hasliv,a[i]=r}return a}const o=/(?<!\w)\(/g,c=/^-?[0-9.]+$/,l=/^(\w+)(!)?\[(.*)?\]$/,u=/[0-9.]/,h=/[+\-*/^%]/,f=/[a-zA-Z]/i;function valutaparentesi(t){for(t=(t+"").trim();;){const e=o.exec(t);if(!e)break;{const{i:a,res:s}=parsevar(t,e.index+1,"(",")");if(a<=0)break;t=t.substring(0,e.index)+valutaparentesi(s[0])+(a>=0?t.substring(a+1):"")}}return function operatoricomparazione(t){let e,a;const s={"||":()=>valutaparentesi(e)||valutaparentesi(a)?1:0,"|":()=>valutaparentesi(e)||valutaparentesi(a)?1:0,"&&":()=>valutaparentesi(e)&&valutaparentesi(a)?1:0,"&":()=>valutaparentesi(e)&&valutaparentesi(a)?1:0,"<<=":()=>clean(e)<=clean(a),">>=":()=>clean(e)>=clean(a),"===":()=>clean(e)==clean(a),"==":()=>clean(e)==clean(a),"!!":()=>clean(e)!=clean(a),"<<":()=>clean(e)<clean(a),">>":()=>clean(e)>clean(a),"<=":()=>muCalcbase(e)<=muCalcbase(a),">=":()=>muCalcbase(e)>=muCalcbase(a),"<":()=>muCalcbase(e)<muCalcbase(a),">":()=>muCalcbase(e)>muCalcbase(a),"=":()=>muCalcbase(e)==muCalcbase(a),"!":()=>muCalcbase(e)!=muCalcbase(a)};let i=-1,r="";for(const e in s)if(i=t.indexOf(e),i>=0){r=e;break}return-1!==i?(e=t.slice(0,i),a=t.slice(i+r.length),s[r]&&s[r]()?1:0):muCalcbase(t)}(t=function valutainsiemi(t){if(t.includes("[")){function resinisiemi(t){const e=t[1],a=!!t[2],s=getcolonne(t[3]);for(const t of s)if(t==e)return a?"0":"1";return a?"1":"0"}for(;;){const e=l.exec(t);if(!e)break;{const a=resinisiemi(e);t=t.substring(0,e.index)+a+t.substring(e.index+e[0].length)}}}return t}(t))}const d={sqrt:t=>Math.sqrt(t),sqr:t=>Math.sqrt(t),pow:(t,e)=>Math.pow(t,e),int:t=>Math.floor(t),floor:(t,e=0)=>Math.floor((Number.parseFloat(t)||0)*10**e)/10**e,round:(t,e=0)=>Math.round((Number.parseFloat(t)||0)*10**e)/10**e,dec:(t,e=0)=>Math.floor((Number.parseFloat(t)||0)*10**e)/10**e,abs:t=>Math.abs(t),sin:t=>Math.sin(t*Math.PI/180),cos:t=>Math.cos(t*Math.PI/180),tan:t=>Math.tan(t*Math.PI/180),asin:t=>180*Math.asin(t)/Math.PI,acos:t=>180*Math.acos(t)/Math.PI,atan:t=>180*Math.atan(t)/Math.PI,atan2:(t,e)=>180*Math.atan2(t,e)/Math.PI,seeder:(t,e)=>seeder(t,e),log:t=>Math.log(t),log10:t=>Math.log10(t),min:(...t)=>Math.min(...t),max:(...t)=>Math.max(...t),clamp:(t,e,a)=>Math.max(e,Math.min(a,t)),rnd:(t,e)=>t?e?Math.floor(Math.random()*(e-t+1))+t:Math.floor(Math.random()*t):Math.random(),cas:(t,e)=>Math.floor(Math.random()*(e-t+1))+t};function muCalcbase(t){let e=0;function parseOperator(){const a=t[e];return h.test(a)?(e++,a):null}function parsePrimary(){if("+"===t[e]||"-"===t[e]){return("-"===t[e++]?-1:1)*parsePrimary()}if(u.test(t[e]))return function parseNumber(){const a=e;for(;e<t.length&&u.test(t[e]);)e++;return Number(t.slice(a,e))}();if("("===t[e]){e++;const a=parseExpr();return")"===t[e]&&e++,a}return f.test(t[e])?function parseFunctions(){const a=t.slice(e);if(!a)return 0;for(const[s,i]of Object.entries(d)){const r=new RegExp(`^(${s})\\(`,"i").exec(a);if(r){e+=r[0].length;let a=[];for(;;){let s=parseExpr();if(a.push(s),")"===t[e]){e++;break}if(","!=t[e])break;e++}return i(...a)}}return e++,parseExpr()}():0}function parseFactor(){let a=parsePrimary();for(;e<t.length&&/[/*^%]/.test(t[e]);){const t=parseOperator(),e=parsePrimary();"*"===t?a*=e:"/"===t?a=e?a/e:0:"%"===t?a=e?a%e:0:"^"===t&&(a=Math.pow(a,e))}return a}function parseExpr(){let a=parseFactor();for(;e<t.length&&/[+-]/.test(t[e]);){const t=parseOperator(),e=parseFactor();"+"===t?a+=e:"-"===t&&(a-=e)}return a}return t=t.replace(/\s/g,""),parseExpr()}function muCalc(t){if(!t)return 0;if("number"==typeof t)return t||0;if("string"!=typeof t)return 0;const e=t.replaceAll(",",".");return c.test(e)?Number(e)||0:valutaparentesi(t)||0}const tonum=(t,e=-1)=>{if(!t)return 0;let a=0;if("number"==typeof t)a=t||0;else if("string"==typeof t){const e=(t=t.replaceAll(",",".")).match(/^-?[0-9.]+$/);a=e&&e.length>0?Number(e[0])||0:muCalc(t)}if(e>=0)switch(e){case 0:a=Math.round(a);break;case 1:a=Math.round(10*a)/10;break;case 2:a=Math.round(100*a)/100;break;case 3:a=Math.round(1e3*a)/1e3;break;case 4:a=Math.round(1e4*a)/1e4;break;case 5:a=Math.round(1e5*a)/1e5;break;case 6:a=Math.round(1e6*a)/1e6}return a||0},m=100;function valutavar(t,e){const a=e[0]||"";if(!a)return"";if(t.counter>=m)return a;const s=valuta0(t,a);let i;if(t.stl[s])i=`-- R:${s} --`;else{const e=t.var(s);if(isObject(e))return e;t.stl[s]=!0,i=valutabase(t,e),delete t.stl[s]}if(t.counter>=m)return a;if(e[1]){let a=getcolonne(i);if("l"==e[1])return String(a.length);const s=valuta0(t,e[1]);let r;if(/^[\d.]+$/.test(s)){let t=s.split(".").map((t=>parseInt(t)));for(let e=0;e<t.length-1;e++){let s=t[e];if(!(s>=0&&s<a.length))return"";a=getcolonne(a[s])}r=t[t.length-1]}else r=muCalc(s);if(!(r>=0&&r<a.length))return"";for(i=valuta0(t,a[r]);;){let e=i.indexOf("$[");if(e<0)break;const{i:a}=parsevar(i,e+2,"[","]");if(a<e)break;let s=i.slice(e+2,a);i=i.substring(0,e)+valutaquadra(t,s)+i.substring(a+1)}}if(e[2]){const a=muCalc(valuta0(t,e[2]));if(a){let s=0;return e[3]&&(s=muCalc(valuta0(t,e[3]))),a<0?i.slice(a):s?i.substring(a-1,a+s-1):i.substring(a-1)}}return i}function valutaquadra(t,e){let a=getcolonne(e||"");const s=clean(a[0]);function replacecharcode(t){return"\\t"==t?"\t":"\\n"==t?"\n":(t||"").replace(/&(\d+)/g,((t,e)=>String.fromCharCode(parseInt(e))))}switch(s){case"set":{const e=valuta0(t,a[1]||""),s=valuta0(t,a[2]||"");t.add(e,t.var(s))}break;case"ex":{const e=valuta0(t,a[1]||"");let s=valuta0(t,a[2]||"");s||(s=",");const i=muCalc(valuta0(t,a[3]||"")),r=e.split(s);return i>0&&r[i-1]||""}case"ex2":{const e=replacecharcode(a[1]||""),s=muCalc(valuta0(t,a[2]||""));a.splice(0,3);return a.join(";").split(e)[s>0?s-1:0]||""}case"replace":return a[1].replace(new RegExp(a[2]||"x","gim"),(a[3]||"").trim());case"replace2":case"rp2":try{let t=replacecharcode(a[1]||"x");const e=replacecharcode(a[2]||"").trim();a.splice(0,3),t=t.replace(/&(\d+)/g,((t,e)=>`\\u${parseInt(e).toString(16).padStart(4,"0")}`));return a.join(";").replace(new RegExp(t,"im"),e)}catch(t){return""}case"look":case"lookb":{const t=parseFloat(a[1]||"");if(a=a.slice(2).map((t=>parseFloat(t)||0)),"lookb"==s){const e=a.filter((e=>e<=t));return e.length?Math.max(...e):t}{const e=a.filter((e=>e>=t));return e.length?Math.min(...e):t}}case"tk":{let e=muCalc(valuta0(t,a[1]||""))||0;if(!e){e=muCalc(valuta0(t,a[2]||""));const s=a[1]||"";return e?a[3].split(s)[e-1]:""}return a[e>0?e+1:2]||""}case"totab":return a.splice(0,1),a.join("\t");case"tosep":{const t=replacecharcode(a[1]||"")||";";return a.splice(0,2),a.join(t)}case"len":{let t;return a.length>2?(a.shift(),t=a.join(";")):t=a[1]||"",t.length}case"mid":{const e=valuta0(t,a[1]||""),s=muCalc(valuta0(t,a[2]||"")),i=muCalc(valuta0(t,a[3]||""));return e.substring(s-1,s+i-1)}case"arrotonda":{const t=muCalc(a[1]);let e=1;return["0","1","2","3","4","5","6"].includes(a[2])?e=Math.pow(10,parseInt(a[2])):(e=muCalc(a[2]),0==e&&(e=1e3)),Math.round(t*e)/e}case"iif":return muCalc(valuta0(t,a[1]))?a[2]||1:a[3]||0;case"instr":case"instr2a":{const t=a[1]||"",e=a[2]||"";return t.toLowerCase().indexOf(e.toLowerCase())+1}case"instr2":{const t=a[1]||"";return a.splice(0,2),a.join(";").toLowerCase().indexOf(t.toLowerCase())+1}default:return s.startsWith(".")?{fun:e,pars:[]}:{fun:s,pars:a}}}function valuta0(t,e){if(e+="",t.counter>=m)return e;for(;;){const a=/\$([{(])/im.exec(e);if(!a)break;{const s=a.index,{i:i,res:r}="("==a[1]?parsevar(e,s+2,"(",")"):parsevar(e,s+2,"{","}");let n=valutavar(t,r);if(isObject(n))return n;e=valuta0(t,e.substring(0,s))+n+(i>=0?valuta0(t,e.substring(i+1)):"")}}return e=(e=e.replace(/\$([a-z|][\w|.]*)/gi,((e,a)=>{let s="";for(;a.length;){let e;if(t.stl[a]?e=`--R: ${a} --`:(t.stl[a]=!0,e=valutabase(t,t.var(a)),delete t.stl[a]),e||!(a.length>1)){s=e+s;break}s=a.slice(-1)+s,a=a.substring(0,a.length-1)}return s}))).replace(/\$(\d+):(\d+)(:(\d+))?/g,((t,e,a,s,i)=>{i=i?+i:1;const r=[];for(let t=+e;t<=+a;t+=i)r.push(t.toString());return r.join(";")}))}function valutabase(t,e){return e&&(t.counter++,t.counter<=m&&(e=valuta0(t,e)),t.counter--),e}class Variabile{constructor(){this.stl={},this.dictionary={},this.vec=[],this.counter=0,this.fndotcallback=void 0}static isValidKey(t){return/^[\w][\w\d.[\]]*$/.test(t)}static sanitizeKey(t){return t.replace(/[^a-zA-Z0-9_.[\]]/g,"_")}setfndot(t){this.fndotcallback=t}push(){this.vec.push({saves:[],dic:{...this.dictionary}})}pop(){if(this.vec.length>0){let t=this.vec.pop(),e={};if(t.saves&&t.saves.length)for(let a of t.saves)e[a]=this.dictionary[a];if(this.dictionary=t.dic,t.saves&&t.saves.length)for(let a of t.saves)this.dictionary[a]=e[a]}}savevars(t){if(!this.vec.length>0)return;let e=this.vec[this.vec.length-1];e.saves||(e.saves=[]);let a=t.split(",");for(let t of a){const a=Variabile.sanitizeKey(t);a&&!e.saves.includes(a)&&e.saves.push(a)}}clear(){this.vec=[],this.dictionary={}}azzera=()=>this.clear();var(t){let e="";const a=/^(\d*)\.\.(\d*)$/.exec(t);if(a){let t=parseInt(a[1])||0,e=parseInt(a[2])||0;const s=[];for(let a=t;a<=e;a++)s.push(a+"");return s}if(t.indexOf("|")>=0){const a=t.split("|");t=a[0],e=a[1]}function toformat(t,e){switch(e.trim().toLowerCase()){case"0":return String(parseInt(t)||0);case"-":return String((parseInt(t)||1)-1);case"+":return String((parseInt(t)||0)+1);case"data":return a=parseFloat(t)||0,new Intl.DateTimeFormat("it",{day:"2-digit",month:"short",year:"2-digit"}).format(a.toDate());case"euro":return((t,e="")=>{if(t){let e=Intl.NumberFormat("en",{style:"currency",currency:"EUR"}).format(t);return e=e.replace(/€/g,"").replace(/\./g,";").replace(/,/g,".").replace(/;/g,",")+"€",e}return e})(parseFloat(t));case"num":return tonum(parseFloat(t));case"n":case"n0":case"n1":case"n2":case"n3":case"n4":{const a=parseInt(e.slice(1))||0;return tonum(parseFloat(t),a)}case"u":return String(t).toUpperCase();case"l":return String(t).toLowerCase();default:return t}var a}const s=Variabile.sanitizeKey(t);if(s.startsWith(".")&&this.fndotcallback){const t=this.fndotcallback(s.toLowerCase());if(t)return toformat(t,e)}if(Variabile.isValidKey(s)){const t=s.toLowerCase(),a=/^([\w][\w\d]*)([.[])/.exec(t);if(a){const s=this.dictionary[a[1]];if(s&&"object"==typeof s)return toformat(function objval(t,e){const a=e.split(".");let s=t;for(let t=0;t<a.length;t++){const e=a[t],i=e.match(/(.*?)\[(\d*)\]/);if(i){if(i[1]&&(s=s[i[1]]),void 0===s)return"";s=s[parseInt(i[2],10)||0]}else switch(e){case"_k":s=(Object.keys(s)||[]).join(",");break;case"_v":s=Object.values(s)||[];break;case"_l":s=s.length||0;break;default:s=s[e]}if(void 0===s)return""}return"number"==typeof s?s+"":s}(s,("["==a[2]?a[2]:"")+t.substring(a[0].length)),e)}return toformat(this.dictionary[t]||"",e)}return""}getvar(t){return this.var(t)}colonna(t,e){return getcolonne[e]||t}dump(t=!1){let e=[];for(const t in this.dictionary)e.push({cod:t,val:this.dictionary[t]});return e=e.sort(((t,e)=>t.cod>e.cod)),t?e.map((t=>`${t.cod} = ${isObject(t.val)?JSON.stringify(t.val,null,2):t.val}`)):e}add(t,e){if("number"==typeof e&&(e=String(e)),t.includes("*")){const a=Variabile.sanitizeKey(t.split("*")[0]);if(Variabile.isValidKey(a)){const t=a.toLowerCase();let s=Object.keys(this.dictionary).filter((e=>e.startsWith(t)));for(let t of s)e?this.dictionary[t]=e:delete this.dictionary[t]}}else{const a=Variabile.sanitizeKey(t);if(Variabile.isValidKey(a)){const t=a.toLowerCase();0===e||e?this.dictionary[t]=e:delete this.dictionary[t]}else logga(`Invalid key: ${t}`)}}removeallvars(t){if(Array.isArray(t)){let e=Object.keys(this.dictionary);for(let a of e)t.includes(a)||delete this.dictionary[a]}else this.dictionary={}}valutasync(t){return valutabase(this,t)}async valuta(t,e){this.stl={};let a=await async function valutafunc(t,e,a){if(e){for(let s=0;s<20;s++){const s=e.lastIndexOf("$[");if(!(s>=0)){e=valutabase(t,e);break}{const{i:i,res:r}=parsevar(e,s+2,"[","]"),n=valutabase(t,e.substring(0,s)),o=r?r[0].startsWith(".")?valutabase(t,r.join(":")):valutabase(t,r[0]):"",c=i>=0?valutabase(t,e.substring(i+1)):"";let l=valutaquadra(t,o);if("object"==typeof l&&(l=a?await a(l?.fun,l.pars):`** fun: ${l.fun} ** `),isObject(l))return l;e=n+l+c}}return e}return""}(this,t,e);return isObject(a)||(a=(t=>{for(;;){const e=t.indexOf("{");if(!(e>=0))break;{const{i:a,res:s}=parsevar(t,e+1,"{","}");if(a<0)return t;t=t.substring(0,e)+muCalc(s[0])+(a>=0?t.substring(a+1):"")}}return t})(a)),a}async parametrokeyval(t){if("string"!=typeof t)return{};if(!(t=t.trim()))return{};let e,a,s,i=!1;return t.startsWith("#")&&(i=!0,t=t.slice(1)),s=t.indexOf("="),s>0?(e=clean(t.slice(0,s)),a=t.slice(s+1)):(s=t.indexOf(":"),s>0?(e=clean(t.slice(0,s)),a=t.slice(s+1),a=this.var(a)):(e=clean(t),a=this.var(e))),a&&"string"==typeof a&&a.includes("$")&&(a=await this.valuta(a)),["l","a","p"].includes(e)&&(i=!0),i&&(a=muCalc(a)),{k:e,v:a}}}class CodiceBarra{constructor(){this.barre={}}azzera(){this.barre={}}oriented(t,e,a,s){switch(t=(t||"1").substr(0,1).toLowerCase()){case"0":break;case"l":return{t:"l",x:e};case"a":return{t:"a",x:a};case"p":return{t:"p",x:s};case"2":return{t:t,x:e,y:s,z:a};case"5":return{t:t,x:e,y:a,z:s};case"4":return{t:t,x:s,y:e,z:a};case"3":return{t:t,x:a,y:s,z:e};case"6":return{t:t,x:s,y:a,z:e};default:return{t:"1",x:a,y:e,z:s}}}async getcode(t,e,a,s,i){let[r,n]=t.split(":");n=n||"";const getcode0=async(t,r)=>{let n=this.barre[t];if(!n&&i&&(n=await i(t),n||(n={t:"1",r:[]}),this.barre[t]=n,n.coderr&&"errore"!=n.coderr||(n.coderr=`#err_${t}`)),!n||0==n.r.length)return{extra:{err:"missing codicebarra"},c:`#err_${t}`,fm:10};const{t:o,x:c,y:l,z:u}=this.oriented(t,e,a,s),h={barra:t,fm:n.fm,t:o,liv:r,items:n.r.length,err:""};let f=n.r;if(u){const t=f.filter((t=>t.z===u||!t.z));t.length>0?f=t:h.err=`spessore non coerente: ${u}`}if("l"==o||"a"==o||"p"==o){const t=f.find((t=>t.x>=c));if(t)return{c:t.c,fm:t.x==c?0:1,x1:t.x,x:c,extra:h}}else{let t=f.find((t=>t.x==c&&t.y==l));if(t)return{c:t.c,fm:0,x:c,y:l,z:u,x1:t.x,y1:t.y,z1:t.z,extra:h};if(0!=n.fm&&(t=f.find((t=>t.x>=c&&t.y==l)),t))return{c:t.c,fm:1,x:c,y:l,z:u,x1:t.x,y1:t.y,z1:t.z,extra:h};if(0!=n.fm&&2!=n.fm&&(t=f.find((t=>t.x>=c&&t.y>=l)),t))return{c:t.c,fm:2,x:c,y:l,z:u,x1:t.x,y1:t.y,z1:t.z,extra:h}}return n.codalt&&r<5?await getcode0(n.codalt,r+1):{c:n.coderr,fm:9,x:c,y:l,z:u,extra:h}};return await getcode0(r,0)}compila(t,e){e||(e={});const a={};if(Array.isArray(t)){for(const s of t)if(s.cod=clean(s.cod),s.barcode=clean(s.barcode),s.barcode.length>2&&"+"==s.barcode[0]){s.barcode=s.barcode.substr(1);const t=this.oriented(s.barcode.substr(0,1),s.l,s.a,s.p);t.c=s.modello?{c:s.cod,m:s.modello}:s.cod,a[s.barcode]||(a[s.barcode]={t:s.barcode.substr(0,1),r:[]},e[s.barcode]&&(a[s.barcode]=Object.assign(e[s.barcode],a[s.barcode]))),a[s.barcode].r.push(t)}for(const t in a){a[t].r.sort(((t,e)=>t.y?1e4*(t.x-e.x)+(t.y-e.y):t.x-e.x))}}this.barre=a}}const p="IFDEF|IFNDEF|SETDEF|CACHE|RET|CVAR|LOOK|LOOKB|SELECT|CASES|CASE|LOG|MSG|DEFAULT|ELSEIFDEF|ELSEIFNDEF|ELSEIF|ELSE|ENDIF|ENDSELECT|PUSH|POP|FUNC|MACRO|LETS|LETO|LETM|LETT|LETV|LETM|LET|DEF|DO|VARIANTE|FORVAR|FOR|LOOP|ENDFOR|BREAK|EXIT|EXITFOR|CONTINUE|IF|INC|I|F|M|J|:P".split("|");function toCadPars(t){const e=muClComments(t),a=[];for(const t of e){const e=t.includes("(")||t.includes("[")?[t]:getcolonne(t,!0);let s=!1;for(const t of e)!t.startsWith('"')&&t.includes("=")?(a.push(t),s=!0):s&&(a[a.length-1]+=","+t)}const s={};for(const t of a){let{v:e,o:a}=getcouple(t,"=",!1);a=a||"",e&&(/^[-+]?\d*\.?\d+$/.test(a)&&(a=parseFloat(a)),s[e]=a)}return s}function muClComments(t,e){const a=(s=t,s.replace(/("(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*')|\/\*[\s\S]*?\*\//g,((t,e)=>e||""))).split(/\r?\n/);var s;const i=[];let r="";for(const t of a){let a=t;if(/(^|[^:])\/\/.*/.test(a)&&(a=a.replace(/(^|[^:])\/\/.*/,((t,e)=>e.trim()))),a=a.trim(),0!==a.length||e)if(r.length>0&&(a=r+" "+a,r=""),a.endsWith("\\")){a=a.slice(0,-1);const t=a.lastIndexOf("//");-1!==t&&(a=a.slice(0,t).trim()),r=a}else i.push(a)}return i}function muClean(t,e=!1){if(!Array.isArray(t))return void n.add("muClean: expected array!");const a=[];function addgen(t){if(a.length>0&&""==a[a.length-1].tipo){const s=a[a.length-1];e||!(!t.startsWith("!")&!t.startsWith("."))||t.startsWith("$")||t.startsWith("{")||t.startsWith("#")||s.contenuto.startsWith("!")||s.contenuto.startsWith(".")||s.contenuto.startsWith("$")||s.contenuto.startsWith("{")||s.contenuto.startsWith("#")?a.push({tipo:"",contenuto:t}):s.contenuto=s.contenuto+"\n"+t}else a.push({tipo:"",contenuto:t})}for(const e of t){const t=e.match(/^#([\w.]+)\s*(.*)$/);if(t){let s=t[1].toUpperCase().trim(),i="";if(s.includes(".")){const t=s.split(".");s=t[0],i=t[1]}if(p.includes(s)){const e=t[2];if("IF"!==s&&"IFDEF"!=s&&"IFNDEF"!=s||!e.includes("#")){const e={tipo:s,contenuto:t[2]};i&&(e.tipo2=i),a.push(e)}else{let i=e.match(/^(.*?)\s*#\s*(\w+)\s*(.*?)\s*#\s*(\w+)\s*(.*)$/);i?(a.push({tipo:s,contenuto:i[1].trim()}),a.push({tipo:i[2].toUpperCase(),contenuto:i[3]}),a.push({tipo:"ELSE",contenuto:""}),a.push({tipo:i[4].toUpperCase(),contenuto:i[5]}),a.push({tipo:"ENDIF",contenuto:""})):(i=e.match(/^(.*?)\s*#\s*(\w+)\s*(.*)$/),i?(a.push({tipo:s,contenuto:i[1].trim()}),a.push({tipo:i[2].toUpperCase(),contenuto:i[3]}),a.push({tipo:"ENDIF",contenuto:""})):a.push({tipo:t[1].toUpperCase(),contenuto:t[2]}))}}else addgen(e)}else addgen(e)}let s=0,i=0,r=0,o=[],c=[],l=[];for(let t=0;t<a.length;t++){const e=a[t];switch(e.i=t,e.tipo){case"FOR":case"FORVAR":case"VARIANTE":case"DO":i++,c[i]={pos:t,bk:[]};break;case"LOOP":case"ENDFOR":if(i>0){const{pos:s}=c[i];for(const e of c[i].bk)e.next=t,e.prev=s;e.prev=s,a[s].next=t,i--}break;case"BREAK":case"EXIT":case"EXITFOR":case"CONTINUE":i>0&&c[i].bk.push(e);break;case"IF":case"IFDEF":case"IFNDEF":s++,o[s]={pos:t,bk:[e]};break;case"SELECT":r++,l[r]={pos:t,bk:[e],first:t};break;case"ELSEIF":case"ELSEIFDEF":case"ELSEIFNDEF":case"ELSE":if(s>0){const{pos:i}=o[s];o[s].bk.push(e),a[i].next=t,o[s].pos=t}break;case"CASE":case"CASES":case"DEFAULT":if(r>0){const{pos:s,first:i}=l[r];l[r].bk.push(e),a[s].next=t,e.first=i,l[r].pos=t}break;case"ENDIF":if(s>0){const{pos:e,next:i}=o[s];a[e].next=t;for(const e of o[s].bk)e.last=t;s--}break;case"ENDSELECT":if(r>0){const{pos:e,next:s}=l[r];a[e].next=t;for(const e of l[r].bk)e.last=t;r--}}}return a}function muLimits(t){const e=muClComments(t),a=[];let s;const parsa=t=>t?[...new Set(t.split(",").map((t=>t.trim())).sort().filter((t=>t)))]:void 0;for(const t of e){let e=/^\s*\{(.*)?\}/im.exec(t);if(e)"limit"==clean(e[1])?(s={},a.push(s)):s=void 0;else if(s&&(e=/^\s*:(\w+)\s*(.*)/.exec(t),e))switch(e[1].toLowerCase()){case"opz":case"o":s.opz=parsa(e[2]);break;case"obs":case"obsolete":s.obsolete=parsa(e[2]);break;case"scons":case"sconsigliate":s.scons=parsa(e[2]);break;case"neutri":s.neutri=parsa(e[2]);break;case"art":s.art=parsa(e[2]);break;case"mod":s.mod=parsa(e[2]);break;default:logga("missing:",e[1])}}return a}function parselimitifromdb(t){let e,a=[];if(t&&t.length)for(const s of t){e={},s.varfilter=fromjson(s.varfilter,[]),s.result=fromjson(s.result,[]),s.result2=fromjson(s.result2,[]),s.exclude=parseInt(s.exclude)?1:0,s.exclude2=parseInt(s.exclude2)?1:0;const{item:i,model:r,rule:n,varfilter:o,result:c,result2:l,exclude:u,exclude2:h,datai:f,dataf:d}=s;function remap(t){return t.map((t=>clean("string"==typeof t?t:t.Value,!0))).filter((t=>t))}if(c.length||l.length){if(c.length&&(u?e.ex=remap(c):e.valid=remap(c)),l.length&&(h?e.ex2=remap(l):e.valid2=remap(l)),i&&(e.i=clean(i).split(";")),r&&(e.m=clean(r).split(";")),n&&(e.r=clean(n).split(";")),(f||d)&&f<d&&(e.datai=parseInt(f),e.dataf=parseInt(d)),o&&o.length){e.v=[];for(const m of o){let p=e.v.find((t=>t.v==clean(m.Variant)));p||(p={v:clean(m.Variant),o:[]},e.v.push(p)),p.o=[...p.o,...clean(m.Value).split(";")],p.o=[...new Set(p.o.filter((t=>t)))]}}setlevelimite(e),a.push(e)}}return a=a.sort(((t,e)=>e.l-t.l)),a}function setlevelimite(t){let e=0;t.i&&t.i.length&&(e+=5),t.m&&t.m.length&&(e+=3),t.r&&t.r.length&&(e+=2),t.v&&t.v.length&&(e+=3),t.datai&&t.dataf&&(e+=1),t.l=e}function parselimitifromrule(t){function parsevettorelimiti(t){const e={},a=/^\s*[!:]\s*(\w+)\s*(.*)$/i;function addres(t,a){function addres0(t,a){(a=clean(a))&&(e[t]||(e[t]=[]),e[t].includes(a)||e[t].push(a))}if(Array.isArray(a))for(const e of a)addres0(t,e);else addres0(t,a)}for(const s of t){const t=a.exec(s);if(t)switch(t[1]){case"var":case"v":case"variante":{const a=(t[2]||"").indexOf(" ");if(a>0){const s=clean(t[2].substring(0,a)),i=getcolonne(t[2].substring(a+1));if(s&&i&&i.length){e.v||(e.v=[]);let t=e.v.find((t=>t.v==s));t||(t={v:s,o:[]},e.v.push(t));for(const e of i)t.o.includes(e)||t.o.push(e)}}}break;case"d":case"dt":case"data":case"date":{const a=t[2].split(" "),s=parseInt(a[0]),i=parseInt(a[1]);(s||i)&&(e.datai=s,e.dataf=i)}break;case"rule":case"r":case"mu":addres("r",getcolonne(t[2]));break;case"item":case"i":addres("i",getcolonne(t[2]));break;case"model":case"m":addres("m",getcolonne(t[2]));break;case"e":case"escludi":case"exclude":addres("ex",getcolonne(t[2]))}else addres("valid",getcolonne(s))}return setlevelimite(e),e}let e;if(t&&t.length){for(const a of t){const t=parsevettorelimiti(a);if(t&&(t.valid&&t.valid.length||t.ex&&t.ex.length)){let a=0;t.i&&t.i.length&&(a+=5),t.m&&t.m.length&&(a+=3),t.r&&t.r.length&&(a+=2),t.v&&t.v.length&&(a+=3),t.datai&&t.dataf&&(a+=1),t.l=a,e||(e=[]),e.push(t)}}e&&(e=e.sort(((t,e)=>e.l-t.l)))}return e}class Variante{constructor(t){this.rows={},this.name="$",this.key="$",this.limits=void 0,this.amb=t}setheader(t,e){const{name:a,cat:s}=checkmu(t,e);return this.cat=s,this.name=a,this.alias="",this.obbligo=!1,this.des=a,this.vdef=[],this.rows={},this.h=[],this.key=`${s}/${a}`,{name:a,cat:s}}fromdim(t,e=2){"number"!=typeof t&&(t=muCalc(t)),e>0&&e--;let a,s=1e9;for(const i in this.rows){const r=this.rows[i];if(!r.annulla){const i=parseFloat(r.v[e])||0;i<=s&&i>=t&&(s=i,a=r)}}return this.#t(t,a)}async load(e,a,i=!1){const{name:r,cat:n}=this.setheader(e,a);if(t){const e=await t(n,r);if(e){if(await this.loadContentExtended(e),e.filter)this.limits=parselimitifromdb(e.filter);else if(s&&!i){const t=await s("filter",n,r);t&&t.length&&(this.limits=parselimitifromdb(t))}return!0}}return!1}async _loadContent(t){const e=/^\s*[!:]\s*(\w+)\s*(.*)$/i;let a="";const s=[];let i,r=!1;for(const n of t){const t=n.toLowerCase();if("{limit}"==t)i=[],s.push(i),r=!0;else if("{:limit}"==t)r=!1;else if(r)i.push(n);else{let t=e.exec(clean(n));if(t)if(a&&"extra"==t[1].toLowerCase()){const e=getcolonne(t[2]);for(const t of e){const e=t.indexOf("=");if(e>0){const s=clean(t.substring(0,e));"v"!=s&&(this.rows[a][s]=t.substring(e+1).trim())}}}else switch(t[1].toLowerCase()){case"alias":{const e=t[2].toLowerCase().split(";");if(e[0].trim()!=this.name)if(1==e.length)this.alias=e[0];else{let a;if(this.amb?a=await this.amb.getvariante(e[0]):(a=new Variante,await a.load(e[0],this.cat)),t=a?.rows,t){let a=Object.keys(t);if(a.length){e.splice(0,1);const addrows=e=>{e&&e.forEach((e=>this.rows[e]=t[e]))};for(const t of e){const e=/([ei])\s*:\s*(.*)\s*$/im.exec(t);if(e){const t=e[2].split(",");for(let e=0;e<t.length;e++)t[e]=t[e].trim();a="e"==e[1]?a.filter((e=>{for(const a of t)if(e.startsWith(a))return!1;return!0})):a.filter((e=>{for(const a of t)if(e.startsWith(a))return!0;return!1}))}}addrows(a)}}}}break;case"h":this.h=getcolonne(t[2]).map((t=>({des:t})));break;case"t":{const e=getcolonne(t[2]);if(this.h)for(let t=0;t<this.h.length;t++)this.h[t].t=e[t]||""}break;case"des":this.des=t[2];break;case"default":case"vdef":this.vdef=getcolonne(t[2]);break;case"obbligo":this.obbligo=!0;break;case"noerp":this.noerp=!0;break;case"noobbligo":this.obbligo=!1}else{const t=getcolonne(n),e=clean(t[0]);e&&(a=e,this.rows[a]={annulla:0,v:t})}}}const n=Object.keys(this.rows);for(const t of n)if(t.includes(".")){const e=t.split(".");for(let t=0;t<e.length-1;t++){const a=e.slice(0,t+1).join(".");this.rows[a]||(this.rows[a]={annulla:0,v:[a]})}}return this.limits=parselimitifromrule(s),!0}tovec(){const t=this.rows,e=[],a=Object.keys(t).sort();for(const t of a)this.rows[t].annulla<2&&e.push(this.#t(t,this.rows[t]));return e}#t(t,e){const a=[t];if(e)for(const t of e.v)"string"==typeof t&&(t.includes(",")||t.includes(";"))?a.push(quote(t)):a.push(t||"");return a.join(",")}tovar(t,e=""){const a=clean(t);if(!this.rows[a])return e||t;const s=this.rows[a];return 2==s.annulla?"":this.#t(e||t,s)}isvalidopz(t){const e=clean(t),a=this.rows[e];return!!a&&(1!=a.annulla&&!a.hasliv)}firstvalid(t,e=void 0){const a=t.indexOf(",");if(a>0&&(t=t.slice(0,a).trim()),t&&this.isvalidopz(t))return t;if(e&&e.length)for(const t of e)if(this.isvalidopz(t))return t;if(this.vdef&&this.vdef.length)for(const t of this.vdef)if(this.isvalidopz(t))return t;const s=Object.keys(this.rows).sort();for(let t=0;t<s.length;t++){const e=s[t];if(!(t<s.length-1&&s[t+1].startsWith(e+"."))&&this.isvalidopz(e))return e}}resetfilter(){delete this._valids;for(const t in this.rows)this.rows[t].annulla=0}validkeys(){let t=Object.keys(this.rows)||[];return t=t.filter((t=>0==this.rows[t].annulla)).sort(),t}limitfiltra(t){if(!t)return;t=muClComments(t.toLowerCase());const e=[];for(const a of t){const t=/^#(i|e|xe|xi|x\+|x-|x)(\d*)\s+(.+)$/i.exec(a);if(t){const a={ex:t[1],col:(parseInt(t[2])||1)-1,val:"x"==t[1]?t[3]:getcolonne(t[3])};a.val.length&&e.push(a)}}if(e.length)for(const t in this.rows){const a=this.rows[t];for(const t of e)if("e"==t.ex){if(_check((a.v[t.col]+"").toLowerCase(),t.val)){a.annulla=1;break}}else if(t.ex.startsWith("x")){const e=(a.v[t.col]+"").toLowerCase().split(/[,;]/).map((t=>t.trim()));if("xe"==t.ex){if(_check((t.val+"").toLowerCase(),e)){a.annulla=1;break}}else if("x+"==t.ex){if(parseFloat(a.v[t.col])<=parseFloat(t.val)){a.annulla=1;break}}else if("x-"==t.ex){if(parseFloat(a.v[t.col])>=parseFloat(t.val)){a.annulla=1;break}}else if(!_check((t.val+"").toLowerCase(),e)){a.annulla=1;break}}else if(!_check((a.v[t.col]+"").toLowerCase(),t.val)){a.annulla=1;break}}function _check(t,e){if(1==e?.length&&"."==e[0])return!!t;return!!e.find((e=>e.startsWith(t)))}}limita(t){if(this.resetfilter(),t&&t.length&&this.limitfiltra(t),!this.limits||!this.amb)return this;const{item:e,rule:a,model:s,vari:i,data:r}=this.amb,valid=(t,e)=>!e||!e.length||!!t&&e.includes(t),n=this.limits.filter((t=>{if(!valid(e,t.i))return!1;if(!valid(a,t.r))return!1;if(!valid(s,t.m))return!1;if(r&&t.datai&&r<t.datai)return!1;if(r&&t.dataf&&r>t.dataf)return!1;if(t.v&&t.v.length)for(const e of t.v){const t=clean(i.var(e.v).split(",")[0],!0);if(t&&!e.o.includes(t))return!1}return!0}));if(!n||!n.length)return this;const o=new Set,c=new Set,l=new Set,u=new Set;let h=!1,f=!1;for(const t of n){if(t.valid&&t.valid.length){h=!0;t.valid.filter((t=>t.indexOf("*")>0)).map((t=>t.split("*")[0])).forEach((t=>o.add(t))),t.valid.filter((t=>!t.includes("*"))).forEach((t=>l.add(t)))}if(t.ex&&t.ex.length){f=!0;t.ex.filter((t=>t.indexOf("*")>0)).map((t=>t.split("*")[0])).forEach((t=>c.add(t))),t.ex.filter((t=>!t.includes("*"))).forEach((t=>u.add(t)))}}for(const t in this.rows){const e=this.rows[t];let a=!1,s=!1;if(h){for(const e of o)if(t.startsWith(e)){a=!0;break}!a&&l.has(t)&&(a=!0)}if(f){for(const e of c)if(t.startsWith(e)){s=!0;break}!s&&u.has(t)&&(s=!0)}h&&!a&&(e.annulla=1),f&&s&&(e.annulla=1)}return n}async loadContentExtended(t){if("object"==typeof t){for(const e in t)["rows","des","h","alias","obbligo"].includes(e)&&(this[e]=t[e]);"string"==typeof t.def&&t.def.length&&(this.vdef=getcolonne(t.def.trim().toLowerCase())),t.filter&&t.filter.length&&(this.limits=parselimitifromdb(t.filter))}else await this._loadContent(muClComments(t,!1))}todata(){return{name:this.name,des:this.des,alias:this.alias,obbligo:this.obbligo,h:this.h,rows:this.rows,limits:this.limits,key:this.key}}}const v={};async function getcbfunc(t,e,s,i,r,n){if(a){if(v[e])return"";let t=await a(e,s,i,r,n);return isObject(t)||(t=(t||"").trim(),"!"==t&&(v[e]=!0,t="")),t}return t}async function intvaluta(t,e,a){return t.vari.valuta(a,(async(a,s)=>{switch(a){case"dim":{let a=muCalc(s[1]),i=await dammivariante(t,e,s[2]),r=parseInt(s[3])||2;return i&&i.fromdim?i.fromdim(a,r):a}case"seed":{let t=s[1],e=getcolonne(s[2]);return e[seeder(e.length,t)]||""}case"seedvar":{let a=await dammivariante(t,e,s[2]),i=s[1],r=a.validkeys();if(s[3]&&s[4]){let t=muCalc(s[3])-1;if(t>=0){let e=getcolonne(s[4]);r=r.filter((s=>{let i=a.rows[s];if(i&&i.v&&i.v[t]){let a=getcolonne(i.v[t]);if(a)for(let t of e)if(a.includes(t))return!0}return!1}))}}let n=seeder(r.length,i);return n>=0&&a.tovar(r[n])||""}default:return await getcbfunc(`**fun:${a}**`,a,s,t.vari,t)}}))}async function dammivariante(t,e,a){let s;return s=e&&e?.localvar&&e.localvar[a]?e.localvar[a]:await t.getvariante(a),s}async function impostavariante(t,e,a,s,i){let r,n=a;if((s=s||"")&&"string"==typeof s){const t=s.indexOf(":");t>=0&&(t>0&&(n=clean(s.slice(0,t))),s=s.slice(t+1))}if(i&&i.alias&&(n=i.alias),e&&e.paralias&&e.paralias[a]&&(n=e.paralias[a]),r=await dammivariante(t,e,n),r)if(i&&i.t){i.des||(i.des=r.des);let e=i?.filtra||"";if(e.includes("$")&&(e=await t.vari.valuta(e)),"m"===i.t){let t=2;if(s.includes(":")){const e=s.split(":");t=parseInt(e[1]),s=e[0]}r.limita(e),s=r.fromdim(parseFloat(s),t)}else{r.limita(e);const t=r.firstvalid(s,getcolonne(i.def));s=r.tovar(t)}}else r.resetfilter(),s=r.firstvalid(s),s=r.tovar(s);else i&&i.t&&i.t;return t.vari.add(a,s),s}async function pushpars(t,e,a,s){const i={},r=[];if(a)for(const s of a){const{v:a,o:n,fl:o}=getcouple(s);i[a]||(i[a]=!0,r.push({v:a,o:t.vari.var[a]}),o&&await impostavariante(t,e,a,n))}if(s)for(const a of s){const{v:s,o:n,fl:o}=getcouple(a);i[s]||(i[s]=!0,r.push({v:s,o:t.vari.var[s]}),o&&await impostavariante(t,e,s,n))}return r}function poppars(t,e){if(e)for(const a of e)t.vari.add(a.v,a.o)}const outpush=(t,e)=>{null!=e&&null!=e&&("object"==typeof e?t.push(JSON.stringify(e,null,2)):"string"==typeof e&&e.startsWith("_ ")&&t.length>0&&"string"==typeof t[t.length-1]?t[t.length-1]+=e.slice(2):t.push(...e.split("\n")))};async function muEval(t,e,a,s){if(!Array.isArray(a))return n.add("codice is not a valid parsed array"),[];s||(s={}),s.id||(s.id="_"),s._stackmacro||(s._stackmacro=0),s.limited||(s.limited=!1),t||n.add("amb deve essere definito");const i=t.vari;t.maxdelays,t.cat;const r=[];let o,c,l;tk();for(let u=0;u<a.length;){let h=a[u];switch(h.tipo){case"IFDEF":case"IFNDEF":case"IF":{const f="IF"==h.tipo?muCalc(await intvaluta(t,e,h.contenuto)):"IFDEF"==h.tipo?""!=await intvaluta(t,e,h.contenuto):""==await intvaluta(t,e,h.contenuto);h.next?(a[h.next].jlast=f?1:0,f||(u=h.next-1)):n.add("Troppo tempo",h)}break;case"SELECT":h.next?(a[h.next].t1=await intvaluta(t,e,h.contenuto),u=h.next-1):n.add("manca endselect",h);break;case"CASE":case"CASES":case"DEFAULT":if(h.next)if(h.jlast)h.jlast=0,u=h.last-1;else{let d,m=1;const _getvv=async()=>{let a=await intvaluta(t,e,h.contenuto);return a=a.includes(":")&&!a.includes(",")?a.split(":").map((t=>(t||"").trim())):getcolonne(a),a};if("CASE"==h.tipo){m=0,d=await _getvv();const p=muCalc(h.t1||"");d.find((t=>muCalc(t)==p))&&(m=1)}else if("CASES"==h.tipo){m=0,d=await _getvv();const v=h.t1||"";d.find((t=>t==v))&&(m=1)}a[h.next].jlast=m?1:0,a[h.next].t1=h.t1,m||(u=h.next-1)}else n.add("manca select",h);break;case"ELSEIF":case"ELSEIFDEF":case"ELSEIFNDEF":case"ELSE":if(h.next)if(h.jlast)h.jlast=0,u=h.last-1;else{const g="ELSE"==h.tipo?1:"ELSEIF"==h.tipo?muCalc(await intvaluta(t,e,h.contenuto)):"ELSEIFDEF"==h.tipo?""!=await intvaluta(t,e,h.contenuto):""==await intvaluta(t,e,h.contenuto);a[h.next].jlast=g?1:0,g||(u=h.next-1)}else n.add("manca endif",h);break;case"ENDIF":case"ENDSELECT":case"CACHE":case"CVAR":break;case"PUSH":i.push();break;case"POP":i.pop();break;case"INC":case"I":if(s._stackmacro>500)n.add("stack chiamate macro troppo profondo!",h);else if(({macro:o,pars:c,xid:l}=await t.getmacro(h)||{}),o){s._inc=!0,s._stackmacro++;const b={},w=o.parametri?._;if(w&&w.length)for(const k of w){const x=clean(k.split("=")[0]||"",!0);x&&(b[x]=i.dictionary[x])}await o.impostaparametri(w,c);const y=await muEval(t,o,o.codice,s);for(const C in b)b[C]?i.dictionary[C]=b[C]:delete i.dictionary[C];r.push(...y),s._stackmacro--,s._inc=!1}break;case"RET":{const E=await intvaluta(t,e,h.contenuto);t.vari.savevars(E)}break;case"MACRO":case"M":case"FUNC":case"F":if(s._stackmacro>500)n.add("stack chiamate macro troppo profondo!",h);else{let{macro:O,pars:_,xid:$}=await t.getmacro(h)||{};if(O){const F=!!s.grafica||["F","FUNC"].includes(h.tipo),S=s.id||"",I=O.parametri?._,L={};if(F)i.push();else{if(O.head)for(const A of O.head)L[A.cod]=t.vari.var(A.cod);if(I&&I.length)for(const z of I){const M=(z.split("=")[0]||"").trim().toLowerCase();M&&(L[M]=i.dictionary[M])}}if(O.codice.length){if(s._stackmacro++,s.grafica&&"function"==typeof s.grafica){let j="",W="";_&&_.length?(j=_.find((t=>t.startsWith("#id"))),j?(j=await i.valuta(j.slice(4)),j.startsWith("#")?s.id=j:s.id=hash(`${u}${O.name}${S}${j}`),_=_.filter((t=>!t.startsWith("#id"))),W=s.id):s.id=hash(`z${S}${u}`)):s.id=hash(`z${S}${u}`);let N=t.pick.key;t.pick.key=s.id;const T=await s.grafica({tipo:h.tipo,id:W,pars:_,parametri:I,macro:O,options:s,vari:t.vari,amb:t});t.pick.key=N,r.push(T)}else{await O.impostaparametri(I,_);let V=t.vari.var("_rootnode");t.vari.add("_rootnode","0");const D=await muEval(t,O,O.codice,s);t.vari.add("_rootnode",V),r.push(...D)}s._stackmacro--}if(F)i.pop();else for(const R in L)L[R]?i.dictionary[R]=L[R]:delete i.dictionary[R];s.id=S}else n.add("Macro non trovata!",h)}break;case"SETDEF":{let P=getcolonne((h.contenuto||"").toLowerCase()),J=await dammivariante(t,o,P[0]),K=P[1]||"def_",U=P[2];if(K.endsWith("_")||(K+="_"),J&&J.rows){P=Object.keys(J.rows),U&&(P=P.filter((t=>t.startsWith(U))));for(let q of P){let G=`${K}${q}`;if(!i.dictionary[G]){function torow(t){const e=[];if(t)for(const a of t.v.slice(1))"string"==typeof a&&(a.includes(",")||a.includes(";"))?e.push(quote(a)):e.push(a||"");return e.join(",")}i.add(G,await intvaluta(t,e,torow(J.rows[q])))}}}}break;case"LET":case"LETS":{let B=h.contenuto.indexOf("="),H=-1;if(B>=0&&(H=h.contenuto.indexOf("=",B+1)),H<0){const X=h.contenuto;if(B=X.indexOf("="),B>0){const Z=await intvaluta(t,e,X.slice(0,B).trim());let Q=X.slice(B+1).trim();Q="LET"==h.tipo?muCalc(await intvaluta(t,e,Q))||"":await intvaluta(t,e,Q),i.add(Z,Q)}}else{const Y=getcolonne(h.contenuto);for(const tt of Y)if(B=tt.indexOf("="),B>0){const et=await intvaluta(t,e,tt.slice(0,B));let at=tt.slice(B+1).trim();at="LET"==h.tipo?muCalc(await intvaluta(t,e,at))||"":await intvaluta(t,e,at),i.add(et,at)}}}break;case"LETT":{const st=h.contenuto.indexOf("=");if(st>0){const it=await intvaluta(t,e,h.contenuto.slice(0,st).trim()),rt=await intvaluta(t,e,h.contenuto.slice(st+1).trim());i.add(it,rt)}}break;case"LOOK":case"LOOKB":{const nt=getcolonne(await intvaluta(t,e,h.contenuto)),ot=muCalc(nt[1]),ct=muCalc(nt[3]),lt=await dammivariante(t,o,nt[2]);if(lt&&lt.rows){const ut=Object.values(lt.rows).reduce(((t,e)=>{const a=parseInt(e.v[ct?ct-1:0]);return a&&("LOOKB"==h.tipo?a<=ot&&a>t.v&&(t.v=a,t.c=e.v[0]):a>=ot&&a<t.v&&(t.v=a,t.c=e.v[0])),t}),{v:"LOOKB"==h.tipo?0:1/0,c:""});ut&&ut.c&&(t.vari.add(nt[0],lt.tovar(ut.c)),s.checkheader&&"function"==typeof s.checkheader&&await s.checkheader({variante:nt[0],valore:lt.tovar(ut.c),riga:h}))}else t.vari.add(nt[0],`${ot},no,no`)}break;case"LETV":case"LETM":case"DEF":{const ht=getcolonne(h.contenuto);if(ht)for(const ft of ht){let{v:dt,o:mt,fl:pt}=getcouple(ft);if(pt){dt=await i.valuta(dt),mt=await intvaluta(t,e,mt);const vt=await impostavariante(t,e,dt.trim().toLowerCase(),mt.trim().toLowerCase(),"LETM"==h.tipo?{t:"m"}:{t:"v"});s._stackmacro<=0&&s.checkheader&&"function"==typeof s.checkheader&&await s.checkheader({variante:dt,valore:vt,riga:h})}}}break;case"DO":{const gt=(h.contenuto||"").trim();let bt=!0;gt&&!muCalc(await intvaluta(t,e,gt))&&(bt=!1),h.next&&(bt||(u=h.next+1))}break;case"VARIANTE":case"FORVAR":case"FOR":{let wt,yt,kt,xt;if(s.oldstyle?(wt=h.contenuto.split(","),xt=wt[2]||"i",kt=wt[0],yt=wt[1]):(wt=getcolonne(h.contenuto||""),xt=wt[0]||"",kt=clean(wt[1],!0),yt=wt[2]||""),xt=xt.includes("$")?await intvaluta(t,e,xt):xt||"","FORVAR"==h.tipo||"VARIANTE"==h.tipo){const Et=await intvaluta(t,e,kt),Ot=Et?await dammivariante(t,e,Et):void 0;Ot?kt=Ot.tovec():(kt=[],n.add("getvariante not found!",h))}else{const _t=await intvaluta(t,e,kt||"");kt=kt?getcolonne(_t):void 0}kt=kt||[];const Ct=0;if(h.next){a[h.next].for={v:xt,elenco:kt,nc:Ct,valido:yt};let $t,Ft=!0;xt&&kt.length>0?Ct>=kt.length?Ft=!1:($t=kt[Ct],i.add(xt,$t),yt&&(Ft=!muCalc(await intvaluta(t,e,yt)))):Ft=!1,Ft||(u=h.next-1)}else n.add("manca endfor/loop",h)}break;case"LOOP":{let St=!0;h.contenuto&&!muCalc(await intvaluta(t,e,h.contenuto))&&(St=!1),St&&(u=h.prev-1);break}case"ENDFOR":if(!h.contenuto||muCalc(await intvaluta(t,e,h.contenuto)))if(h.for){const{v:It,elenco:Lt,valido:At}=h.for;if(It&&Lt.length>0&&h.for.nc<500)for(;;){if(h.for.nc++,h.for.nc<Lt.length){if(i.add(It,Lt[h.for.nc]),At&&muCalc(await intvaluta(t,e,At)))continue;u=h.prev;break}break}}else n.add("manca istruzione for",h);break;case"BREAK":case"EXIT":case"EXITFOR":h.next?h.contenuto.trim()?muCalc(await intvaluta(t,e,h.contenuto))&&(u=h.next):u=h.next:n.add("break outside loop",h);break;case"CONTINUE":h.next?h.contenuto&&!muCalc(await intvaluta(t,e,h.contenuto))||(u=h.next-1):n.add("continue outside loop",h);break;case"MSG":case"LOG":{const zt=await intvaluta(t,e,h.contenuto);logga(zt),n.add(zt)}break;default:{let Mt;if(h.contenuto.startsWith("!")){Mt=await intvaluta(t,e,h.contenuto);let jt="";const Wt=/^!(.\w+)[\s;,]\s*(.+)?$/gim.exec(Mt);if(Wt)if(Wt[1].startsWith("."))await getcbfunc(Mt,Mt.slice(1),[],i,t),jt="";else{const Nt=(Wt[1]||"").toLowerCase(),Tt=getcolonne(Wt[2]||"");jt=await getcbfunc(Mt,Nt,Tt,i,t)}jt&&outpush(r,jt)}else s.parsefnpunto&&"function"==typeof s.parsefnpunto&&h.contenuto.startsWith(".")?await s.parsefnpunto({dati:h.contenuto,output:r,id:s.id,vari:t.vari,amb:t}):(Mt=await intvaluta(t,e,h.contenuto),outpush(r,Mt))}}u++}return r}async function muGenerate(t,e,a,s,i=0){if(t.isgenera&&s){const r={counter:0,keys:{},isTestmode:i};if(a){if(!t.genera[a])return!1;await muGenerate_0(t,e,a,s,r)}else for(const a in t.genera)await muGenerate_0(t,e,a,s,r);return!0}}async function muGenerate_0(t,e,a,s,i){const r=t.genera[a];if(r){i.counter2=0;const n={};async function processavariante(o){if(i.isTestmode&&i.counter>i.isTestmode)return;if(o<r.vars.length){const a=r.vars[o];if(!n[a]){const s=await dammivariante(e,t,a),i=s?Object.keys(s.rows):void 0;if(i&&i.length>0){for(const t of i)e.vari.add(s.name,s.tovar(t)),n[a]=!0,await processavariante(o+1),n[a]=!1;return}logga("manca la variante",a)}}for(const a of r.calcola)t.formula[a]&&await muEval(e,t,t.formula[a],{limited:!0});for(const a of r.exclude)if(t.formula[a]){const s=await muEval(e,t,t.formula[a],{limited:!0});if(s)for(const t of s){if(muCalc(t))return}}const c=await muEval(e,t,r.codice,{limited:!0,localvar:t.localvar}),l={};for(const a of r.bom)if(t.formula[a]){let s=await muEval(e,t,t.formula[a],{limited:!0});s=s.join("\n").split("\n");for(const t of s)if(t){const e=getcolonne(t);l[a]||(l[a]=[]);const s={};for(let t=0;t<e.length;t++)s[`c${t}`]=e[t];l[a].push(s)}}await async function docallback(t,e,a,s,i,r){let n=!0;for(const o of e){const e=getcolonne(o);if(e[0]&&!r[e[0]]){r[e[0]]=1,r.counter++,r.counter2++;const o={__id:r.counter};for(let t=0;t<e.length;t++){let a=s.head[t]?s.head[t]:`c${t}`;"#"==a[0]?(a=a.substr(1),o[a]=Math.round(1e3*muCalc(e[t]))/1e3):o[a]=e[t]}await t(i,o,n?a:void 0,r.counter,r.counter2),n=!1}}}(s,c,l,r,a,i)}await processavariante(0)}}const g=["l","a","p"],b=/^\{(:?(var|valid|formula|genera|header|v|f|g|h))[\s|}]/im,w=["s","g","h","p","q"],y=[{cod:"t",des:"Variante"},{cod:"q",des:"V.Query"},{cod:"f",des:"Valore Fisso"},{cod:"g",des:"Gruppo"},{cod:"s",des:"Libero"},{cod:"m",des:"Misura"},{cod:"c",des:"Check (no/si)"},{cod:"z",des:"Check (si/no)"},{cod:"h",des:"Hidden"},{cod:"p",des:"Programmato"}],k=[{cod:"",des:"Libero"},{cod:"a",des:"Area"},{cod:"t",des:"Thumb",folder:"thumbs"},{cod:"i",des:"Image",folder:"textures"},{cod:"x",des:"3D file",folder:"3d"},{cod:"f",des:"Funzione",folder:"script"}];function valutaCondizioniTestata(t,e){const a=e.split("\n");for(const e of a)if(e.trim()){if(muCalc(t.valutasync(e)))return!0}return!1}class Macro{constructor(t,e){const{name:a,cat:s}=checkmu(e,t.cat||"");this.name=a,this.cat=s,this.amb=t,this.azzera()}azzera(){this.key=`${this.cat}/${this.name}`,this.localvar={},this.head=[],this.frontend=!1,this.valid=[],this.parametri={},this.paralias={},this.formula={},this.settings={},this.errori=[],this.codice=[],this.genera={}}get isgenera(){return Object.keys(this.genera).length||0}get iscodice(){return this.codice.length||0}get isheader(){return this.head?.length||0}geterrori(){const t=[];return this.errori.forEach((e=>t.push({e:e}))),t}getparametri(t={}){const{noderiva:e}=t,a={};if(this.dims&&g.forEach((t=>{const e=muCalc(this.amb.vari.var(t));e&&(a[t]=String(e))})),this.head){for(const t of this.head)if(!t._h){if(e&&t._d&&t._d.cod)continue;let s=this.amb.vari.var(t.cod);w.includes(t.t)||"string"==typeof s&&(s=s.split(",")[0]),a[t.cod]=s}}else if(this.parametri?._)for(const t of this.parametri._){const e=(t.split("=")[0]||"").trim().toLowerCase();let s=this.amb.vari.var[e];s=(s||"").split(",")[0],a[e]=s}return a}async setparametri(t){const e={},a=this.amb.ruleset||{};t||(t={}),this.dims&&g.forEach((e=>{let a=t[e]||this.dims[e].val;a=parseFloat(a)||0,this.dims[e].visible&&(a<this.dims[e].min&&(a=this.dims[e].min),a>this.dims[e].max&&(a=this.dims[e].max)),t[e]=String(a)}));for(const s of this.head){const i=a[s.cod];i&&(i.islock?(s.visible="0",t[s.cod]=i.opz,s._islock=!0):t[s.cod]||(t[s.cod]=i.opz)),"g"!=s.t&&("z"!=s.t||t[s.cod]||(t[s.cod]="1"),s._v=t[s.cod]||"",e[s.cod]=!0)}for(const a in t)e[a]||(e[a]=!0,await impostavariante(this.amb,this,a,t[a]));return this.head?.length>0&&await this.setparametro(this.head[0].cod,t[this.head[0].cod]||void 0,!0,t),this.getparametri()}async setparametro(t,e,a=!1,s={}){if(e&&"string"==typeof e&&e.includes("$")&&(e=await intvaluta(this.amb,this,e)),s||(s={}),this.head){const _imposta=async(t,e,a,i)=>{const r=t?.cod;if(t.valid&&!t._h1){const e=!valutaCondizioniTestata(this.amb.vari,t.valid);if(t._h!=e&&(t._h=e,["g","g1","g2"].includes(t.t)))for(let e=a+1;e<this.head.length;e++){const a=this.head[e];if(a){if(["g","g1","g2"].includes(a.t))break;a._h1=t._h}}}if(t._h||t._h1)return this.amb.vari.add(r,""),t._v=void 0,"";{if(delete t._h2,t.visible){const e=!valutaCondizioniTestata(this.amb.vari,t.visible);if(e&&(t._h2=e),["g","g1","g2"].includes(t.t))for(let e=a+1;e<this.head.length;e++){const a=this.head[e];if(a){if(["g","g1","g2"].includes(a.t))break;t._h2?a._h3=t._h2:delete a._h3}}}let i=this.amb.vari.var(r)||"";"thlm".includes(t.t)&&"string"==typeof i&&(i=i.split(",")[0]);let n=i;if("z"!=t.t||i||(this.amb.vari.add(r,"1"),i="1"),"m"==t.t&&t.spars){let e=t.spars;(e||"").includes("$")&&(e=await intvaluta(this.amb,this,e));const a=getcolonne(e);i=parseFloat(i||a[0])||0,(!a[1]||"").includes(";")&&(a[1]&&parseFloat(i)<a[1]&&(i=parseFloat(a[1])||0),a[2]&&parseFloat(i)>a[2]&&(i=parseFloat(a[2])||0)),i=String(i),this.amb.vari.add(r,i)}const o=await impostavariante(this.amb,this,r,e||t._v||i,t);if(t._v=void 0,i=this.amb.vari.var(r)||"","thl".includes(t.t)&&"string"==typeof i&&(i=i.split(",")[0],this.amb&&this.amb.deriva&&this.amb.deriva.length>0)){const e=this.amb.deriva.filter((t=>t.cod==r&&((!t.item||t.item==this.amb.item)&&((!t.model||t.model==this.amb.model)&&((!t.rule||t.rule==this.amb.rule)&&(!t.opz||t.opz==i))))));e.length&&e.forEach((e=>{let a=this.head.find((t=>t.cod==e.tocod));if(a){let r=this.amb.vari.var(a.cod);s&&s[a.cod]&&(r=s[a.cod]),"string"==typeof r&&(r=r.split(",")[0],r&&r!=n&&r!=i?delete a._d:(a._v=e.toopz||i,a._d={cod:t.cod,opz:e.toopz}))}}))}return o}};let i,r=-1;if("#dim"==t)a=1;else{if(r=this.head.findIndex((e=>e.cod===t)),r<0)return;const s=this.head[r];i=await _imposta(s,e,r),a&&delete s._d}if(a)for(let t=r+1;t<this.head.length;t++)await _imposta(this.head[t],void 0,t);return i}return await impostavariante(this.amb,this,t,e)}getmarker(){let t;if(this.head&&this.head.length){let e=this.head.find((t=>"marker"==(t.stipo||"").trim().toLowerCase().split(/[;,]/)[0].trim()));e&&e.cod&&(t=e.cod)}return t}isderivato(t){return"string"==typeof t&&(t=this.head.find((e=>e.cod==t))),!!(t&&t._d&&t._d.cod)}async impostaparametri(t,e,a=!1,s){if(this.head){this.paralias||(this.paralias={}),Array.isArray(this.head)||(this.head=[]);for(const t of this.head)t._v="",delete t._h,delete t._h1,delete t._h2,t.alias&&(this.paralias[t.cod]=t.alias)}s||(s={}),t||(t=[]),e||(e=[]);for(const a of[...t,...e]){const t=a.indexOf("=");if(t>0){let e=clean(a.substr(0,t));e.includes("$")&&(e=await intvaluta(this.amb,this,e));let s,i=a.substr(t+1);i.includes("$")&&(i=await intvaluta(this.amb,this,i)),this.head&&(s=this.head.find((t=>t.cod==e)))?s._v=i:await impostavariante(this.amb,this,e,i)}}if(this.head){let t=!0;for(const e of this.head){let i=await this.checkvalid(e.valid);a&&(i=!0),["g","g1","g2"].includes(e.t)?t=i:t&&i&&await this.setparametro(e.cod,s[e.cod]||e._v)}}}async checkvalid(t){if(!t)return!0;return!!muCalc(await intvaluta(this.amb,this,t))}getmacrostr(){return JSON.stringify(this.getmacro())}getmacro(){return getOggetto(this,["amb"])}setmacro(t){if(setOggetto(this,fromjson(t,{})),this.localvar)for(const t in this.localvar){const e=new Variante;setOggetto(e,this.localvar[t]),this.localvar[t]=e}}async load(t,a){let s,i;try{let r;if(({name:s,cat:i}=checkmu(t||this.name,a||this.cat||"")),this.name||(this.name=s),this.cat||(this.cat=i),this.azzera(),e&&(r=await e(i,s),"string"==typeof r&&(r.startsWith("{")||r.startsWith("["))&&(r=fromjson(r)),r&&r.head&&!Array.isArray(r.head)&&(r.head=[]),this.amb.checkscripts(r.linkscript),delete r.linkscript,r.head&&(r.dims=getheaddims(r.dims))),r){if("string"==typeof r)await this.parsedata(r);else for(const t in r)this[t]=r[t];return!0}n.add(`missing cbGetFile: ${i}/${s}`)}catch(t){n.add(geterrdes(t),`macro.load: ${s}/${i}`)}}async loadAndCompile(t,e,a=!1){let s;const{name:r,cat:o}=checkmu(t,this.cat||e);return this.azzera(),i&&(s=await i(o,r)),s?(await this.parsedata(s,a),this.getmacro()):void n.add(`missing cbGetFile: ${r}/${o}`)}async#e(t,e,a,s){let r;const{name:n,cat:o}=checkmu(t,this.cat);if(i&&(r=await i(o,n)),!r)return[];if(r.includes("$1")&&s&&s.length>0)for(let t=1;t<s.length;t++)r=r.replaceAll(`$${t}`,s[t]);let c=muClComments(r);const l=[];e&&(c=c.filter((t=>!/^\{(:?(var|valid|formula|header|genera|v|f|h))[\s|}]/im.test(t))));for(const t of c){const s=b.exec(t);if(s)e=!s[1].startsWith(":"),l.push(t);else{const s=/^\s*\{i\s(.+)?\}/im.exec(t);if(s){const t=getcolonne(s[1]);if(!a.includes(t[0])){a.push(t[0]);const s=await this.loadinclude(t[0],e,a,t);Array.isArray(s)&&l.push(...s),a.pop()}}else l.push(t)}}return l}async parsedata(t,e=!1){if(this.azzera(),!t)return;const a=[];let s=muClComments(t),i=!1;const r=[];for(const t of s){const e=b.exec(t);if(e)i=!e[1].startsWith(":"),a.push(t);else{const e=/^\s*\{i\s(.+)?\}/im.exec(t);if(e){const t=getcolonne(e[1]),s=await this.#e(t[0],i,[t[0]],t);Array.isArray(s)&&a.push(...s)}else a.push(t)}}i=!1;let n=this.codice;for(const t of a){const e=b.exec(t);if(e)if(e[1].startsWith(":"))n=this.codice;else switch(e[1]){case"genera":case"g":{let e=/^\s*\{(genera|g)\s+(.+)?\}/im.exec(t);if(e){const t=checkname(getcolonne(e[2])[0]);this.genera[t]=[],n=this.genera[t]}else n=this.errori,n.push(t)}break;case"valid":n=this.valid;break;case"var":case"v":{const e=/^\s*\{(var|v)\s+(.+)?\}/im.exec(t);if(e){const t=getcolonne(e[2]),a=checkname(t[0]);this.localvar[a]={name:a,des:t[1]||"",rows:[]},n=this.localvar[a].rows}else n=this.errori,n.push(t)}break;case"formula":case"f":{const e=/^\s*\{(formula|f)\s+(.+)?\}/im.exec(t);if(e){const t=checkname(e[2]);this.formula[t]=[],n=this.formula[t]}else n=this.errori,n.push(t)}break;case"h":case"header":n=r;break;default:this.errori.push(t),n=this.errori}else t.startsWith("{")&&(n=this.codice),n.push(t)}this.parametri={},this.codice=this.cleanfiltraparametri("_",this.codice,e);for(const t in this.formula)this.formula[t]=this.cleanfiltraparametri(t,this.formula[t],e);for(const t in this.localvar){const e=new Variante,a=this.localvar[t];e.setheader(t,this.cat),e.rows={};for(const t of a.rows){const a=getcolonne(t),s=a[0].trim().toLowerCase();e.rows[s]={annulla:0,v:a}}a.des&&(e.des=a.des),this.localvar[t]=e}s=this.valid,this.valid=[];for(const t of s){let e=getcouple(t,",");e={v:e.v,msg:e.o},e.v&&(e.v.startsWith("#")?this.formula[e.v.substring(1)]&&this.valid.push(e):this.valid.push(e))}s=r;const o=[];for(const t of s){const e=/^\s*([\w\-_]+)+[;,\s]\s*(.*)?$/im.exec(t);if(e){const t=getcolonne(e[2]),a=clean(e[1]);let s;if(a){s=o.find((t=>t.cod==a)),s||(s={cod:a,t:"t"},o.push(s));for(const e of t){const t=getcouple(e);switch(t.v){case"t":s.t=t.o;break;case"def":case"default":s.def=t.o;break;case"valid":case"colonna":case"hidden":t.o.startsWith("#")?this.formula[t.o.substring(1)]&&(s[t.v]=t.o):s[t.v]=t.o;break;default:s[t.v]=t.o}}}}}this.head=o,s=this.genera;const c={};for(const t in s)if(Array.isArray(s[t])){const e={codice:[],head:"",calcola:[],bom:[],vars:[],exclude:[]},a=/^\s*[!:]\s*(\w+)\s*(.*)$/i;for(const i of s[t]){const s=a.exec(clean(i));if(s)switch(s[1]){case"calcola":case"c":e.calcola=[...e.calcola,...getcolonne(s[2])];break;case"exclude":case"e":case"escludi":e.exclude=[...e.exclude,...getcolonne(s[2])];break;case"bom":case"db":e.bom=[...e.bom,...getcolonne(s[2])];break;case"vars":case"v":e.vars=[...e.vars,...getcolonne(s[2])];break;case"head":case"h":e.head=getcolonne(s[2]);break;default:this.errori.push(`genera ${t} => ${i}`)}else e.codice.push(i)}e.codice=muClean(e.codice,!0),c[t]=e}this.genera=c}cleanfiltraparametri(t,e,a){if(this.paralias||(this.paralias={}),e&&e.length){let a=!1;const getparalias=t=>{const e=[],a=getcolonne(t);for(const t of a)if(t.includes(":")){const a=t.split(":");this.paralias[a[0]]=a[1],e.push(a[0])}else e.push(t);return e};for(let s=0;s<e.length;s++){const i=/^:p[;,\s]+(.*)?$/im.exec(e[s]);if(i)e[s]=null,a=!0,this.parametri[t]=getparalias(i[1]);else{const i=/^!(parametri|pars|p)[;,\s]+(.*)?$/im.exec(e[s]);i&&(e[s]=null,a=!0,this.parametri[t]=getparalias(i[2]))}}a&&(e=e.filter((t=>null!=t)))}return e=muClean(e,a)}}function parsevariabili(t){let e=!1;const a=[];for(;;){const s=/\$([{[(])/m.exec(t);if(!s){t&&e&&a.push({class:"",text:t});break}{e=!0;const i="["==s[1]?"inline":"variabile";s.index>0&&a.push({class:"",text:t.substring(0,s.index)});const{i:r}=parsevar(t,s.index+2,s[1],null);if(!(r>s.index)){a.push({class:i,text:t.substring(s.index)});break}a.push({class:i,text:t.substring(s.index,r+1)}),t=t.substring(r+1)}}return{fl:e,tk:a}}function parseexp(t,e,a){if(!a)throw new Error("missing callback");let s=!1;const i=[];for(;;){const r=e.exec(t);if(!r){t&&s&&i.push({class:"",text:t});break}r.index>0&&i.push({class:"",text:t.substring(0,r.index)}),i.push(...a(r)),s=!0,t=t.substring(r.index+r[0].length)}return{fl:s,tk:i}}function muParsecode(t,e){t||(t=" "),t.endsWith("\n")&&(t+=" ");const a=[{class:"",text:t}];for(let t=0;t<a.length;t++)if(!a[t].class){{const{fl:e,tk:s}=parseexp(a[t].text,/(\/\*[^]+?\*\/)/im,(t=>[{class:"comment",text:t[1]}]));e&&a.splice(t,1,...s)}if(!a[t].class){{const{fl:e,tk:s}=parseexp(a[t].text,/(\/\/.*)$/im,(t=>[{class:"commento2",text:t[1]}]));e&&a.splice(t,1,...s)}if(!a[t].class){{const{fl:e,tk:s}=parseexp(a[t].text,/(^\s*\{.+?\})/m,(t=>[{class:"header",text:t[1]}]));e&&a.splice(t,1,...s)}if(!a[t].class){{const{fl:e,tk:s}=parseexp(a[t].text,/(^\s*:\w+)(.*?$)/m,(t=>[{class:"param",text:t[1]},{class:"param2",text:t[2]}]));e&&a.splice(t,1,...s)}if(!e){if(a[t].class)continue;{const{fl:e,tk:s}=parseexp(a[t].text,/(^\s*!\w+)/m,(t=>[{class:"function",text:t[1]}]));e&&a.splice(t,1,...s)}if(a[t].class)continue;{const{fl:e,tk:s}=parseexp(a[t].text,/(#let.? +)([\w_.]+)/im,(t=>[{class:"comando",text:t[1]},{class:"variabile",text:t[2]}]));e&&a.splice(t,1,...s)}if(a[t].class)continue;{const{fl:e,tk:s}=parseexp(a[t].text,/(#(push|pop|ret|select|cases|endselect|ifndef|elseifndef|ifdef|endif|elseifdef|variante|forvar|for|endfor|continue|break|inc|macro|default|letm|lets|letv|lett|leto|cat))/im,(t=>[{class:"comando",text:t[1]}]));e&&a.splice(t,1,...s)}if(a[t].class)continue;{const{fl:e,tk:s}=parseexp(a[t].text,/(#(if\s*|elseif\s*))/im,(t=>[{class:"comando",text:t[1]}]));e&&a.splice(t,1,...s)}if(a[t].class)continue;{const{fl:e,tk:s}=parseexp(a[t].text,/(#(else|i |m |f |j |case|def ))/im,(t=>[{class:"comando",text:t[1]}]));e&&a.splice(t,1,...s)}if(a[t].class)continue;{const{fl:e,tk:s}=parsevariabili(a[t].text);e&&a.splice(t,1,...s)}if(a[t].class)continue;{const{fl:e,tk:s}=parseexp(a[t].text,/(\$[\w_.]+)/im,(t=>[{class:"variabile",text:t[1]}]));e&&a.splice(t,1,...s)}}}}}}return a}class Pickers{constructor(){this.clear()}clear(){this.d={},this.keypics={},this.key="",this.keypics[this.key]=0}reset(){this.keypics={},this.key="";for(let t in this.d)this.d[t]._invalid=!0}pack(){let t=[];Object.entries(this.d).forEach((([e,a])=>{a._invalid&&t.push(e),delete a._invalid}));for(let e of t)delete this.d[e]}setkey(t){this.key=t,this.keypics[t]||(this.keypics[t]=0)}add(t){let e=this.keypics[this.key]||0,a=`${this.key}_${e}`;this.keypics[this.key]=e+1;let s=this.d[a]??{};return t=t??{},this.d[a]={...s,...t,_invalid:!1,_key:this.key,_id:e},a}}function toruleset(t){const e={};if(t&&t.length)for(const a of t)e[a.cod]=a;return e}function headerconvert(t){const e=muClComments(t,!1);t={};let a={r:[]},s=!1;for(const i of e){const e=/^\s*\{(h|head|header)\s+(\w+)\}/im.exec(i);if(e)a={cod:e[2],des:e[2],r:[]},s=!1,t[e[2]]=a;else if(!/^\s*:/.exec(i)){const t=i.split(","),e={cod:clean(t[0])};let r;r=(t[1]||"").trim(),r&&(e.des=r),r=clean(t[2]),r&&(e.tipo=r),r=clean(t[3]),r&&(e.alias=r),r=clean(t[4]),r&&(e.valid=r),r=clean(t[5]),r&&(e.visible=r),e.cod&&(s||"sep"!=e.tipo?a.r.push(e):(a.des=e.des,a.valid=e.valid,a.visible=e.visible,s=!0))}}return t}function aliasconvert(t){const e=muClComments((t+"").toLowerCase(),!1),a={};for(const t of e)if(!/^\s*:/.exec(t)){const e=getcolonne(t);e[0]&&e[1]&&(a[e[0]]={cod:e[1]})}return a}class Ambiente{#a=void 0;#s=void 0;#i=void 0;#r=void 0;constructor(t=".",e=100,a=!1){this.righevuote=a,this.maxdelays=e,this.setcatalog(t),this.fndotcallback=void 0,this.pick=new Pickers}setcatalog(t){return t=clean(t),this.cat!=t&&(this.cat=t,this.item=this.rule=this.model="",this.azzera(!0)),t}get muvalutatore(){return{getcolonne:getcolonne,muCalc:muCalc,muEval:muEval,tipifree:w}}azzera(t=!1){this.imgpreview={},this.vari=new Variabile,this.ruleset={},this.fndotcallback&&this.vari.setfndot(this.fndotcallback),this.ruleheader="",t&&(this.macro={},this.sqcache={},this.varianti={},this.varelenco={},this.macroelenco={},this.scripts={},this.#a=void 0,this.#s=void 0,this.#i=void 0,this.#r=void 0)}setimgpreview(t,e){e?this.imgpreview[t]=e:delete this.imgpreview[t]}getimgpreview(t){return this?.imgpreview[t||""]}setfndot(t){this.fndotcallback=t,this.vari.setfndot(t)}async#n(t){if(s&&!this.varelenco[t]){const e=await s("headers",t,"_varianti");Array.isArray(e)?this.varelenco[t]=e:e.vars&&(this.varelenco[t]=e.vars,e.alias&&(this.#s=e.alias)),this.varelenco[t]||(this.varelenco[t]=[])}}parseheaderfrominfo(t){if(t&&t.length>0)for(const e of t)switch(e.tipo){case"_headers":"string"==typeof e.value&&(e.value=headerconvert(e.value)),this.#a=e.value||{};break;case"_alias":"string"==typeof e.value&&(e.value=aliasconvert(e.value)),this.#s=e.value||{};break;case"_typos":if("string"==typeof e.value){const t=fromjson(e.value);for(const e in t){const a=t[e];a.db&&(a.db=muClean(muClComments(a.db))),a.list&&(a.list=muClean(muClComments(a.list)))}e.value=t}this.#r=e.value||{}}}setitem(t,e,a,s=[],i=0){this.item=clean(t,!0),this.rule=clean(e,!0),this.model=clean(a,!0),this.ruleset=toruleset(s),this.data=i||(new Date).toInt()}async getheader(t){let e;return!this.#a&&s&&(e=await s("headers",this.cat,"_headers"),this.parseheaderfrominfo(e)),this.#a||(this.#a={}),this.#a[t]}async getalias(){let t;return!this.#s&&s&&(t=await s("headers",this.cat,"_alias"),this.parseheaderfrominfo(t)),this.#s||(this.#s={}),this.#s}get deriva(){return this.#i,this.#i||[]}async getmacro(t){try{if("string"==typeof t&&(t={tipo:"M",contenuto:t}),!t||!t.contenuto)return;let e=t.contenuto;e.startsWith("$")&&(e=await this.vari.valuta(e));const a=/^([({}):$\w.\\/]+)[\s;,]*(.*)?$/im.exec(e);if(!a)return void n.add("Macro non valida:"+e,t);let s=clean(a[1],!0);s.includes("$")&&(s=await this.vari.valuta(s));const i=getcolonne(a[2]),{name:r,cat:o}=checkmu(s,this.cat);this.cat=o;const c=`${o}/${r}`;if(!this.macro[c]){const e=new Macro(this,r);await e.load()?this.macro[c]=e:n.add(`macro fail to load ${c}`,t)}return s=this.macro[c],s?{macro:s,pars:i}:(n.add(`macro non trovata ${c}`,t),{})}catch(e){n.add(geterrdes(e),`ambiente.getmacro: ${t?.contenuto}`)}}async getvariante(t){const{name:e,cat:a}=checkmu(t,this.cat);let s=e,i={};if(a==this.cat&&this.#s&&this.#s[e]&&(i=this.#s[e]||{},s=i.cod),await this.#n(a),this.varelenco[a]&&!this.varelenco[a].includes(e))return;const r=`${a}/${s}`;let n;return this.varianti[r]?n=this.varianti[r]:(n=new Variante(this),await n.load(r,a),this.varianti[r]=n),i&&(i.des&&(n.des=i.des),i.vdef&&(n.vdef=i.vdef)),n}async varcompila(t,e){const a=new Variante(this);if(await a.load(t,this.cat,!0),a.alias){(await this.getalias())[t]=a.alias}e("variants",{cod:t,des:a.des||"",alias:a.alias,info:a.alias?"":JSON.stringify(getOggetto(a,["amb"]))})}async macrocompila(t,e){const a=new Macro(this,t);await a.loadAndCompile(`${t}.mu`);const s=a.getmacro();e("macros",{cod:t,info:JSON.stringify(s),isgenera:a.isgenera,isheader:a.isheader,iscodice:a.iscodice})}async barrecompila(t,e,a){const s=new CodiceBarra;await s.compila(t,e);for(const t in s.barre){a("barcodes",{cod:t,des:"",info:JSON.stringify(s.barre[t])})}return s}async tojson(t){let e;return a&&(e=await a("json",t)),e}async compila(t,e){if(e){for(const a of t.var)await this.varcompila(a,e);for(const a of t.mu)await this.macrocompila(a,e);if(e("infos",{cod:"info",des:t.cat,info:JSON.stringify({cat:t.cat,md:t.info})}),this.#a=void 0,this.#s=void 0,this.#i=void 0,this.#r=void 0,s){const t=await s("headers",this.cat,["_headers","_alias","_deriva","_typos"]);this.parseheaderfrominfo(t)}this.#a?e("infos",{cod:"headers",des:"",info:JSON.stringify(this.#a)}):logga("missing headers"),this.#s&&e("infos",{cod:"alias",des:"",info:JSON.stringify(this.#s)}),this.#i&&e("infos",{cod:"deriva",des:"",info:JSON.stringify(this.#i)}),this.#r&&e("infos",{cod:"typos",des:"tipologie",info:JSON.stringify(this.#r)})}}async checkvarianti(e,a){if(!e||!a?.length)return;e=checkname(e),await this.#n(e);const s=this.varelenco[e],i=[];for(let t of a){t=clean(t,!0);const a=`${e}/${t}`;this.varianti[a]||s&&s.includes(t)&&i.push(t)}if(i.length&&t){const a=await t(e,i);if(a&&a.length)for(const t of a){const{name:a,content:s}=t,i=new Variante(this);i.setheader(a,e),s&&await i.loadContentExtended(s),this.varianti[i.key]=i}}}async getheaderfromdb(e){const a=await s("header",this.cat,e,!this.#i);let{head:i,rows:r,macros:n,deriva:o,llvars:c}=a;for(const t of r)t.cod=clean(t.cod),t.alias=clean(t.alias),t.t=clean(t.t);if(!c){c=new Set;for(const t of r)if("p"==t.tipo);else{const e=t.alias?t.alias:t.cod;c.add(e)}c=[...c]}this.#i||(this.#i=o),await this.#n(this.cat),i.cod=clean(i.cod),i.rule=clean(i.rule),i.ruledef=i.ruledef||[];const l=[],u=this.varelenco[this.cat];for(const t of c)this.varianti[`${this.cat}/${t}`]||u&&u.includes(t)&&l.push(t);if(l.length&&t){const e=await t(this.cat,l);if(e&&e.length)for(const t of e){const{name:e,content:a}=t,s=new Variante(this);s.setheader(e,this.cat),a&&await s.loadContentExtended(a),this.varianti[s.key]=s}}return{head:i,rows:r,macros:n}}async getlinkedmacros(t,a){const getkey=t=>t.includes("/")?t:`${this.cat}/${t}`,s=[];let i;if(t&&(i=getkey(t),this.macro[i]||s.push(t)),a&&"string"==typeof a){const t=a.split(";");for(const e of t)i=getkey(e),this.macro[i]||s.push(e)}if(s&&s.length>0&&e){const t=await e(this.cat,s);if(t&&t.length>0)for(const e of t){this.checkscripts(e.content?.linkscript),delete e.content?.linkscript;const t=new Macro(this,e.name);for(const a in e.content){const s=e.content[a];t[a]=s}this.macro[t.key]=t}}}checkscripts(t){if(Array.isArray(t)&&t.length)for(let e of t)this.scripts[e.name]||(this.scripts[e.name]=e.value)}async setruleheader(t,e,a){const{name:s,cat:i}=checkmu(t,this.cat);a&&a.length&&(this.ruleset=toruleset(a));const r=`${i}/${s}`;if(!this.macro[r]){const e=await this.getheaderfromdb(s),{head:a,rows:o,macros:c}=e;await this.getlinkedmacros(a.rule,c);const l=new Macro(this,s);if(!a)return void n.add("Missing rule: "+t);if(a.rule){const t=this.macro[`${i}/${a.rule}`];if(t)for(const e in t)["cat","name","key"].includes(e)||(l[e]=t[e])}o&&o.length&&(l.head=o),this.macro[r]=l}this.ruleheader=r;const o=this.macro[r];return n.azzera(),await o.setparametri(e),o}getruleheader(){return this.macro[this.ruleheader]}async setvariante(t,e){return await impostavariante(this,null,t,e)}async valuta(t){let e;return"string"==typeof t&&(t=muClean(muClComments(t,this.righevuote))),Array.isArray(t)&&(logga("m1",t),e=await muEval(this,null,t)),e}setinfos(t){t&&(this.#a=t.headers,this.#s=t.alias,this.#i=void 0,this.#r=t.typos)}async splitteroggetti(t){let e=await this.getvariante(t),a=[];return e?.rows&&Object.values(e.rows).forEach((t=>{a.push({tipo:t.v[2]||"",cod:t.v[0]||"",des:t.v[1]||"",macro:t.v[4]||"",sps:parseInt(t.v[3])||0,isshape:parseInt(t.v[5])})})),a.length||a.push({tipo:"avob",cod:"__",des:"Vuoto",macro:"",sps:0}),a}}function toJson(t){return JSON.stringify(t,null,2)}function clamp(t,e=-1/0,a=1/0){return(t=Number(t)||0)<e&&(t=e),t>a&&(t=a),t}function gettipocolonna(t){return k.find((e=>e.cod==t))?.des||k[0].des}function gettipofolder(t){return k.find((e=>e.cod==t))?.folder||""}function newVariabile(){return new Variabile}async function newVariante(t,e,a){const s=new Variante(a);return await s.load(t,e),s}function newAmbiente(t,e=100){return new Ambiente(t,e)}function newMacro(t,e){return new Macro(t,e)}function sanitize(t,e=!1,a=!1){if(!t)return"";let s=String(t).trim().replace(a?/[^a-zA-Z0-9-+_\.]/g:/[^a-zA-Z0-9-+_]/g,"_");return e?s.toLowerCase():s}function muValuta(t,e,a){a&&t.azzera();return t.valuta(e)}function muInit(t,e,a,s,i,r,n){const o=new Ambiente(t);return setcallbacks(e,a,s,i,r,n),o}function muCompileScript(t){return t&&"object"==typeof t?t:t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")?JSON.stringify(t):muClean(muClComments(t))}async function muEvalScript(t,e,a,s=!0){if(e=muCompileScript(e),s&&t.azzera(),a)for(const e of a){const{v:a,o:s}=getcouple(e);t.vari.add(a,s)}return{output:await muEval(t,null,e,{}),vari:t.vari.dictionary,errori:n}}Date.prototype.toInt||(Date.prototype.toInt=function(){const t=this;return t.getDate()+100*(t.getMonth()+1)+1e4*t.getFullYear()}),Date.prototype.toFloat||(Date.prototype.toFloat=function(){return Math.floor(1e4*this.getDate()+1e6*(this.getMonth()+1)+1e8*this.getFullYear()+100*this.getHours()+this.getMinutes()+.5)/1e4});const x={mus:{variants:{cod:"s",des:"s",alias:"s",info:"s",md:"s",__pk:"cod"},extras:{tipo:"s",cod:"s",info:"s",__pk:"tipo, cod"},macros:{cod:"s",des:"s",info:"s",md:"s",def:"s",isgenera:"i",iscodice:"i",isheader:"i",__pk:"cod"},infos:{cod:"s",des:"s",info:"s",__pk:"cod"},barcodes:{cod:"s",des:"s",info:"s",__pk:"cod"}}};export{Ambiente,CodiceBarra,Macro,Variabile,Variante,checkmu,checkname,clamp,clean,dammivariante,n as errori,fromjson,getOggetto,getcolonne,getcouple,geterrdes,getheaddims,gettipocolonna,gettipofolder,hash,impostavariante,intvaluta,isJsonStr,isObject,muInit as jsTest,logga,muCalc,muClComments,muClean,muCompileScript,muEval,muEvalScript,muGenerate,muInit,muLimits,muParsecode,muValuta,x as mustr,newAmbiente,newMacro,newVariabile,newVariante,noquote,parselimitifromdb,parselimitifromrule,parsevar,poppars,pushpars,quote,round,sanitize,seedarray,seeder,setOggetto,sortrows,testsync,k as tipicolonna,w as tipifree,y as tipiheader,tk,toCadPars,toJson,tonum,xdt};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "markuno_lib",
3
- "version": "1.2.111",
3
+ "version": "1.2.112",
4
4
  "description": "Croswil Markuno Language Lib",
5
5
  "author": "Croswil SRL",
6
6
  "license": "SEE LICENSE IN LICENSE.txt",
@@ -20,6 +20,7 @@ export class Ambiente {
20
20
  ruleset: {};
21
21
  ruleheader: string;
22
22
  macro: {};
23
+ sqcache: {};
23
24
  varianti: {};
24
25
  varelenco: {};
25
26
  macroelenco: {};