Skip to content

Commit 317256a

Browse files
committed
fix: parallel generation for multiple sources/targets
1 parent d6cc719 commit 317256a

File tree

1 file changed

+64
-60
lines changed

1 file changed

+64
-60
lines changed

src/cli/index.ts

Lines changed: 64 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -66,41 +66,43 @@ yargs(hideBin(process.argv))
6666
() => configurationFileArgument,
6767
async (argv) => {
6868
const config: ApiTypescriptGeneratorConfig = await loadConfig(argv.config);
69-
for (const generateConfig of config.generates) {
70-
switch (generateConfig.type) {
71-
case 'openapiClient':
72-
const document = await loadOpenApiDocument(generateConfig.document);
73-
const files = await postprocessFiles({
74-
files: (
75-
await openapiToTypescriptClient({
76-
document,
77-
generateConfig
78-
})
79-
).files,
80-
config: generateConfig.postprocess,
81-
outputDirPath: generateConfig.outputDirPath
82-
});
83-
const allDirectories = new Set<string>();
84-
for (const {filename} of files) {
85-
allDirectories.add(path.dirname(path.resolve(generateConfig.outputDirPath, filename)));
86-
}
87-
for (const directoryPath of allDirectories) {
88-
try {
89-
await fs.promises.mkdir(directoryPath, {recursive: true});
90-
} catch (e) {
91-
throw new Error(
92-
`Could not create directory "${directoryPath}": ${e instanceof Error ? e.message : e}.`
93-
);
69+
await Promise.all(
70+
config.generates.map(async (generateConfig) => {
71+
switch (generateConfig.type) {
72+
case 'openapiClient':
73+
const document = await loadOpenApiDocument(generateConfig.document);
74+
const files = await postprocessFiles({
75+
files: (
76+
await openapiToTypescriptClient({
77+
document,
78+
generateConfig
79+
})
80+
).files,
81+
config: generateConfig.postprocess,
82+
outputDirPath: generateConfig.outputDirPath
83+
});
84+
const allDirectories = new Set<string>();
85+
for (const {filename} of files) {
86+
allDirectories.add(path.dirname(path.resolve(generateConfig.outputDirPath, filename)));
87+
}
88+
for (const directoryPath of allDirectories) {
89+
try {
90+
await fs.promises.mkdir(directoryPath, {recursive: true});
91+
} catch (e) {
92+
throw new Error(
93+
`Could not create directory "${directoryPath}": ${e instanceof Error ? e.message : e}.`
94+
);
95+
}
9496
}
95-
}
96-
await saveGenerationResult({
97-
files,
98-
outputDirPath: generateConfig.outputDirPath,
99-
cleanupDirectories: getCleanupDirectories(generateConfig)
100-
});
101-
break;
102-
}
103-
}
97+
await saveGenerationResult({
98+
files,
99+
outputDirPath: generateConfig.outputDirPath,
100+
cleanupDirectories: getCleanupDirectories(generateConfig)
101+
});
102+
break;
103+
}
104+
})
105+
);
104106
}
105107
)
106108
.command(
@@ -109,32 +111,34 @@ yargs(hideBin(process.argv))
109111
() => configurationFileArgument,
110112
async (argv) => {
111113
const config: ApiTypescriptGeneratorConfig = await loadConfig(argv.config);
112-
for (const generateConfig of config.generates) {
113-
switch (generateConfig.type) {
114-
case 'openapiClient':
115-
if (
116-
!(await compareGenerationResult({
117-
files: await postprocessFiles({
118-
files: (
119-
await openapiToTypescriptClient({
120-
document: await loadOpenApiDocument(generateConfig.document),
121-
generateConfig
122-
})
123-
).files,
124-
config: generateConfig.postprocess,
125-
outputDirPath: generateConfig.outputDirPath
126-
}),
127-
outputDirPath: generateConfig.outputDirPath,
128-
cleanupDirectories: getCleanupDirectories(generateConfig)
129-
}))
130-
) {
131-
console.error(
132-
'Generated files are not up to date. Please run "api-typescript-generator generate" to update them.'
133-
);
134-
process.exit(1);
135-
}
136-
}
137-
}
114+
await Promise.all(
115+
config.generates.map(async (generateConfig) => {
116+
switch (generateConfig.type) {
117+
case 'openapiClient':
118+
if (
119+
!(await compareGenerationResult({
120+
files: await postprocessFiles({
121+
files: (
122+
await openapiToTypescriptClient({
123+
document: await loadOpenApiDocument(generateConfig.document),
124+
generateConfig
125+
})
126+
).files,
127+
config: generateConfig.postprocess,
128+
outputDirPath: generateConfig.outputDirPath
129+
}),
130+
outputDirPath: generateConfig.outputDirPath,
131+
cleanupDirectories: getCleanupDirectories(generateConfig)
132+
}))
133+
) {
134+
console.error(
135+
'Generated files are not up to date. Please run "api-typescript-generator generate" to update them.'
136+
);
137+
process.exit(1);
138+
}
139+
}
140+
})
141+
);
138142
}
139143
)
140144
.demandCommand(1)

0 commit comments

Comments
 (0)