1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-12-24 08:09:08 -05:00

fix: Deno.mkdir should conform to style guide (#3617)

This commit is contained in:
Ry Dahl 2020-01-07 14:14:33 -05:00 committed by GitHub
parent ad9fd589d4
commit d4bf0670ce
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
12 changed files with 87 additions and 39 deletions

View file

@ -517,6 +517,11 @@ declare namespace Deno {
// @url js/mkdir.d.ts // @url js/mkdir.d.ts
export interface MkdirOption {
recursive?: boolean;
mode?: number;
}
/** Creates a new directory with the specified path synchronously. /** Creates a new directory with the specified path synchronously.
* If `recursive` is set to true, nested directories will be created (also known * If `recursive` is set to true, nested directories will be created (also known
* as "mkdir -p"). * as "mkdir -p").
@ -524,13 +529,17 @@ declare namespace Deno {
* Windows. * Windows.
* *
* Deno.mkdirSync("new_dir"); * Deno.mkdirSync("new_dir");
* Deno.mkdirSync("nested/directories", true); * Deno.mkdirSync("nested/directories", { recursive: true });
*/ */
export function mkdirSync(path: string, options?: MkdirOption): void;
/** Deprecated */
export function mkdirSync( export function mkdirSync(
path: string, path: string,
recursive?: boolean, recursive?: boolean,
mode?: number mode?: number
): void; ): void;
/** Creates a new directory with the specified path. /** Creates a new directory with the specified path.
* If `recursive` is set to true, nested directories will be created (also known * If `recursive` is set to true, nested directories will be created (also known
* as "mkdir -p"). * as "mkdir -p").
@ -538,8 +547,11 @@ declare namespace Deno {
* Windows. * Windows.
* *
* await Deno.mkdir("new_dir"); * await Deno.mkdir("new_dir");
* await Deno.mkdir("nested/directories", true); * await Deno.mkdir("nested/directories", { recursive: true });
*/ */
export function mkdir(path: string, options?: MkdirOption): Promise<void>;
/** Deprecated */
export function mkdir( export function mkdir(
path: string, path: string,
recursive?: boolean, recursive?: boolean,

View file

@ -2,6 +2,35 @@
import { sendSync, sendAsync } from "./dispatch_json.ts"; import { sendSync, sendAsync } from "./dispatch_json.ts";
import * as dispatch from "./dispatch.ts"; import * as dispatch from "./dispatch.ts";
// TODO(ry) The complexity in argument parsing is to support deprecated forms of
// mkdir and mkdirSync.
function mkdirArgs(
path: string,
optionsOrRecursive?: MkdirOption | boolean,
mode?: number
): { path: string; recursive: boolean; mode: number } {
const args = { path, recursive: false, mode: 0o777 };
if (typeof optionsOrRecursive == "boolean") {
args.recursive = optionsOrRecursive;
if (mode) {
args.mode = mode;
}
} else if (optionsOrRecursive) {
if (typeof optionsOrRecursive.recursive == "boolean") {
args.recursive = optionsOrRecursive.recursive;
}
if (optionsOrRecursive.mode) {
args.mode = optionsOrRecursive.mode;
}
}
return args;
}
export interface MkdirOption {
recursive?: boolean;
mode?: number;
}
/** Creates a new directory with the specified path synchronously. /** Creates a new directory with the specified path synchronously.
* If `recursive` is set to true, nested directories will be created (also known * If `recursive` is set to true, nested directories will be created (also known
* as "mkdir -p"). * as "mkdir -p").
@ -9,10 +38,14 @@ import * as dispatch from "./dispatch.ts";
* Windows. * Windows.
* *
* Deno.mkdirSync("new_dir"); * Deno.mkdirSync("new_dir");
* Deno.mkdirSync("nested/directories", true); * Deno.mkdirSync("nested/directories", { recursive: true });
*/ */
export function mkdirSync(path: string, recursive = false, mode = 0o777): void { export function mkdirSync(
sendSync(dispatch.OP_MKDIR, { path, recursive, mode }); path: string,
optionsOrRecursive?: MkdirOption | boolean,
mode?: number
): void {
sendSync(dispatch.OP_MKDIR, mkdirArgs(path, optionsOrRecursive, mode));
} }
/** Creates a new directory with the specified path. /** Creates a new directory with the specified path.
@ -22,12 +55,12 @@ export function mkdirSync(path: string, recursive = false, mode = 0o777): void {
* Windows. * Windows.
* *
* await Deno.mkdir("new_dir"); * await Deno.mkdir("new_dir");
* await Deno.mkdir("nested/directories", true); * await Deno.mkdir("nested/directories", { recursive: true });
*/ */
export async function mkdir( export async function mkdir(
path: string, path: string,
recursive = false, optionsOrRecursive?: MkdirOption | boolean,
mode = 0o777 mode?: number
): Promise<void> { ): Promise<void> {
await sendAsync(dispatch.OP_MKDIR, { path, recursive, mode }); await sendAsync(dispatch.OP_MKDIR, mkdirArgs(path, optionsOrRecursive, mode));
} }

View file

@ -10,7 +10,7 @@ testPerm({ read: true, write: true }, function mkdirSyncSuccess(): void {
testPerm({ read: true, write: true }, function mkdirSyncMode(): void { testPerm({ read: true, write: true }, function mkdirSyncMode(): void {
const path = Deno.makeTempDirSync() + "/dir"; const path = Deno.makeTempDirSync() + "/dir";
Deno.mkdirSync(path, false, 0o755); // no perm for x Deno.mkdirSync(path, { mode: 0o755 }); // no perm for x
const pathInfo = Deno.statSync(path); const pathInfo = Deno.statSync(path);
if (pathInfo.mode !== null) { if (pathInfo.mode !== null) {
// Skip windows // Skip windows
@ -51,7 +51,7 @@ testPerm({ write: true }, function mkdirErrIfExists(): void {
testPerm({ read: true, write: true }, function mkdirSyncRecursive(): void { testPerm({ read: true, write: true }, function mkdirSyncRecursive(): void {
const path = Deno.makeTempDirSync() + "/nested/directory"; const path = Deno.makeTempDirSync() + "/nested/directory";
Deno.mkdirSync(path, true); Deno.mkdirSync(path, { recursive: true });
const pathInfo = Deno.statSync(path); const pathInfo = Deno.statSync(path);
assert(pathInfo.isDirectory()); assert(pathInfo.isDirectory());
}); });
@ -60,7 +60,7 @@ testPerm({ read: true, write: true }, async function mkdirRecursive(): Promise<
void void
> { > {
const path = Deno.makeTempDirSync() + "/nested/directory"; const path = Deno.makeTempDirSync() + "/nested/directory";
await Deno.mkdir(path, true); await Deno.mkdir(path, { recursive: true });
const pathInfo = Deno.statSync(path); const pathInfo = Deno.statSync(path);
assert(pathInfo.isDirectory()); assert(pathInfo.isDirectory());
}); });

View file

@ -33,7 +33,7 @@ export async function emptyDir(dir: string): Promise<void> {
} }
// if not exist. then create it // if not exist. then create it
await mkdir(dir, true); await mkdir(dir, { recursive: true });
} }
} }
@ -61,7 +61,7 @@ export function emptyDirSync(dir: string): void {
throw err; throw err;
} }
// if not exist. then create it // if not exist. then create it
mkdirSync(dir, true); mkdirSync(dir, { recursive: true });
return; return;
} }
} }

View file

@ -18,7 +18,7 @@ export async function ensureDir(dir: string): Promise<void> {
} catch (err) { } catch (err) {
if (err instanceof Deno.DenoError && err.kind === ErrorKind.NotFound) { if (err instanceof Deno.DenoError && err.kind === ErrorKind.NotFound) {
// if dir not exists. then create it. // if dir not exists. then create it.
await mkdir(dir, true); await mkdir(dir, { recursive: true });
return; return;
} }
throw err; throw err;
@ -41,7 +41,7 @@ export function ensureDirSync(dir: string): void {
} catch (err) { } catch (err) {
if (err instanceof Deno.DenoError && err.kind == ErrorKind.NotFound) { if (err instanceof Deno.DenoError && err.kind == ErrorKind.NotFound) {
// if dir not exists. then create it. // if dir not exists. then create it.
mkdirSync(dir, true); mkdirSync(dir, { recursive: true });
return; return;
} }
throw err; throw err;

View file

@ -40,7 +40,7 @@ test(async function ensureDirIfItExist(): Promise<void> {
const testDir = path.join(baseDir, "test"); const testDir = path.join(baseDir, "test");
// create test directory // create test directory
await Deno.mkdir(testDir, true); await Deno.mkdir(testDir, { recursive: true });
await ensureDir(testDir); await ensureDir(testDir);
@ -60,7 +60,7 @@ test(function ensureDirSyncIfItExist(): void {
const testDir = path.join(baseDir, "test"); const testDir = path.join(baseDir, "test");
// create test directory // create test directory
Deno.mkdirSync(testDir, true); Deno.mkdirSync(testDir, { recursive: true });
ensureDirSync(testDir); ensureDirSync(testDir);

View file

@ -41,7 +41,7 @@ test(async function ensureFileIfItExist(): Promise<void> {
const testDir = path.join(testdataDir, "ensure_file_3"); const testDir = path.join(testdataDir, "ensure_file_3");
const testFile = path.join(testDir, "test.txt"); const testFile = path.join(testDir, "test.txt");
await Deno.mkdir(testDir, true); await Deno.mkdir(testDir, { recursive: true });
await Deno.writeFile(testFile, new Uint8Array()); await Deno.writeFile(testFile, new Uint8Array());
await ensureFile(testFile); await ensureFile(testFile);
@ -61,7 +61,7 @@ test(function ensureFileSyncIfItExist(): void {
const testDir = path.join(testdataDir, "ensure_file_4"); const testDir = path.join(testdataDir, "ensure_file_4");
const testFile = path.join(testDir, "test.txt"); const testFile = path.join(testDir, "test.txt");
Deno.mkdirSync(testDir, true); Deno.mkdirSync(testDir, { recursive: true });
Deno.writeFileSync(testFile, new Uint8Array()); Deno.writeFileSync(testFile, new Uint8Array());
ensureFileSync(testFile); ensureFileSync(testFile);
@ -77,7 +77,7 @@ test(function ensureFileSyncIfItExist(): void {
test(async function ensureFileIfItExistAsDir(): Promise<void> { test(async function ensureFileIfItExistAsDir(): Promise<void> {
const testDir = path.join(testdataDir, "ensure_file_5"); const testDir = path.join(testdataDir, "ensure_file_5");
await Deno.mkdir(testDir, true); await Deno.mkdir(testDir, { recursive: true });
await assertThrowsAsync( await assertThrowsAsync(
async (): Promise<void> => { async (): Promise<void> => {
@ -93,7 +93,7 @@ test(async function ensureFileIfItExistAsDir(): Promise<void> {
test(function ensureFileSyncIfItExistAsDir(): void { test(function ensureFileSyncIfItExistAsDir(): void {
const testDir = path.join(testdataDir, "ensure_file_6"); const testDir = path.join(testdataDir, "ensure_file_6");
Deno.mkdirSync(testDir, true); Deno.mkdirSync(testDir, { recursive: true });
assertThrows( assertThrows(
(): void => { (): void => {

View file

@ -43,7 +43,7 @@ test(async function ensureLinkIfItExist(): Promise<void> {
const testFile = path.join(testDir, "test.txt"); const testFile = path.join(testDir, "test.txt");
const linkFile = path.join(testDir, "link.txt"); const linkFile = path.join(testDir, "link.txt");
await Deno.mkdir(testDir, true); await Deno.mkdir(testDir, { recursive: true });
await Deno.writeFile(testFile, new Uint8Array()); await Deno.writeFile(testFile, new Uint8Array());
await ensureLink(testFile, linkFile); await ensureLink(testFile, linkFile);
@ -90,7 +90,7 @@ test(function ensureLinkSyncIfItExist(): void {
const testFile = path.join(testDir, "test.txt"); const testFile = path.join(testDir, "test.txt");
const linkFile = path.join(testDir, "link.txt"); const linkFile = path.join(testDir, "link.txt");
Deno.mkdirSync(testDir, true); Deno.mkdirSync(testDir, { recursive: true });
Deno.writeFileSync(testFile, new Uint8Array()); Deno.writeFileSync(testFile, new Uint8Array());
ensureLinkSync(testFile, linkFile); ensureLinkSync(testFile, linkFile);
@ -138,7 +138,7 @@ test(async function ensureLinkDirectoryIfItExist(): Promise<void> {
const linkDir = path.join(testdataDir, "ensure_link_link_3"); const linkDir = path.join(testdataDir, "ensure_link_link_3");
const testFile = path.join(testDir, "test.txt"); const testFile = path.join(testDir, "test.txt");
await Deno.mkdir(testDir, true); await Deno.mkdir(testDir, { recursive: true });
await Deno.writeFile(testFile, new Uint8Array()); await Deno.writeFile(testFile, new Uint8Array());
await assertThrowsAsync( await assertThrowsAsync(
@ -158,7 +158,7 @@ test(function ensureLinkSyncDirectoryIfItExist(): void {
const linkDir = path.join(testdataDir, "ensure_link_link_3"); const linkDir = path.join(testdataDir, "ensure_link_link_3");
const testFile = path.join(testDir, "test.txt"); const testFile = path.join(testDir, "test.txt");
Deno.mkdirSync(testDir, true); Deno.mkdirSync(testDir, { recursive: true });
Deno.writeFileSync(testFile, new Uint8Array()); Deno.writeFileSync(testFile, new Uint8Array());
assertThrows( assertThrows(

View file

@ -50,7 +50,7 @@ test(async function ensureSymlinkIfItExist(): Promise<void> {
const testFile = path.join(testDir, "test.txt"); const testFile = path.join(testDir, "test.txt");
const linkFile = path.join(testDir, "link.txt"); const linkFile = path.join(testDir, "link.txt");
await Deno.mkdir(testDir, true); await Deno.mkdir(testDir, { recursive: true });
await Deno.writeFile(testFile, new Uint8Array()); await Deno.writeFile(testFile, new Uint8Array());
if (isWindows) { if (isWindows) {
@ -79,7 +79,7 @@ test(function ensureSymlinkSyncIfItExist(): void {
const testFile = path.join(testDir, "test.txt"); const testFile = path.join(testDir, "test.txt");
const linkFile = path.join(testDir, "link.txt"); const linkFile = path.join(testDir, "link.txt");
Deno.mkdirSync(testDir, true); Deno.mkdirSync(testDir, { recursive: true });
Deno.writeFileSync(testFile, new Uint8Array()); Deno.writeFileSync(testFile, new Uint8Array());
if (isWindows) { if (isWindows) {
@ -109,7 +109,7 @@ test(async function ensureSymlinkDirectoryIfItExist(): Promise<void> {
const linkDir = path.join(testdataDir, "link_file_link_3"); const linkDir = path.join(testdataDir, "link_file_link_3");
const testFile = path.join(testDir, "test.txt"); const testFile = path.join(testDir, "test.txt");
await Deno.mkdir(testDir, true); await Deno.mkdir(testDir, { recursive: true });
await Deno.writeFile(testFile, new Uint8Array()); await Deno.writeFile(testFile, new Uint8Array());
if (isWindows) { if (isWindows) {
@ -141,7 +141,7 @@ test(function ensureSymlinkSyncDirectoryIfItExist(): void {
const linkDir = path.join(testdataDir, "link_file_link_3"); const linkDir = path.join(testdataDir, "link_file_link_3");
const testFile = path.join(testDir, "test.txt"); const testFile = path.join(testDir, "test.txt");
Deno.mkdirSync(testDir, true); Deno.mkdirSync(testDir, { recursive: true });
Deno.writeFileSync(testFile, new Uint8Array()); Deno.writeFileSync(testFile, new Uint8Array());
if (isWindows) { if (isWindows) {

View file

@ -28,7 +28,7 @@ test(async function moveDirectoryIfDestNotExists(): Promise<void> {
const srcDir = path.join(testdataDir, "move_test_src_2"); const srcDir = path.join(testdataDir, "move_test_src_2");
const destDir = path.join(testdataDir, "move_test_dest_2"); const destDir = path.join(testdataDir, "move_test_dest_2");
await Deno.mkdir(srcDir, true); await Deno.mkdir(srcDir, { recursive: true });
// if dest directory not exist // if dest directory not exist
await assertThrowsAsync( await assertThrowsAsync(
@ -112,7 +112,7 @@ test(async function moveDirectory(): Promise<void> {
const destFile = path.join(destDir, "test.txt"); const destFile = path.join(destDir, "test.txt");
const srcContent = new TextEncoder().encode("src"); const srcContent = new TextEncoder().encode("src");
await Deno.mkdir(srcDir, true); await Deno.mkdir(srcDir, { recursive: true });
assertEquals(await exists(srcDir), true); assertEquals(await exists(srcDir), true);
await Deno.writeFile(srcFile, srcContent); await Deno.writeFile(srcFile, srcContent);
@ -140,7 +140,10 @@ test(async function moveIfSrcAndDestDirectoryExistsAndOverwrite(): Promise<
const srcContent = new TextEncoder().encode("src"); const srcContent = new TextEncoder().encode("src");
const destContent = new TextEncoder().encode("dest"); const destContent = new TextEncoder().encode("dest");
await Promise.all([Deno.mkdir(srcDir, true), Deno.mkdir(destDir, true)]); await Promise.all([
Deno.mkdir(srcDir, { recursive: true }),
Deno.mkdir(destDir, { recursive: true })
]);
assertEquals(await exists(srcDir), true); assertEquals(await exists(srcDir), true);
assertEquals(await exists(destDir), true); assertEquals(await exists(destDir), true);
await Promise.all([ await Promise.all([
@ -191,7 +194,7 @@ test(function moveSyncDirectoryIfDestNotExists(): void {
const srcDir = path.join(testdataDir, "move_sync_test_src_2"); const srcDir = path.join(testdataDir, "move_sync_test_src_2");
const destDir = path.join(testdataDir, "move_sync_test_dest_2"); const destDir = path.join(testdataDir, "move_sync_test_dest_2");
Deno.mkdirSync(srcDir, true); Deno.mkdirSync(srcDir, { recursive: true });
// if dest directory not exist // if dest directory not exist
assertThrows( assertThrows(
@ -270,7 +273,7 @@ test(function moveSyncDirectory(): void {
const destFile = path.join(destDir, "test.txt"); const destFile = path.join(destDir, "test.txt");
const srcContent = new TextEncoder().encode("src"); const srcContent = new TextEncoder().encode("src");
Deno.mkdirSync(srcDir, true); Deno.mkdirSync(srcDir, { recursive: true });
assertEquals(existsSync(srcDir), true); assertEquals(existsSync(srcDir), true);
Deno.writeFileSync(srcFile, srcContent); Deno.writeFileSync(srcFile, srcContent);
@ -294,8 +297,8 @@ test(function moveSyncIfSrcAndDestDirectoryExistsAndOverwrite(): void {
const srcContent = new TextEncoder().encode("src"); const srcContent = new TextEncoder().encode("src");
const destContent = new TextEncoder().encode("dest"); const destContent = new TextEncoder().encode("dest");
Deno.mkdirSync(srcDir, true); Deno.mkdirSync(srcDir, { recursive: true });
Deno.mkdirSync(destDir, true); Deno.mkdirSync(destDir, { recursive: true });
assertEquals(existsSync(srcDir), true); assertEquals(existsSync(srcDir), true);
assertEquals(existsSync(destDir), true); assertEquals(existsSync(destDir), true);
Deno.writeFileSync(srcFile, srcContent); Deno.writeFileSync(srcFile, srcContent);

View file

@ -105,7 +105,7 @@ testWalk(
testWalk( testWalk(
async (d: string): Promise<void> => { async (d: string): Promise<void> => {
await mkdir(d + "/a/b/c/d", true); await mkdir(d + "/a/b/c/d", { recursive: true });
await touch(d + "/a/b/c/d/x"); await touch(d + "/a/b/c/d/x");
}, },
async function depth(): Promise<void> { async function depth(): Promise<void> {

View file

@ -40,7 +40,7 @@ export async function tempFile(
const filepath = path.resolve( const filepath = path.resolve(
`${dir}/${opts.prefix || ""}${r}${opts.postfix || ""}` `${dir}/${opts.prefix || ""}${r}${opts.postfix || ""}`
); );
await mkdir(path.dirname(filepath), true); await mkdir(path.dirname(filepath), { recursive: true });
const file = await open(filepath, "a"); const file = await open(filepath, "a");
return { file, filepath }; return { file, filepath };
} }