|
|
@@ -12,6 +12,7 @@ import {
|
|
|
LinearShape,
|
|
|
builderSymbol,
|
|
|
FlatMappedStreamBuilder,
|
|
|
+ SizeLimitedStreamBuilder,
|
|
|
} from './internal/StreamStageBuilder'
|
|
|
|
|
|
import { Sink } from './Sink'
|
|
|
@@ -48,6 +49,10 @@ export class Source<T> extends LinearShape<T> {
|
|
|
return new Source(ThrottledStreamBuilder(this.builder, elements, perDurationMs))
|
|
|
}
|
|
|
|
|
|
+ take(elements: number): Source<T> {
|
|
|
+ return new Source(SizeLimitedStreamBuilder(this.builder, elements))
|
|
|
+ }
|
|
|
+
|
|
|
via<O>(flow: Flow<T, O>): Source<O> {
|
|
|
const builder = this.builder
|
|
|
return new Source({
|
|
|
@@ -82,7 +87,11 @@ export class Source<T> extends LinearShape<T> {
|
|
|
}
|
|
|
|
|
|
static fromArray<T>(a: T[]) {
|
|
|
- return new Source<T>(IterableSourceBuilder(a))
|
|
|
+ return new Source<T>(IterableSourceBuilder(() => a))
|
|
|
+ }
|
|
|
+
|
|
|
+ static fromIterable<T>(iterableBuilder: () => Iterable<T> | AsyncIterable<T>) {
|
|
|
+ return new Source<T>(IterableSourceBuilder(iterableBuilder))
|
|
|
}
|
|
|
|
|
|
static fromReadableBuilder<T>(build: () => stream.Readable) {
|
|
|
@@ -90,10 +99,10 @@ export class Source<T> extends LinearShape<T> {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-function IterableSourceBuilder<T>(it: Iterable<T>) {
|
|
|
+function IterableSourceBuilder<T>(iterableBuilder: () => Iterable<T> | AsyncIterable<T>) {
|
|
|
return {
|
|
|
build() {
|
|
|
- return [stream.Readable.from(it, { autoDestroy: true })]
|
|
|
+ return [stream.Readable.from(iterableBuilder(), { autoDestroy: true })]
|
|
|
},
|
|
|
}
|
|
|
}
|