all repos — kitten @ b219fb2f774165981101cc0bf3ba30e9fd84fa65

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);
});