diff --git a/packages/io/__tests__/io.test.ts b/packages/io/__tests__/io.test.ts index 9d42465b..eacedd0f 100644 --- a/packages/io/__tests__/io.test.ts +++ b/packages/io/__tests__/io.test.ts @@ -3,7 +3,6 @@ import {promises as fs} from 'fs' import * as os from 'os' import * as path from 'path' import * as io from '../src/io' -import * as ioUtil from '../src/io-util' describe('cp', () => { beforeAll(async () => { @@ -825,31 +824,6 @@ describe('mkdirP', () => { (await fs.lstat(path.join(realDirPath, 'sub_dir'))).isDirectory() ).toBe(true) }) - - it('breaks if mkdirP loop out of control', async () => { - const testPath = path.join( - getTestTemp(), - 'mkdirP_failsafe', - '1', - '2', - '3', - '4', - '5', - '6', - '7', - '8', - '9', - '10' - ) - - expect.assertions(1) - - try { - await ioUtil.mkdirP(testPath, 10) - } catch (err) { - expect(err.code).toBe('ENOENT') - } - }) }) describe('which', () => { diff --git a/packages/io/src/io-util.ts b/packages/io/src/io-util.ts index f9775217..98d70429 100644 --- a/packages/io/src/io-util.ts +++ b/packages/io/src/io-util.ts @@ -1,4 +1,3 @@ -import {ok} from 'assert' import * as fs from 'fs' import * as path from 'path' @@ -59,52 +58,6 @@ export function isRooted(p: string): boolean { return p.startsWith('/') } -/** - * Recursively create a directory at `fsPath`. - * - * This implementation is optimistic, meaning it attempts to create the full - * path first, and backs up the path stack from there. - * - * @param fsPath The path to create - * @param maxDepth The maximum recursion depth - * @param depth The current recursion depth - */ -export async function mkdirP( - fsPath: string, - maxDepth: number = 1000, - depth: number = 1 -): Promise { - ok(fsPath, 'a path argument must be provided') - - fsPath = path.resolve(fsPath) - - if (depth >= maxDepth) return mkdir(fsPath) - - try { - await mkdir(fsPath) - return - } catch (err) { - switch (err.code) { - case 'ENOENT': { - await mkdirP(path.dirname(fsPath), maxDepth, depth + 1) - await mkdir(fsPath) - return - } - default: { - let stats: fs.Stats - - try { - stats = await stat(fsPath) - } catch (err2) { - throw err - } - - if (!stats.isDirectory()) throw err - } - } - } -} - /** * Best effort attempt to determine whether a file exists and is executable. * @param filePath file path to check diff --git a/packages/io/src/io.ts b/packages/io/src/io.ts index f97eb067..c5602d40 100644 --- a/packages/io/src/io.ts +++ b/packages/io/src/io.ts @@ -1,3 +1,4 @@ +import {ok} from 'assert' import * as childProcess from 'child_process' import * as path from 'path' import {promisify} from 'util' @@ -161,7 +162,8 @@ export async function rmRF(inputPath: string): Promise { * @returns Promise */ export async function mkdirP(fsPath: string): Promise { - await ioUtil.mkdirP(fsPath) + ok(fsPath, 'a path argument must be provided') + await ioUtil.mkdir(fsPath, {recursive: true}) } /**