apply a through stream to the output side of another through stream

npm install throughout
56 downloads in the last day
233 downloads in the last week
725 downloads in the last month


Apply a through stream to the output side of another through stream, preserving the first stream as input in the returned stream.

build status

browser support


var through = require('through');
var throughout = require('throughput');

var doubler = through(function (buf) {
    var dbuf = new Buffer(buf.length * 2);
    for (var i = 0; i < dbuf.length; i++) {
        dbuf[i] = buf[Math.floor(i/2)];

var counter = through(
    function (buf) {
        this._count = (this._count || 0) + buf.length;
    function () {
        this.queue(this._count + '\n');

    .pipe(throughout(doubler, counter))


If you want to transform just the output side of a through stream, this is actually somewhat difficult and it's not immediately obvious why something like:

var duplexer = require('duplexer');

function filterOutput (a, b) {
    return duplexer(a, b);

shouldn't just work. The worst part is that it does work, until you try to pipe the results to a slow endpoint that will throttle with pause and resume.

The problem is that both duplexer and .pipe() will handle pause and resume in a mutually exclusive way that will cause the stream to hang indefinitely if a slow downstream consumer ever triggers a pause.

If you try to use event-stream's .pipeline() function you will get the same problem.


var throughout = require('throughout');

var c = throughout(a, b)

Pipe the output of a through stream a into the input of a through stream b, returning a new stream c that writes its input to a and forwards the output from b.


With npm do:

npm install throughout



npm loves you