// Type definitions for RxJS // Project: http://rx.codeplex.com/ // Definitions by: gsino // Definitions: https://github.com/borisyankov/DefinitelyTyped declare module Rx { export module Internals { function inherits(child: Function, parent: Function): Function; function addProperties(obj: Object, ...sourcces: Object[]): void; function addRef(xs: IObservable, r: { getDisposable(): _IDisposable; }): IObservable; } //Collections interface IIndexedItem { id: number; value: IScheduledItem; compareTo(other: IIndexedItem): number; } // Priority Queue for Scheduling interface IPriorityQueue { items: IIndexedItem[]; length: number; isHigherPriority(left: number, right: number): boolean; percolate(index: number): void; heapify(index: number): void; peek(): IIndexedItem; removeAt(index: number): void; dequeue(): IIndexedItem; enqueue(item: IIndexedItem): void; remove(item: IIndexedItem): boolean; } interface _IDisposable { dispose(): void; } export class CompositeDisposable { constructor (...disposables: _IDisposable[]); disposables: _IDisposable[]; isDisposed: boolean; length: number; dispose(): void; add(item: _IDisposable): void; remove(item: _IDisposable): boolean; clear(): void; contains(item: _IDisposable): boolean; toArray(): _IDisposable[]; } // Main disposable class interface IDisposable { isDisposed: boolean; action: () =>void; dispose(): void; } export interface Disposable { new (action: () =>void ): IDisposable; } var Disposable: { create(action: () => void): _IDisposable; empty: _IDisposable; } // Single assignment interface ISingleAssignmentDisposable { isDisposed: boolean; current: _IDisposable; dispose(): void; disposable(value?: _IDisposable): _IDisposable; getDisposable(): _IDisposable; setDisposable(value: _IDisposable): void; } export interface SingleAssignmentDisposable { (): ISingleAssignmentDisposable; } // Multiple assignment disposable export class SerialDisposable { isDisposed: boolean; current: _IDisposable; dispose(): void; getDisposable(): _IDisposable; setDisposable(value: _IDisposable): void; disposable(value?: _IDisposable): _IDisposable; } export class RefCountDisposable { constructor(disposable: _IDisposable); underlyingDisposable: _IDisposable; isDisposed: boolean; isPrimaryDisposed: boolean; count: number; dispose(): void; getDisposable(): _IDisposable; } interface IScheduledItem { scheduler: IScheduler; state: any; action: (scheduler: IScheduler, state) => _IDisposable; dueTime: number; comparer: (x: number, y: number) =>number; disposable: ISingleAssignmentDisposable; invoke(): void; compareTo(other: IScheduledItem): number; isCancelled(): boolean; invokeCore(): _IDisposable; } interface IScheduler { _schedule: (state: any, action: (scheduler: IScheduler, state: any) =>_IDisposable) => _IDisposable; _scheduleRelative: (state: any, dueTime: number, action: (scheduler: IScheduler, state: any) =>_IDisposable) =>_IDisposable; _scheduleAbsolute: (state: any, dueTime: number, action: (scheduler: IScheduler, state: any) =>_IDisposable) =>_IDisposable; now(): number; scheduleWithState(state: any, action: (scheduler: IScheduler, state: any) =>_IDisposable): _IDisposable; scheduleWithAbsoluteAndState(state: any, dueTime: number, action: (scheduler: IScheduler, state: any) =>_IDisposable): _IDisposable; scheduleWithRelativeAndState(state: any, dueTime: number, action: (scheduler: IScheduler, state: any) =>_IDisposable): _IDisposable; catchException(handler: (exception: any) =>boolean): ICatchScheduler; schedulePeriodic(period: number, action: () =>void ): _IDisposable; schedulePeriodicWithState(state: any, period: number, action: (state: any) =>any): _IDisposable;//returns {Disposable|SingleAssignmentDisposable} schedule(action: () =>void ): _IDisposable; scheduleWithRelative(dueTime: number, action: () =>void ): _IDisposable; scheduleWithAbsolute(dueTime: number, action: () =>void ): _IDisposable; scheduleRecursive(action: (action: () =>void ) =>void ): _IDisposable; scheduleRecursiveWithState(state: any, action: (state: any, action: (state: any) =>void ) =>void ): _IDisposable; scheduleRecursiveWithRelative(dueTime: number, action: (action: (dueTime: number) =>void ) =>void ): _IDisposable; scheduleRecursiveWithRelativeAndState(state: any, dueTime: number, action: (state: any, action: (state: any, dueTime: number) =>void ) =>void ): _IDisposable; scheduleRecursiveWithAbsolute(dueTime: number, action: (action: (dueTime: number) =>void ) =>void ): _IDisposable; scheduleRecursiveWithAbsoluteAndState(state: any, dueTime: number, action: (state: any, action: (state: any, dueTime: number) =>void ) =>void ): _IDisposable; } var Scheduler: { //(now: () =>number, // schedule: (state: any, action: (scheduler: IScheduler, state: any) =>_IDisposable) => _IDisposable, // scheduleRelative: (state: any, dueTime: number, action: (scheduler: IScheduler, state: any) =>_IDisposable) =>_IDisposable, // scheduleAbsolute: (state: any, dueTime: number, action: (scheduler: IScheduler, state: any) =>_IDisposable) =>_IDisposable // ): IScheduler; now(): number; normalize(timeSpan: number): number; immediate: IScheduler; currentThread: ICurrentScheduler;//IScheduler; timeout: IScheduler; } // Current Thread IScheduler interface ICurrentScheduler extends IScheduler { scheduleRequired(): boolean; ensureTrampoline(action: () =>_IDisposable): _IDisposable; } // CatchScheduler interface ICatchScheduler extends IScheduler { } // Notifications interface INotification { accept(observer: IObserver): void; accept(onNext: (value: T) =>void , onError?: (exception: any) =>void , onCompleted?: () =>void ): void; toObservable(scheduler?: IScheduler): IObservable; hasValue: boolean; equals(other: INotification): boolean; kind: string; value?: T; exception?: any; } export interface Notification { //abstract //function new (): INotification; createOnNext(value: T): INotification;//ON createOnError(exception): INotification;//OE createOnCompleted(): INotification;//OC } var Notification: Notification; export module Internals { // Enumerator interface IEnumerator { moveNext(): boolean; getCurrent(): T; dispose(): void; } export interface Enumerator { (moveNext: () =>boolean, getCurrent: () => T, dispose: () =>void ): IEnumerator; create(moveNext: () =>boolean, getCurrent: () => T, dispose?: () =>void ): IEnumerator; } // Enumerable interface IEnumerable { getEnumerator(): IEnumerator; concat(): IObservable; catchException(): IObservable; } export interface Enumerable { (getEnumerator: () =>IEnumerator): IEnumerable; repeat(value: T, repeatCount?: number): IEnumerable; forEach(source: T[], selector?: (element: T, index: number) => T2): IEnumerable; forEach(source: { length: number; [index: number]: T; }, selector?: (element: T, index: number) => T2): IEnumerable; } } // Observer interface IObserver { onNext(value: T): void; onError(exception: any): void; onCompleted(): void; toNotifier(): (notification: INotification) =>void; asObserver(): IObserver; checked(): ICheckedObserver; } export module Observer { //abstract //function new (): IObserver; function create(onNext: (value: T) =>void , onError?: (exception: any) =>void , onCompleted?: () =>void ): IObserver; function fromNotifier(handler: (notification: INotification) =>void ): IObserver; } export module Internals { // Abstract Observer interface IAbstractObserver extends IObserver { isStopped: boolean; dispose(): void; next(value: T): void; error(exception: any): void; completed(): void; fail(): boolean; } //export module AbstractObserver { // //abstract // function new (): IAbstractObserver; //} } export class AnonymousObserver { constructor(onNext: (value: T) => void , onError: (exception: any) => void , onCompleted: () => void); } interface ICheckedObserver extends IObserver { _observer: IObserver; _state: number; // 0 - idle, 1 - busy, 2 - done checkAccess(): void; } export module Internals { interface IScheduledObserver extends IAbstractObserver { scheduler: IScheduler; observer: IObserver; isAcquired: boolean; hasFaulted: boolean; //queue: { (value: any): void; (exception: any): void; (): void; }[]; disposable: SerialDisposable; ensureActive(): void; } export interface ScheduledObserver { (scheduler: IScheduler, observer: IObserver): IScheduledObserver; } } interface IObservable { _subscribe: (observer: IObserver) =>_IDisposable; subscribe(observer: IObserver): _IDisposable; finalValue(): IObservable; subscribe(onNext?: (value: T) =>void , onError?: (exception: any) =>void , onCompleted?: () =>void ): _IDisposable; toArray(): IObservable; observeOn(scheduler: IScheduler): IObservable; subscribeOn(scheduler: IScheduler): IObservable; amb(rightSource: IObservable): IObservable; catchException(handler: (exception: any) =>IObservable): IObservable; catchException(second: IObservable): IObservable; combineLatest(second: IObservable, resultSelector: (v1: T, v2: T2) =>TResult): IObservable; combineLatest(second: IObservable, third: IObservable, resultSelector: (v1: T, v2: T2, v3: T3) =>TResult): IObservable; combineLatest(second: IObservable, third: IObservable, fourth: IObservable, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4) =>TResult): IObservable; combineLatest(second: IObservable, third: IObservable, fourth: IObservable, fifth: IObservable, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) =>TResult): IObservable; combineLatest(...soucesAndResultSelector: any[]): IObservable; concat(...sources: IObservable[]): IObservable; concat(sources: IObservable[]): IObservable; //concatIObservable(): IObservable; merge(maxConcurrent: number): IObservable; merge(other: IObservable): IObservable; //mergeIObservable(): IObservable; onErrorResumeNext(second: IObservable): IObservable; skipUntil(other: IObservable): IObservable; switchLatest(): IObservable; takeUntil(other: IObservable): IObservable; zip(second: IObservable, resultSelector: (v1: T, v2: T2) =>TResult): IObservable; zip(second: IObservable, third: IObservable, resultSelector: (v1: T, v2: T2, v3: T3) => TResult): IObservable; zip(second: IObservable, third: IObservable, fourth: IObservable, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4) => TResult): IObservable; zip(second: IObservable, third: IObservable, fourth: IObservable, fifth: IObservable, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) => TResult): IObservable; zip(...soucesAndResultSelector: any[]): IObservable; zip(second: any[], resultSelector: (left: T, right: any) => TResult): IObservable; asIObservable(): IObservable; bufferWithCount(count: number, skip?: number): IObservable; dematerialize(): IObservable; distinctUntilChanged(keySelector?: (value: T) => TValue, comparer?: (x: TValue, y: TValue) =>boolean): IObservable; doAction(observer: IObserver): IObservable; doAction(onNext: (value: T) => void , onError?: (exception: any) =>void , onCompleted?: () =>void ): IObservable; finallyAction(action: () =>void): IObservable; ignoreElements(): IObservable; materialize(): IObservable>; // IObservable> not supported by TypeScript 0.9.0 !! repeat(repeatCount?: number): IObservable; retry(retryCount?: number): IObservable; scan(seed: TAcc, accumulator: (acc: TAcc, value: T) => TAcc): IObservable; scan(accumulator: (acc: TAcc, value: T) => TAcc): IObservable; skipLast(count: number): IObservable; startWith(...values: T[]): IObservable; startWith(scheduler: IScheduler, ...values: T[]): IObservable; takeLast(count: number, scheduler?: IScheduler): IObservable; takeLastBuffer(count: number): IObservable; windowWithCount(count: number, skip?: number): IObservable; defaultIfEmpty(defaultValue?: any): IObservable; distinct(keySelector?: (value: T) => TKey, keySerializer?: (key: TKey) =>string): IObservable; groupBy(keySelector: (value: T) => TKey, elementSelector?: (value: T) => TElement, keySerializer?: (key: TKey) => string): IGroupedObservable; groupByUntil(keySelector: (value: T) => TKey, elementSelector: (value: T) => TElement, durationSelector: (group: IGroupedObservable) => IObservable, keySerializer?: (key: TKey) => string): IGroupedObservable; select(selector: (value: T, index: number) =>T2): IObservable; selectMany(selector: (value: T) =>IObservable, resultSelector?: (x: any, y: any) =>any): IObservable; selectMany(other: IObservable): IObservable; skip(count: number): IObservable; skipWhile(predicate: (value: T, index?: number) =>boolean): IObservable; take(count: number, scheduler?: IScheduler): IObservable; takeWhile(predicate: (value: T, index?: number) =>boolean): IObservable; where(predicate: (value: T, index?: number) => boolean): IObservable; } interface Observable { (subscribe: (observer: IObserver) =>_IDisposable): IObservable; create(subscribe: (observer: IObserver) => void ): IObservable; //create(subscribe: (observer: IObserver) => () => void ): IObservable; createWithDisposable(subscribe: (observer: IObserver) =>_IDisposable): IObservable; defer(observableFactory: () => IObservable): IObservable; empty(scheduler?: IScheduler): IObservable; fromArray(array: T[], scheduler?: IScheduler): IObservable; fromArray(array: { length: number;[index: number]: T; }, scheduler?: IScheduler): IObservable; generate(initialState: TState, condition: (state: TState) => boolean, iterate: (state: TState) => TState, resultSelector: (state: TState) => TResult, scheduler?: IScheduler): IObservable; never(): IObservable; range(start: number, count: number, scheduler?: IScheduler): IObservable; repeat(value: T, repeatCount?: number, scheduler?: IScheduler): IObservable; returnValue(value: T, scheduler?: IScheduler): IObservable; throwException(exception: any, scheduler?: IScheduler): IObservable; using(resourceFactory: () => TResource, observableFactory: (resource: TResource) => IObservable): IObservable; amb(...sources: IObservable[]): IObservable; catchException(sources: IObservable[]): IObservable; catchException(...sources: IObservable[]): IObservable; concat(...sources: IObservable[]): IObservable; concat(sources: IObservable[]): IObservable; merge(...sources: IObservable[]): IObservable; merge(sources: IObservable[]): IObservable; merge(scheduler: IScheduler, ...sources: IObservable[]): IObservable; merge(scheduler: IScheduler, sources: IObservable[]): IObservable; onErrorResumeNext(...sources: IObservable[]): IObservable; onErrorResumeNext(sources: IObservable[]): IObservable; zip(...soucesAndResultSelector: any[]): IObservable; } var Observable: Observable; export module Internals { interface IAnonymousObservable extends IObservable { } export interface AnonymousObservable { (subscribe: (observer: IObserver) =>_IDisposable): IAnonymousObservable; } } interface IGroupedObservable extends IObservable { key: TKey; underlyingObservable: IObservable; } interface ISubject extends IObservable, IObserver { isDisposed: boolean; isStopped: boolean; //observers: IObserver[]; dispose(): void; } export interface Subject extends ISubject { create(observer?: IObserver, observable?: IObservable): ISubject; } var Subject: { new (): Subject; } interface IAsyncSubject extends IObservable, IObserver { isDisposed: boolean; value: T; hasValue: boolean; observers: IObserver[]; exception: any; dispose(): void; } export interface AsyncSubject { (): IAsyncSubject; } interface IAnonymousSubject extends IObservable { onNext(value: T): void; onError(exception: any): void; onCompleted(): void; } }