summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCasper Beyer <caspervonb@pm.me>2021-04-12 19:33:05 +0800
committerGitHub <noreply@github.com>2021-04-12 13:33:05 +0200
commitda9219341fe8bcf080d3ebdd03d35cec1268875e (patch)
tree75f21430ff33cdcbe071caaa7b18e2063cb75538
parent5c2a8cdbdcc3ae74a4c2d8fb704a331986f49a95 (diff)
feat(runtime): add stat and statSync methods to Deno.File (#10107)
-rw-r--r--cli/dts/lib.deno.ns.d.ts2
-rw-r--r--cli/tests/unit/file_test.ts32
-rw-r--r--runtime/js/30_fs.js4
-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);
}