croswil_markuno 1.0.45 → 1.0.46
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.js +5 -5
- package/package.json +1 -1
package/bin/mu-convcad.js
CHANGED
|
@@ -49,4 +49,4 @@ function muClComments(codice,tienivuoti){const righe=(code=>code.replace(/("(?:\
|
|
|
49
49
|
* @param {string} code - Il codice sorgente da formattare
|
|
50
50
|
* @param {boolean} gisvar - Flag che indica se formattare come variabile
|
|
51
51
|
* @returns {string} Il codice formattato
|
|
52
|
-
*/Date.prototype.toInt||(Date.prototype.toInt=function(){return this.getDate()+100*(this.getMonth()+1)+1e4*this.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:Clear,Reset:Reset,Bold:Bold,Reverse:Reverse,Red:Red,Green:Green,Yellow:Yellow,Blue:Blue,Magenta:Magenta,Cyan:Cyan,White:White}=init();var inidata={FOLDERBASE:"./",DBWORK:"./data/app.db",FOLDERCAT:"./data/mu",FOLDEROUT:"./out",CAT:"cat"};const fini=".lasts.markuno";fs.existsSync(fini)&&(inidata=JSON.parse(fs.readFileSync(fini))),inidata.FOLDERCAD||(inidata.FOLDERCAD="./cat3cad");var mi=minimist(process.argv);console.log(`----------------------------------------------------------------------------------------\n${Bold}${Cyan}${Bold}mu-convcad:${Reset} Convert data from 3CAD (c) Croswil 2024 v. ${Yellow}1.0.135${Reset}\n----------------------------------------------------------------------------------------`);const INI=`uso: ${Bold} mu-convcad <nomecatalogo> [opzioni]\n${Green}Opzioni:${Reset}\n ${White} -h, --help${Reset}${Green} mostra l'help\n ${White} -i, --init <folder>${Reset}${Green} cartella di lavoro (default='${inidata.FOLDERCAT}' ) \n ${White} -c, --cad <folder>${Reset}${Green} cartella cad (default='${inidata.FOLDERCAD}' ) \n ${White} -r, --reset${Reset}${Green} Cancella tutti i dati precedenti\n ${White} -t, --tipologie${Reset}${Green} Tipologie e Macro tip\n ${White} -a, --abilita${Reset}${Green} Processa abilitazioni\n`;inidata.FOLDERCAT=mi.i||mi.init||inidata.FOLDERCAT,inidata.FOLDERCAD=mi.c||mi.cad||inidata.FOLDERCAD;const catname=mi._[2]||void 0;(mi.h||mi.help||!catname)&&(console.log(INI),process.exit(0)),inidata.CAT=catname;const folder=path.join(inidata.FOLDERCAT,catname),folder2=path.join(inidata.FOLDERCAD,catname);var dborig=path.join(folder2,`${catname}.ddb`);fs.existsSync(dborig)||(console.log("manca il database di origine: "+catname),process.exit(1)),fs.writeFileSync(fini,JSON.stringify(inidata,null,2));const logdata=[],logga=v=>logdata.push(v),sql="select cod cod,des des,memo info from speciali where cat='pro'";function unisciriga(c1){var c=[];for(var x of c1)!x.startsWith('"')&&x.includes(",")&&(x=`"${x}"`),c.push(x);return c.join(",")}function parsecodecad(text,db){var vv=(text=text.replaceAll("\t",",").replaceAll("\r","").replace(/\#vb/gim,"/* VB !not supported").replace(/#endvb/gim,"*/").replace(/\#msg /gim,"!msg ")).split("\n"),cl=[],inBloccoCommento=!1;return vv.forEach(((v,i)=>{v.startsWith("/*")&&(inBloccoCommento=!0),inBloccoCommento?cl.push(v):/^\s*$/.test(v)||(db?(v=v.replace(/\s*\#m\s+(\w+)/im,((m0,m1)=>"#m ++"+m1)),cl.push(v)):(/^\s*\d+/.test(v)?v="!t "+v.trim():/^\s*\!parametri/i.test(v)?v=v.replace(/\!parametri /gi,":p "):/^\s*\w+/.test(v)&&(v="#m +"+v.replace(/\s*\_*/,"")),cl.push(v))),inBloccoCommento&&v.trim().endsWith("*/")&&(inBloccoCommento=!1)})),function muFormatcode(code,gisvar){let lines=code.split("\n"),formattedCode=[],indentLevel=0,inBloccoCommento=!1,inAcapo=!1,cols=[];var isvar=gisvar;isvar&&(isvar=(tm=verificaisvar(0,lines)).fl)&&(cols=tm.cols);for(let i=0;i<lines.length;i++){let ltot=lines[i],line=ltot.trim();var tt=line.split("//");let linenc=tt[0].trim();tt.splice(0,1);let commento=tt.length?` // ${tt.join("//").trim()} `:"";if(line.startsWith("/*"))inBloccoCommento=!0,formattedCode.push(line);else if(inBloccoCommento&&line.endsWith("*/"))inBloccoCommento=!1,formattedCode.push(line);else if(inBloccoCommento)formattedCode.push(ltot);else{var rr=regex.exec(line);if(rr){var tm;formattedCode.push(line),indentLevel=rr[1]?0:1,/^\s*\{(var|deriva|header|v|h)(\s.*)?\}/i.test(line)?(isvar=(tm=verificaisvar(i+1,lines)).fl)&&(cols=tm.cols):isvar=!1,inAcapo=!1;continue}if(isvar)if(linenc.startsWith(":")&&!linenc.startsWith(":h ")||!linenc)formattedCode.push(line);else{var lba=" ";linenc.startsWith(":h ")&&(linenc=linenc.substr(3).trim(),lba=":h ");for(var cl=getcolonne(linenc),j=0;j<cl.length;j++)cl[j].includes(",")&&(cl[j]=`"${cl[j]}"`),cl[j]=cl[j].padEnd(cols[j]," ");formattedCode.push(`${lba}${cl.join(" , ")} ${commento}`)}else{let indent=" ".repeat(indentLevel>=0?indentLevel:0);if(inAcapo)formattedCode.push(`${indent} ${line}`);else{let command="";line.startsWith("#")&&(command=line.substring(1).split(" ")[0].toUpperCase(),line="#"+command+line.substring(command.length+1)),["IF","IFDEF","IFNDEF"].includes(command)?line.indexOf("#",2)<0?(formattedCode.push(`${indent}${line}`),indentLevel++):(line=line.replace(/#([\w]+)/g,((match,m1)=>"#"+m1.toUpperCase())),formattedCode.push(`${indent}${line}`)):["FOR","SELECT","FORVAR","VARIANTE","DO"].includes(command)?(formattedCode.push(`${indent}${line}`),indentLevel++):["ELSEIF","ELSE","ELSEIFDEF","ELSEIFNDEF","CASE","CASES","DEFAULT"].includes(command)&&indentLevel>0?formattedCode.push(" ".repeat(indentLevel>0?indentLevel-1:0)+line):["ENDIF","ENDSELECT","LOOP","ENDFOR"].includes(command)?(formattedCode.push(" ".repeat(indentLevel>0?indentLevel-1:0)+line),indentLevel--,indentLevel<0&&(indentLevel=0)):line.startsWith("_ ")||line.startsWith(":")?formattedCode.push(line):formattedCode.push(indent+line)}inAcapo=linenc.endsWith("\\")}}}return formattedCode.join("\n")}(cl.join("\n"))}const tipi={"-":"sep",T:"var",M:"num",S:"str",C:"yn",L:"hidden",Z:"ny"};function torowtipo(x){var cl=[];if(!x)return"";for(var t in x)"cod"!=t&&cl.push(`${t}=${x[t]}`);return`${x.cod} ${cl.join(",")}`}function gettipo(row){var v=row.split(",");if(v[1]||v[2]){var x={};return x.cod=(v[2]||v[1]).trim().toLowerCase(),v[2]&&(x.alias=v[2].trim().toLowerCase()),v[3]&&(x.valid=v[3].trim().toLowerCase()),v[4]&&(x.des=v[4].trim()),v[5]&&(x.visible=v[5].trim().toLowerCase()),tipi[v[0]]?x.tipo=tipi[v[0]]:"D"==v[0]?x.tipo="sp."+v[6]:x.tipo=v[0].trim().toUpperCase(),x}}mi.r||mi.reset?console.log("-> crea catalogo e copia"):console.log("-> aggiorna catalogo");var dbxfile=`${inidata.FOLDERCAT}/mu_${catname}.db`;(mi.r||mi.reset)&&(fs.existsSync(folder)&&fs.rmSync(folder,{recursive:!0}),fs.existsSync(dbxfile)&&fs.unlinkSync(dbxfile)),fs.existsSync(folder)||fs.mkdirSync(folder,{recursive:!0}),fs.copyFileSync(dborig,folder+"/"+catname+".db");var db=database.db(dborig),dtx=(new Date).valueOf(),xalias=[],rr=db.all("select cod cod,des des ,codmet alias,obbl obbligo, memo info from codvar ");for(var r of(console.log("-> varianti",rr.length),rr)){for(var xx=r.info.split(""),cl=[],c1=[],i=1;i<xx.length&&xx[i];i+=2)c1.push(xx[i]);if(cl.push(`:des ${r.des.trim().toLowerCase()}`),r.obbl&&cl.push(":obbligo"),r.alias)xalias.push(`${r.cod.trim().toLowerCase()} , ${r.alias.trim().toLowerCase()}`);else{cl.push(""),cl.push(":h "+unisciriga(c1));var vv=db.all("select codopz cod,des des,memo info from varianti where codvar=? order by ordinamento,codopz",r.cod);for(var v of vv){c1=unisciriga([v.cod.trim().toLowerCase(),v.des.trim().toLowerCase(),...v.info.trim().toLowerCase().split("\t")]);cl.push(" "+c1)}r.cod=r.cod.trim().toLowerCase(),logga("var: "+r.cod),fs.writeFileSync(`${folder}/${r.cod}.var`,cl.join("\n"))}}rr=db.all("select cod cod,des des,fldef defs from modelli order by cod"),cl=[];for(var r of(cl.push(":des Modelli\n\n:h Cod, Descrizione\n"),rr))cl.push(" "+unisciriga([r.cod.trim().toLowerCase(),r.des]));fs.writeFileSync(`${folder}/modelli.var`,cl.join("\n")),xalias=["// Alias Varianti\n\n{v __aliasvar}\n:h variante, alias",...xalias.sort()],fs.writeFileSync(`${folder}/_alias.inc`,xalias.join("\n")),console.log("-> gruppi.ini");var file=path.join(folder2,"gruppi.ini");if(fs.existsSync(file)){rr=muClComments(data=fs.readFileSync(file).toString().replaceAll("�","'"));var grps={},cgroup=[];for(var r of rr){if(m=/^\s*\[(\w+)\]/i.exec(r))cgroup=[],grps[m[1].trim().toLowerCase()]=cgroup;else(x=gettipo(r))&&cgroup.push(torowtipo(x))}}var kk=Object.keys(grps).sort();cl=[];for(var k of(cl.push("// includes headers"),kk))cl.push(""),cl.push(`{h ${k}}`),cl.push(...grps[k]);if(fs.writeFileSync(path.join(folder,"_headers.inc"),cl.join("\n")),console.log("-> deriva"),(r=db.get(`${sql} and cod='deriva'`)).cod&&r.info){r.info=r.info.trim().toLowerCase().replaceAll("","\n");var tm=r.info.split("\n").map((t=>t.trim())).sort();fs.writeFileSync(path.join(folder,"_deriva.inc"),`// derivazione varianti \n{v deriva}\n:des deriva delle varianti\n :h var=opz,-> var=opz\n \n${tm.join("\n")}`)}rr=db.all(`${sql} and cod like ?`,">>%");for(var r of(console.log("-> macro",rr.length),rr)){logga("mac "+(cod=(cod=r.cod.substr(2).trim().toLowerCase()).replace(/^_*/,"")));var mac=parsecodecad(r.info.toLowerCase());cl=`// ${r.des}\n${mac} \n `;fs.writeFileSync(path.join(folder,`+${cod}.mu`),cl)}var regole=fs.readdirSync(folder2);regole=regole.filter((r=>r.toLowerCase().endsWith(".erg")));var ii=0;for(var rr of(console.log("-> regole",regole.length),regole)){var data=fs.readFileSync(path.join(folder2,rr)).toString().replaceAll("\r",""),ext=path.extname(rr),basename=path.basename(rr,ext).trim().toLowerCase();if(!basename.includes(".")&&"gene"!=basename){var info={cod:basename,des:"",codice:[],header:[],formule:{}},formula=[],status=(cl=data.split("\n"),-1);for(var c of cl){var m;if(m=/^\s*\[(\w+)\]/.exec(c)){var mm=m[1].toLowerCase();switch(mm){case"info":status=0;break;case"gene":status=1;break;case"grafica":status=2;break;default:formula=[],info.formule[mm]=formula,status=3}}else 0==status?/^\s*descrizione\s*=/i.test(c)&&(info.des=c.split("=")[1].trim().toLowerCase()):1==status?c.trim()&&info.header.push(c):2==status?info.codice.push(c):formula.push(c)}if(info.tm=muClComments(info.codice.join("\n")),info.tm.length){cl=[`// rule ${info.cod}\n :des ${info.des||info.cod}\n `];if(info.header.length){for(var r of(cl.push("{header}"),info.header)){var x;(x=gettipo(r))&&("G"==x.tipo?(delete x.tipo,cl.push(`:g ${torowtipo(x)}`)):x.tipo.length>1&&cl.push(torowtipo(x)))}cl.push("{:header}")}for(var ff in info.formule){tm=parsecodecad((righe=info.formule[ff]).join("\n"));cl.push(`\n{f ${ff}}\n${tm}\n{:f}`)}var righe=info.codice.join("\n");cl.push(parsecodecad(righe)),fs.writeFileSync(path.join(folder,basename+".mu"),cl.join("\n")),logga(`reg ${++ii}: ${info.cod} - ${info.des}`)}}}if(mi.t||mi.tipologie){rr=(r=db.get(`${sql} and cod=?`,"tipologie")).info.split("").sort();console.log("-> tipologie",rr.length);var tp={};for(var riga of rr){if(c=(v=riga.trim().toLowerCase()).split(",")[0].trim())if(c.includes("."))tp[(r=c.split("."))[0]]?tp[r[0]][r[1]]=v:console.log("errore tipo",c);else tp[c]={v:v},(r=db.get(`${sql} and cod=?`,`db_${c}`)).info&&(tp[c].db=parsecodecad(r.info.trim().toLowerCase().replaceAll("","\n"),!0)),(r=db.get(`${sql} and cod=?`,`ll_${c}`)).info&&(tp[c].list=parsecodecad(r.info.trim().toLowerCase().replaceAll("","\n"),!0))}fs.writeFileSync(folder+"/typos.json",JSON.stringify(tp,null,2));rr=db.all(`${sql} and cod like ?`,"M>%");for(var r of(console.log("-> macro tip",rr.length),rr)){var cod;logga("macdb "+(cod=r.cod.substr(2).trim().toLowerCase()));mac=parsecodecad(r.info.toLowerCase(),!0),cl=`// ${r.des}\n${mac} \n `;fs.writeFileSync(path.join(folder,`++${cod}.mu`),cl)}}if(mi.a||mi.abilita){function parseacapo(str){var cl=[];for(var spaces="";;){var i=str.lastIndexOf(",",100);if(str.length<100||i<0){cl.push(spaces+str),spaces.length&&cl.push("");break}cl.push(spaces+str.substr(0,i)+", \\"),spaces=" ",str=str.substr(i+1)}return cl.join("\n")}function normalizeopt(kk){var vv=kk.toLowerCase().split(";"),parsa=v=>v?[...new Set(v.split("*").sort().filter((e=>e.trim())))].join(","):"";return{abilit:parsa(vv[0]),scons:parsa(vv[1]),obs:parsa(vv[2])}}console.log("-> abilitazioni");kk={};var cx1=(rr=db.all("select var var,abilit abilit,codart codart from valartopz order by var,abilit")).length;for(var r of rr)if(r.var&&r.abilit&&r.codart){var xv=r.var.trim().toLowerCase(),{abilit:abilit,scons:scons,obs:obs}=normalizeopt(r.abilit),code=r.codart.trim().toLowerCase();kk[xv]||(kk[xv]={}),(k2=kk[xv])[abilit]||(k2[abilit]={scons:scons,obs:obs,neutri:[],art:[],mod:[]}),k2[abilit].neutri.push(code)}var cx2=(rr=db.all("select var var,abilit abilit,codmod codart from valmodopz order by var,abilit")).length;for(var r of rr)if(r.var&&r.abilit&&r.codart){xv=r.var.trim().toLowerCase();var{abilit:abilit,scons:scons,obs:obs}=normalizeopt(r.abilit);code=r.codart.trim().toLowerCase();kk[xv]||(kk[xv]={}),(k2=kk[xv])[abilit]||(k2[abilit]={scons:scons,obs:obs,neutri:[],art:[],mod:[]}),k2[abilit].mod.push(code)}var cx3=(rr=db.all("select var var,abilit abilit,cod codart from valmodartopz order by var,abilit")).length;for(var r of rr)if(r.var&&r.abilit&&r.codart){xv=r.var.trim().toLowerCase();var k2,{abilit:abilit,scons:scons,obs:obs}=normalizeopt(r.abilit);code=r.codart.trim().toLowerCase();kk[xv]||(kk[xv]={}),(k2=kk[xv])[abilit]||(k2[abilit]={scons:scons,obs:obs,neutri:[],art:[],mod:[]}),k2[abilit].art.push(code)}for(var xv in console.log("-> ab trasforma",cx1,cx2,cx3),kk)if(fs.existsSync(path.join(folder,xv+".var"))){cl=[];var variant=kk[xv];for(var x1 in variant){tm=variant[x1];cl.push("\n\n{limit}"),tm.neutri.length&&cl.push(parseacapo(":neutri "+tm.neutri.join(","))),tm.art.length&&cl.push(parseacapo(":art "+tm.art.join(","))),tm.mod.length&&cl.push(parseacapo(":mod "+tm.mod.join(","))),tm.obs&&cl.push(parseacapo(":obs "+tm.obs)),tm.scons&&cl.push(parseacapo(":scons "+tm.obs)),cl.push(parseacapo(":opz "+x1))}fs.writeFileSync(path.join(folder,xv+".var.txt"),cl.join("\n"))}}dtx=(new Date).valueOf()-dtx,console.log("Tempo: ",dtx+"ms"),db.chiudi();
|
|
52
|
+
*/Date.prototype.toInt||(Date.prototype.toInt=function(){return this.getDate()+100*(this.getMonth()+1)+1e4*this.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:Clear,Reset:Reset,Bold:Bold,Reverse:Reverse,Red:Red,Green:Green,Yellow:Yellow,Blue:Blue,Magenta:Magenta,Cyan:Cyan,White:White}=init();var inidata={FOLDERBASE:"./",DBWORK:"./data/app.db",FOLDERCAT:"./data/mu",FOLDEROUT:"./out",CAT:"cat"};const fini=".lasts.markuno";fs.existsSync(fini)&&(inidata=JSON.parse(fs.readFileSync(fini))),inidata.FOLDERCAD||(inidata.FOLDERCAD="./cat3cad");var mi=minimist(process.argv);console.log(`----------------------------------------------------------------------------------------\n${Bold}${Cyan}${Bold}mu-convcad:${Reset} Convert data from 3CAD (c) Croswil 2024 v. ${Yellow}1.0.141${Reset}\n----------------------------------------------------------------------------------------`);const INI=`uso: ${Bold} mu-convcad <nomecatalogo> [opzioni]\n${Green}Opzioni:${Reset}\n ${White} -h, --help${Reset}${Green} mostra l'help\n ${White} -i, --init <folder>${Reset}${Green} cartella di lavoro (default='${inidata.FOLDERCAT}' ) \n ${White} -c, --cad <folder>${Reset}${Green} cartella cad (default='${inidata.FOLDERCAD}' ) \n ${White} -r, --reset${Reset}${Green} Cancella tutti i dati precedenti\n ${White} -t, --tipologie${Reset}${Green} Tipologie e Macro tip\n ${White} -a, --abilita${Reset}${Green} Processa abilitazioni\n`;inidata.FOLDERCAT=mi.i||mi.init||inidata.FOLDERCAT,inidata.FOLDERCAD=mi.c||mi.cad||inidata.FOLDERCAD;const catname=mi._[2]||void 0;(mi.h||mi.help||!catname)&&(console.log(INI),process.exit(0)),inidata.CAT=catname;const folder=path.join(inidata.FOLDERCAT,catname),folder2=path.join(inidata.FOLDERCAD,catname);var dborig=path.join(folder2,`${catname}.ddb`);fs.existsSync(dborig)||(console.log("manca il database di origine: "+catname),process.exit(1)),fs.writeFileSync(fini,JSON.stringify(inidata,null,2));const logdata=[],logga=v=>logdata.push(v),sql="select cod cod,des des,memo info from speciali where cat='pro'";function unisciriga(c1){var c=[];for(var x of c1)!x.startsWith('"')&&x.includes(",")&&(x=`"${x}"`),c.push(x);return c.join(",")}function parsecodecad(text,db){var vv=(text=text.replaceAll("\t",",").replaceAll("\r","").replace(/\#vb/gim,"/* VB !not supported").replace(/#endvb/gim,"*/").replace(/\#msg /gim,"!msg ")).split("\n"),cl=[],inBloccoCommento=!1;return vv.forEach(((v,i)=>{v.startsWith("/*")&&(inBloccoCommento=!0),inBloccoCommento?cl.push(v):/^\s*$/.test(v)||(db?(v=v.replace(/\s*\#m\s+(\w+)/im,((m0,m1)=>"#m ++"+m1)),cl.push(v)):(/^\s*\d+/.test(v)?v="!t "+v.trim():/^\s*\!parametri/i.test(v)?v=v.replace(/\!parametri /gi,":p "):/^\s*\w+/.test(v)&&(v="#m +"+v.replace(/\s*\_*/,"")),cl.push(v))),inBloccoCommento&&v.trim().endsWith("*/")&&(inBloccoCommento=!1)})),function muFormatcode(code,gisvar){let lines=code.split("\n"),formattedCode=[],indentLevel=0,inBloccoCommento=!1,inAcapo=!1,cols=[];var isvar=gisvar;isvar&&(isvar=(tm=verificaisvar(0,lines)).fl)&&(cols=tm.cols);for(let i=0;i<lines.length;i++){let ltot=lines[i],line=ltot.trim();var tt=line.split("//");let linenc=tt[0].trim();tt.splice(0,1);let commento=tt.length?` // ${tt.join("//").trim()} `:"";if(line.startsWith("/*"))inBloccoCommento=!0,formattedCode.push(line);else if(inBloccoCommento&&line.endsWith("*/"))inBloccoCommento=!1,formattedCode.push(line);else if(inBloccoCommento)formattedCode.push(ltot);else{var rr=regex.exec(line);if(rr){var tm;formattedCode.push(line),indentLevel=rr[1]?0:1,/^\s*\{(var|deriva|header|v|h)(\s.*)?\}/i.test(line)?(isvar=(tm=verificaisvar(i+1,lines)).fl)&&(cols=tm.cols):isvar=!1,inAcapo=!1;continue}if(isvar)if(linenc.startsWith(":")&&!linenc.startsWith(":h ")||!linenc)formattedCode.push(line);else{var lba=" ";linenc.startsWith(":h ")&&(linenc=linenc.substr(3).trim(),lba=":h ");for(var cl=getcolonne(linenc),j=0;j<cl.length;j++)cl[j].includes(",")&&(cl[j]=`"${cl[j]}"`),cl[j]=cl[j].padEnd(cols[j]," ");formattedCode.push(`${lba}${cl.join(" , ")} ${commento}`)}else{let indent=" ".repeat(indentLevel>=0?indentLevel:0);if(inAcapo)formattedCode.push(`${indent} ${line}`);else{let command="";line.startsWith("#")&&(command=line.substring(1).split(" ")[0].toUpperCase(),line="#"+command+line.substring(command.length+1)),["IF","IFDEF","IFNDEF"].includes(command)?line.indexOf("#",2)<0?(formattedCode.push(`${indent}${line}`),indentLevel++):(line=line.replace(/#([\w]+)/g,((match,m1)=>"#"+m1.toUpperCase())),formattedCode.push(`${indent}${line}`)):["FOR","SELECT","FORVAR","VARIANTE","DO"].includes(command)?(formattedCode.push(`${indent}${line}`),indentLevel++):["ELSEIF","ELSE","ELSEIFDEF","ELSEIFNDEF","CASE","CASES","DEFAULT"].includes(command)&&indentLevel>0?formattedCode.push(" ".repeat(indentLevel>0?indentLevel-1:0)+line):["ENDIF","ENDSELECT","LOOP","ENDFOR"].includes(command)?(formattedCode.push(" ".repeat(indentLevel>0?indentLevel-1:0)+line),indentLevel--,indentLevel<0&&(indentLevel=0)):line.startsWith("_ ")||line.startsWith(":")?formattedCode.push(line):formattedCode.push(indent+line)}inAcapo=linenc.endsWith("\\")}}}return formattedCode.join("\n")}(cl.join("\n"))}const tipi={"-":"sep",T:"var",M:"num",S:"str",C:"yn",L:"hidden",Z:"ny"};function torowtipo(x){var cl=[];if(!x)return"";for(var t in x)"cod"!=t&&cl.push(`${t}=${x[t]}`);return`${x.cod} ${cl.join(",")}`}function gettipo(row){var v=row.split(",");if(v[1]||v[2]){var x={};return x.cod=(v[2]||v[1]).trim().toLowerCase(),v[2]&&(x.alias=v[2].trim().toLowerCase()),v[3]&&(x.valid=v[3].trim().toLowerCase()),v[4]&&(x.des=v[4].trim()),v[5]&&(x.visible=v[5].trim().toLowerCase()),tipi[v[0]]?x.tipo=tipi[v[0]]:"D"==v[0]?x.tipo="sp."+v[6]:x.tipo=v[0].trim().toUpperCase(),x}}mi.r||mi.reset?console.log("-> crea catalogo e copia"):console.log("-> aggiorna catalogo");var dbxfile=`${inidata.FOLDERCAT}/mu_${catname}.db`;(mi.r||mi.reset)&&(fs.existsSync(folder)&&fs.rmSync(folder,{recursive:!0}),fs.existsSync(dbxfile)&&fs.unlinkSync(dbxfile)),fs.existsSync(folder)||fs.mkdirSync(folder,{recursive:!0}),fs.copyFileSync(dborig,folder+"/"+catname+".db");var db=database.db(dborig),dtx=(new Date).valueOf(),xalias=[],rr=db.all("select cod cod,des des ,codmet alias,obbl obbligo, memo info from codvar ");for(var r of(console.log("-> varianti",rr.length),rr)){for(var xx=r.info.split(""),cl=[],c1=[],i=1;i<xx.length&&xx[i];i+=2)c1.push(xx[i]);if(cl.push(`:des ${r.des.trim().toLowerCase()}`),r.obbl&&cl.push(":obbligo"),r.alias)xalias.push(`${r.cod.trim().toLowerCase()} , ${r.alias.trim().toLowerCase()}`);else{cl.push(""),cl.push(":h "+unisciriga(c1));var vv=db.all("select codopz cod,des des,memo info from varianti where codvar=? order by ordinamento,codopz",r.cod);for(var v of vv){c1=unisciriga([v.cod.trim().toLowerCase(),v.des.trim().toLowerCase(),...v.info.trim().toLowerCase().split("\t")]);cl.push(" "+c1)}r.cod=r.cod.trim().toLowerCase(),logga("var: "+r.cod),fs.writeFileSync(`${folder}/${r.cod}.var`,cl.join("\n"))}}rr=db.all("select cod cod,des des,fldef defs from modelli order by cod"),cl=[];for(var r of(cl.push(":des Modelli\n\n:h Cod, Descrizione\n"),rr))cl.push(" "+unisciriga([r.cod.trim().toLowerCase(),r.des]));fs.writeFileSync(`${folder}/modelli.var`,cl.join("\n")),xalias=["// Alias Varianti\n\n{v __aliasvar}\n:h variante, alias",...xalias.sort()],fs.writeFileSync(`${folder}/_alias.inc`,xalias.join("\n")),console.log("-> gruppi.ini");var file=path.join(folder2,"gruppi.ini");if(fs.existsSync(file)){rr=muClComments(data=fs.readFileSync(file).toString().replaceAll("�","'"));var grps={},cgroup=[];for(var r of rr){if(m=/^\s*\[(\w+)\]/i.exec(r))cgroup=[],grps[m[1].trim().toLowerCase()]=cgroup;else(x=gettipo(r))&&cgroup.push(torowtipo(x))}}var kk=Object.keys(grps).sort();cl=[];for(var k of(cl.push("// includes headers"),kk))cl.push(""),cl.push(`{h ${k}}`),cl.push(...grps[k]);if(fs.writeFileSync(path.join(folder,"_headers.inc"),cl.join("\n")),console.log("-> deriva"),(r=db.get(`${sql} and cod='deriva'`)).cod&&r.info){r.info=r.info.trim().toLowerCase().replaceAll("","\n");var tm=r.info.split("\n").map((t=>t.trim())).sort();fs.writeFileSync(path.join(folder,"_deriva.inc"),`// derivazione varianti \n{v deriva}\n:des deriva delle varianti\n :h var=opz,-> var=opz\n \n${tm.join("\n")}`)}rr=db.all(`${sql} and cod like ?`,">>%");for(var r of(console.log("-> macro",rr.length),rr)){logga("mac "+(cod=(cod=r.cod.substr(2).trim().toLowerCase()).replace(/^_*/,"")));var mac=parsecodecad(r.info.toLowerCase());cl=`// ${r.des}\n${mac} \n `;fs.writeFileSync(path.join(folder,`+${cod}.mu`),cl)}var regole=fs.readdirSync(folder2);regole=regole.filter((r=>r.toLowerCase().endsWith(".erg")));var ii=0;for(var rr of(console.log("-> regole",regole.length),regole)){var data=fs.readFileSync(path.join(folder2,rr)).toString().replaceAll("\r",""),ext=path.extname(rr),basename=path.basename(rr,ext).trim().toLowerCase();if(!basename.includes(".")&&"gene"!=basename){var info={cod:basename,des:"",codice:[],header:[],formule:{}},formula=[],status=(cl=data.split("\n"),-1);for(var c of cl){var m;if(m=/^\s*\[(\w+)\]/.exec(c)){var mm=m[1].toLowerCase();switch(mm){case"info":status=0;break;case"gene":status=1;break;case"grafica":status=2;break;default:formula=[],info.formule[mm]=formula,status=3}}else 0==status?/^\s*descrizione\s*=/i.test(c)&&(info.des=c.split("=")[1].trim().toLowerCase()):1==status?c.trim()&&info.header.push(c):2==status?info.codice.push(c):formula.push(c)}if(info.tm=muClComments(info.codice.join("\n")),info.tm.length){cl=[`// rule ${info.cod}\n :des ${info.des||info.cod}\n `];if(info.header.length){for(var r of(cl.push("{header}"),info.header)){var x;(x=gettipo(r))&&("G"==x.tipo?(delete x.tipo,cl.push(`:g ${torowtipo(x)}`)):x.tipo.length>1&&cl.push(torowtipo(x)))}cl.push("{:header}")}for(var ff in info.formule){tm=parsecodecad((righe=info.formule[ff]).join("\n"));cl.push(`\n{f ${ff}}\n${tm}\n{:f}`)}var righe=info.codice.join("\n");cl.push(parsecodecad(righe)),fs.writeFileSync(path.join(folder,basename+".mu"),cl.join("\n")),logga(`reg ${++ii}: ${info.cod} - ${info.des}`)}}}if(mi.t||mi.tipologie){rr=(r=db.get(`${sql} and cod=?`,"tipologie")).info.split("").sort();console.log("-> tipologie",rr.length);var tp={};for(var riga of rr){if(c=(v=riga.trim().toLowerCase()).split(",")[0].trim())if(c.includes("."))tp[(r=c.split("."))[0]]?tp[r[0]][r[1]]=v:console.log("errore tipo",c);else tp[c]={v:v},(r=db.get(`${sql} and cod=?`,`db_${c}`)).info&&(tp[c].db=parsecodecad(r.info.trim().toLowerCase().replaceAll("","\n"),!0)),(r=db.get(`${sql} and cod=?`,`ll_${c}`)).info&&(tp[c].list=parsecodecad(r.info.trim().toLowerCase().replaceAll("","\n"),!0))}fs.writeFileSync(folder+"/typos.json",JSON.stringify(tp,null,2));rr=db.all(`${sql} and cod like ?`,"M>%");for(var r of(console.log("-> macro tip",rr.length),rr)){var cod;logga("macdb "+(cod=r.cod.substr(2).trim().toLowerCase()));mac=parsecodecad(r.info.toLowerCase(),!0),cl=`// ${r.des}\n${mac} \n `;fs.writeFileSync(path.join(folder,`++${cod}.mu`),cl)}}if(mi.a||mi.abilita){function parseacapo(str){var cl=[];for(var spaces="";;){var i=str.lastIndexOf(",",100);if(str.length<100||i<0){cl.push(spaces+str),spaces.length&&cl.push("");break}cl.push(spaces+str.substr(0,i)+", \\"),spaces=" ",str=str.substr(i+1)}return cl.join("\n")}function normalizeopt(kk){var vv=kk.toLowerCase().split(";"),parsa=v=>v?[...new Set(v.split("*").sort().filter((e=>e.trim())))].join(","):"";return{abilit:parsa(vv[0]),scons:parsa(vv[1]),obs:parsa(vv[2])}}console.log("-> abilitazioni");kk={};var cx1=(rr=db.all("select var var,abilit abilit,codart codart from valartopz order by var,abilit")).length;for(var r of rr)if(r.var&&r.abilit&&r.codart){var xv=r.var.trim().toLowerCase(),{abilit:abilit,scons:scons,obs:obs}=normalizeopt(r.abilit),code=r.codart.trim().toLowerCase();kk[xv]||(kk[xv]={}),(k2=kk[xv])[abilit]||(k2[abilit]={scons:scons,obs:obs,neutri:[],art:[],mod:[]}),k2[abilit].neutri.push(code)}var cx2=(rr=db.all("select var var,abilit abilit,codmod codart from valmodopz order by var,abilit")).length;for(var r of rr)if(r.var&&r.abilit&&r.codart){xv=r.var.trim().toLowerCase();var{abilit:abilit,scons:scons,obs:obs}=normalizeopt(r.abilit);code=r.codart.trim().toLowerCase();kk[xv]||(kk[xv]={}),(k2=kk[xv])[abilit]||(k2[abilit]={scons:scons,obs:obs,neutri:[],art:[],mod:[]}),k2[abilit].mod.push(code)}var cx3=(rr=db.all("select var var,abilit abilit,cod codart from valmodartopz order by var,abilit")).length;for(var r of rr)if(r.var&&r.abilit&&r.codart){xv=r.var.trim().toLowerCase();var k2,{abilit:abilit,scons:scons,obs:obs}=normalizeopt(r.abilit);code=r.codart.trim().toLowerCase();kk[xv]||(kk[xv]={}),(k2=kk[xv])[abilit]||(k2[abilit]={scons:scons,obs:obs,neutri:[],art:[],mod:[]}),k2[abilit].art.push(code)}for(var xv in console.log("-> ab trasforma",cx1,cx2,cx3),kk)if(fs.existsSync(path.join(folder,xv+".var"))){cl=[];var variant=kk[xv];for(var x1 in variant){tm=variant[x1];cl.push("\n\n{limit}"),tm.neutri.length&&cl.push(parseacapo(":neutri "+tm.neutri.join(","))),tm.art.length&&cl.push(parseacapo(":art "+tm.art.join(","))),tm.mod.length&&cl.push(parseacapo(":mod "+tm.mod.join(","))),tm.obs&&cl.push(parseacapo(":obs "+tm.obs)),tm.scons&&cl.push(parseacapo(":scons "+tm.obs)),cl.push(parseacapo(":opz "+x1))}fs.writeFileSync(path.join(folder,xv+".var.txt"),cl.join("\n"))}}dtx=(new Date).valueOf()-dtx,console.log("Tempo: ",dtx+"ms"),db.chiudi();
|
package/bin/mu.js
CHANGED
|
@@ -5,7 +5,7 @@ import fs from"fs";import path from"path";import{init,database,insertorupdate,ch
|
|
|
5
5
|
* @param {number} a - Primo numero da sommare
|
|
6
6
|
* @param {number} b - Secondo numero da sommare
|
|
7
7
|
* @returns {number} La somma dei due numeri
|
|
8
|
-
*/function quote(v){if((v=(v||"").trim()).length>1){if(v.startsWith('"')&&v.endsWith('"'))return v;if(v.startsWith("(")&&v.endsWith(")"))return v}return`"${v}"`}function hash(obj){let str="";if("string"==typeof obj||"number"==typeof obj)str=obj+"";else if("object"==typeof obj&&obj){const chiaviOrdinati=Object.keys(obj).sort(),separatore="\0";str=chiaviOrdinati.map((key=>`${key}${separatore}${String(obj[key])}`)).join(separatore)}let h1=2166136261,h2=2218511855;for(let i=0;i<str.length;i++){const char=str.charCodeAt(i);h1^=char,h1+=h1<<5^2779096485,h2^=h1,h2=((h2<<3)+char^2134516169)>>>0}return h1>>>=0,h1.toString(16)+h2.toString(16)}
|
|
8
|
+
*/const isObject=value=>!(!value||!Array.isArray(value)&&"object"!=typeof value);function quote(v){if((v=(v||"").trim()).length>1){if(v.startsWith('"')&&v.endsWith('"'))return v;if(v.startsWith("(")&&v.endsWith(")"))return v}return`"${v}"`}function hash(obj){let str="";if("string"==typeof obj||"number"==typeof obj)str=obj+"";else if("object"==typeof obj&&obj){const chiaviOrdinati=Object.keys(obj).sort(),separatore="\0";str=chiaviOrdinati.map((key=>`${key}${separatore}${String(obj[key])}`)).join(separatore)}let h1=2166136261,h2=2218511855;for(let i=0;i<str.length;i++){const char=str.charCodeAt(i);h1^=char,h1+=h1<<5^2779096485,h2^=h1,h2=((h2<<3)+char^2134516169)>>>0}return h1>>>=0,h1.toString(16)+h2.toString(16)}
|
|
9
9
|
/**
|
|
10
10
|
* Formatta un messaggio di errore rimuovendo informazioni non necessarie
|
|
11
11
|
* @param {Error|string} err - L'errore da formattare
|
|
@@ -121,7 +121,7 @@ function setOggetto(objDestinazione,objSorgente){"object"==typeof objDestinazion
|
|
|
121
121
|
* Supporta operazioni matematiche di base, funzioni trigonometriche,
|
|
122
122
|
* operatori di confronto e operazioni logiche.
|
|
123
123
|
* Le funzioni supportate includono: sqrt, floor, abs, sin, cos, random, clamp, round
|
|
124
|
-
*/function muCalc(expression){if(!expression)return 0;if("number"==typeof expression)return expression||0;if("string"!=typeof expression)return 0;var s=expression.replaceAll(",",".");return REGEX_NUMERO.test(s)?Number(s)||0:valutaparentesi(expression)||0}function valutavar(sh,res){var vv=res[0]||"";if(!vv)return"";if(sh.counter>=
|
|
124
|
+
*/function muCalc(expression){if(!expression)return 0;if("number"==typeof expression)return expression||0;if("string"!=typeof expression)return 0;var s=expression.replaceAll(",",".");return REGEX_NUMERO.test(s)?Number(s)||0:valutaparentesi(expression)||0}function valutavar(sh,res){var vv=res[0]||"";if(!vv)return"";if(sh.counter>=100)return vv;let vx,tmps1=valuta0(sh,vv);if(sh.stl[tmps1])vx=`-- R:${tmps1} --`;else{let tmps=sh.var(tmps1);if(isObject(tmps))return tmps;sh.stl[tmps1]=!0,vx=valutabase(sh,tmps),delete sh.stl[tmps1]}if(sh.counter>=100)return vv;if(res[1]){var cols=getcolonne(vx);if("l"==res[1])return String(cols.length);var col=muCalc(valuta0(sh,res[1]));if(!(col>=0&&col<cols.length))return"";vx=valuta0(sh,cols[col])}if(res[2]){var c1=muCalc(valuta0(sh,res[2]));if(c1){var c2=0;return res[3]&&(c2=muCalc(valuta0(sh,res[3]))),c1<0?vx.slice(c1):c2?vx.substring(c1-1,c1+c2-1):vx.substring(c1-1)}}return vx}function valutaquadra(sh,res){var vv=getcolonne(res||""),r1=clean(vv[0]);function replacecharcode(str){return"\\t"==str?"\t":"\\n"==str?"\n":(str||"").replace(/&(\d+)/g,((match,m1)=>String.fromCharCode(parseInt(m1))))}switch(r1){case"set":var m1=valuta0(sh,vv[1]||""),m2=valuta0(sh,vv[2]||"");sh.add(m1,sh.var(m2));break;case"ex":m1=valuta0(sh,vv[1]||"");(m2=valuta0(sh,vv[2]||""))||(m2=",");var m3=muCalc(valuta0(sh,vv[3]||"")),tm=m1.split(m2);return m3>0&&tm[m3-1]||"";case"ex2":var sep=replacecharcode(vv[1]||""),pos=muCalc(valuta0(sh,vv[2]||""));return vv.splice(0,3),(str=vv.join(";")).split(sep)[pos>0?pos-1:0]||"";case"replace":return vv[1].replace(new RegExp(vv[2]||"x","gim"),(vv[3]||"").trim());case"replace2":case"rp2":try{var search=replacecharcode(vv[1]||"x"),replace=replacecharcode(vv[2]||"").trim();return vv.splice(0,3),search=search.replace(/&(\d+)/g,((match,code)=>`\\u${parseInt(code).toString(16).padStart(4,"0")}`)),vv.join(";").replace(new RegExp(search,"im"),replace)}catch(error){return""}case"look":case"lookb":{let val=parseFloat(vv[1]||"");if(vv=vv.slice(2).map((e=>parseFloat(e)||0)),"lookb"==r1){const filtered=vv.filter((v=>v<=val));return filtered.length?Math.max(...filtered):val}{const filtered=vv.filter((v=>v>=val));return filtered.length?Math.min(...filtered):val}}case"tk":return(pos=muCalc(valuta0(sh,vv[1]||""))||0)?vv[pos>0?pos+1:2]||"":(pos=muCalc(valuta0(sh,vv[2]||"")),sep=vv[1]||"",pos?vv[3].split(sep)[pos-1]:"");case"totab":return vv.splice(0,1),vv.join("\t");case"tosep":sep=replacecharcode(vv[1]||"")||";";return vv.splice(0,2),vv.join(sep);case"len":{let tm;return vv.length>2?(vv.shift(),tm=vv.join(";")):tm=vv[1]||"",tm.length}case"mid":var str=valuta0(sh,vv[1]||""),len=(pos=muCalc(valuta0(sh,vv[2]||"")),muCalc(valuta0(sh,vv[3]||"")));return str.substring(pos-1,pos+len-1);case"arrotonda":{str=muCalc(vv[1]);let coeff=1;return["0","1","2","3","4","5","6"].includes(vv[2])?coeff=Math.pow(10,parseInt(vv[2])):(coeff=muCalc(vv[2]),0==coeff&&(coeff=1e3)),Math.round(str*coeff)/coeff}case"iif":return(str=muCalc(valuta0(sh,vv[1])))?vv[2]||1:vv[3]||0;case"instr":case"instr2":var str1=vv[1]||"",str2=vv[2]||"";return str1.toLowerCase().indexOf(str2.toLowerCase())+1;case"instr2":str2=vv[1]||"";return vv.splice(0,2),vv.join(";").toLowerCase().indexOf(str2.toLowerCase())+1;default:return{fun:r1,pars:vv}}}function valuta0(sh,ex){if(ex+="",sh.counter>=100)return ex;for(;;){const rt=/\$([\{\(])/im.exec(ex);if(!rt)break;{var i1=rt.index,{i:i,res:res}="("==rt[1]?parsevar(ex,i1+2,"(",")"):parsevar(ex,i1+2,"{","}");let tm=valutavar(sh,res);if(isObject(tm))return tm;ex=valuta0(sh,ex.substring(0,i1))+tm+(i>=0?valuta0(sh,ex.substring(i+1)):"")}}return ex=(ex=ex.replace(/\$([a-z|][\w|\.]*)/gi,((match,m1)=>{for(var m2="";m1.length;){let tm;if(sh.stl[m1]?tm=`--R: ${m1} --`:(sh.stl[m1]=!0,tm=valutabase(sh,sh.var(m1)),delete sh.stl[m1]),tm||!(m1.length>1)){m2=tm+m2;break}m2=m1.slice(-1)+m2,m1=m1.substring(0,m1.length-1)}return m2}))).replace(/\$(\d+)\:(\d+)(\:(\d+))?/g,((p0,p1,p2,p3,p4)=>{p4=p4?+p4:1;let cl=[];for(let i=+p1;i<=+p2;i+=p4)cl.push(i.toString());return cl.join(";")})),ex}function valutabase(sh,ex){return ex&&(sh.counter++,sh.counter<=100&&(ex=valuta0(sh,ex)),sh.counter--),ex}class Variabile{constructor(){this.stl={},this.dictionary={},this.vec=[],this.counter=0,this.fndotcallback=void 0}static isValidKey(key){return/^[\w][\w\d\.\[\]]*$/.test(key)}static sanitizeKey(key){return key.replace(/[^a-zA-Z0-9_\.\[\]]/g,"_")}setfndot(fndotcallback){this.fndotcallback=fndotcallback}
|
|
125
125
|
/**
|
|
126
126
|
* Salva lo stato corrente delle variabili nello stack
|
|
127
127
|
*/push(){this.vec.push({...this.dictionary})}
|
|
@@ -133,7 +133,7 @@ function setOggetto(objDestinazione,objSorgente){"object"==typeof objDestinazion
|
|
|
133
133
|
*/clear(){this.vec=[],this.dictionary={}}azzera=()=>this.clear()
|
|
134
134
|
/**
|
|
135
135
|
* Recupera il valore di una variabile
|
|
136
|
-
*/;var(key){let fmt="";const pp=/^(\d+)\.\.(\d+)$/.exec(key);if(pp){var n1=parseInt(pp[1]),n2=parseInt(pp[2]),cl=[];n1>n2&&([n1,n2]=[n2,n1]);for(var i=n1;i<=n2;i++)cl.push(i+"");return cl}if(key.indexOf("|")>=0){let tm=key.split("|");key=tm[0],fmt=tm[1]}function toformat(val,fmt){switch(fmt.trim().toLowerCase()){case"data":return date=parseFloat(val)||0,new Intl.DateTimeFormat("it",{day:"2-digit",month:"short",year:"2-digit"}).format(date.toDate());case"euro":return((n,valorezero="")=>{if(n){var xx=Intl.NumberFormat("en",{style:"currency",currency:"EUR"}).format(n);return xx.replace(/€/g,"").replace(/\./g,";").replace(/,/g,".").replace(/;/g,",")+"€"}return valorezero})(parseFloat(val));case"num":return((n,dec=-1)=>{const num="string"==typeof n?parseFloat(n)||0:n;if(dec<0)return num||0;const factor=Math.pow(10,dec);return Math.round(num*factor)/factor||0})(parseFloat(val));default:return val}var date}const sanitizedKey=Variabile.sanitizeKey(key);if(sanitizedKey.startsWith(".")&&this.fndotcallback){let tm=this.fndotcallback(sanitizedKey.toLowerCase());if(tm)return toformat(tm,fmt)}if(Variabile.isValidKey(sanitizedKey)){const lowercaseKey=sanitizedKey.toLowerCase();var rr=/^([\w][\w\d]*)[\.\[]/.exec(lowercaseKey);if(rr){var tm=this.dictionary[rr[1]];if(tm&&"object"==typeof tm)return toformat(function objval(tm,key){for(var parts=key.split("."),obj=tm,i=0;i<parts.length;i++){var part=parts[i],match=part.match(/(.*?)\[(\d
|
|
136
|
+
*/;var(key){let fmt="";const pp=/^(\d+)\.\.(\d+)$/.exec(key);if(pp){var n1=parseInt(pp[1]),n2=parseInt(pp[2]),cl=[];n1>n2&&([n1,n2]=[n2,n1]);for(var i=n1;i<=n2;i++)cl.push(i+"");return cl}if(key.indexOf("|")>=0){let tm=key.split("|");key=tm[0],fmt=tm[1]}function toformat(val,fmt){switch(fmt.trim().toLowerCase()){case"0":return String(parseInt(val)||0);case"-":return String((parseInt(val)||1)-1);case"+":return String((parseInt(val)||0)+1);case"data":return date=parseFloat(val)||0,new Intl.DateTimeFormat("it",{day:"2-digit",month:"short",year:"2-digit"}).format(date.toDate());case"euro":return((n,valorezero="")=>{if(n){var xx=Intl.NumberFormat("en",{style:"currency",currency:"EUR"}).format(n);return xx.replace(/€/g,"").replace(/\./g,";").replace(/,/g,".").replace(/;/g,",")+"€"}return valorezero})(parseFloat(val));case"num":return((n,dec=-1)=>{const num="string"==typeof n?parseFloat(n)||0:n;if(dec<0)return num||0;const factor=Math.pow(10,dec);return Math.round(num*factor)/factor||0})(parseFloat(val));default:return val}var date}const sanitizedKey=Variabile.sanitizeKey(key);if(sanitizedKey.startsWith(".")&&this.fndotcallback){let tm=this.fndotcallback(sanitizedKey.toLowerCase());if(tm)return toformat(tm,fmt)}if(Variabile.isValidKey(sanitizedKey)){const lowercaseKey=sanitizedKey.toLowerCase();var rr=/^([\w][\w\d]*)[\.\[]/.exec(lowercaseKey);if(rr){var tm=this.dictionary[rr[1]];if(tm&&"object"==typeof tm)return toformat(function objval(tm,key){for(var parts=key.split("."),obj=tm,i=0;i<parts.length;i++){var part=parts[i],match=part.match(/(.*?)\[(\d*)\]/);if(match){if(void 0===(obj=obj[match[1]]))return"";obj=obj[parseInt(match[2],10)||0]}else switch(part){case"_k":obj=(Object.keys(obj)||[]).join(",");break;case"_v":obj=Object.values(obj)||[];break;case"_l":obj=obj.length||0;break;default:obj=obj[part]}if(void 0===obj)return""}return"number"==typeof obj?obj+"":obj}(tm,lowercaseKey.substring(rr[0].length)),fmt)}return toformat(this.dictionary[lowercaseKey]||"",fmt)}return""}getvar(key){return this.var(key)}colonna(value,index){return getcolonne[index]||value}
|
|
137
137
|
/**
|
|
138
138
|
* Restituisce un dump delle variabili
|
|
139
139
|
*/dump(isstr=!1){var cl=[];for(var t in this.dictionary)cl.push({cod:t,val:this.dictionary[t]});return cl=cl.sort(((a,b)=>a.cod>b.cod)),isstr?cl.map((e=>`${e.cod} = ${e.val}`)):cl}
|
|
@@ -142,7 +142,7 @@ function setOggetto(objDestinazione,objSorgente){"object"==typeof objDestinazion
|
|
|
142
142
|
*/add(key,value){"number"==typeof value&&(value=String(value));const sanitizedKey=Variabile.sanitizeKey(key);if(Variabile.isValidKey(sanitizedKey)){const lowercaseKey=sanitizedKey.toLowerCase();0===value||value?this.dictionary[lowercaseKey]=value:delete this.dictionary[lowercaseKey]}else logga(`Invalid key: ${key}`)}
|
|
143
143
|
/**
|
|
144
144
|
* Valuta un'espressione con supporto per callback asincroni
|
|
145
|
-
*/valutasync(str){return valutabase(this,str)}async valuta(ex,callback){var tm=await async function valutafunc(sh,ex,callback){if(ex){for(var ii=0;ii<20;ii++){var i1=ex.lastIndexOf("$[");if(!(i1>=0)){ex=valutabase(sh,ex);break}var{i:i,res:res}=parsevar(ex,i1+2,"[","]"),t1=valutabase(sh,ex.substring(0,i1)),t2=res?valutabase(sh,res[0]):"",t3=i>=0?valutabase(sh,ex.substring(i+1)):"",t4=valutaquadra(sh,t2);"object"==typeof t4&&(t4=callback?await callback(t4?.fun,t4.pars):`** fun: ${t4.fun} ** `),ex=t1+(t4="object"==typeof t4?"**str**":t4+""||"")+t3}return ex}return""}(this,ex,callback);return tm=(ex=>{for(;;){var i1=ex.indexOf("{");if(!(i1>=0))break;var{i:i,res:res}=parsevar(ex,i1+1,"{","}");if(i<0)return ex;ex=ex.substring(0,i1)+muCalc(res[0])+(i>=0?ex.substring(i+1):"")}return ex})(tm),tm}async parametrokeyval(p){if(!(p=p.trim()))return{};let k,v,q,isnum=!1;return p.startsWith("#")&&(isnum=!0,p=p.slice(1)),q=p.indexOf("="),q>0?(k=clean(p.slice(0,q)),v=p.slice(q+1)):(q=p.indexOf(":"),q>0?(k=clean(p.slice(0,q)),v=p.slice(q+1),v=this.var(v)):(k=clean(p),v=this.var(k))),v&&"string"==typeof v&&v.includes("$")&&(v=await this.valuta(v)),["l","a","p"].includes(k)&&(isnum=!0),isnum&&(v=muCalc(v)),{k:k,v:v}}}class CodiceBarra{constructor(){this.barre={}}azzera(){this.barre={}}oriented(t,l,a,p){switch(t=(t||"1").substr(0,1).toLowerCase()){case"0":break;case"l":return{t:"l",x:l};case"a":return{t:"a",x:a};case"p":return{t:"p",x:p};case"2":return{t:t,x:l,y:p,z:a};case"5":return{t:t,x:l,y:a,z:p};case"4":return{t:t,x:p,y:l,z:a};case"3":return{t:t,x:a,y:p,z:l};case"6":return{t:t,x:p,y:a,z:l};default:return{t:"1",x:a,y:l,z:p}}}async getcode(codicebarratot,l,a,p,callback){let[codicebarra,modello]=codicebarratot.split(":");modello=modello||"";var getcode0=async(codicebarra,liv)=>{var barra=this.barre[codicebarra];if(!barra&&callback&&((barra=await callback(codicebarra))||(barra={t:"1",r:[]}),this.barre[codicebarra]=barra,barra.coderr&&"errore"!=barra.coderr||(barra.coderr=`#err_${codicebarra}`)),!barra||0==barra.r.length)return{extra:{err:"missing codicebarra"},c:`#err_${codicebarra}`,fm:10};var{t:t,x:x,y:y,z:z}=this.oriented(codicebarra,l,a,p),extra={barra:codicebarra,fm:barra.fm,t:t,liv:liv,items:barra.r.length,err:""},bx=barra.r;if(z){var t2=bx.filter((e=>e.z===z||!e.z));t2.length>0?bx=t2:extra.err=`spessore non coerente: ${z}`}if("l"==t||"a"==t||"p"==t){if(t=bx.find((e=>e.x>=x)))return{c:t.c,fm:t.x==x?0:1,x1:t.x,x:x,extra:extra}}else{var t;if(t=bx.find((e=>e.x==x&&e.y==y)))return{c:t.c,fm:0,x:x,y:y,z:z,x1:t.x,y1:t.y,z1:t.z,extra:extra};if(0!=barra.fm&&(t=bx.find((e=>e.x>=x&&e.y==y))))return{c:t.c,fm:1,x:x,y:y,z:z,x1:t.x,y1:t.y,z1:t.z,extra:extra};if(0!=barra.fm&&2!=barra.fm&&(t=bx.find((e=>e.x>=x&&e.y>=y))))return{c:t.c,fm:2,x:x,y:y,z:z,x1:t.x,y1:t.y,z1:t.z,extra:extra}}return barra.codalt&&liv<5?await getcode0(barra.codalt,liv+1):{c:barra.coderr,fm:9,x:x,y:y,z:z,extra:extra}};return await getcode0(codicebarra,0)}compila(vettore,headers){headers||(headers={});var barre={};if(Array.isArray(vettore)){for(var r of vettore)if(r.cod=clean(r.cod),r.barcode=clean(r.barcode),r.barcode.length>2&&"+"==r.barcode[0]){r.barcode=r.barcode.substr(1);var tm=this.oriented(r.barcode.substr(0,1),r.l,r.a,r.p);tm.c=r.modello?{c:r.cod,m:r.modello}:r.cod,barre[r.barcode]||(barre[r.barcode]={t:r.barcode.substr(0,1),r:[]},headers[r.barcode]&&(barre[r.barcode]=Object.assign(headers[r.barcode],barre[r.barcode]))),barre[r.barcode].r.push(tm)}for(var x in barre){barre[x].r.sort(((a,b)=>a.y?1e4*(a.x-b.x)+(a.y-b.y):a.x-b.x))}}this.barre=barre}}
|
|
145
|
+
*/valutasync(str){return valutabase(this,str)}async valuta(ex,callback){this.stl={};var tm=await async function valutafunc(sh,ex,callback){if(ex){for(var ii=0;ii<20;ii++){var i1=ex.lastIndexOf("$[");if(!(i1>=0)){ex=valutabase(sh,ex);break}var{i:i,res:res}=parsevar(ex,i1+2,"[","]"),t1=valutabase(sh,ex.substring(0,i1)),t2=res?valutabase(sh,res[0]):"",t3=i>=0?valutabase(sh,ex.substring(i+1)):"",t4=valutaquadra(sh,t2);"object"==typeof t4&&(t4=callback?await callback(t4?.fun,t4.pars):`** fun: ${t4.fun} ** `),ex=t1+(t4="object"==typeof t4?"**str**":t4+""||"")+t3}return ex}return""}(this,ex,callback);return isObject(tm)||(tm=(ex=>{for(;;){var i1=ex.indexOf("{");if(!(i1>=0))break;var{i:i,res:res}=parsevar(ex,i1+1,"{","}");if(i<0)return ex;ex=ex.substring(0,i1)+muCalc(res[0])+(i>=0?ex.substring(i+1):"")}return ex})(tm)),tm}async parametrokeyval(p){if(!(p=p.trim()))return{};let k,v,q,isnum=!1;return p.startsWith("#")&&(isnum=!0,p=p.slice(1)),q=p.indexOf("="),q>0?(k=clean(p.slice(0,q)),v=p.slice(q+1)):(q=p.indexOf(":"),q>0?(k=clean(p.slice(0,q)),v=p.slice(q+1),v=this.var(v)):(k=clean(p),v=this.var(k))),v&&"string"==typeof v&&v.includes("$")&&(v=await this.valuta(v)),["l","a","p"].includes(k)&&(isnum=!0),isnum&&(v=muCalc(v)),{k:k,v:v}}}class CodiceBarra{constructor(){this.barre={}}azzera(){this.barre={}}oriented(t,l,a,p){switch(t=(t||"1").substr(0,1).toLowerCase()){case"0":break;case"l":return{t:"l",x:l};case"a":return{t:"a",x:a};case"p":return{t:"p",x:p};case"2":return{t:t,x:l,y:p,z:a};case"5":return{t:t,x:l,y:a,z:p};case"4":return{t:t,x:p,y:l,z:a};case"3":return{t:t,x:a,y:p,z:l};case"6":return{t:t,x:p,y:a,z:l};default:return{t:"1",x:a,y:l,z:p}}}async getcode(codicebarratot,l,a,p,callback){let[codicebarra,modello]=codicebarratot.split(":");modello=modello||"";var getcode0=async(codicebarra,liv)=>{var barra=this.barre[codicebarra];if(!barra&&callback&&((barra=await callback(codicebarra))||(barra={t:"1",r:[]}),this.barre[codicebarra]=barra,barra.coderr&&"errore"!=barra.coderr||(barra.coderr=`#err_${codicebarra}`)),!barra||0==barra.r.length)return{extra:{err:"missing codicebarra"},c:`#err_${codicebarra}`,fm:10};var{t:t,x:x,y:y,z:z}=this.oriented(codicebarra,l,a,p),extra={barra:codicebarra,fm:barra.fm,t:t,liv:liv,items:barra.r.length,err:""},bx=barra.r;if(z){var t2=bx.filter((e=>e.z===z||!e.z));t2.length>0?bx=t2:extra.err=`spessore non coerente: ${z}`}if("l"==t||"a"==t||"p"==t){if(t=bx.find((e=>e.x>=x)))return{c:t.c,fm:t.x==x?0:1,x1:t.x,x:x,extra:extra}}else{var t;if(t=bx.find((e=>e.x==x&&e.y==y)))return{c:t.c,fm:0,x:x,y:y,z:z,x1:t.x,y1:t.y,z1:t.z,extra:extra};if(0!=barra.fm&&(t=bx.find((e=>e.x>=x&&e.y==y))))return{c:t.c,fm:1,x:x,y:y,z:z,x1:t.x,y1:t.y,z1:t.z,extra:extra};if(0!=barra.fm&&2!=barra.fm&&(t=bx.find((e=>e.x>=x&&e.y>=y))))return{c:t.c,fm:2,x:x,y:y,z:z,x1:t.x,y1:t.y,z1:t.z,extra:extra}}return barra.codalt&&liv<5?await getcode0(barra.codalt,liv+1):{c:barra.coderr,fm:9,x:x,y:y,z:z,extra:extra}};return await getcode0(codicebarra,0)}compila(vettore,headers){headers||(headers={});var barre={};if(Array.isArray(vettore)){for(var r of vettore)if(r.cod=clean(r.cod),r.barcode=clean(r.barcode),r.barcode.length>2&&"+"==r.barcode[0]){r.barcode=r.barcode.substr(1);var tm=this.oriented(r.barcode.substr(0,1),r.l,r.a,r.p);tm.c=r.modello?{c:r.cod,m:r.modello}:r.cod,barre[r.barcode]||(barre[r.barcode]={t:r.barcode.substr(0,1),r:[]},headers[r.barcode]&&(barre[r.barcode]=Object.assign(headers[r.barcode],barre[r.barcode]))),barre[r.barcode].r.push(tm)}for(var x in barre){barre[x].r.sort(((a,b)=>a.y?1e4*(a.x-b.x)+(a.y-b.y):a.x-b.x))}}this.barre=barre}}
|
|
146
146
|
/**
|
|
147
147
|
* Costanti e espressioni regolari utilizzate nel modulo
|
|
148
148
|
*/const keys="IFDEF|IFNDEF|CACHE|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("|");
|
|
@@ -263,4 +263,4 @@ this.vari=new Variabile,this.fndotcallback&&this.vari.setfndot(this.fndotcallbac
|
|
|
263
263
|
/** @type {Object.<string, Macro>} */
|
|
264
264
|
this.macro={},
|
|
265
265
|
/** @type {Object.<string, Variante>} */
|
|
266
|
-
this.varianti={},this.varelenco={},this.macroelenco={},this.scripts={},this.#headers=void 0,this.#alias=void 0,this.#deriva=void 0,this.#typos=void 0)}async setfndot(fndotcallback){this.fndotcallback=fndotcallback,this.vari.setfndot(fndotcallback)}async#checkelencovar(cat){if(cbInfo$1&&!this.varelenco[cat]){let tm=await cbInfo$1("headers",cat,"_varianti");Array.isArray(tm)?this.varelenco[cat]=tm:tm.vars&&(this.varelenco[cat]=tm.vars,tm.alias&&(this.#alias=tm.alias)),this.varelenco[cat]||(this.varelenco[cat]=[])}}parseheaderfrominfo(tm){if(tm&&tm.length>0)for(var t of tm)switch(t.tipo){case"_headers":t.value,t.value=headerconvert(t.value),this.#headers=t.value||{};break;case"_alias":t.value,t.value=aliasconvert(t.value),this.#alias=t.value||{};break;case"_typos":t.value;var tips=fromjson(t.value);for(var tp in tips){var tq=tips[tp];tq.db&&(tq.db=muClean(muClComments(tq.db))),tq.list&&(tq.list=muClean(muClComments(tq.list)))}t.value=tips,this.#typos=t.value||{}}}setitem(item,rule,model,datadelgiorno){this.item=clean(item,!0),this.rule=clean(rule,!0),this.model=clean(model,!0),this.data=datadelgiorno||(new Date).toInt()}async getheader(cod){if(!this.#headers&&cbInfo$1){var tm=await cbInfo$1("headers",this.cat,"_headers");this.parseheaderfrominfo(tm)}return this.#headers||(this.#headers={}),this.#headers[cod]}async getalias(){if(!this.#alias&&cbInfo$1){var tm=await cbInfo$1("headers",this.cat,"_alias");this.parseheaderfrominfo(tm)}return this.#alias||(this.#alias={}),this.#alias}get deriva(){return this.#deriva,this.#deriva||[]}async getmacro(riga){try{if("string"==typeof riga&&(riga={tipo:"M",contenuto:riga}),!riga||!riga.contenuto)return;var rr=/^([\(\{\}\)\:\$\w\.\\\/]+)[\s\;\,]*(.*)?$/im.exec(riga.contenuto);if(!rr)return void errori.add("Macro non valida:"+riga.contenuto,riga);(macro=clean(rr[1],!0)).includes("$")&&(macro=await this.vari.valuta(macro));var pars=getcolonne(rr[2]),{name:name,cat:cat}=checkmu(macro,this.cat);this.cat=cat;var macro,ky=`${cat}/${name}`;if(!this.macro[ky]){var tm=new Macro(this,name);await tm.load()?this.macro[ky]=tm:errori.add(`macro fail to load ${ky}`,riga)}return(macro=this.macro[ky])?{macro:macro,pars:pars}:(errori.add(`macro non trovata ${ky}`,riga),{})}catch(error){errori.add(geterrdes(error),`ambiente.getmacro: ${riga?.contenuto}`)}}async getvariante(cod){var{name:name,cat:cat}=checkmu(cod,this.cat),n2=name;let altri={};if(cat==this.cat&&this.#alias&&this.#alias[name]&&(altri=this.#alias[name]||{},n2=altri.cod),await this.#checkelencovar(cat),this.varelenco[cat]&&!this.varelenco[cat].includes(name))return;var key=`${cat}/${n2}`;let vv;return this.varianti[key]?vv=this.varianti[key]:(vv=new Variante(this),await vv.load(key,cat),this.varianti[key]=vv),altri&&(altri.des&&(vv.des=altri.des),altri.vdef&&(vv.vdef=altri.vdef)),vv}async varcompila(v,callback){var xx=new Variante(this);(await xx.load(v,this.cat,!0),xx.alias)&&((await this.getalias())[v]=xx.alias);callback("variants",{cod:v,des:xx.des||"",alias:xx.alias,info:xx.alias?"":JSON.stringify(getOggetto(xx,["amb"]))})}async macrocompila(v,callback){var mac=new Macro(this,v);await mac.loadAndCompile(`${v}.mu`);var t=mac.getmacro();callback("macros",{cod:v,info:JSON.stringify(t),isgenera:mac.isgenera,isheader:mac.isheader,iscodice:mac.iscodice})}async barrecompila(articolibarre,titolibarre,callback){var cc=new CodiceBarra;for(var x in cc.compila(articolibarre,titolibarre),cc.barre){callback("barcodes",{cod:x,des:"",info:JSON.stringify(cc.barre[x])})}return cc}async tojson(d){let tm;return cbFunc$1&&(tm=await cbFunc$1("json",d)),tm}async compila(info,callback){if(callback){for(var v of info.var)await this.varcompila(v,callback);for(var v of info.mu)await this.macrocompila(v,callback);if(callback("infos",{cod:"info",des:info.cat,info:JSON.stringify({cat:info.cat,md:info.info})}),this.#headers=void 0,this.#alias=void 0,this.#deriva=void 0,this.#typos=void 0,cbInfo$1){var tm=await cbInfo$1("headers",this.cat,["_headers","_alias","_deriva","_typos"]);this.parseheaderfrominfo(tm)}this.#headers?callback("infos",{cod:"headers",des:"",info:JSON.stringify(this.#headers)}):logga("missing headers"),this.#alias&&callback("infos",{cod:"alias",des:"",info:JSON.stringify(this.#alias)}),this.#deriva&&callback("infos",{cod:"deriva",des:"",info:JSON.stringify(this.#deriva)}),this.#typos&&callback("infos",{cod:"typos",des:"tipologie",info:JSON.stringify(this.#typos)})}}async getheaderfromdb(name){let totale=await cbInfo$1("header",this.cat,name,!this.#deriva),{head:head,rows:rows,macros:macros,deriva:deriva,llvars:llvars}=totale;for(var r of rows)r.cod=clean(r.cod),r.alias=clean(r.alias),r.t=clean(r.t);if(!llvars){for(var r of(llvars=new Set,rows)){let nn=r.alias?r.alias:r.cod;llvars.add(nn)}llvars=[...llvars]}this.#deriva||(this.#deriva=deriva),await this.#checkelencovar(this.cat),head.cod=clean(head.cod),head.rule=clean(head.rule),head.ruledef=head.ruledef||[];let vn=[],t=this.varelenco[this.cat];for(var nn of llvars)this.varianti[`${this.cat}/${nn}`]||t&&t.includes(nn)&&vn.push(nn);if(vn.length&&cbGetVariante$1){var vars=await cbGetVariante$1(this.cat,vn);if(vars&&vars.length)for(var x of vars){let{name:name,content:content}=x,vv=new Variante(this);vv.setheader(name,this.cat),content&&await vv.loadContentExtended(content),this.varianti[vv.key]=vv}}return{head:head,rows:rows,macros:macros}}async getlinkedmacros(rule,macros){var getkey=n=>n.includes("/")?n:`${this.cat}/${n}`;let k,cl=[];if(rule&&(k=getkey(rule),this.macro[k]||cl.push(rule)),macros&&"string"==typeof macros){let vv=macros.split(";");for(var v of vv)k=getkey(v),this.macro[k]||cl.push(v)}if(cl&&cl.length>0&&cbGetMacro$1){let tm=await cbGetMacro$1(this.cat,cl);if(tm&&tm.length>0)for(var x of tm){let m=new Macro(this,x.name);for(var t in x.content){let contenuto=x.content[t];m[t]=contenuto}this.macro[m.key]=m}}}async setruleheader(rule,pars){var{name:name,cat:cat}=checkmu(rule,this.cat),ky=`${cat}/${name}`;if(!this.macro[ky]){let totale=await this.getheaderfromdb(name),{head:head,rows:rows,macros:macros}=totale;await this.getlinkedmacros(head.rule,macros);var tm=new Macro(this,name);if(!head)return void errori.add("Missing rule: "+rule);if(head.rule){let k2=this.macro[`${cat}/${head.rule}`];if(k2)for(var x in k2)["cat","name","key"].includes(x)||(tm[x]=k2[x])}rows&&rows.length&&(tm.head=rows),this.macro[ky]=tm}this.ruleheader=ky;let mc=this.macro[ky];return errori.azzera(),await mc.setparametri(pars),mc}getruleheader(){return this.macro[this.ruleheader]}async setvariante(cod,opz){return await impostavariante(this,null,cod,opz)}async valuta(codice){let output;return"string"==typeof codice&&(codice=muClean(muClComments(codice,this.righevuote))),Array.isArray(codice)&&(logga("m1",codice),output=await muEval(this,null,codice)),output}setinfos(tm){tm&&(this.#headers=tm.headers,this.#alias=tm.alias,this.#deriva=void 0,this.#typos=tm.typos)}}Date.prototype.toInt||(Date.prototype.toInt=function(){return this.getDate()+100*(this.getMonth()+1)+1e4*this.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 mustr={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:Clear,Reset:Reset,Bold:Bold,Reverse:Reverse,Red:Red,Green:Green,Yellow:Yellow,Blue:Blue,Magenta:Magenta,Cyan:Cyan,White:White}=init();var mi=minimist(process.argv);console.log("----------------------------------------------------------------------------------------"),console.log(`${Bold}${Cyan}${Bold}Markuno:${Reset} command line utility del linguaggio (c) Croswil 2024 v. ${Yellow}1.0.135${Reset}`),console.log("----------------------------------------------------------------------------------------");var inidata={FOLDERBASE:"./",DBWORK:"./data/app.db",FOLDERCAT:"./data/mu",FOLDEROUT:"./out",CAT:"cat"};const fini=".lasts.markuno";fs.existsSync(fini)&&(inidata=JSON.parse(fs.readFileSync(fini)));var pars=mi._;(mi.h||mi.help||!pars[2])&&(console.log(`Uso: ${Bold}markuno <funzioni> <[catalogo/]markuno> [opzioni]${Reset} \n${Bold}${Cyan}Funzioni:${Reset} (seleziona una tra le seguenti)\n ${White} c, compila ${Reset}${Green} compila un catalogo/Markuno + Codici Barra\n ${White} d, dump ${Reset}${Green} compila e salva il compilato in formato json\n ${White} e, esegui ${Reset}${Green} esegui un file markuno \n ${White} f, formatta ${Reset}${Green} Formattazione di un file .mu o .var\n ${White} g, genera${Reset}${Green} generatore di codice \n ${White} w, watch ${Reset}${Green} abilita il watch su un file markuno \n ${White} gw <markuno> <maxele> ${Reset}${Green} Genera con wath (solo i primi maxele=20 elementi senza salvare\n${Bold}${Cyan}Opzioni:${Reset}${Green}\n ${White} -h, --help${Reset}${Green} mostra l'help\n ${White} -c, --cat <cat>${Reset}${Green} catalogo (default='${inidata.CAT}' ) \n ${White} -d, --dbwork ${Reset}${Green} database principale (default='${inidata.DBWORK}')\n ${White} -i, --init <folder>${Reset}${Green} cartella di lavoro (default='${inidata.FOLDERCAT}' ) \n ${White} -o, --out <folder>${Reset}${Green} cartella di output (default='${inidata.FOLDEROUT}' ) \n ${White} -x, --xlsx${Reset}${Green} output in formato excel (generatore)\n `),process.exit(0));let counter=0;const DBWORK=mi.d||mi.dbwork||inidata.DBWORK,FOLDERCAT=mi.i||mi.init||inidata.FOLDERCAT,FOLDEROUT=mi.o||mi.out||inidata.FOLDEROUT,CAT=mi.c||mi.cat||inidata.CAT;var dberp=void 0,erp3cad=!1;fs.existsSync(FOLDERCAT)||writeerror(`Manca la cartella di lavoro: ${FOLDERCAT}`),inidata=Object.assign(inidata,{FOLDERBASE:"./",DBWORK:DBWORK,FOLDERCAT:FOLDERCAT,FOLDEROUT:FOLDEROUT,CAT:CAT}),fs.writeFileSync(fini,JSON.stringify(inidata,null,2)),fs.existsSync(FOLDERCAT)||fs.mkdirSync(FOLDERCAT,{recursive:!0});const ISXLS=mi.x||mi.xlsx;function writeerror(err){var tm=err.stack.toString().split("\n");tm.splice(0,1),tm=tm.filter((e=>!/module/.test(e)&&!/node\:/.test(e))),console.log(`${Red}${err.message}${Reset}\n${tm.join("\n")}`),process.exit(1)}function dbmu(cat){var ff=path.join(FOLDERCAT,`mu_${cat}.db`);fs.existsSync(ff)||checkdb(ff,mustr,"mus");var d=database.db(ff);return setstruttura(mustr),d}function getinfofile(file){var def="",md="",f2=`${file}.txt`;fs.existsSync(f2)&&(def=fs.readFileSync(f2).toString());f2=`${file}.md`;return fs.existsSync(f2)&&(md=fs.readFileSync(f2).toString()),{def:def,md:md}}function getinfo(cat,folder){var vv=fs.readdirSync(folder),out={cat:cat,info:"",mu:[],var:[],inc:[]};for(var v of vv){var f=path.join(folder,v),extname=path.extname(v),basename=path.basename(v,extname);"__info.md"==v?out.info=fs.readFileSync(f).toString():".mu"==extname?out.mu.push(basename):".var"==extname?out.var.push(basename):".inc"==extname&&out.inc.push(basename)}return out}async function xlsexport(rq,f2,file){const XLSX=await import("xlsx"),worksheet=XLSX.utils.json_to_sheet(rq),workbook=XLSX.utils.book_new();XLSX.utils.book_append_sheet(workbook,worksheet,f2),XLSX.writeFile(workbook,`${file}.xlsx`,{compression:!0})}async function xlsimport(file,r0){const XLSX=await import("xlsx");var ws=XLSX.readFile(file).Sheets[r0];return XLSX.utils.sheet_to_json(ws)}async function cbGetMacro(cat,name){var file=`${FOLDERCAT}/${cat}/${name}.mu`;return fs.existsSync(file)?fs.readFileSync(file).toString():""}async function cbGetVariante(cat,name){var file=`${FOLDERCAT}/${cat}/${name}.var`;return fs.existsSync(file)?fs.readFileSync(file).toString():(errori.add(`missing var: ${cat}, ${name}`,{t:"cbGetVariante"}),"")}async function cbFunc(cmd,pars,vars){errori.add(`missing fun: ${cmd}`,{t:"cbFunc"})}async function cbInfo(tipo,cat,name){if(Array.isArray(name)){var tt=[];for(var n of name){var value=await cbInfo(tipo,cat,n);value&&tt.push({tipo:n,value:value})}return tt}switch(tipo){case"filter":if(!dberp||!name&&!name[0])return[];if(erp3cad)return[];var rr=dberp.all("select item,model,rule,varfilter,result,result2,exclude,exclude2 from limits where variant=?",name[0]);for(var r of rr)r.valfilter=JSON.parse(r.varfilter||"{}"),r.result=JSON.parse(r.result||"[]"),r.result2=JSON.parse(r.result2||"[]");return rr;case"headers":var f;return f="_typos"==name?`${FOLDERCAT}/${cat}/typos.json`:`${FOLDERCAT}/${cat}/${name}.inc`,fs.existsSync(f)?fs.readFileSync(f).toString():""}}async function cbGetFile(cat,file){if(fs.existsSync(path.join("./",file)))return fs.readFileSync(path.join("./",file)).toString();const ff=`${FOLDERCAT}/${cat}/${file}`;if(fs.existsSync(ff))return fs.readFileSync(ff).toString();errori.add(`missing file: ${ff}`,{t:"cbGetFile"})}function checkfilemu(cat,file){var ext=path.extname(file);[".mu",".var",".inc"].includes(ext)||(ext=".mu",file+=".mu");var folder=path.join(FOLDERCAT,cat||CAT),ff=path.join("./",file);if(fs.existsSync(ff))return{file:ff,folder:folder,diversi:!0};var i=file.indexOf("/");if(i>0&&(cat=file.substr(0,i),file=file.substr(i+1),folder=path.join(FOLDERCAT,cat||CAT),!fs.existsSync(folder)))throw new Error("missing folder: "+folder);if(ff=path.join(folder,file),fs.existsSync(ff))return{file:ff,folder:folder,diversi:!1,ext:ext};throw new Error(`non trovato il file: ${file} su ${folder}`)}async function dowatch(amb,funzione){var{file:file,folder:folder,diversi:diversi}=checkfilemu(amb.cat,pars[3]||""),maxele=parseInt(pars[4]||"10");console.log(`Start Watching: ${Cyan}${Bold}${file}${Reset}`),fs.watch(folder,(async(eventType,filename)=>{filename&&await funzione(amb,maxele)})),diversi&&fs.watch(file,(async(eventType,filename)=>{filename&&await funzione(amb,maxele)})),await funzione(amb,maxele)}async function genera(amb,maxele){var{file:file,folder:folder,diversi:diversi}=checkfilemu(amb.cat,pars[3]||"");if(!fs.existsSync(file))throw new Error("Manca il file: "+file);var tm=path.extname(file),base=path.basename(file,tm),mac=new Macro(amb,base),dt=(new Date).valueOf();await mac.loadAndCompile(`${base}${tm}`);var dt1=(new Date).valueOf(),tot={},issort={},tm2=[],ll2=[],tmh=[];if(await async function muGenerate(macro,amb,genera,callback,isTestmode=0){if(macro.isgenera&&callback){var output={counter:0,keys:{},isTestmode:isTestmode};for(var gg in macro.genera)await muGenerate_0(macro,amb,gg,callback,output);return!0}}(mac,amb,0,((generator,out,db,cc1,cc2)=>{if(maxele){var cl=[];for(var i in out){var t=out[i];if("number"==typeof t&&(t=Math.round(1e4*t)/1e4+""),"__id"!=i){var l=cl.length;tmh[l]||(tmh[l]=i,ll2[l]=i.length),ll2[l]<t.length&&(ll2[l]=t.length),cl.push(t)}}tm2.push(cl)}else{var gen=generator.split("_")[0]||gen;if(tot[gen]||(tot[gen]=[]),tot[gen].push(out),out.cod&&(issort[gen]=!0,db))for(var x in db){var ky=`${gen}_${x}`;tot[ky]||(tot[ky]=[]);var dblist=db[x];for(i=0;i<dblist.length;i++){var d=dblist[i];tot[ky].push({padre:out.cod,i:i,comp:d.c0,qt:muCalc(d.c1),des:d.c2})}}}}),maxele),maxele){for(var i=0;i<tmh.length;i++)tmh[i]=tmh[i].padEnd(ll2[i]," ");for(var tt of(console.log(`${Yellow}${tmh.join(" | ")}${Reset}`),tm2)){for(i=0;i<tt.length;i++)tt[i]=tt[i].padEnd(ll2[i]," ");console.log(tt.join(" | "))}}else{var dt2=(new Date).valueOf(),count=0;for(var ss in issort)count+=tot[ss].length,tot[ss].sort(((a,b)=>(a.cod||"").localeCompare(b.cod||"")));tot._errori=mac.geterrori(),fs.writeFileSync(path.join(FOLDEROUT,`gen_${base}.json`),JSON.stringify(tot,null,2));const fex=path.join(FOLDEROUT,`gen_${base}.xlsx`);var dt3=(new Date).valueOf();if(ISXLS){const XLSX=await import("xlsx"),wb=XLSX.utils.book_new();for(var ky in tot){const ws=XLSX.utils.json_to_sheet(tot[ky]);XLSX.utils.book_append_sheet(wb,ws,ky)}XLSX.writeFile(wb,fex,{compression:!0})}else fs.existsSync(fex)&&fs.unlinkSync(fex);var dt4=(new Date).valueOf();console.log(`${Yellow}${Bold}EVAL........: ${count}${Reset}${Cyan} rows\n${Cyan}load/compile: ${Bold}${Yellow}${dt1-dt}${Reset}${Cyan} ms.\n${Cyan}generate....: ${Bold}${Yellow}${dt2-dt1}${Reset}${Cyan} ms.\n${Cyan}save JSON...: ${Bold}${Yellow}${dt3-dt2}${Reset}${Cyan} ms.\n${Cyan}save XLSX...: ${Bold}${Yellow}${dt4-dt3}${Reset}${Cyan} ms.\n--------------------------------\n${Cyan}${Bold}TOTALE......: ${Yellow}${dt4-dt}${Reset}${Cyan} ms.`)}}async function doesegui(amb){var{file:file,folder:folder,diversi:diversi}=checkfilemu(amb.cat,pars[3]||""),dt=(new Date).valueOf(),data=fs.readFileSync(file).toString(),mac=new Macro(amb,pars[3]||"");counter++,mac.parsedata(data);var dt1=(new Date).valueOf(),out=await muEval(amb,mac,mac.codice,{limited:!1,oldstyle:!0,localvar:mac.localvar}),dt2=(new Date).valueOf();console.log(`${out.join("\n")}`),console.log(`${Yellow}${Bold}EVAL ${counter}${Reset}: ${file} => ${Cyan}load:${Bold}${Yellow}${dt1-dt}${Reset}${Cyan}ms. -- exec:${Bold}${Yellow}${dt2-dt1}${Reset}${Cyan}ms.${Reset}\n----------------------------------------------\n${errori.toString()}`),fs.writeFileSync(path.join(FOLDEROUT,"logs.json"),JSON.stringify({loadandcompile:dt1-dt,execute:dt2-dt1,vari:amb.vari.dump(),codice:mac.codice,errori:mac.errori},null,2)),fs.writeFileSync(path.join(FOLDEROUT,"out.txt"),out.join("\n"))}await async function main(){try{var amb=function muInit(cat,cbGetMacro,cbGetVariante,cbFunc,cbInfo,cbGetFile,cbLogga){var mu=new Ambiente(cat);return setcallbacks(cbGetMacro,cbGetVariante,cbFunc,cbInfo,cbGetFile,cbLogga),mu}(CAT,cbGetMacro,cbGetVariante,cbFunc,cbInfo,cbGetFile),fcat=path.join(FOLDERCAT,CAT);if(fs.mkdirSync(FOLDEROUT,{recursive:!0}),!fs.existsSync(fcat))throw new Error(`Manca il catalogo: ${CAT} su ${FOLDERCAT}`);var dt=(new Date).valueOf();switch(pars[2].trim().toLowerCase()){case"g":case"genera":await genera(amb,0);break;case"d":case"dump":await async function dump(amb){var{file:file,folder:folder,diversi:diversi}=checkfilemu(amb.cat,pars[3]||"");if(!fs.existsSync(file))throw new Error("Manca il file: "+file);var xx,fileout,tm=path.extname(file),base=path.basename(file,tm);if(console.log(base,tm),".mu"==tm){var mac=new Macro(amb,base);await mac.loadAndCompile(`${base}${tm}`),xx=mac.getmacro(),fileout=path.join(FOLDEROUT,base+".json")}else".var"==tm&&(xx=await async function newVariante(cod,cat,amb){var xx=new Variante(amb);return await xx.load(cod,cat),xx}(base,CAT,amb),fileout=path.join(FOLDEROUT,base+".var.json"));xx&&(fs.writeFileSync(fileout,JSON.stringify(xx,null,2)),console.log(`${Cyan}${Bold}Dump: ${Reset}${Yellow}${fileout}`))}(amb);break;case"gw":await dowatch(amb,genera);break;case"c":case"compila":await async function compila(amb){var articolibarre,titolibarre,folder=path.join(FOLDERCAT,CAT);if(!fs.existsSync(folder))throw new Error("Manca il catalogo "+CAT);if(!fs.existsSync(DBWORK))throw new Error("Manca il database di lavoro: "+DBWORK);if(fs.existsSync(DBWORK))if((dberp=database.db(DBWORK)).esisteTabella("artbarre")){erp3cad=!0;var rr=dberp.all("select cod cod,des des,flfm fm,coderr coderr,codalt codalt from artbarre order by cod ");for(var r of(titolibarre={},rr)){(tm=r.cod.trim().toLowerCase().substr(1))&&(titolibarre[tm]={des:r.des,fm:r.fm,coderr:r.coderr.trim().toLowerCase(),codalt:r.codalt.trim().toLowerCase()})}articolibarre=dberp.all("select codicebarra barcode,diml l,dima a,dimp p,cod cod from articoli where codicebarra like ? order by codicebarra","+%")}else articolibarre=dberp.all("select barcode,l,a,p,cod from items where barcode>'' order by barcode"),titolibarre={};else console.warn("MISSING DBWORK (barre e limits)");var db=dbmu(CAT);db.begin(),db.run("delete from variants"),db.run("delete from macros"),db.run("delete from barcodes"),db.run("delete from extras");var info=getinfo(CAT,folder);for(var x of(await amb.compila(info,((table,data)=>{if(data){if("macros"===table){var{def:def,md:md}=getinfofile(`${data.cod}.mu`);data.def=def,data.md=md}insertorupdate(db,table,data,"mus")}})),info.var)){var tm,ff=`${folder}/${x}.var.txt`;if(fs.existsSync(ff))(tm=muLimits(fs.readFileSync(ff).toString()))&&tm.length&&insertorupdate(db,"extras",{tipo:"l",cod:x,info:JSON.stringify(tm)},"mus")}await amb.barrecompila(articolibarre,titolibarre,((table,data)=>{insertorupdate(db,table,data,"mus")})),insertorupdate(db,"infos",{cod:"info",des:info.cat,info:JSON.stringify({cat:info.cat,md:info.info})},"mus"),dberp&&dberp.chiudi();db.commit(),db.chiudi()}(amb),console.log(`Compilazione catalogo: ${Red}${Bold}${CAT}${Reset}: ${Yellow}${(new Date).valueOf()-dt}ms.`);break;case"x":case"e":case"esegui":await doesegui(amb);break;case"f":case"format":!function formatta(amb){var{file:file,folder:folder,diversi:diversi,ext:ext}=checkfilemu(amb.cat,pars[3]||"");if(fs.existsSync(file)){var data=fs.readFileSync(file).toString(),isvar=".var"==ext;data=function muFormatcode(code,gisvar){let lines=code.split("\n"),formattedCode=[],indentLevel=0,inBloccoCommento=!1,inAcapo=!1,cols=[];var isvar=gisvar;isvar&&(isvar=(tm=verificaisvar(0,lines)).fl)&&(cols=tm.cols);for(let i=0;i<lines.length;i++){let ltot=lines[i],line=ltot.trim();var tt=line.split("//");let linenc=tt[0].trim();tt.splice(0,1);let commento=tt.length?` // ${tt.join("//").trim()} `:"";if(line.startsWith("/*"))inBloccoCommento=!0,formattedCode.push(line);else if(inBloccoCommento&&line.endsWith("*/"))inBloccoCommento=!1,formattedCode.push(line);else if(inBloccoCommento)formattedCode.push(ltot);else{var rr=regex.exec(line);if(rr){var tm;formattedCode.push(line),indentLevel=rr[1]?0:1,/^\s*\{(var|deriva|header|v|h)(\s.*)?\}/i.test(line)?(isvar=(tm=verificaisvar(i+1,lines)).fl)&&(cols=tm.cols):isvar=!1,inAcapo=!1;continue}if(isvar)if(linenc.startsWith(":")&&!linenc.startsWith(":h ")||!linenc)formattedCode.push(line);else{var lba=" ";linenc.startsWith(":h ")&&(linenc=linenc.substr(3).trim(),lba=":h ");for(var cl=getcolonne(linenc),j=0;j<cl.length;j++)cl[j].includes(",")&&(cl[j]=`"${cl[j]}"`),cl[j]=cl[j].padEnd(cols[j]," ");formattedCode.push(`${lba}${cl.join(" , ")} ${commento}`)}else{let indent=" ".repeat(indentLevel>=0?indentLevel:0);if(inAcapo)formattedCode.push(`${indent} ${line}`);else{let command="";line.startsWith("#")&&(command=line.substring(1).split(" ")[0].toUpperCase(),line="#"+command+line.substring(command.length+1)),["IF","IFDEF","IFNDEF"].includes(command)?line.indexOf("#",2)<0?(formattedCode.push(`${indent}${line}`),indentLevel++):(line=line.replace(/#([\w]+)/g,((match,m1)=>"#"+m1.toUpperCase())),formattedCode.push(`${indent}${line}`)):["FOR","SELECT","FORVAR","VARIANTE","DO"].includes(command)?(formattedCode.push(`${indent}${line}`),indentLevel++):["ELSEIF","ELSE","ELSEIFDEF","ELSEIFNDEF","CASE","CASES","DEFAULT"].includes(command)&&indentLevel>0?formattedCode.push(" ".repeat(indentLevel>0?indentLevel-1:0)+line):["ENDIF","ENDSELECT","LOOP","ENDFOR"].includes(command)?(formattedCode.push(" ".repeat(indentLevel>0?indentLevel-1:0)+line),indentLevel--,indentLevel<0&&(indentLevel=0)):line.startsWith("_ ")||line.startsWith(":")?formattedCode.push(line):formattedCode.push(indent+line)}inAcapo=linenc.endsWith("\\")}}}return formattedCode.join("\n")}(data,isvar),fs.writeFileSync(file,data),console.log(`formatted: ${isvar} ${Cyan}${Bold}${file}${Reset}`)}}(amb);break;case"w":case"watch":await dowatch(amb,doesegui);break;default:throw new Error("Funzione non contemplata (g,c,b,x)")}}catch(e){writeerror(e)}}();export{dbmu,getinfo,getinfofile,xlsexport,xlsimport};
|
|
266
|
+
this.varianti={},this.varelenco={},this.macroelenco={},this.scripts={},this.#headers=void 0,this.#alias=void 0,this.#deriva=void 0,this.#typos=void 0)}async setfndot(fndotcallback){this.fndotcallback=fndotcallback,this.vari.setfndot(fndotcallback)}async#checkelencovar(cat){if(cbInfo$1&&!this.varelenco[cat]){let tm=await cbInfo$1("headers",cat,"_varianti");Array.isArray(tm)?this.varelenco[cat]=tm:tm.vars&&(this.varelenco[cat]=tm.vars,tm.alias&&(this.#alias=tm.alias)),this.varelenco[cat]||(this.varelenco[cat]=[])}}parseheaderfrominfo(tm){if(tm&&tm.length>0)for(var t of tm)switch(t.tipo){case"_headers":t.value,t.value=headerconvert(t.value),this.#headers=t.value||{};break;case"_alias":t.value,t.value=aliasconvert(t.value),this.#alias=t.value||{};break;case"_typos":t.value;var tips=fromjson(t.value);for(var tp in tips){var tq=tips[tp];tq.db&&(tq.db=muClean(muClComments(tq.db))),tq.list&&(tq.list=muClean(muClComments(tq.list)))}t.value=tips,this.#typos=t.value||{}}}setitem(item,rule,model,datadelgiorno){this.item=clean(item,!0),this.rule=clean(rule,!0),this.model=clean(model,!0),this.data=datadelgiorno||(new Date).toInt()}async getheader(cod){if(!this.#headers&&cbInfo$1){var tm=await cbInfo$1("headers",this.cat,"_headers");this.parseheaderfrominfo(tm)}return this.#headers||(this.#headers={}),this.#headers[cod]}async getalias(){if(!this.#alias&&cbInfo$1){var tm=await cbInfo$1("headers",this.cat,"_alias");this.parseheaderfrominfo(tm)}return this.#alias||(this.#alias={}),this.#alias}get deriva(){return this.#deriva,this.#deriva||[]}async getmacro(riga){try{if("string"==typeof riga&&(riga={tipo:"M",contenuto:riga}),!riga||!riga.contenuto)return;var rr=/^([\(\{\}\)\:\$\w\.\\\/]+)[\s\;\,]*(.*)?$/im.exec(riga.contenuto);if(!rr)return void errori.add("Macro non valida:"+riga.contenuto,riga);(macro=clean(rr[1],!0)).includes("$")&&(macro=await this.vari.valuta(macro));var pars=getcolonne(rr[2]),{name:name,cat:cat}=checkmu(macro,this.cat);this.cat=cat;var macro,ky=`${cat}/${name}`;if(!this.macro[ky]){var tm=new Macro(this,name);await tm.load()?this.macro[ky]=tm:errori.add(`macro fail to load ${ky}`,riga)}return(macro=this.macro[ky])?{macro:macro,pars:pars}:(errori.add(`macro non trovata ${ky}`,riga),{})}catch(error){errori.add(geterrdes(error),`ambiente.getmacro: ${riga?.contenuto}`)}}async getvariante(cod){var{name:name,cat:cat}=checkmu(cod,this.cat),n2=name;let altri={};if(cat==this.cat&&this.#alias&&this.#alias[name]&&(altri=this.#alias[name]||{},n2=altri.cod),await this.#checkelencovar(cat),this.varelenco[cat]&&!this.varelenco[cat].includes(name))return;var key=`${cat}/${n2}`;let vv;return this.varianti[key]?vv=this.varianti[key]:(vv=new Variante(this),await vv.load(key,cat),this.varianti[key]=vv),altri&&(altri.des&&(vv.des=altri.des),altri.vdef&&(vv.vdef=altri.vdef)),vv}async varcompila(v,callback){var xx=new Variante(this);(await xx.load(v,this.cat,!0),xx.alias)&&((await this.getalias())[v]=xx.alias);callback("variants",{cod:v,des:xx.des||"",alias:xx.alias,info:xx.alias?"":JSON.stringify(getOggetto(xx,["amb"]))})}async macrocompila(v,callback){var mac=new Macro(this,v);await mac.loadAndCompile(`${v}.mu`);var t=mac.getmacro();callback("macros",{cod:v,info:JSON.stringify(t),isgenera:mac.isgenera,isheader:mac.isheader,iscodice:mac.iscodice})}async barrecompila(articolibarre,titolibarre,callback){var cc=new CodiceBarra;for(var x in cc.compila(articolibarre,titolibarre),cc.barre){callback("barcodes",{cod:x,des:"",info:JSON.stringify(cc.barre[x])})}return cc}async tojson(d){let tm;return cbFunc$1&&(tm=await cbFunc$1("json",d)),tm}async compila(info,callback){if(callback){for(var v of info.var)await this.varcompila(v,callback);for(var v of info.mu)await this.macrocompila(v,callback);if(callback("infos",{cod:"info",des:info.cat,info:JSON.stringify({cat:info.cat,md:info.info})}),this.#headers=void 0,this.#alias=void 0,this.#deriva=void 0,this.#typos=void 0,cbInfo$1){var tm=await cbInfo$1("headers",this.cat,["_headers","_alias","_deriva","_typos"]);this.parseheaderfrominfo(tm)}this.#headers?callback("infos",{cod:"headers",des:"",info:JSON.stringify(this.#headers)}):logga("missing headers"),this.#alias&&callback("infos",{cod:"alias",des:"",info:JSON.stringify(this.#alias)}),this.#deriva&&callback("infos",{cod:"deriva",des:"",info:JSON.stringify(this.#deriva)}),this.#typos&&callback("infos",{cod:"typos",des:"tipologie",info:JSON.stringify(this.#typos)})}}async getheaderfromdb(name){let totale=await cbInfo$1("header",this.cat,name,!this.#deriva),{head:head,rows:rows,macros:macros,deriva:deriva,llvars:llvars}=totale;for(var r of rows)r.cod=clean(r.cod),r.alias=clean(r.alias),r.t=clean(r.t);if(!llvars){for(var r of(llvars=new Set,rows)){let nn=r.alias?r.alias:r.cod;llvars.add(nn)}llvars=[...llvars]}this.#deriva||(this.#deriva=deriva),await this.#checkelencovar(this.cat),head.cod=clean(head.cod),head.rule=clean(head.rule),head.ruledef=head.ruledef||[];let vn=[],t=this.varelenco[this.cat];for(var nn of llvars)this.varianti[`${this.cat}/${nn}`]||t&&t.includes(nn)&&vn.push(nn);if(vn.length&&cbGetVariante$1){var vars=await cbGetVariante$1(this.cat,vn);if(vars&&vars.length)for(var x of vars){let{name:name,content:content}=x,vv=new Variante(this);vv.setheader(name,this.cat),content&&await vv.loadContentExtended(content),this.varianti[vv.key]=vv}}return{head:head,rows:rows,macros:macros}}async getlinkedmacros(rule,macros){var getkey=n=>n.includes("/")?n:`${this.cat}/${n}`;let k,cl=[];if(rule&&(k=getkey(rule),this.macro[k]||cl.push(rule)),macros&&"string"==typeof macros){let vv=macros.split(";");for(var v of vv)k=getkey(v),this.macro[k]||cl.push(v)}if(cl&&cl.length>0&&cbGetMacro$1){let tm=await cbGetMacro$1(this.cat,cl);if(tm&&tm.length>0)for(var x of tm){let m=new Macro(this,x.name);for(var t in x.content){let contenuto=x.content[t];m[t]=contenuto}this.macro[m.key]=m}}}async setruleheader(rule,pars){var{name:name,cat:cat}=checkmu(rule,this.cat),ky=`${cat}/${name}`;if(!this.macro[ky]){let totale=await this.getheaderfromdb(name),{head:head,rows:rows,macros:macros}=totale;await this.getlinkedmacros(head.rule,macros);var tm=new Macro(this,name);if(!head)return void errori.add("Missing rule: "+rule);if(head.rule){let k2=this.macro[`${cat}/${head.rule}`];if(k2)for(var x in k2)["cat","name","key"].includes(x)||(tm[x]=k2[x])}rows&&rows.length&&(tm.head=rows),this.macro[ky]=tm}this.ruleheader=ky;let mc=this.macro[ky];return errori.azzera(),await mc.setparametri(pars),mc}getruleheader(){return this.macro[this.ruleheader]}async setvariante(cod,opz){return await impostavariante(this,null,cod,opz)}async valuta(codice){let output;return"string"==typeof codice&&(codice=muClean(muClComments(codice,this.righevuote))),Array.isArray(codice)&&(logga("m1",codice),output=await muEval(this,null,codice)),output}setinfos(tm){tm&&(this.#headers=tm.headers,this.#alias=tm.alias,this.#deriva=void 0,this.#typos=tm.typos)}}Date.prototype.toInt||(Date.prototype.toInt=function(){return this.getDate()+100*(this.getMonth()+1)+1e4*this.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 mustr={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:Clear,Reset:Reset,Bold:Bold,Reverse:Reverse,Red:Red,Green:Green,Yellow:Yellow,Blue:Blue,Magenta:Magenta,Cyan:Cyan,White:White}=init();var mi=minimist(process.argv);console.log("----------------------------------------------------------------------------------------"),console.log(`${Bold}${Cyan}${Bold}Markuno:${Reset} command line utility del linguaggio (c) Croswil 2024 v. ${Yellow}1.0.141${Reset}`),console.log("----------------------------------------------------------------------------------------");var inidata={FOLDERBASE:"./",DBWORK:"./data/app.db",FOLDERCAT:"./data/mu",FOLDEROUT:"./out",CAT:"cat"};const fini=".lasts.markuno";fs.existsSync(fini)&&(inidata=JSON.parse(fs.readFileSync(fini)));var pars=mi._;(mi.h||mi.help||!pars[2])&&(console.log(`Uso: ${Bold}markuno <funzioni> <[catalogo/]markuno> [opzioni]${Reset} \n${Bold}${Cyan}Funzioni:${Reset} (seleziona una tra le seguenti)\n ${White} c, compila ${Reset}${Green} compila un catalogo/Markuno + Codici Barra\n ${White} d, dump ${Reset}${Green} compila e salva il compilato in formato json\n ${White} e, esegui ${Reset}${Green} esegui un file markuno \n ${White} f, formatta ${Reset}${Green} Formattazione di un file .mu o .var\n ${White} g, genera${Reset}${Green} generatore di codice \n ${White} w, watch ${Reset}${Green} abilita il watch su un file markuno \n ${White} gw <markuno> <maxele> ${Reset}${Green} Genera con wath (solo i primi maxele=20 elementi senza salvare\n${Bold}${Cyan}Opzioni:${Reset}${Green}\n ${White} -h, --help${Reset}${Green} mostra l'help\n ${White} -c, --cat <cat>${Reset}${Green} catalogo (default='${inidata.CAT}' ) \n ${White} -d, --dbwork ${Reset}${Green} database principale (default='${inidata.DBWORK}')\n ${White} -i, --init <folder>${Reset}${Green} cartella di lavoro (default='${inidata.FOLDERCAT}' ) \n ${White} -o, --out <folder>${Reset}${Green} cartella di output (default='${inidata.FOLDEROUT}' ) \n ${White} -x, --xlsx${Reset}${Green} output in formato excel (generatore)\n `),process.exit(0));let counter=0;const DBWORK=mi.d||mi.dbwork||inidata.DBWORK,FOLDERCAT=mi.i||mi.init||inidata.FOLDERCAT,FOLDEROUT=mi.o||mi.out||inidata.FOLDEROUT,CAT=mi.c||mi.cat||inidata.CAT;var dberp=void 0,erp3cad=!1;fs.existsSync(FOLDERCAT)||writeerror(`Manca la cartella di lavoro: ${FOLDERCAT}`),inidata=Object.assign(inidata,{FOLDERBASE:"./",DBWORK:DBWORK,FOLDERCAT:FOLDERCAT,FOLDEROUT:FOLDEROUT,CAT:CAT}),fs.writeFileSync(fini,JSON.stringify(inidata,null,2)),fs.existsSync(FOLDERCAT)||fs.mkdirSync(FOLDERCAT,{recursive:!0});const ISXLS=mi.x||mi.xlsx;function writeerror(err){var tm=err.stack.toString().split("\n");tm.splice(0,1),tm=tm.filter((e=>!/module/.test(e)&&!/node\:/.test(e))),console.log(`${Red}${err.message}${Reset}\n${tm.join("\n")}`),process.exit(1)}function dbmu(cat){var ff=path.join(FOLDERCAT,`mu_${cat}.db`);fs.existsSync(ff)||checkdb(ff,mustr,"mus");var d=database.db(ff);return setstruttura(mustr),d}function getinfofile(file){var def="",md="",f2=`${file}.txt`;fs.existsSync(f2)&&(def=fs.readFileSync(f2).toString());f2=`${file}.md`;return fs.existsSync(f2)&&(md=fs.readFileSync(f2).toString()),{def:def,md:md}}function getinfo(cat,folder){var vv=fs.readdirSync(folder),out={cat:cat,info:"",mu:[],var:[],inc:[]};for(var v of vv){var f=path.join(folder,v),extname=path.extname(v),basename=path.basename(v,extname);"__info.md"==v?out.info=fs.readFileSync(f).toString():".mu"==extname?out.mu.push(basename):".var"==extname?out.var.push(basename):".inc"==extname&&out.inc.push(basename)}return out}async function xlsexport(rq,f2,file){const XLSX=await import("xlsx"),worksheet=XLSX.utils.json_to_sheet(rq),workbook=XLSX.utils.book_new();XLSX.utils.book_append_sheet(workbook,worksheet,f2),XLSX.writeFile(workbook,`${file}.xlsx`,{compression:!0})}async function xlsimport(file,r0){const XLSX=await import("xlsx");var ws=XLSX.readFile(file).Sheets[r0];return XLSX.utils.sheet_to_json(ws)}async function cbGetMacro(cat,name){var file=`${FOLDERCAT}/${cat}/${name}.mu`;return fs.existsSync(file)?fs.readFileSync(file).toString():""}async function cbGetVariante(cat,name){var file=`${FOLDERCAT}/${cat}/${name}.var`;return fs.existsSync(file)?fs.readFileSync(file).toString():(errori.add(`missing var: ${cat}, ${name}`,{t:"cbGetVariante"}),"")}async function cbFunc(cmd,pars,vars){errori.add(`missing fun: ${cmd}`,{t:"cbFunc"})}async function cbInfo(tipo,cat,name){if(Array.isArray(name)){var tt=[];for(var n of name){var value=await cbInfo(tipo,cat,n);value&&tt.push({tipo:n,value:value})}return tt}switch(tipo){case"filter":if(!dberp||!name&&!name[0])return[];if(erp3cad)return[];var rr=dberp.all("select item,model,rule,varfilter,result,result2,exclude,exclude2 from limits where variant=?",name[0]);for(var r of rr)r.valfilter=JSON.parse(r.varfilter||"{}"),r.result=JSON.parse(r.result||"[]"),r.result2=JSON.parse(r.result2||"[]");return rr;case"headers":var f;return f="_typos"==name?`${FOLDERCAT}/${cat}/typos.json`:`${FOLDERCAT}/${cat}/${name}.inc`,fs.existsSync(f)?fs.readFileSync(f).toString():""}}async function cbGetFile(cat,file){if(fs.existsSync(path.join("./",file)))return fs.readFileSync(path.join("./",file)).toString();const ff=`${FOLDERCAT}/${cat}/${file}`;if(fs.existsSync(ff))return fs.readFileSync(ff).toString();errori.add(`missing file: ${ff}`,{t:"cbGetFile"})}function checkfilemu(cat,file){var ext=path.extname(file);[".mu",".var",".inc"].includes(ext)||(ext=".mu",file+=".mu");var folder=path.join(FOLDERCAT,cat||CAT),ff=path.join("./",file);if(fs.existsSync(ff))return{file:ff,folder:folder,diversi:!0};var i=file.indexOf("/");if(i>0&&(cat=file.substr(0,i),file=file.substr(i+1),folder=path.join(FOLDERCAT,cat||CAT),!fs.existsSync(folder)))throw new Error("missing folder: "+folder);if(ff=path.join(folder,file),fs.existsSync(ff))return{file:ff,folder:folder,diversi:!1,ext:ext};throw new Error(`non trovato il file: ${file} su ${folder}`)}async function dowatch(amb,funzione){var{file:file,folder:folder,diversi:diversi}=checkfilemu(amb.cat,pars[3]||""),maxele=parseInt(pars[4]||"10");console.log(`Start Watching: ${Cyan}${Bold}${file}${Reset}`),fs.watch(folder,(async(eventType,filename)=>{filename&&await funzione(amb,maxele)})),diversi&&fs.watch(file,(async(eventType,filename)=>{filename&&await funzione(amb,maxele)})),await funzione(amb,maxele)}async function genera(amb,maxele){var{file:file,folder:folder,diversi:diversi}=checkfilemu(amb.cat,pars[3]||"");if(!fs.existsSync(file))throw new Error("Manca il file: "+file);var tm=path.extname(file),base=path.basename(file,tm),mac=new Macro(amb,base),dt=(new Date).valueOf();await mac.loadAndCompile(`${base}${tm}`);var dt1=(new Date).valueOf(),tot={},issort={},tm2=[],ll2=[],tmh=[];if(await async function muGenerate(macro,amb,genera,callback,isTestmode=0){if(macro.isgenera&&callback){var output={counter:0,keys:{},isTestmode:isTestmode};for(var gg in macro.genera)await muGenerate_0(macro,amb,gg,callback,output);return!0}}(mac,amb,0,((generator,out,db,cc1,cc2)=>{if(maxele){var cl=[];for(var i in out){var t=out[i];if("number"==typeof t&&(t=Math.round(1e4*t)/1e4+""),"__id"!=i){var l=cl.length;tmh[l]||(tmh[l]=i,ll2[l]=i.length),ll2[l]<t.length&&(ll2[l]=t.length),cl.push(t)}}tm2.push(cl)}else{var gen=generator.split("_")[0]||gen;if(tot[gen]||(tot[gen]=[]),tot[gen].push(out),out.cod&&(issort[gen]=!0,db))for(var x in db){var ky=`${gen}_${x}`;tot[ky]||(tot[ky]=[]);var dblist=db[x];for(i=0;i<dblist.length;i++){var d=dblist[i];tot[ky].push({padre:out.cod,i:i,comp:d.c0,qt:muCalc(d.c1),des:d.c2})}}}}),maxele),maxele){for(var i=0;i<tmh.length;i++)tmh[i]=tmh[i].padEnd(ll2[i]," ");for(var tt of(console.log(`${Yellow}${tmh.join(" | ")}${Reset}`),tm2)){for(i=0;i<tt.length;i++)tt[i]=tt[i].padEnd(ll2[i]," ");console.log(tt.join(" | "))}}else{var dt2=(new Date).valueOf(),count=0;for(var ss in issort)count+=tot[ss].length,tot[ss].sort(((a,b)=>(a.cod||"").localeCompare(b.cod||"")));tot._errori=mac.geterrori(),fs.writeFileSync(path.join(FOLDEROUT,`gen_${base}.json`),JSON.stringify(tot,null,2));const fex=path.join(FOLDEROUT,`gen_${base}.xlsx`);var dt3=(new Date).valueOf();if(ISXLS){const XLSX=await import("xlsx"),wb=XLSX.utils.book_new();for(var ky in tot){const ws=XLSX.utils.json_to_sheet(tot[ky]);XLSX.utils.book_append_sheet(wb,ws,ky)}XLSX.writeFile(wb,fex,{compression:!0})}else fs.existsSync(fex)&&fs.unlinkSync(fex);var dt4=(new Date).valueOf();console.log(`${Yellow}${Bold}EVAL........: ${count}${Reset}${Cyan} rows\n${Cyan}load/compile: ${Bold}${Yellow}${dt1-dt}${Reset}${Cyan} ms.\n${Cyan}generate....: ${Bold}${Yellow}${dt2-dt1}${Reset}${Cyan} ms.\n${Cyan}save JSON...: ${Bold}${Yellow}${dt3-dt2}${Reset}${Cyan} ms.\n${Cyan}save XLSX...: ${Bold}${Yellow}${dt4-dt3}${Reset}${Cyan} ms.\n--------------------------------\n${Cyan}${Bold}TOTALE......: ${Yellow}${dt4-dt}${Reset}${Cyan} ms.`)}}async function doesegui(amb){var{file:file,folder:folder,diversi:diversi}=checkfilemu(amb.cat,pars[3]||""),dt=(new Date).valueOf(),data=fs.readFileSync(file).toString(),mac=new Macro(amb,pars[3]||"");counter++,mac.parsedata(data);var dt1=(new Date).valueOf(),out=await muEval(amb,mac,mac.codice,{limited:!1,oldstyle:!0,localvar:mac.localvar}),dt2=(new Date).valueOf();console.log(`${out.join("\n")}`),console.log(`${Yellow}${Bold}EVAL ${counter}${Reset}: ${file} => ${Cyan}load:${Bold}${Yellow}${dt1-dt}${Reset}${Cyan}ms. -- exec:${Bold}${Yellow}${dt2-dt1}${Reset}${Cyan}ms.${Reset}\n----------------------------------------------\n${errori.toString()}`),fs.writeFileSync(path.join(FOLDEROUT,"logs.json"),JSON.stringify({loadandcompile:dt1-dt,execute:dt2-dt1,vari:amb.vari.dump(),codice:mac.codice,errori:mac.errori},null,2)),fs.writeFileSync(path.join(FOLDEROUT,"out.txt"),out.join("\n"))}await async function main(){try{var amb=function muInit(cat,cbGetMacro,cbGetVariante,cbFunc,cbInfo,cbGetFile,cbLogga){var mu=new Ambiente(cat);return setcallbacks(cbGetMacro,cbGetVariante,cbFunc,cbInfo,cbGetFile,cbLogga),mu}(CAT,cbGetMacro,cbGetVariante,cbFunc,cbInfo,cbGetFile),fcat=path.join(FOLDERCAT,CAT);if(fs.mkdirSync(FOLDEROUT,{recursive:!0}),!fs.existsSync(fcat))throw new Error(`Manca il catalogo: ${CAT} su ${FOLDERCAT}`);var dt=(new Date).valueOf();switch(pars[2].trim().toLowerCase()){case"g":case"genera":await genera(amb,0);break;case"d":case"dump":await async function dump(amb){var{file:file,folder:folder,diversi:diversi}=checkfilemu(amb.cat,pars[3]||"");if(!fs.existsSync(file))throw new Error("Manca il file: "+file);var xx,fileout,tm=path.extname(file),base=path.basename(file,tm);if(console.log(base,tm),".mu"==tm){var mac=new Macro(amb,base);await mac.loadAndCompile(`${base}${tm}`),xx=mac.getmacro(),fileout=path.join(FOLDEROUT,base+".json")}else".var"==tm&&(xx=await async function newVariante(cod,cat,amb){var xx=new Variante(amb);return await xx.load(cod,cat),xx}(base,CAT,amb),fileout=path.join(FOLDEROUT,base+".var.json"));xx&&(fs.writeFileSync(fileout,JSON.stringify(xx,null,2)),console.log(`${Cyan}${Bold}Dump: ${Reset}${Yellow}${fileout}`))}(amb);break;case"gw":await dowatch(amb,genera);break;case"c":case"compila":await async function compila(amb){var articolibarre,titolibarre,folder=path.join(FOLDERCAT,CAT);if(!fs.existsSync(folder))throw new Error("Manca il catalogo "+CAT);if(!fs.existsSync(DBWORK))throw new Error("Manca il database di lavoro: "+DBWORK);if(fs.existsSync(DBWORK))if((dberp=database.db(DBWORK)).esisteTabella("artbarre")){erp3cad=!0;var rr=dberp.all("select cod cod,des des,flfm fm,coderr coderr,codalt codalt from artbarre order by cod ");for(var r of(titolibarre={},rr)){(tm=r.cod.trim().toLowerCase().substr(1))&&(titolibarre[tm]={des:r.des,fm:r.fm,coderr:r.coderr.trim().toLowerCase(),codalt:r.codalt.trim().toLowerCase()})}articolibarre=dberp.all("select codicebarra barcode,diml l,dima a,dimp p,cod cod from articoli where codicebarra like ? order by codicebarra","+%")}else articolibarre=dberp.all("select barcode,l,a,p,cod from items where barcode>'' order by barcode"),titolibarre={};else console.warn("MISSING DBWORK (barre e limits)");var db=dbmu(CAT);db.begin(),db.run("delete from variants"),db.run("delete from macros"),db.run("delete from barcodes"),db.run("delete from extras");var info=getinfo(CAT,folder);for(var x of(await amb.compila(info,((table,data)=>{if(data){if("macros"===table){var{def:def,md:md}=getinfofile(`${data.cod}.mu`);data.def=def,data.md=md}insertorupdate(db,table,data,"mus")}})),info.var)){var tm,ff=`${folder}/${x}.var.txt`;if(fs.existsSync(ff))(tm=muLimits(fs.readFileSync(ff).toString()))&&tm.length&&insertorupdate(db,"extras",{tipo:"l",cod:x,info:JSON.stringify(tm)},"mus")}await amb.barrecompila(articolibarre,titolibarre,((table,data)=>{insertorupdate(db,table,data,"mus")})),insertorupdate(db,"infos",{cod:"info",des:info.cat,info:JSON.stringify({cat:info.cat,md:info.info})},"mus"),dberp&&dberp.chiudi();db.commit(),db.chiudi()}(amb),console.log(`Compilazione catalogo: ${Red}${Bold}${CAT}${Reset}: ${Yellow}${(new Date).valueOf()-dt}ms.`);break;case"x":case"e":case"esegui":await doesegui(amb);break;case"f":case"format":!function formatta(amb){var{file:file,folder:folder,diversi:diversi,ext:ext}=checkfilemu(amb.cat,pars[3]||"");if(fs.existsSync(file)){var data=fs.readFileSync(file).toString(),isvar=".var"==ext;data=function muFormatcode(code,gisvar){let lines=code.split("\n"),formattedCode=[],indentLevel=0,inBloccoCommento=!1,inAcapo=!1,cols=[];var isvar=gisvar;isvar&&(isvar=(tm=verificaisvar(0,lines)).fl)&&(cols=tm.cols);for(let i=0;i<lines.length;i++){let ltot=lines[i],line=ltot.trim();var tt=line.split("//");let linenc=tt[0].trim();tt.splice(0,1);let commento=tt.length?` // ${tt.join("//").trim()} `:"";if(line.startsWith("/*"))inBloccoCommento=!0,formattedCode.push(line);else if(inBloccoCommento&&line.endsWith("*/"))inBloccoCommento=!1,formattedCode.push(line);else if(inBloccoCommento)formattedCode.push(ltot);else{var rr=regex.exec(line);if(rr){var tm;formattedCode.push(line),indentLevel=rr[1]?0:1,/^\s*\{(var|deriva|header|v|h)(\s.*)?\}/i.test(line)?(isvar=(tm=verificaisvar(i+1,lines)).fl)&&(cols=tm.cols):isvar=!1,inAcapo=!1;continue}if(isvar)if(linenc.startsWith(":")&&!linenc.startsWith(":h ")||!linenc)formattedCode.push(line);else{var lba=" ";linenc.startsWith(":h ")&&(linenc=linenc.substr(3).trim(),lba=":h ");for(var cl=getcolonne(linenc),j=0;j<cl.length;j++)cl[j].includes(",")&&(cl[j]=`"${cl[j]}"`),cl[j]=cl[j].padEnd(cols[j]," ");formattedCode.push(`${lba}${cl.join(" , ")} ${commento}`)}else{let indent=" ".repeat(indentLevel>=0?indentLevel:0);if(inAcapo)formattedCode.push(`${indent} ${line}`);else{let command="";line.startsWith("#")&&(command=line.substring(1).split(" ")[0].toUpperCase(),line="#"+command+line.substring(command.length+1)),["IF","IFDEF","IFNDEF"].includes(command)?line.indexOf("#",2)<0?(formattedCode.push(`${indent}${line}`),indentLevel++):(line=line.replace(/#([\w]+)/g,((match,m1)=>"#"+m1.toUpperCase())),formattedCode.push(`${indent}${line}`)):["FOR","SELECT","FORVAR","VARIANTE","DO"].includes(command)?(formattedCode.push(`${indent}${line}`),indentLevel++):["ELSEIF","ELSE","ELSEIFDEF","ELSEIFNDEF","CASE","CASES","DEFAULT"].includes(command)&&indentLevel>0?formattedCode.push(" ".repeat(indentLevel>0?indentLevel-1:0)+line):["ENDIF","ENDSELECT","LOOP","ENDFOR"].includes(command)?(formattedCode.push(" ".repeat(indentLevel>0?indentLevel-1:0)+line),indentLevel--,indentLevel<0&&(indentLevel=0)):line.startsWith("_ ")||line.startsWith(":")?formattedCode.push(line):formattedCode.push(indent+line)}inAcapo=linenc.endsWith("\\")}}}return formattedCode.join("\n")}(data,isvar),fs.writeFileSync(file,data),console.log(`formatted: ${isvar} ${Cyan}${Bold}${file}${Reset}`)}}(amb);break;case"w":case"watch":await dowatch(amb,doesegui);break;default:throw new Error("Funzione non contemplata (g,c,b,x)")}}catch(e){writeerror(e)}}();export{dbmu,getinfo,getinfofile,xlsexport,xlsimport};
|