diff options
Diffstat (limited to 'cli/js/ops/fs/stat.ts')
-rw-r--r-- | cli/js/ops/fs/stat.ts | 54 |
1 files changed, 49 insertions, 5 deletions
diff --git a/cli/js/ops/fs/stat.ts b/cli/js/ops/fs/stat.ts index 5d8860939..6b7e5ea93 100644 --- a/cli/js/ops/fs/stat.ts +++ b/cli/js/ops/fs/stat.ts @@ -1,6 +1,25 @@ // 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"; +import { build } from "../../build.ts"; + +export interface FileInfo { + size: number; + modified: number | null; + accessed: number | null; + created: number | null; + dev: number | null; + ino: number | null; + mode: number | null; + nlink: number | null; + uid: number | null; + gid: number | null; + rdev: number | null; + blksize: number | null; + blocks: number | null; + isFile: boolean; + isDirectory: boolean; + isSymlink: boolean; +} export interface StatResponse { isFile: boolean; @@ -10,6 +29,7 @@ export interface StatResponse { modified: number; accessed: number; created: number; + // Null for stat(), but exists for readdir(). name: string | null; // Unix only members dev: number; @@ -23,12 +43,36 @@ export interface StatResponse { blocks: number; } +// @internal +export function parseFileInfo(response: StatResponse): FileInfo { + const isUnix = build.os === "mac" || build.os === "linux"; + return { + isFile: response.isFile, + isDirectory: response.isDirectory, + isSymlink: response.isSymlink, + size: response.size, + modified: response.modified ? response.modified : null, + accessed: response.accessed ? response.accessed : null, + created: response.created ? response.created : null, + // Only non-null if on Unix + dev: isUnix ? response.dev : null, + ino: isUnix ? response.ino : null, + mode: isUnix ? response.mode : null, + nlink: isUnix ? response.nlink : null, + uid: isUnix ? response.uid : null, + gid: isUnix ? response.gid : null, + rdev: isUnix ? response.rdev : null, + blksize: isUnix ? response.blksize : null, + blocks: isUnix ? response.blocks : null, + }; +} + export async function lstat(path: string): Promise<FileInfo> { const res = (await sendAsync("op_stat", { path, lstat: true, })) as StatResponse; - return new FileInfoImpl(res); + return parseFileInfo(res); } export function lstatSync(path: string): FileInfo { @@ -36,7 +80,7 @@ export function lstatSync(path: string): FileInfo { path, lstat: true, }) as StatResponse; - return new FileInfoImpl(res); + return parseFileInfo(res); } export async function stat(path: string): Promise<FileInfo> { @@ -44,7 +88,7 @@ export async function stat(path: string): Promise<FileInfo> { path, lstat: false, })) as StatResponse; - return new FileInfoImpl(res); + return parseFileInfo(res); } export function statSync(path: string): FileInfo { @@ -52,5 +96,5 @@ export function statSync(path: string): FileInfo { path, lstat: false, }) as StatResponse; - return new FileInfoImpl(res); + return parseFileInfo(res); } |