pkgs/types/src/lib/index.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 "fs/promises";
import * as path from "path";
import { OpenAPISpec } from "./types";
import { generateModelsSpec, generateRoutesSpec } from "./generator";
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(), "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(), "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);
});
|