@kubb/cli 2.0.0-alpha.2 → 2.0.0-alpha.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +38 -51
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +39 -52
- package/dist/index.js.map +1 -1
- package/package.json +8 -7
- package/src/generate.ts +137 -0
- package/src/index.ts +96 -0
- package/src/init.ts +94 -0
- package/src/utils/OraWritable.ts +27 -0
- package/src/utils/getConfig.ts +37 -0
- package/src/utils/getCosmiConfig.ts +82 -0
- package/src/utils/getPlugins.ts +41 -0
- package/src/utils/getSummary.ts +84 -0
- package/src/utils/parseHrtimeToSeconds.ts +4 -0
- package/src/utils/renderErrors.ts +55 -0
- package/src/utils/spinner.ts +5 -0
- package/src/utils/watcher.ts +27 -0
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../package.json","../src/utils/getConfig.ts","../src/utils/getPlugins.ts","../src/utils/getCosmiConfig.ts","../src/utils/renderErrors.ts","../src/utils/spinner.ts","../src/utils/watcher.ts","../src/generate.ts","../src/utils/getSummary.ts","../src/utils/parseHrtimeToSeconds.ts","../src/utils/OraWritable.ts","../src/init.ts"],"names":["path","SummaryError","LogLevel","pc","moduleName","ParallelPluginError","randomPicoColour","spinner","callback"],"mappings":"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","sourcesContent":["import path from 'node:path'\n\nimport { isInputPath, PromiseManager, SummaryError, Warning } from '@kubb/core'\nimport { LogLevel } from '@kubb/core/utils'\n\nimport { cac } from 'cac'\nimport pc from 'picocolors'\n\nimport { version } from '../package.json'\nimport { getConfig } from './utils/getConfig.ts'\nimport { getCosmiConfig } from './utils/getCosmiConfig.ts'\nimport { renderErrors } from './utils/renderErrors.ts'\nimport { spinner } from './utils/spinner.ts'\nimport { startWatcher } from './utils/watcher.ts'\nimport { generate } from './generate.ts'\nimport { init } from './init.ts'\n\nimport type { CLIOptions } from '@kubb/core'\n\nconst moduleName = 'kubb'\n\nfunction programCatcher(e: unknown, CLIOptions: CLIOptions): void {\n const originalError = e as Error\n let error = originalError\n\n // summaryError check\n const summaryError = error instanceof SummaryError ? error : undefined\n\n if (summaryError) {\n // use the real error from summaryError and use the case of SummaryError to display a summary of plugins that failed\n error = summaryError.cause as Error\n }\n\n const message = renderErrors(error, { logLevel: CLIOptions.logLevel, prefixText: pc.red(originalError?.message) })\n\n if (error instanceof Warning) {\n spinner.warn(pc.yellow(error.message))\n process.exit(0)\n }\n\n if (CLIOptions.logLevel === LogLevel.silent) {\n spinner.fail(message)\n process.exit(1)\n }\n\n spinner.fail([message, ...(summaryError?.summary || [])].join('\\n'))\n process.exit(1)\n}\n\nasync function generateAction(input: string, CLIOptions: CLIOptions) {\n spinner.start('🔍 Loading config')\n const result = await getCosmiConfig(moduleName, CLIOptions.config)\n spinner.succeed(`🔍 Config loaded(${pc.dim(path.relative(process.cwd(), result.filepath))})`)\n\n const config = await getConfig(result, CLIOptions)\n\n if (CLIOptions.watch) {\n if (Array.isArray(config)) {\n throw new Error('Cannot use watcher with multiple KubbConfigs(array)')\n }\n\n if (isInputPath(config)) {\n return startWatcher([input || config.input.path], async (paths) => {\n await generate({ config, CLIOptions })\n spinner.spinner = 'simpleDotsScrolling'\n spinner.start(pc.yellow(pc.bold(`Watching for changes in ${paths.join(' and ')}`)))\n })\n }\n }\n\n if (Array.isArray(config)) {\n const promiseManager = new PromiseManager()\n const promises = config.map((item) => () => generate({ input, config: item, CLIOptions }))\n\n await promiseManager.run('seq', promises)\n\n return\n }\n\n await generate({ input, config, CLIOptions })\n}\n\nexport async function run(argv?: string[]): Promise<void> {\n const program = cac(moduleName)\n\n program.command('[input]', 'Path of the input file(overrides the one in `kubb.config.js`)').action(generateAction)\n\n program\n .command('generate [input]', 'Path of the input file(overrides the one in `kubb.config.js`)')\n .option('-c, --config <path>', 'Path to the Kubb config')\n .option('-l, --log-level <type>', 'Info, silent or debug')\n .option('-w, --watch', 'Watch mode based on the input file')\n .action(generateAction)\n\n program.command('init', 'Init Kubb').action(async () => {\n return init({ logLevel: 'info' })\n })\n\n program.help()\n program.version(version)\n program.parse(argv, { run: false })\n\n try {\n await program.runMatchedCommand()\n\n process.exit(0)\n } catch (e) {\n programCatcher(e, program.options)\n }\n}\n\nexport default run\n","{\n \"name\": \"@kubb/cli\",\n \"version\": \"2.0.0-alpha.2\",\n \"description\": \"Generator cli\",\n \"keywords\": [\n \"typescript\",\n \"plugins\",\n \"kubb\",\n \"codegen\",\n \"cli\"\n ],\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git://github.com/kubb-project/kubb.git\",\n \"directory\": \"packages/cli\"\n },\n \"license\": \"MIT\",\n \"author\": \"Stijn Van Hulle <stijn@stijnvanhulle.be\",\n \"sideEffects\": false,\n \"type\": \"module\",\n \"main\": \"dist/index.cjs\",\n \"module\": \"dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"bin\": {\n \"kubb\": \"bin/kubb.js\"\n },\n \"files\": [\n \"dist\",\n \"bin\",\n \"!/**/**.test.**\",\n \"!/**/__tests__/**\"\n ],\n \"scripts\": {\n \"build\": \"tsup\",\n \"clean\": \"npx rimraf ./dist\",\n \"lint\": \"ESLINT_USE_FLAT_CONFIG=true eslint --format pretty .\",\n \"lint-fix\": \"bun run lint --quiet --fix\",\n \"release\": \"pnpm publish --no-git-check\",\n \"release:canary\": \"bash ../../.github/canary.sh && node ../../scripts/build.js canary && pnpm publish --no-git-check -tag canary\",\n \"release:alpha\": \"bash ../../.github/canary.sh && node ../../scripts/build.js alpha && pnpm publish --no-git-check -tag alpha\",\n \"start\": \"tsup --watch\",\n \"test\": \"vitest --passWithNoTests\",\n \"typecheck\": \"tsc -p ./tsconfig.json --noEmit --emitDeclarationOnly false\"\n },\n \"dependencies\": {\n \"@kubb/core\": \"workspace:*\",\n \"cac\": \"^6.7.14\",\n \"chokidar\": \"^3.5.3\",\n \"cosmiconfig\": \"^8.3.6\",\n \"execa\": \"^8.0.1\",\n \"ora\": \"^7.0.1\",\n \"picocolors\": \"^1.0.0\",\n \"pretty-error\": \"^4.0.0\",\n \"string-argv\": \"^0.3.2\",\n \"ts-node\": \"^10.9.1\"\n },\n \"devDependencies\": {\n \"@kubb/swagger\": \"workspace:*\",\n \"@kubb/ts-config\": \"workspace:*\",\n \"@kubb/tsup-config\": \"workspace:*\",\n \"@types/node\": \"^20.8.9\",\n \"source-map-support\": \"^0.5.21\",\n \"tsup\": \"^7.2.0\",\n \"typescript\": \"^5.2.2\"\n },\n \"packageManager\": \"pnpm@8.3.0\",\n \"engines\": {\n \"node\": \">=18\",\n \"pnpm\": \">=8.3.0\"\n },\n \"preferGlobal\": true,\n \"publishConfig\": {\n \"access\": \"public\",\n \"registry\": \"https://registry.npmjs.org/\"\n }\n}\n","import { isPromise } from '@kubb/core/utils'\n\nimport { getPlugins } from './getPlugins.ts'\n\nimport type { CLIOptions, KubbConfig, KubbUserConfig } from '@kubb/core'\nimport type { CosmiconfigResult } from './getCosmiConfig.ts'\n\nexport async function getConfig(result: CosmiconfigResult, CLIOptions: CLIOptions): Promise<Array<KubbConfig> | KubbConfig> {\n const config = result?.config\n let kubbUserConfig = Promise.resolve(config) as Promise<KubbUserConfig | Array<KubbUserConfig>>\n\n // for ts or js files\n if (typeof config === 'function') {\n const possiblePromise = config(CLIOptions)\n if (isPromise(possiblePromise)) {\n kubbUserConfig = possiblePromise\n }\n kubbUserConfig = Promise.resolve(possiblePromise)\n }\n\n let JSONConfig = await kubbUserConfig\n\n if (Array.isArray(JSONConfig)) {\n const promises = JSONConfig.map(async (item) => {\n return { ...item, plugins: item.plugins ? await getPlugins(item.plugins) : undefined }\n }) as unknown as Array<Promise<KubbConfig>>\n\n return Promise.all(promises)\n }\n\n JSONConfig = {\n ...JSONConfig,\n plugins: JSONConfig.plugins ? await getPlugins(JSONConfig.plugins) : undefined,\n }\n\n return JSONConfig as KubbConfig\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n\nimport { PackageManager } from '@kubb/core'\n\nimport type { KubbUserConfig } from '@kubb/core'\n\nfunction isJSONPlugins(plugins: KubbUserConfig['plugins']): plugins is Array<[name: string, options: object]> {\n return !!(plugins as Array<[name: string, options: object]>[])?.some((plugin) => {\n return Array.isArray(plugin) && typeof plugin?.at(0) === 'string'\n })\n}\n\nfunction isObjectPlugins(plugins: KubbUserConfig['plugins']): plugins is any {\n return plugins instanceof Object && !Array.isArray(plugins)\n}\n\nasync function importPlugin(name: string, options: object): Promise<KubbUserConfig['plugins']> {\n const packageManager = new PackageManager(process.cwd())\n\n const importedPlugin: any = process.env.NODE_ENV === 'test' ? await import(name) : await packageManager.import(name)\n\n // eslint-disable-next-line\n return importedPlugin?.default ? importedPlugin.default(options) : importedPlugin(options)\n}\n\nexport function getPlugins(plugins: KubbUserConfig['plugins']): Promise<KubbUserConfig['plugins']> {\n if (isObjectPlugins(plugins)) {\n throw new Error('Object plugins are not supported anymore, best to use http://kubb.dev/configuration/configure#json')\n }\n\n if (isJSONPlugins(plugins)) {\n const jsonPlugins = plugins as Array<[name: string, options: object]>\n const promises = jsonPlugins.map((plugin) => {\n const [name, options = {}] = plugin\n return importPlugin(name, options)\n })\n return Promise.all(promises) as Promise<KubbUserConfig['plugins']>\n }\n\n return Promise.resolve(plugins)\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-return */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\nimport { cosmiconfig } from 'cosmiconfig'\nimport tsNode from 'ts-node'\n\nimport type { defineConfig, KubbUserConfig } from '@kubb/core'\n\nexport type CosmiconfigResult = {\n filepath: string\n isEmpty?: boolean\n config: ReturnType<typeof defineConfig> | KubbUserConfig\n}\n\nconst tsLoader = (configFile: string) => {\n let registerer = { enabled() {} }\n\n try {\n // Register TypeScript compiler instance\n registerer = tsNode.register({\n compilerOptions: { module: 'commonjs' },\n typeCheck: false,\n })\n\n const module = require(configFile)\n\n return module.default\n } catch (err) {\n const error = err as Error\n\n if (error.name === 'MODULE_NOT_FOUND') {\n throw new Error(`'ts-node' is required for the TypeScript configuration files. Make sure it is installed\\nError: ${error.message}`)\n }\n\n throw error\n } finally {\n registerer.enabled()\n }\n}\n\nexport async function getCosmiConfig(moduleName: string, config?: string): Promise<CosmiconfigResult> {\n const searchPlaces = [\n 'package.json',\n `.${moduleName}rc`,\n `.${moduleName}rc.json`,\n `.${moduleName}rc.yaml`,\n `.${moduleName}rc.yml`,\n\n `.${moduleName}rc.ts`,\n `.${moduleName}rc.js`,\n `.${moduleName}rc.cjs`,\n `.${moduleName}rc.mjs`,\n\n `${moduleName}.config.ts`,\n `${moduleName}.config.js`,\n `${moduleName}.config.cjs`,\n `${moduleName}.config.mjs`,\n ]\n const explorer = cosmiconfig(moduleName, {\n cache: false,\n searchPlaces: [\n ...searchPlaces.map((searchPlace) => {\n return `.config/${searchPlace}`\n }),\n ...searchPlaces.map((searchPlace) => {\n return `configs/${searchPlace}`\n }),\n ...searchPlaces,\n ],\n loaders: {\n '.ts': tsLoader,\n },\n })\n\n const result = config ? await explorer.load(config) : await explorer.search()\n\n if (result?.isEmpty || !result || !result.config) {\n throw new Error('Config not defined, create a kubb.config.js or pass through your config with the option --config')\n }\n\n return result as CosmiconfigResult\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n\nimport { ParallelPluginError } from '@kubb/core'\nimport { LogLevel } from '@kubb/core/utils'\n\nimport PrettyError from 'pretty-error'\n\nexport const prettyError = new PrettyError()\n .skipPackage('commander')\n .skip(function callback(traceLine: any) {\n // exclude renderErrors.ts\n const pattern = new RegExp('renderErrors')\n\n const hasMatch = traceLine?.file?.match(pattern)\n\n if (typeof traceLine.packageName !== 'undefined' && hasMatch) {\n return true\n }\n } as PrettyError.Callback)\n .start()\n\nfunction getErrorCauses(errors: Error[]): string[] {\n return errors\n .reduce((prev, error) => {\n const causedError = error?.cause as Error\n if (causedError) {\n prev = [...prev, ...getErrorCauses([causedError])]\n }\n prev = [...prev, prettyError.render(error)]\n\n return prev\n }, [] as string[])\n .filter(Boolean)\n}\n\nexport function renderErrors(error: Error | undefined, { prefixText, logLevel = LogLevel.silent }: { prefixText?: string; logLevel?: LogLevel }): string {\n if (!error) {\n return ''\n }\n\n if (error instanceof ParallelPluginError) {\n return [prefixText, ...error.errors.map((e) => renderErrors(e, { logLevel }))].filter(Boolean).join('\\n')\n }\n\n if (logLevel === LogLevel.silent) {\n // skip when no debug is set\n prettyError.skipNodeFiles()\n prettyError.skip(function skip() {\n return true\n } as PrettyError.Callback)\n\n return [prefixText, prettyError.render(error)].filter(Boolean).join('\\n')\n }\n\n const errors = getErrorCauses([error])\n\n return [prefixText, ...errors].filter(Boolean).join('\\n')\n}\n","import ora from 'ora'\n\nexport const spinner = ora({\n spinner: 'clock',\n})\n","import pc from 'picocolors'\n\nimport { spinner } from './spinner.ts'\n\nexport async function startWatcher(path: string[], cb: (path: string[]) => Promise<void>): Promise<void> {\n const { watch } = await import('chokidar')\n\n const ignored = ['**/{.git,node_modules}/**']\n\n const watcher = watch(path, {\n ignorePermissionErrors: true,\n ignored,\n })\n watcher.on('all', (type, file) => {\n spinner.succeed(pc.yellow(pc.bold(`Change detected: ${type} ${file}`)))\n // revert back\n spinner.spinner = 'clock'\n\n try {\n cb(path)\n } catch (e) {\n spinner.warn(pc.red('Watcher failed'))\n }\n })\n\n return\n}\n","import { build, ParallelPluginError, PluginError, SummaryError } from '@kubb/core'\nimport { createLogger, LogLevel, randomPicoColour } from '@kubb/core/utils'\n\nimport { execa } from 'execa'\nimport pc from 'picocolors'\nimport { parseArgsStringToArgv } from 'string-argv'\n\nimport { getSummary } from './utils/getSummary.ts'\nimport { OraWritable } from './utils/OraWritable.ts'\nimport { spinner } from './utils/spinner.ts'\n\nimport type { Writable } from 'node:stream'\nimport type { CLIOptions, KubbConfig } from '@kubb/core'\nimport type { ExecaReturnValue } from 'execa'\n\ntype GenerateProps = {\n input?: string\n config: KubbConfig\n CLIOptions: CLIOptions\n}\n\ntype ExecutingHooksProps = {\n hooks: KubbConfig['hooks']\n logLevel: LogLevel\n}\n\ntype Executer = { subProcess: ExecaReturnValue<string>; abort: AbortController['abort'] }\n\nasync function executeHooks({ hooks, logLevel }: ExecutingHooksProps): Promise<void> {\n if (!hooks?.done) {\n return\n }\n\n const commands = Array.isArray(hooks.done) ? hooks.done : [hooks.done]\n\n if (logLevel === LogLevel.silent) {\n spinner.start(`Executing hooks`)\n }\n\n const executers: Promise<Executer | null>[] = commands\n .map(async (command) => {\n const oraWritable = new OraWritable(spinner, command)\n const abortController = new AbortController()\n const [cmd, ..._args] = [...parseArgsStringToArgv(command)]\n\n if (!cmd) {\n return null\n }\n\n spinner.start(`Executing hook ${logLevel !== 'silent' ? pc.dim(command) : ''}`)\n\n const subProcess = await execa(cmd, _args, { detached: true, signal: abortController.signal }).pipeStdout!(oraWritable as Writable)\n spinner.suffixText = ''\n\n if (logLevel === LogLevel.silent) {\n spinner.succeed(`Executing hook ${logLevel !== 'silent' ? pc.dim(command) : ''}`)\n\n console.log(subProcess.stdout)\n }\n\n oraWritable.destroy()\n return { subProcess, abort: abortController.abort.bind(abortController) }\n })\n .filter(Boolean)\n\n await Promise.all(executers)\n\n if (logLevel === LogLevel.silent) {\n spinner.succeed(`Executing hooks`)\n }\n}\n\nexport async function generate({ input, config, CLIOptions }: GenerateProps): Promise<void> {\n const logger = createLogger({ logLevel: CLIOptions.logLevel || LogLevel.silent, name: config.name, spinner })\n\n if (logger.name) {\n spinner.prefixText = randomPicoColour(logger.name)\n }\n\n const hrstart = process.hrtime()\n\n if (CLIOptions.logLevel === LogLevel.debug) {\n const { performance, PerformanceObserver } = await import('node:perf_hooks')\n\n const performanceOpserver = new PerformanceObserver((items) => {\n const message = `${items.getEntries()[0]?.duration.toFixed(0)}ms`\n\n spinner.suffixText = pc.yellow(message)\n\n performance.clearMarks()\n })\n\n performanceOpserver.observe({ type: 'measure' })\n }\n\n try {\n const { root: _root, ...userConfig } = config\n const logLevel = logger.logLevel\n const inputPath = input ?? ('path' in userConfig.input ? userConfig.input.path : undefined)\n\n spinner.start(`🚀 Building ${logLevel !== 'silent' ? pc.dim(inputPath) : ''}`)\n\n const output = await build({\n config: {\n root: process.cwd(),\n ...userConfig,\n input: inputPath\n ? {\n ...userConfig.input,\n path: inputPath,\n }\n : userConfig.input,\n output: {\n write: true,\n ...userConfig.output,\n },\n },\n logger,\n })\n\n await executeHooks({ hooks: config.hooks, logLevel })\n\n spinner.suffixText = ''\n spinner.succeed(`🚀 Build completed ${logLevel !== 'silent' ? pc.dim(inputPath) : ''}`)\n\n const summary = getSummary({ pluginManager: output.pluginManager, config, status: 'success', hrstart, logLevel: CLIOptions.logLevel })\n console.log(summary.join(''))\n } catch (error) {\n let summary: string[] = []\n\n if (error instanceof PluginError || error instanceof ParallelPluginError) {\n summary = getSummary({ pluginManager: error.pluginManager, config, status: 'failed', hrstart, logLevel: CLIOptions.logLevel })\n }\n\n throw new SummaryError('Something went wrong\\n', { cause: error as Error, summary })\n }\n}\n","import path from 'node:path'\n\nimport { LogLevel, randomPicoColour } from '@kubb/core/utils'\n\nimport pc from 'picocolors'\n\nimport { parseHrtimeToSeconds } from './parseHrtimeToSeconds.ts'\n\nimport type { BuildOutput, KubbConfig } from '@kubb/core'\n\ntype SummaryProps = {\n pluginManager: BuildOutput['pluginManager']\n status: 'success' | 'failed'\n hrstart: [number, number]\n config: KubbConfig\n logLevel?: LogLevel\n}\n\nexport function getSummary({ pluginManager, status, hrstart, config, logLevel }: SummaryProps): string[] {\n const logs: string[] = []\n const elapsedSeconds = parseHrtimeToSeconds(process.hrtime(hrstart))\n\n const buildStartPlugins = pluginManager.executed\n .filter((item) => item.hookName === 'buildStart' && item.plugin.name !== 'core')\n .map((item) => item.plugin.name)\n\n const failedPlugins = config.plugins?.filter((plugin) => !buildStartPlugins.includes(plugin.name))?.map((plugin) => plugin.name)\n const pluginsCount = config.plugins?.length || 0\n const files = pluginManager.fileManager.files.sort((a, b) => {\n if (!a.meta?.pluginKey?.[1] || !b.meta?.pluginKey?.[1]) {\n return 0\n }\n if (a.meta?.pluginKey?.[1]?.length < b.meta?.pluginKey?.[1]?.length) {\n return 1\n }\n if (a.meta?.pluginKey?.[1]?.length > b.meta?.pluginKey?.[1]?.length) {\n return -1\n }\n return 0\n })\n\n const meta = {\n name: config.name,\n plugins: status === 'success'\n ? `${pc.green(`${buildStartPlugins.length} successful`)}, ${pluginsCount} total`\n : `${pc.red(`${failedPlugins?.length ?? 1} failed`)}, ${pluginsCount} total`,\n pluginsFailed: status === 'failed' ? failedPlugins?.map((name) => randomPicoColour(name))?.join(', ') : undefined,\n filesCreated: files.length,\n time: pc.yellow(`${elapsedSeconds}s`),\n output: path.resolve(config.root, config.output.path),\n } as const\n\n if (logLevel === LogLevel.debug) {\n logs.push(pc.bold('\\nGenerated files:\\n'))\n logs.push(files.map((file) => `${randomPicoColour(JSON.stringify(file.meta?.pluginKey))} ${file.path}`).join('\\n'))\n }\n\n logs.push(\n [\n [`\\n`, true],\n [` ${pc.bold('Name:')} ${meta.name}`, !!meta.name],\n [` ${pc.bold('Plugins:')} ${meta.plugins}`, true],\n [` ${pc.dim('Failed:')} ${meta.pluginsFailed || 'none'}`, !!meta.pluginsFailed],\n [`${pc.bold('Generated:')} ${meta.filesCreated} files`, true],\n [` ${pc.bold('Time:')} ${meta.time}`, true],\n [` ${pc.bold('Output:')} ${meta.output}`, true],\n [`\\n`, true],\n ]\n .map((item) => {\n if (item.at(1)) {\n return item.at(0)\n }\n return undefined\n })\n .filter(Boolean)\n .join('\\n'),\n )\n\n return logs\n}\n","export function parseHrtimeToSeconds(hrtime: [number, number]): string {\n const seconds = (hrtime[0] + hrtime[1] / 1e9).toFixed(3)\n return seconds\n}\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n\n/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n\nimport { Writable } from 'node:stream'\n\nimport pc from 'picocolors'\n\nimport type { WritableOptions } from 'node:stream'\nimport type { Ora } from 'ora'\n\nexport class OraWritable extends Writable {\n public command: string\n public spinner: Ora\n constructor(spinner: Ora, command: string, opts?: WritableOptions) {\n super(opts)\n\n this.command = command\n this.spinner = spinner\n }\n _write(chunk: any, _encoding: BufferEncoding, callback: (error?: Error | null) => void): void {\n this.spinner.suffixText = `\\n\\n${pc.bold(pc.blue(this.command))}: ${chunk?.toString()}`\n\n callback()\n }\n}\n","import path from 'node:path'\n\nimport { isPromiseFulfilledResult } from '@kubb/core/utils'\nimport { LogLevel, write } from '@kubb/core/utils'\n\nimport { $ } from 'execa'\nimport pc from 'picocolors'\n\nimport { spinner } from './utils/spinner.ts'\n\ntype Preset = 'simple'\n\ntype PackageManager = 'pnpm' | 'npm' | 'yarn'\n\ntype PresetMeta = {\n 'kubb.config': string\n packages: string[]\n}\n\ntype InitProps = {\n /**\n * @default `'silent'`\n */\n logLevel?: LogLevel\n /**\n * @default `'simple'`\n */\n preset?: Preset\n /**\n * @default `'pnpm'`\n */\n packageManager?: PackageManager\n}\n\nconst presets: Record<Preset, PresetMeta> = {\n simple: {\n 'kubb.config': `\nimport { defineConfig } from '@kubb/core'\nimport createSwagger from '@kubb/swagger'\nimport createSwaggerTS from '@kubb/swagger-ts'\nimport createSwaggerTanstackQuery from '@kubb/swagger-tanstack-query'\n\nexport default defineConfig({\n root: '.',\n input: {\n path: 'https://petstore3.swagger.io/api/v3/openapi.json',\n },\n output: {\n path: './src/gen',\n clean: true,\n },\n hooks: {\n done: ['echo \"🎉 done\"'],\n },\n plugins: [createSwagger({}), createSwaggerTS({ output: 'models', enumType: 'enum' }), createSwaggerTanstackQuery({ output: './hooks' })],\n})\n `,\n packages: ['@kubb/core', '@kubb/cli', '@kubb/swagger', '@kubb/swagger-ts', '@kubb/swagger-tanstack-query'],\n },\n}\n\nexport async function init({ preset = 'simple', logLevel = LogLevel.silent, packageManager = 'pnpm' }: InitProps): Promise<undefined> {\n spinner.start('📦 Initializing Kubb')\n\n const presetMeta = presets[preset]\n const configPath = path.resolve(process.cwd(), './kubb.config.js')\n const installCommand = packageManager === 'npm' ? 'install' : 'add'\n\n spinner.start(`📀 Writing \\`kubb.config.js\\` ${pc.dim(configPath)}`)\n await write(presetMeta['kubb.config'], configPath)\n spinner.succeed(`📀 Wrote \\`kubb.config.js\\` ${pc.dim(configPath)}`)\n\n const results = await Promise.allSettled([\n $`npm init es6 -y`,\n ...presetMeta.packages.map(async (pack) => {\n spinner.start(`📀 Installing ${pc.dim(pack)}`)\n const { stdout } = await $({ preferLocal: false })`${packageManager} ${installCommand} ${pack}`\n spinner.succeed(`📀 Installed ${pc.dim(pack)}`)\n\n return stdout\n }),\n ])\n\n if (logLevel === LogLevel.info) {\n results.forEach((result) => {\n if (isPromiseFulfilledResult(result)) {\n console.log(result.value)\n }\n })\n }\n spinner.succeed(`📦 initialized Kubb`)\n\n return\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../package.json","../src/utils/getConfig.ts","../src/utils/getPlugins.ts","../src/utils/getCosmiConfig.ts","../src/utils/renderErrors.ts","../src/utils/spinner.ts","../src/utils/watcher.ts","../src/generate.ts","../src/utils/getSummary.ts","../src/utils/parseHrtimeToSeconds.ts","../src/utils/OraWritable.ts","../src/init.ts"],"names":["path","pc","moduleName","LogLevel","randomPicoColour","spinner","callback"],"mappings":";;;;;;;;;;;;;AAAA,OAAOA,WAAU;AAEjB,SAAS,aAAa,gBAAgB,eAAe;AAErD,SAAS,WAAW;AACpB,OAAOC,SAAQ;;;ACHb,cAAW;;;ACFb,SAAS,iBAAiB;;;ACE1B,SAAS,sBAAsB;AAI/B,SAAS,cAAc,SAAuF;AAC5G,SAAO,CAAC,CAAE,SAAsD,KAAK,CAAC,WAAW;AAC/E,WAAO,MAAM,QAAQ,MAAM,KAAK,OAAO,QAAQ,GAAG,CAAC,MAAM;AAAA,EAC3D,CAAC;AACH;AAEA,SAAS,gBAAgB,SAAoD;AAC3E,SAAO,mBAAmB,UAAU,CAAC,MAAM,QAAQ,OAAO;AAC5D;AAEA,eAAe,aAAa,MAAc,SAAqD;AAC7F,QAAM,iBAAiB,IAAI,eAAe,QAAQ,IAAI,CAAC;AAEvD,QAAM,iBAAsB,QAAQ,IAAI,aAAa,SAAS,MAAM,OAAO,QAAQ,MAAM,eAAe,OAAO,IAAI;AAGnH,SAAO,gBAAgB,UAAU,eAAe,QAAQ,OAAO,IAAI,eAAe,OAAO;AAC3F;AAEO,SAAS,WAAW,SAAwE;AACjG,MAAI,gBAAgB,OAAO,GAAG;AAC5B,UAAM,IAAI,MAAM,oGAAoG;AAAA,EACtH;AAEA,MAAI,cAAc,OAAO,GAAG;AAC1B,UAAM,cAAc;AACpB,UAAM,WAAW,YAAY,IAAI,CAAC,WAAW;AAC3C,YAAM,CAAC,MAAM,UAAU,CAAC,CAAC,IAAI;AAC7B,aAAO,aAAa,MAAM,OAAO;AAAA,IACnC,CAAC;AACD,WAAO,QAAQ,IAAI,QAAQ;AAAA,EAC7B;AAEA,SAAO,QAAQ,QAAQ,OAAO;AAChC;;;ADjCA,eAAsB,UAAU,QAA2B,YAAiE;AAC1H,QAAM,SAAS,QAAQ;AACvB,MAAI,iBAAiB,QAAQ,QAAQ,MAAM;AAG3C,MAAI,OAAO,WAAW,YAAY;AAChC,UAAM,kBAAkB,OAAO,UAAU;AACzC,QAAI,UAAU,eAAe,GAAG;AAC9B,uBAAiB;AAAA,IACnB;AACA,qBAAiB,QAAQ,QAAQ,eAAe;AAAA,EAClD;AAEA,MAAI,aAAa,MAAM;AAEvB,MAAI,MAAM,QAAQ,UAAU,GAAG;AAC7B,UAAM,WAAW,WAAW,IAAI,OAAO,SAAS;AAC9C,aAAO,EAAE,GAAG,MAAM,SAAS,KAAK,UAAU,MAAM,WAAW,KAAK,OAAO,IAAI,OAAU;AAAA,IACvF,CAAC;AAED,WAAO,QAAQ,IAAI,QAAQ;AAAA,EAC7B;AAEA,eAAa;AAAA,IACX,GAAG;AAAA,IACH,SAAS,WAAW,UAAU,MAAM,WAAW,WAAW,OAAO,IAAI;AAAA,EACvE;AAEA,SAAO;AACT;;;AEjCA,SAAS,mBAAmB;AAC5B,OAAO,YAAY;AAUnB,IAAM,WAAW,CAAC,eAAuB;AACvC,MAAI,aAAa,EAAE,UAAU;AAAA,EAAC,EAAE;AAEhC,MAAI;AAEF,iBAAa,OAAO,SAAS;AAAA,MAC3B,iBAAiB,EAAE,QAAQ,WAAW;AAAA,MACtC,WAAW;AAAA,IACb,CAAC;AAED,UAAM,SAAS,UAAQ,UAAU;AAEjC,WAAO,OAAO;AAAA,EAChB,SAAS,KAAK;AACZ,UAAM,QAAQ;AAEd,QAAI,MAAM,SAAS,oBAAoB;AACrC,YAAM,IAAI,MAAM;AAAA,SAAmG,MAAM,OAAO,EAAE;AAAA,IACpI;AAEA,UAAM;AAAA,EACR,UAAE;AACA,eAAW,QAAQ;AAAA,EACrB;AACF;AAEA,eAAsB,eAAeC,aAAoB,QAA6C;AACpG,QAAM,eAAe;AAAA,IACnB;AAAA,IACA,IAAIA,WAAU;AAAA,IACd,IAAIA,WAAU;AAAA,IACd,IAAIA,WAAU;AAAA,IACd,IAAIA,WAAU;AAAA,IAEd,IAAIA,WAAU;AAAA,IACd,IAAIA,WAAU;AAAA,IACd,IAAIA,WAAU;AAAA,IACd,IAAIA,WAAU;AAAA,IAEd,GAAGA,WAAU;AAAA,IACb,GAAGA,WAAU;AAAA,IACb,GAAGA,WAAU;AAAA,IACb,GAAGA,WAAU;AAAA,EACf;AACA,QAAM,WAAW,YAAYA,aAAY;AAAA,IACvC,OAAO;AAAA,IACP,cAAc;AAAA,MACZ,GAAG,aAAa,IAAI,CAAC,gBAAgB;AACnC,eAAO,WAAW,WAAW;AAAA,MAC/B,CAAC;AAAA,MACD,GAAG,aAAa,IAAI,CAAC,gBAAgB;AACnC,eAAO,WAAW,WAAW;AAAA,MAC/B,CAAC;AAAA,MACD,GAAG;AAAA,IACL;AAAA,IACA,SAAS;AAAA,MACP,OAAO;AAAA,IACT;AAAA,EACF,CAAC;AAED,QAAM,SAAS,SAAS,MAAM,SAAS,KAAK,MAAM,IAAI,MAAM,SAAS,OAAO;AAE5E,MAAI,QAAQ,WAAW,CAAC,UAAU,CAAC,OAAO,QAAQ;AAChD,UAAM,IAAI,MAAM,kGAAkG;AAAA,EACpH;AAEA,SAAO;AACT;;;AC7EA,SAAS,gBAAgB;AAEzB,OAAO,iBAAiB;AAEjB,IAAM,cAAc,IAAI,YAAY,EACxC,YAAY,WAAW,EACvB,KAAK,SAAS,SAAS,WAAgB;AAEtC,QAAM,UAAU,IAAI,OAAO,cAAc;AAEzC,QAAM,WAAW,WAAW,MAAM,MAAM,OAAO;AAE/C,MAAI,OAAO,UAAU,gBAAgB,eAAe,UAAU;AAC5D,WAAO;AAAA,EACT;AACF,CAAyB,EACxB,MAAM;AAET,SAAS,eAAe,QAA2B;AACjD,SAAO,OACJ,OAAO,CAAC,MAAM,UAAU;AACvB,UAAM,cAAc,OAAO;AAC3B,QAAI,aAAa;AACf,aAAO,CAAC,GAAG,MAAM,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;AAAA,IACnD;AACA,WAAO,CAAC,GAAG,MAAM,YAAY,OAAO,KAAK,CAAC;AAE1C,WAAO;AAAA,EACT,GAAG,CAAC,CAAa,EAChB,OAAO,OAAO;AACnB;AAEO,SAAS,aAAa,OAA0B,EAAE,WAAW,SAAS,OAAO,GAAoC;AACtH,MAAI,CAAC,OAAO;AACV,WAAO;AAAA,EACT;AAEA,MAAI,aAAa,SAAS,QAAQ;AAEhC,gBAAY,cAAc;AAC1B,gBAAY,KAAK,SAAS,OAAO;AAC/B,aAAO;AAAA,IACT,CAAyB;AAEzB,WAAO,CAAC,YAAY,OAAO,KAAK,CAAC,EAAE,OAAO,OAAO,EAAE,KAAK,IAAI;AAAA,EAC9D;AAEA,QAAM,SAAS,eAAe,CAAC,KAAK,CAAC;AAErC,SAAO,OAAO,OAAO,OAAO,EAAE,KAAK,IAAI;AACzC;;;ACtDA,OAAO,SAAS;AAET,IAAM,UAAU,IAAI;AAAA,EACzB,SAAS;AACX,CAAC;;;ACJD,OAAO,QAAQ;AAIf,eAAsB,aAAaF,OAAgB,IAAsD;AACvG,QAAM,EAAE,MAAM,IAAI,MAAM,OAAO,UAAU;AAEzC,QAAM,UAAU,CAAC,2BAA2B;AAE5C,QAAM,UAAU,MAAMA,OAAM;AAAA,IAC1B,wBAAwB;AAAA,IACxB;AAAA,EACF,CAAC;AACD,UAAQ,GAAG,OAAO,CAAC,MAAM,SAAS;AAChC,YAAQ,QAAQ,GAAG,OAAO,GAAG,KAAK,oBAAoB,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;AAEtE,YAAQ,UAAU;AAElB,QAAI;AACF,SAAGA,KAAI;AAAA,IACT,SAAS,GAAG;AACV,cAAQ,KAAK,GAAG,IAAI,gBAAgB,CAAC;AAAA,IACvC;AAAA,EACF,CAAC;AAED;AACF;;;AC1BA,SAAS,iBAAiB;AAC1B,SAAS,cAAc,YAAAG,WAAU,oBAAAC,yBAAwB;AAEzD,SAAS,aAAa;AACtB,OAAOH,SAAQ;AACf,SAAS,6BAA6B;;;ACLtC,OAAO,UAAU;AAEjB,SAAS,YAAAE,WAAU,wBAAwB;AAE3C,OAAOF,SAAQ;;;ACJR,SAAS,qBAAqB,QAAkC;AACrE,QAAM,WAAW,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC;AACvD,SAAO;AACT;;;ADeO,SAAS,WAAW,EAAE,eAAe,QAAQ,SAAS,QAAQ,SAAS,GAA2B;AACvG,QAAM,OAAiB,CAAC;AACxB,QAAM,iBAAiB,qBAAqB,QAAQ,OAAO,OAAO,CAAC;AAEnE,QAAM,oBAAoB,cAAc,SACrC,OAAO,CAAC,SAAS,KAAK,aAAa,gBAAgB,KAAK,OAAO,SAAS,MAAM,EAC9E,IAAI,CAAC,SAAS,KAAK,OAAO,IAAI;AAEjC,QAAM,kBAAkB,cAAc,SACnC,OAAO,CAAC,SAAS,KAAK,aAAa,cAAc,KAAK,OAAO,SAAS,MAAM,EAC5E,IAAI,CAAC,SAAS,KAAK,OAAO,IAAI;AAEjC,QAAM,gBAAgB,OAAO,SAAS,OAAO,CAAC,WAAW,CAAC,gBAAgB,SAAS,OAAO,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,OAAO,IAAI;AAC7H,QAAM,eAAe,OAAO,SAAS,UAAU;AAC/C,QAAM,QAAQ,cAAc,YAAY,MAAM,KAAK,CAAC,GAAG,MAAM;AAC3D,QAAI,CAAC,EAAE,MAAM,YAAY,CAAC,KAAK,CAAC,EAAE,MAAM,YAAY,CAAC,GAAG;AACtD,aAAO;AAAA,IACT;AACA,QAAI,EAAE,MAAM,YAAY,CAAC,GAAG,SAAS,EAAE,MAAM,YAAY,CAAC,GAAG,QAAQ;AACnE,aAAO;AAAA,IACT;AACA,QAAI,EAAE,MAAM,YAAY,CAAC,GAAG,SAAS,EAAE,MAAM,YAAY,CAAC,GAAG,QAAQ;AACnE,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT,CAAC;AAED,QAAM,OAAO;AAAA,IACX,MAAM,OAAO;AAAA,IACb,SAAS,WAAW,YAChB,GAAGA,IAAG,MAAM,GAAG,kBAAkB,MAAM,aAAa,CAAC,KAAK,YAAY,WACtE,GAAGA,IAAG,IAAI,GAAG,eAAe,UAAU,CAAC,SAAS,CAAC,KAAK,YAAY;AAAA,IACtE,eAAe,WAAW,WAAW,eAAe,IAAI,CAAC,SAAS,iBAAiB,IAAI,CAAC,GAAG,KAAK,IAAI,IAAI;AAAA,IACxG,cAAc,MAAM;AAAA,IACpB,MAAMA,IAAG,OAAO,GAAG,cAAc,GAAG;AAAA,IACpC,QAAQ,KAAK,QAAQ,OAAO,MAAM,OAAO,OAAO,IAAI;AAAA,EACtD;AAEA,MAAI,aAAaE,UAAS,OAAO;AAC/B,SAAK,KAAKF,IAAG,KAAK,sBAAsB,CAAC;AACzC,SAAK,KAAK,MAAM,IAAI,CAAC,SAAS,GAAG,iBAAiB,KAAK,UAAU,KAAK,MAAM,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,EAAE,EAAE,KAAK,IAAI,CAAC;AAAA,EACpH;AAEA,OAAK;AAAA,IACH;AAAA,MACE,CAAC;AAAA,GAAM,IAAI;AAAA,MACX,CAAC,QAAQA,IAAG,KAAK,OAAO,CAAC,SAAS,KAAK,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI;AAAA,MAC1D,CAAC,KAAKA,IAAG,KAAK,UAAU,CAAC,SAAS,KAAK,OAAO,IAAI,IAAI;AAAA,MACtD,CAAC,MAAMA,IAAG,IAAI,SAAS,CAAC,SAAS,KAAK,iBAAiB,MAAM,IAAI,CAAC,CAAC,KAAK,aAAa;AAAA,MACrF,CAAC,GAAGA,IAAG,KAAK,YAAY,CAAC,SAAS,KAAK,YAAY,UAAU,IAAI;AAAA,MACjE,CAAC,QAAQA,IAAG,KAAK,OAAO,CAAC,SAAS,KAAK,IAAI,IAAI,IAAI;AAAA,MACnD,CAAC,MAAMA,IAAG,KAAK,SAAS,CAAC,SAAS,KAAK,MAAM,IAAI,IAAI;AAAA,MACrD,CAAC;AAAA,GAAM,IAAI;AAAA,IACb,EACG,IAAI,CAAC,SAAS;AACb,UAAI,KAAK,GAAG,CAAC,GAAG;AACd,eAAO,KAAK,GAAG,CAAC;AAAA,MAClB;AACA,aAAO;AAAA,IACT,CAAC,EACA,OAAO,OAAO,EACd,KAAK,IAAI;AAAA,EACd;AAEA,SAAO;AACT;;;AE9EA,SAAS,gBAAgB;AAEzB,OAAOA,SAAQ;AAKR,IAAM,cAAN,cAA0B,SAAS;AAAA,EAGxC,YAAYI,UAAc,SAAiB,MAAwB;AACjE,UAAM,IAAI;AAEV,SAAK,UAAU;AACf,SAAK,UAAUA;AAAA,EACjB;AAAA,EACA,OAAO,OAAY,WAA2BC,WAAgD;AAC5F,SAAK,QAAQ,aAAa;AAAA;AAAA,EAAOL,IAAG,KAAKA,IAAG,KAAK,KAAK,OAAO,CAAC,CAAC,KAAK,OAAO,SAAS,CAAC;AAErF,IAAAK,UAAS;AAAA,EACX;AACF;;;AHEA,eAAe,aAAa,EAAE,OAAO,SAAS,GAAuC;AACnF,MAAI,CAAC,OAAO,MAAM;AAChB;AAAA,EACF;AAEA,QAAM,WAAW,MAAM,QAAQ,MAAM,IAAI,IAAI,MAAM,OAAO,CAAC,MAAM,IAAI;AAErE,MAAI,aAAaH,UAAS,QAAQ;AAChC,YAAQ,MAAM,iBAAiB;AAAA,EACjC;AAEA,QAAM,YAAwC,SAC3C,IAAI,OAAO,YAAY;AACtB,UAAM,cAAc,IAAI,YAAY,SAAS,OAAO;AACpD,UAAM,kBAAkB,IAAI,gBAAgB;AAC5C,UAAM,CAAC,KAAK,GAAG,KAAK,IAAI,CAAC,GAAG,sBAAsB,OAAO,CAAC;AAE1D,QAAI,CAAC,KAAK;AACR,aAAO;AAAA,IACT;AAEA,YAAQ,MAAM,kBAAkB,aAAa,WAAWF,IAAG,IAAI,OAAO,IAAI,EAAE,EAAE;AAE9E,UAAM,aAAa,MAAM,MAAM,KAAK,OAAO,EAAE,UAAU,MAAM,QAAQ,gBAAgB,OAAO,CAAC,EAAE,WAAY,WAAuB;AAClI,YAAQ,aAAa;AAErB,QAAI,aAAaE,UAAS,QAAQ;AAChC,cAAQ,QAAQ,kBAAkB,aAAa,WAAWF,IAAG,IAAI,OAAO,IAAI,EAAE,EAAE;AAEhF,cAAQ,IAAI,WAAW,MAAM;AAAA,IAC/B;AAEA,gBAAY,QAAQ;AACpB,WAAO,EAAE,YAAY,OAAO,gBAAgB,MAAM,KAAK,eAAe,EAAE;AAAA,EAC1E,CAAC,EACA,OAAO,OAAO;AAEjB,QAAM,QAAQ,IAAI,SAAS;AAE3B,MAAI,aAAaE,UAAS,QAAQ;AAChC,YAAQ,QAAQ,iBAAiB;AAAA,EACnC;AACF;AAEA,eAAsB,SAAS,EAAE,OAAO,QAAQ,WAAW,GAAiC;AAC1F,QAAM,SAAS,aAAa,EAAE,UAAU,WAAW,YAAYA,UAAS,QAAQ,MAAM,OAAO,MAAM,QAAQ,CAAC;AAE5G,MAAI,OAAO,MAAM;AACf,YAAQ,aAAaC,kBAAiB,OAAO,IAAI;AAAA,EACnD;AAEA,QAAM,UAAU,QAAQ,OAAO;AAE/B,MAAI,WAAW,aAAaD,UAAS,OAAO;AAC1C,UAAM,EAAE,aAAa,oBAAoB,IAAI,MAAM,OAAO,YAAiB;AAE3E,UAAM,sBAAsB,IAAI,oBAAoB,CAAC,UAAU;AAC7D,YAAM,UAAU,GAAG,MAAM,WAAW,EAAE,CAAC,GAAG,SAAS,QAAQ,CAAC,CAAC;AAE7D,cAAQ,aAAaF,IAAG,OAAO,OAAO;AAEtC,kBAAY,WAAW;AAAA,IACzB,CAAC;AAED,wBAAoB,QAAQ,EAAE,MAAM,UAAU,CAAC;AAAA,EACjD;AAEA,QAAM,EAAE,MAAM,OAAO,GAAG,WAAW,IAAI;AACvC,QAAM,WAAW,OAAO;AACxB,QAAM,YAAY,UAAU,UAAU,WAAW,QAAQ,WAAW,MAAM,OAAO;AAEjF,UAAQ,MAAM,sBAAe,aAAa,WAAWA,IAAG,IAAI,SAAS,IAAI,EAAE,EAAE;AAE7E,QAAM,EAAE,eAAe,MAAM,IAAI,MAAM,UAAU;AAAA,IAC/C,QAAQ;AAAA,MACN,MAAM,QAAQ,IAAI;AAAA,MAClB,GAAG;AAAA,MACH,OAAO,YACH;AAAA,QACA,GAAG,WAAW;AAAA,QACd,MAAM;AAAA,MACR,IACE,WAAW;AAAA,MACf,QAAQ;AAAA,QACN,OAAO;AAAA,QACP,GAAG,WAAW;AAAA,MAChB;AAAA,IACF;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,UAAU,WAAW,EAAE,eAAe,QAAQ,QAAQ,QAAQ,WAAW,WAAW,SAAS,UAAU,WAAW,SAAS,CAAC;AAElI,MAAI,OAAO;AACT,YAAQ,aAAa;AACrB,YAAQ,KAAK,0BAAmB,aAAa,WAAWA,IAAG,IAAI,SAAS,IAAI,EAAE,EAAE;AAEhF,YAAQ,IAAI,QAAQ,KAAK,EAAE,CAAC;AAE5B,UAAM;AAAA,EACR;AAEA,QAAM,aAAa,EAAE,OAAO,OAAO,OAAO,SAAS,CAAC;AAEpD,UAAQ,aAAa;AACrB,UAAQ,QAAQ,6BAAsB,aAAa,WAAWA,IAAG,IAAI,SAAS,IAAI,EAAE,EAAE;AAEtF,UAAQ,IAAI,QAAQ,KAAK,EAAE,CAAC;AAC9B;;;AIxIA,OAAOD,WAAU;AAEjB,SAAS,gCAAgC;AACzC,SAAS,YAAAG,WAAU,aAAa;AAEhC,SAAS,SAAS;AAClB,OAAOF,SAAQ;AA4Bf,IAAM,UAAsC;AAAA,EAC1C,QAAQ;AAAA,IACN,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAqBf,UAAU,CAAC,cAAc,aAAa,iBAAiB,oBAAoB,8BAA8B;AAAA,EAC3G;AACF;AAEA,eAAsB,KAAK,EAAE,SAAS,UAAU,WAAWE,UAAS,QAAQ,iBAAiB,OAAO,GAAkC;AACpI,UAAQ,MAAM,6BAAsB;AAEpC,QAAM,aAAa,QAAQ,MAAM;AACjC,QAAM,aAAaH,MAAK,QAAQ,QAAQ,IAAI,GAAG,kBAAkB;AACjE,QAAM,iBAAiB,mBAAmB,QAAQ,YAAY;AAE9D,UAAQ,MAAM,wCAAiCC,IAAG,IAAI,UAAU,CAAC,EAAE;AACnE,QAAM,MAAM,WAAW,aAAa,GAAG,UAAU;AACjD,UAAQ,QAAQ,sCAA+BA,IAAG,IAAI,UAAU,CAAC,EAAE;AAEnE,QAAM,UAAU,MAAM,QAAQ,WAAW;AAAA,IACvC;AAAA,IACA,GAAG,WAAW,SAAS,IAAI,OAAO,SAAS;AACzC,cAAQ,MAAM,wBAAiBA,IAAG,IAAI,IAAI,CAAC,EAAE;AAC7C,YAAM,EAAE,OAAO,IAAI,MAAM,EAAE,EAAE,aAAa,MAAM,CAAC,IAAI,cAAc,IAAI,cAAc,IAAI,IAAI;AAC7F,cAAQ,QAAQ,uBAAgBA,IAAG,IAAI,IAAI,CAAC,EAAE;AAE9C,aAAO;AAAA,IACT,CAAC;AAAA,EACH,CAAC;AAED,MAAI,aAAaE,UAAS,MAAM;AAC9B,YAAQ,QAAQ,CAAC,WAAW;AAC1B,UAAI,yBAAyB,MAAM,GAAG;AACpC,gBAAQ,IAAI,OAAO,KAAK;AAAA,MAC1B;AAAA,IACF,CAAC;AAAA,EACH;AACA,UAAQ,QAAQ,4BAAqB;AAErC;AACF;;;AZ3EA,IAAM,aAAa;AAEnB,SAAS,eAAe,GAAY,YAA8B;AAChE,QAAM,QAAQ;AACd,QAAM,UAAU,aAAa,OAAO,EAAE,UAAU,WAAW,SAAS,CAAC;AAErE,MAAI,iBAAiB,SAAS;AAC5B,YAAQ,KAAKF,IAAG,OAAO,MAAM,OAAO,CAAC;AACrC,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,UAAQ,KAAK,OAAO;AACpB,UAAQ,KAAK,CAAC;AAChB;AAEA,eAAe,eAAe,OAAe,YAAwB;AACnE,UAAQ,MAAM,0BAAmB;AACjC,QAAM,SAAS,MAAM,eAAe,YAAY,WAAW,MAAM;AACjE,UAAQ,QAAQ,2BAAoBA,IAAG,IAAID,MAAK,SAAS,QAAQ,IAAI,GAAG,OAAO,QAAQ,CAAC,CAAC,GAAG;AAE5F,QAAM,SAAS,MAAM,UAAU,QAAQ,UAAU;AAEjD,MAAI,WAAW,OAAO;AACpB,QAAI,MAAM,QAAQ,MAAM,GAAG;AACzB,YAAM,IAAI,MAAM,qDAAqD;AAAA,IACvE;AAEA,QAAI,YAAY,MAAM,GAAG;AACvB,aAAO,aAAa,CAAC,SAAS,OAAO,MAAM,IAAI,GAAG,OAAO,UAAU;AACjE,cAAM,SAAS,EAAE,QAAQ,WAAW,CAAC;AACrC,gBAAQ,UAAU;AAClB,gBAAQ,MAAMC,IAAG,OAAOA,IAAG,KAAK,2BAA2B,MAAM,KAAK,OAAO,CAAC,EAAE,CAAC,CAAC;AAAA,MACpF,CAAC;AAAA,IACH;AAAA,EACF;AAEA,MAAI,MAAM,QAAQ,MAAM,GAAG;AACzB,UAAM,iBAAiB,IAAI,eAAe;AAC1C,UAAM,WAAW,OAAO,IAAI,CAAC,SAAS,MAAM,SAAS,EAAE,OAAO,QAAQ,MAAM,WAAW,CAAC,CAAC;AAEzF,UAAM,eAAe,IAAI,OAAO,QAAQ;AAExC;AAAA,EACF;AAEA,QAAM,SAAS,EAAE,OAAO,QAAQ,WAAW,CAAC;AAC9C;AAEA,eAAsB,IAAI,MAAgC;AACxD,QAAM,UAAU,IAAI,UAAU;AAE9B,UAAQ,QAAQ,WAAW,+DAA+D,EAAE,OAAO,cAAc;AAEjH,UACG,QAAQ,oBAAoB,+DAA+D,EAC3F,OAAO,uBAAuB,yBAAyB,EACvD,OAAO,0BAA0B,uBAAuB,EACxD,OAAO,eAAe,oCAAoC,EAC1D,OAAO,cAAc;AAExB,UAAQ,QAAQ,QAAQ,WAAW,EAAE,OAAO,YAAY;AACtD,WAAO,KAAK,EAAE,UAAU,OAAO,CAAC;AAAA,EAClC,CAAC;AAED,UAAQ,KAAK;AACb,UAAQ,QAAQ,OAAO;AACvB,UAAQ,MAAM,MAAM,EAAE,KAAK,MAAM,CAAC;AAElC,MAAI;AACF,UAAM,QAAQ,kBAAkB;AAEhC,YAAQ,KAAK,CAAC;AAAA,EAChB,SAAS,GAAG;AACV,mBAAe,GAAG,QAAQ,OAAO;AAAA,EACnC;AACF;AAEA,IAAO,cAAQ","sourcesContent":["import path from 'node:path'\n\nimport { isInputPath, PromiseManager, Warning } from '@kubb/core'\n\nimport { cac } from 'cac'\nimport pc from 'picocolors'\n\nimport { version } from '../package.json'\nimport { getConfig } from './utils/getConfig.ts'\nimport { getCosmiConfig } from './utils/getCosmiConfig.ts'\nimport { renderErrors } from './utils/renderErrors.ts'\nimport { spinner } from './utils/spinner.ts'\nimport { startWatcher } from './utils/watcher.ts'\nimport { generate } from './generate.ts'\nimport { init } from './init.ts'\n\nimport type { CLIOptions } from '@kubb/core'\n\nconst moduleName = 'kubb'\n\nfunction programCatcher(e: unknown, CLIOptions: CLIOptions): void {\n const error = e as Error\n const message = renderErrors(error, { logLevel: CLIOptions.logLevel })\n\n if (error instanceof Warning) {\n spinner.warn(pc.yellow(error.message))\n process.exit(0)\n }\n\n spinner.fail(message)\n process.exit(1)\n}\n\nasync function generateAction(input: string, CLIOptions: CLIOptions) {\n spinner.start('🔍 Loading config')\n const result = await getCosmiConfig(moduleName, CLIOptions.config)\n spinner.succeed(`🔍 Config loaded(${pc.dim(path.relative(process.cwd(), result.filepath))})`)\n\n const config = await getConfig(result, CLIOptions)\n\n if (CLIOptions.watch) {\n if (Array.isArray(config)) {\n throw new Error('Cannot use watcher with multiple KubbConfigs(array)')\n }\n\n if (isInputPath(config)) {\n return startWatcher([input || config.input.path], async (paths) => {\n await generate({ config, CLIOptions })\n spinner.spinner = 'simpleDotsScrolling'\n spinner.start(pc.yellow(pc.bold(`Watching for changes in ${paths.join(' and ')}`)))\n })\n }\n }\n\n if (Array.isArray(config)) {\n const promiseManager = new PromiseManager()\n const promises = config.map((item) => () => generate({ input, config: item, CLIOptions }))\n\n await promiseManager.run('seq', promises)\n\n return\n }\n\n await generate({ input, config, CLIOptions })\n}\n\nexport async function run(argv?: string[]): Promise<void> {\n const program = cac(moduleName)\n\n program.command('[input]', 'Path of the input file(overrides the one in `kubb.config.js`)').action(generateAction)\n\n program\n .command('generate [input]', 'Path of the input file(overrides the one in `kubb.config.js`)')\n .option('-c, --config <path>', 'Path to the Kubb config')\n .option('-l, --log-level <type>', 'Info, silent or debug')\n .option('-w, --watch', 'Watch mode based on the input file')\n .action(generateAction)\n\n program.command('init', 'Init Kubb').action(async () => {\n return init({ logLevel: 'info' })\n })\n\n program.help()\n program.version(version)\n program.parse(argv, { run: false })\n\n try {\n await program.runMatchedCommand()\n\n process.exit(0)\n } catch (e) {\n programCatcher(e, program.options)\n }\n}\n\nexport default run\n","{\n \"name\": \"@kubb/cli\",\n \"version\": \"2.0.0-alpha.4\",\n \"description\": \"Generator cli\",\n \"keywords\": [\n \"typescript\",\n \"plugins\",\n \"kubb\",\n \"codegen\",\n \"cli\"\n ],\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git://github.com/kubb-project/kubb.git\",\n \"directory\": \"packages/cli\"\n },\n \"license\": \"MIT\",\n \"author\": \"Stijn Van Hulle <stijn@stijnvanhulle.be\",\n \"sideEffects\": false,\n \"type\": \"module\",\n \"main\": \"dist/index.cjs\",\n \"module\": \"dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"bin\": {\n \"kubb\": \"bin/kubb.js\"\n },\n \"files\": [\n \"src\",\n \"dist\",\n \"bin\",\n \"!/**/**.test.**\",\n \"!/**/__tests__/**\"\n ],\n \"scripts\": {\n \"build\": \"tsup\",\n \"clean\": \"npx rimraf ./dist\",\n \"lint\": \"ESLINT_USE_FLAT_CONFIG=true eslint --format pretty .\",\n \"lint-fix\": \"bun run lint --quiet --fix\",\n \"release\": \"pnpm publish --no-git-check\",\n \"release:canary\": \"bash ../../.github/canary.sh && node ../../scripts/build.js canary && pnpm publish --no-git-check -tag canary\",\n \"release:alpha\": \"bash ../../.github/canary.sh && node ../../scripts/build.js alpha && pnpm publish --no-git-check -tag alpha\",\n \"start\": \"tsup --watch\",\n \"test\": \"vitest --passWithNoTests\",\n \"typecheck\": \"tsc -p ./tsconfig.json --noEmit --emitDeclarationOnly false\"\n },\n \"dependencies\": {\n \"@kubb/core\": \"workspace:*\",\n \"cac\": \"^6.7.14\",\n \"chokidar\": \"^3.5.3\",\n \"cosmiconfig\": \"^8.3.6\",\n \"execa\": \"^8.0.1\",\n \"ora\": \"^7.0.1\",\n \"picocolors\": \"^1.0.0\",\n \"pretty-error\": \"^4.0.0\",\n \"string-argv\": \"^0.3.2\",\n \"ts-node\": \"^10.9.1\"\n },\n \"devDependencies\": {\n \"@kubb/swagger\": \"workspace:*\",\n \"@kubb/ts-config\": \"workspace:*\",\n \"@kubb/tsup-config\": \"workspace:*\",\n \"@types/node\": \"^20.8.10\",\n \"source-map-support\": \"^0.5.21\",\n \"tsup\": \"^7.2.0\",\n \"typescript\": \"rc\"\n },\n \"packageManager\": \"pnpm@8.3.0\",\n \"engines\": {\n \"node\": \">=18\",\n \"pnpm\": \">=8.3.0\"\n },\n \"preferGlobal\": true,\n \"publishConfig\": {\n \"access\": \"public\",\n \"registry\": \"https://registry.npmjs.org/\"\n }\n}\n","import { isPromise } from '@kubb/core/utils'\n\nimport { getPlugins } from './getPlugins.ts'\n\nimport type { CLIOptions, KubbConfig, KubbUserConfig } from '@kubb/core'\nimport type { CosmiconfigResult } from './getCosmiConfig.ts'\n\nexport async function getConfig(result: CosmiconfigResult, CLIOptions: CLIOptions): Promise<Array<KubbConfig> | KubbConfig> {\n const config = result?.config\n let kubbUserConfig = Promise.resolve(config) as Promise<KubbUserConfig | Array<KubbUserConfig>>\n\n // for ts or js files\n if (typeof config === 'function') {\n const possiblePromise = config(CLIOptions)\n if (isPromise(possiblePromise)) {\n kubbUserConfig = possiblePromise\n }\n kubbUserConfig = Promise.resolve(possiblePromise)\n }\n\n let JSONConfig = await kubbUserConfig\n\n if (Array.isArray(JSONConfig)) {\n const promises = JSONConfig.map(async (item) => {\n return { ...item, plugins: item.plugins ? await getPlugins(item.plugins) : undefined }\n }) as unknown as Array<Promise<KubbConfig>>\n\n return Promise.all(promises)\n }\n\n JSONConfig = {\n ...JSONConfig,\n plugins: JSONConfig.plugins ? await getPlugins(JSONConfig.plugins) : undefined,\n }\n\n return JSONConfig as KubbConfig\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n\nimport { PackageManager } from '@kubb/core'\n\nimport type { KubbUserConfig } from '@kubb/core'\n\nfunction isJSONPlugins(plugins: KubbUserConfig['plugins']): plugins is Array<[name: string, options: object]> {\n return !!(plugins as Array<[name: string, options: object]>[])?.some((plugin) => {\n return Array.isArray(plugin) && typeof plugin?.at(0) === 'string'\n })\n}\n\nfunction isObjectPlugins(plugins: KubbUserConfig['plugins']): plugins is any {\n return plugins instanceof Object && !Array.isArray(plugins)\n}\n\nasync function importPlugin(name: string, options: object): Promise<KubbUserConfig['plugins']> {\n const packageManager = new PackageManager(process.cwd())\n\n const importedPlugin: any = process.env.NODE_ENV === 'test' ? await import(name) : await packageManager.import(name)\n\n // eslint-disable-next-line\n return importedPlugin?.default ? importedPlugin.default(options) : importedPlugin(options)\n}\n\nexport function getPlugins(plugins: KubbUserConfig['plugins']): Promise<KubbUserConfig['plugins']> {\n if (isObjectPlugins(plugins)) {\n throw new Error('Object plugins are not supported anymore, best to use http://kubb.dev/configuration/configure#json')\n }\n\n if (isJSONPlugins(plugins)) {\n const jsonPlugins = plugins as Array<[name: string, options: object]>\n const promises = jsonPlugins.map((plugin) => {\n const [name, options = {}] = plugin\n return importPlugin(name, options)\n })\n return Promise.all(promises) as Promise<KubbUserConfig['plugins']>\n }\n\n return Promise.resolve(plugins)\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-return */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\nimport { cosmiconfig } from 'cosmiconfig'\nimport tsNode from 'ts-node'\n\nimport type { defineConfig, KubbUserConfig } from '@kubb/core'\n\nexport type CosmiconfigResult = {\n filepath: string\n isEmpty?: boolean\n config: ReturnType<typeof defineConfig> | KubbUserConfig\n}\n\nconst tsLoader = (configFile: string) => {\n let registerer = { enabled() {} }\n\n try {\n // Register TypeScript compiler instance\n registerer = tsNode.register({\n compilerOptions: { module: 'commonjs' },\n typeCheck: false,\n })\n\n const module = require(configFile)\n\n return module.default\n } catch (err) {\n const error = err as Error\n\n if (error.name === 'MODULE_NOT_FOUND') {\n throw new Error(`'ts-node' is required for the TypeScript configuration files. Make sure it is installed\\nError: ${error.message}`)\n }\n\n throw error\n } finally {\n registerer.enabled()\n }\n}\n\nexport async function getCosmiConfig(moduleName: string, config?: string): Promise<CosmiconfigResult> {\n const searchPlaces = [\n 'package.json',\n `.${moduleName}rc`,\n `.${moduleName}rc.json`,\n `.${moduleName}rc.yaml`,\n `.${moduleName}rc.yml`,\n\n `.${moduleName}rc.ts`,\n `.${moduleName}rc.js`,\n `.${moduleName}rc.cjs`,\n `.${moduleName}rc.mjs`,\n\n `${moduleName}.config.ts`,\n `${moduleName}.config.js`,\n `${moduleName}.config.cjs`,\n `${moduleName}.config.mjs`,\n ]\n const explorer = cosmiconfig(moduleName, {\n cache: false,\n searchPlaces: [\n ...searchPlaces.map((searchPlace) => {\n return `.config/${searchPlace}`\n }),\n ...searchPlaces.map((searchPlace) => {\n return `configs/${searchPlace}`\n }),\n ...searchPlaces,\n ],\n loaders: {\n '.ts': tsLoader,\n },\n })\n\n const result = config ? await explorer.load(config) : await explorer.search()\n\n if (result?.isEmpty || !result || !result.config) {\n throw new Error('Config not defined, create a kubb.config.js or pass through your config with the option --config')\n }\n\n return result as CosmiconfigResult\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n\nimport { LogLevel } from '@kubb/core/utils'\n\nimport PrettyError from 'pretty-error'\n\nexport const prettyError = new PrettyError()\n .skipPackage('commander')\n .skip(function callback(traceLine: any) {\n // exclude renderErrors.ts\n const pattern = new RegExp('renderErrors')\n\n const hasMatch = traceLine?.file?.match(pattern)\n\n if (typeof traceLine.packageName !== 'undefined' && hasMatch) {\n return true\n }\n } as PrettyError.Callback)\n .start()\n\nfunction getErrorCauses(errors: Error[]): string[] {\n return errors\n .reduce((prev, error) => {\n const causedError = error?.cause as Error\n if (causedError) {\n prev = [...prev, ...getErrorCauses([causedError])]\n }\n prev = [...prev, prettyError.render(error)]\n\n return prev\n }, [] as string[])\n .filter(Boolean)\n}\n\nexport function renderErrors(error: Error | undefined, { logLevel = LogLevel.silent }: { logLevel?: LogLevel }): string {\n if (!error) {\n return ''\n }\n\n if (logLevel === LogLevel.silent) {\n // skip when no debug is set\n prettyError.skipNodeFiles()\n prettyError.skip(function skip() {\n return true\n } as PrettyError.Callback)\n\n return [prettyError.render(error)].filter(Boolean).join('\\n')\n }\n\n const errors = getErrorCauses([error])\n\n return errors.filter(Boolean).join('\\n')\n}\n","import ora from 'ora'\n\nexport const spinner = ora({\n spinner: 'clock',\n})\n","import pc from 'picocolors'\n\nimport { spinner } from './spinner.ts'\n\nexport async function startWatcher(path: string[], cb: (path: string[]) => Promise<void>): Promise<void> {\n const { watch } = await import('chokidar')\n\n const ignored = ['**/{.git,node_modules}/**']\n\n const watcher = watch(path, {\n ignorePermissionErrors: true,\n ignored,\n })\n watcher.on('all', (type, file) => {\n spinner.succeed(pc.yellow(pc.bold(`Change detected: ${type} ${file}`)))\n // revert back\n spinner.spinner = 'clock'\n\n try {\n cb(path)\n } catch (e) {\n spinner.warn(pc.red('Watcher failed'))\n }\n })\n\n return\n}\n","import { safeBuild } from '@kubb/core'\nimport { createLogger, LogLevel, randomPicoColour } from '@kubb/core/utils'\n\nimport { execa } from 'execa'\nimport pc from 'picocolors'\nimport { parseArgsStringToArgv } from 'string-argv'\n\nimport { getSummary } from './utils/getSummary.ts'\nimport { OraWritable } from './utils/OraWritable.ts'\nimport { spinner } from './utils/spinner.ts'\n\nimport type { Writable } from 'node:stream'\nimport type { CLIOptions, KubbConfig } from '@kubb/core'\nimport type { ExecaReturnValue } from 'execa'\n\ntype GenerateProps = {\n input?: string\n config: KubbConfig\n CLIOptions: CLIOptions\n}\n\ntype ExecutingHooksProps = {\n hooks: KubbConfig['hooks']\n logLevel: LogLevel\n}\n\ntype Executer = { subProcess: ExecaReturnValue<string>; abort: AbortController['abort'] }\n\nasync function executeHooks({ hooks, logLevel }: ExecutingHooksProps): Promise<void> {\n if (!hooks?.done) {\n return\n }\n\n const commands = Array.isArray(hooks.done) ? hooks.done : [hooks.done]\n\n if (logLevel === LogLevel.silent) {\n spinner.start(`Executing hooks`)\n }\n\n const executers: Promise<Executer | null>[] = commands\n .map(async (command) => {\n const oraWritable = new OraWritable(spinner, command)\n const abortController = new AbortController()\n const [cmd, ..._args] = [...parseArgsStringToArgv(command)]\n\n if (!cmd) {\n return null\n }\n\n spinner.start(`Executing hook ${logLevel !== 'silent' ? pc.dim(command) : ''}`)\n\n const subProcess = await execa(cmd, _args, { detached: true, signal: abortController.signal }).pipeStdout!(oraWritable as Writable)\n spinner.suffixText = ''\n\n if (logLevel === LogLevel.silent) {\n spinner.succeed(`Executing hook ${logLevel !== 'silent' ? pc.dim(command) : ''}`)\n\n console.log(subProcess.stdout)\n }\n\n oraWritable.destroy()\n return { subProcess, abort: abortController.abort.bind(abortController) }\n })\n .filter(Boolean)\n\n await Promise.all(executers)\n\n if (logLevel === LogLevel.silent) {\n spinner.succeed(`Executing hooks`)\n }\n}\n\nexport async function generate({ input, config, CLIOptions }: GenerateProps): Promise<void> {\n const logger = createLogger({ logLevel: CLIOptions.logLevel || LogLevel.silent, name: config.name, spinner })\n\n if (logger.name) {\n spinner.prefixText = randomPicoColour(logger.name)\n }\n\n const hrstart = process.hrtime()\n\n if (CLIOptions.logLevel === LogLevel.debug) {\n const { performance, PerformanceObserver } = await import('node:perf_hooks')\n\n const performanceOpserver = new PerformanceObserver((items) => {\n const message = `${items.getEntries()[0]?.duration.toFixed(0)}ms`\n\n spinner.suffixText = pc.yellow(message)\n\n performance.clearMarks()\n })\n\n performanceOpserver.observe({ type: 'measure' })\n }\n\n const { root: _root, ...userConfig } = config\n const logLevel = logger.logLevel\n const inputPath = input ?? ('path' in userConfig.input ? userConfig.input.path : undefined)\n\n spinner.start(`🚀 Building ${logLevel !== 'silent' ? pc.dim(inputPath) : ''}`)\n\n const { pluginManager, error } = await safeBuild({\n config: {\n root: process.cwd(),\n ...userConfig,\n input: inputPath\n ? {\n ...userConfig.input,\n path: inputPath,\n }\n : userConfig.input,\n output: {\n write: true,\n ...userConfig.output,\n },\n },\n logger,\n })\n\n const summary = getSummary({ pluginManager, config, status: error ? 'failed' : 'success', hrstart, logLevel: CLIOptions.logLevel })\n\n if (error) {\n spinner.suffixText = ''\n spinner.fail(`🚀 Build failed ${logLevel !== 'silent' ? pc.dim(inputPath) : ''}`)\n\n console.log(summary.join(''))\n\n throw error\n }\n\n await executeHooks({ hooks: config.hooks, logLevel })\n\n spinner.suffixText = ''\n spinner.succeed(`🚀 Build completed ${logLevel !== 'silent' ? pc.dim(inputPath) : ''}`)\n\n console.log(summary.join(''))\n}\n","import path from 'node:path'\n\nimport { LogLevel, randomPicoColour } from '@kubb/core/utils'\n\nimport pc from 'picocolors'\n\nimport { parseHrtimeToSeconds } from './parseHrtimeToSeconds.ts'\n\nimport type { BuildOutput, KubbConfig } from '@kubb/core'\n\ntype SummaryProps = {\n pluginManager: BuildOutput['pluginManager']\n status: 'success' | 'failed'\n hrstart: [number, number]\n config: KubbConfig\n logLevel?: LogLevel\n}\n\nexport function getSummary({ pluginManager, status, hrstart, config, logLevel }: SummaryProps): string[] {\n const logs: string[] = []\n const elapsedSeconds = parseHrtimeToSeconds(process.hrtime(hrstart))\n\n const buildStartPlugins = pluginManager.executed\n .filter((item) => item.hookName === 'buildStart' && item.plugin.name !== 'core')\n .map((item) => item.plugin.name)\n\n const buildEndPlugins = pluginManager.executed\n .filter((item) => item.hookName === 'buildEnd' && item.plugin.name !== 'core')\n .map((item) => item.plugin.name)\n\n const failedPlugins = config.plugins?.filter((plugin) => !buildEndPlugins.includes(plugin.name))?.map((plugin) => plugin.name)\n const pluginsCount = config.plugins?.length || 0\n const files = pluginManager.fileManager.files.sort((a, b) => {\n if (!a.meta?.pluginKey?.[1] || !b.meta?.pluginKey?.[1]) {\n return 0\n }\n if (a.meta?.pluginKey?.[1]?.length < b.meta?.pluginKey?.[1]?.length) {\n return 1\n }\n if (a.meta?.pluginKey?.[1]?.length > b.meta?.pluginKey?.[1]?.length) {\n return -1\n }\n return 0\n })\n\n const meta = {\n name: config.name,\n plugins: status === 'success'\n ? `${pc.green(`${buildStartPlugins.length} successful`)}, ${pluginsCount} total`\n : `${pc.red(`${failedPlugins?.length ?? 1} failed`)}, ${pluginsCount} total`,\n pluginsFailed: status === 'failed' ? failedPlugins?.map((name) => randomPicoColour(name))?.join(', ') : undefined,\n filesCreated: files.length,\n time: pc.yellow(`${elapsedSeconds}s`),\n output: path.resolve(config.root, config.output.path),\n } as const\n\n if (logLevel === LogLevel.debug) {\n logs.push(pc.bold('\\nGenerated files:\\n'))\n logs.push(files.map((file) => `${randomPicoColour(JSON.stringify(file.meta?.pluginKey))} ${file.path}`).join('\\n'))\n }\n\n logs.push(\n [\n [`\\n`, true],\n [` ${pc.bold('Name:')} ${meta.name}`, !!meta.name],\n [` ${pc.bold('Plugins:')} ${meta.plugins}`, true],\n [` ${pc.dim('Failed:')} ${meta.pluginsFailed || 'none'}`, !!meta.pluginsFailed],\n [`${pc.bold('Generated:')} ${meta.filesCreated} files`, true],\n [` ${pc.bold('Time:')} ${meta.time}`, true],\n [` ${pc.bold('Output:')} ${meta.output}`, true],\n [`\\n`, true],\n ]\n .map((item) => {\n if (item.at(1)) {\n return item.at(0)\n }\n return undefined\n })\n .filter(Boolean)\n .join('\\n'),\n )\n\n return logs\n}\n","export function parseHrtimeToSeconds(hrtime: [number, number]): string {\n const seconds = (hrtime[0] + hrtime[1] / 1e9).toFixed(3)\n return seconds\n}\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n\n/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n\nimport { Writable } from 'node:stream'\n\nimport pc from 'picocolors'\n\nimport type { WritableOptions } from 'node:stream'\nimport type { Ora } from 'ora'\n\nexport class OraWritable extends Writable {\n public command: string\n public spinner: Ora\n constructor(spinner: Ora, command: string, opts?: WritableOptions) {\n super(opts)\n\n this.command = command\n this.spinner = spinner\n }\n _write(chunk: any, _encoding: BufferEncoding, callback: (error?: Error | null) => void): void {\n this.spinner.suffixText = `\\n\\n${pc.bold(pc.blue(this.command))}: ${chunk?.toString()}`\n\n callback()\n }\n}\n","import path from 'node:path'\n\nimport { isPromiseFulfilledResult } from '@kubb/core/utils'\nimport { LogLevel, write } from '@kubb/core/utils'\n\nimport { $ } from 'execa'\nimport pc from 'picocolors'\n\nimport { spinner } from './utils/spinner.ts'\n\ntype Preset = 'simple'\n\ntype PackageManager = 'pnpm' | 'npm' | 'yarn'\n\ntype PresetMeta = {\n 'kubb.config': string\n packages: string[]\n}\n\ntype InitProps = {\n /**\n * @default `'silent'`\n */\n logLevel?: LogLevel\n /**\n * @default `'simple'`\n */\n preset?: Preset\n /**\n * @default `'pnpm'`\n */\n packageManager?: PackageManager\n}\n\nconst presets: Record<Preset, PresetMeta> = {\n simple: {\n 'kubb.config': `\nimport { defineConfig } from '@kubb/core'\nimport createSwagger from '@kubb/swagger'\nimport createSwaggerTS from '@kubb/swagger-ts'\nimport createSwaggerTanstackQuery from '@kubb/swagger-tanstack-query'\n\nexport default defineConfig({\n root: '.',\n input: {\n path: 'https://petstore3.swagger.io/api/v3/openapi.json',\n },\n output: {\n path: './src/gen',\n clean: true,\n },\n hooks: {\n done: ['echo \"🎉 done\"'],\n },\n plugins: [createSwagger({}), createSwaggerTS({ output: 'models', enumType: 'enum' }), createSwaggerTanstackQuery({ output: './hooks' })],\n})\n `,\n packages: ['@kubb/core', '@kubb/cli', '@kubb/swagger', '@kubb/swagger-ts', '@kubb/swagger-tanstack-query'],\n },\n}\n\nexport async function init({ preset = 'simple', logLevel = LogLevel.silent, packageManager = 'pnpm' }: InitProps): Promise<undefined> {\n spinner.start('📦 Initializing Kubb')\n\n const presetMeta = presets[preset]\n const configPath = path.resolve(process.cwd(), './kubb.config.js')\n const installCommand = packageManager === 'npm' ? 'install' : 'add'\n\n spinner.start(`📀 Writing \\`kubb.config.js\\` ${pc.dim(configPath)}`)\n await write(presetMeta['kubb.config'], configPath)\n spinner.succeed(`📀 Wrote \\`kubb.config.js\\` ${pc.dim(configPath)}`)\n\n const results = await Promise.allSettled([\n $`npm init es6 -y`,\n ...presetMeta.packages.map(async (pack) => {\n spinner.start(`📀 Installing ${pc.dim(pack)}`)\n const { stdout } = await $({ preferLocal: false })`${packageManager} ${installCommand} ${pack}`\n spinner.succeed(`📀 Installed ${pc.dim(pack)}`)\n\n return stdout\n }),\n ])\n\n if (logLevel === LogLevel.info) {\n results.forEach((result) => {\n if (isPromiseFulfilledResult(result)) {\n console.log(result.value)\n }\n })\n }\n spinner.succeed(`📦 initialized Kubb`)\n\n return\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kubb/cli",
|
|
3
|
-
"version": "2.0.0-alpha.
|
|
3
|
+
"version": "2.0.0-alpha.4",
|
|
4
4
|
"description": "Generator cli",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"typescript",
|
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
"kubb": "bin/kubb.js"
|
|
26
26
|
},
|
|
27
27
|
"files": [
|
|
28
|
+
"src",
|
|
28
29
|
"dist",
|
|
29
30
|
"bin",
|
|
30
31
|
"!/**/**.test.**",
|
|
@@ -40,16 +41,16 @@
|
|
|
40
41
|
"pretty-error": "^4.0.0",
|
|
41
42
|
"string-argv": "^0.3.2",
|
|
42
43
|
"ts-node": "^10.9.1",
|
|
43
|
-
"@kubb/core": "2.0.0-alpha.
|
|
44
|
+
"@kubb/core": "2.0.0-alpha.4"
|
|
44
45
|
},
|
|
45
46
|
"devDependencies": {
|
|
46
|
-
"@types/node": "^20.8.
|
|
47
|
+
"@types/node": "^20.8.10",
|
|
47
48
|
"source-map-support": "^0.5.21",
|
|
48
49
|
"tsup": "^7.2.0",
|
|
49
|
-
"typescript": "
|
|
50
|
-
"@kubb/swagger": "2.0.0-alpha.
|
|
51
|
-
"@kubb/
|
|
52
|
-
"@kubb/
|
|
50
|
+
"typescript": "rc",
|
|
51
|
+
"@kubb/swagger": "2.0.0-alpha.4",
|
|
52
|
+
"@kubb/tsup-config": "1.1.8",
|
|
53
|
+
"@kubb/ts-config": "0.1.0"
|
|
53
54
|
},
|
|
54
55
|
"packageManager": "pnpm@8.3.0",
|
|
55
56
|
"engines": {
|
package/src/generate.ts
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { safeBuild } from '@kubb/core'
|
|
2
|
+
import { createLogger, LogLevel, randomPicoColour } from '@kubb/core/utils'
|
|
3
|
+
|
|
4
|
+
import { execa } from 'execa'
|
|
5
|
+
import pc from 'picocolors'
|
|
6
|
+
import { parseArgsStringToArgv } from 'string-argv'
|
|
7
|
+
|
|
8
|
+
import { getSummary } from './utils/getSummary.ts'
|
|
9
|
+
import { OraWritable } from './utils/OraWritable.ts'
|
|
10
|
+
import { spinner } from './utils/spinner.ts'
|
|
11
|
+
|
|
12
|
+
import type { Writable } from 'node:stream'
|
|
13
|
+
import type { CLIOptions, KubbConfig } from '@kubb/core'
|
|
14
|
+
import type { ExecaReturnValue } from 'execa'
|
|
15
|
+
|
|
16
|
+
type GenerateProps = {
|
|
17
|
+
input?: string
|
|
18
|
+
config: KubbConfig
|
|
19
|
+
CLIOptions: CLIOptions
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
type ExecutingHooksProps = {
|
|
23
|
+
hooks: KubbConfig['hooks']
|
|
24
|
+
logLevel: LogLevel
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
type Executer = { subProcess: ExecaReturnValue<string>; abort: AbortController['abort'] }
|
|
28
|
+
|
|
29
|
+
async function executeHooks({ hooks, logLevel }: ExecutingHooksProps): Promise<void> {
|
|
30
|
+
if (!hooks?.done) {
|
|
31
|
+
return
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const commands = Array.isArray(hooks.done) ? hooks.done : [hooks.done]
|
|
35
|
+
|
|
36
|
+
if (logLevel === LogLevel.silent) {
|
|
37
|
+
spinner.start(`Executing hooks`)
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const executers: Promise<Executer | null>[] = commands
|
|
41
|
+
.map(async (command) => {
|
|
42
|
+
const oraWritable = new OraWritable(spinner, command)
|
|
43
|
+
const abortController = new AbortController()
|
|
44
|
+
const [cmd, ..._args] = [...parseArgsStringToArgv(command)]
|
|
45
|
+
|
|
46
|
+
if (!cmd) {
|
|
47
|
+
return null
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
spinner.start(`Executing hook ${logLevel !== 'silent' ? pc.dim(command) : ''}`)
|
|
51
|
+
|
|
52
|
+
const subProcess = await execa(cmd, _args, { detached: true, signal: abortController.signal }).pipeStdout!(oraWritable as Writable)
|
|
53
|
+
spinner.suffixText = ''
|
|
54
|
+
|
|
55
|
+
if (logLevel === LogLevel.silent) {
|
|
56
|
+
spinner.succeed(`Executing hook ${logLevel !== 'silent' ? pc.dim(command) : ''}`)
|
|
57
|
+
|
|
58
|
+
console.log(subProcess.stdout)
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
oraWritable.destroy()
|
|
62
|
+
return { subProcess, abort: abortController.abort.bind(abortController) }
|
|
63
|
+
})
|
|
64
|
+
.filter(Boolean)
|
|
65
|
+
|
|
66
|
+
await Promise.all(executers)
|
|
67
|
+
|
|
68
|
+
if (logLevel === LogLevel.silent) {
|
|
69
|
+
spinner.succeed(`Executing hooks`)
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export async function generate({ input, config, CLIOptions }: GenerateProps): Promise<void> {
|
|
74
|
+
const logger = createLogger({ logLevel: CLIOptions.logLevel || LogLevel.silent, name: config.name, spinner })
|
|
75
|
+
|
|
76
|
+
if (logger.name) {
|
|
77
|
+
spinner.prefixText = randomPicoColour(logger.name)
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const hrstart = process.hrtime()
|
|
81
|
+
|
|
82
|
+
if (CLIOptions.logLevel === LogLevel.debug) {
|
|
83
|
+
const { performance, PerformanceObserver } = await import('node:perf_hooks')
|
|
84
|
+
|
|
85
|
+
const performanceOpserver = new PerformanceObserver((items) => {
|
|
86
|
+
const message = `${items.getEntries()[0]?.duration.toFixed(0)}ms`
|
|
87
|
+
|
|
88
|
+
spinner.suffixText = pc.yellow(message)
|
|
89
|
+
|
|
90
|
+
performance.clearMarks()
|
|
91
|
+
})
|
|
92
|
+
|
|
93
|
+
performanceOpserver.observe({ type: 'measure' })
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
const { root: _root, ...userConfig } = config
|
|
97
|
+
const logLevel = logger.logLevel
|
|
98
|
+
const inputPath = input ?? ('path' in userConfig.input ? userConfig.input.path : undefined)
|
|
99
|
+
|
|
100
|
+
spinner.start(`🚀 Building ${logLevel !== 'silent' ? pc.dim(inputPath) : ''}`)
|
|
101
|
+
|
|
102
|
+
const { pluginManager, error } = await safeBuild({
|
|
103
|
+
config: {
|
|
104
|
+
root: process.cwd(),
|
|
105
|
+
...userConfig,
|
|
106
|
+
input: inputPath
|
|
107
|
+
? {
|
|
108
|
+
...userConfig.input,
|
|
109
|
+
path: inputPath,
|
|
110
|
+
}
|
|
111
|
+
: userConfig.input,
|
|
112
|
+
output: {
|
|
113
|
+
write: true,
|
|
114
|
+
...userConfig.output,
|
|
115
|
+
},
|
|
116
|
+
},
|
|
117
|
+
logger,
|
|
118
|
+
})
|
|
119
|
+
|
|
120
|
+
const summary = getSummary({ pluginManager, config, status: error ? 'failed' : 'success', hrstart, logLevel: CLIOptions.logLevel })
|
|
121
|
+
|
|
122
|
+
if (error) {
|
|
123
|
+
spinner.suffixText = ''
|
|
124
|
+
spinner.fail(`🚀 Build failed ${logLevel !== 'silent' ? pc.dim(inputPath) : ''}`)
|
|
125
|
+
|
|
126
|
+
console.log(summary.join(''))
|
|
127
|
+
|
|
128
|
+
throw error
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
await executeHooks({ hooks: config.hooks, logLevel })
|
|
132
|
+
|
|
133
|
+
spinner.suffixText = ''
|
|
134
|
+
spinner.succeed(`🚀 Build completed ${logLevel !== 'silent' ? pc.dim(inputPath) : ''}`)
|
|
135
|
+
|
|
136
|
+
console.log(summary.join(''))
|
|
137
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import path from 'node:path'
|
|
2
|
+
|
|
3
|
+
import { isInputPath, PromiseManager, Warning } from '@kubb/core'
|
|
4
|
+
|
|
5
|
+
import { cac } from 'cac'
|
|
6
|
+
import pc from 'picocolors'
|
|
7
|
+
|
|
8
|
+
import { version } from '../package.json'
|
|
9
|
+
import { getConfig } from './utils/getConfig.ts'
|
|
10
|
+
import { getCosmiConfig } from './utils/getCosmiConfig.ts'
|
|
11
|
+
import { renderErrors } from './utils/renderErrors.ts'
|
|
12
|
+
import { spinner } from './utils/spinner.ts'
|
|
13
|
+
import { startWatcher } from './utils/watcher.ts'
|
|
14
|
+
import { generate } from './generate.ts'
|
|
15
|
+
import { init } from './init.ts'
|
|
16
|
+
|
|
17
|
+
import type { CLIOptions } from '@kubb/core'
|
|
18
|
+
|
|
19
|
+
const moduleName = 'kubb'
|
|
20
|
+
|
|
21
|
+
function programCatcher(e: unknown, CLIOptions: CLIOptions): void {
|
|
22
|
+
const error = e as Error
|
|
23
|
+
const message = renderErrors(error, { logLevel: CLIOptions.logLevel })
|
|
24
|
+
|
|
25
|
+
if (error instanceof Warning) {
|
|
26
|
+
spinner.warn(pc.yellow(error.message))
|
|
27
|
+
process.exit(0)
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
spinner.fail(message)
|
|
31
|
+
process.exit(1)
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
async function generateAction(input: string, CLIOptions: CLIOptions) {
|
|
35
|
+
spinner.start('🔍 Loading config')
|
|
36
|
+
const result = await getCosmiConfig(moduleName, CLIOptions.config)
|
|
37
|
+
spinner.succeed(`🔍 Config loaded(${pc.dim(path.relative(process.cwd(), result.filepath))})`)
|
|
38
|
+
|
|
39
|
+
const config = await getConfig(result, CLIOptions)
|
|
40
|
+
|
|
41
|
+
if (CLIOptions.watch) {
|
|
42
|
+
if (Array.isArray(config)) {
|
|
43
|
+
throw new Error('Cannot use watcher with multiple KubbConfigs(array)')
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
if (isInputPath(config)) {
|
|
47
|
+
return startWatcher([input || config.input.path], async (paths) => {
|
|
48
|
+
await generate({ config, CLIOptions })
|
|
49
|
+
spinner.spinner = 'simpleDotsScrolling'
|
|
50
|
+
spinner.start(pc.yellow(pc.bold(`Watching for changes in ${paths.join(' and ')}`)))
|
|
51
|
+
})
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
if (Array.isArray(config)) {
|
|
56
|
+
const promiseManager = new PromiseManager()
|
|
57
|
+
const promises = config.map((item) => () => generate({ input, config: item, CLIOptions }))
|
|
58
|
+
|
|
59
|
+
await promiseManager.run('seq', promises)
|
|
60
|
+
|
|
61
|
+
return
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
await generate({ input, config, CLIOptions })
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export async function run(argv?: string[]): Promise<void> {
|
|
68
|
+
const program = cac(moduleName)
|
|
69
|
+
|
|
70
|
+
program.command('[input]', 'Path of the input file(overrides the one in `kubb.config.js`)').action(generateAction)
|
|
71
|
+
|
|
72
|
+
program
|
|
73
|
+
.command('generate [input]', 'Path of the input file(overrides the one in `kubb.config.js`)')
|
|
74
|
+
.option('-c, --config <path>', 'Path to the Kubb config')
|
|
75
|
+
.option('-l, --log-level <type>', 'Info, silent or debug')
|
|
76
|
+
.option('-w, --watch', 'Watch mode based on the input file')
|
|
77
|
+
.action(generateAction)
|
|
78
|
+
|
|
79
|
+
program.command('init', 'Init Kubb').action(async () => {
|
|
80
|
+
return init({ logLevel: 'info' })
|
|
81
|
+
})
|
|
82
|
+
|
|
83
|
+
program.help()
|
|
84
|
+
program.version(version)
|
|
85
|
+
program.parse(argv, { run: false })
|
|
86
|
+
|
|
87
|
+
try {
|
|
88
|
+
await program.runMatchedCommand()
|
|
89
|
+
|
|
90
|
+
process.exit(0)
|
|
91
|
+
} catch (e) {
|
|
92
|
+
programCatcher(e, program.options)
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export default run
|
package/src/init.ts
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import path from 'node:path'
|
|
2
|
+
|
|
3
|
+
import { isPromiseFulfilledResult } from '@kubb/core/utils'
|
|
4
|
+
import { LogLevel, write } from '@kubb/core/utils'
|
|
5
|
+
|
|
6
|
+
import { $ } from 'execa'
|
|
7
|
+
import pc from 'picocolors'
|
|
8
|
+
|
|
9
|
+
import { spinner } from './utils/spinner.ts'
|
|
10
|
+
|
|
11
|
+
type Preset = 'simple'
|
|
12
|
+
|
|
13
|
+
type PackageManager = 'pnpm' | 'npm' | 'yarn'
|
|
14
|
+
|
|
15
|
+
type PresetMeta = {
|
|
16
|
+
'kubb.config': string
|
|
17
|
+
packages: string[]
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
type InitProps = {
|
|
21
|
+
/**
|
|
22
|
+
* @default `'silent'`
|
|
23
|
+
*/
|
|
24
|
+
logLevel?: LogLevel
|
|
25
|
+
/**
|
|
26
|
+
* @default `'simple'`
|
|
27
|
+
*/
|
|
28
|
+
preset?: Preset
|
|
29
|
+
/**
|
|
30
|
+
* @default `'pnpm'`
|
|
31
|
+
*/
|
|
32
|
+
packageManager?: PackageManager
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const presets: Record<Preset, PresetMeta> = {
|
|
36
|
+
simple: {
|
|
37
|
+
'kubb.config': `
|
|
38
|
+
import { defineConfig } from '@kubb/core'
|
|
39
|
+
import createSwagger from '@kubb/swagger'
|
|
40
|
+
import createSwaggerTS from '@kubb/swagger-ts'
|
|
41
|
+
import createSwaggerTanstackQuery from '@kubb/swagger-tanstack-query'
|
|
42
|
+
|
|
43
|
+
export default defineConfig({
|
|
44
|
+
root: '.',
|
|
45
|
+
input: {
|
|
46
|
+
path: 'https://petstore3.swagger.io/api/v3/openapi.json',
|
|
47
|
+
},
|
|
48
|
+
output: {
|
|
49
|
+
path: './src/gen',
|
|
50
|
+
clean: true,
|
|
51
|
+
},
|
|
52
|
+
hooks: {
|
|
53
|
+
done: ['echo "🎉 done"'],
|
|
54
|
+
},
|
|
55
|
+
plugins: [createSwagger({}), createSwaggerTS({ output: 'models', enumType: 'enum' }), createSwaggerTanstackQuery({ output: './hooks' })],
|
|
56
|
+
})
|
|
57
|
+
`,
|
|
58
|
+
packages: ['@kubb/core', '@kubb/cli', '@kubb/swagger', '@kubb/swagger-ts', '@kubb/swagger-tanstack-query'],
|
|
59
|
+
},
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export async function init({ preset = 'simple', logLevel = LogLevel.silent, packageManager = 'pnpm' }: InitProps): Promise<undefined> {
|
|
63
|
+
spinner.start('📦 Initializing Kubb')
|
|
64
|
+
|
|
65
|
+
const presetMeta = presets[preset]
|
|
66
|
+
const configPath = path.resolve(process.cwd(), './kubb.config.js')
|
|
67
|
+
const installCommand = packageManager === 'npm' ? 'install' : 'add'
|
|
68
|
+
|
|
69
|
+
spinner.start(`📀 Writing \`kubb.config.js\` ${pc.dim(configPath)}`)
|
|
70
|
+
await write(presetMeta['kubb.config'], configPath)
|
|
71
|
+
spinner.succeed(`📀 Wrote \`kubb.config.js\` ${pc.dim(configPath)}`)
|
|
72
|
+
|
|
73
|
+
const results = await Promise.allSettled([
|
|
74
|
+
$`npm init es6 -y`,
|
|
75
|
+
...presetMeta.packages.map(async (pack) => {
|
|
76
|
+
spinner.start(`📀 Installing ${pc.dim(pack)}`)
|
|
77
|
+
const { stdout } = await $({ preferLocal: false })`${packageManager} ${installCommand} ${pack}`
|
|
78
|
+
spinner.succeed(`📀 Installed ${pc.dim(pack)}`)
|
|
79
|
+
|
|
80
|
+
return stdout
|
|
81
|
+
}),
|
|
82
|
+
])
|
|
83
|
+
|
|
84
|
+
if (logLevel === LogLevel.info) {
|
|
85
|
+
results.forEach((result) => {
|
|
86
|
+
if (isPromiseFulfilledResult(result)) {
|
|
87
|
+
console.log(result.value)
|
|
88
|
+
}
|
|
89
|
+
})
|
|
90
|
+
}
|
|
91
|
+
spinner.succeed(`📦 initialized Kubb`)
|
|
92
|
+
|
|
93
|
+
return
|
|
94
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
|
|
2
|
+
|
|
3
|
+
/* eslint-disable @typescript-eslint/no-unsafe-call */
|
|
4
|
+
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
5
|
+
|
|
6
|
+
import { Writable } from 'node:stream'
|
|
7
|
+
|
|
8
|
+
import pc from 'picocolors'
|
|
9
|
+
|
|
10
|
+
import type { WritableOptions } from 'node:stream'
|
|
11
|
+
import type { Ora } from 'ora'
|
|
12
|
+
|
|
13
|
+
export class OraWritable extends Writable {
|
|
14
|
+
public command: string
|
|
15
|
+
public spinner: Ora
|
|
16
|
+
constructor(spinner: Ora, command: string, opts?: WritableOptions) {
|
|
17
|
+
super(opts)
|
|
18
|
+
|
|
19
|
+
this.command = command
|
|
20
|
+
this.spinner = spinner
|
|
21
|
+
}
|
|
22
|
+
_write(chunk: any, _encoding: BufferEncoding, callback: (error?: Error | null) => void): void {
|
|
23
|
+
this.spinner.suffixText = `\n\n${pc.bold(pc.blue(this.command))}: ${chunk?.toString()}`
|
|
24
|
+
|
|
25
|
+
callback()
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { isPromise } from '@kubb/core/utils'
|
|
2
|
+
|
|
3
|
+
import { getPlugins } from './getPlugins.ts'
|
|
4
|
+
|
|
5
|
+
import type { CLIOptions, KubbConfig, KubbUserConfig } from '@kubb/core'
|
|
6
|
+
import type { CosmiconfigResult } from './getCosmiConfig.ts'
|
|
7
|
+
|
|
8
|
+
export async function getConfig(result: CosmiconfigResult, CLIOptions: CLIOptions): Promise<Array<KubbConfig> | KubbConfig> {
|
|
9
|
+
const config = result?.config
|
|
10
|
+
let kubbUserConfig = Promise.resolve(config) as Promise<KubbUserConfig | Array<KubbUserConfig>>
|
|
11
|
+
|
|
12
|
+
// for ts or js files
|
|
13
|
+
if (typeof config === 'function') {
|
|
14
|
+
const possiblePromise = config(CLIOptions)
|
|
15
|
+
if (isPromise(possiblePromise)) {
|
|
16
|
+
kubbUserConfig = possiblePromise
|
|
17
|
+
}
|
|
18
|
+
kubbUserConfig = Promise.resolve(possiblePromise)
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
let JSONConfig = await kubbUserConfig
|
|
22
|
+
|
|
23
|
+
if (Array.isArray(JSONConfig)) {
|
|
24
|
+
const promises = JSONConfig.map(async (item) => {
|
|
25
|
+
return { ...item, plugins: item.plugins ? await getPlugins(item.plugins) : undefined }
|
|
26
|
+
}) as unknown as Array<Promise<KubbConfig>>
|
|
27
|
+
|
|
28
|
+
return Promise.all(promises)
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
JSONConfig = {
|
|
32
|
+
...JSONConfig,
|
|
33
|
+
plugins: JSONConfig.plugins ? await getPlugins(JSONConfig.plugins) : undefined,
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return JSONConfig as KubbConfig
|
|
37
|
+
}
|