diff options
author | Casper Beyer <caspervonb@pm.me> | 2021-04-12 19:33:05 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-04-12 13:33:05 +0200 |
commit | da9219341fe8bcf080d3ebdd03d35cec1268875e (patch) | |
tree | 75f21430ff33cdcbe071caaa7b18e2063cb75538 | |
parent | 5c2a8cdbdcc3ae74a4c2d8fb704a331986f49a95 (diff) |
feat(runtime): add stat and statSync methods to Deno.File (#10107)
-rw-r--r-- | cli/dts/lib.deno.ns.d.ts | 2 | ||||
-rw-r--r-- | cli/tests/unit/file_test.ts | 32 | ||||
-rw-r--r-- | runtime/js/30_fs.js | 4 | ||||
-rw-r--r-- | runtime/js/40_files.js (renamed from runtime/js/30_files.js) | 9 |
4 files changed, 45 insertions, 2 deletions
diff --git a/cli/dts/lib.deno.ns.d.ts b/cli/dts/lib.deno.ns.d.ts index 7d248e4b2..a4ef6bc68 100644 --- a/cli/dts/lib.deno.ns.d.ts +++ b/cli/dts/lib.deno.ns.d.ts @@ -785,6 +785,8 @@ declare namespace Deno { readSync(p: Uint8Array): number | null; seek(offset: number, whence: SeekMode): Promise<number>; seekSync(offset: number, whence: SeekMode): number; + stat(): Promise<FileInfo>; + statSync(): FileInfo; close(): void; } diff --git a/cli/tests/unit/file_test.ts b/cli/tests/unit/file_test.ts index eaafbae27..640198034 100644 --- a/cli/tests/unit/file_test.ts +++ b/cli/tests/unit/file_test.ts @@ -103,3 +103,35 @@ unitTest(function fileUsingNumberFileName(): void { unitTest(function fileUsingEmptyStringFileName(): void { testSecondArgument("", ""); }); + +unitTest({ perms: { read: true } }, function fileStatSyncSuccess(): void { + const file = Deno.openSync("README.md"); + const fileInfo = file.statSync(); + assert(fileInfo.isFile); + assert(!fileInfo.isSymlink); + assert(!fileInfo.isDirectory); + assert(fileInfo.size); + assert(fileInfo.atime); + assert(fileInfo.mtime); + // The `birthtime` field is not available on Linux before kernel version 4.11. + assert(fileInfo.birthtime || Deno.build.os === "linux"); + + file.close(); +}); + +unitTest({ perms: { read: true } }, async function fileStatSuccess(): Promise< + void +> { + const file = await Deno.open("README.md"); + const fileInfo = await file.stat(); + assert(fileInfo.isFile); + assert(!fileInfo.isSymlink); + assert(!fileInfo.isDirectory); + assert(fileInfo.size); + assert(fileInfo.atime); + assert(fileInfo.mtime); + // The `birthtime` field is not available on Linux before kernel version 4.11. + assert(fileInfo.birthtime || Deno.build.os === "linux"); + + file.close(); +}); diff --git a/runtime/js/30_fs.js b/runtime/js/30_fs.js index e79247640..af2aebd3e 100644 --- a/runtime/js/30_fs.js +++ b/runtime/js/30_fs.js @@ -390,8 +390,6 @@ removeSync, renameSync, rename, - fstatSync, - fstat, lstat, lstatSync, stat, @@ -403,6 +401,8 @@ umask, link, linkSync, + fstatSync, + fstat, futime, futimeSync, utime, diff --git a/runtime/js/30_files.js b/runtime/js/40_files.js index f9898c5d8..2ce495f8e 100644 --- a/runtime/js/30_files.js +++ b/runtime/js/40_files.js @@ -4,6 +4,7 @@ ((window) => { const core = window.Deno.core; const { read, readSync, write, writeSync } = window.__bootstrap.io; + const { fstat, fstatSync } = window.__bootstrap.fs; const { pathFromURL } = window.__bootstrap.util; function seekSync( @@ -103,6 +104,14 @@ return seekSync(this.rid, offset, whence); } + stat() { + return fstat(this.rid); + } + + statSync() { + return fstatSync(this.rid); + } + close() { core.close(this.rid); } |