kequapp
Version:
DEPRECATED: renamed to @kequtech/arbor
29 lines (28 loc) • 931 B
JavaScript
import { Ex } from "../ex.js";
export function streamReader(stream, maxPayloadSize = Infinity) {
return new Promise((resolve, reject) => {
const chunks = [];
stream.on('data', handleData);
stream.on('end', handleEnd);
function handleData(chunk) {
chunks.push(chunk);
verifyPayload();
}
function handleEnd() {
resolve(Buffer.concat(chunks));
}
function abortStream(error) {
stream.off('data', handleData);
stream.off('end', handleEnd);
reject(error);
}
function verifyPayload() {
if (maxPayloadSize !== Infinity) {
const payloadSize = chunks.reduce((acc, chunk) => acc + chunk.length, 0);
if (payloadSize > maxPayloadSize) {
abortStream(Ex.PayloadTooLarge());
}
}
}
});
}