summaryrefslogtreecommitdiff
path: root/std/node/_fs
diff options
context:
space:
mode:
authorAli Hasani <a.hassssani@gmail.com>2020-04-09 03:13:35 +0430
committerGitHub <noreply@github.com>2020-04-08 18:43:35 -0400
commit68bde7a0c693794ff778c09154833ac0e9d177b4 (patch)
tree5d71ab6e881ffdab2fefbd3be023070d6046d0c8 /std/node/_fs
parent0cf4ac91e6917b76c00d3d4b790e9fefc4dc5323 (diff)
feat(std/node): add fs.mkdir functions and fs.exists tests (#4660)
Diffstat (limited to 'std/node/_fs')
-rw-r--r--std/node/_fs/_fs_exists_test.ts26
-rw-r--r--std/node/_fs/_fs_mkdir.ts73
2 files changed, 99 insertions, 0 deletions
diff --git a/std/node/_fs/_fs_exists_test.ts b/std/node/_fs/_fs_exists_test.ts
new file mode 100644
index 000000000..aaf26a0e7
--- /dev/null
+++ b/std/node/_fs/_fs_exists_test.ts
@@ -0,0 +1,26 @@
+// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
+
+import { assertEquals } from "../../testing/asserts.ts";
+import { exists, existsSync } from "./_fs_exists.ts";
+
+const { test } = Deno;
+
+test(async function existsFile() {
+ const availableFile = await new Promise(async (resolve) => {
+ const tmpFilePath = await Deno.makeTempFile();
+ exists(tmpFilePath, (exists: boolean) => resolve(exists));
+ Deno.remove(tmpFilePath);
+ });
+ const notAvailableFile = await new Promise((resolve) => {
+ exists("./notAvailable.txt", (exists: boolean) => resolve(exists));
+ });
+ assertEquals(availableFile, true);
+ assertEquals(notAvailableFile, false);
+});
+
+test(function existsSyncFile() {
+ const tmpFilePath = Deno.makeTempFileSync();
+ assertEquals(existsSync(tmpFilePath), true);
+ Deno.removeSync(tmpFilePath);
+ assertEquals(existsSync("./notAvailable.txt"), false);
+});
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;
+ }
+}