# throughout

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

Latest version **0.0.0** (published 2013-05-20) · MIT license · 0 weekly downloads

## Install

```sh
npm install throughout
pnpm add throughout
yarn add throughout
bun add throughout
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.0.0 |
| Published | 2013-05-20 |
| First published | 2013-05-20 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 2 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | James Halliday |
| Maintainers | substack |
| Keywords | through, stream, filter, resume |

## Links

- npm: https://www.npmjs.com/package/throughout
- Repository: https://github.com/substack/throughout
- npm.io page: https://npm.io/package/throughout

## Dependencies (2)

- [through](https://npm.io/package/through.md) ~2.3.4
- [duplexer](https://npm.io/package/duplexer.md) ~0.0.2

## Alternatives

- [byte-size](https://npm.io/package/byte-size.md) — 2.1M weekly downloads
- [speed-limiter](https://npm.io/package/speed-limiter.md) — 16.0K weekly downloads
- [@powersync/node](https://npm.io/package/@powersync/node.md) — 10.9K weekly downloads
- [@ledgerhq/coin-cardano](https://npm.io/package/@ledgerhq/coin-cardano.md) — 1.0K weekly downloads
- [@jayesol/jayeson.lib.streamfinder](https://npm.io/package/@jayesol/jayeson.lib.streamfinder.md) — 1.0K weekly downloads

## Recent versions

- 0.0.0 (latest) — 2013-05-20

## README

# throughout

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

[![build status](https://secure.travis-ci.org/substack/throughout.png)](http://travis-ci.org/substack/throughout)

[![browser support](https://ci.testling.com/substack/throughout.png)](http://ci.testling.com/substack/throughout)

# example

``` js
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)];
    }
    this.queue(dbuf);
});

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

process.stdin
    .pipe(throughout(doubler, counter))
    .pipe(process.stdout)
;
```

# rationale

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:

``` js
var duplexer = require('duplexer');

function filterOutput (a, b) {
    a.pipe(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.

# methods

``` js
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`.

# install

With [npm](https://npmjs.org) do:

```
npm install throughout
```

# license

MIT

---
_Source: https://npm.io/package/throughout · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
