diff options
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> { |