markuno_lib 1.2.92 → 1.2.94

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")}},toNum=(t,e=-1)=>{const a="string"==typeof t?parseFloat(t)||0:t;if(e<0)return 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 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(this.resetfilter(),!t)return;t=muClComments(t.toLowerCase());const e=[];for(const a of t){const t=/^#([iex])(\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("x"==t.ex){const e=(a.v[t.col]+"").toLowerCase().split(/[,;]/).map((t=>t.trim()));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(t&&t.length)return this.limitfiltra(t);if(!this.limits||!this.amb)return this.resetfilter();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.resetfilter();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)}e.annulla=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 await 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 M of I){const z=(M.split("=")[0]||"").trim().toLowerCase();z&&(L[z]=i.dictionary[z])}}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 Mt=await intvaluta(t,e,h.contenuto);logga(Mt),n.add(Mt)}break;default:{let zt;if(h.contenuto.startsWith("!")){zt=await intvaluta(t,e,h.contenuto);let jt="";const Wt=/^!(.\w+)[\s;,]\s*(.+)?$/gim.exec(zt);if(Wt)if(Wt[1].startsWith("."))await getcbfunc(zt,zt.slice(1),[],i,t),jt="";else{const Nt=Wt[1].toLowerCase(),Tt=getcolonne(Wt[2]||"");jt=await getcbfunc(zt,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}):(zt=await intvaluta(t,e,h.contenuto),outpush(r,zt))}}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 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}}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};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,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")}},toNum=(t,e=-1)=>{const a="string"==typeof t?parseFloat(t)||0:t;if(e<0)return 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 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=/^#([iex])(\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("x"==t.ex){const e=(a.v[t.col]+"").toLowerCase().split(/[,;]/).map((t=>t.trim()));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)}e.annulla=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 await 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 M of I){const z=(M.split("=")[0]||"").trim().toLowerCase();z&&(L[z]=i.dictionary[z])}}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 Mt=await intvaluta(t,e,h.contenuto);logga(Mt),n.add(Mt)}break;default:{let zt;if(h.contenuto.startsWith("!")){zt=await intvaluta(t,e,h.contenuto);let jt="";const Wt=/^!(.\w+)[\s;,]\s*(.+)?$/gim.exec(zt);if(Wt)if(Wt[1].startsWith("."))await getcbfunc(zt,zt.slice(1),[],i,t),jt="";else{const Nt=Wt[1].toLowerCase(),Tt=getcolonne(Wt[2]||"");jt=await getcbfunc(zt,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}):(zt=await intvaluta(t,e,h.contenuto),outpush(r,zt))}}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 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}}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};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,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.92",
3
+ "version": "1.2.94",
4
4
  "description": "Croswil Markuno Language Lib",
5
5
  "author": "Croswil SRL",
6
6
  "license": "SEE LICENSE IN LICENSE.txt",
@@ -928,6 +928,7 @@ export function estrusopat(t: any, i: any, n: any, r: any, o: any, s: any, A: an
928
928
  export function evalcustomfunction(e: any, t: any, i: any, n: any): Promise<any>;
929
929
  export function evidenziaColli(t: any, i: any, n: any): Promise<void>;
930
930
  export function extractTextures(e: any, t: any): Promise<any[]>;
931
+ export function facesettile(e: any, t: any, i: any, n: any): void;
931
932
  export function get3dshape(t: any, i: any, n: any): any;
932
933
  export function getOggetto(e: any, t?: any[]): any;
933
934
  export function getalldb(t: any, i: any): {
@@ -195,7 +195,7 @@ export class Variante {
195
195
  resetfilter(): void;
196
196
  validkeys(): string[];
197
197
  limitfiltra(t: any): void;
198
- limita(t: any): void | {}[];
198
+ limita(t: any): {}[] | this;
199
199
  loadContentExtended(t: any): Promise<void>;
200
200
  todata(): {
201
201
  name: string;