node/test/parallel/test-whatwg-readablebytestreambyob.js
Khafra 4ba7370650
stream: use Buffer.from when constructor is a Buffer
When using BYOB streams, it's possible for the constructor in
readableByteStreamControllerConvertPullIntoDescriptor to be a node
Buffer. If it is, use `Buffer.from` over `new ctor`.

Fixes https://github.com/nodejs/node/issues/49245

PR-URL: https://github.com/nodejs/node/pull/49250
Reviewed-By: Debadree Chatterjee <debadree333@gmail.com>
Reviewed-By: LiviaMedeiros <livia@cirno.name>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
2023-08-26 11:43:58 +00:00

63 lines
1.1 KiB
JavaScript

'use strict';
const common = require('../common');
const {
open,
} = require('fs/promises');
const {
Buffer,
} = require('buffer');
class Source {
async start(controller) {
this.file = await open(__filename);
this.controller = controller;
}
async pull(controller) {
const byobRequest = controller.byobRequest;
const view = byobRequest.view;
const {
bytesRead,
} = await this.file.read({
buffer: view,
offset: view.byteOffset,
length: view.byteLength
});
if (bytesRead === 0) {
await this.file.close();
this.controller.close();
}
byobRequest.respond(bytesRead);
}
get type() { return 'bytes'; }
get autoAllocateChunkSize() { return 1024; }
}
(async () => {
const source = new Source();
const stream = new ReadableStream(source);
const { emitWarning } = process;
process.emitWarning = common.mustNotCall();
try {
const reader = stream.getReader({ mode: 'byob' });
let result;
do {
result = await reader.read(Buffer.alloc(100));
} while (!result.done);
} finally {
process.emitWarning = emitWarning;
}
})().then(common.mustCall());