kequapp
Version:
A minimal, zero-magic Node web framework built on native APIs
29 lines (28 loc) • 950 B
JavaScript
import Ex from "../built-in/tools/ex.js";
export default 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());
}
}
}
});
}