diff options
author | Chris Knight <cknight1234@gmail.com> | 2020-03-15 15:48:46 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-03-15 11:48:46 -0400 |
commit | 620dd9724d4f8568efebb1642b49c653de9424cd (patch) | |
tree | e57827e536c264189f151ffebffe7e9faaae0c46 /std/node/_fs/_fs_readFile.ts | |
parent | dc6e0c3591709d6f8887bb672af1de54dfc8a974 (diff) |
refactor: move existing fs implementation to internal _fs directory (#4381)
Diffstat (limited to 'std/node/_fs/_fs_readFile.ts')
-rw-r--r-- | std/node/_fs/_fs_readFile.ts | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/std/node/_fs/_fs_readFile.ts b/std/node/_fs/_fs_readFile.ts new file mode 100644 index 000000000..05bad6f3d --- /dev/null +++ b/std/node/_fs/_fs_readFile.ts @@ -0,0 +1,80 @@ +// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license. + +import { + notImplemented, + intoCallbackAPIWithIntercept, + MaybeEmpty +} from "../_utils.ts"; + +const { readFile: denoReadFile, readFileSync: denoReadFileSync } = Deno; + +type ReadFileCallback = ( + err: MaybeEmpty<Error>, + data: MaybeEmpty<string | Uint8Array> +) => void; + +interface ReadFileOptions { + encoding?: string | null; + flag?: string; +} + +function getEncoding( + optOrCallback?: ReadFileOptions | ReadFileCallback +): 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; + } +} + +function maybeDecode( + data: Uint8Array, + encoding: string | null +): string | Uint8Array { + if (encoding === "utf8") { + return new TextDecoder().decode(data); + } + return data; +} + +export function readFile( + path: string, + optOrCallback: ReadFileCallback | ReadFileOptions, + callback?: ReadFileCallback +): void { + let cb: ReadFileCallback | undefined; + if (typeof optOrCallback === "function") { + cb = optOrCallback; + } else { + cb = callback; + } + + const encoding = getEncoding(optOrCallback); + + intoCallbackAPIWithIntercept<Uint8Array, string | Uint8Array>( + denoReadFile, + (data: Uint8Array): string | Uint8Array => maybeDecode(data, encoding), + cb, + path + ); +} + +export function readFileSync( + path: string, + opt?: ReadFileOptions +): string | Uint8Array { + return maybeDecode(denoReadFileSync(path), getEncoding(opt)); +} |