51 lines
1.5 KiB
JavaScript
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);
|
|
}
|