Files
openwork/apps/server-v2/scripts/generate-openapi.ts
Source Open 12900a0b9e feat(server-v2): add standalone runtime and SDK foundation (#1468)
* feat(server-v2): add standalone runtime and SDK foundation

* docs(server-v2): drop planning task checklists

* build(server-v2): generate OpenAPI and SDK during dev

* build(server-v2): generate API artifacts before builds

* build(server-v2): drop duplicate root SDK generation

* build(app): remove SDK generation hooks

---------

Co-authored-by: src-opn <src-opn@users.noreply.github.com>
2026-04-17 09:54:26 -07:00

59 lines
1.9 KiB
TypeScript

import { mkdir, mkdtemp, readFile, rm, writeFile } from "node:fs/promises";
import os from "node:os";
import { dirname, join, resolve } from "node:path";
import { fileURLToPath } from "node:url";
import { createAppDependencies } from "../src/context/app-dependencies.js";
import { createApp } from "../src/app-factory.js";
import { resolveServerV2Version } from "../src/version.js";
const scriptDir = dirname(fileURLToPath(import.meta.url));
const packageDir = resolve(scriptDir, "..");
const outputPath = resolve(packageDir, "openapi/openapi.json");
async function writeIfChanged(filePath: string, contents: string) {
try {
const current = await readFile(filePath, "utf8");
if (current === contents) {
return false;
}
} catch {
// ignore missing file
}
await mkdir(dirname(filePath), { recursive: true });
await writeFile(filePath, contents, "utf8");
return true;
}
async function main() {
const workingDirectory = await mkdtemp(join(os.tmpdir(), "openwork-server-v2-openapi-"));
const dependencies = createAppDependencies({
environment: "test",
inMemory: true,
version: resolveServerV2Version(),
workingDirectory,
});
try {
const app = createApp({ dependencies });
const response = await app.request("http://openwork.local/openapi.json");
if (!response.ok) {
throw new Error(`Failed to generate OpenAPI document: ${response.status} ${response.statusText}`);
}
const document = await response.json();
const contents = `${JSON.stringify(document, null, 2)}\n`;
const changed = await writeIfChanged(outputPath, contents);
process.stdout.write(`[openwork-server-v2] ${changed ? "wrote" : "verified"} ${outputPath}\n`);
} finally {
await dependencies.close();
await rm(workingDirectory, { force: true, recursive: true });
}
}
main().catch((error) => {
process.stderr.write(`${error instanceof Error ? error.stack ?? error.message : String(error)}\n`);
process.exit(1);
});