import { PassThrough, Readable } from "stream"; export default function tee(input: Readable) { const a = new PassThrough(); const b = new PassThrough(); let aFull = false; let bFull = false; a.setMaxListeners(Infinity); a.on("drain", () => { aFull = false; if (!aFull && !bFull) input.resume(); }); b.on("drain", () => { bFull = false; if (!aFull && !bFull) input.resume(); }); input.on("error", e => { a.emit("error", e); b.emit("error", e); }); input.on("data", chunk => { aFull = !a.write(chunk); bFull = !b.write(chunk); if (aFull || bFull) input.pause(); }); input.on("end", () => { a.end(); b.end(); }); return [a, b] as const; }