Skip to content

Commit

Permalink
harden event handling
Browse files Browse the repository at this point in the history
  • Loading branch information
phated committed Jan 14, 2016
1 parent ef0b8e0 commit 5167080
Showing 1 changed file with 23 additions and 2 deletions.
25 changes: 23 additions & 2 deletions lib/sink.js
Expand Up @@ -2,6 +2,10 @@

var Writable = require('readable-stream/writable');

function listenerCount(stream, evt) {
return stream.listeners(evt).length;
}

function sink(stream) {
var sinkStream = new Writable({
objectMode: true,
Expand All @@ -10,9 +14,26 @@ function sink(stream) {
},
});

stream.on('removeListener', function() {
if (listenerCount(stream, 'readable') || listenerCount(stream, 'data')) {
stream.unpipe(sinkStream);
}
});

stream.on('unpipe', function() {
if (!(listenerCount(stream, 'readable') || listenerCount(stream, 'data'))) {
stream.pipe(sinkStream);
}
});

stream.on('newListener', function() {
if (listenerCount(stream, 'readable') || listenerCount(stream, 'data')) {
stream.unpipe(sinkStream);
}
});

return function() {
// Respect readable listeners on the underlying stream
if (stream.listeners('readable').length > 0) {
if (listenerCount(stream, 'readable') || listenerCount(stream, 'data')) {
return;
}

Expand Down

0 comments on commit 5167080

Please sign in to comment.