MultiStream
:MultiStream
An object consisting of multiple streams than can be refined or muxed.
The idea behind a MultiStream is being able to mux and demux streams when needed.
Usage:
new MultiStream([...streams]).mux();
new MultiStream(function* () {
yield* streams;
})
.map((stream) => stream.filter(myFilter))
.mux();
Kind: static class Test: test/methods/multi-stream-constructor.js
- :MultiStream
- new MultiStream(streams, [options])
- multiStream.streams
Array - multiStream.source
DataStream - multiStream.length
number - multiStream.map(aFunc, rFunc) ↺
Promise.<MultiStream> - multiStream.find()
DataStream - multiStream.filter(func) ↺
MultiStream - multiStream.mux([comparator], [ClassType])
DataStream - multiStream.add(stream)
- multiStream.remove(stream)
- multiStream.route([policy], [count])
MultiStream - multiStream.smap(transform) ↺
- multiStream.cluster(clusterFunc, [options]) ↺
- MultiStream:from(streams, [StreamClass])
MultiStream
new MultiStream(streams, [options])
Crates an instance of MultiStream with the specified stream list
| Param | Type | Default | Description |
|---|---|---|---|
| streams | Array.<stream.Readable> | AsyncGenerator.<Readable> | Generator.<Readable> | the list of readable streams (other objects will be filtered out!) | |
| [options] | object | | Optional options for the super object. ;) |
multiStream.streams : Array
Array of all streams
Kind: instance property of MultiStream
multiStream.source : DataStream
Source of the MultiStream.
This is nulled when the stream ends and is used to control the
Kind: instance property of MultiStream
multiStream.length : number
Returns the current stream length
Kind: instance property of MultiStream
multiStream.map(aFunc, rFunc) : Promise.<MultiStream> ↺
Returns new MultiStream with the streams returned by the transform.
Runs a callback for every stream, returns a new MultiStream of mapped streams and creates a new MultiStream consisting of streams returned by the Function.
Kind: instance method of MultiStream
Chainable
Returns: Promise.<MultiStream> - the mapped instance
Test: test/methods/multi-stream-map.js
| Param | Type | Description |
|---|---|---|
| aFunc | MultiMapCallback | Add callback (normally you need only this) |
| rFunc | MultiMapCallback | Remove callback, called when the stream is removed |
multiStream.find() : DataStream
Calls Array.prototype.find on the streams
Kind: instance method of MultiStream
Returns: DataStream - found DataStream
| Param | Type | Description |
|---|---|---|
| ...args | Array.<any> | arguments for |
multiStream.filter(func) : MultiStream ↺
Filters the stream list and returns a new MultiStream with only the streams for which the Function returned true
Kind: instance method of MultiStream
Chainable
Returns: MultiStream - the filtered instance
Test: test/methods/multi-stream-filter.js
| Param | Type | Description |
|---|---|---|
| func | function | Filter ran in Promise::then (so you can return a promise or a boolean) |
multiStream.mux([comparator], [ClassType]) : DataStream
Muxes the streams into a single one
Kind: instance method of MultiStream
Returns: DataStream - The resulting DataStream
Test: test/methods/multi-stream-mux.js
Todo
- For now using comparator will not affect the mergesort.
- Sorting requires all the streams to be constantly flowing, any single one drain results in draining the muxed too even if there were possible data on other streams.
| Param | Type | Default | Description |
|---|---|---|---|
| [comparator] | function | Should return -1 0 or 1 depending on the desired order. If passed the chunks will be added in a sorted order. | |
| [ClassType] | function | DataStream | the class to be outputted |
multiStream.add(stream)
Adds a stream to the MultiStream
If the stream was muxed, filtered or mapped, this stream will undergo the same transforms and conditions as if it was added in constructor.
Kind: instance method of MultiStream
Meta.noreadme:
Test: test/methods/multi-stream-add.js
| Param | Type | Description |
|---|---|---|
| stream | Readable | [description] |
multiStream.remove(stream)
Removes a stream from the MultiStream
If the stream was muxed, filtered or mapped, it will be removed from same streams.
Kind: instance method of MultiStream
Meta.noreadme:
Test: test/methods/multi-stream-remove.js
| Param | Type | Description |
|---|---|---|
| stream | Readable | [description] |
multiStream.route([policy], [count]) : MultiStream
Re-routes streams to a new MultiStream of specified size
Kind: instance method of MultiStream
Returns: MultiStream - [description]
Meta.noreadme:
Todo
- NYT: not yet tested
- NYD: not yet documented
| Param | Type | Default | Description |
|---|---|---|---|
| [policy] | function | Affinity.RoundRobin | [description] |
| [count] | number | os.cpus().length | [description] |
multiStream.smap(transform) ↺
Map stream synchronously
Kind: instance method of MultiStream
Chainable
| Param | Type | Description |
|---|---|---|
| transform | function | mapping function ran on every stream (SYNCHRONOUS!) |
multiStream.cluster(clusterFunc, [options]) ↺
Distributes processing to multiple forked subprocesses.
Kind: instance method of MultiStream
Chainable
| Param | Type | Default | Description |
|---|---|---|---|
| clusterFunc | function | string | a cluster callback with all operations working similarly to DataStream::use | |
| [options] | DistributeOptions | |
MultiStream:from(streams, [StreamClass]) : MultiStream
Constructs MultiStream from any number of streams-likes
Kind: static method of MultiStream
| Param | Type | Default | Description |
|---|---|---|---|
| streams | Array.<(Array|Iterable.<any>|AsyncGeneratorFunction|GeneratorFunction|AsyncFunction|function()|string|Readable)> | the array of input streamlike elements | |
| [StreamClass] | function | DataStream |