UNPKG

peer-emitter

Version:

acknowledgeable events

58 lines (42 loc) 1.22 kB
var streams = require('stream'); var Writable = streams.Writable; var PassThrough = streams.PassThrough; module.exports = WriteStream; function WriteStream(emitter, name) { var stream = new Writable({ objectMode: true }); var ackStream; var timeoutStream; stream._write = write; function write(data, _, cb) { function onAck(timeout) { if (!timeout && ackStream) ackStream.write(data); if (timeout && timeoutStream) timeoutStream.write(data); } if (timeoutStream) onAck.timeout = timeoutStream.timeout; if (ackStream || timeoutStream) emitter.emit(name, data, onAck); else emitter.emit(name, data); cb(); } stream.AckStream = createAckStream; function createAckStream() { if (ackStream) throw Error('already created'); return ackStream = new PassThrough({ objectMode: true }); } stream.TimeoutStream = createTimeoutStream; function createTimeoutStream(options) { if (timeoutStream) throw Error('already created'); timeoutStream = new PassThrough({ objectMode: true }); timeoutStream.timeout = options && options.timeout; return timeoutStream; } return stream; }