#!/usr/bin/env node // Respostas da busca por idioma: texto no idioma da página e links dentro dele. // // node scripts/verifica-busca.mjs http://127.0.0.1:3998 // // O texto das "respostas diretas" é montado no navegador pelo motor; as varreduras // de página não o enxergam. Aqui rodamos o mesmo motor sobre o índice servido. import { preparar, buscar } from "../lib/searchEngine.js"; const base = process.argv[2]; if (!base) { console.error("uso: verifica-busca.mjs "); process.exit(2); } const idiomas = (process.env.LOCALES || "pt en es fr de zh-CN").split(/\s+/); const consultas = { pt: ["flash s3", "gpio26 s3", "pinos usb c6", "deep sleep p4", "psram"], en: ["flash s3", "gpio26 s3", "usb pins c6", "deep sleep p4", "psram"], es: ["flash s3", "gpio26 s3", "usb c6", "deep sleep p4", "psram"], fr: ["flash s3", "gpio26 s3", "usb c6", "deep sleep p4", "psram"], de: ["flash s3", "gpio26 s3", "usb c6", "deep sleep p4", "psram"], "zh-CN": ["s3 闪存", "gpio26 s3", "c6 usb 引脚", "低功耗 p4", "哪款 esp32 有 psram", "安全启动"], }; // Palavras que só existem em português (as respostas dos outros idiomas não podem ter). const SO_PT = /(ligados à|dados da série|diagrama de pinos|que dependem do modo|já filtrado|em cada série|especificações do|\bcondicionais\b|\bpinos\b)/i; const strings = (r) => [r.titulo, r.descricao, ...(r.linhas ?? []).flatMap((l) => [l.k, l.v]), ...(r.chips ?? [])].filter(Boolean); let falhas = 0; for (const loc of idiomas) { const res = await fetch(`${base}/api/busca/${loc}`); if (!res.ok) { console.log(`FALHOU /api/busca/${loc}: ${res.status}`); falhas++; continue; } const indice = preparar(await res.json()); for (const q of consultas[loc] ?? consultas.en) { const { resultados } = buscar(indice, q); if (!resultados.length) { console.log(`FALHOU [${loc}] "${q}": sem resultados`); falhas++; continue; } for (const r of resultados.filter((x) => x.tipo === "resposta" || x.tipo === "pino")) { if (loc !== "pt" && !r.href.startsWith(`/${loc}/`)) { console.log(`FALHOU [${loc}] "${q}": link fora do idioma: ${r.href}`); falhas++; } if (loc !== "pt") { for (const s of strings(r)) { if (SO_PT.test(s)) { console.log(`FALHOU [${loc}] "${q}": português em "${s.slice(0, 80)}"`); falhas++; } } } } } } if (falhas === 0) console.log(` ✔ Busca: respostas e links corretos em ${idiomas.join(", ")}.`); process.exit(falhas > 0 ? 1 : 0);