UNPKG

typed-openapi

Version:
66 lines (63 loc) 2 kB
import { allowedRuntimes, generateFile, generateTanstackQueryFile, mapOpenApiEndpoints, prettify } from "./chunk-N6BWPZUB.js"; // src/generate-client-files.ts import SwaggerParser from "@apidevtools/swagger-parser"; import { basename, join, dirname } from "pathe"; import { type } from "arktype"; import { mkdir, writeFile } from "fs/promises"; var cwd = process.cwd(); var now = /* @__PURE__ */ new Date(); async function ensureDir(dirPath) { try { await mkdir(dirPath, { recursive: true }); } catch (error) { console.error(`Error ensuring directory: ${error.message}`); } } var optionsSchema = type({ "output?": "string", runtime: allowedRuntimes, tanstack: "boolean | string", schemasOnly: "boolean" }); async function generateClientFiles(input, options) { const openApiDoc = await SwaggerParser.bundle(input); const ctx = mapOpenApiEndpoints(openApiDoc); console.log(`Found ${ctx.endpointList.length} endpoints`); const content = await prettify( generateFile({ ...ctx, runtime: options.runtime, schemasOnly: options.schemasOnly }) ); const outputPath = join( cwd, options.output ?? input + `.${options.runtime === "none" ? "client" : options.runtime}.ts` ); console.log("Generating client...", outputPath); await ensureDir(dirname(outputPath)); await writeFile(outputPath, content); if (options.tanstack) { const tanstackContent = await generateTanstackQueryFile({ ...ctx, relativeApiClientPath: "./" + basename(outputPath) }); const tanstackOutputPath = join( dirname(outputPath), typeof options.tanstack === "string" ? options.tanstack : `tanstack.client.ts` ); console.log("Generating tanstack client...", tanstackOutputPath); await ensureDir(dirname(tanstackOutputPath)); await writeFile(tanstackOutputPath, tanstackContent); } console.log(`Done in ${(/* @__PURE__ */ new Date()).getTime() - now.getTime()}ms !`); } export { generateClientFiles };