export type Awaitable = T | PromiseLike; export type Mapper = (t: T) => Awaitable; export type Filter = (t: T) => Awaitable; export type Reducer = (acc: U, t: T) => Awaitable; export type NamedEventuals = { [k: string]: Eventual; } & { [K in keyof T]: T[K]; }; export type Join = Eventual ? U : any; }>; export interface TryMapOptions { onError: (err: any) => void; } export type Subscriber = (value: T) => void; export interface Eventual { readonly valueReady: boolean; value(): Promise; subscribe(subscriber: Subscriber): void; map(f: Mapper): Eventual; tryMap(f: Mapper, options: TryMapOptions): Eventual; filter(f: Filter): Eventual; pipe(f: (t: T) => Awaitable): void; throttle(interval: number): Eventual; reduce(f: Reducer, initial: U): Eventual; values(): AsyncGenerator; } export interface WritableEventual extends Eventual { push(value: T): void; } export declare class EventualValue implements WritableEventual { inner: T | undefined; promise: Promise | undefined; resolvePromise?: (value: T) => void; subscribers: Subscriber[]; constructor(initial?: T); get valueReady(): boolean; value(): Promise; subscribe(subscriber: Subscriber): void; push(value: T): void; map(f: Mapper): Eventual; tryMap(f: Mapper, options: TryMapOptions): Eventual; filter(f: Filter): Eventual; pipe(f: (t: T) => Awaitable): void; throttle(interval: number): Eventual; reduce(f: Reducer, initial: U): Eventual; values(): AsyncGenerator; } export declare function mutable(initial?: T): WritableEventual; export declare function map(source: Eventual, mapper: (t: T) => Awaitable): Eventual; export declare function tryMap(source: Eventual, mapper: (t: T) => Awaitable, { onError }: TryMapOptions): Eventual; export declare function filter(source: Eventual, f: Filter): Eventual; export declare function pipe(source: Eventual, fn: (t: T) => Awaitable): void; export declare function throttle(source: Eventual, interval: number): Eventual; export declare function timer(milliseconds: number): Eventual; export declare function reduce(source: Eventual, reducer: (acc: U, t: T) => Awaitable, initial: U): Eventual; export declare function join(sources: NamedEventuals): Join;