microcms_sdk_generator
Version:
A type-safe MicroCMS SDK Generator
26 lines (25 loc) • 1.29 kB
JavaScript
import * as dntShim from "./_dnt.shims.js";
import { parseSchemaFiles } from "./schemaFilesParser.js";
import { format } from "prettier";
import { printDefTypeImpl } from "./templates/defType.js";
import { printOutputSchema } from "./templates/outputSchema.js";
import { printClientImpl } from "./templates/client.js";
import { printBaseSchemas } from "./templates/baseSchemas.js";
import { printInputSchema } from "./templates/inputSchema.js";
export async function generate({ schemaDir, dstFilePath, }) {
await dntShim.Deno.writeTextFile(dstFilePath, await generateAsString({ schemaDir }));
}
export async function generateAsString({ schemaDir, }) {
const header = `// Auto generated by "microcms_sdk_generator". DO NOT EDIT.
import { z } from "zod";
`;
const apis = parseSchemaFiles(schemaDir);
return format([
header,
await printBaseSchemas(),
(await Promise.all(apis.map(async (api) => await printDefTypeImpl(api)))).join("\n"),
(await Promise.all(apis.map(async (api) => await printInputSchema(api)))).join("\n"),
(await Promise.all(apis.map(async (api) => await printOutputSchema(api)))).join("\n"),
await printClientImpl(apis),
].join("\n"), { parser: "typescript", semi: true, trailingComma: "all" });
}