Files
cozsweet-frontend-nextjs/scripts/contracts/check-openapi.mjs
T
admin 19d36ed5bf
CI / Quality and Bundle Budgets (push) Has been cancelled
refactor(data): establish API contract guardrails
2026-07-16 20:09:30 +08:00

38 lines
1012 B
JavaScript

import { readFile } from "node:fs/promises";
import {
findMissingOperations,
loadJsonSource,
} from "./openapi-contract.mjs";
const source = process.argv[2] ?? process.env.BACKEND_OPENAPI_SOURCE;
if (!source) {
throw new Error(
"Provide an OpenAPI JSON path/URL or set BACKEND_OPENAPI_SOURCE",
);
}
const contractUrl = new URL(
"../../src/data/services/api/api_contract.json",
import.meta.url,
);
const [contract, openApiDocument] = await Promise.all([
readFile(contractUrl, "utf8").then(JSON.parse),
loadJsonSource(source),
]);
const missing = findMissingOperations(contract, openApiDocument);
if (missing.length > 0) {
const details = missing
.map(
({ operationId, method, path, reason }) =>
`- ${operationId}: ${method.toUpperCase()} ${path} (${reason})`,
)
.join("\n");
throw new Error(`Backend OpenAPI is missing frontend operations:\n${details}`);
}
console.log(
`Backend OpenAPI covers all ${Object.keys(contract).length} frontend operations.`,
);