Skip to content

Create a multicast stream that lets multiple consumers independently read the same data

License

Notifications You must be signed in to change notification settings

sindresorhus/multicast-stream

Repository files navigation

multicast-stream logo

Create a multicast stream that lets multiple consumers independently read the same data

Install

npm install multicast-stream

Usage

Without this package

Using Readable#text() on a stream can only work with a single consumer. If you try to read the stream with multiple consumers, it will be empty as the stream can only be read once.

import {Readable} from 'node:stream';
import {text} from 'node:stream/consumers';

const sourceStream = Readable.from(['Hello', ' ', 'World']);
const [result1, result2] = await Promise.all([text(sourceStream), text(sourceStream)]);

console.log(result1); // 'Hello World'
console.log(result2); // ''

With this package

This package allows multiple consumers to independently read the same data from a single source stream.

import {Readable} from 'node:stream';
import {text} from 'node:stream/consumers';
import multicastStream from 'multicast-stream';

const sourceStream = Readable.from(['Hello', ' ', 'World']);
const createConsumer = multicastStream(sourceStream);

const consumer1 = createConsumer();
const consumer2 = createConsumer();

const [result1, result2] = await Promise.all([text(consumer1), text(consumer2)]);

console.log(result1); // 'Hello World'
console.log(result2); // 'Hello World'

API

multicastStream(sourceStream)

Creates a function that returns independent streams for each consumer.

Parameters

  • sourceStream (Readable): The source stream to multicast.

Returns

  • () => PassThrough: A function that returns a new PassThrough stream for each consumer.

About

Create a multicast stream that lets multiple consumers independently read the same data

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

No packages published