summaryrefslogtreecommitdiff
path: root/std/node/_fs/_fs_mkdir.ts
diff options
context:
space:
mode:
Diffstat (limited to 'std/node/_fs/_fs_mkdir.ts')
-rw-r--r--std/node/_fs/_fs_mkdir.ts73
1 files changed, 73 insertions, 0 deletions
diff --git a/std/node/_fs/_fs_mkdir.ts b/std/node/_fs/_fs_mkdir.ts
new file mode 100644
index 000000000..e41b0b834
--- /dev/null
+++ b/std/node/_fs/_fs_mkdir.ts
@@ -0,0 +1,73 @@
+// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
+import { CallbackWithError } from "./_fs_common.ts";
+
+type Path = string; // TODO path can also be a Buffer or URL.
+type MkdirOptions =
+ | { recursive?: boolean; mode?: number | undefined }
+ | number
+ | boolean;
+
+export function mkdir(
+ path: Path,
+ options?: MkdirOptions | CallbackWithError,
+ callback?: CallbackWithError
+): void {
+ let mode = 0o777;
+ let recursive = false;
+
+ if (typeof options == "function") {
+ callback == options;
+ } else if (typeof options === "number") {
+ mode = options;
+ } else if (typeof options === "boolean") {
+ recursive = options;
+ } else if (options) {
+ if (options.recursive !== undefined) recursive = options.recursive;
+ if (options.mode !== undefined) mode = options.mode;
+ }
+ if (typeof recursive !== "boolean")
+ throw new Deno.errors.InvalidData(
+ "invalid recursive option , must be a boolean"
+ );
+ new Promise(async (resolve, reject) => {
+ try {
+ await Deno.mkdir(path, recursive, mode);
+ resolve();
+ } catch (err) {
+ reject(err);
+ }
+ })
+ .then(() => {
+ if (callback && typeof callback == "function") {
+ callback();
+ }
+ })
+ .catch((err) => {
+ if (callback && typeof callback == "function") {
+ callback(err);
+ }
+ });
+}
+
+export function mkdirSync(path: Path, options?: MkdirOptions): void {
+ let mode = 0o777;
+ let recursive = false;
+
+ if (typeof options === "number") {
+ mode = options;
+ } else if (typeof options === "boolean") {
+ recursive = options;
+ } else if (options) {
+ if (options.recursive !== undefined) recursive = options.recursive;
+ if (options.mode !== undefined) mode = options.mode;
+ }
+ if (typeof recursive !== "boolean")
+ throw new Deno.errors.InvalidData(
+ "invalid recursive option , must be a boolean"
+ );
+ try {
+ Deno.mkdirSync(path, recursive, mode);
+ } catch (err) {
+ throw err;
+ }
+}