summaryrefslogtreecommitdiff
path: root/cli/js/ops/fs/stat.ts
diff options
context:
space:
mode:
Diffstat (limited to 'cli/js/ops/fs/stat.ts')
-rw-r--r--cli/js/ops/fs/stat.ts84
1 files changed, 84 insertions, 0 deletions
diff --git a/cli/js/ops/fs/stat.ts b/cli/js/ops/fs/stat.ts
new file mode 100644
index 000000000..6a764a8bb
--- /dev/null
+++ b/cli/js/ops/fs/stat.ts
@@ -0,0 +1,84 @@
+// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
+import { sendSync, sendAsync } from "../dispatch_json.ts";
+import { FileInfo, FileInfoImpl } from "../../file_info.ts";
+
+/** @internal */
+export interface StatResponse {
+ isFile: boolean;
+ isSymlink: boolean;
+ len: number;
+ modified: number;
+ accessed: number;
+ created: number;
+ name: string | null;
+ // Unix only members
+ dev: number;
+ ino: number;
+ mode: number;
+ nlink: number;
+ uid: number;
+ gid: number;
+ rdev: number;
+ blksize: number;
+ blocks: number;
+}
+
+/** Resolves to a `Deno.FileInfo` for the specified `path`. If `path` is a
+ * symlink, information for the symlink will be returned.
+ *
+ * const fileInfo = await Deno.lstat("hello.txt");
+ * assert(fileInfo.isFile());
+ *
+ * Requires `allow-read` permission. */
+export async function lstat(path: string): Promise<FileInfo> {
+ const res = (await sendAsync("op_stat", {
+ path,
+ lstat: true
+ })) as StatResponse;
+ return new FileInfoImpl(res);
+}
+
+/** Synchronously returns a `Deno.FileInfo` for the specified `path`. If
+ * `path` is a symlink, information for the symlink will be returned.
+ *
+ * const fileInfo = Deno.lstatSync("hello.txt");
+ * assert(fileInfo.isFile());
+ *
+ * Requires `allow-read` permission. */
+export function lstatSync(path: string): FileInfo {
+ const res = sendSync("op_stat", {
+ path,
+ lstat: true
+ }) as StatResponse;
+ return new FileInfoImpl(res);
+}
+
+/** Resolves to a `Deno.FileInfo` for the specified `path`. Will always
+ * follow symlinks.
+ *
+ * const fileInfo = await Deno.stat("hello.txt");
+ * assert(fileInfo.isFile());
+ *
+ * Requires `allow-read` permission. */
+export async function stat(path: string): Promise<FileInfo> {
+ const res = (await sendAsync("op_stat", {
+ path,
+ lstat: false
+ })) as StatResponse;
+ return new FileInfoImpl(res);
+}
+
+/** Synchronously returns a `Deno.FileInfo` for the specified `path`. Will
+ * always follow symlinks.
+ *
+ * const fileInfo = Deno.statSync("hello.txt");
+ * assert(fileInfo.isFile());
+ *
+ * Requires `allow-read` permission. */
+export function statSync(path: string): FileInfo {
+ const res = sendSync("op_stat", {
+ path,
+ lstat: false
+ }) as StatResponse;
+ return new FileInfoImpl(res);
+}