diff options
author | nasa <htilcs1115@gmail.com> | 2023-06-08 21:37:19 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-06-08 06:37:19 -0600 |
commit | 262571e63e3086e0a4ea6125b3836c357a21af86 (patch) | |
tree | 91ef0702d4f24d8484c3c9fc3761049023d0c897 /ext/node/polyfills/internal/fs | |
parent | 0197f42e6bd77c9bd6f14afd9523c4c252aa099b (diff) |
feat(node_compat): Add a read method to the FileHandle class (#19359)
ref: #19165
The FileHandle class has many missing methods compared to node.
Diffstat (limited to 'ext/node/polyfills/internal/fs')
-rw-r--r-- | ext/node/polyfills/internal/fs/handle.ts | 46 |
1 files changed, 45 insertions, 1 deletions
diff --git a/ext/node/polyfills/internal/fs/handle.ts b/ext/node/polyfills/internal/fs/handle.ts index a1ee263ea..199457787 100644 --- a/ext/node/polyfills/internal/fs/handle.ts +++ b/ext/node/polyfills/internal/fs/handle.ts @@ -1,13 +1,20 @@ // Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. import { EventEmitter } from "ext:deno_node/events.ts"; import { Buffer } from "ext:deno_node/buffer.ts"; -import { promises } from "ext:deno_node/fs.ts"; +import { promises, read } from "ext:deno_node/fs.ts"; +import type { Buffer } from "ext:deno_node/buffer.ts"; import { BinaryOptionsArgument, FileOptionsArgument, + ReadOptions, TextOptionsArgument, } from "ext:deno_node/_fs/_fs_common.ts"; +interface ReadResult { + bytesRead: number; + buffer: Buffer; +} + export class FileHandle extends EventEmitter { #rid: number; constructor(rid: number) { @@ -19,6 +26,43 @@ export class FileHandle extends EventEmitter { return this.rid; } + read( + buffer: Buffer, + offset?: number, + length?: number, + position?: number | null, + ): Promise<ReadResult>; + read(options?: ReadOptions): Promise<ReadResult>; + read( + bufferOrOpt: Buffer | ReadOptions, + offset?: number, + length?: number, + position?: number | null, + ): Promise<ReadResult> { + if (bufferOrOpt instanceof Buffer) { + return new Promise((resolve, reject) => { + read( + this.fd, + bufferOrOpt, + offset, + length, + position, + (err, bytesRead, buffer) => { + if (err) reject(err); + else resolve({ buffer: buffer, bytesRead: bytesRead }); + }, + ); + }); + } else { + return new Promise((resolve, reject) => { + read(this.fd, bufferOrOpt, (err, bytesRead, buffer) => { + if (err) reject(err); + else resolve({ buffer: buffer, bytesRead: bytesRead }); + }); + }); + } + } + readFile( opt?: TextOptionsArgument | BinaryOptionsArgument | FileOptionsArgument, ): Promise<string | Buffer> { |