#!/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); }