UNPKG

kequapp

Version:

DEPRECATED: renamed to @kequtech/arbor

29 lines (28 loc) 931 B
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()); } } } }); }