// 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(filename: string): Promise { const res = (await sendAsync("op_stat", { filename, 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(filename: string): FileInfo { const res = sendSync("op_stat", { filename, 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(filename: string): Promise { const res = (await sendAsync("op_stat", { filename, 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(filename: string): FileInfo { const res = sendSync("op_stat", { filename, lstat: false }) as StatResponse; return new FileInfoImpl(res); }