Skip to content

Commit

Permalink
feat: Return null on error in Deno.dir() (denoland#3531)
Browse files Browse the repository at this point in the history
  • Loading branch information
nayeemrmn authored and ry committed Dec 21, 2019
1 parent e8d82a6 commit b7b0668
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 9 deletions.
4 changes: 3 additions & 1 deletion cli/js/lib.deno_runtime.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,8 @@ declare namespace Deno {
/**
* Returns the user and platform specific directories.
* Requires the `--allow-env` flag.
* Returns null if there is no applicable directory or if any other error
* occurs.
*
* Argument values: "home", "cache", "config", "data", "data_local", "audio",
* "desktop", "document", "download", "font", "picture", "public", "template",
Expand Down Expand Up @@ -170,7 +172,7 @@ declare namespace Deno {
* | macOS | `$HOME`/Movies | /Users/Alice/Movies |
* | Windows | `{FOLDERID_Videos}` | C:\Users\Alice\Videos |
*/
export function dir(kind: DirKind): string;
export function dir(kind: DirKind): string | null;

/**
* Returns the path to the current deno executable.
Expand Down
14 changes: 12 additions & 2 deletions cli/js/os.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
import { core } from "./core.ts";
import * as dispatch from "./dispatch.ts";
import { sendSync } from "./dispatch_json.ts";
import { ErrorKind } from "./errors.ts";
import { assert } from "./util.ts";
import * as util from "./util.ts";
import { window } from "./window.ts";
Expand Down Expand Up @@ -147,6 +148,8 @@ type DirKind =
/**
* Returns the user and platform specific directories.
* Requires the `--allow-env` flag.
* Returns null if there is no applicable directory or if any other error
* occurs.
*
* Argument values: "home", "cache", "config", "data", "data_local", "audio",
* "desktop", "document", "download", "font", "picture", "public", "template",
Expand Down Expand Up @@ -243,8 +246,15 @@ type DirKind =
* | macOS | `$HOME`/Movies | /Users/Alice/Movies |
* | Windows | `{FOLDERID_Videos}` | C:\Users\Alice\Videos |
*/
export function dir(kind: DirKind): string {
return sendSync(dispatch.OP_GET_DIR, { kind });
export function dir(kind: DirKind): string | null {
try {
return sendSync(dispatch.OP_GET_DIR, { kind });
} catch (error) {
if (error.kind == ErrorKind.PermissionDenied) {
throw error;
}
return null;
}
}

/**
Expand Down
7 changes: 1 addition & 6 deletions cli/js/os_test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -242,12 +242,7 @@ testPerm({ env: true }, function getDir(): void {
if (r.shouldHaveValue) {
assertNotEquals(Deno.dir(s.kind), "");
} else {
// if not support your platform. it should throw an error
assertThrows(
() => Deno.dir(s.kind),
Deno.DenoError,
`Could not get user ${s.kind} directory.`
);
assertEquals(Deno.dir(s.kind), null);
}
}
}
Expand Down

0 comments on commit b7b0668

Please sign in to comment.