typed-openapi
Version:
66 lines (63 loc) • 2 kB
JavaScript
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
};