From 6d63391a380976ee4c5577d8efe449afede66f36 Mon Sep 17 00:00:00 2001 From: X Date: Tue, 3 Nov 2020 02:11:42 +0800 Subject: [PATCH] feat(std/node/fs): add realpath and realpathSync (#8169) --- std/node/_fs/_fs_realpath.ts | 22 +++++++++++++++++++ std/node/_fs/_fs_realpath_test.ts | 36 +++++++++++++++++++++++++++++++ std/node/fs.ts | 3 +++ 3 files changed, 61 insertions(+) create mode 100644 std/node/_fs/_fs_realpath.ts create mode 100644 std/node/_fs/_fs_realpath_test.ts diff --git a/std/node/_fs/_fs_realpath.ts b/std/node/_fs/_fs_realpath.ts new file mode 100644 index 0000000000..586a87cfc0 --- /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 0000000000..9ab0173c15 --- /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 91e24728bd..052394e210 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,