@tempest/core
Version:
The core of the Tempest Stream Library
73 lines (62 loc) • 1.7 kB
text/typescript
export interface Subscribable<T> {
source: Source<T>
subscribe(nextOrObserver?: Subscriber<T> | ((x: T) => any),
error?: (error: Error) => any,
complete?: (x?: T) => any): Subscription<T>
}
export interface Source<T> {
run (sink: Sink<T>, scheduler: Scheduler): Disposable<T>
}
export interface Sink<T> {
event (time: number, value: T): void
end (time: number, value?: T): void
error (time: number, err: Error): void
}
export interface Scheduler {
now(): number
asap(task: Task): ScheduledTask
delay(delayTime: number, task: Task): ScheduledTask
periodic(period: number, task: Task): ScheduledTask
schedule(delay: number, period: number, task: Task): ScheduledTask
cancel(task: ScheduledTask): void
cancelAll(predicate: (task: ScheduledTask) => boolean): void
}
export interface Timeline<T> {
nextArrival (): number
isEmpty (): boolean
add (task: T): void
remove (task: T): boolean
removeAll (f: (task: T) => boolean): void
runTasks (time: number, runTask: (task: T) => any): void
}
export interface Timeslot<T> {
time: number
events: T[]
}
export interface Timer<T> {
now(): number,
setTimer(fn: () => any, delayTime: number): T | number
clearTimer(task: T): any
}
export interface Task {
run(time: number): void
error(time: number, e: Error): void
dispose(): void
}
export interface ScheduledTask {
task: Task
run(): void
error(err: Error): void
dispose(): void
}
export interface Disposable<A> {
dispose(): void | Promise<A>
}
export interface Subscriber<A> {
next(value: A): void;
error(err: Error): void;
complete(value?: A): void;
}
export interface Subscription<A> {
unsubscribe(): void;
}