@tempest/core
Version:
The core of the Tempest Stream Library
18 lines (15 loc) • 651 B
text/typescript
import { Source, Sink, Scheduler } from '../interfaces'
import { PropagateTask } from '../scheduler/PropagateTask'
export class FromArraySource<T> implements Source<T> {
constructor (private array: T[]) {}
run (sink: Sink<T>, scheduler: Scheduler) {
const task = scheduler.asap(new PropagateTask<T>(runArrayTask<T>(this.array, scheduler), void 0, sink))
return { dispose: () => task.dispose() }
}
}
function runArrayTask<T> (array: T[], scheduler: Scheduler) {
return function arrayTask (time: number, value: T, sink: Sink<T>) {
array.forEach((x: T) => sink.event(scheduler.now(), x))
sink.end(scheduler.now(), void 0)
}
}