CI / Lint e auditorias (push) Successful in 48s
CI / Trivy (dependências e segredos) (push) Successful in 12s
CI / Imagem Docker (linux/arm64) (push) Successful in 3m41s
Release / Plano (reaproveitar a imagem?) (push) Successful in 6s
Release / ci (push) Skipped
Release / Publica a imagem (linux/arm64) (push) Successful in 16s
Release / Cria a release no Gitea (push) Successful in 6s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
23 lines
2.3 KiB
JavaScript
Executable File
23 lines
2.3 KiB
JavaScript
Executable File
#!/usr/bin/env node
|
|
import fs from "node:fs";
|
|
const root=process.argv[2]||".";
|
|
// Confere que a busca classifica os pinos (flash, PSRAM, USB, CAN...) igual ao português em todos os idiomas.
|
|
const norm=(s="")=>String(s).toLowerCase().normalize("NFD").replace(/[̀-ͯ]/g,"");
|
|
const mods={pt:`${root}/lib/searchTopics.js`,en:`${root}/lib/data/en/topicos.js`,es:`${root}/lib/data/es/topicos.js`,fr:`${root}/lib/data/fr/topicos.js`,de:`${root}/lib/data/de/topicos.js`,"zh-CN":`${root}/lib/data/zh-CN/topicos.js`};
|
|
const T={};for(const l in mods)T[l]=(await import(new URL(mods[l],"file://"+process.cwd()+"/").href)).TOPICOS;
|
|
const dir=l=>l==="pt"?`${root}/public/conexoes`:`${root}/data/${l}/conexoes`;
|
|
const chips=fs.readdirSync(dir("pt")).filter(f=>f.endsWith(".json")).map(f=>f.slice(0,-5));
|
|
function niveis(l,chip,id){
|
|
const t=T[l].find(x=>x.id===id); const pins=JSON.parse(fs.readFileSync(`${dir(l)}/${chip}.json`,"utf8"));
|
|
return pins.map(p=>{const q={...p,_avs:(p.avisos||[]).map(norm),_fn:(p.funcoes||[]).map(norm),_blob:norm([p.nome,...(p.funcoes||[]),...(p.categorias||[]),...(p.avisos||[])].join(" "))};
|
|
if(t.pinoNivel) return t.pinoNivel(q)||"-";
|
|
if((t.pinoCats&&q.categorias?.some(c=>t.pinoCats.includes(c)))||(t.pinoRe&&t.pinoRe.test(q._blob))) return "forte"; return "-";});
|
|
}
|
|
let bad=0;
|
|
for(const id of ["flash","psram","ethernet","usb","jtag","adc","strapping","uart","spi","i2c","camera","lcd","can","touch","dac"]){
|
|
for(const chip of chips){const ref=niveis("pt",chip,id).join();
|
|
for(const l of Object.keys(mods)){ if(l==="pt")continue; const r=niveis(l,chip,id).join();
|
|
if(r!==ref){bad++; if(bad<=12) { console.log(`${id} ${chip} ${l}`); if(process.env.V){const a=ref.split(","),b=r.split(","),pp=JSON.parse(fs.readFileSync(`${dir(l)}/${chip}.json`,"utf8")),pq=JSON.parse(fs.readFileSync(`${dir("pt")}/${chip}.json`,"utf8"));a.forEach((x,i)=>{if(x!==b[i])console.log(" ",pp[i].nome,"pt="+x,l+"="+b[i],"\n pt:",(pq[i].avisos||[]).join(" | ").slice(0,160),"\n "+l+":",(pp[i].avisos||[]).join(" | ").slice(0,160),"\n fn:",JSON.stringify(pp[i].funcoes).slice(0,120))})}}}}}}
|
|
console.log(bad===0?" ✔ Busca de pinos: os 6 idiomas classificam igual ao português.":` ✖ Busca de pinos: ${bad} divergência(s) (rode com V=1).`);
|
|
process.exit(bad?1:0);
|