import * as F from "./index";
import { Accum, Dispose, EndHandler, EndProjection, Eq, ErrorHandler, EventStream, FlatAccum, Handler, Observable, Predicate, Projection, Property, ValueHandler, ValuesHandler } from "./index";
import * as Logic from "./operators/logic";
declare module "./Observable" {
interface Observable {
subscribe(handler: Handler): Dispose;
awaiting(otherObservable: Observable): Property;
onValue(f: ValueHandler): Dispose;
onValues(f: ValuesHandler): Dispose;
onError(f: ErrorHandler): Dispose;
onEnd(f: EndHandler): Dispose;
doAction(f: (val: A) => void): Observable;
doError(f: (err: Error) => void): Observable;
doEnd(f: () => void): Observable;
doLog(label?: string): Observable;
assign(obj: any, method: string, ...params: any[]): Dispose;
log(label?: string): Dispose;
map(project: Projection): Observable;
mapError(project: Projection): Observable;
mapEnd(f: EndProjection): Observable;
filter(predicate: Predicate | Property): Observable;
take(n: number): Observable;
takeUntil(trigger: Observable): Observable;
takeWhile(f: Predicate | Property): Observable;
first(): Observable;
last(): Observable;
skip(n: number): Observable;
skipUntil(trigger: Observable): Observable;
skipWhile(trigger: Predicate | Property): Observable;
skipErrors(): Observable;
flatMapLatest(project: Projection>): Observable;
flatMapFirst(project: Projection>): Observable;
flatMap(project: Projection>): Observable;
flatMapConcat(project: Projection>): Observable;
flatMapWithConcurrencyLimit(limit: number, project: Projection>): Observable;
flatMapError(project: Projection>): Observable;
startWith(value: A): Observable;
scan(seed: B, f: Accum): Property;
fold(seed: B, f: Accum): Property;
flatScan(seed: B, f: FlatAccum): Property;
reduce(seed: B, f: Accum): Property;
zip(other: Observable, f: (a: A, b: B) => C): EventStream;
merge(other: Observable): EventStream;
concat(other: Observable): EventStream;
combine(other: Observable, f: (a: A, b: B) => C): Property;
errors(): Observable;
throttle(delay: number): Observable;
debounce(delay: number): Observable;
debounceImmediate(delay: number): Observable;
delay(delay: number): Observable;
bufferingThrottle(minimumInterval: number): Observable;
slidingWindow(max: number, min?: number): Property;
skipDuplicates(isEqual?: Eq): Observable;
diff(start: A, f: F.Delta): Observable;
toPromise(ctor?: PromiseConstructor): Promise;
firstToPromise(ctor?: PromiseConstructor): Promise;
}
}
declare module "./EventStream" {
interface EventStream {
toProperty(initialValue?: A): Property;
doAction(f: (val: A) => void): EventStream;
doError(f: (err: Error) => void): EventStream;
doEnd(f: () => void): EventStream;
doLog(label?: string): EventStream;
map(project: Projection): EventStream;
mapError(project: Projection): EventStream;
mapEnd(f: EndProjection): EventStream;
filter(predicate: Predicate | Property): EventStream;
take(n: number): EventStream;
takeUntil(trigger: Observable): EventStream;
takeWhile(f: Predicate | Property): EventStream;
first(): EventStream;
last(): EventStream;
skip(n: number): EventStream;
skipUntil(trigger: Observable): EventStream;
skipWhile(trigger: Predicate | Property): EventStream;
skipErrors(): EventStream;
flatMapLatest(project: Projection>): EventStream;
flatMapFirst(project: Projection>): EventStream;
flatMap(project: Projection>): EventStream;
flatMapConcat(project: Projection>): EventStream;
flatMapWithConcurrencyLimit(limit: number, project: Projection>): EventStream;
flatMapError(project: Projection>): EventStream;
startWith(value: A): EventStream;
errors(): EventStream;
throttle(delay: number): EventStream;
debounce(delay: number): EventStream;
debounceImmediate(delay: number): EventStream;
delay(delay: number): EventStream;
bufferingThrottle(minimumInterval: number): EventStream;
bufferWithTime(delay: number): EventStream;
bufferWithCount(count: number): EventStream;
bufferWithTimeOrCount(delay: number, count: number): EventStream;
skipDuplicates(isEqual?: Eq): EventStream;
diff(start: A, f: F.Delta): EventStream;
}
}
declare module "./Property" {
interface Property {
toEventStream(): EventStream;
changes(): EventStream;
doAction(f: (val: A) => void): Property;
doError(f: (err: Error) => void): Property;
doEnd(f: () => void): Property;
doLog(label?: string): Property;
map(project: Projection): Property;
mapError(project: Projection): Property;
mapEnd(f: EndProjection): Property;
filter(predicate: Predicate | Property): Property;
take(n: number): Property;
takeUntil(trigger: Observable): Property;
takeWhile(f: Predicate | Property): Property;
first(): Property;
last(): Property;
skip(n: number): Property;
skipUntil(trigger: Observable): Property;
skipWhile(trigger: Predicate | Property): Property;
skipErrors(): Property;
flatMapLatest(project: Projection>): Property;
flatMapFirst(project: Projection>): Property;
flatMap(project: Projection>): Property;
flatMapConcat(project: Projection>): Property;
flatMapWithConcurrencyLimit(limit: number, project: Projection>): Property;
flatMapError(project: Projection>): Property;
sampledBy(sampler: EventStream): EventStream;
sampledBy(sampler: Property): Property;
sampledBy(sampler: EventStream, f: SampleFn): EventStream;
sampledBy(sampler: Property, f: SampleFn): Property;
sample(interval: number): EventStream;
startWith(value: A): Property;
and(other: Property): Property>;
or(other: Property): Property>;
not(): Property;
errors(): Property;
throttle(delay: number): Property;
debounce(delay: number): Property;
debounceImmediate(delay: number): Property;
delay(delay: number): Property;
bufferingThrottle(minimumInterval: number): Property;
skipDuplicates(isEqual?: Eq): Property;
diff(start: A, f: F.Delta): Property;
}
}
declare module "./Bus" {
interface Bus {
push(event: T | F.AnyEvent): void;
end(): void;
error(err: Error): void;
plug(obs: Observable): F.Dispose;
}
}
export declare type SampleFn = (value: V, sample: S) => R;
export { End, Error, Next } from "./Event";
export { EventStream } from "./EventStream";
export { Observable } from "./Observable";
export { Property } from "./Property";
export { Bus } from "./Bus";
export { Combineable, combineAsArray, combineTemplate } from "./operators/combine";
export { update } from "./operators/update";
export { when } from "./operators/when";
export { zipAsArray } from "./operators/zip";
export { fromArray } from "./sources/fromArray";
export { fromBinder } from "./sources/fromBinder";
export { fromPromise } from "./sources/fromPromise";
export { never } from "./sources/never";
export { repeat } from "./sources/repeat";
export { constant, once } from "./sources/single";
export * from "./_interfaces";
export declare function later(delay: number): EventStream;
export declare function later(delay: number, value: T): EventStream;
export declare function interval(period: number): EventStream;
export declare function interval(period: number, value: T): EventStream;
export declare function fromEvent(target: EventTarget, event: string, ...args: any[]): EventStream;
export declare function fromPoll(interval: number, f: () => T | F.AnyEvent): EventStream;
export declare function repeatedly(interval: number, events: Array>): EventStream;
export declare function sequentially(interval: number, events: Array>): EventStream;
export declare function fromCallback(f: F.AsyncCallback, ...args: any[]): EventStream;
export declare function fromNodeCallback(f: F.AsyncNodeCallback, ...args: any[]): EventStream;
export declare function zipWith(f: (a: A) => T, streams: [Observable]): EventStream;
export declare function zipWith(f: (a: A, b: B) => T, streams: [Observable, Observable]): EventStream;
export declare function zipWith(f: (a: A, b: B, c: C) => T, streams: [Observable, Observable, Observable]): EventStream;
export declare function zipWith(f: (a: A, b: B, c: C, d: D) => T, streams: [Observable, Observable, Observable, Observable]): EventStream;
export declare function zipWith(f: (a: A, b: B, c: C, d: D, e: E) => T, streams: [Observable, Observable, Observable, Observable, Observable]): EventStream;
export declare function zipWith(f: (a: A, b: B, c: C, d: D, e: E, f: F) => T, streams: [Observable, Observable, Observable, Observable, Observable, Observable]): EventStream;
export declare function zipWith(f: (...args: A[]) => T, streams: A[]): EventStream;
export declare function zipWith(f: (streams: [Observable], a: A) => T): EventStream;
export declare function zipWith(streams: [Observable, Observable], f: (a: A, b: B) => T): EventStream;
export declare function zipWith(streams: [Observable, Observable, Observable], f: (a: A, b: B, c: C) => T): EventStream;
export declare function zipWith(streams: [Observable, Observable, Observable, Observable], f: (a: A, b: B, c: C, d: D) => T): EventStream;
export declare function zipWith(streams: [Observable, Observable, Observable, Observable, Observable], f: (a: A, b: B, c: C, d: D, e: E) => T): EventStream;
export declare function zipWith(streams: [Observable, Observable, Observable, Observable, Observable, Observable], f: (a: A, b: B, c: C, d: D, e: E, f: F) => T): EventStream;
export declare function zipWith(streams: A[], f: (...args: A[]) => T): EventStream;
export declare function combineWith(f: (a: A) => R, observables: [F.Combineable]): Property;
export declare function combineWith(f: (a: A, b: B) => R, observables: [F.Combineable, F.Combineable]): Property;
export declare function combineWith(f: (a: A, b: B, c: C) => R, observables: [F.Combineable, F.Combineable, F.Combineable]): Property;
export declare function combineWith