Files
Evandro Fonseca JuniorandClaude Opus 5.5 4c826e938f
CI / verify (push) Failing after 5m43s
fix(ci): lint do Biome, Next 16.3.8 (RCE em next/og) e transicoes que se remedem
- Biome: formatacao, ordem de imports, max-width duplicado no cabecalho de
  secao, supressao justificada para nomes de view-transition, ajustes nos
  scripts de auditoria de SEO
- next 16.3.3 -> 16.3.8: GHSA-vcvr-r3jv-pc5j (execucao remota de codigo em
  next/og ImageResponse, usado nas imagens de compartilhamento)
- overrides de brace-expansion (GHSA-qhr7-859c-m2p7, GHSA-6j4f-fj2g-mc7p,
  GHSA-q2hr-2g5m-vwhr), dependencia de desenvolvimento via jest
- visibilidade das cenas le as posicoes a cada quadro e o GSAP remede as
  passagens quando a pagina muda de altura (fontes, imagens, Experiencia)

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-05 01:38:41 -03:00

45 lines
1.6 KiB
JavaScript

#!/usr/bin/env node
/** Compara duas execuções de scripts/seo-audit.mjs: node scripts/seo-compare.mjs antes.json depois.json */
import { readFileSync } from "node:fs";
const [beforePath, afterPath] = process.argv.slice(2);
if (!beforePath || !afterPath) {
console.error("uso: node scripts/seo-compare.mjs antes.json depois.json");
process.exit(1);
}
const before = JSON.parse(readFileSync(beforePath, "utf8"));
const after = JSON.parse(readFileSync(afterPath, "utf8"));
const key = (c) => `${c.scope}::${c.id}`;
const prev = new Map(before.checks.map((c) => [key(c), c]));
const next = new Map(after.checks.map((c) => [key(c), c]));
console.log(
`\nAntes: ${before.base} (${before.urls} URLs) Depois: ${after.base} (${after.urls} URLs)\n`,
);
console.log("grupo antes depois");
for (const g of new Set([
...Object.keys(before.groups),
...Object.keys(after.groups),
])) {
const a = before.groups[g] ?? { ok: 0, total: 0 };
const b = after.groups[g] ?? { ok: 0, total: 0 };
console.log(
`${g.padEnd(20)} ${`${a.ok}/${a.total}`.padEnd(9)} ${b.ok}/${b.total}`,
);
}
const fixed = [];
const regressed = [];
for (const [k, c] of next) {
const p = prev.get(k);
if (p && !p.ok && c.ok) fixed.push(c);
if (p?.ok && !c.ok) regressed.push(c);
if (!p && !c.ok)
regressed.push({ ...c, detail: `novo e falhando: ${c.detail}` });
}
console.log(`\nCorrigidos (${fixed.length}):`);
for (const c of fixed) console.log(` + ${c.scope} ${c.id}`);
console.log(`\nPiorou (${regressed.length}):`);
for (const c of regressed)
console.log(` - ${c.scope} ${c.id} ${c.detail ?? ""}`);
process.exit(regressed.length ? 2 : 0);