From b2b4299e3b499c50bd11059854e3dcb4df2e2891 Mon Sep 17 00:00:00 2001 From: Sajjad Hashemian Date: Sun, 26 Aug 2018 10:56:30 +0430 Subject: Implement mkdirSync --- js/deno.ts | 1 + js/os.ts | 19 +++++++++++++++++++ js/os_test.ts | 21 +++++++++++++++++++++ 3 files changed, 41 insertions(+) (limited to 'js') diff --git a/js/deno.ts b/js/deno.ts index 21766401b..d121b3183 100644 --- a/js/deno.ts +++ b/js/deno.ts @@ -6,6 +6,7 @@ export { exit, FileInfo, makeTempDirSync, + mkdirSync, readFileSync, statSync, lStatSync, diff --git a/js/os.ts b/js/os.ts index e669aea9d..cca121874 100644 --- a/js/os.ts +++ b/js/os.ts @@ -104,6 +104,25 @@ export function makeTempDirSync({ return path!; } +// mkdir creates a new directory with the specified name +// and permission bits (before umask). +export function mkdirSync(path: string, mode = 0o777): void { + /* Ideally we could write: + const res = send({ + command: fbs.Command.MKDIR_SYNC, + mkdirSyncPath: path, + mkdirSyncMode: mode, + }); + */ + const builder = new flatbuffers.Builder(); + const path_ = builder.createString(path); + fbs.MkdirSync.startMkdirSync(builder); + fbs.MkdirSync.addPath(builder, path_); + fbs.MkdirSync.addMode(builder, mode); + const msg = fbs.MkdirSync.endMkdirSync(builder); + send(builder, fbs.Any.MkdirSync, msg); +} + export function readFileSync(filename: string): Uint8Array { /* Ideally we could write const res = send({ diff --git a/js/os_test.ts b/js/os_test.ts index cd5ede221..8142956eb 100644 --- a/js/os_test.ts +++ b/js/os_test.ts @@ -183,3 +183,24 @@ test(function makeTempDirSyncPerm() { assert(err); assertEqual(err.name, "deno.PermissionDenied"); }); + +testPerm({ write: true }, function mkdirSync() { + const path = deno.makeTempDirSync() + "/dir/subdir"; + deno.mkdirSync(path); + const pathInfo = deno.statSync(path); + assert(pathInfo.isDirectory()); +}); + +testPerm({ write: false }, function mkdDirSyncPerm() { + let err; + try { + const path = "/baddir"; + deno.mkdirSync(path); + } catch (err_) { + err = err_; + } + // TODO assert(err instanceof deno.PermissionDenied). + assert(err); + assertEqual(err.name, "deno.PermissionDenied"); +}); + -- cgit v1.2.3