fork of hey-api/openapi-ts because I need some additional things
at feat/skip-token 65 lines 1.8 kB view raw
1import path from 'node:path'; 2 3import { detectInteractiveSession } from '@hey-api/codegen-core'; 4import { ConfigError, getInput, getLogs, getParser } from '@hey-api/shared'; 5import colors from 'ansi-colors'; 6 7import { getOutput } from './output/config'; 8import { getPlugins } from './plugins'; 9import type { Config } from './types'; 10import type { ValidationResult } from './validate'; 11 12export type ResolvedJob = { 13 config: Config; 14 errors: Array<Error>; 15 index: number; 16}; 17 18export function resolveConfig( 19 validated: ValidationResult, 20 dependencies: Record<string, string>, 21): ResolvedJob { 22 const logs = getLogs(validated.job.config.logs); 23 const input = getInput(validated.job.config); 24 const output = getOutput(validated.job.config); 25 const parser = getParser(validated.job.config); 26 27 output.path = path.resolve(process.cwd(), output.path); 28 29 let plugins: Pick<Config, 'plugins' | 'pluginOrder'>; 30 31 try { 32 plugins = getPlugins({ dependencies, userConfig: validated.job.config }); 33 } catch (error) { 34 if (error instanceof ConfigError) { 35 validated.errors.push(error); 36 } 37 plugins = { 38 pluginOrder: [], 39 plugins: {}, 40 }; 41 } 42 43 const config: Config = { 44 configFile: validated.job.config.configFile ?? '', 45 dryRun: validated.job.config.dryRun ?? false, 46 input, 47 interactive: validated.job.config.interactive ?? detectInteractiveSession(), 48 logs, 49 output, 50 parser, 51 pluginOrder: plugins.pluginOrder, 52 plugins: plugins.plugins, 53 }; 54 55 if (logs.level === 'debug') { 56 const jobPrefix = colors.gray(`[Job ${validated.job.index}] `); 57 console.warn(`${jobPrefix}${colors.cyan('config:')}`, config); 58 } 59 60 return { 61 config, 62 errors: validated.errors, 63 index: validated.job.index, 64 }; 65}