croswil_markuno 2.1.78 → 2.1.80
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/mu-convcad.js +1 -1
- package/bin/mu-glb.js +1 -1
- package/bin/mu.js +1 -1
- package/package.json +1 -1
package/bin/mu-convcad.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{init as e,database as t}from"croswil_lib";import o from"fs";import r from"path";import i from"minimist";function s(e,t=!1){e=String(e||"");const o=/^(\d*)\.\.(\d*)$/.exec(e);if(o){let e=parseInt(o[1])||0,t=parseInt(o[2])||0;const r=[];for(let o=e;o<=t;o++)r.push(o+"");return r}if(!/["({[]/.test(e))return e.split(/[,;]/).map((e=>e.trim()));const r=[];let i="",s=0,a=!1;for(let l=0;l<e.length;l++){const t=e[l];if(0===s&&'"'===t&&(0!==l&&"\\"===e[l-1]||(a=!a)),a||("("===t||"["===t||"{"===t?s++:")"!==t&&"]"!==t&&"}"!==t||(s=Math.max(0,s-1))),","!==t&&";"!==t||0!==s||a)i+=t;else{const e=i.trim();r.push(e),i=""}}const n=i.trim();return n&&r.push(n),r.map((e=>(e=e.trim(),!t&&(e.startsWith('"')&&e.endsWith('"')||e.startsWith("(")&&e.endsWith(")"))?e.slice(1,-1):e)))}function a(e,t){const o=(e=>e.replace(/("(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*')|\/\*[\s\S]*?\*\//g,((e,t)=>t||"")))(e).split(/\r?\n/),r=[];let i="";for(const s of o){let e=s;if(/(^|[^:])\/\/.*/.test(e)&&(e=e.replace(/(^|[^:])\/\/.*/,((e,t)=>t.trim()))),e=e.trim(),0!==e.length)if(i.length>0&&(e=i+" "+e,i=""),e.endsWith("\\")){e=e.slice(0,-1);const t=e.lastIndexOf("//");-1!==t&&(e=e.slice(0,t).trim()),i=e}else r.push(e)}return r}new class{constructor(){this.azzera()}azzera(){this.err=[]}add(e,t){this.err.push({msg:e,row:t})}get(){return this.err}get length(){return this.err.length}toString(){const e=[];for(const t of this.err){const o="object"==typeof t.msg?JSON.stringify(t.msg):t.msg||"";e.push(`${t.row?t.row+":":""}${o}`)}return e.join("\n")}};const n=/^\s*\{(:)?(var|deriva|valid|formula|header|genera|g|v|f|h)(\s.*)?\}/i;function l(e,t){let o=!1;const r=[];for(let i=e;i<t.length;i++){const e=t[i].trim();let a=e.split("//")[0].trim();if(e.startsWith("/*"))o=!0;else if(o&&e.endsWith("*/"))o=!1;else if(!o){if(n.test(e))return{fl:!0,i2:i-1,cols:r};if(a.endsWith("\\"))return{fl:!1};if(e.startsWith(":h ")&&(a=a.substr(3).trim()),!a.startsWith(":")){const e=s(a);for(let t=0;t<e.length;t++){let o=e[t].length;e[t].includes(",")&&(o+=2),(!r[t]||r[t]<o)&&(r[t]=o)}}}}return{fl:!0,i2:t.length-1,cols:r}}Date.prototype.toInt||(Date.prototype.toInt=function(){const e=this;return e.getDate()+100*(e.getMonth()+1)+1e4*e.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{Clear:c,Reset:d,Bold:p,Reverse:h,Red:f,Green:u,Yellow:m,Blue:v,Magenta:g,Cyan:$,White:b}=e();var w={FOLDERBASE:"./",DBWORK:"./data/app.db",FOLDERCAT:"./data/mu",FOLDEROUT:"./out",CAT:"cat"};const C=".lasts.markuno";o.existsSync(C)&&(w=JSON.parse(o.readFileSync(C))),w.FOLDERCAD||(w.FOLDERCAD="./cat3cad");var L=i(process.argv);console.log(`----------------------------------------------------------------------------------------\n${p}${$}${p}mu-convcad:${d} Convert data from 3CAD (c) Croswil 2024 v. ${m}2.1.84${d}\n----------------------------------------------------------------------------------------`);const F=`uso: ${p} mu-convcad <nomecatalogo> [opzioni]\n${u}Opzioni:${d}\n ${b} -h, --help${d}${u} mostra l'help\n ${b} -i, --init <folder>${d}${u} cartella di lavoro (default='${w.FOLDERCAT}' ) \n ${b} -c, --cad <folder>${d}${u} cartella cad (default='${w.FOLDERCAD}' ) \n ${b} -r, --reset${d}${u} Cancella tutti i dati precedenti\n ${b} -t, --tipologie${d}${u} Tipologie e Macro tip\n ${b} -a, --abilita${d}${u} Processa abilitazioni\n`;w.FOLDERCAT=L.i||L.init||w.FOLDERCAT,w.FOLDERCAD=L.c||L.cad||w.FOLDERCAD;const S=L._[2]||void 0;(L.h||L.help||!S)&&(console.log(F),process.exit(0)),w.CAT=S;const y=r.join(w.FOLDERCAT,S),D=r.join(w.FOLDERCAD,S);var E=r.join(D,`${S}.ddb`);o.existsSync(E)||(console.log("manca il database di origine: "+S),process.exit(1)),o.writeFileSync(C,JSON.stringify(w,null,2));const j=[],O=e=>j.push(e),A="select cod cod,des des,memo info from speciali where cat='pro'";function W(e){var t=[];for(var o of e)!o.startsWith('"')&&o.includes(",")&&(o=`"${o}"`),t.push(o);return t.join(",")}function R(e,t){var o=(e=e.replaceAll("\t",",").replaceAll("\r","").replace(/\#vb/gim,"/* VB !not supported").replace(/#endvb/gim,"*/").replace(/\#msg /gim,"!msg ")).split("\n"),r=[],i=!1;return o.forEach(((e,o)=>{e.startsWith("/*")&&(i=!0),i?r.push(e):/^\s*$/.test(e)||(t?(e=e.replace(/\s*\#m\s+(\w+)/im,((e,t)=>"#m ++"+t)),r.push(e)):(/^\s*\d+/.test(e)?e="!t "+e.trim():/^\s*\!parametri/i.test(e)?e=e.replace(/\!parametri /gi,":p "):/^\s*\w+/.test(e)&&(e="#m +"+e.replace(/\s*\_*/,"")),r.push(e))),i&&e.trim().endsWith("*/")&&(i=!1)})),function(e){const t=e.split("\n"),o=[];let r,i=0,a=!1,c=!1,d=[];if(r){const e=l(0,t);r=e.fl,r&&(d=e.cols)}for(let p=0;p<t.length;p++){const e=t[p];let h=e.trim();const f=h.split("//");let u=f[0].trim();f.splice(0,1);const m=f.length?` // ${f.join("//").trim()} `:"";if(h.startsWith("/*"))a=!0,o.push(h);else if(a&&h.endsWith("*/"))a=!1,o.push(h);else if(a)o.push(e);else{const e=n.exec(h);if(e){if(o.push(h),i=e[1]?0:1,/^\s*\{(var|deriva|header|v|h)(\s.*)?\}/i.test(h)){const e=l(p+1,t);r=e.fl,r&&(d=e.cols)}else r=!1;c=!1;continue}if(r)if(u.startsWith(":")&&!u.startsWith(":h ")||!u)o.push(h);else{let e=" ";u.startsWith(":h ")&&(u=u.substr(3).trim(),e=":h ");const t=s(u);for(let o=0;o<t.length;o++)t[o].includes(",")&&(t[o]=`"${t[o]}"`),t[o]=t[o].padEnd(d[o]," ");o.push(`${e}${t.join(" , ")} ${m}`)}else{const e=" ".repeat(i>=0?i:0);if(c)o.push(`${e} ${h}`);else{let t="";h.startsWith("#")&&(t=h.substring(1).split(" ")[0].toUpperCase(),h="#"+t+h.substring(t.length+1)),["IF","IFDEF","IFNDEF"].includes(t)?h.indexOf("#",2)<0?(o.push(`${e}${h}`),i++):(h=h.replace(/#([\w]+)/g,((e,t)=>"#"+t.toUpperCase())),o.push(`${e}${h}`)):["FOR","SELECT","FORVAR","VARIANTE","DO"].includes(t)?(o.push(`${e}${h}`),i++):["ELSEIF","ELSE","ELSEIFDEF","ELSEIFNDEF","CASE","CASES","DEFAULT"].includes(t)&&i>0?o.push(" ".repeat(i>0?i-1:0)+h):["ENDIF","ENDSELECT","LOOP","ENDFOR"].includes(t)?(o.push(" ".repeat(i>0?i-1:0)+h),i--,i<0&&(i=0)):h.startsWith("_ ")||h.startsWith(":")?o.push(h):o.push(e+h)}c=u.endsWith("\\")}}}return o.join("\n")}(r.join("\n"))}const x={"-":"sep",T:"var",M:"num",S:"str",C:"yn",L:"hidden",Z:"ny"};function z(e){var t=[];if(!e)return"";for(var o in e)"cod"!=o&&t.push(`${o}=${e[o]}`);return`${e.cod} ${t.join(",")}`}function T(e){var t=e.split(",");if(t[1]||t[2]){var o={};return o.cod=(t[2]||t[1]).trim().toLowerCase(),t[2]&&(o.alias=t[2].trim().toLowerCase()),t[3]&&(o.valid=t[3].trim().toLowerCase()),t[4]&&(o.des=t[4].trim()),t[5]&&(o.visible=t[5].trim().toLowerCase()),x[t[0]]?o.tipo=x[t[0]]:"D"==t[0]?o.tipo="sp."+t[6]:o.tipo=t[0].trim().toUpperCase(),o}}L.r||L.reset?console.log("-> crea catalogo e copia"):console.log("-> aggiorna catalogo");var I=`${w.FOLDERCAT}/mu_${S}.db`;(L.r||L.reset)&&(o.existsSync(y)&&o.rmSync(y,{recursive:!0}),o.existsSync(I)&&o.unlinkSync(I)),o.existsSync(y)||o.mkdirSync(y,{recursive:!0}),o.copyFileSync(E,y+"/"+S+".db");var _=t.db(E),k=(new Date).valueOf(),M=[],N=_.all("select cod cod,des des ,codmet alias,obbl obbligo, memo info from codvar ");for(var B of(console.log("-> varianti",N.length),N)){for(var U=B.info.split(""),J=[],V=[],Y=1;Y<U.length&&U[Y];Y+=2)V.push(U[Y]);if(J.push(`:des ${B.des.trim().toLowerCase()}`),B.obbl&&J.push(":obbligo"),B.alias)M.push(`${B.cod.trim().toLowerCase()} , ${B.alias.trim().toLowerCase()}`);else{J.push(""),J.push(":h "+W(V));var G=_.all("select codopz cod,des des,memo info from varianti where codvar=? order by ordinamento,codopz",B.cod);for(var P of G)V=W([P.cod.trim().toLowerCase(),P.des.trim().toLowerCase(),...P.info.trim().toLowerCase().split("\t")]),J.push(" "+V);B.cod=B.cod.trim().toLowerCase(),O("var: "+B.cod),o.writeFileSync(`${y}/${B.cod}.var`,J.join("\n"))}}for(var B of(N=_.all("select cod cod,des des,fldef defs from modelli order by cod"),(J=[]).push(":des Modelli\n\n:h Cod, Descrizione\n"),N))J.push(" "+W([B.cod.trim().toLowerCase(),B.des]));o.writeFileSync(`${y}/modelli.var`,J.join("\n")),M=["// Alias Varianti\n\n{v __aliasvar}\n:h variante, alias",...M.sort()],o.writeFileSync(`${y}/_alias.inc`,M.join("\n")),console.log("-> gruppi.ini");var H=r.join(D,"gruppi.ini");if(o.existsSync(H)){N=a(re=o.readFileSync(H).toString().replaceAll("�","'"));var K={},Z=[];for(var B of N)(de=/^\s*\[(\w+)\]/i.exec(B))?(Z=[],K[de[1].trim().toLowerCase()]=Z):(he=T(B))&&Z.push(z(he))}var q=Object.keys(K).sort();for(var Q of((J=[]).push("// includes headers"),q))J.push(""),J.push(`{h ${Q}}`),J.push(...K[Q]);if(o.writeFileSync(r.join(y,"_headers.inc"),J.join("\n")),console.log("-> deriva"),(B=_.get(`${A} and cod='deriva'`)).cod&&B.info){B.info=B.info.trim().toLowerCase().replaceAll("","\n");var X=B.info.split("\n").map((e=>e.trim())).sort();o.writeFileSync(r.join(y,"_deriva.inc"),`// derivazione varianti \n{v deriva}\n:des deriva delle varianti\n :h var=opz,-> var=opz\n \n${X.join("\n")}`)}for(var B of(N=_.all(`${A} and cod like ?`,">>%"),console.log("-> macro",N.length),N)){O("mac "+(ge=(ge=B.cod.substr(2).trim().toLowerCase()).replace(/^_*/,"")));var ee=R(B.info.toLowerCase());J=`// ${B.des}\n${ee} \n `,o.writeFileSync(r.join(y,`+${ge}.mu`),J)}var te=o.readdirSync(D);te=te.filter((e=>e.toLowerCase().endsWith(".erg")));var oe=0;for(var N of(console.log("-> regole",te.length),te)){var re=o.readFileSync(r.join(D,N)).toString().replaceAll("\r",""),ie=r.extname(N),se=r.basename(N,ie).trim().toLowerCase();if(!se.includes(".")&&"gene"!=se){var ae={cod:se,des:"",codice:[],header:[],formule:{}},ne=[],le=(J=re.split("\n"),-1);for(var ce of J){var de;if(de=/^\s*\[(\w+)\]/.exec(ce)){var pe=de[1].toLowerCase();switch(pe){case"info":le=0;break;case"gene":le=1;break;case"grafica":le=2;break;default:ne=[],ae.formule[pe]=ne,le=3}}else 0==le?/^\s*descrizione\s*=/i.test(ce)&&(ae.des=ce.split("=")[1].trim().toLowerCase()):1==le?ce.trim()&&ae.header.push(ce):2==le?ae.codice.push(ce):ne.push(ce)}if(ae.tm=a(ae.codice.join("\n")),ae.tm.length){if(J=[`// rule ${ae.cod}\n :des ${ae.des||ae.cod}\n `],ae.header.length){for(var B of(J.push("{header}"),ae.header)){var he;(he=T(B))&&("G"==he.tipo?(delete he.tipo,J.push(`:g ${z(he)}`)):he.tipo.length>1&&J.push(z(he)))}J.push("{:header}")}for(var fe in ae.formule)X=R((ue=ae.formule[fe]).join("\n")),J.push(`\n{f ${fe}}\n${X}\n{:f}`);var ue=ae.codice.join("\n");J.push(R(ue)),o.writeFileSync(r.join(y,se+".mu"),J.join("\n")),O(`reg ${++oe}: ${ae.cod} - ${ae.des}`)}}}if(L.t||L.tipologie){N=(B=_.get(`${A} and cod=?`,"tipologie")).info.split("").sort(),console.log("-> tipologie",N.length);var me={};for(var ve of N)(ce=(P=ve.trim().toLowerCase()).split(",")[0].trim())&&(ce.includes(".")?me[(B=ce.split("."))[0]]?me[B[0]][B[1]]=P:console.log("errore tipo",ce):(me[ce]={v:P},(B=_.get(`${A} and cod=?`,`db_${ce}`)).info&&(me[ce].db=R(B.info.trim().toLowerCase().replaceAll("","\n"),!0)),(B=_.get(`${A} and cod=?`,`ll_${ce}`)).info&&(me[ce].list=R(B.info.trim().toLowerCase().replaceAll("","\n"),!0))));for(var B of(o.writeFileSync(y+"/typos.json",JSON.stringify(me,null,2)),N=_.all(`${A} and cod like ?`,"M>%"),console.log("-> macro tip",N.length),N)){var ge;O("macdb "+(ge=B.cod.substr(2).trim().toLowerCase())),ee=R(B.info.toLowerCase(),!0),J=`// ${B.des}\n${ee} \n `,o.writeFileSync(r.join(y,`++${ge}.mu`),J)}}if(L.a||L.abilita){function Oe(e){for(var t=[],o="";;){var r=e.lastIndexOf(",",100);if(e.length<100||r<0){t.push(o+e),o.length&&t.push("");break}t.push(o+e.substr(0,r)+", \\"),o=" ",e=e.substr(r+1)}return t.join("\n")}function Ae(e){var t=e.toLowerCase().split(";"),o=e=>e?[...new Set(e.split("*").sort().filter((e=>e.trim())))].join(","):"";return{abilit:o(t[0]),scons:o(t[1]),obs:o(t[2])}}console.log("-> abilitazioni"),q={};var $e=(N=_.all("select var var,abilit abilit,codart codart from valartopz order by var,abilit")).length;for(var B of N)if(B.var&&B.abilit&&B.codart){var be=B.var.trim().toLowerCase(),{abilit:we,scons:Ce,obs:Le}=Ae(B.abilit),Fe=B.codart.trim().toLowerCase();q[be]||(q[be]={}),(De=q[be])[we]||(De[we]={scons:Ce,obs:Le,neutri:[],art:[],mod:[]}),De[we].neutri.push(Fe)}var Se=(N=_.all("select var var,abilit abilit,codmod codart from valmodopz order by var,abilit")).length;for(var B of N)if(B.var&&B.abilit&&B.codart){be=B.var.trim().toLowerCase();var{abilit:we,scons:Ce,obs:Le}=Ae(B.abilit);Fe=B.codart.trim().toLowerCase(),q[be]||(q[be]={}),(De=q[be])[we]||(De[we]={scons:Ce,obs:Le,neutri:[],art:[],mod:[]}),De[we].mod.push(Fe)}var ye=(N=_.all("select var var,abilit abilit,cod codart from valmodartopz order by var,abilit")).length;for(var B of N)if(B.var&&B.abilit&&B.codart){be=B.var.trim().toLowerCase();var De,{abilit:we,scons:Ce,obs:Le}=Ae(B.abilit);Fe=B.codart.trim().toLowerCase(),q[be]||(q[be]={}),(De=q[be])[we]||(De[we]={scons:Ce,obs:Le,neutri:[],art:[],mod:[]}),De[we].art.push(Fe)}for(var be in console.log("-> ab trasforma",$e,Se,ye),q)if(o.existsSync(r.join(y,be+".var"))){J=[];var Ee=q[be];for(var je in Ee)X=Ee[je],J.push("\n\n{limit}"),X.neutri.length&&J.push(Oe(":neutri "+X.neutri.join(","))),X.art.length&&J.push(Oe(":art "+X.art.join(","))),X.mod.length&&J.push(Oe(":mod "+X.mod.join(","))),X.obs&&J.push(Oe(":obs "+X.obs)),X.scons&&J.push(Oe(":scons "+X.obs)),J.push(Oe(":opz "+je));o.writeFileSync(r.join(y,be+".var.txt"),J.join("\n"))}}k=(new Date).valueOf()-k,console.log("Tempo: ",k+"ms"),_.chiudi();
|
|
2
|
+
import{init as e,database as t}from"croswil_lib";import o from"fs";import r from"path";import i from"minimist";function s(e,t=!1){e=String(e||"");const o=/^(\d*)\.\.(\d*)$/.exec(e);if(o){let e=parseInt(o[1])||0,t=parseInt(o[2])||0;const r=[];for(let o=e;o<=t;o++)r.push(o+"");return r}if(!/["({[]/.test(e))return e.split(/[,;]/).map((e=>e.trim()));const r=[];let i="",s=0,a=!1;for(let l=0;l<e.length;l++){const t=e[l];if(0===s&&'"'===t&&(0!==l&&"\\"===e[l-1]||(a=!a)),a||("("===t||"["===t||"{"===t?s++:")"!==t&&"]"!==t&&"}"!==t||(s=Math.max(0,s-1))),","!==t&&";"!==t||0!==s||a)i+=t;else{const e=i.trim();r.push(e),i=""}}const n=i.trim();return n&&r.push(n),r.map((e=>(e=e.trim(),!t&&(e.startsWith('"')&&e.endsWith('"')||e.startsWith("(")&&e.endsWith(")"))?e.slice(1,-1):e)))}function a(e,t){const o=(e=>e.replace(/("(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*')|\/\*[\s\S]*?\*\//g,((e,t)=>t||"")))(e).split(/\r?\n/),r=[];let i="";for(const s of o){let e=s;if(/(^|[^:])\/\/.*/.test(e)&&(e=e.replace(/(^|[^:])\/\/.*/,((e,t)=>t.trim()))),e=e.trim(),0!==e.length)if(i.length>0&&(e=i+" "+e,i=""),e.endsWith("\\")){e=e.slice(0,-1);const t=e.lastIndexOf("//");-1!==t&&(e=e.slice(0,t).trim()),i=e}else r.push(e)}return r}new class{constructor(){this.azzera()}azzera(){this.err=[]}add(e,t){this.err.push({msg:e,row:t})}get(){return this.err}get length(){return this.err.length}toString(){const e=[];for(const t of this.err){const o="object"==typeof t.msg?JSON.stringify(t.msg):t.msg||"";e.push(`${t.row?t.row+":":""}${o}`)}return e.join("\n")}};const n=/^\s*\{(:)?(var|deriva|valid|formula|header|genera|g|v|f|h)(\s.*)?\}/i;function l(e,t){let o=!1;const r=[];for(let i=e;i<t.length;i++){const e=t[i].trim();let a=e.split("//")[0].trim();if(e.startsWith("/*"))o=!0;else if(o&&e.endsWith("*/"))o=!1;else if(!o){if(n.test(e))return{fl:!0,i2:i-1,cols:r};if(a.endsWith("\\"))return{fl:!1};if(e.startsWith(":h ")&&(a=a.substr(3).trim()),!a.startsWith(":")){const e=s(a);for(let t=0;t<e.length;t++){let o=e[t].length;e[t].includes(",")&&(o+=2),(!r[t]||r[t]<o)&&(r[t]=o)}}}}return{fl:!0,i2:t.length-1,cols:r}}Date.prototype.toInt||(Date.prototype.toInt=function(){const e=this;return e.getDate()+100*(e.getMonth()+1)+1e4*e.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{Clear:c,Reset:d,Bold:p,Reverse:h,Red:f,Green:u,Yellow:m,Blue:v,Magenta:g,Cyan:$,White:b}=e();var w={FOLDERBASE:"./",DBWORK:"./data/app.db",FOLDERCAT:"./data/mu",FOLDEROUT:"./out",CAT:"cat"};const C=".lasts.markuno";o.existsSync(C)&&(w=JSON.parse(o.readFileSync(C))),w.FOLDERCAD||(w.FOLDERCAD="./cat3cad");var L=i(process.argv);console.log(`----------------------------------------------------------------------------------------\n${p}${$}${p}mu-convcad:${d} Convert data from 3CAD (c) Croswil 2024 v. ${m}2.1.85${d}\n----------------------------------------------------------------------------------------`);const F=`uso: ${p} mu-convcad <nomecatalogo> [opzioni]\n${u}Opzioni:${d}\n ${b} -h, --help${d}${u} mostra l'help\n ${b} -i, --init <folder>${d}${u} cartella di lavoro (default='${w.FOLDERCAT}' ) \n ${b} -c, --cad <folder>${d}${u} cartella cad (default='${w.FOLDERCAD}' ) \n ${b} -r, --reset${d}${u} Cancella tutti i dati precedenti\n ${b} -t, --tipologie${d}${u} Tipologie e Macro tip\n ${b} -a, --abilita${d}${u} Processa abilitazioni\n`;w.FOLDERCAT=L.i||L.init||w.FOLDERCAT,w.FOLDERCAD=L.c||L.cad||w.FOLDERCAD;const S=L._[2]||void 0;(L.h||L.help||!S)&&(console.log(F),process.exit(0)),w.CAT=S;const y=r.join(w.FOLDERCAT,S),D=r.join(w.FOLDERCAD,S);var E=r.join(D,`${S}.ddb`);o.existsSync(E)||(console.log("manca il database di origine: "+S),process.exit(1)),o.writeFileSync(C,JSON.stringify(w,null,2));const j=[],O=e=>j.push(e),A="select cod cod,des des,memo info from speciali where cat='pro'";function W(e){var t=[];for(var o of e)!o.startsWith('"')&&o.includes(",")&&(o=`"${o}"`),t.push(o);return t.join(",")}function R(e,t){var o=(e=e.replaceAll("\t",",").replaceAll("\r","").replace(/\#vb/gim,"/* VB !not supported").replace(/#endvb/gim,"*/").replace(/\#msg /gim,"!msg ")).split("\n"),r=[],i=!1;return o.forEach(((e,o)=>{e.startsWith("/*")&&(i=!0),i?r.push(e):/^\s*$/.test(e)||(t?(e=e.replace(/\s*\#m\s+(\w+)/im,((e,t)=>"#m ++"+t)),r.push(e)):(/^\s*\d+/.test(e)?e="!t "+e.trim():/^\s*\!parametri/i.test(e)?e=e.replace(/\!parametri /gi,":p "):/^\s*\w+/.test(e)&&(e="#m +"+e.replace(/\s*\_*/,"")),r.push(e))),i&&e.trim().endsWith("*/")&&(i=!1)})),function(e){const t=e.split("\n"),o=[];let r,i=0,a=!1,c=!1,d=[];if(r){const e=l(0,t);r=e.fl,r&&(d=e.cols)}for(let p=0;p<t.length;p++){const e=t[p];let h=e.trim();const f=h.split("//");let u=f[0].trim();f.splice(0,1);const m=f.length?` // ${f.join("//").trim()} `:"";if(h.startsWith("/*"))a=!0,o.push(h);else if(a&&h.endsWith("*/"))a=!1,o.push(h);else if(a)o.push(e);else{const e=n.exec(h);if(e){if(o.push(h),i=e[1]?0:1,/^\s*\{(var|deriva|header|v|h)(\s.*)?\}/i.test(h)){const e=l(p+1,t);r=e.fl,r&&(d=e.cols)}else r=!1;c=!1;continue}if(r)if(u.startsWith(":")&&!u.startsWith(":h ")||!u)o.push(h);else{let e=" ";u.startsWith(":h ")&&(u=u.substr(3).trim(),e=":h ");const t=s(u);for(let o=0;o<t.length;o++)t[o].includes(",")&&(t[o]=`"${t[o]}"`),t[o]=t[o].padEnd(d[o]," ");o.push(`${e}${t.join(" , ")} ${m}`)}else{const e=" ".repeat(i>=0?i:0);if(c)o.push(`${e} ${h}`);else{let t="";h.startsWith("#")&&(t=h.substring(1).split(" ")[0].toUpperCase(),h="#"+t+h.substring(t.length+1)),["IF","IFDEF","IFNDEF"].includes(t)?h.indexOf("#",2)<0?(o.push(`${e}${h}`),i++):(h=h.replace(/#([\w]+)/g,((e,t)=>"#"+t.toUpperCase())),o.push(`${e}${h}`)):["FOR","SELECT","FORVAR","VARIANTE","DO"].includes(t)?(o.push(`${e}${h}`),i++):["ELSEIF","ELSE","ELSEIFDEF","ELSEIFNDEF","CASE","CASES","DEFAULT"].includes(t)&&i>0?o.push(" ".repeat(i>0?i-1:0)+h):["ENDIF","ENDSELECT","LOOP","ENDFOR"].includes(t)?(o.push(" ".repeat(i>0?i-1:0)+h),i--,i<0&&(i=0)):h.startsWith("_ ")||h.startsWith(":")?o.push(h):o.push(e+h)}c=u.endsWith("\\")}}}return o.join("\n")}(r.join("\n"))}const x={"-":"sep",T:"var",M:"num",S:"str",C:"yn",L:"hidden",Z:"ny"};function z(e){var t=[];if(!e)return"";for(var o in e)"cod"!=o&&t.push(`${o}=${e[o]}`);return`${e.cod} ${t.join(",")}`}function T(e){var t=e.split(",");if(t[1]||t[2]){var o={};return o.cod=(t[2]||t[1]).trim().toLowerCase(),t[2]&&(o.alias=t[2].trim().toLowerCase()),t[3]&&(o.valid=t[3].trim().toLowerCase()),t[4]&&(o.des=t[4].trim()),t[5]&&(o.visible=t[5].trim().toLowerCase()),x[t[0]]?o.tipo=x[t[0]]:"D"==t[0]?o.tipo="sp."+t[6]:o.tipo=t[0].trim().toUpperCase(),o}}L.r||L.reset?console.log("-> crea catalogo e copia"):console.log("-> aggiorna catalogo");var I=`${w.FOLDERCAT}/mu_${S}.db`;(L.r||L.reset)&&(o.existsSync(y)&&o.rmSync(y,{recursive:!0}),o.existsSync(I)&&o.unlinkSync(I)),o.existsSync(y)||o.mkdirSync(y,{recursive:!0}),o.copyFileSync(E,y+"/"+S+".db");var _=t.db(E),k=(new Date).valueOf(),M=[],N=_.all("select cod cod,des des ,codmet alias,obbl obbligo, memo info from codvar ");for(var B of(console.log("-> varianti",N.length),N)){for(var U=B.info.split(""),J=[],V=[],Y=1;Y<U.length&&U[Y];Y+=2)V.push(U[Y]);if(J.push(`:des ${B.des.trim().toLowerCase()}`),B.obbl&&J.push(":obbligo"),B.alias)M.push(`${B.cod.trim().toLowerCase()} , ${B.alias.trim().toLowerCase()}`);else{J.push(""),J.push(":h "+W(V));var G=_.all("select codopz cod,des des,memo info from varianti where codvar=? order by ordinamento,codopz",B.cod);for(var P of G)V=W([P.cod.trim().toLowerCase(),P.des.trim().toLowerCase(),...P.info.trim().toLowerCase().split("\t")]),J.push(" "+V);B.cod=B.cod.trim().toLowerCase(),O("var: "+B.cod),o.writeFileSync(`${y}/${B.cod}.var`,J.join("\n"))}}for(var B of(N=_.all("select cod cod,des des,fldef defs from modelli order by cod"),(J=[]).push(":des Modelli\n\n:h Cod, Descrizione\n"),N))J.push(" "+W([B.cod.trim().toLowerCase(),B.des]));o.writeFileSync(`${y}/modelli.var`,J.join("\n")),M=["// Alias Varianti\n\n{v __aliasvar}\n:h variante, alias",...M.sort()],o.writeFileSync(`${y}/_alias.inc`,M.join("\n")),console.log("-> gruppi.ini");var H=r.join(D,"gruppi.ini");if(o.existsSync(H)){N=a(re=o.readFileSync(H).toString().replaceAll("�","'"));var K={},Z=[];for(var B of N)(de=/^\s*\[(\w+)\]/i.exec(B))?(Z=[],K[de[1].trim().toLowerCase()]=Z):(he=T(B))&&Z.push(z(he))}var q=Object.keys(K).sort();for(var Q of((J=[]).push("// includes headers"),q))J.push(""),J.push(`{h ${Q}}`),J.push(...K[Q]);if(o.writeFileSync(r.join(y,"_headers.inc"),J.join("\n")),console.log("-> deriva"),(B=_.get(`${A} and cod='deriva'`)).cod&&B.info){B.info=B.info.trim().toLowerCase().replaceAll("","\n");var X=B.info.split("\n").map((e=>e.trim())).sort();o.writeFileSync(r.join(y,"_deriva.inc"),`// derivazione varianti \n{v deriva}\n:des deriva delle varianti\n :h var=opz,-> var=opz\n \n${X.join("\n")}`)}for(var B of(N=_.all(`${A} and cod like ?`,">>%"),console.log("-> macro",N.length),N)){O("mac "+(ge=(ge=B.cod.substr(2).trim().toLowerCase()).replace(/^_*/,"")));var ee=R(B.info.toLowerCase());J=`// ${B.des}\n${ee} \n `,o.writeFileSync(r.join(y,`+${ge}.mu`),J)}var te=o.readdirSync(D);te=te.filter((e=>e.toLowerCase().endsWith(".erg")));var oe=0;for(var N of(console.log("-> regole",te.length),te)){var re=o.readFileSync(r.join(D,N)).toString().replaceAll("\r",""),ie=r.extname(N),se=r.basename(N,ie).trim().toLowerCase();if(!se.includes(".")&&"gene"!=se){var ae={cod:se,des:"",codice:[],header:[],formule:{}},ne=[],le=(J=re.split("\n"),-1);for(var ce of J){var de;if(de=/^\s*\[(\w+)\]/.exec(ce)){var pe=de[1].toLowerCase();switch(pe){case"info":le=0;break;case"gene":le=1;break;case"grafica":le=2;break;default:ne=[],ae.formule[pe]=ne,le=3}}else 0==le?/^\s*descrizione\s*=/i.test(ce)&&(ae.des=ce.split("=")[1].trim().toLowerCase()):1==le?ce.trim()&&ae.header.push(ce):2==le?ae.codice.push(ce):ne.push(ce)}if(ae.tm=a(ae.codice.join("\n")),ae.tm.length){if(J=[`// rule ${ae.cod}\n :des ${ae.des||ae.cod}\n `],ae.header.length){for(var B of(J.push("{header}"),ae.header)){var he;(he=T(B))&&("G"==he.tipo?(delete he.tipo,J.push(`:g ${z(he)}`)):he.tipo.length>1&&J.push(z(he)))}J.push("{:header}")}for(var fe in ae.formule)X=R((ue=ae.formule[fe]).join("\n")),J.push(`\n{f ${fe}}\n${X}\n{:f}`);var ue=ae.codice.join("\n");J.push(R(ue)),o.writeFileSync(r.join(y,se+".mu"),J.join("\n")),O(`reg ${++oe}: ${ae.cod} - ${ae.des}`)}}}if(L.t||L.tipologie){N=(B=_.get(`${A} and cod=?`,"tipologie")).info.split("").sort(),console.log("-> tipologie",N.length);var me={};for(var ve of N)(ce=(P=ve.trim().toLowerCase()).split(",")[0].trim())&&(ce.includes(".")?me[(B=ce.split("."))[0]]?me[B[0]][B[1]]=P:console.log("errore tipo",ce):(me[ce]={v:P},(B=_.get(`${A} and cod=?`,`db_${ce}`)).info&&(me[ce].db=R(B.info.trim().toLowerCase().replaceAll("","\n"),!0)),(B=_.get(`${A} and cod=?`,`ll_${ce}`)).info&&(me[ce].list=R(B.info.trim().toLowerCase().replaceAll("","\n"),!0))));for(var B of(o.writeFileSync(y+"/typos.json",JSON.stringify(me,null,2)),N=_.all(`${A} and cod like ?`,"M>%"),console.log("-> macro tip",N.length),N)){var ge;O("macdb "+(ge=B.cod.substr(2).trim().toLowerCase())),ee=R(B.info.toLowerCase(),!0),J=`// ${B.des}\n${ee} \n `,o.writeFileSync(r.join(y,`++${ge}.mu`),J)}}if(L.a||L.abilita){function Oe(e){for(var t=[],o="";;){var r=e.lastIndexOf(",",100);if(e.length<100||r<0){t.push(o+e),o.length&&t.push("");break}t.push(o+e.substr(0,r)+", \\"),o=" ",e=e.substr(r+1)}return t.join("\n")}function Ae(e){var t=e.toLowerCase().split(";"),o=e=>e?[...new Set(e.split("*").sort().filter((e=>e.trim())))].join(","):"";return{abilit:o(t[0]),scons:o(t[1]),obs:o(t[2])}}console.log("-> abilitazioni"),q={};var $e=(N=_.all("select var var,abilit abilit,codart codart from valartopz order by var,abilit")).length;for(var B of N)if(B.var&&B.abilit&&B.codart){var be=B.var.trim().toLowerCase(),{abilit:we,scons:Ce,obs:Le}=Ae(B.abilit),Fe=B.codart.trim().toLowerCase();q[be]||(q[be]={}),(De=q[be])[we]||(De[we]={scons:Ce,obs:Le,neutri:[],art:[],mod:[]}),De[we].neutri.push(Fe)}var Se=(N=_.all("select var var,abilit abilit,codmod codart from valmodopz order by var,abilit")).length;for(var B of N)if(B.var&&B.abilit&&B.codart){be=B.var.trim().toLowerCase();var{abilit:we,scons:Ce,obs:Le}=Ae(B.abilit);Fe=B.codart.trim().toLowerCase(),q[be]||(q[be]={}),(De=q[be])[we]||(De[we]={scons:Ce,obs:Le,neutri:[],art:[],mod:[]}),De[we].mod.push(Fe)}var ye=(N=_.all("select var var,abilit abilit,cod codart from valmodartopz order by var,abilit")).length;for(var B of N)if(B.var&&B.abilit&&B.codart){be=B.var.trim().toLowerCase();var De,{abilit:we,scons:Ce,obs:Le}=Ae(B.abilit);Fe=B.codart.trim().toLowerCase(),q[be]||(q[be]={}),(De=q[be])[we]||(De[we]={scons:Ce,obs:Le,neutri:[],art:[],mod:[]}),De[we].art.push(Fe)}for(var be in console.log("-> ab trasforma",$e,Se,ye),q)if(o.existsSync(r.join(y,be+".var"))){J=[];var Ee=q[be];for(var je in Ee)X=Ee[je],J.push("\n\n{limit}"),X.neutri.length&&J.push(Oe(":neutri "+X.neutri.join(","))),X.art.length&&J.push(Oe(":art "+X.art.join(","))),X.mod.length&&J.push(Oe(":mod "+X.mod.join(","))),X.obs&&J.push(Oe(":obs "+X.obs)),X.scons&&J.push(Oe(":scons "+X.obs)),J.push(Oe(":opz "+je));o.writeFileSync(r.join(y,be+".var.txt"),J.join("\n"))}}k=(new Date).valueOf()-k,console.log("Tempo: ",k+"ms"),_.chiudi();
|
package/bin/mu-glb.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import e from"fs";import t from"path";import{init as o}from"croswil_lib";import{NodeIO as a}from"@gltf-transform/core";import{ALL_EXTENSIONS as n}from"@gltf-transform/extensions";import{textureCompress as i,dedup as r,weld as s,draco as c,prune as l}from"@gltf-transform/functions";import d from"draco3dgltf";import $ from"sharp";import u from"minimist";const{Clear:m,Reset:f,Bold:p,Reverse:g,Red:w,Green:h,Yellow:b,Blue:z,Magenta:y,Cyan:S,White:q}=o(),C=(new a).registerExtensions(n).registerDependencies({"draco3d.encoder":await d.createEncoderModule(),"draco3d.decoder":await d.createDecoderModule()});var x=u(process.argv);let N=!(!x.p&&!x.pipe);function v(...e){N||console.log(...e)}v("----------------------------------------------------------------------------------------"),v(`${p}${S}${p}mu-glb:${f} Info/Compressione files GLB e immagini PP (c) Croswil 2026 v. ${b}2.1.
|
|
2
|
+
import e from"fs";import t from"path";import{init as o}from"croswil_lib";import{NodeIO as a}from"@gltf-transform/core";import{ALL_EXTENSIONS as n}from"@gltf-transform/extensions";import{textureCompress as i,dedup as r,weld as s,draco as c,prune as l}from"@gltf-transform/functions";import d from"draco3dgltf";import $ from"sharp";import u from"minimist";const{Clear:m,Reset:f,Bold:p,Reverse:g,Red:w,Green:h,Yellow:b,Blue:z,Magenta:y,Cyan:S,White:q}=o(),C=(new a).registerExtensions(n).registerDependencies({"draco3d.encoder":await d.createEncoderModule(),"draco3d.decoder":await d.createDecoderModule()});var x=u(process.argv);let N=!(!x.p&&!x.pipe);function v(...e){N||console.log(...e)}v("----------------------------------------------------------------------------------------"),v(`${p}${S}${p}mu-glb:${f} Info/Compressione files GLB e immagini PP (c) Croswil 2026 v. ${b}2.1.85${f}`),v("----------------------------------------------------------------------------------------");let M=1024;if(x.s||x.size){const e=parseInt(x.s||x.size,10);[256,512,1024,2048].includes(e)?M=e:v(`${b}Valore -s non valido. Usa 256/512/1024/2048 (default 1024).${f}`)}let O="balanced";if(void 0!==x.d||void 0!==x.draco){const e=(!0===x.d?"balanced":x.d)||(!0===x.draco?"balanced":x.draco),t=String(e).toLowerCase();["balanced","fast","small"].includes(t)?O=t:v(`${b}Valore -d non valido. Usa balanced|fast|small (default balanced).${f}`)}let T=(x.o||x.out||"out").toString().trim();var E=x._;function R(e,t){v(`${w}${p}ERRORE! ${e}: ${q}${t||""}${f}`),process.exit(1)}function A(e){return"fast"===e?{method:"edgebreaker",encodeSpeed:8,decodeSpeed:8,quantizationVolume:"mesh",quantizePosition:14,quantizeNormal:10,quantizeTexcoord:12,quantizeColor:8,quantizeGeneric:12}:"small"===e?{method:"edgebreaker",encodeSpeed:4,decodeSpeed:5,quantizationVolume:"mesh",quantizePosition:12,quantizeNormal:8,quantizeTexcoord:10,quantizeColor:8,quantizeGeneric:10}:{method:"edgebreaker",encodeSpeed:5,decodeSpeed:5,quantizationVolume:"mesh",quantizePosition:14,quantizeNormal:10,quantizeTexcoord:12,quantizeColor:8,quantizeGeneric:12}}async function I(e,t,o=!0,a="balanced"){const n=Buffer.isBuffer(e)?await C.readBinary(e):await C.read(e),d=async(e,t)=>{try{await n.transform(t)}catch(o){console.warn(`${e} fallita: ${o.message}`)}};!function(e){const t=e.getRoot();for(const o of t.listNodes())o.getCamera()&&o.setCamera(null);for(const o of t.listCameras())o.dispose()}(n),o&&await d("textureCompress",i({encoder:e=>$(e).resize(t,t,{withoutEnlargement:!0}).webp({quality:88,effort:4}),targetFormat:"webp"})),await d("dedup",r()),await d("weld",s({tolerance:1e-4}));const u=function(e){const t=e.getRoot(),o=new Set(["NORMAL","TEXCOORD_0"]);for(const a of t.listMeshes())for(const e of a.listPrimitives())e.getAttribute("TANGENT")&&o.add("TANGENT"),e.getAttribute("TEXCOORD_1")&&o.add("TEXCOORD_1"),e.getAttribute("COLOR_0")&&o.add("COLOR_0"),e.getAttribute("JOINTS_0")&&e.getAttribute("WEIGHTS_0")&&(o.add("JOINTS_0"),o.add("WEIGHTS_0"));return Array.from(o)}(n),m={...A(a),preserveAttributes:u};return await d("draco",c(m)),await d("prune",l()),await C.writeBinary(n)}function _(o){const a=t.join(o,T);return e.existsSync(a)||e.mkdirSync(a,{recursive:!0}),a}function G(e,t){return e?`${((e-t)/e*100).toFixed(1)}%`:"0.0%"}async function B(o,a){const n=t.extname(a);[".glb"].includes(n)?await async function(o,a){const n=t.join(o,a),i=e.statSync(n).size;if(x.c||x.compress){const r=await I(n,M,!0,O),s=_(o),c=t.join(s,t.basename(a));e.writeFileSync(c,r);const l=Math.round(i/1024),d=Math.round(r.length/1024);v(`${b}${a} ${q}${l}K => ${d}K (${G(i,r.length)}) ${S}-> ${c}${f}`)}else v(`${S}${n}:${f}`),await async function(e){const t=(await C.read(e)).getRoot(),o=t.listNodes(),a=t.listMeshes(),n=t.listMaterials(),i=t.listTextures();v(` ${q}Nodes:${f}`),o.forEach(((e,t)=>{v(` ${b}${t}${f}: ${e.getName()||"(no name)"}`)})),v(` ${q}Meshes:${f}`),a.forEach(((e,t)=>{const o=e.listPrimitives(),a=o.reduce(((e,t)=>{const o=t.getAttribute("POSITION");return e+(o?o.getCount():0)}),0);v(` ${b}${t}${f}: ${e.getName()||"(no name)"} - ${o.length}/${a} vert`)})),v(` ${q}Materials:${f}`),n.forEach(((e,t)=>{v(` ${b}${t}${f}: ${e.getName()||"(no name)"} `)})),v(` ${q}Textures:${f}`);for(let r=0;r<i.length;r++){const e=i[r],t=await e.getImage(),o=e.getName()||"(no name)";let a=t?` ${p}${S}${Math.round(t.byteLength/1024)}Kb${q}`.slice(-20):"";v(` ${b}${r}${f}: ${a} ${o}`)}v("")}(n)}(o,a):[".png",".jpeg",".jpg",".bmp",".tif",".tiff"].includes(n.trim().toLocaleLowerCase())&&await async function(o,a){const n=t.join(o,a),i=e.statSync(n).size;if(!x.c&&!x.compress){const e=await $(n).metadata();return v(`${S}Image Info:${f} ${a}`),void v(`${q}Size:${b} ${e.width}×${e.height} ${q}Format:${b} ${e.format} ${q}Channels:${b} ${e.channels}`)}const r=_(o),s=t.basename(a,t.extname(a))+".webp",c=t.join(r,s);await $(n).resize(M,M,{withoutEnlargement:!0}).webp({quality:88,effort:4}).toFile(c);const l=e.statSync(c).size,d=Math.round(i/1048576),u=Math.round(l/1048576);v(`${b}${a} => .webp ${q}${d}M => ${u}M (${G(i,l)}) ${S}-> ${c}${f}`)}(o,a)}(x.h||x.help||!(x.p||x.pipe||E[2]))&&(v(`Uso: ${p}mu-glb <file|cartella> [opzioni]${f} \n${p}${S}Opzioni:${f}${h}\n ${q} -h, --help${f}${h} mostra l'help\n ${q} -c, --compress${f}${h} comprime GLB/immagini\n ${q} -o, --pipe${f}${h} modalità pipeline: (cat <nomefileglb> | mu-glb -cp > <fileout.glb>) \n ${q} -s, --size <px>${f}${h} lato max texture (256/512/1024/2048, default 1024)\n ${q} -d, --draco <profilo>${f}${h} balanced | fast | small (default: balanced)\n ${q} -o, --out <dir>${f}${h} cartella di output (default: "out")\n${f}\n `),process.exit(0)),await async function(){if(N){const e=[];for await(const n of process.stdin)e.push(n);const t=Buffer.concat(e);x.c||x.compress||(console.error(`${w}Modalità -p richiede anche -c (compress).${f}`),process.exit(1));const o=async e=>{const t=process.stdout.write,o=process.stderr.write;process.stdout.write=()=>{},process.stderr.write=()=>{};try{return await e()}finally{process.stdout.write=t,process.stderr.write=o}},a=await o((()=>I(t,M,!0,O)));process.stdout.write(a)}else{var o=E[2]?.trim();if(o||R("manca il file",o),e.existsSync(o)||R("file non trovato",o),e.statSync(o).isDirectory()){const t=e.readdirSync(o);for(const e of t)await B(o,e)}else await B(t.dirname(o),t.basename(o))}}();
|
package/bin/mu.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import t from"fs";import e from"path";import{init as a,database as i,insertorupdate as s,checkdb as r,setstruttura as n}from"croswil_lib";import o from"minimist";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)}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 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(),i="\0";e=a.map((e=>`${e}${i}${String(t[e])}`)).join(i)}let a=2166136261,i=2218511855;for(let t=0;t<e.length;t++){const s=e.charCodeAt(t);a^=s,a+=a<<5^2779096485,i^=a,i=((i<<3)+s^2134516169)>>>0}return a>>>=0,a.toString(16)+i.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 c,l,u,f,h,d;const logga=(...t)=>{d?d(t):console.log(...t)};function setcallbacks(t,e,a,i,s,r){l=t,c=e,u=a,f=i,h=s,d=r}function clean(t,e=!1){return e?(t||"").trim().toLowerCase():(t||"").trim()}function getcouple(t,e="=",a=!0){const i=(t=t||"").indexOf(e);return i>=0?{v:clean(t.substring(0,i),a),o:t.substring(i+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 i=[];for(let a=t;a<=e;a++)i.push(a+"");return i}if(!/["({[]/.test(t))return t.split(/[,;]/).map((t=>t.trim()));const i=[];let s="",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)s+=a;else{const t=s.trim();i.push(t),s=""}}const o=s.trim();return o&&i.push(o),i.map((t=>(t=t.trim(),!e&&(t.startsWith('"')&&t.endsWith('"')||t.startsWith("(")&&t.endsWith(")"))?t.slice(1,-1):t)))}const parsevar=(t,e,a,i,s=!1)=>{const r=["[","(","{"],n=["]",")","}"];i||(i="["==a?"]":"("==a?")":"}");const o=r.includes(a);let c=1,l=0;const u=[];for(let f=e;f<t.length;f++)if(o&&r.includes(t[f])||t[f]==a)c++;else if(o&&n.includes(t[f])||t[f]==i){if(c--,0==c&&t[f]==i)return u[l]=t.substring(e,f),{i:f,res:u}}else if(":"==t[f])1==c&&(u[l]=t.substring(e,f),e=f+1,l++);else if("\n"==t[f]&&s)return{i:f,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[i,s]of Object.entries(t))"function"==typeof s||e&&e.includes(i)||(a[i]=getOggetto(s,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 m=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")}};const p=/(?<!\w)\(/g,v=/^-?[0-9.]+$/,g=/^(\w+)(!)?\[(.*)?\]$/,b=/[0-9.]/,w=/[+\-*/^%]/,y=/[a-zA-Z]/i;function valutaparentesi(t){for(t=(t+"").trim();;){const e=p.exec(t);if(!e)break;{const{i:a,res:i}=parsevar(t,e.index+1,"(",")");if(a<=0)break;t=t.substring(0,e.index)+valutaparentesi(i[0])+(a>=0?t.substring(a+1):"")}}return function operatoricomparazione(t){let e,a;const i={"||":()=>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 s=-1,r="";for(const e in i)if(s=t.indexOf(e),s>=0){r=e;break}return-1!==s?(e=t.slice(0,s),a=t.slice(s+r.length),i[r]&&i[r]()?1:0):muCalcbase(t)}(t=function valutainsiemi(t){if(t.includes("[")){function resinisiemi(t){const e=t[1],a=!!t[2],i=getcolonne(t[3]);for(const t of i)if(t==e)return a?"0":"1";return a?"1":"0"}for(;;){const e=g.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 $={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 w.test(a)?(e++,a):null}function parsePrimary(){if("+"===t[e]||"-"===t[e]){return("-"===t[e++]?-1:1)*parsePrimary()}if(b.test(t[e]))return function parseNumber(){const a=e;for(;e<t.length&&b.test(t[e]);)e++;return Number(t.slice(a,e))}();if("("===t[e]){e++;const a=parseExpr();return")"===t[e]&&e++,a}return y.test(t[e])?function parseFunctions(){const a=t.slice(e);if(!a)return 0;for(const[i,s]of Object.entries($)){const r=new RegExp(`^(${i})\\(`,"i").exec(a);if(r){e+=r[0].length;let a=[];for(;;){let i=parseExpr();if(a.push(i),")"===t[e]){e++;break}if(","!=t[e])break;e++}return s(...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 v.test(e)?Number(e)||0:valutaparentesi(t)||0}const tonum=(t,e=-1)=>{if(!t)return 0;let a=0;if("number"==typeof t)a=t||0;else if("string"==typeof t){const e=(t=t.replaceAll(",",".")).match(/^-?[0-9.]+$/);a=e&&e.length>0?Number(e[0])||0:muCalc(t)}if(e>=0)switch(e){case 0:a=Math.round(a);break;case 1:a=Math.round(10*a)/10;break;case 2:a=Math.round(100*a)/100;break;case 3:a=Math.round(1e3*a)/1e3;break;case 4:a=Math.round(1e4*a)/1e4;break;case 5:a=Math.round(1e5*a)/1e5;break;case 6:a=Math.round(1e6*a)/1e6}return a||0},k=100;function valutavar(t,e){const a=e[0]||"";if(!a)return"";if(t.counter>=k)return a;const i=valuta0(t,a);let s;if(t.stl[i])s=`-- R:${i} --`;else{const e=t.var(i);if(isObject(e))return e;t.stl[i]=!0,s=valutabase(t,e),delete t.stl[i]}if(t.counter>=k)return a;if(e[1]){let a=getcolonne(s);if("l"==e[1])return String(a.length);const i=valuta0(t,e[1]);let r;if(/^[\d.]+$/.test(i)){let t=i.split(".").map((t=>parseInt(t)));for(let e=0;e<t.length-1;e++){let i=t[e];if(!(i>=0&&i<a.length))return"";a=getcolonne(a[i])}r=t[t.length-1]}else r=muCalc(i);if(!(r>=0&&r<a.length))return"";for(s=valuta0(t,a[r]);;){let e=s.indexOf("$[");if(e<0)break;const{i:a}=parsevar(s,e+2,"[","]");if(a<e)break;let i=s.slice(e+2,a);s=s.substring(0,e)+valutaquadra(t,i)+s.substring(a+1)}}if(e[2]){const a=muCalc(valuta0(t,e[2]));if(a){let i=0;return e[3]&&(i=muCalc(valuta0(t,e[3]))),a<0?s.slice(a):i?s.substring(a-1,a+i-1):s.substring(a-1)}}return s}function valutaquadra(t,e){let a=getcolonne(e||"");const i=clean(a[0]);function replacecharcode(t){return"\\t"==t?"\t":"\\n"==t?"\n":(t||"").replace(/&(\d+)/g,((t,e)=>String.fromCharCode(parseInt(e))))}switch(i){case"set":{const e=valuta0(t,a[1]||""),i=valuta0(t,a[2]||"");t.add(e,t.var(i))}break;case"ex":{const e=valuta0(t,a[1]||"");let i=valuta0(t,a[2]||"");i||(i=",");const s=muCalc(valuta0(t,a[3]||"")),r=e.split(i);return s>0&&r[s-1]||""}case"ex2":{const e=replacecharcode(a[1]||""),i=muCalc(valuta0(t,a[2]||""));a.splice(0,3);return a.join(";").split(e)[i>0?i-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"==i){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 i=a[1]||"";return e?a[3].split(i)[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]||""),i=muCalc(valuta0(t,a[2]||"")),s=muCalc(valuta0(t,a[3]||""));return e.substring(i-1,i+s-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 i.startsWith(".")?{fun:e,pars:[]}:{fun:i,pars:a}}}function valuta0(t,e){if(e+="",t.counter>=k)return e;for(;;){const a=/\$([{(])/im.exec(e);if(!a)break;{const i=a.index,{i:s,res:r}="("==a[1]?parsevar(e,i+2,"(",")"):parsevar(e,i+2,"{","}");let n=valutavar(t,r);if(isObject(n))return n;e=valuta0(t,e.substring(0,i))+n+(s>=0?valuta0(t,e.substring(s+1)):"")}}return e=(e=e.replace(/\$([a-z|][\w|.]*)/gi,((e,a)=>{let i="";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)){i=e+i;break}i=a.slice(-1)+i,a=a.substring(0,a.length-1)}return i}))).replace(/\$(\d+):(\d+)(:(\d+))?/g,((t,e,a,i,s)=>{s=s?+s:1;const r=[];for(let t=+e;t<=+a;t+=s)r.push(t.toString());return r.join(";")}))}function valutabase(t,e){return e&&(t.counter++,t.counter<=k&&(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 i=[];for(let a=t;a<=e;a++)i.push(a+"");return i}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 i=Variabile.sanitizeKey(t);if(i.startsWith(".")&&this.fndotcallback){const t=this.fndotcallback(i.toLowerCase());if(t)return toformat(t,e)}if(Variabile.isValidKey(i)){const t=i.toLowerCase(),a=/^([\w][\w\d]*)([.[])/.exec(t);if(a){const i=this.dictionary[a[1]];if(i&&"object"==typeof i)return toformat(function objval(t,e){const a=e.split(".");let i=t;for(let t=0;t<a.length;t++){const e=a[t],s=e.match(/(.*?)\[(\d*)\]/);if(s){if(s[1]&&(i=i[s[1]]),void 0===i)return"";i=i[parseInt(s[2],10)||0]}else switch(e){case"_k":i=(Object.keys(i)||[]).join(",");break;case"_v":i=Object.values(i)||[];break;case"_l":i=i.length||0;break;default:i=i[e]}if(void 0===i)return""}return"number"==typeof i?i+"":i}(i,("["==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(t)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 i=Object.keys(this.dictionary).filter((e=>e.startsWith(t)));for(let t of i)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}=${e}`)}}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 i=0;i<20;i++){const i=e.lastIndexOf("$[");if(!(i>=0)){e=valutabase(t,e);break}{const{i:s,res:r}=parsevar(e,i+2,"[","]"),n=valutabase(t,e.substring(0,i)),o=r?r[0].startsWith(".")?valutabase(t,r.join(":")):valutabase(t,r[0]):"",c=s>=0?valutabase(t,e.substring(s+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:i}=parsevar(t,e+1,"{","}");if(a<0)return t;t=t.substring(0,e)+muCalc(i[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,i,s=!1;return t.startsWith("#")&&(s=!0,t=t.slice(1)),i=t.indexOf("="),i>0?(e=clean(t.slice(0,i)),a=t.slice(i+1)):(i=t.indexOf(":"),i>0?(e=clean(t.slice(0,i)),a=t.slice(i+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)&&(s=!0),s&&(a=muCalc(a)),{k:e,v:a}}}class CodiceBarra{constructor(){this.barre={}}azzera(){this.barre={}}oriented(t,e,a,i){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:i};case"2":return{t:t,x:e,y:i,z:a};case"5":return{t:t,x:e,y:a,z:i};case"4":return{t:t,x:i,y:e,z:a};case"3":return{t:t,x:a,y:i,z:e};case"6":return{t:t,x:i,y:a,z:e};default:return{t:"1",x:a,y:e,z:i}}}async getcode(t,e,a,i,s){let[r,n]=t.split(":");n=n||"";const getcode0=async(t,r)=>{let n=this.barre[t];if(!n&&s&&(n=await s(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,i),f={barra:t,fm:n.fm,t:o,liv:r,items:n.r.length,err:""};let h=n.r;if(u){const t=h.filter((t=>t.z===u||!t.z));t.length>0?h=t:f.err=`spessore non coerente: ${u}`}if("l"==o||"a"==o||"p"==o){const t=h.find((t=>t.x>=c));if(t)return{c:t.c,fm:t.x==c?0:1,x1:t.x,x:c,extra:f}}else{let t=h.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:f};if(0!=n.fm&&(t=h.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:f};if(0!=n.fm&&2!=n.fm&&(t=h.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:f}}return n.codalt&&r<5?await getcode0(n.codalt,r+1):{c:n.coderr,fm:9,x:c,y:l,z:u,extra:f}};return await getcode0(r,0)}compila(t,e){e||(e={});const a={};if(Array.isArray(t)){for(const i of t)if(i.cod=clean(i.cod),i.barcode=clean(i.barcode),i.barcode.length>2&&"+"==i.barcode[0]){i.barcode=i.barcode.substr(1);const t=this.oriented(i.barcode.substr(0,1),i.l,i.a,i.p);t.c=i.modello?{c:i.cod,m:i.modello}:i.cod,a[i.barcode]||(a[i.barcode]={t:i.barcode.substr(0,1),r:[]},e[i.barcode]&&(a[i.barcode]=Object.assign(e[i.barcode],a[i.barcode]))),a[i.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 x="IFDEF|IFNDEF|SETDEF|CZERO|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 muClComments(t,e){const a=(i=t,i.replace(/("(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*')|\/\*[\s\S]*?\*\//g,((t,e)=>e||""))).split(/\r?\n/);var i;const s=[];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 s.push(a)}return s}function muClean(t,e=!1){if(!Array.isArray(t))return void m.add("muClean: expected array!");const a=[];function addgen(t){if(a.length>0&&""==a[a.length-1].tipo){const i=a[a.length-1];e||!(!t.startsWith("!")&!t.startsWith("."))||t.startsWith("$")||t.startsWith("{")||t.startsWith("#")||i.contenuto.startsWith("!")||i.contenuto.startsWith(".")||i.contenuto.startsWith("$")||i.contenuto.startsWith("{")||i.contenuto.startsWith("#")?a.push({tipo:"",contenuto:t}):i.contenuto=i.contenuto+"\n"+t}else a.push({tipo:"",contenuto:t})}for(const e of t){const t=e.match(/^#([\w.]+)\s*(.*)$/);if(t){let i=t[1].toUpperCase().trim(),s="";if(i.includes(".")){const t=i.split(".");i=t[0],s=t[1]}if(x.includes(i)){const e=t[2];if("IF"!==i&&"IFDEF"!=i&&"IFNDEF"!=i||!e.includes("#")){const e={tipo:i,contenuto:t[2]};s&&(e.tipo2=s),a.push(e)}else{let s=e.match(/^(.*?)\s*#\s*(\w+)\s*(.*?)\s*#\s*(\w+)\s*(.*)$/);s?(a.push({tipo:i,contenuto:s[1].trim()}),a.push({tipo:s[2].toUpperCase(),contenuto:s[3]}),a.push({tipo:"ELSE",contenuto:""}),a.push({tipo:s[4].toUpperCase(),contenuto:s[5]}),a.push({tipo:"ENDIF",contenuto:""})):(s=e.match(/^(.*?)\s*#\s*(\w+)\s*(.*)$/),s?(a.push({tipo:i,contenuto:s[1].trim()}),a.push({tipo:s[2].toUpperCase(),contenuto:s[3]}),a.push({tipo:"ENDIF",contenuto:""})):a.push({tipo:t[1].toUpperCase(),contenuto:t[2]}))}}else addgen(e)}else addgen(e)}let i=0,s=0,r=0,n=[],o=[],c=[];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":s++,o[s]={pos:t,bk:[]};break;case"LOOP":case"ENDFOR":if(s>0){const{pos:i}=o[s];for(const e of o[s].bk)e.next=t,e.prev=i;e.prev=i,a[i].next=t,s--}break;case"BREAK":case"EXIT":case"EXITFOR":case"CONTINUE":s>0&&o[s].bk.push(e);break;case"IF":case"IFDEF":case"IFNDEF":i++,n[i]={pos:t,bk:[e]};break;case"SELECT":r++,c[r]={pos:t,bk:[e],first:t};break;case"ELSEIF":case"ELSEIFDEF":case"ELSEIFNDEF":case"ELSE":if(i>0){const{pos:s}=n[i];n[i].bk.push(e),a[s].next=t,n[i].pos=t}break;case"CASE":case"CASES":case"DEFAULT":if(r>0){const{pos:i,first:s}=c[r];c[r].bk.push(e),a[i].next=t,e.first=s,c[r].pos=t}break;case"ENDIF":if(i>0){const{pos:e,next:s}=n[i];a[e].next=t;for(const e of n[i].bk)e.last=t;i--}break;case"ENDSELECT":if(r>0){const{pos:e,next:i}=c[r];a[e].next=t;for(const e of c[r].bk)e.last=t;r--}}}return a}function muLimits(t){const e=muClComments(t),a=[];let i;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])?(i={},a.push(i)):i=void 0;else if(i&&(e=/^\s*:(\w+)\s*(.*)/.exec(t),e))switch(e[1].toLowerCase()){case"opz":case"o":i.opz=parsa(e[2]);break;case"obs":case"obsolete":i.obsolete=parsa(e[2]);break;case"scons":case"sconsigliate":i.scons=parsa(e[2]);break;case"neutri":i.neutri=parsa(e[2]);break;case"art":i.art=parsa(e[2]);break;case"mod":i.mod=parsa(e[2]);break;default:logga("missing:",e[1])}}return a}function parselimitifromdb(t){let e,a=[];if(t&&t.length)for(const i of t){e={},i.varfilter=fromjson(i.varfilter,[]),i.result=fromjson(i.result,[]),i.result2=fromjson(i.result2,[]),i.exclude=parseInt(i.exclude)?1:0,i.exclude2=parseInt(i.exclude2)?1:0;const{item:s,model:r,rule:n,varfilter:o,result:c,result2:l,exclude:u,exclude2:f,datai:h,dataf:d}=i;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&&(f?e.ex2=remap(l):e.valid2=remap(l)),s&&(e.i=clean(s).split(";")),r&&(e.m=clean(r).split(";")),n&&(e.r=clean(n).split(";")),(h||d)&&h<d&&(e.datai=parseInt(h),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}class Variante{constructor(t){this.rows={},this.name="$",this.key="$",this.limits=void 0,this.amb=t}setheader(t,e){const{name:a,cat:i}=checkmu(t,e);return this.cat=i,this.name=a,this.alias="",this.obbligo=!1,this.des=a,this.vdef=[],this.rows={},this.h=[],this.key=`${i}/${a}`,{name:a,cat:i}}fromdim(t,e=2){"number"!=typeof t&&(t=muCalc(t)),e>0&&e--;let a,i=1e9;for(const s in this.rows){const r=this.rows[s];if(!r.annulla){const s=parseFloat(r.v[e])||0;s<=i&&s>=t&&(i=s,a=r)}}return this.#t(t,a)}async load(t,e,a=!1){const{name:i,cat:s}=this.setheader(t,e);if(c){const t=await c(s,i);if(t){if(await this.loadContentExtended(t),t.filter)this.limits=parselimitifromdb(t.filter);else if(f&&!a){const t=await f("filter",s,i);t&&t.length&&(this.limits=parselimitifromdb(t))}return!0}}return!1}async _loadContent(t){const e=/^\s*[!:]\s*(\w+)\s*(.*)$/i;let a="";const i=[];let s,r=!1;for(const n of t){const t=n.toLowerCase();if("{limit}"==t)s=[],i.push(s),r=!0;else if("{:limit}"==t)r=!1;else if(r)s.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 i=clean(t.substring(0,e));"v"!=i&&(this.rows[a][i]=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=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 i of t){const t=a.exec(i);if(t)switch(t[1]){case"var":case"v":case"variante":{const a=(t[2]||"").indexOf(" ");if(a>0){const i=clean(t[2].substring(0,a)),s=getcolonne(t[2].substring(a+1));if(i&&s&&s.length){e.v||(e.v=[]);let t=e.v.find((t=>t.v==i));t||(t={v:i,o:[]},e.v.push(t));for(const e of s)t.o.includes(e)||t.o.push(e)}}}break;case"d":case"dt":case"data":case"date":{const a=t[2].split(" "),i=parseInt(a[0]),s=parseInt(a[1]);(i||s)&&(e.datai=i,e.dataf=s)}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(i))}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}(i),!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 i=this.rows[a];return 2==i.annulla?"":this.#t(e||t,i)}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 i=Object.keys(this.rows).sort();for(let t=0;t<i.length;t++){const e=i[t];if(!(t<i.length-1&&i[t+1].startsWith(e+"."))&&this.isvalidopz(e))return e}}resetfilter(){delete this._valids;for(const t in this.rows)this.rows[t].annulla=0}validkeys(){let t=Object.keys(this.rows)||[];return t=t.filter((t=>0==this.rows[t].annulla)).sort(),t}limitfiltra(t){if(!t)return;t=muClComments(t.toLowerCase());const e=[];for(const a of t){const t=/^#(i|e|xe|xi|x\+|x-|x)(\d*)\s+(.+)$/i.exec(a);if(t){const a={ex:t[1],col:(parseInt(t[2])||1)-1,val:"x"==t[1]?t[3]:getcolonne(t[3])};a.val.length&&e.push(a)}}if(e.length)for(const t in this.rows){const a=this.rows[t];for(const t of e)if("e"==t.ex){if(_check((a.v[t.col]+"").toLowerCase(),t.val)){a.annulla=1;break}}else if(t.ex.startsWith("x")){const e=(a.v[t.col]+"").toLowerCase().split(/[,;]/).map((t=>t.trim()));if("xe"==t.ex){if(_check((t.val+"").toLowerCase(),e)){a.annulla=1;break}}else if("x+"==t.ex){if(parseFloat(a.v[t.col])<=parseFloat(t.val)){a.annulla=1;break}}else if("x-"==t.ex){if(parseFloat(a.v[t.col])>=parseFloat(t.val)){a.annulla=1;break}}else if(!_check((t.val+"").toLowerCase(),e)){a.annulla=1;break}}else if(!_check((a.v[t.col]+"").toLowerCase(),t.val)){a.annulla=1;break}}function _check(t,e){if(1==e?.length&&"."==e[0])return!!t;return!!e.find((e=>e.startsWith(t)))}}limita(t){if(this.resetfilter(),t&&t.length&&this.limitfiltra(t),!this.limits||!this.amb)return this;const{item:e,rule:a,model:i,vari:s,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(i,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(s.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 f=!1,h=!1;for(const t of n){if(t.valid&&t.valid.length){f=!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){h=!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,i=!1;if(f){for(const e of o)if(t.startsWith(e)){a=!0;break}!a&&l.has(t)&&(a=!0)}if(h){for(const e of c)if(t.startsWith(e)){i=!0;break}!i&&u.has(t)&&(i=!0)}f&&!a&&(e.annulla=1),h&&i&&(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 E={};async function getcbfunc(t,e,a,i,s,r){if(u){if(E[e])return"";let t=await u(e,a,i,s,r);return isObject(t)||(t=(t||"").trim(),"!"==t&&(E[e]=!0,t="")),t}return t}async function intvaluta(t,e,a){return t.vari.valuta(a,(async(a,i)=>{switch(a){case"dim":{let a=muCalc(i[1]),s=await dammivariante(t,e,i[2]),r=parseInt(i[3])||2;return s&&s.fromdim?s.fromdim(a,r):a}case"seed":{let t=i[1],e=getcolonne(i[2]);return e[seeder(e.length,t)]||""}case"seedvar":{let a=await dammivariante(t,e,i[2]),s=i[1],r=a.validkeys();if(i[3]&&i[4]){let t=muCalc(i[3])-1;if(t>=0){let e=getcolonne(i[4]);r=r.filter((i=>{let s=a.rows[i];if(s&&s.v&&s.v[t]){let a=getcolonne(s.v[t]);if(a)for(let t of e)if(a.includes(t))return!0}return!1}))}}let n=seeder(r.length,s);return n>=0&&a.tovar(r[n])||""}default:return await getcbfunc(`**fun:${a}**`,a,i,t.vari,t)}}))}async function dammivariante(t,e,a){let i;return i=e&&e?.localvar&&e.localvar[a]?e.localvar[a]:await t.getvariante(a),i}async function impostavariante(t,e,a,i,s){let r,n=a;if((i=i||"")&&"string"==typeof i){const t=i.indexOf(":");t>=0&&(t>0&&(n=clean(i.slice(0,t))),i=i.slice(t+1))}if(s&&s.alias&&(n=s.alias),e&&e.paralias&&e.paralias[a]&&(n=e.paralias[a]),r=await dammivariante(t,e,n),r)if(s&&s.t){s.des||(s.des=r.des);let e=s?.filtra||"";if(e.includes("$")&&(e=await t.vari.valuta(e)),"m"===s.t){let t=2;if(i.includes(":")){const e=i.split(":");t=parseInt(e[1]),i=e[0]}r.limita(e),i=r.fromdim(parseFloat(i),t)}else{r.limita(e);const t=r.firstvalid(i,getcolonne(s.def));i=r.tovar(t)}}else r.resetfilter(),i=r.firstvalid(i),i=r.tovar(i);else s&&s.t&&s.t;return t.vari.add(a,i),i}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,i){if(!Array.isArray(a))return m.add("codice is not a valid parsed array"),[];const zeroval=()=>t&&t._managezero?"0":"";i||(i={}),i.id||(i.id="_"),i._stackmacro||(i._stackmacro=0),i.limited||(i.limited=!1),t||m.add("amb deve essere definito");const s=t.vari;t.maxdelays,t.cat;const r=[];let n,o,c;(new Date).valueOf();for(let l=0;l<a.length;){let u=a[l];switch(u.tipo){case"IFDEF":case"IFNDEF":case"IF":{const f="IF"==u.tipo?muCalc(await intvaluta(t,e,u.contenuto)):"IFDEF"==u.tipo?""!=await intvaluta(t,e,u.contenuto):""==await intvaluta(t,e,u.contenuto);u.next?(a[u.next].jlast=f?1:0,f||(l=u.next-1)):m.add("Troppo tempo",u)}break;case"SELECT":u.next?(a[u.next].t1=await intvaluta(t,e,u.contenuto),l=u.next-1):m.add("manca endselect",u);break;case"CASE":case"CASES":case"DEFAULT":if(u.next)if(u.jlast)u.jlast=0,l=u.last-1;else{let h,d=1;const _getvv=async()=>{let a=await intvaluta(t,e,u.contenuto);return a=a.includes(":")&&!a.includes(",")?a.split(":").map((t=>(t||"").trim())):getcolonne(a),a};if("CASE"==u.tipo){d=0,h=await _getvv();const p=muCalc(u.t1||zeroval());h.find((t=>muCalc(t)==p))&&(d=1)}else if("CASES"==u.tipo){d=0,h=await _getvv();const v=u.t1||zeroval();h.find((t=>t==v))&&(d=1)}a[u.next].jlast=d?1:0,a[u.next].t1=u.t1,d||(l=u.next-1)}else m.add("manca select",u);break;case"ELSEIF":case"ELSEIFDEF":case"ELSEIFNDEF":case"ELSE":if(u.next)if(u.jlast)u.jlast=0,l=u.last-1;else{const g="ELSE"==u.tipo?1:"ELSEIF"==u.tipo?muCalc(await intvaluta(t,e,u.contenuto)):"ELSEIFDEF"==u.tipo?""!=await intvaluta(t,e,u.contenuto):""==await intvaluta(t,e,u.contenuto);a[u.next].jlast=g?1:0,g||(l=u.next-1)}else m.add("manca endif",u);break;case"ENDIF":case"ENDSELECT":case"CACHE":case"CVAR":break;case"PUSH":s.push();break;case"POP":s.pop();break;case"INC":case"I":if(i._stackmacro>500)m.add("stack chiamate macro troppo profondo!",u);else if(({macro:n,pars:o,xid:c}=await t.getmacro(u)||{}),n){i._inc=!0,i._stackmacro++;const b={},w=n.parametri?._;if(w&&w.length)for(const $ of w){const k=clean($.split("=")[0]||"",!0);k&&(b[k]=s.dictionary[k])}await n.impostaparametri(w,o);const y=await muEval(t,n,n.codice,i);for(const x in b)b[x]?s.dictionary[x]=b[x]:delete s.dictionary[x];r.push(...y),i._stackmacro--,i._inc=!1}break;case"RET":{const E=await intvaluta(t,e,u.contenuto);t.vari.savevars(E)}break;case"MACRO":case"M":case"FUNC":case"F":if(i._stackmacro>500)m.add("stack chiamate macro troppo profondo!",u);else{let{macro:C,pars:S,xid:O}=await t.getmacro(u)||{};if(C){const F=!!i.grafica||["F","FUNC"].includes(u.tipo),_=i.id||"",L=C.parametri?._,A={};if(F)s.push();else{if(C.head)for(const I of C.head)A[I.cod]=t.vari.var(I.cod);if(L&&L.length)for(const j of L){const M=(j.split("=")[0]||"").trim().toLowerCase();M&&(A[M]=s.dictionary[M])}}if(C.codice.length){if(i._stackmacro++,i.grafica&&"function"==typeof i.grafica){let z="",D="";S&&S.length?(z=S.find((t=>t.startsWith("#id"))),z?(z=await s.valuta(z.slice(4)),z.startsWith("#")?i.id=z:i.id=hash(`${l}${C.name}${_}${z}`),S=S.filter((t=>!t.startsWith("#id"))),D=i.id):i.id=hash(`z${_}${l}`)):i.id=hash(`z${_}${l}`);let N=t.pick.key;t.pick.key=i.id;const T=await i.grafica({tipo:u.tipo,id:D,pars:S,parametri:L,macro:C,options:i,vari:t.vari,amb:t});t.pick.key=N,r.push(T)}else{await C.impostaparametri(L,S);let W=t.vari.var("_rootnode");t.vari.add("_rootnode","0");const R=await muEval(t,C,C.codice,i);t.vari.add("_rootnode",W),r.push(...R)}i._stackmacro--}if(F)s.pop();else for(const V in A)A[V]?s.dictionary[V]=A[V]:delete s.dictionary[V];i.id=_}else m.add("Macro non trovata!",u)}break;case"SETDEF":{let J=getcolonne((u.contenuto||"").toLowerCase()),U=await dammivariante(t,n,J[0]),P=J[1]||"def_",K=J[2];if(P.endsWith("_")||(P+="_"),U&&U.rows){J=Object.keys(U.rows),K&&(J=J.filter((t=>t.startsWith(K))));for(let G of J){let B=`${P}${G}`;if(!s.dictionary[B]){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(",")}s.add(B,await intvaluta(t,e,torow(U.rows[G])))}}}}break;case"LET":case"LETS":{let q=u.contenuto.indexOf("="),X=-1;if(q>=0&&(X=u.contenuto.indexOf("=",q+1)),X<0){const Z=u.contenuto;if(q=Z.indexOf("="),q>0){const H=await intvaluta(t,e,Z.slice(0,q).trim());let Y=Z.slice(q+1).trim();Y="LET"==u.tipo?muCalc(await intvaluta(t,e,Y))||zeroval():await intvaluta(t,e,Y),s.add(H,Y)}}else{const Q=getcolonne(u.contenuto);for(const tt of Q)if(q=tt.indexOf("="),q>0){const et=await intvaluta(t,e,tt.slice(0,q));let at=tt.slice(q+1).trim();at="LET"==u.tipo?muCalc(await intvaluta(t,e,at))||zeroval():await intvaluta(t,e,at),s.add(et,at)}}}break;case"LETT":{const it=u.contenuto.indexOf("=");if(it>0){const st=await intvaluta(t,e,u.contenuto.slice(0,it).trim()),rt=await intvaluta(t,e,u.contenuto.slice(it+1).trim());s.add(st,rt)}}break;case"CZERO":"1"==u.contenuto?t._managezero=!0:t._managezero=!1;break;case"LOOK":case"LOOKB":{const nt=getcolonne(await intvaluta(t,e,u.contenuto)),ot=muCalc(nt[1]),ct=muCalc(nt[3]),lt=await dammivariante(t,n,nt[2]);if(lt&<.rows){const ut=Object.values(lt.rows).reduce(((t,e)=>{const a=parseInt(e.v[ct?ct-1:0]);return a&&("LOOKB"==u.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"==u.tipo?0:1/0,c:""});ut&&ut.c&&(t.vari.add(nt[0],lt.tovar(ut.c)),i.checkheader&&"function"==typeof i.checkheader&&await i.checkheader({variante:nt[0],valore:lt.tovar(ut.c),riga:u}))}else t.vari.add(nt[0],`${ot},no,no`)}break;case"LETV":case"LETM":case"DEF":{const ft=getcolonne(u.contenuto);if(ft)for(const ht of ft){let{v:dt,o:mt,fl:pt}=getcouple(ht);if(pt){dt=await s.valuta(dt),mt=await intvaluta(t,e,mt);const vt=await impostavariante(t,e,dt.trim().toLowerCase(),mt.trim().toLowerCase(),"LETM"==u.tipo?{t:"m"}:{t:"v"});i._stackmacro<=0&&i.checkheader&&"function"==typeof i.checkheader&&await i.checkheader({variante:dt,valore:vt,riga:u})}}}break;case"DO":{const gt=(u.contenuto||"").trim();let bt=!0;gt&&!muCalc(await intvaluta(t,e,gt))&&(bt=!1),u.next&&(bt||(l=u.next+1))}break;case"VARIANTE":case"FORVAR":case"FOR":{let wt,yt,$t,kt;if(i.oldstyle?(wt=u.contenuto.split(","),kt=wt[2]||"i",$t=wt[0],yt=wt[1]):(wt=getcolonne(u.contenuto||""),kt=wt[0]||"",$t=clean(wt[1],!0),yt=wt[2]||""),kt=kt.includes("$")?await intvaluta(t,e,kt):kt||"","FORVAR"==u.tipo||"VARIANTE"==u.tipo){const Et=await intvaluta(t,e,$t),Ct=Et?await dammivariante(t,e,Et):void 0;Ct?$t=Ct.tovec():($t=[],m.add("getvariante not found!",u))}else{const St=await intvaluta(t,e,$t||"");$t=$t?getcolonne(St):void 0}$t=$t||[];const xt=0;if(u.next){a[u.next].for={v:kt,elenco:$t,nc:xt,valido:yt};let Ot,Ft=!0;kt&&$t.length>0?xt>=$t.length?Ft=!1:(Ot=$t[xt],s.add(kt,Ot),yt&&(Ft=!muCalc(await intvaluta(t,e,yt)))):Ft=!1,Ft||(l=u.next-1)}else m.add("manca endfor/loop",u)}break;case"LOOP":{let _t=!0;u.contenuto&&!muCalc(await intvaluta(t,e,u.contenuto))&&(_t=!1),_t&&(l=u.prev-1);break}case"ENDFOR":if(!u.contenuto||muCalc(await intvaluta(t,e,u.contenuto)))if(u.for){const{v:Lt,elenco:At,valido:It}=u.for;if(Lt&&At.length>0&&u.for.nc<500)for(;;){if(u.for.nc++,u.for.nc<At.length){if(s.add(Lt,At[u.for.nc]),It&&muCalc(await intvaluta(t,e,It)))continue;l=u.prev;break}break}}else m.add("manca istruzione for",u);break;case"BREAK":case"EXIT":case"EXITFOR":u.next?u.contenuto.trim()?muCalc(await intvaluta(t,e,u.contenuto))&&(l=u.next):l=u.next:m.add("break outside loop",u);break;case"CONTINUE":u.next?u.contenuto&&!muCalc(await intvaluta(t,e,u.contenuto))||(l=u.next-1):m.add("continue outside loop",u);break;case"MSG":case"LOG":{const jt=await intvaluta(t,e,u.contenuto);logga(jt),m.add(jt)}break;default:{let Mt;if(u.contenuto.startsWith("!")){Mt=await intvaluta(t,e,u.contenuto);let zt="";const Dt=/^!(.\w+)[\s;,]\s*(.+)?$/gim.exec(Mt);if(Dt)if(Dt[1].startsWith("."))await getcbfunc(Mt,Mt.slice(1),[],s,t),zt="";else{const Nt=(Dt[1]||"").toLowerCase(),Tt=getcolonne(Dt[2]||"");zt=await getcbfunc(Mt,Nt,Tt,s,t)}zt&&outpush(r,zt)}else i.parsefnpunto&&"function"==typeof i.parsefnpunto&&u.contenuto.startsWith(".")?await i.parsefnpunto({dati:u.contenuto,output:r,id:i.id,vari:t.vari,amb:t}):(Mt=await intvaluta(t,e,u.contenuto),outpush(r,Mt))}}l++}return r}async function muGenerate_0(t,e,a,i,s){const r=t.genera[a];if(r){s.counter2=0;const n={};async function processavariante(o){if(s.isTestmode&&s.counter>s.isTestmode)return;if(o<r.vars.length){const a=r.vars[o];if(!n[a]){const i=await dammivariante(e,t,a),s=i?Object.keys(i.rows):void 0;if(s&&s.length>0){for(const t of s)e.vari.add(i.name,i.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 i=await muEval(e,t,t.formula[a],{limited:!0});if(i)for(const t of i){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 i=await muEval(e,t,t.formula[a],{limited:!0});i=i.join("\n").split("\n");for(const t of i)if(t){const e=getcolonne(t);l[a]||(l[a]=[]);const i={};for(let t=0;t<e.length;t++)i[`c${t}`]=e[t];l[a].push(i)}}await async function docallback(t,e,a,i,s,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=i.head[t]?i.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(s,o,n?a:void 0,r.counter,r.counter2),n=!1}}}(i,c,l,r,a,s)}await processavariante(0)}}const C=["l","a","p"],S=/^\{(:?(var|valid|formula|genera|header|v|f|g|h))[\s|}]/im,O=["s","g","h","p","q"];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:i}=checkmu(e,t.cat||"");this.name=a,this.cat=i,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&&C.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 i=this.amb.vari.var(t.cod);O.includes(t.t)||"string"==typeof i&&(i=i.split(",")[0]),a[t.cod]=i}}else if(this.parametri?._)for(const t of this.parametri._){const e=(t.split("=")[0]||"").trim().toLowerCase();let i=this.amb.vari.var[e];i=(i||"").split(",")[0],a[e]=i}return a}async setparametri(t){const e={},a=this.amb.ruleset||{};t||(t={}),this.dims&&C.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 i of this.head){const s=a[i.cod];s&&(s.islock?(i.visible="0",t[i.cod]=s.opz,i._islock=!0):t[i.cod]||(t[i.cod]=s.opz)),"g"!=i.t&&("z"!=i.t||t[i.cod]||(t[i.cod]="1"),i._v=t[i.cod]||"",e[i.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,i={}){if(e&&"string"==typeof e&&e.includes("$")&&(e=await intvaluta(this.amb,this,e)),i||(i={}),this.head){const _imposta=async(t,e,a,s)=>{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 s=this.amb.vari.var(r)||"";"thlm".includes(t.t)&&"string"==typeof s&&(s=s.split(",")[0]);let n=s;if("z"!=t.t||s||(this.amb.vari.add(r,"1"),s="1"),"m"==t.t&&t.spars){let e=t.spars;(e||"").includes("$")&&(e=await intvaluta(this.amb,this,e));const a=getcolonne(e);s=parseFloat(s||a[0])||0,(!a[1]||"").includes(";")&&(a[1]&&parseFloat(s)<a[1]&&(s=parseFloat(a[1])||0),a[2]&&parseFloat(s)>a[2]&&(s=parseFloat(a[2])||0)),s=String(s),this.amb.vari.add(r,s)}const o=await impostavariante(this.amb,this,r,e||t._v||s,t);if(t._v=void 0,s=this.amb.vari.var(r)||"","thl".includes(t.t)&&"string"==typeof s&&(s=s.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==s))))));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);i&&i[a.cod]&&(r=i[a.cod]),"string"==typeof r&&(r=r.split(",")[0],r&&r!=n&&r!=s?delete a._d:(a._v=e.toopz||s,a._d={cod:t.cod,opz:e.toopz}))}}))}return o}};let s,r=-1;if("#dim"==t)a=1;else{if(r=this.head.findIndex((e=>e.cod===t)),r<0)return;const i=this.head[r];s=await _imposta(i,e,r),a&&delete i._d}if(a)for(let t=r+1;t<this.head.length;t++)await _imposta(this.head[t],void 0,t);return s}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,i){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)}i||(i={}),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 i,s=a.substr(t+1);s.includes("$")&&(s=await intvaluta(this.amb,this,s)),this.head&&(i=this.head.find((t=>t.cod==e)))?i._v=s:await impostavariante(this.amb,this,e,s)}}if(this.head){let t=!0;for(const e of this.head){let s=await this.checkvalid(e.valid);a&&(s=!0),["g","g1","g2"].includes(e.t)?t=s:t&&s&&await this.setparametro(e.cod,i[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,e){let a,i;try{let s;if(({name:a,cat:i}=checkmu(t||this.name,e||this.cat||"")),this.name||(this.name=a),this.cat||(this.cat=i),this.azzera(),l&&(s=await l(i,a),"string"==typeof s&&(s.startsWith("{")||s.startsWith("["))&&(s=fromjson(s)),s&&s.head&&!Array.isArray(s.head)&&(s.head=[]),this.amb.checkscripts(s.linkscript),delete s.linkscript,s.head&&(s.dims=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}(s.dims))),s){if("string"==typeof s)await this.parsedata(s);else for(const t in s)this[t]=s[t];return!0}m.add(`missing cbGetFile: ${i}/${a}`)}catch(t){m.add(geterrdes(t),`macro.load: ${a}/${i}`)}}async loadAndCompile(t,e,a=!1){let i;const{name:s,cat:r}=checkmu(t,this.cat||e);return this.azzera(),h&&(i=await h(r,s)),i?(await this.parsedata(i,a),this.getmacro()):void m.add(`missing cbGetFile: ${s}/${r}`)}async#e(t,e,a,i){let s;const{name:r,cat:n}=checkmu(t,this.cat);if(h&&(s=await h(n,r)),!s)return[];if(s.includes("$1")&&i&&i.length>0)for(let t=1;t<i.length;t++)s=s.replaceAll(`$${t}`,i[t]);let o=muClComments(s);const c=[];e&&(o=o.filter((t=>!/^\{(:?(var|valid|formula|header|genera|v|f|h))[\s|}]/im.test(t))));for(const t of o){const i=S.exec(t);if(i)e=!i[1].startsWith(":"),c.push(t);else{const i=/^\s*\{i\s(.+)?\}/im.exec(t);if(i){const t=getcolonne(i[1]);if(!a.includes(t[0])){a.push(t[0]);const i=await this.loadinclude(t[0],e,a,t);Array.isArray(i)&&c.push(...i),a.pop()}}else c.push(t)}}return c}async parsedata(t,e=!1){if(this.azzera(),!t)return;const a=[];let i=muClComments(t),s=!1;const r=[];for(const t of i){const e=S.exec(t);if(e)s=!e[1].startsWith(":"),a.push(t);else{const e=/^\s*\{i\s(.+)?\}/im.exec(t);if(e){const t=getcolonne(e[1]),i=await this.#e(t[0],s,[t[0]],t);Array.isArray(i)&&a.push(...i)}else a.push(t)}}s=!1;let n=this.codice;for(const t of a){const e=S.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),i=a[0].trim().toLowerCase();e.rows[i]={annulla:0,v:a}}a.des&&(e.des=a.des),this.localvar[t]=e}i=this.valid,this.valid=[];for(const t of i){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))}i=r;const o=[];for(const t of i){const e=/^\s*([\w\-_]+)+[;,\s]\s*(.*)?$/im.exec(t);if(e){const t=getcolonne(e[2]),a=clean(e[1]);let i;if(a){i=o.find((t=>t.cod==a)),i||(i={cod:a,t:"t"},o.push(i));for(const e of t){const t=getcouple(e);switch(t.v){case"t":i.t=t.o;break;case"def":case"default":i.def=t.o;break;case"valid":case"colonna":case"hidden":t.o.startsWith("#")?this.formula[t.o.substring(1)]&&(i[t.v]=t.o):i[t.v]=t.o;break;default:i[t.v]=t.o}}}}}this.head=o,i=this.genera;const c={};for(const t in i)if(Array.isArray(i[t])){const e={codice:[],head:"",calcola:[],bom:[],vars:[],exclude:[]},a=/^\s*[!:]\s*(\w+)\s*(.*)$/i;for(const s of i[t]){const i=a.exec(clean(s));if(i)switch(i[1]){case"calcola":case"c":e.calcola=[...e.calcola,...getcolonne(i[2])];break;case"exclude":case"e":case"escludi":e.exclude=[...e.exclude,...getcolonne(i[2])];break;case"bom":case"db":e.bom=[...e.bom,...getcolonne(i[2])];break;case"vars":case"v":e.vars=[...e.vars,...getcolonne(i[2])];break;case"head":case"h":e.head=getcolonne(i[2]);break;default:this.errori.push(`genera ${t} => ${s}`)}else e.codice.push(s)}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 i=0;i<e.length;i++){const s=/^:p[;,\s]+(.*)?$/im.exec(e[i]);if(s)e[i]=null,a=!0,this.parametri[t]=getparalias(s[1]);else{const s=/^!(parametri|pars|p)[;,\s]+(.*)?$/im.exec(e[i]);s&&(e[i]=null,a=!0,this.parametri[t]=getparalias(s[2]))}}a&&(e=e.filter((t=>null!=t)))}return e=muClean(e,a)}}const F=/^\s*\{(:)?(var|deriva|valid|formula|header|genera|g|v|f|h)(\s.*)?\}/i;function verificaisvar(t,e){let a=!1;const i=[];for(let s=t;s<e.length;s++){const t=e[s].trim();let r=t.split("//")[0].trim();if(t.startsWith("/*"))a=!0;else if(a&&t.endsWith("*/"))a=!1;else if(!a){if(F.test(t))return{fl:!0,i2:s-1,cols:i};if(r.endsWith("\\"))return{fl:!1};if(t.startsWith(":h ")&&(r=r.substr(3).trim()),!r.startsWith(":")){const t=getcolonne(r);for(let e=0;e<t.length;e++){let a=t[e].length;t[e].includes(",")&&(a+=2),(!i[e]||i[e]<a)&&(i[e]=a)}}}}return{fl:!0,i2:e.length-1,cols:i}}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 i=this.d[a]??{};return t=t??{},this.d[a]={...i,...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:[]},i=!1;for(const s of e){const e=/^\s*\{(h|head|header)\s+(\w+)\}/im.exec(s);if(e)a={cod:e[2],des:e[2],r:[]},i=!1,t[e[2]]=a;else if(!/^\s*:/.exec(s)){const t=s.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&&(i||"sep"!=e.tipo?a.r.push(e):(a.des=e.des,a.valid=e.valid,a.visible=e.visible,i=!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;#i=void 0;#s=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,getcouple:getcouple,muCalc:muCalc,muEval:muEval,tipifree:O}}azzera(t=!1){this.imgpreview={},this.vari=new Variabile,this.ruleset={},this.fndotcallback&&this.vari.setfndot(this.fndotcallback),this.ruleheader="",t&&(this.macro={},this.sqcache={},this.varianti={},this.varelenco={},this.macroelenco={},this.scripts={},this.#a=void 0,this.#i=void 0,this.#s=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(f&&!this.varelenco[t]){const e=await f("headers",t,"_varianti");Array.isArray(e)?this.varelenco[t]=e:e.vars&&(this.varelenco[t]=e.vars,e.alias&&(this.#i=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.#i=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,i=[],s=0){this.item=clean(t,!0),this.rule=clean(e,!0),this.model=clean(a,!0),this.ruleset=toruleset(i),this.data=s||(new Date).toInt()}async getheader(t){let e;return!this.#a&&f&&(e=await f("headers",this.cat,"_headers"),this.parseheaderfrominfo(e)),this.#a||(this.#a={}),this.#a[t]}async getalias(){let t;return!this.#i&&f&&(t=await f("headers",this.cat,"_alias"),this.parseheaderfrominfo(t)),this.#i||(this.#i={}),this.#i}get deriva(){return this.#s,this.#s||[]}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 m.add("Macro non valida:"+e,t);let i=clean(a[1],!0);i.includes("$")&&(i=await this.vari.valuta(i));const s=getcolonne(a[2]),{name:r,cat:n}=checkmu(i,this.cat);this.cat=n;const o=`${n}/${r}`;if(!this.macro[o]){const e=new Macro(this,r);await e.load()?this.macro[o]=e:m.add(`macro fail to load ${o}`,t)}return i=this.macro[o],i?{macro:i,pars:s}:(m.add(`macro non trovata ${o}`,t),{})}catch(e){m.add(geterrdes(e),`ambiente.getmacro: ${t?.contenuto}`)}}async getvariante(t){const{name:e,cat:a}=checkmu(t,this.cat);let i=e,s={};if(a==this.cat&&this.#i&&this.#i[e]&&(s=this.#i[e]||{},i=s.cod),await this.#n(a),this.varelenco[a]&&!this.varelenco[a].includes(e))return;const r=`${a}/${i}`;let n;return this.varianti[r]?n=this.varianti[r]:(n=new Variante(this),await n.load(r,a),this.varianti[r]=n),s&&(s.des&&(n.des=s.des),s.vdef&&(n.vdef=s.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 i=a.getmacro();e("macros",{cod:t,info:JSON.stringify(i),isgenera:a.isgenera,isheader:a.isheader,iscodice:a.iscodice})}async barrecompila(t,e,a){const i=new CodiceBarra;await i.compila(t,e);for(const t in i.barre){a("barcodes",{cod:t,des:"",info:JSON.stringify(i.barre[t])})}return i}async tojson(t){let e;return u&&(e=await u("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.#i=void 0,this.#s=void 0,this.#r=void 0,f){const t=await f("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.#i&&e("infos",{cod:"alias",des:"",info:JSON.stringify(this.#i)}),this.#s&&e("infos",{cod:"deriva",des:"",info:JSON.stringify(this.#s)}),this.#r&&e("infos",{cod:"typos",des:"tipologie",info:JSON.stringify(this.#r)})}}async checkvarianti(t,e){if(!t||!e?.length)return;t=checkname(t),await this.#n(t);const a=this.varelenco[t],i=[];for(let s of e){s=clean(s,!0);const e=`${t}/${s}`;this.varianti[e]||a&&a.includes(s)&&i.push(s)}if(i.length&&c){const e=await c(t,i);if(e&&e.length)for(const a of e){const{name:e,content:i}=a,s=new Variante(this);s.setheader(e,t),i&&await s.loadContentExtended(i),this.varianti[s.key]=s}}}async getheaderfromdb(t){const e=await f("header",this.cat,t,!this.#s);let{head:a,rows:i,macros:s,deriva:r,llvars:n}=e;for(const t of i)t.cod=clean(t.cod),t.alias=clean(t.alias),t.t=clean(t.t);if(!n){n=new Set;for(const t of i)if("p"==t.tipo);else{const e=t.alias?t.alias:t.cod;n.add(e)}n=[...n]}this.#s||(this.#s=r),await this.#n(this.cat),a.cod=clean(a.cod),a.rule=clean(a.rule),a.ruledef=a.ruledef||[];const o=[],l=this.varelenco[this.cat];for(const t of n)this.varianti[`${this.cat}/${t}`]||l&&l.includes(t)&&o.push(t);if(o.length&&c){const t=await c(this.cat,o);if(t&&t.length)for(const e of t){const{name:t,content:a}=e,i=new Variante(this);i.setheader(t,this.cat),a&&await i.loadContentExtended(a),this.varianti[i.key]=i}}return{head:a,rows:i,macros:s}}async getlinkedmacros(t,e){const getkey=t=>t.includes("/")?t:`${this.cat}/${t}`,a=[];let i;if(t&&(i=getkey(t),this.macro[i]||a.push(t)),e&&"string"==typeof e){const t=e.split(";");for(const e of t)i=getkey(e),this.macro[i]||a.push(e)}if(a&&a.length>0&&l){const t=await l(this.cat,a);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 i=e.content[a];t[a]=i}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:i,cat:s}=checkmu(t,this.cat);a&&a.length&&(this.ruleset=toruleset(a));const r=`${s}/${i}`;if(!this.macro[r]){const e=await this.getheaderfromdb(i),{head:a,rows:n,macros:o}=e;await this.getlinkedmacros(a.rule,o);const c=new Macro(this,i);if(!a)return void m.add("Missing rule: "+t);if(a.rule){const t=this.macro[`${s}/${a.rule}`];if(t)for(const e in t)["cat","name","key"].includes(e)||(c[e]=t[e])}n&&n.length&&(c.head=n),this.macro[r]=c}this.ruleheader=r;const n=this.macro[r];return m.azzera(),await n.setparametri(e),n}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.#i=t.alias,this.#s=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}}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 _={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"}}},{Clear:L,Reset:A,Bold:I,Reverse:j,Red:M,Green:z,Yellow:D,Blue:N,Magenta:T,Cyan:W,White:R}=a();var V=o(process.argv);console.log("----------------------------------------------------------------------------------------"),console.log(`${I}${W}${I}Markuno:${A} command line utility del linguaggio (c) Croswil 2024 v. ${D}2.1.84${A}`),console.log("----------------------------------------------------------------------------------------");var J={FOLDERBASE:"./",DBWORK:"./data/app.db",FOLDERCAT:"./data/mu",FOLDEROUT:"./out",CAT:"cat"};const U=".lasts.markuno";t.existsSync(U)&&(J=JSON.parse(t.readFileSync(U)));var P=V._;(V.h||V.help||!P[2])&&(console.log(`Uso: ${I}markuno <funzioni> <[catalogo/]markuno> [opzioni]${A} \n${I}${W}Funzioni:${A} (seleziona una tra le seguenti)\n ${R} c, compila ${A}${z} compila un catalogo/Markuno + Codici Barra\n ${R} d, dump ${A}${z} compila e salva il compilato in formato json\n ${R} e, esegui ${A}${z} esegui un file markuno \n ${R} f, formatta ${A}${z} Formattazione di un file .mu o .var\n ${R} g, genera${A}${z} generatore di codice \n ${R} w, watch ${A}${z} abilita il watch su un file markuno \n ${R} gw <markuno> <maxele> ${A}${z} Genera con wath (solo i primi maxele=20 elementi senza salvare\n${I}${W}Opzioni:${A}${z}\n ${R} -h, --help${A}${z} mostra l'help\n ${R} -c, --cat <cat>${A}${z} catalogo (default='${J.CAT}' ) \n ${R} -d, --dbwork ${A}${z} database principale (default='${J.DBWORK}')\n ${R} -i, --init <folder>${A}${z} cartella di lavoro (default='${J.FOLDERCAT}' ) \n ${R} -o, --out <folder>${A}${z} cartella di output (default='${J.FOLDEROUT}' ) \n ${R} -x, --xlsx${A}${z} output in formato excel (generatore)\n `),process.exit(0));let K=0;const G="./",B=V.d||V.dbwork||J.DBWORK,q=V.i||V.init||J.FOLDERCAT,X=V.o||V.out||J.FOLDEROUT,Z=V.c||V.cat||J.CAT;var H=void 0,Y=!1;t.existsSync(q)||writeerror(`Manca la cartella di lavoro: ${q}`),J=Object.assign(J,{FOLDERBASE:G,DBWORK:B,FOLDERCAT:q,FOLDEROUT:X,CAT:Z}),t.writeFileSync(U,JSON.stringify(J,null,2)),t.existsSync(q)||t.mkdirSync(q,{recursive:!0});const Q=V.x||V.xlsx;function writeerror(t){var e=t.stack.toString().split("\n");e.splice(0,1),e=e.filter((t=>!/module/.test(t)&&!/node\:/.test(t))),console.log(`${M}${t.message}${A}\n${e.join("\n")}`),process.exit(1)}function dbmu(a){var s=e.join(q,`mu_${a}.db`);t.existsSync(s)||r(s,_,"mus");var o=i.db(s);return n(_),o}function getinfofile(e){var a="",i="",s=`${e}.txt`;t.existsSync(s)&&(a=t.readFileSync(s).toString());s=`${e}.md`;return t.existsSync(s)&&(i=t.readFileSync(s).toString()),{def:a,md:i}}function getinfo(a,i){var s=t.readdirSync(i),r={cat:a,info:"",mu:[],var:[],inc:[]};for(var n of s){var o=e.join(i,n),c=e.extname(n),l=e.basename(n,c);"__info.md"==n?r.info=t.readFileSync(o).toString():".mu"==c?r.mu.push(l):".var"==c?r.var.push(l):".inc"==c&&r.inc.push(l)}return r}async function xlsexport(t,e,a){const i=await import("xlsx"),s=i.utils.json_to_sheet(t),r=i.utils.book_new();i.utils.book_append_sheet(r,s,e),i.writeFile(r,`${a}.xlsx`,{compression:!0})}async function xlsimport(t,e){const a=await import("xlsx");var i=a.readFile(t).Sheets[e];return a.utils.sheet_to_json(i)}async function cbGetMacro(e,a){var i=`${q}/${e}/${a}.mu`;return t.existsSync(i)?t.readFileSync(i).toString():""}async function cbGetVariante(e,a){var i=`${q}/${e}/${a}.var`;return t.existsSync(i)?t.readFileSync(i).toString():(m.add(`missing var: ${e}, ${a}`,{t:"cbGetVariante"}),"")}async function cbFunc(t,e,a){m.add(`missing fun: ${t}`,{t:"cbFunc"})}async function cbInfo(e,a,i){if(Array.isArray(i)){var s=[];for(var r of i){var n=await cbInfo(e,a,r);n&&s.push({tipo:r,value:n})}return s}switch(e){case"filter":if(!H||!i&&!i[0])return[];if(Y)return[];var o=H.all("select item,model,rule,varfilter,result,result2,exclude,exclude2 from limits where variant=?",i[0]);for(var c of o)c.valfilter=JSON.parse(c.varfilter||"{}"),c.result=JSON.parse(c.result||"[]"),c.result2=JSON.parse(c.result2||"[]");return o;case"headers":var l;return l="_typos"==i?`${q}/${a}/typos.json`:`${q}/${a}/${i}.inc`,t.existsSync(l)?t.readFileSync(l).toString():""}}async function cbGetFile(a,i){if(t.existsSync(e.join(G,i)))return t.readFileSync(e.join(G,i)).toString();const s=`${q}/${a}/${i}`;if(t.existsSync(s))return t.readFileSync(s).toString();m.add(`missing file: ${s}`,{t:"cbGetFile"})}function checkfilemu(a,i){var s=e.extname(i);[".mu",".var",".inc"].includes(s)||(s=".mu",i+=".mu");var r=e.join(q,a||Z),n=e.join(G,i);if(t.existsSync(n))return{file:n,folder:r,diversi:!0};var o=i.indexOf("/");if(o>0&&(a=i.substr(0,o),i=i.substr(o+1),r=e.join(q,a||Z),!t.existsSync(r)))throw new Error("missing folder: "+r);if(n=e.join(r,i),t.existsSync(n))return{file:n,folder:r,diversi:!1,ext:s};throw new Error(`non trovato il file: ${i} su ${r}`)}async function dowatch(e,a){var{file:i,folder:s,diversi:r}=checkfilemu(e.cat,P[3]||""),n=parseInt(P[4]||"10");console.log(`Start Watching: ${W}${I}${i}${A}`),t.watch(s,(async(t,i)=>{i&&await a(e,n)})),r&&t.watch(i,(async(t,i)=>{i&&await a(e,n)})),await a(e,n)}async function genera(a,i){var{file:s,folder:r,diversi:n}=checkfilemu(a.cat,P[3]||"");if(!t.existsSync(s))throw new Error("Manca il file: "+s);var o=e.extname(s),c=e.basename(s,o),l=new Macro(a,c),u=(new Date).valueOf();await l.loadAndCompile(`${c}${o}`);var f=(new Date).valueOf(),h={},d={},m=[],p=[],v=[];if(await async function muGenerate(t,e,a,i,s=0){if(t.isgenera&&i){const a={counter:0,keys:{},isTestmode:s};for(const s in t.genera)await muGenerate_0(t,e,s,i,a);return!0}}(l,a,0,((t,e,a,s,r)=>{if(i){var n=[];for(var o in e){var c=e[o];if("number"==typeof c&&(c=Math.round(1e4*c)/1e4+""),"__id"!=o){var l=n.length;v[l]||(v[l]=o,p[l]=o.length),p[l]<c.length&&(p[l]=c.length),n.push(c)}}m.push(n)}else{var u=t.split("_")[0]||u;if(h[u]||(h[u]=[]),h[u].push(e),e.cod&&(d[u]=!0,a))for(var f in a){var g=`${u}_${f}`;h[g]||(h[g]=[]);var b=a[f];for(o=0;o<b.length;o++){var w=b[o];h[g].push({padre:e.cod,i:o,comp:w.c0,qt:muCalc(w.c1),des:w.c2})}}}}),i),i){for(var g=0;g<v.length;g++)v[g]=v[g].padEnd(p[g]," ");for(var b of(console.log(`${D}${v.join(" | ")}${A}`),m)){for(g=0;g<b.length;g++)b[g]=b[g].padEnd(p[g]," ");console.log(b.join(" | "))}}else{var w=(new Date).valueOf(),y=0;for(var $ in d)y+=h[$].length,h[$].sort(((t,e)=>(t.cod||"").localeCompare(e.cod||"")));h._errori=l.geterrori(),t.writeFileSync(e.join(X,`gen_${c}.json`),JSON.stringify(h,null,2));const a=e.join(X,`gen_${c}.xlsx`);var k=(new Date).valueOf();if(Q){const t=await import("xlsx"),e=t.utils.book_new();for(var x in h){const a=t.utils.json_to_sheet(h[x]);t.utils.book_append_sheet(e,a,x)}t.writeFile(e,a,{compression:!0})}else t.existsSync(a)&&t.unlinkSync(a);var E=(new Date).valueOf();console.log(`${D}${I}EVAL........: ${y}${A}${W} rows\n${W}load/compile: ${I}${D}${f-u}${A}${W} ms.\n${W}generate....: ${I}${D}${w-f}${A}${W} ms.\n${W}save JSON...: ${I}${D}${k-w}${A}${W} ms.\n${W}save XLSX...: ${I}${D}${E-k}${A}${W} ms.\n--------------------------------\n${W}${I}TOTALE......: ${D}${E-u}${A}${W} ms.`)}}async function doesegui(a){var{file:i,folder:s,diversi:r}=checkfilemu(a.cat,P[3]||""),n=(new Date).valueOf(),o=t.readFileSync(i).toString(),c=new Macro(a,P[3]||"");K++,c.parsedata(o);var l=(new Date).valueOf(),u=await muEval(a,c,c.codice,{limited:!1,oldstyle:!0,localvar:c.localvar}),f=(new Date).valueOf();console.log(`${u.join("\n")}`),console.log(`${D}${I}EVAL ${K}${A}: ${i} => ${W}load:${I}${D}${l-n}${A}${W}ms. -- exec:${I}${D}${f-l}${A}${W}ms.${A}\n----------------------------------------------\n${m.toString()}`),t.writeFileSync(e.join(X,"logs.json"),JSON.stringify({loadandcompile:l-n,execute:f-l,vari:a.vari.dump(),codice:c.codice,errori:c.errori},null,2)),t.writeFileSync(e.join(X,"out.txt"),u.join("\n"))}await async function main(){try{var a=function muInit(t,e,a,i,s,r,n){const o=new Ambiente(t);return setcallbacks(e,a,i,s,r,n),o}(Z,cbGetMacro,cbGetVariante,cbFunc,cbInfo,cbGetFile),r=e.join(q,Z);if(t.mkdirSync(X,{recursive:!0}),!t.existsSync(r))throw new Error(`Manca il catalogo: ${Z} su ${q}`);var n=(new Date).valueOf();switch(P[2].trim().toLowerCase()){case"g":case"genera":await genera(a,0);break;case"d":case"dump":await async function dump(a){var{file:i,folder:s,diversi:r}=checkfilemu(a.cat,P[3]||"");if(!t.existsSync(i))throw new Error("Manca il file: "+i);var n,o,c=e.extname(i),l=e.basename(i,c);if(console.log(l,c),".mu"==c){var u=new Macro(a,l);await u.loadAndCompile(`${l}${c}`),n=u.getmacro(),o=e.join(X,l+".json")}else".var"==c&&(n=await async function newVariante(t,e,a){const i=new Variante(a);return await i.load(t,e),i}(l,Z,a),o=e.join(X,l+".var.json"));n&&(t.writeFileSync(o,JSON.stringify(n,null,2)),console.log(`${W}${I}Dump: ${A}${D}${o}`))}(a);break;case"gw":await dowatch(a,genera);break;case"c":case"compila":await async function compila(a){var r,n,o=e.join(q,Z);if(!t.existsSync(o))throw new Error("Manca il catalogo "+Z);if(!t.existsSync(B))throw new Error("Manca il database di lavoro: "+B);if(t.existsSync(B))if((H=i.db(B)).esisteTabella("artbarre")){Y=!0;var c=H.all("select cod cod,des des,flfm fm,coderr coderr,codalt codalt from artbarre order by cod ");for(var l of(n={},c)){(d=l.cod.trim().toLowerCase().substr(1))&&(n[d]={des:l.des,fm:l.fm,coderr:l.coderr.trim().toLowerCase(),codalt:l.codalt.trim().toLowerCase()})}r=H.all("select codicebarra barcode,diml l,dima a,dimp p,cod cod from articoli where codicebarra like ? order by codicebarra","+%")}else r=H.all("select barcode,l,a,p,cod from items where barcode>'' order by barcode"),n={};else console.warn("MISSING DBWORK (barre e limits)");var u=dbmu(Z);u.begin(),u.run("delete from variants"),u.run("delete from macros"),u.run("delete from barcodes"),u.run("delete from extras");var f=getinfo(Z,o);for(var h of(await a.compila(f,((t,e)=>{if(e){if("macros"===t){var{def:a,md:i}=getinfofile(`${e.cod}.mu`);e.def=a,e.md=i}s(u,t,e,"mus")}})),f.var)){var d,m=`${o}/${h}.var.txt`;if(t.existsSync(m))(d=muLimits(t.readFileSync(m).toString()))&&d.length&&s(u,"extras",{tipo:"l",cod:h,info:JSON.stringify(d)},"mus")}await a.barrecompila(r,n,((t,e)=>{s(u,t,e,"mus")})),s(u,"infos",{cod:"info",des:f.cat,info:JSON.stringify({cat:f.cat,md:f.info})},"mus"),H&&H.chiudi();u.commit(),u.chiudi()}(a),console.log(`Compilazione catalogo: ${M}${I}${Z}${A}: ${D}${(new Date).valueOf()-n}ms.`);break;case"x":case"e":case"esegui":await doesegui(a);break;case"f":case"format":!function formatta(e){var{file:a,folder:i,diversi:s,ext:r}=checkfilemu(e.cat,P[3]||"");if(t.existsSync(a)){var n=t.readFileSync(a).toString(),o=".var"==r;n=function muFormatcode(t,e){const a=t.split("\n"),i=[];let s=0,r=!1,n=!1,o=[],c=e;if(c){const t=verificaisvar(0,a);c=t.fl,c&&(o=t.cols)}for(let t=0;t<a.length;t++){const e=a[t];let l=e.trim();const u=l.split("//");let f=u[0].trim();u.splice(0,1);const h=u.length?` // ${u.join("//").trim()} `:"";if(l.startsWith("/*"))r=!0,i.push(l);else if(r&&l.endsWith("*/"))r=!1,i.push(l);else if(r)i.push(e);else{const e=F.exec(l);if(e){if(i.push(l),s=e[1]?0:1,/^\s*\{(var|deriva|header|v|h)(\s.*)?\}/i.test(l)){const e=verificaisvar(t+1,a);c=e.fl,c&&(o=e.cols)}else c=!1;n=!1;continue}if(c)if(f.startsWith(":")&&!f.startsWith(":h ")||!f)i.push(l);else{let t=" ";f.startsWith(":h ")&&(f=f.substr(3).trim(),t=":h ");const e=getcolonne(f);for(let t=0;t<e.length;t++)e[t].includes(",")&&(e[t]=`"${e[t]}"`),e[t]=e[t].padEnd(o[t]," ");i.push(`${t}${e.join(" , ")} ${h}`)}else{const t=" ".repeat(s>=0?s:0);if(n)i.push(`${t} ${l}`);else{let e="";l.startsWith("#")&&(e=l.substring(1).split(" ")[0].toUpperCase(),l="#"+e+l.substring(e.length+1)),["IF","IFDEF","IFNDEF"].includes(e)?l.indexOf("#",2)<0?(i.push(`${t}${l}`),s++):(l=l.replace(/#([\w]+)/g,((t,e)=>"#"+e.toUpperCase())),i.push(`${t}${l}`)):["FOR","SELECT","FORVAR","VARIANTE","DO"].includes(e)?(i.push(`${t}${l}`),s++):["ELSEIF","ELSE","ELSEIFDEF","ELSEIFNDEF","CASE","CASES","DEFAULT"].includes(e)&&s>0?i.push(" ".repeat(s>0?s-1:0)+l):["ENDIF","ENDSELECT","LOOP","ENDFOR"].includes(e)?(i.push(" ".repeat(s>0?s-1:0)+l),s--,s<0&&(s=0)):l.startsWith("_ ")||l.startsWith(":")?i.push(l):i.push(t+l)}n=f.endsWith("\\")}}}return i.join("\n")}(n,o),t.writeFileSync(a,n),console.log(`formatted: ${o} ${W}${I}${a}${A}`)}}(a);break;case"w":case"watch":await dowatch(a,doesegui);break;default:throw new Error("Funzione non contemplata (g,c,b,x)")}}catch(t){writeerror(t)}}();export{dbmu,getinfo,getinfofile,xlsexport,xlsimport};
|
|
2
|
+
import t from"fs";import e from"path";import{init as a,database as i,insertorupdate as s,checkdb as r,setstruttura as n}from"croswil_lib";import o from"minimist";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)}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 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(),i="\0";e=a.map((e=>`${e}${i}${String(t[e])}`)).join(i)}let a=2166136261,i=2218511855;for(let t=0;t<e.length;t++){const s=e.charCodeAt(t);a^=s,a+=a<<5^2779096485,i^=a,i=((i<<3)+s^2134516169)>>>0}return a>>>=0,a.toString(16)+i.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 c,l,u,f,h,d;const logga=(...t)=>{d?d(t):console.log(...t)};function setcallbacks(t,e,a,i,s,r){l=t,c=e,u=a,f=i,h=s,d=r}function clean(t,e=!1){return e?(t||"").trim().toLowerCase():(t||"").trim()}function getcouple(t,e="=",a=!0){const i=(t=t||"").indexOf(e);return i>=0?{v:clean(t.substring(0,i),a),o:t.substring(i+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 i=[];for(let a=t;a<=e;a++)i.push(a+"");return i}if(!/["({[]/.test(t))return t.split(/[,;]/).map((t=>t.trim()));const i=[];let s="",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)s+=a;else{const t=s.trim();i.push(t),s=""}}const o=s.trim();return o&&i.push(o),i.map((t=>(t=t.trim(),!e&&(t.startsWith('"')&&t.endsWith('"')||t.startsWith("(")&&t.endsWith(")"))?t.slice(1,-1):t)))}const parsevar=(t,e,a,i,s=!1)=>{const r=["[","(","{"],n=["]",")","}"];i||(i="["==a?"]":"("==a?")":"}");const o=r.includes(a);let c=1,l=0;const u=[];for(let f=e;f<t.length;f++)if(o&&r.includes(t[f])||t[f]==a)c++;else if(o&&n.includes(t[f])||t[f]==i){if(c--,0==c&&t[f]==i)return u[l]=t.substring(e,f),{i:f,res:u}}else if(":"==t[f])1==c&&(u[l]=t.substring(e,f),e=f+1,l++);else if("\n"==t[f]&&s)return{i:f,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[i,s]of Object.entries(t))"function"==typeof s||e&&e.includes(i)||(a[i]=getOggetto(s,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 m=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")}};const p=/(?<!\w)\(/g,v=/^-?[0-9.]+$/,g=/^(\w+)(!)?\[(.*)?\]$/,b=/[0-9.]/,w=/[+\-*/^%]/,y=/[a-zA-Z]/i;function valutaparentesi(t){for(t=(t+"").trim();;){const e=p.exec(t);if(!e)break;{const{i:a,res:i}=parsevar(t,e.index+1,"(",")");if(a<=0)break;t=t.substring(0,e.index)+valutaparentesi(i[0])+(a>=0?t.substring(a+1):"")}}return function operatoricomparazione(t){let e,a;const i={"||":()=>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 s=-1,r="";for(const e in i)if(s=t.indexOf(e),s>=0){r=e;break}return-1!==s?(e=t.slice(0,s),a=t.slice(s+r.length),i[r]&&i[r]()?1:0):muCalcbase(t)}(t=function valutainsiemi(t){if(t.includes("[")){function resinisiemi(t){const e=t[1],a=!!t[2],i=getcolonne(t[3]);for(const t of i)if(t==e)return a?"0":"1";return a?"1":"0"}for(;;){const e=g.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 $={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 w.test(a)?(e++,a):null}function parsePrimary(){if("+"===t[e]||"-"===t[e]){return("-"===t[e++]?-1:1)*parsePrimary()}if(b.test(t[e]))return function parseNumber(){const a=e;for(;e<t.length&&b.test(t[e]);)e++;return Number(t.slice(a,e))}();if("("===t[e]){e++;const a=parseExpr();return")"===t[e]&&e++,a}return y.test(t[e])?function parseFunctions(){const a=t.slice(e);if(!a)return 0;for(const[i,s]of Object.entries($)){const r=new RegExp(`^(${i})\\(`,"i").exec(a);if(r){e+=r[0].length;let a=[];for(;;){let i=parseExpr();if(a.push(i),")"===t[e]){e++;break}if(","!=t[e])break;e++}return s(...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 v.test(e)?Number(e)||0:valutaparentesi(t)||0}const tonum=(t,e=-1)=>{if(!t)return 0;let a=0;if("number"==typeof t)a=t||0;else if("string"==typeof t){const e=(t=t.replaceAll(",",".")).match(/^-?[0-9.]+$/);a=e&&e.length>0?Number(e[0])||0:muCalc(t)}if(e>=0)switch(e){case 0:a=Math.round(a);break;case 1:a=Math.round(10*a)/10;break;case 2:a=Math.round(100*a)/100;break;case 3:a=Math.round(1e3*a)/1e3;break;case 4:a=Math.round(1e4*a)/1e4;break;case 5:a=Math.round(1e5*a)/1e5;break;case 6:a=Math.round(1e6*a)/1e6}return a||0},k=100;function valutavar(t,e){const a=e[0]||"";if(!a)return"";if(t.counter>=k)return a;const i=valuta0(t,a);let s;if(t.stl[i])s=`-- R:${i} --`;else{const e=t.var(i);if(isObject(e))return e;t.stl[i]=!0,s=valutabase(t,e),delete t.stl[i]}if(t.counter>=k)return a;if(e[1]){let a=getcolonne(s);if("l"==e[1])return String(a.length);const i=valuta0(t,e[1]);let r;if(/^[\d.]+$/.test(i)){let t=i.split(".").map((t=>parseInt(t)));for(let e=0;e<t.length-1;e++){let i=t[e];if(!(i>=0&&i<a.length))return"";a=getcolonne(a[i])}r=t[t.length-1]}else r=muCalc(i);if(!(r>=0&&r<a.length))return"";for(s=valuta0(t,a[r]);;){let e=s.indexOf("$[");if(e<0)break;const{i:a}=parsevar(s,e+2,"[","]");if(a<e)break;let i=s.slice(e+2,a);s=s.substring(0,e)+valutaquadra(t,i)+s.substring(a+1)}}if(e[2]){const a=muCalc(valuta0(t,e[2]));if(a){let i=0;return e[3]&&(i=muCalc(valuta0(t,e[3]))),a<0?s.slice(a):i?s.substring(a-1,a+i-1):s.substring(a-1)}}return s}function valutaquadra(t,e){let a=getcolonne(e||"");const i=clean(a[0]);function replacecharcode(t){return"\\t"==t?"\t":"\\n"==t?"\n":(t||"").replace(/&(\d+)/g,((t,e)=>String.fromCharCode(parseInt(e))))}switch(i){case"set":{const e=valuta0(t,a[1]||""),i=valuta0(t,a[2]||"");t.add(e,t.var(i))}break;case"ex":{const e=valuta0(t,a[1]||"");let i=valuta0(t,a[2]||"");i||(i=",");const s=muCalc(valuta0(t,a[3]||"")),r=e.split(i);return s>0&&r[s-1]||""}case"ex2":{const e=replacecharcode(a[1]||""),i=muCalc(valuta0(t,a[2]||""));a.splice(0,3);return a.join(";").split(e)[i>0?i-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"==i){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 i=a[1]||"";return e?a[3].split(i)[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]||""),i=muCalc(valuta0(t,a[2]||"")),s=muCalc(valuta0(t,a[3]||""));return e.substring(i-1,i+s-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 i.startsWith(".")?{fun:e,pars:[]}:{fun:i,pars:a}}}function valuta0(t,e){if(e+="",t.counter>=k)return e;for(;;){const a=/\$([{(])/im.exec(e);if(!a)break;{const i=a.index,{i:s,res:r}="("==a[1]?parsevar(e,i+2,"(",")"):parsevar(e,i+2,"{","}");let n=valutavar(t,r);if(isObject(n))return n;e=valuta0(t,e.substring(0,i))+n+(s>=0?valuta0(t,e.substring(s+1)):"")}}return e=(e=e.replace(/\$([a-z|][\w|.]*)/gi,((e,a)=>{let i="";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)){i=e+i;break}i=a.slice(-1)+i,a=a.substring(0,a.length-1)}return i}))).replace(/\$(\d+):(\d+)(:(\d+))?/g,((t,e,a,i,s)=>{s=s?+s:1;const r=[];for(let t=+e;t<=+a;t+=s)r.push(t.toString());return r.join(";")}))}function valutabase(t,e){return e&&(t.counter++,t.counter<=k&&(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 i=[];for(let a=t;a<=e;a++)i.push(a+"");return i}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 i=Variabile.sanitizeKey(t);if(i.startsWith(".")&&this.fndotcallback){const t=this.fndotcallback(i.toLowerCase());if(t)return toformat(t,e)}if(Variabile.isValidKey(i)){const t=i.toLowerCase(),a=/^([\w][\w\d]*)([.[])/.exec(t);if(a){const i=this.dictionary[a[1]];if(i&&"object"==typeof i)return toformat(function objval(t,e){const a=e.split(".");let i=t;for(let t=0;t<a.length;t++){const e=a[t],s=e.match(/(.*?)\[(\d*)\]/);if(s){if(s[1]&&(i=i[s[1]]),void 0===i)return"";i=i[parseInt(s[2],10)||0]}else switch(e){case"_k":i=(Object.keys(i)||[]).join(",");break;case"_v":i=Object.values(i)||[];break;case"_l":i=i.length||0;break;default:i=i[e]}if(void 0===i)return""}return"number"==typeof i?i+"":i}(i,("["==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(t)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 i=Object.keys(this.dictionary).filter((e=>e.startsWith(t)));for(let t of i)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}=${e}`)}}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 i=0;i<20;i++){const i=e.lastIndexOf("$[");if(!(i>=0)){e=valutabase(t,e);break}{const{i:s,res:r}=parsevar(e,i+2,"[","]"),n=valutabase(t,e.substring(0,i)),o=r?r[0].startsWith(".")?valutabase(t,r.join(":")):valutabase(t,r[0]):"",c=s>=0?valutabase(t,e.substring(s+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:i}=parsevar(t,e+1,"{","}");if(a<0)return t;t=t.substring(0,e)+muCalc(i[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,i,s=!1;return t.startsWith("#")&&(s=!0,t=t.slice(1)),i=t.indexOf("="),i>0?(e=clean(t.slice(0,i)),a=t.slice(i+1)):(i=t.indexOf(":"),i>0?(e=clean(t.slice(0,i)),a=t.slice(i+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)&&(s=!0),s&&(a=muCalc(a)),{k:e,v:a}}}class CodiceBarra{constructor(){this.barre={}}azzera(){this.barre={}}oriented(t,e,a,i){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:i};case"2":return{t:t,x:e,y:i,z:a};case"5":return{t:t,x:e,y:a,z:i};case"4":return{t:t,x:i,y:e,z:a};case"3":return{t:t,x:a,y:i,z:e};case"6":return{t:t,x:i,y:a,z:e};default:return{t:"1",x:a,y:e,z:i}}}async getcode(t,e,a,i,s){let[r,n]=t.split(":");n=n||"";const getcode0=async(t,r)=>{let n=this.barre[t];if(!n&&s&&(n=await s(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,i),f={barra:t,fm:n.fm,t:o,liv:r,items:n.r.length,err:""};let h=n.r;if(u){const t=h.filter((t=>t.z===u||!t.z));t.length>0?h=t:f.err=`spessore non coerente: ${u}`}if("l"==o||"a"==o||"p"==o){const t=h.find((t=>t.x>=c));if(t)return{c:t.c,fm:t.x==c?0:1,x1:t.x,x:c,extra:f}}else{let t=h.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:f};if(0!=n.fm&&(t=h.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:f};if(0!=n.fm&&2!=n.fm&&(t=h.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:f}}return n.codalt&&r<5?await getcode0(n.codalt,r+1):{c:n.coderr,fm:9,x:c,y:l,z:u,extra:f}};return await getcode0(r,0)}compila(t,e){e||(e={});const a={};if(Array.isArray(t)){for(const i of t)if(i.cod=clean(i.cod),i.barcode=clean(i.barcode),i.barcode.length>2&&"+"==i.barcode[0]){i.barcode=i.barcode.substr(1);const t=this.oriented(i.barcode.substr(0,1),i.l,i.a,i.p);t.c=i.modello?{c:i.cod,m:i.modello}:i.cod,a[i.barcode]||(a[i.barcode]={t:i.barcode.substr(0,1),r:[]},e[i.barcode]&&(a[i.barcode]=Object.assign(e[i.barcode],a[i.barcode]))),a[i.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 x="IFDEF|IFNDEF|SETDEF|CZERO|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 muClComments(t,e){const a=(i=t,i.replace(/("(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*')|\/\*[\s\S]*?\*\//g,((t,e)=>e||""))).split(/\r?\n/);var i;const s=[];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 s.push(a)}return s}function muClean(t,e=!1){if(!Array.isArray(t))return void m.add("muClean: expected array!");const a=[];function addgen(t){if(a.length>0&&""==a[a.length-1].tipo){const i=a[a.length-1];e||!(!t.startsWith("!")&!t.startsWith("."))||t.startsWith("$")||t.startsWith("{")||t.startsWith("#")||i.contenuto.startsWith("!")||i.contenuto.startsWith(".")||i.contenuto.startsWith("$")||i.contenuto.startsWith("{")||i.contenuto.startsWith("#")?a.push({tipo:"",contenuto:t}):i.contenuto=i.contenuto+"\n"+t}else a.push({tipo:"",contenuto:t})}for(const e of t){const t=e.match(/^#([\w.]+)\s*(.*)$/);if(t){let i=t[1].toUpperCase().trim(),s="";if(i.includes(".")){const t=i.split(".");i=t[0],s=t[1]}if(x.includes(i)){const e=t[2];if("IF"!==i&&"IFDEF"!=i&&"IFNDEF"!=i||!e.includes("#")){const e={tipo:i,contenuto:t[2]};s&&(e.tipo2=s),a.push(e)}else{let s=e.match(/^(.*?)\s*#\s*(\w+)\s*(.*?)\s*#\s*(\w+)\s*(.*)$/);s?(a.push({tipo:i,contenuto:s[1].trim()}),a.push({tipo:s[2].toUpperCase(),contenuto:s[3]}),a.push({tipo:"ELSE",contenuto:""}),a.push({tipo:s[4].toUpperCase(),contenuto:s[5]}),a.push({tipo:"ENDIF",contenuto:""})):(s=e.match(/^(.*?)\s*#\s*(\w+)\s*(.*)$/),s?(a.push({tipo:i,contenuto:s[1].trim()}),a.push({tipo:s[2].toUpperCase(),contenuto:s[3]}),a.push({tipo:"ENDIF",contenuto:""})):a.push({tipo:t[1].toUpperCase(),contenuto:t[2]}))}}else addgen(e)}else addgen(e)}let i=0,s=0,r=0,n=[],o=[],c=[];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":s++,o[s]={pos:t,bk:[]};break;case"LOOP":case"ENDFOR":if(s>0){const{pos:i}=o[s];for(const e of o[s].bk)e.next=t,e.prev=i;e.prev=i,a[i].next=t,s--}break;case"BREAK":case"EXIT":case"EXITFOR":case"CONTINUE":s>0&&o[s].bk.push(e);break;case"IF":case"IFDEF":case"IFNDEF":i++,n[i]={pos:t,bk:[e]};break;case"SELECT":r++,c[r]={pos:t,bk:[e],first:t};break;case"ELSEIF":case"ELSEIFDEF":case"ELSEIFNDEF":case"ELSE":if(i>0){const{pos:s}=n[i];n[i].bk.push(e),a[s].next=t,n[i].pos=t}break;case"CASE":case"CASES":case"DEFAULT":if(r>0){const{pos:i,first:s}=c[r];c[r].bk.push(e),a[i].next=t,e.first=s,c[r].pos=t}break;case"ENDIF":if(i>0){const{pos:e,next:s}=n[i];a[e].next=t;for(const e of n[i].bk)e.last=t;i--}break;case"ENDSELECT":if(r>0){const{pos:e,next:i}=c[r];a[e].next=t;for(const e of c[r].bk)e.last=t;r--}}}return a}function muLimits(t){const e=muClComments(t),a=[];let i;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])?(i={},a.push(i)):i=void 0;else if(i&&(e=/^\s*:(\w+)\s*(.*)/.exec(t),e))switch(e[1].toLowerCase()){case"opz":case"o":i.opz=parsa(e[2]);break;case"obs":case"obsolete":i.obsolete=parsa(e[2]);break;case"scons":case"sconsigliate":i.scons=parsa(e[2]);break;case"neutri":i.neutri=parsa(e[2]);break;case"art":i.art=parsa(e[2]);break;case"mod":i.mod=parsa(e[2]);break;default:logga("missing:",e[1])}}return a}function parselimitifromdb(t){let e,a=[];if(t&&t.length)for(const i of t){e={},i.varfilter=fromjson(i.varfilter,[]),i.result=fromjson(i.result,[]),i.result2=fromjson(i.result2,[]),i.exclude=parseInt(i.exclude)?1:0,i.exclude2=parseInt(i.exclude2)?1:0;const{item:s,model:r,rule:n,varfilter:o,result:c,result2:l,exclude:u,exclude2:f,datai:h,dataf:d}=i;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&&(f?e.ex2=remap(l):e.valid2=remap(l)),s&&(e.i=clean(s).split(";")),r&&(e.m=clean(r).split(";")),n&&(e.r=clean(n).split(";")),(h||d)&&h<d&&(e.datai=parseInt(h),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}class Variante{constructor(t){this.rows={},this.name="$",this.key="$",this.limits=void 0,this.amb=t}setheader(t,e){const{name:a,cat:i}=checkmu(t,e);return this.cat=i,this.name=a,this.alias="",this.obbligo=!1,this.des=a,this.vdef=[],this.rows={},this.h=[],this.key=`${i}/${a}`,{name:a,cat:i}}fromdim(t,e=2){"number"!=typeof t&&(t=muCalc(t)),e>0&&e--;let a,i=1e9;for(const s in this.rows){const r=this.rows[s];if(!r.annulla){const s=parseFloat(r.v[e])||0;s<=i&&s>=t&&(i=s,a=r)}}return this.#t(t,a)}async load(t,e,a=!1){const{name:i,cat:s}=this.setheader(t,e);if(c){const t=await c(s,i);if(t){if(await this.loadContentExtended(t),t.filter)this.limits=parselimitifromdb(t.filter);else if(f&&!a){const t=await f("filter",s,i);t&&t.length&&(this.limits=parselimitifromdb(t))}return!0}}return!1}async _loadContent(t){const e=/^\s*[!:]\s*(\w+)\s*(.*)$/i;let a="";const i=[];let s,r=!1;for(const n of t){const t=n.toLowerCase();if("{limit}"==t)s=[],i.push(s),r=!0;else if("{:limit}"==t)r=!1;else if(r)s.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 i=clean(t.substring(0,e));"v"!=i&&(this.rows[a][i]=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=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 i of t){const t=a.exec(i);if(t)switch(t[1]){case"var":case"v":case"variante":{const a=(t[2]||"").indexOf(" ");if(a>0){const i=clean(t[2].substring(0,a)),s=getcolonne(t[2].substring(a+1));if(i&&s&&s.length){e.v||(e.v=[]);let t=e.v.find((t=>t.v==i));t||(t={v:i,o:[]},e.v.push(t));for(const e of s)t.o.includes(e)||t.o.push(e)}}}break;case"d":case"dt":case"data":case"date":{const a=t[2].split(" "),i=parseInt(a[0]),s=parseInt(a[1]);(i||s)&&(e.datai=i,e.dataf=s)}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(i))}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}(i),!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 i=this.rows[a];return 2==i.annulla?"":this.#t(e||t,i)}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 i=Object.keys(this.rows).sort();for(let t=0;t<i.length;t++){const e=i[t];if(!(t<i.length-1&&i[t+1].startsWith(e+"."))&&this.isvalidopz(e))return e}}resetfilter(){delete this._valids;for(const t in this.rows)this.rows[t].annulla=0}validkeys(){let t=Object.keys(this.rows)||[];return t=t.filter((t=>0==this.rows[t].annulla)).sort(),t}limitfiltra(t){if(!t)return;t=muClComments(t.toLowerCase());const e=[];for(const a of t){const t=/^#(i|e|xe|xi|x\+|x-|x)(\d*)\s+(.+)$/i.exec(a);if(t){const a={ex:t[1],col:(parseInt(t[2])||1)-1,val:"x"==t[1]?t[3]:getcolonne(t[3])};a.val.length&&e.push(a)}}if(e.length)for(const t in this.rows){const a=this.rows[t];for(const t of e)if("e"==t.ex){if(_check((a.v[t.col]+"").toLowerCase(),t.val)){a.annulla=1;break}}else if(t.ex.startsWith("x")){const e=(a.v[t.col]+"").toLowerCase().split(/[,;]/).map((t=>t.trim()));if("xe"==t.ex){if(_check((t.val+"").toLowerCase(),e)){a.annulla=1;break}}else if("x+"==t.ex){if(parseFloat(a.v[t.col])<=parseFloat(t.val)){a.annulla=1;break}}else if("x-"==t.ex){if(parseFloat(a.v[t.col])>=parseFloat(t.val)){a.annulla=1;break}}else if(!_check((t.val+"").toLowerCase(),e)){a.annulla=1;break}}else if(!_check((a.v[t.col]+"").toLowerCase(),t.val)){a.annulla=1;break}}function _check(t,e){if(1==e?.length&&"."==e[0])return!!t;return!!e.find((e=>e.startsWith(t)))}}limita(t){if(this.resetfilter(),t&&t.length&&this.limitfiltra(t),!this.limits||!this.amb)return this;const{item:e,rule:a,model:i,vari:s,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(i,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(s.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 f=!1,h=!1;for(const t of n){if(t.valid&&t.valid.length){f=!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){h=!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,i=!1;if(f){for(const e of o)if(t.startsWith(e)){a=!0;break}!a&&l.has(t)&&(a=!0)}if(h){for(const e of c)if(t.startsWith(e)){i=!0;break}!i&&u.has(t)&&(i=!0)}f&&!a&&(e.annulla=1),h&&i&&(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 E={};async function getcbfunc(t,e,a,i,s,r){if(u){if(E[e])return"";let t=await u(e,a,i,s,r);return isObject(t)||(t=(t||"").trim(),"!"==t&&(E[e]=!0,t="")),t}return t}async function intvaluta(t,e,a){return t.vari.valuta(a,(async(a,i)=>{switch(a){case"dim":{let a=muCalc(i[1]),s=await dammivariante(t,e,i[2]),r=parseInt(i[3])||2;return s&&s.fromdim?s.fromdim(a,r):a}case"seed":{let t=i[1],e=getcolonne(i[2]);return e[seeder(e.length,t)]||""}case"seedvar":{let a=await dammivariante(t,e,i[2]),s=i[1],r=a.validkeys();if(i[3]&&i[4]){let t=muCalc(i[3])-1;if(t>=0){let e=getcolonne(i[4]);r=r.filter((i=>{let s=a.rows[i];if(s&&s.v&&s.v[t]){let a=getcolonne(s.v[t]);if(a)for(let t of e)if(a.includes(t))return!0}return!1}))}}let n=seeder(r.length,s);return n>=0&&a.tovar(r[n])||""}default:return await getcbfunc(`**fun:${a}**`,a,i,t.vari,t)}}))}async function dammivariante(t,e,a){let i;return i=e&&e?.localvar&&e.localvar[a]?e.localvar[a]:await t.getvariante(a),i}async function impostavariante(t,e,a,i,s){let r,n=a;if((i=i||"")&&"string"==typeof i){const t=i.indexOf(":");t>=0&&(t>0&&(n=clean(i.slice(0,t))),i=i.slice(t+1))}if(s&&s.alias&&(n=s.alias),e&&e.paralias&&e.paralias[a]&&(n=e.paralias[a]),r=await dammivariante(t,e,n),r)if(s&&s.t){s.des||(s.des=r.des);let e=s?.filtra||"";if(e.includes("$")&&(e=await t.vari.valuta(e)),"m"===s.t){let t=2;if(i.includes(":")){const e=i.split(":");t=parseInt(e[1]),i=e[0]}r.limita(e),i=r.fromdim(parseFloat(i),t)}else{r.limita(e);const t=r.firstvalid(i,getcolonne(s.def));i=r.tovar(t)}}else r.resetfilter(),i=r.firstvalid(i),i=r.tovar(i);else s&&s.t&&s.t;return t.vari.add(a,i),i}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,i){if(!Array.isArray(a))return m.add("codice is not a valid parsed array"),[];const zeroval=()=>t&&t._managezero?"0":"";i||(i={}),i.id||(i.id="_"),i._stackmacro||(i._stackmacro=0),i.limited||(i.limited=!1),t||m.add("amb deve essere definito");const s=t.vari;t.maxdelays,t.cat;const r=[];let n,o,c;(new Date).valueOf();for(let l=0;l<a.length;){let u=a[l];switch(u.tipo){case"IFDEF":case"IFNDEF":case"IF":{const f="IF"==u.tipo?muCalc(await intvaluta(t,e,u.contenuto)):"IFDEF"==u.tipo?""!=await intvaluta(t,e,u.contenuto):""==await intvaluta(t,e,u.contenuto);u.next?(a[u.next].jlast=f?1:0,f||(l=u.next-1)):m.add("Troppo tempo",u)}break;case"SELECT":u.next?(a[u.next].t1=await intvaluta(t,e,u.contenuto),l=u.next-1):m.add("manca endselect",u);break;case"CASE":case"CASES":case"DEFAULT":if(u.next)if(u.jlast)u.jlast=0,l=u.last-1;else{let h,d=1;const _getvv=async()=>{let a=await intvaluta(t,e,u.contenuto);return a=a.includes(":")&&!a.includes(",")?a.split(":").map((t=>(t||"").trim())):getcolonne(a),a};if("CASE"==u.tipo){d=0,h=await _getvv();const p=muCalc(u.t1||zeroval());h.find((t=>muCalc(t)==p))&&(d=1)}else if("CASES"==u.tipo){d=0,h=await _getvv();const v=u.t1||zeroval();h.find((t=>t==v))&&(d=1)}a[u.next].jlast=d?1:0,a[u.next].t1=u.t1,d||(l=u.next-1)}else m.add("manca select",u);break;case"ELSEIF":case"ELSEIFDEF":case"ELSEIFNDEF":case"ELSE":if(u.next)if(u.jlast)u.jlast=0,l=u.last-1;else{const g="ELSE"==u.tipo?1:"ELSEIF"==u.tipo?muCalc(await intvaluta(t,e,u.contenuto)):"ELSEIFDEF"==u.tipo?""!=await intvaluta(t,e,u.contenuto):""==await intvaluta(t,e,u.contenuto);a[u.next].jlast=g?1:0,g||(l=u.next-1)}else m.add("manca endif",u);break;case"ENDIF":case"ENDSELECT":case"CACHE":case"CVAR":break;case"PUSH":s.push();break;case"POP":s.pop();break;case"INC":case"I":if(i._stackmacro>500)m.add("stack chiamate macro troppo profondo!",u);else if(({macro:n,pars:o,xid:c}=await t.getmacro(u)||{}),n){i._inc=!0,i._stackmacro++;const b={},w=n.parametri?._;if(w&&w.length)for(const $ of w){const k=clean($.split("=")[0]||"",!0);k&&(b[k]=s.dictionary[k])}await n.impostaparametri(w,o);const y=await muEval(t,n,n.codice,i);for(const x in b)b[x]?s.dictionary[x]=b[x]:delete s.dictionary[x];r.push(...y),i._stackmacro--,i._inc=!1}break;case"RET":{const E=await intvaluta(t,e,u.contenuto);t.vari.savevars(E)}break;case"MACRO":case"M":case"FUNC":case"F":if(i._stackmacro>500)m.add("stack chiamate macro troppo profondo!",u);else{let{macro:C,pars:S,xid:O}=await t.getmacro(u)||{};if(C){const F=!!i.grafica||["F","FUNC"].includes(u.tipo),_=i.id||"",L=C.parametri?._,A={};if(F)s.push();else{if(C.head)for(const I of C.head)A[I.cod]=t.vari.var(I.cod);if(L&&L.length)for(const j of L){const M=(j.split("=")[0]||"").trim().toLowerCase();M&&(A[M]=s.dictionary[M])}}if(C.codice.length){if(i._stackmacro++,i.grafica&&"function"==typeof i.grafica){let z="",D="";S&&S.length?(z=S.find((t=>t.startsWith("#id"))),z?(z=await s.valuta(z.slice(4)),z.startsWith("#")?i.id=z:i.id=hash(`${l}${C.name}${_}${z}`),S=S.filter((t=>!t.startsWith("#id"))),D=i.id):i.id=hash(`z${_}${l}`)):i.id=hash(`z${_}${l}`);let N=t.pick.key;t.pick.key=i.id;const T=await i.grafica({tipo:u.tipo,id:D,pars:S,parametri:L,macro:C,options:i,vari:t.vari,amb:t});t.pick.key=N,r.push(T)}else{await C.impostaparametri(L,S);let W=t.vari.var("_rootnode");t.vari.add("_rootnode","0");const R=await muEval(t,C,C.codice,i);t.vari.add("_rootnode",W),r.push(...R)}i._stackmacro--}if(F)s.pop();else for(const V in A)A[V]?s.dictionary[V]=A[V]:delete s.dictionary[V];i.id=_}else m.add("Macro non trovata!",u)}break;case"SETDEF":{let J=getcolonne((u.contenuto||"").toLowerCase()),U=await dammivariante(t,n,J[0]),P=J[1]||"def_",K=J[2];if(P.endsWith("_")||(P+="_"),U&&U.rows){J=Object.keys(U.rows),K&&(J=J.filter((t=>t.startsWith(K))));for(let G of J){let B=`${P}${G}`;if(!s.dictionary[B]){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(",")}s.add(B,await intvaluta(t,e,torow(U.rows[G])))}}}}break;case"LET":case"LETS":{let q=u.contenuto.indexOf("="),X=-1;if(q>=0&&(X=u.contenuto.indexOf("=",q+1)),X<0){const Z=u.contenuto;if(q=Z.indexOf("="),q>0){const H=await intvaluta(t,e,Z.slice(0,q).trim());let Y=Z.slice(q+1).trim();Y="LET"==u.tipo?muCalc(await intvaluta(t,e,Y))||zeroval():await intvaluta(t,e,Y),s.add(H,Y)}}else{const Q=getcolonne(u.contenuto);for(const tt of Q)if(q=tt.indexOf("="),q>0){const et=await intvaluta(t,e,tt.slice(0,q));let at=tt.slice(q+1).trim();at="LET"==u.tipo?muCalc(await intvaluta(t,e,at))||zeroval():await intvaluta(t,e,at),s.add(et,at)}}}break;case"LETT":{const it=u.contenuto.indexOf("=");if(it>0){const st=await intvaluta(t,e,u.contenuto.slice(0,it).trim()),rt=await intvaluta(t,e,u.contenuto.slice(it+1).trim());s.add(st,rt)}}break;case"CZERO":"1"==u.contenuto?t._managezero=!0:t._managezero=!1;break;case"LOOK":case"LOOKB":{const nt=getcolonne(await intvaluta(t,e,u.contenuto)),ot=muCalc(nt[1]),ct=muCalc(nt[3]),lt=await dammivariante(t,n,nt[2]);if(lt&<.rows){const ut=Object.values(lt.rows).reduce(((t,e)=>{const a=parseInt(e.v[ct?ct-1:0]);return a&&("LOOKB"==u.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"==u.tipo?0:1/0,c:""});ut&&ut.c&&(t.vari.add(nt[0],lt.tovar(ut.c)),i.checkheader&&"function"==typeof i.checkheader&&await i.checkheader({variante:nt[0],valore:lt.tovar(ut.c),riga:u}))}else t.vari.add(nt[0],`${ot},no,no`)}break;case"LETV":case"LETM":case"DEF":{const ft=getcolonne(u.contenuto);if(ft)for(const ht of ft){let{v:dt,o:mt,fl:pt}=getcouple(ht);if(pt){dt=await s.valuta(dt),mt=await intvaluta(t,e,mt);const vt=await impostavariante(t,e,dt.trim().toLowerCase(),mt.trim().toLowerCase(),"LETM"==u.tipo?{t:"m"}:{t:"v"});i._stackmacro<=0&&i.checkheader&&"function"==typeof i.checkheader&&await i.checkheader({variante:dt,valore:vt,riga:u})}}}break;case"DO":{const gt=(u.contenuto||"").trim();let bt=!0;gt&&!muCalc(await intvaluta(t,e,gt))&&(bt=!1),u.next&&(bt||(l=u.next+1))}break;case"VARIANTE":case"FORVAR":case"FOR":{let wt,yt,$t,kt;if(i.oldstyle?(wt=u.contenuto.split(","),kt=wt[2]||"i",$t=wt[0],yt=wt[1]):(wt=getcolonne(u.contenuto||""),kt=wt[0]||"",$t=clean(wt[1],!0),yt=wt[2]||""),kt=kt.includes("$")?await intvaluta(t,e,kt):kt||"","FORVAR"==u.tipo||"VARIANTE"==u.tipo){const Et=await intvaluta(t,e,$t),Ct=Et?await dammivariante(t,e,Et):void 0;Ct?$t=Ct.tovec():($t=[],m.add("getvariante not found!",u))}else{const St=await intvaluta(t,e,$t||"");$t=$t?getcolonne(St):void 0}$t=$t||[];const xt=0;if(u.next){a[u.next].for={v:kt,elenco:$t,nc:xt,valido:yt};let Ot,Ft=!0;kt&&$t.length>0?xt>=$t.length?Ft=!1:(Ot=$t[xt],s.add(kt,Ot),yt&&(Ft=!muCalc(await intvaluta(t,e,yt)))):Ft=!1,Ft||(l=u.next-1)}else m.add("manca endfor/loop",u)}break;case"LOOP":{let _t=!0;u.contenuto&&!muCalc(await intvaluta(t,e,u.contenuto))&&(_t=!1),_t&&(l=u.prev-1);break}case"ENDFOR":if(!u.contenuto||muCalc(await intvaluta(t,e,u.contenuto)))if(u.for){const{v:Lt,elenco:At,valido:It}=u.for;if(Lt&&At.length>0&&u.for.nc<500)for(;;){if(u.for.nc++,u.for.nc<At.length){if(s.add(Lt,At[u.for.nc]),It&&muCalc(await intvaluta(t,e,It)))continue;l=u.prev;break}break}}else m.add("manca istruzione for",u);break;case"BREAK":case"EXIT":case"EXITFOR":u.next?u.contenuto.trim()?muCalc(await intvaluta(t,e,u.contenuto))&&(l=u.next):l=u.next:m.add("break outside loop",u);break;case"CONTINUE":u.next?u.contenuto&&!muCalc(await intvaluta(t,e,u.contenuto))||(l=u.next-1):m.add("continue outside loop",u);break;case"MSG":case"LOG":{const jt=await intvaluta(t,e,u.contenuto);logga(jt),m.add(jt)}break;default:{let Mt;if(u.contenuto.startsWith("!")){Mt=await intvaluta(t,e,u.contenuto);let zt="";const Dt=/^!(.\w+)[\s;,]\s*(.+)?$/gim.exec(Mt);if(Dt)if(Dt[1].startsWith("."))await getcbfunc(Mt,Mt.slice(1),[],s,t),zt="";else{const Nt=(Dt[1]||"").toLowerCase(),Tt=getcolonne(Dt[2]||"");zt=await getcbfunc(Mt,Nt,Tt,s,t)}zt&&outpush(r,zt)}else i.parsefnpunto&&"function"==typeof i.parsefnpunto&&u.contenuto.startsWith(".")?await i.parsefnpunto({dati:u.contenuto,output:r,id:i.id,vari:t.vari,amb:t}):(Mt=await intvaluta(t,e,u.contenuto),outpush(r,Mt))}}l++}return r}async function muGenerate_0(t,e,a,i,s){const r=t.genera[a];if(r){s.counter2=0;const n={};async function processavariante(o){if(s.isTestmode&&s.counter>s.isTestmode)return;if(o<r.vars.length){const a=r.vars[o];if(!n[a]){const i=await dammivariante(e,t,a),s=i?Object.keys(i.rows):void 0;if(s&&s.length>0){for(const t of s)e.vari.add(i.name,i.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 i=await muEval(e,t,t.formula[a],{limited:!0});if(i)for(const t of i){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 i=await muEval(e,t,t.formula[a],{limited:!0});i=i.join("\n").split("\n");for(const t of i)if(t){const e=getcolonne(t);l[a]||(l[a]=[]);const i={};for(let t=0;t<e.length;t++)i[`c${t}`]=e[t];l[a].push(i)}}await async function docallback(t,e,a,i,s,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=i.head[t]?i.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(s,o,n?a:void 0,r.counter,r.counter2),n=!1}}}(i,c,l,r,a,s)}await processavariante(0)}}const C=["l","a","p"],S=/^\{(:?(var|valid|formula|genera|header|v|f|g|h))[\s|}]/im,O=["s","g","h","p","q"];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:i}=checkmu(e,t.cat||"");this.name=a,this.cat=i,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&&C.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 i=this.amb.vari.var(t.cod);O.includes(t.t)||"string"==typeof i&&(i=i.split(",")[0]),a[t.cod]=i}}else if(this.parametri?._)for(const t of this.parametri._){const e=(t.split("=")[0]||"").trim().toLowerCase();let i=this.amb.vari.var[e];i=(i||"").split(",")[0],a[e]=i}return a}async setparametri(t){const e={},a=this.amb.ruleset||{};t||(t={}),this.dims&&C.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 i of this.head){const s=a[i.cod];s&&(s.islock?(i.visible="0",t[i.cod]=s.opz,i._islock=!0):t[i.cod]||(t[i.cod]=s.opz)),"g"!=i.t&&("z"!=i.t||t[i.cod]||(t[i.cod]="1"),i._v=t[i.cod]||"",e[i.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,i={}){if(e&&"string"==typeof e&&e.includes("$")&&(e=await intvaluta(this.amb,this,e)),i||(i={}),this.head){const _imposta=async(t,e,a,s)=>{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 s=this.amb.vari.var(r)||"";"thlm".includes(t.t)&&"string"==typeof s&&(s=s.split(",")[0]);let n=s;if("z"!=t.t||s||(this.amb.vari.add(r,"1"),s="1"),"m"==t.t&&t.spars){let e=t.spars;(e||"").includes("$")&&(e=await intvaluta(this.amb,this,e));const a=getcolonne(e);s=parseFloat(s||a[0])||0,(!a[1]||"").includes(";")&&(a[1]&&parseFloat(s)<a[1]&&(s=parseFloat(a[1])||0),a[2]&&parseFloat(s)>a[2]&&(s=parseFloat(a[2])||0)),s=String(s),this.amb.vari.add(r,s)}const o=await impostavariante(this.amb,this,r,e||t._v||s,t);if(t._v=void 0,s=this.amb.vari.var(r)||"","thl".includes(t.t)&&"string"==typeof s&&(s=s.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==s))))));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);i&&i[a.cod]&&(r=i[a.cod]),"string"==typeof r&&(r=r.split(",")[0],r&&r!=n&&r!=s?delete a._d:(a._v=e.toopz||s,a._d={cod:t.cod,opz:e.toopz}))}}))}return o}};let s,r=-1;if("#dim"==t)a=1;else{if(r=this.head.findIndex((e=>e.cod===t)),r<0)return;const i=this.head[r];s=await _imposta(i,e,r),a&&delete i._d}if(a)for(let t=r+1;t<this.head.length;t++)await _imposta(this.head[t],void 0,t);return s}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,i){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)}i||(i={}),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 i,s=a.substr(t+1);s.includes("$")&&(s=await intvaluta(this.amb,this,s)),this.head&&(i=this.head.find((t=>t.cod==e)))?i._v=s:await impostavariante(this.amb,this,e,s)}}if(this.head){let t=!0;for(const e of this.head){let s=await this.checkvalid(e.valid);a&&(s=!0),["g","g1","g2"].includes(e.t)?t=s:t&&s&&await this.setparametro(e.cod,i[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,e){let a,i;try{let s;if(({name:a,cat:i}=checkmu(t||this.name,e||this.cat||"")),this.name||(this.name=a),this.cat||(this.cat=i),this.azzera(),l&&(s=await l(i,a),"string"==typeof s&&(s.startsWith("{")||s.startsWith("["))&&(s=fromjson(s)),s&&s.head&&!Array.isArray(s.head)&&(s.head=[]),this.amb.checkscripts(s.linkscript),delete s.linkscript,s.head&&(s.dims=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}(s.dims))),s){if("string"==typeof s)await this.parsedata(s);else for(const t in s)this[t]=s[t];return!0}m.add(`missing cbGetFile: ${i}/${a}`)}catch(t){m.add(geterrdes(t),`macro.load: ${a}/${i}`)}}async loadAndCompile(t,e,a=!1){let i;const{name:s,cat:r}=checkmu(t,this.cat||e);return this.azzera(),h&&(i=await h(r,s)),i?(await this.parsedata(i,a),this.getmacro()):void m.add(`missing cbGetFile: ${s}/${r}`)}async#e(t,e,a,i){let s;const{name:r,cat:n}=checkmu(t,this.cat);if(h&&(s=await h(n,r)),!s)return[];if(s.includes("$1")&&i&&i.length>0)for(let t=1;t<i.length;t++)s=s.replaceAll(`$${t}`,i[t]);let o=muClComments(s);const c=[];e&&(o=o.filter((t=>!/^\{(:?(var|valid|formula|header|genera|v|f|h))[\s|}]/im.test(t))));for(const t of o){const i=S.exec(t);if(i)e=!i[1].startsWith(":"),c.push(t);else{const i=/^\s*\{i\s(.+)?\}/im.exec(t);if(i){const t=getcolonne(i[1]);if(!a.includes(t[0])){a.push(t[0]);const i=await this.loadinclude(t[0],e,a,t);Array.isArray(i)&&c.push(...i),a.pop()}}else c.push(t)}}return c}async parsedata(t,e=!1){if(this.azzera(),!t)return;const a=[];let i=muClComments(t),s=!1;const r=[];for(const t of i){const e=S.exec(t);if(e)s=!e[1].startsWith(":"),a.push(t);else{const e=/^\s*\{i\s(.+)?\}/im.exec(t);if(e){const t=getcolonne(e[1]),i=await this.#e(t[0],s,[t[0]],t);Array.isArray(i)&&a.push(...i)}else a.push(t)}}s=!1;let n=this.codice;for(const t of a){const e=S.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),i=a[0].trim().toLowerCase();e.rows[i]={annulla:0,v:a}}a.des&&(e.des=a.des),this.localvar[t]=e}i=this.valid,this.valid=[];for(const t of i){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))}i=r;const o=[];for(const t of i){const e=/^\s*([\w\-_]+)+[;,\s]\s*(.*)?$/im.exec(t);if(e){const t=getcolonne(e[2]),a=clean(e[1]);let i;if(a){i=o.find((t=>t.cod==a)),i||(i={cod:a,t:"t"},o.push(i));for(const e of t){const t=getcouple(e);switch(t.v){case"t":i.t=t.o;break;case"def":case"default":i.def=t.o;break;case"valid":case"colonna":case"hidden":t.o.startsWith("#")?this.formula[t.o.substring(1)]&&(i[t.v]=t.o):i[t.v]=t.o;break;default:i[t.v]=t.o}}}}}this.head=o,i=this.genera;const c={};for(const t in i)if(Array.isArray(i[t])){const e={codice:[],head:"",calcola:[],bom:[],vars:[],exclude:[]},a=/^\s*[!:]\s*(\w+)\s*(.*)$/i;for(const s of i[t]){const i=a.exec(clean(s));if(i)switch(i[1]){case"calcola":case"c":e.calcola=[...e.calcola,...getcolonne(i[2])];break;case"exclude":case"e":case"escludi":e.exclude=[...e.exclude,...getcolonne(i[2])];break;case"bom":case"db":e.bom=[...e.bom,...getcolonne(i[2])];break;case"vars":case"v":e.vars=[...e.vars,...getcolonne(i[2])];break;case"head":case"h":e.head=getcolonne(i[2]);break;default:this.errori.push(`genera ${t} => ${s}`)}else e.codice.push(s)}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 i=0;i<e.length;i++){const s=/^:p[;,\s]+(.*)?$/im.exec(e[i]);if(s)e[i]=null,a=!0,this.parametri[t]=getparalias(s[1]);else{const s=/^!(parametri|pars|p)[;,\s]+(.*)?$/im.exec(e[i]);s&&(e[i]=null,a=!0,this.parametri[t]=getparalias(s[2]))}}a&&(e=e.filter((t=>null!=t)))}return e=muClean(e,a)}}const F=/^\s*\{(:)?(var|deriva|valid|formula|header|genera|g|v|f|h)(\s.*)?\}/i;function verificaisvar(t,e){let a=!1;const i=[];for(let s=t;s<e.length;s++){const t=e[s].trim();let r=t.split("//")[0].trim();if(t.startsWith("/*"))a=!0;else if(a&&t.endsWith("*/"))a=!1;else if(!a){if(F.test(t))return{fl:!0,i2:s-1,cols:i};if(r.endsWith("\\"))return{fl:!1};if(t.startsWith(":h ")&&(r=r.substr(3).trim()),!r.startsWith(":")){const t=getcolonne(r);for(let e=0;e<t.length;e++){let a=t[e].length;t[e].includes(",")&&(a+=2),(!i[e]||i[e]<a)&&(i[e]=a)}}}}return{fl:!0,i2:e.length-1,cols:i}}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 i=this.d[a]??{};return t=t??{},this.d[a]={...i,...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:[]},i=!1;for(const s of e){const e=/^\s*\{(h|head|header)\s+(\w+)\}/im.exec(s);if(e)a={cod:e[2],des:e[2],r:[]},i=!1,t[e[2]]=a;else if(!/^\s*:/.exec(s)){const t=s.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&&(i||"sep"!=e.tipo?a.r.push(e):(a.des=e.des,a.valid=e.valid,a.visible=e.visible,i=!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;#i=void 0;#s=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,getcouple:getcouple,muCalc:muCalc,muEval:muEval,tipifree:O}}azzera(t=!1){this.imgpreview={},this.vari=new Variabile,this.ruleset={},this.fndotcallback&&this.vari.setfndot(this.fndotcallback),this.ruleheader="",t&&(this.macro={},this.sqcache={},this.varianti={},this.varelenco={},this.macroelenco={},this.scripts={},this.#a=void 0,this.#i=void 0,this.#s=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(f&&!this.varelenco[t]){const e=await f("headers",t,"_varianti");Array.isArray(e)?this.varelenco[t]=e:e.vars&&(this.varelenco[t]=e.vars,e.alias&&(this.#i=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.#i=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,i=[],s=0){this.item=clean(t,!0),this.rule=clean(e,!0),this.model=clean(a,!0),this.ruleset=toruleset(i),this.data=s||(new Date).toInt()}async getheader(t){let e;return!this.#a&&f&&(e=await f("headers",this.cat,"_headers"),this.parseheaderfrominfo(e)),this.#a||(this.#a={}),this.#a[t]}async getalias(){let t;return!this.#i&&f&&(t=await f("headers",this.cat,"_alias"),this.parseheaderfrominfo(t)),this.#i||(this.#i={}),this.#i}get deriva(){return this.#s,this.#s||[]}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 m.add("Macro non valida:"+e,t);let i=clean(a[1],!0);i.includes("$")&&(i=await this.vari.valuta(i));const s=getcolonne(a[2]),{name:r,cat:n}=checkmu(i,this.cat);this.cat=n;const o=`${n}/${r}`;if(!this.macro[o]){const e=new Macro(this,r);await e.load()?this.macro[o]=e:m.add(`macro fail to load ${o}`,t)}return i=this.macro[o],i?{macro:i,pars:s}:(m.add(`macro non trovata ${o}`,t),{})}catch(e){m.add(geterrdes(e),`ambiente.getmacro: ${t?.contenuto}`)}}async getvariante(t){const{name:e,cat:a}=checkmu(t,this.cat);let i=e,s={};if(a==this.cat&&this.#i&&this.#i[e],await this.#n(a),this.varelenco[a]&&!this.varelenco[a].includes(e))return;const r=`${a}/${i}`;let n;return this.varianti[r]?n=this.varianti[r]:(n=new Variante(this),await n.load(r,a),this.varianti[r]=n),s&&(s.des&&(n.des=s.des),s.vdef&&(n.vdef=s.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 i=a.getmacro();e("macros",{cod:t,info:JSON.stringify(i),isgenera:a.isgenera,isheader:a.isheader,iscodice:a.iscodice})}async barrecompila(t,e,a){const i=new CodiceBarra;await i.compila(t,e);for(const t in i.barre){a("barcodes",{cod:t,des:"",info:JSON.stringify(i.barre[t])})}return i}async tojson(t){let e;return u&&(e=await u("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.#i=void 0,this.#s=void 0,this.#r=void 0,f){const t=await f("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.#i&&e("infos",{cod:"alias",des:"",info:JSON.stringify(this.#i)}),this.#s&&e("infos",{cod:"deriva",des:"",info:JSON.stringify(this.#s)}),this.#r&&e("infos",{cod:"typos",des:"tipologie",info:JSON.stringify(this.#r)})}}async checkvarianti(t,e){if(!t||!e?.length)return;t=checkname(t),await this.#n(t);const a=this.varelenco[t],i=[];for(let s of e){s=clean(s,!0);const e=`${t}/${s}`;this.varianti[e]||a&&a.includes(s)&&i.push(s)}if(i.length&&c){const e=await c(t,i);if(e&&e.length)for(const a of e){const{name:e,content:i}=a,s=new Variante(this);s.setheader(e,t),i&&await s.loadContentExtended(i),this.varianti[s.key]=s}}}async getheaderfromdb(t){const e=await f("header",this.cat,t,!this.#s);let{head:a,rows:i,macros:s,deriva:r,llvars:n}=e;for(const t of i)t.cod=clean(t.cod),t.alias=clean(t.alias),t.t=clean(t.t);if(!n){n=new Set;for(const t of i)if("p"==t.tipo);else{const e=t.alias?t.alias:t.cod;n.add(e)}n=[...n]}this.#s||(this.#s=r),await this.#n(this.cat),a.cod=clean(a.cod),a.rule=clean(a.rule),a.ruledef=a.ruledef||[];const o=[],l=this.varelenco[this.cat];for(const t of n)this.varianti[`${this.cat}/${t}`]||l&&l.includes(t)&&o.push(t);if(o.length&&c){const t=await c(this.cat,o);if(t&&t.length)for(const e of t){const{name:t,content:a}=e,i=new Variante(this);i.setheader(t,this.cat),a&&await i.loadContentExtended(a),this.varianti[i.key]=i}}return{head:a,rows:i,macros:s}}async getlinkedmacros(t,e){const getkey=t=>t.includes("/")?t:`${this.cat}/${t}`,a=[];let i;if(t&&(i=getkey(t),this.macro[i]||a.push(t)),e&&"string"==typeof e){const t=e.split(";");for(const e of t)i=getkey(e),this.macro[i]||a.push(e)}if(a&&a.length>0&&l){const t=await l(this.cat,a);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 i=e.content[a];t[a]=i}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:i,cat:s}=checkmu(t,this.cat);a&&a.length&&(this.ruleset=toruleset(a));const r=`${s}/${i}`;if(!this.macro[r]){const e=await this.getheaderfromdb(i),{head:a,rows:n,macros:o}=e;await this.getlinkedmacros(a.rule,o);const c=new Macro(this,i);if(!a)return void m.add("Missing rule: "+t);if(a.rule){const t=this.macro[`${s}/${a.rule}`];if(t)for(const e in t)["cat","name","key"].includes(e)||(c[e]=t[e])}n&&n.length&&(c.head=n),this.macro[r]=c}this.ruleheader=r;const n=this.macro[r];return m.azzera(),await n.setparametri(e),n}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)&&(e=await muEval(this,null,t)),e}setinfos(t){t&&(this.#a=t.headers,this.#i=t.alias,this.#s=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}}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 _={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"}}},{Clear:L,Reset:A,Bold:I,Reverse:j,Red:M,Green:z,Yellow:D,Blue:N,Magenta:T,Cyan:W,White:R}=a();var V=o(process.argv);console.log("----------------------------------------------------------------------------------------"),console.log(`${I}${W}${I}Markuno:${A} command line utility del linguaggio (c) Croswil 2024 v. ${D}2.1.85${A}`),console.log("----------------------------------------------------------------------------------------");var J={FOLDERBASE:"./",DBWORK:"./data/app.db",FOLDERCAT:"./data/mu",FOLDEROUT:"./out",CAT:"cat"};const U=".lasts.markuno";t.existsSync(U)&&(J=JSON.parse(t.readFileSync(U)));var P=V._;(V.h||V.help||!P[2])&&(console.log(`Uso: ${I}markuno <funzioni> <[catalogo/]markuno> [opzioni]${A} \n${I}${W}Funzioni:${A} (seleziona una tra le seguenti)\n ${R} c, compila ${A}${z} compila un catalogo/Markuno + Codici Barra\n ${R} d, dump ${A}${z} compila e salva il compilato in formato json\n ${R} e, esegui ${A}${z} esegui un file markuno \n ${R} f, formatta ${A}${z} Formattazione di un file .mu o .var\n ${R} g, genera${A}${z} generatore di codice \n ${R} w, watch ${A}${z} abilita il watch su un file markuno \n ${R} gw <markuno> <maxele> ${A}${z} Genera con wath (solo i primi maxele=20 elementi senza salvare\n${I}${W}Opzioni:${A}${z}\n ${R} -h, --help${A}${z} mostra l'help\n ${R} -c, --cat <cat>${A}${z} catalogo (default='${J.CAT}' ) \n ${R} -d, --dbwork ${A}${z} database principale (default='${J.DBWORK}')\n ${R} -i, --init <folder>${A}${z} cartella di lavoro (default='${J.FOLDERCAT}' ) \n ${R} -o, --out <folder>${A}${z} cartella di output (default='${J.FOLDEROUT}' ) \n ${R} -x, --xlsx${A}${z} output in formato excel (generatore)\n `),process.exit(0));let K=0;const G="./",B=V.d||V.dbwork||J.DBWORK,q=V.i||V.init||J.FOLDERCAT,X=V.o||V.out||J.FOLDEROUT,Z=V.c||V.cat||J.CAT;var H=void 0,Y=!1;t.existsSync(q)||writeerror(`Manca la cartella di lavoro: ${q}`),J=Object.assign(J,{FOLDERBASE:G,DBWORK:B,FOLDERCAT:q,FOLDEROUT:X,CAT:Z}),t.writeFileSync(U,JSON.stringify(J,null,2)),t.existsSync(q)||t.mkdirSync(q,{recursive:!0});const Q=V.x||V.xlsx;function writeerror(t){var e=t.stack.toString().split("\n");e.splice(0,1),e=e.filter((t=>!/module/.test(t)&&!/node\:/.test(t))),console.log(`${M}${t.message}${A}\n${e.join("\n")}`),process.exit(1)}function dbmu(a){var s=e.join(q,`mu_${a}.db`);t.existsSync(s)||r(s,_,"mus");var o=i.db(s);return n(_),o}function getinfofile(e){var a="",i="",s=`${e}.txt`;t.existsSync(s)&&(a=t.readFileSync(s).toString());s=`${e}.md`;return t.existsSync(s)&&(i=t.readFileSync(s).toString()),{def:a,md:i}}function getinfo(a,i){var s=t.readdirSync(i),r={cat:a,info:"",mu:[],var:[],inc:[]};for(var n of s){var o=e.join(i,n),c=e.extname(n),l=e.basename(n,c);"__info.md"==n?r.info=t.readFileSync(o).toString():".mu"==c?r.mu.push(l):".var"==c?r.var.push(l):".inc"==c&&r.inc.push(l)}return r}async function xlsexport(t,e,a){const i=await import("xlsx"),s=i.utils.json_to_sheet(t),r=i.utils.book_new();i.utils.book_append_sheet(r,s,e),i.writeFile(r,`${a}.xlsx`,{compression:!0})}async function xlsimport(t,e){const a=await import("xlsx");var i=a.readFile(t).Sheets[e];return a.utils.sheet_to_json(i)}async function cbGetMacro(e,a){var i=`${q}/${e}/${a}.mu`;return t.existsSync(i)?t.readFileSync(i).toString():""}async function cbGetVariante(e,a){var i=`${q}/${e}/${a}.var`;return t.existsSync(i)?t.readFileSync(i).toString():(m.add(`missing var: ${e}, ${a}`,{t:"cbGetVariante"}),"")}async function cbFunc(t,e,a){m.add(`missing fun: ${t}`,{t:"cbFunc"})}async function cbInfo(e,a,i){if(Array.isArray(i)){var s=[];for(var r of i){var n=await cbInfo(e,a,r);n&&s.push({tipo:r,value:n})}return s}switch(e){case"filter":if(!H||!i&&!i[0])return[];if(Y)return[];var o=H.all("select item,model,rule,varfilter,result,result2,exclude,exclude2 from limits where variant=?",i[0]);for(var c of o)c.valfilter=JSON.parse(c.varfilter||"{}"),c.result=JSON.parse(c.result||"[]"),c.result2=JSON.parse(c.result2||"[]");return o;case"headers":var l;return l="_typos"==i?`${q}/${a}/typos.json`:`${q}/${a}/${i}.inc`,t.existsSync(l)?t.readFileSync(l).toString():""}}async function cbGetFile(a,i){if(t.existsSync(e.join(G,i)))return t.readFileSync(e.join(G,i)).toString();const s=`${q}/${a}/${i}`;if(t.existsSync(s))return t.readFileSync(s).toString();m.add(`missing file: ${s}`,{t:"cbGetFile"})}function checkfilemu(a,i){var s=e.extname(i);[".mu",".var",".inc"].includes(s)||(s=".mu",i+=".mu");var r=e.join(q,a||Z),n=e.join(G,i);if(t.existsSync(n))return{file:n,folder:r,diversi:!0};var o=i.indexOf("/");if(o>0&&(a=i.substr(0,o),i=i.substr(o+1),r=e.join(q,a||Z),!t.existsSync(r)))throw new Error("missing folder: "+r);if(n=e.join(r,i),t.existsSync(n))return{file:n,folder:r,diversi:!1,ext:s};throw new Error(`non trovato il file: ${i} su ${r}`)}async function dowatch(e,a){var{file:i,folder:s,diversi:r}=checkfilemu(e.cat,P[3]||""),n=parseInt(P[4]||"10");console.log(`Start Watching: ${W}${I}${i}${A}`),t.watch(s,(async(t,i)=>{i&&await a(e,n)})),r&&t.watch(i,(async(t,i)=>{i&&await a(e,n)})),await a(e,n)}async function genera(a,i){var{file:s,folder:r,diversi:n}=checkfilemu(a.cat,P[3]||"");if(!t.existsSync(s))throw new Error("Manca il file: "+s);var o=e.extname(s),c=e.basename(s,o),l=new Macro(a,c),u=(new Date).valueOf();await l.loadAndCompile(`${c}${o}`);var f=(new Date).valueOf(),h={},d={},m=[],p=[],v=[];if(await async function muGenerate(t,e,a,i,s=0){if(t.isgenera&&i){const a={counter:0,keys:{},isTestmode:s};for(const s in t.genera)await muGenerate_0(t,e,s,i,a);return!0}}(l,a,0,((t,e,a,s,r)=>{if(i){var n=[];for(var o in e){var c=e[o];if("number"==typeof c&&(c=Math.round(1e4*c)/1e4+""),"__id"!=o){var l=n.length;v[l]||(v[l]=o,p[l]=o.length),p[l]<c.length&&(p[l]=c.length),n.push(c)}}m.push(n)}else{var u=t.split("_")[0]||u;if(h[u]||(h[u]=[]),h[u].push(e),e.cod&&(d[u]=!0,a))for(var f in a){var g=`${u}_${f}`;h[g]||(h[g]=[]);var b=a[f];for(o=0;o<b.length;o++){var w=b[o];h[g].push({padre:e.cod,i:o,comp:w.c0,qt:muCalc(w.c1),des:w.c2})}}}}),i),i){for(var g=0;g<v.length;g++)v[g]=v[g].padEnd(p[g]," ");for(var b of(console.log(`${D}${v.join(" | ")}${A}`),m)){for(g=0;g<b.length;g++)b[g]=b[g].padEnd(p[g]," ");console.log(b.join(" | "))}}else{var w=(new Date).valueOf(),y=0;for(var $ in d)y+=h[$].length,h[$].sort(((t,e)=>(t.cod||"").localeCompare(e.cod||"")));h._errori=l.geterrori(),t.writeFileSync(e.join(X,`gen_${c}.json`),JSON.stringify(h,null,2));const a=e.join(X,`gen_${c}.xlsx`);var k=(new Date).valueOf();if(Q){const t=await import("xlsx"),e=t.utils.book_new();for(var x in h){const a=t.utils.json_to_sheet(h[x]);t.utils.book_append_sheet(e,a,x)}t.writeFile(e,a,{compression:!0})}else t.existsSync(a)&&t.unlinkSync(a);var E=(new Date).valueOf();console.log(`${D}${I}EVAL........: ${y}${A}${W} rows\n${W}load/compile: ${I}${D}${f-u}${A}${W} ms.\n${W}generate....: ${I}${D}${w-f}${A}${W} ms.\n${W}save JSON...: ${I}${D}${k-w}${A}${W} ms.\n${W}save XLSX...: ${I}${D}${E-k}${A}${W} ms.\n--------------------------------\n${W}${I}TOTALE......: ${D}${E-u}${A}${W} ms.`)}}async function doesegui(a){var{file:i,folder:s,diversi:r}=checkfilemu(a.cat,P[3]||""),n=(new Date).valueOf(),o=t.readFileSync(i).toString(),c=new Macro(a,P[3]||"");K++,c.parsedata(o);var l=(new Date).valueOf(),u=await muEval(a,c,c.codice,{limited:!1,oldstyle:!0,localvar:c.localvar}),f=(new Date).valueOf();console.log(`${u.join("\n")}`),console.log(`${D}${I}EVAL ${K}${A}: ${i} => ${W}load:${I}${D}${l-n}${A}${W}ms. -- exec:${I}${D}${f-l}${A}${W}ms.${A}\n----------------------------------------------\n${m.toString()}`),t.writeFileSync(e.join(X,"logs.json"),JSON.stringify({loadandcompile:l-n,execute:f-l,vari:a.vari.dump(),codice:c.codice,errori:c.errori},null,2)),t.writeFileSync(e.join(X,"out.txt"),u.join("\n"))}await async function main(){try{var a=function muInit(t,e,a,i,s,r,n){const o=new Ambiente(t);return setcallbacks(e,a,i,s,r,n),o}(Z,cbGetMacro,cbGetVariante,cbFunc,cbInfo,cbGetFile),r=e.join(q,Z);if(t.mkdirSync(X,{recursive:!0}),!t.existsSync(r))throw new Error(`Manca il catalogo: ${Z} su ${q}`);var n=(new Date).valueOf();switch(P[2].trim().toLowerCase()){case"g":case"genera":await genera(a,0);break;case"d":case"dump":await async function dump(a){var{file:i,folder:s,diversi:r}=checkfilemu(a.cat,P[3]||"");if(!t.existsSync(i))throw new Error("Manca il file: "+i);var n,o,c=e.extname(i),l=e.basename(i,c);if(console.log(l,c),".mu"==c){var u=new Macro(a,l);await u.loadAndCompile(`${l}${c}`),n=u.getmacro(),o=e.join(X,l+".json")}else".var"==c&&(n=await async function newVariante(t,e,a){const i=new Variante(a);return await i.load(t,e),i}(l,Z,a),o=e.join(X,l+".var.json"));n&&(t.writeFileSync(o,JSON.stringify(n,null,2)),console.log(`${W}${I}Dump: ${A}${D}${o}`))}(a);break;case"gw":await dowatch(a,genera);break;case"c":case"compila":await async function compila(a){var r,n,o=e.join(q,Z);if(!t.existsSync(o))throw new Error("Manca il catalogo "+Z);if(!t.existsSync(B))throw new Error("Manca il database di lavoro: "+B);if(t.existsSync(B))if((H=i.db(B)).esisteTabella("artbarre")){Y=!0;var c=H.all("select cod cod,des des,flfm fm,coderr coderr,codalt codalt from artbarre order by cod ");for(var l of(n={},c)){(d=l.cod.trim().toLowerCase().substr(1))&&(n[d]={des:l.des,fm:l.fm,coderr:l.coderr.trim().toLowerCase(),codalt:l.codalt.trim().toLowerCase()})}r=H.all("select codicebarra barcode,diml l,dima a,dimp p,cod cod from articoli where codicebarra like ? order by codicebarra","+%")}else r=H.all("select barcode,l,a,p,cod from items where barcode>'' order by barcode"),n={};else console.warn("MISSING DBWORK (barre e limits)");var u=dbmu(Z);u.begin(),u.run("delete from variants"),u.run("delete from macros"),u.run("delete from barcodes"),u.run("delete from extras");var f=getinfo(Z,o);for(var h of(await a.compila(f,((t,e)=>{if(e){if("macros"===t){var{def:a,md:i}=getinfofile(`${e.cod}.mu`);e.def=a,e.md=i}s(u,t,e,"mus")}})),f.var)){var d,m=`${o}/${h}.var.txt`;if(t.existsSync(m))(d=muLimits(t.readFileSync(m).toString()))&&d.length&&s(u,"extras",{tipo:"l",cod:h,info:JSON.stringify(d)},"mus")}await a.barrecompila(r,n,((t,e)=>{s(u,t,e,"mus")})),s(u,"infos",{cod:"info",des:f.cat,info:JSON.stringify({cat:f.cat,md:f.info})},"mus"),H&&H.chiudi();u.commit(),u.chiudi()}(a),console.log(`Compilazione catalogo: ${M}${I}${Z}${A}: ${D}${(new Date).valueOf()-n}ms.`);break;case"x":case"e":case"esegui":await doesegui(a);break;case"f":case"format":!function formatta(e){var{file:a,folder:i,diversi:s,ext:r}=checkfilemu(e.cat,P[3]||"");if(t.existsSync(a)){var n=t.readFileSync(a).toString(),o=".var"==r;n=function muFormatcode(t,e){const a=t.split("\n"),i=[];let s=0,r=!1,n=!1,o=[],c=e;if(c){const t=verificaisvar(0,a);c=t.fl,c&&(o=t.cols)}for(let t=0;t<a.length;t++){const e=a[t];let l=e.trim();const u=l.split("//");let f=u[0].trim();u.splice(0,1);const h=u.length?` // ${u.join("//").trim()} `:"";if(l.startsWith("/*"))r=!0,i.push(l);else if(r&&l.endsWith("*/"))r=!1,i.push(l);else if(r)i.push(e);else{const e=F.exec(l);if(e){if(i.push(l),s=e[1]?0:1,/^\s*\{(var|deriva|header|v|h)(\s.*)?\}/i.test(l)){const e=verificaisvar(t+1,a);c=e.fl,c&&(o=e.cols)}else c=!1;n=!1;continue}if(c)if(f.startsWith(":")&&!f.startsWith(":h ")||!f)i.push(l);else{let t=" ";f.startsWith(":h ")&&(f=f.substr(3).trim(),t=":h ");const e=getcolonne(f);for(let t=0;t<e.length;t++)e[t].includes(",")&&(e[t]=`"${e[t]}"`),e[t]=e[t].padEnd(o[t]," ");i.push(`${t}${e.join(" , ")} ${h}`)}else{const t=" ".repeat(s>=0?s:0);if(n)i.push(`${t} ${l}`);else{let e="";l.startsWith("#")&&(e=l.substring(1).split(" ")[0].toUpperCase(),l="#"+e+l.substring(e.length+1)),["IF","IFDEF","IFNDEF"].includes(e)?l.indexOf("#",2)<0?(i.push(`${t}${l}`),s++):(l=l.replace(/#([\w]+)/g,((t,e)=>"#"+e.toUpperCase())),i.push(`${t}${l}`)):["FOR","SELECT","FORVAR","VARIANTE","DO"].includes(e)?(i.push(`${t}${l}`),s++):["ELSEIF","ELSE","ELSEIFDEF","ELSEIFNDEF","CASE","CASES","DEFAULT"].includes(e)&&s>0?i.push(" ".repeat(s>0?s-1:0)+l):["ENDIF","ENDSELECT","LOOP","ENDFOR"].includes(e)?(i.push(" ".repeat(s>0?s-1:0)+l),s--,s<0&&(s=0)):l.startsWith("_ ")||l.startsWith(":")?i.push(l):i.push(t+l)}n=f.endsWith("\\")}}}return i.join("\n")}(n,o),t.writeFileSync(a,n),console.log(`formatted: ${o} ${W}${I}${a}${A}`)}}(a);break;case"w":case"watch":await dowatch(a,doesegui);break;default:throw new Error("Funzione non contemplata (g,c,b,x)")}}catch(t){writeerror(t)}}();export{dbmu,getinfo,getinfofile,xlsexport,xlsimport};
|