@tempest/core
Version:
The core of the Tempest Stream Library
61 lines (60 loc) • 1.76 kB
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;
}