41 lines
1.2 KiB
JavaScript
41 lines
1.2 KiB
JavaScript
import { spawnSync } from "node:child_process";
|
|
import { mkdtemp, readFile, rm } from "node:fs/promises";
|
|
import { tmpdir } from "node:os";
|
|
import { join, resolve } from "node:path";
|
|
|
|
const temporaryDirectory = await mkdtemp(
|
|
join(tmpdir(), "wealth-ledger-openapi-"),
|
|
);
|
|
const generatedPath = join(temporaryDirectory, "schema.d.ts");
|
|
const committedPath = resolve("src/shared/api/generated/schema.d.ts");
|
|
const cliPath = resolve("node_modules/openapi-typescript/bin/cli.js");
|
|
let exitCode = 0;
|
|
|
|
try {
|
|
const generated = spawnSync(
|
|
process.execPath,
|
|
[cliPath, "src/shared/api/spec/openapi.json", "-o", generatedPath],
|
|
{ encoding: "utf8" },
|
|
);
|
|
|
|
if (generated.status !== 0) {
|
|
process.stderr.write(generated.stderr || generated.stdout);
|
|
exitCode = generated.status ?? 1;
|
|
} else {
|
|
const [committed, current] = await Promise.all([
|
|
readFile(committedPath, "utf8"),
|
|
readFile(generatedPath, "utf8"),
|
|
]);
|
|
if (committed !== current) {
|
|
console.error(
|
|
"Generated OpenAPI types are stale. Run `npm run openapi:generate` and commit the result.",
|
|
);
|
|
exitCode = 1;
|
|
}
|
|
}
|
|
} finally {
|
|
await rm(temporaryDirectory, { recursive: true, force: true });
|
|
}
|
|
|
|
process.exitCode = exitCode;
|