multi-destination-stream
TypeScript icon, indicating that this package has built-in type declarations

1.0.1 • Public • Published

multi-destination-stream

NPM Version NPM Downloads

Transform stream to output data to mutliple destinations

Install

npm i multi-destination-stream

Usage

Here is an example that splits the input data into two destinations (writable streams) based on a number. Ones go into the writable for ones and twos go to the second writable for twos

import { pipeline } from "stream/promises";
import { createMultiDestinationStream } from "multi-destination-stream";

const stream = createMultiDestinationStream<number>({
  objectMode: true,
  getDestinationId(data) {
    return String(data);
  },
  async createNewDestination(id) {
    return new Writable({
        objectMode: true,
        write(data: number, _encoding, callback) {
          // just ignore it for example purpose
          callback();
        },
      })
    );
  },
});

await pipeline(Readable.from([1, 1, 2, 2, 1, 1, 2, 2]), stream);

API

createMultiDestinationStream<I, O>(options: MultiDestinationStreamOptions<I>): Duplex

returns Duplex stream.

options

  • all normal Duplex stream options
  • getDestinationId: (data: I) => string - function that returns data id, stream use this id to separate outputs
  • createNewDestination: (data: I, id: string) => Promise<Writable | Duplex> - function to return new destination stream, called once per id

if createNewDestination returns Duplex this stream will pass all the outputs of all destinations into Readable part.

The generics:

  • I stands for Input data type
  • O is optional and stands for Ouput of Duplex destination type.

pipelineWithOutput<O>(...pipeline parameters): Promise<O[]>

this works exactly as pipeline but collects all end outputs into array and returns them when pipeline is ended.

License

MIT

Package Sidebar

Install

npm i multi-destination-stream

Weekly Downloads

36

Version

1.0.1

License

MIT

Unpacked Size

109 kB

Total Files

31

Last publish

Collaborators

  • velocityzen