summaryrefslogtreecommitdiff
path: root/ext/node/polyfills/internal/fs
diff options
context:
space:
mode:
authornasa <htilcs1115@gmail.com>2023-06-08 21:37:19 +0900
committerGitHub <noreply@github.com>2023-06-08 06:37:19 -0600
commit262571e63e3086e0a4ea6125b3836c357a21af86 (patch)
tree91ef0702d4f24d8484c3c9fc3761049023d0c897 /ext/node/polyfills/internal/fs
parent0197f42e6bd77c9bd6f14afd9523c4c252aa099b (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.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> {