fork of hey-api/openapi-ts because I need some additional things
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}