mirror of
https://github.com/denoland/deno.git
synced 2024-12-28 18:19:08 -05:00
a3c3a56ff7
* Rename MkdirOption interface to MkdirOptions It was hard to remember which Options interfaces were spelled in the singular and which in the plural (and anyway this one contained two options). Also added MkdirOptions to cli/js/deno.ts. All the analogous interfaces were exported there. * Rename RemoveOption interface to RemoveOptions This was the last remaining Option interface spelled in the singular. Easier to remember if they're all Option**s**; plus we may want to add extra options here later.
67 lines
2.2 KiB
TypeScript
67 lines
2.2 KiB
TypeScript
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
|
|
import { sendSync, sendAsync } from "./dispatch_json.ts";
|
|
|
|
// TODO(ry) The complexity in argument parsing is to support deprecated forms of
|
|
// mkdir and mkdirSync.
|
|
function mkdirArgs(
|
|
path: string,
|
|
optionsOrRecursive?: MkdirOptions | 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 MkdirOptions {
|
|
/** Defaults to `false`. If set to `true`, means that any intermediate
|
|
* directories will also be created (as with the shell command `mkdir -p`).
|
|
* Intermediate directories are created with the same permissions.
|
|
* When recursive is set to `true`, succeeds silently (without changing any
|
|
* permissions) if a directory already exists at the path. */
|
|
recursive?: boolean;
|
|
/** Permissions to use when creating the directory (defaults to `0o777`,
|
|
* before the process's umask).
|
|
* Does nothing/raises on Windows. */
|
|
mode?: number;
|
|
}
|
|
|
|
/** Synchronously creates a new directory with the specified path.
|
|
*
|
|
* Deno.mkdirSync("new_dir");
|
|
* Deno.mkdirSync("nested/directories", { recursive: true });
|
|
*
|
|
* Requires `allow-write` permission. */
|
|
export function mkdirSync(
|
|
path: string,
|
|
optionsOrRecursive?: MkdirOptions | boolean,
|
|
mode?: number
|
|
): void {
|
|
sendSync("op_mkdir", mkdirArgs(path, optionsOrRecursive, mode));
|
|
}
|
|
|
|
/** Creates a new directory with the specified path.
|
|
*
|
|
* await Deno.mkdir("new_dir");
|
|
* await Deno.mkdir("nested/directories", { recursive: true });
|
|
*
|
|
* Requires `allow-write` permission. */
|
|
export async function mkdir(
|
|
path: string,
|
|
optionsOrRecursive?: MkdirOptions | boolean,
|
|
mode?: number
|
|
): Promise<void> {
|
|
await sendAsync("op_mkdir", mkdirArgs(path, optionsOrRecursive, mode));
|
|
}
|