t-readable

Split a readable-stream into 2 or more readable-streams

Usage no npm install needed!

<script type="module">
  import tReadable from 'https://cdn.skypack.dev/t-readable';
</script>

README

Build Status NPM version npm downloads

t-readable

Split one readable stream into multiple readable streams.

Installation

Using npm:

npm install t-readable

or yarn:

yan add t-readable

Usage

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
})();