From 620dd9724d4f8568efebb1642b49c653de9424cd Mon Sep 17 00:00:00 2001 From: Chris Knight Date: Sun, 15 Mar 2020 15:48:46 +0000 Subject: refactor: move existing fs implementation to internal _fs directory (#4381) --- std/node/_fs/_fs_readlink.ts | 78 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 std/node/_fs/_fs_readlink.ts (limited to 'std/node/_fs/_fs_readlink.ts') diff --git a/std/node/_fs/_fs_readlink.ts b/std/node/_fs/_fs_readlink.ts new file mode 100644 index 000000000..d1cb69f51 --- /dev/null +++ b/std/node/_fs/_fs_readlink.ts @@ -0,0 +1,78 @@ +// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license. +import { + intoCallbackAPIWithIntercept, + MaybeEmpty, + notImplemented +} from "../_utils.ts"; + +const { readlink: denoReadlink, readlinkSync: denoReadlinkSync } = Deno; + +type ReadlinkCallback = ( + err: MaybeEmpty, + linkString: MaybeEmpty +) => void; + +interface ReadlinkOptions { + encoding?: string | null; +} + +function maybeEncode( + data: string, + encoding: string | null +): string | Uint8Array { + if (encoding === "buffer") { + return new TextEncoder().encode(data); + } + return data; +} + +function getEncoding( + optOrCallback?: ReadlinkOptions | ReadlinkCallback +): string | null { + if (!optOrCallback || typeof optOrCallback === "function") { + return null; + } else { + if (optOrCallback.encoding) { + if ( + optOrCallback.encoding === "utf8" || + optOrCallback.encoding === "utf-8" + ) { + return "utf8"; + } else if (optOrCallback.encoding === "buffer") { + return "buffer"; + } else { + notImplemented(); + } + } + return null; + } +} + +export function readlink( + path: string, + optOrCallback: ReadlinkCallback | ReadlinkOptions, + callback?: ReadlinkCallback +): void { + let cb: ReadlinkCallback | undefined; + if (typeof optOrCallback === "function") { + cb = optOrCallback; + } else { + cb = callback; + } + + const encoding = getEncoding(optOrCallback); + + intoCallbackAPIWithIntercept( + denoReadlink, + (data: string): string | Uint8Array => maybeEncode(data, encoding), + cb, + path + ); +} + +export function readlinkSync( + path: string, + opt?: ReadlinkOptions +): string | Uint8Array { + return maybeEncode(denoReadlinkSync(path), getEncoding(opt)); +} -- cgit v1.2.3