summaryrefslogtreecommitdiff
path: root/ext/node/polyfills/internal/fs
diff options
context:
space:
mode:
Diffstat (limited to 'ext/node/polyfills/internal/fs')
-rw-r--r--ext/node/polyfills/internal/fs/handle.ts46
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> {