import path from 'node:path'; import { detectInteractiveSession } from '@hey-api/codegen-core'; import { ConfigError, getInput, getLogs, getParser } from '@hey-api/shared'; import colors from 'ansi-colors'; import { getOutput } from './output/config'; import { getPlugins } from './plugins'; import type { Config } from './types'; import type { ValidationResult } from './validate'; export type ResolvedJob = { config: Config; errors: Array; index: number; }; export function resolveConfig( validated: ValidationResult, dependencies: Record, ): ResolvedJob { const logs = getLogs(validated.job.config.logs); const input = getInput(validated.job.config); const output = getOutput(validated.job.config); const parser = getParser(validated.job.config); output.path = path.resolve(process.cwd(), output.path); let plugins: Pick; try { plugins = getPlugins({ dependencies, userConfig: validated.job.config }); } catch (error) { if (error instanceof ConfigError) { validated.errors.push(error); } plugins = { pluginOrder: [], plugins: {}, }; } const config: Config = { configFile: validated.job.config.configFile ?? '', dryRun: validated.job.config.dryRun ?? false, input, interactive: validated.job.config.interactive ?? detectInteractiveSession(), logs, output, parser, pluginOrder: plugins.pluginOrder, plugins: plugins.plugins, }; if (logs.level === 'debug') { const jobPrefix = colors.gray(`[Job ${validated.job.index}] `); console.warn(`${jobPrefix}${colors.cyan('config:')}`, config); } return { config, errors: validated.errors, index: validated.job.index, }; }