fork of hey-api/openapi-ts because I need some additional things
1import type { Logger } from '@hey-api/codegen-core';
2import { loadConfigFile } from '@hey-api/codegen-core';
3
4import { expandToJobs } from './expand';
5// import { getProjectDependencies } from './packages';
6import type { ResolvedJob } from './resolve';
7import { resolveConfig } from './resolve';
8import type { UserConfig } from './types';
9import { validateJobs } from './validate';
10
11export type Configs = {
12 dependencies: Record<string, string>;
13 jobs: ReadonlyArray<ResolvedJob>;
14};
15
16/**
17 * @internal
18 */
19export async function resolveJobs({
20 logger,
21 userConfigs,
22}: {
23 logger: Logger;
24 userConfigs: ReadonlyArray<UserConfig>;
25}): Promise<Configs> {
26 const configs: Array<UserConfig> = [];
27 const dependencies: Record<string, string> = {};
28 // let dependencies: Record<string, string> = {};
29
30 const eventLoad = logger.timeEvent('load');
31 for (const userConfig of userConfigs) {
32 let configFile: string | undefined;
33 if (userConfig.configFile) {
34 const parts = userConfig.configFile.split('.');
35 configFile = parts.slice(0, parts.length - 1).join('.');
36 }
37
38 const loaded = await loadConfigFile<UserConfig>({
39 configFile,
40 logger,
41 name: 'openapi-python',
42 userConfig,
43 });
44
45 if (!Object.keys(dependencies).length) {
46 // TODO: handle dependencies for multiple configs properly?
47 // TODO: collect Python dependencies
48 // dependencies = getProjectDependencies(
49 // loaded.foundConfig ? loaded.configFile : undefined,
50 // );
51 }
52
53 configs.push(...loaded.configs);
54 }
55 eventLoad.timeEnd();
56
57 const eventBuild = logger.timeEvent('build');
58 const jobs = validateJobs(expandToJobs(configs));
59 const resolvedJobs = jobs.map((validated) => resolveConfig(validated, dependencies));
60 eventBuild.timeEnd();
61
62 return {
63 dependencies,
64 jobs: resolvedJobs,
65 };
66}