pkgs/types/scripts/generate.ts (view raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
import * as fs from "node:fs/promises";
import * as path from "node:path";
import { generateModelsSpec, generateRoutesSpec } from "../src/generator/generator";
import type { OpenAPISpec } from "../src/generator/types";
const SPEC_URL =
"https://raw.githubusercontent.com/discord/discord-api-spec/main/specs/openapi.json";
async function main() {
console.log("fetching OpenAPI spec...");
const res = await fetch(SPEC_URL);
if (!res.ok) {
throw new Error(`failed to fetch spec: ${res.status}`);
}
const spec = (await res.json()) as OpenAPISpec;
const schemas = spec.components?.schemas || {};
const paths = spec.paths || {};
console.log("generating models.ts...");
const modelsCode = generateModelsSpec(schemas);
const modelsPath = path.join(process.cwd(), "src", "models.ts");
await fs.writeFile(modelsPath, modelsCode, "utf-8");
console.log("generating routes.ts...");
const routesCode = generateRoutesSpec(paths, "Models");
const routesPath = path.join(process.cwd(), "src", "routes.ts");
await fs.writeFile(routesPath, routesCode, "utf-8");
console.log("\ntype generation complete!");
console.log(`- models generated at: ${modelsPath}`);
console.log(`- routes generated at: ${routesPath}`);
}
main().catch((err) => {
console.error("fatal error during generation:", err);
process.exit(1);
});
|