diff --git a/src/js/node/fs.promises.ts b/src/js/node/fs.promises.ts index 95cbbcc1dbee..ce18c48946e2 100644 --- a/src/js/node/fs.promises.ts +++ b/src/js/node/fs.promises.ts @@ -815,7 +815,7 @@ function asyncWrap(fn: any, name: string) { let bytesRead; try { - ({ bytesRead } = await handle.read(view, view.byteOffset, view.byteLength)); + ({ bytesRead } = await handle.read(view, 0, view.byteLength)); } catch (err) { if (done) return; await ondone(); diff --git a/test/js/node/fs/fs.test.ts b/test/js/node/fs/fs.test.ts index 16396f0dd211..d33747a51b95 100644 --- a/test/js/node/fs/fs.test.ts +++ b/test/js/node/fs/fs.test.ts @@ -362,6 +362,23 @@ describe("FileHandle", () => { reader.releaseLock(); }); + it("FileHandle#readableWebStream BYOB reader accepts a subarray view", async () => { + using dir = tempDir("fh-readablewebstream-byob", { + "data.bin": Buffer.alloc(200, "X").toString(), + }); + await using fh = await fs.promises.open(join(String(dir), "data.bin")); + const reader = fh.readableWebStream().getReader({ mode: "byob" }); + + const backing = new ArrayBuffer(1000); + const { value, done } = await reader.read(new Uint8Array(backing, 500, 100)); + + expect(done).toBe(false); + expect(value.byteOffset).toBe(500); + expect(value.byteLength).toBe(100); + expect(Buffer.from(value).toString()).toBe(Buffer.alloc(100, "X").toString()); + reader.releaseLock(); + }); + it("FileHandle#createReadStream", async () => { await using fd = await fs.promises.open(__filename); const readable = fd.createReadStream();