UNPKG

serverless-spy

Version:

CDK-based library for writing elegant integration tests on AWS serverless architecture and an additional web console to monitor events in real time.

42 lines (41 loc) 1.42 kB
import { Writable } from "stream"; import { headStream as headWebStream } from "./headStream.browser"; import { isReadableStream } from "./stream-type-check"; export const headStream = (stream, bytes) => { if (isReadableStream(stream)) { return headWebStream(stream, bytes); } return new Promise((resolve, reject) => { const collector = new Collector(); collector.limit = bytes; stream.pipe(collector); stream.on("error", (err) => { collector.end(); reject(err); }); collector.on("error", reject); collector.on("finish", function () { const bytes = new Uint8Array(Buffer.concat(this.buffers)); resolve(bytes); }); }); }; class Collector extends Writable { constructor() { super(...arguments); this.buffers = []; this.limit = Infinity; this.bytesBuffered = 0; } _write(chunk, encoding, callback) { this.buffers.push(chunk); this.bytesBuffered += chunk.byteLength ?? 0; if (this.bytesBuffered >= this.limit) { const excess = this.bytesBuffered - this.limit; const tailBuffer = this.buffers[this.buffers.length - 1]; this.buffers[this.buffers.length - 1] = tailBuffer.subarray(0, tailBuffer.byteLength - excess); this.emit("finish"); } callback(); } }