t-readable
Version:
Split a readable-stream into 2 or more readable-streams
59 lines (46 loc) • 1.74 kB
Markdown
[](https://travis-ci.org/Borewit/t-readable)
[](https://npmjs.org/package/t-readable)
[](https://npmcharts.com/compare/t-readable?start=1200&interval=30)
Split one [_readable stream_](https://nodejs.org/api/stream.html#stream_readable_streams) into multiple [_readable streams_](https://nodejs.org/api/stream.html#stream_readable_streams).
Using [npm](https://www.npmjs.com/get-npm):
```sh
npm install t-readable
```
or [yarn](https://yarnpkg.com/):
```sh
yan add t-readable
```
```js
const { tee } = require('t-readable');
const got = require('got');
const url = 'https://upload.wikimedia.org/wikipedia/en/a/a9/Example.jpg';
/**
* Counts the number of bytes in the givent stream
* @param readable {stream.Readable} - Readable stream
* @return {Promise<number>} - Number of bytes until the end of stream is reached
*/
async function countBytes(readable) {
let bytesRead = 0;
return new Promise((resolve, reject) => {
readable.on('data', chunk => {
bytesRead += chunk.length;
});
readable.on('end', () => {
resolve(bytesRead);
});
readable.on('error', error => {
reject(error);
});
});
}
(async () => {
const stream = got.stream(url); // stream is an instance of class stream.Readable
const teedStreams = tee(stream);
// Count the number of bytes received in each teed stream
const counts = await Promise.all(teedStreams.map(readable => countBytes(readable)));
console.log('Counts: ' + counts.join(', ')); // Counts: 27661, 27661
})();
```