UNPKG

@7nohe/openapi-react-query-codegen

Version:
72 lines (71 loc) 2.77 kB
import { writeFile } from "node:fs/promises"; import path from "node:path"; import { createClient } from "@hey-api/openapi-ts"; import { buildQueriesOutputPath, buildRequestsOutputPath, formatOptions, } from "./common.mjs"; import { createSource } from "./createSource.mjs"; import { formatOutput, processOutput } from "./format.mjs"; import { print } from "./print.mjs"; export async function generate(options, version) { const openApiOutputPath = buildRequestsOutputPath(options.output); const formattedOptions = formatOptions(options); // Map CLI options to new plugins system const clientPlugin = formattedOptions.client === "@hey-api/client-axios" ? "@hey-api/client-axios" : "@hey-api/client-fetch"; const typescriptPlugin = formattedOptions.enums ? { name: "@hey-api/typescript", enums: formattedOptions.enums, } : "@hey-api/typescript"; const sdkPlugin = formattedOptions.noOperationId ? { name: "@hey-api/sdk", // `operationId: false` was deprecated in favor of `operations.nesting` operations: { nesting: "id", }, } : "@hey-api/sdk"; const plugins = [ clientPlugin, typescriptPlugin, sdkPlugin, ]; // Conditionally add schemas plugin if (!formattedOptions.noSchemas) { plugins.push(formattedOptions.schemaType ? { name: "@hey-api/schemas", type: formattedOptions.schemaType, } : "@hey-api/schemas"); } const config = { dryRun: false, input: formattedOptions.input, output: openApiOutputPath, plugins, }; await createClient(config); // Generate backward-compatible services.gen.ts shim // client.gen.ts has the `client` instance; sdk.gen.ts has SDK functions const shimContent = `// This file is auto-generated for backward compatibility\nexport * from './client.gen.js';\nexport * from './sdk.gen.js';\n`; await writeFile(path.join(openApiOutputPath, "services.gen.ts"), shimContent); const source = await createSource({ outputPath: openApiOutputPath, client: formattedOptions.client, version, pageParam: formattedOptions.pageParam, nextPageParam: formattedOptions.nextPageParam, initialPageParam: formattedOptions.initialPageParam.toString(), }); await print(source, formattedOptions); const queriesOutputPath = buildQueriesOutputPath(options.output); await formatOutput(queriesOutputPath); await processOutput({ output: queriesOutputPath, format: formattedOptions.format, lint: formattedOptions.lint, }); }