@johngw/stream
Version:
Reactive programming tools using the WHATWG Streams API.
36 lines • 1.21 kB
JavaScript
import { all } from '@johngw/stream-common/Async';
import { isCancellableSource, isPullableSource, isStartableSource, } from '@johngw/stream-common/Stream';
/**
* A collection of `UnderlyingSource`s that implement the `UnderlyingSource`.
*
* @group Sources
* @example
* ```
* new ReadableStream(
* new SourceComposite([
* { start: (controller) => controller.enqueue('Hello') },
* { start: (controller) => controller.enqueue('World') },
* ])
* )
* ```
*/
export class SourceComposite {
#cancellableSources;
#pullableSources;
#startableSources;
constructor(sources) {
this.#cancellableSources = sources.filter(isCancellableSource);
this.#pullableSources = sources.filter(isPullableSource);
this.#startableSources = sources.filter(isStartableSource);
}
async cancel(reason) {
await all(this.#cancellableSources, (source) => source.cancel(reason));
}
async pull(controller) {
await all(this.#pullableSources, (source) => source.pull(controller));
}
async start(controller) {
await all(this.#startableSources, (source) => source.start(controller));
}
}
//# sourceMappingURL=SourceComposite.js.map