diff options
author | Bartek IwaĆczuk <biwanczuk@gmail.com> | 2020-03-10 00:22:15 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-03-10 00:22:15 +0100 |
commit | b7eb241c3569ead990d28b4f4889c2c52fc7894c (patch) | |
tree | f944f3c74741f3b61edae51a796471751ace7b76 /cli/js/ops/fs/mkdir.ts | |
parent | 2115b38fef654c2d7c5998f40967fcfe39d7c515 (diff) |
reorg: move JS ops implementations to cli/js/ops/, part 3 (#4302)
Following JS ops were moved to separate files in cli/js/ops directory:
- net
- tls
- fs
Diffstat (limited to 'cli/js/ops/fs/mkdir.ts')
-rw-r--r-- | cli/js/ops/fs/mkdir.ts | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/cli/js/ops/fs/mkdir.ts b/cli/js/ops/fs/mkdir.ts new file mode 100644 index 000000000..4df33a29f --- /dev/null +++ b/cli/js/ops/fs/mkdir.ts @@ -0,0 +1,67 @@ +// 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)); +} |