@kubb/cli
Version:
Command-line interface for Kubb, enabling easy generation of TypeScript, React-Query, Zod, and other code from OpenAPI specifications.
40 lines (29 loc) • 1.23 kB
text/typescript
import type { Logger } from '@kubb/core/logger'
import { execa } from 'execa'
import { parseArgsStringToArgv } from 'string-argv'
import pc from 'picocolors'
import { ConsolaWritable } from './Writables.ts'
import type { Config } from '@kubb/core'
import { LogMapper } from '@kubb/core/logger'
type ExecutingHooksProps = {
hooks: NonNullable<Config['hooks']>
logger: Logger
}
export async function executeHooks({ hooks, logger }: ExecutingHooksProps): Promise<void> {
const commands = Array.isArray(hooks.done) ? hooks.done : [hooks.done].filter(Boolean)
for (const command of commands) {
const consolaWritable = new ConsolaWritable(logger.consola!, command)
const [cmd, ..._args] = [...parseArgsStringToArgv(command)]
if (!cmd) {
continue
}
logger?.emit('start', `Executing hook ${logger.logLevel !== LogMapper.silent ? pc.dim(command) : ''}`)
await execa(cmd, _args, {
detached: true,
stdout: logger?.logLevel === LogMapper.silent ? undefined : ['pipe', consolaWritable],
stripFinalNewline: true,
})
logger?.emit('success', `Executed hook ${logger.logLevel !== LogMapper.silent ? pc.dim(command) : ''}`)
}
logger?.emit('success', 'Executed hooks')
}