riseup-squad18/MEDICONNECT 2/scripts/check-api-drift.cjs
2025-10-07 14:53:47 -03:00

51 lines
1.5 KiB
JavaScript

#!/usr/bin/env node
/*
Verifica se a saída gerada de openapi-typescript difere do arquivo commitado.
Estratégia:
1. Gera tipos em memória (spawn openapi-typescript) para stdout.
2. Lê conteúdo atual de src/types/api.d.ts.
3. Compara strings normalizando quebras de linha.
4. Se diferente -> exit 1 com mensagem.
*/
const { spawnSync } = require("node:child_process");
const { readFileSync } = require("node:fs");
const path = require("node:path");
const SPEC = path.resolve(process.cwd(), "docs/api/openapi.partial.json");
const TARGET = path.resolve(process.cwd(), "src/types/api.d.ts");
function generateTypes() {
const result = spawnSync("npx", ["openapi-typescript", SPEC], {
encoding: "utf-8",
});
if (result.status !== 0) {
console.error(
"[check:api-drift] Falha ao gerar tipos:",
result.stderr || result.stdout
);
process.exit(2);
}
return result.stdout;
}
function normalize(str) {
return str.replace(/\r\n?/g, "\n").trim();
}
try {
const generated = normalize(generateTypes());
const current = normalize(readFileSync(TARGET, "utf-8"));
if (generated !== current) {
console.error(
"\n[check:api-drift] Diferença detectada entre spec e tipos commitados."
);
console.error("Execute: pnpm gen:api-types");
process.exit(1);
}
console.log("[check:api-drift] OK - tipos sincronizados.");
} catch (e) {
console.error("[check:api-drift] Erro inesperado:", e.message);
process.exit(2);
}