UNPKG

@kubb/cli

Version:

Command-line interface for Kubb, enabling easy generation of TypeScript, React-Query, Zod, and other code from OpenAPI specifications.

67 lines (56 loc) 1.7 kB
import type { defineConfig, UserConfig } from '@kubb/core' import { cosmiconfig } from 'cosmiconfig' import { createJiti } from 'jiti' export type CosmiconfigResult = { filepath: string isEmpty?: boolean config: ReturnType<typeof defineConfig> | UserConfig } const tsLoader = async (configFile: string) => { const jiti = createJiti(import.meta.url, { jsx: { runtime: 'automatic', importSource: '@kubb/react', }, sourceMaps: true, }) const mod = await jiti.import(configFile, { default: true }) return mod } export async function getCosmiConfig(moduleName: string, config?: string): Promise<CosmiconfigResult> { const searchPlaces = [ 'package.json', `.${moduleName}rc`, `.${moduleName}rc.json`, `.${moduleName}rc.yaml`, `.${moduleName}rc.yml`, `.${moduleName}rc.ts`, `.${moduleName}rc.js`, `.${moduleName}rc.mjs`, `.${moduleName}rc.cjs`, `${moduleName}.config.ts`, `${moduleName}.config.js`, `${moduleName}.config.mjs`, `${moduleName}.config.cjs`, ] const explorer = cosmiconfig(moduleName, { cache: false, searchPlaces: [ ...searchPlaces.map((searchPlace) => { return `.config/${searchPlace}` }), ...searchPlaces.map((searchPlace) => { return `configs/${searchPlace}` }), ...searchPlaces, ], loaders: { '.ts': tsLoader, }, }) const result = config ? await explorer.load(config) : await explorer.search() if (result?.isEmpty || !result || !result.config) { throw new Error('Config not defined, create a kubb.config.js or pass through your config with the option --config') } return result as CosmiconfigResult }