diff options
author | X <git@iamje.com> | 2020-11-03 02:11:42 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-11-02 19:11:42 +0100 |
commit | 6d63391a380976ee4c5577d8efe449afede66f36 (patch) | |
tree | 7429ce425ea07b125dbd7ba6addd7cd7f69a09c2 | |
parent | 397fec63d1bacabd2b8e48bd30a1727003a7a72b (diff) |
feat(std/node/fs): add realpath and realpathSync (#8169)
-rw-r--r-- | std/node/_fs/_fs_realpath.ts | 22 | ||||
-rw-r--r-- | std/node/_fs/_fs_realpath_test.ts | 36 | ||||
-rw-r--r-- | std/node/fs.ts | 3 |
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, |