mirror of
https://github.com/nodejs/node.git
synced 2024-11-21 10:59:27 +00:00
4ba7370650
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>
63 lines
1.1 KiB
JavaScript
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());
|