Skip to content

Commit 76c9c5c

Browse files
committed
fix: concurrent directory creation
1 parent 02aa0d8 commit 76c9c5c

File tree

3 files changed

+17
-4
lines changed

3 files changed

+17
-4
lines changed

src/cli/index.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/usr/bin/env node
2-
import * as fs from 'fs';
3-
import path from 'path';
2+
import * as fs from 'node:fs';
3+
import path from 'node:path';
44
import yargs from 'yargs';
55
import {hideBin} from 'yargs/helpers';
66
import {compareGenerationResult} from './compare-generation-result';
@@ -14,6 +14,7 @@ import {
1414
openapiToTypescriptClient
1515
} from '../schema-to-typescript/openapi-to-typescript-client';
1616
import {loadOpenApiDocument} from '../schemas/load-open-api-document';
17+
import {makeDir} from '../utils/make-dir';
1718
import {postprocessFiles} from '../utils/postprocess-files';
1819

1920
async function loadConfig(filename: string): Promise<ApiTypescriptGeneratorConfig> {
@@ -87,7 +88,7 @@ yargs(hideBin(process.argv))
8788
}
8889
for (const directoryPath of allDirectories) {
8990
try {
90-
await fs.promises.mkdir(directoryPath, {recursive: true});
91+
await makeDir(directoryPath);
9192
} catch (e) {
9293
throw new Error(
9394
`Could not create directory "${directoryPath}": ${e instanceof Error ? e.message : e}.`

src/utils/make-dir.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import {mkdir} from 'node:fs/promises';
2+
3+
export async function makeDir(path: string) {
4+
try {
5+
await mkdir(path, {recursive: true});
6+
} catch (e) {
7+
if (e instanceof Error && (e as NodeJS.ErrnoException).code !== 'EEXIST') {
8+
throw e;
9+
}
10+
}
11+
}

src/utils/postprocess-files.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import fs from 'node:fs/promises';
22
import path from 'node:path';
33
import type {ESLint as ESLintClass} from 'eslint';
4+
import {makeDir} from './make-dir';
45
import {
56
ClientGenerationResultFile,
67
CommonOpenApiClientGeneratorConfigPostprocess
@@ -34,7 +35,7 @@ export async function postprocessFiles({
3435
try {
3536
await fs.stat(currentDirectory);
3637
} catch (e) {
37-
await fs.mkdir(currentDirectory);
38+
await makeDir(currentDirectory);
3839
directoriesToRemove.unshift(currentDirectory);
3940
}
4041
const subDirectory = directoryBits.shift();

0 commit comments

Comments
 (0)