summaryrefslogtreecommitdiff
path: root/std/node
diff options
context:
space:
mode:
authorX <git@iamje.com>2020-11-03 02:11:42 +0800
committerGitHub <noreply@github.com>2020-11-02 19:11:42 +0100
commit6d63391a380976ee4c5577d8efe449afede66f36 (patch)
tree7429ce425ea07b125dbd7ba6addd7cd7f69a09c2 /std/node
parent397fec63d1bacabd2b8e48bd30a1727003a7a72b (diff)
feat(std/node/fs): add realpath and realpathSync (#8169)
Diffstat (limited to 'std/node')
-rw-r--r--std/node/_fs/_fs_realpath.ts22
-rw-r--r--std/node/_fs/_fs_realpath_test.ts36
-rw-r--r--std/node/fs.ts3
3 files changed, 61 insertions, 0 deletions
diff --git a/std/node/_fs/_fs_realpath.ts b/std/node/_fs/_fs_realpath.ts
new file mode 100644
index 000000000..586a87cfc
--- /dev/null
+++ b/std/node/_fs/_fs_realpath.ts
@@ -0,0 +1,22 @@
+type Options = { encoding: string };
+type Callback = (err: Error | null, path?: string) => void;
+
+export function realpath(
+ path: string,
+ options?: Options | Callback,
+ callback?: Callback,
+) {
+ if (typeof options === "function") {
+ callback = options;
+ }
+ if (!callback) {
+ throw new Error("No callback function supplied");
+ }
+ Deno.realPath(path)
+ .then((path) => callback!(null, path))
+ .catch((err) => callback!(err));
+}
+
+export function realpathSync(path: string): string {
+ return Deno.realPathSync(path);
+}
diff --git a/std/node/_fs/_fs_realpath_test.ts b/std/node/_fs/_fs_realpath_test.ts
new file mode 100644
index 000000000..9ab0173c1
--- /dev/null
+++ b/std/node/_fs/_fs_realpath_test.ts
@@ -0,0 +1,36 @@
+import { assertEquals } from "../../testing/asserts.ts";
+import { realpath, realpathSync } from "./_fs_realpath.ts";
+
+Deno.test("realpath", async function () {
+ const tempFile = await Deno.makeTempFile();
+ const tempFileAlias = tempFile + ".alias";
+ await Deno.symlink(tempFile, tempFileAlias);
+ const realPath = await new Promise((resolve, reject) => {
+ realpath(tempFile, (err, path) => {
+ if (err) {
+ reject(err);
+ return;
+ }
+ resolve(path);
+ });
+ });
+ const realSymLinkPath = await new Promise((resolve, reject) => {
+ realpath(tempFileAlias, (err, path) => {
+ if (err) {
+ reject(err);
+ return;
+ }
+ resolve(path);
+ });
+ });
+ assertEquals(realPath, realSymLinkPath);
+});
+
+Deno.test("realpathSync", function () {
+ const tempFile = Deno.makeTempFileSync();
+ const tempFileAlias = tempFile + ".alias";
+ Deno.symlinkSync(tempFile, tempFileAlias);
+ const realPath = realpathSync(tempFile);
+ const realSymLinkPath = realpathSync(tempFileAlias);
+ assertEquals(realPath, realSymLinkPath);
+});
diff --git a/std/node/fs.ts b/std/node/fs.ts
index 91e24728b..052394e21 100644
--- a/std/node/fs.ts
+++ b/std/node/fs.ts
@@ -12,6 +12,7 @@ import { mkdir, mkdirSync } from "./_fs/_fs_mkdir.ts";
import { copyFile, copyFileSync } from "./_fs/_fs_copy.ts";
import { writeFile, writeFileSync } from "./_fs/_fs_writeFile.ts";
import { readdir, readdirSync } from "./_fs/_fs_readdir.ts";
+import { realpath, realpathSync } from "./_fs/_fs_realpath.ts";
import { rename, renameSync } from "./_fs/_fs_rename.ts";
import { rmdir, rmdirSync } from "./_fs/_fs_rmdir.ts";
import { unlink, unlinkSync } from "./_fs/_fs_unlink.ts";
@@ -51,6 +52,8 @@ export {
readFileSync,
readlink,
readlinkSync,
+ realpath,
+ realpathSync,
rename,
renameSync,
rmdir,