declare module Rx { // Type alias for observables and promises export type ObservableOrPromise = IObservable | Observable | Promise; export type ArrayLike = Array | { length: number;[index: number]: T; }; // Type alias for arrays and array like objects export type ArrayOrIterable = ArrayLike; /** * Promise A+ */ export interface Promise { then(onFulfilled: (value: T) => R|Promise, onRejected: (error: any) => Promise): Promise; then(onFulfilled: (value: T) => R|Promise, onRejected?: (error: any) => R): Promise; } /** * Promise A+ */ export interface IPromise extends Promise { } /** * Represents a push-style collection. */ export interface IObservable { } /** * Represents a push-style collection. */ export interface Observable extends IObservable { } export interface IDisposable { dispose(): void; } export interface Disposable extends IDisposable { /** Is this value disposed. */ isDisposed?: boolean; } interface DisposableStatic { /** * Provides a set of static methods for creating Disposables. * @param {Function} dispose Action to run during the first call to dispose. The action is guaranteed to be run at most once. */ new (action: () => void): Disposable; /** * Creates a disposable object that invokes the specified action when disposed. * @param {Function} dispose Action to run during the first call to dispose. The action is guaranteed to be run at most once. * @return {Disposable} The disposable object that runs the given action upon disposal. */ create(action: () => void): Disposable; /** * Gets the disposable that does nothing when disposed. */ empty: IDisposable; /** * Validates whether the given object is a disposable * @param {Object} Object to test whether it has a dispose method * @returns {Boolean} true if a disposable object, else false. */ isDisposable(d: any): boolean; } /** * Provides a set of static methods for creating Disposables. * @param {Function} dispose Action to run during the first call to dispose. The action is guaranteed to be run at most once. */ export var Disposable: DisposableStatic; export module config { export var Promise: { new (resolver: (resolvePromise: (value: T) => void, rejectPromise: (reason: any) => void) => void): IPromise; }; } export module helpers { export var noop: () => void; export var notDefined: (value: any) => boolean; export var identity: (value: T) => T; export var defaultNow: () => number; export var defaultComparer: (left: any, right: any) => boolean; export var defaultSubComparer: (left: any, right: any) => number; export var defaultKeySerializer: (key: any) => string; export var defaultError: (err: any) => void; export var isPromise: (p: any) => boolean; export var asArray: (...args: T[]) => T[]; export var not: (value: any) => boolean; export var isFunction: (value: any) => boolean; } export type _Selector = (value: T, index: number, observable: Observable) => TResult; export type _ValueOrSelector = TResult | _Selector; export type _Predicate = _Selector; export type _Comparer = (value1: T, value2: T) => TResult; export type _Accumulator = (acc: TAcc, value: T) => TAcc; export module special { export type _FlatMapResultSelector = (value: T1, selectorValue: T2, index: number, selectorOther: number) => TResult; } export interface IObservable { /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ subscribe(observer: IObserver): IDisposable; /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ subscribe(onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): IDisposable; } export interface Observable { /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ subscribe(observer: IObserver): IDisposable; /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ subscribe(onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): IDisposable; /** * Subscribes to the next value in the sequence with an optional "this" argument. * @param {Function} onNext The function to invoke on each element in the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Disposable} A disposable handling the subscriptions and unsubscriptions. */ subscribeOnNext(onNext: (value: T) => void, thisArg?: any): IDisposable; /** * Subscribes to an exceptional condition in the sequence with an optional "this" argument. * @param {Function} onError The function to invoke upon exceptional termination of the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Disposable} A disposable handling the subscriptions and unsubscriptions. */ subscribeOnError(onError: (exception: any) => void, thisArg?: any): IDisposable; /** * Subscribes to the next value in the sequence with an optional "this" argument. * @param {Function} onCompleted The function to invoke upon graceful termination of the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Disposable} A disposable handling the subscriptions and unsubscriptions. */ subscribeOnCompleted(onCompleted: () => void, thisArg?: any): IDisposable; /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ forEach(observer: IObserver): IDisposable; /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ forEach(onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): IDisposable; } export interface ObservableStatic { /** * Determines whether the given object is an Observable * @param {Any} An object to determine whether it is an Observable * @returns {Boolean} true if an Observable, else false. */ isObservable(o: any): boolean; } export var Observable: ObservableStatic; export module internals { export var inherits: (child: any, parent: any) => void; export var addProperties: (obj: any, ...sources: any[]) => void; export var addRef: (xs: Observable, r: { getDisposable(): IDisposable; }) => Observable; } /** * Represents a group of disposable resources that are disposed together. * @constructor */ export interface CompositeDisposable extends Disposable { /** * Adds a disposable to the CompositeDisposable or disposes the disposable if the CompositeDisposable is disposed. * @param {Mixed} item Disposable to add. */ add(item: IDisposable): void; /** * Removes and disposes the first occurrence of a disposable from the CompositeDisposable. * @param {Mixed} item Disposable to remove. * @returns {Boolean} true if found; false otherwise. */ remove(item: IDisposable): void; } interface CompositeDisposableStatic { /** * Represents a group of disposable resources that are disposed together. * @constructor */ new (...disposables: Rx.IDisposable[]): CompositeDisposable; /** * Represents a group of disposable resources that are disposed together. * @constructor */ new(disposables: Rx.IDisposable[]): CompositeDisposable; } export var CompositeDisposable: CompositeDisposableStatic; export interface SingleAssignmentDisposable { /** Performs the task of cleaning up resources. */ dispose(): void; /** Is this value disposed. */ isDisposed: boolean; getDisposable(): IDisposable; setDisposable(value: IDisposable): void; } interface SingleAssignmentDisposableStatic { new() : SingleAssignmentDisposable; } export var SingleAssignmentDisposable : SingleAssignmentDisposableStatic; export interface SerialDisposable { /** Performs the task of cleaning up resources. */ dispose(): void; /** Is this value disposed. */ isDisposed: boolean; getDisposable(): IDisposable; setDisposable(value: IDisposable): void; } interface SerialDisposableStatic { new() : SerialDisposable; } export var SerialDisposable : SerialDisposableStatic; export interface IScheduler { /** Gets the current time according to the local machine's system clock. */ now(): number; /** * Schedules an action to be executed. * @param state State passed to the action to be executed. * @param {Function} action Action to be executed. * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). */ schedule(state: TState, action: (scheduler: IScheduler, state: TState) => IDisposable): IDisposable; /** * Schedules an action to be executed after dueTime. * @param state State passed to the action to be executed. * @param {Function} action Action to be executed. * @param {Number} dueTime Relative time after which to execute the action. * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). */ scheduleFuture(state: TState, dueTime: number | Date, action: (scheduler: IScheduler, state: TState) => IDisposable): IDisposable; } export interface SchedulerStatic { /** Gets the current time according to the local machine's system clock. */ now(): number; /** * Normalizes the specified TimeSpan value to a positive value. * @param {Number} timeSpan The time span value to normalize. * @returns {Number} The specified TimeSpan value if it is zero or positive; otherwise, 0 */ normalize(timeSpan: number): number; /** Determines whether the given object is a scheduler */ isScheduler(s: any): boolean; } /** Provides a set of static properties to access commonly used schedulers. */ export var Scheduler: SchedulerStatic; export module internals { export interface ScheduledItem { scheduler: IScheduler; state: TTime; action: (scheduler: IScheduler, state: any) => IDisposable; dueTime: TTime; comparer: (x: TTime, y: TTime) => number; disposable: SingleAssignmentDisposable; invoke(): void; compareTo(other: ScheduledItem): number; isCancelled(): boolean; invokeCore(): IDisposable; } interface ScheduledItemStatic { new (scheduler: IScheduler, state: any, action: (scheduler: IScheduler, state: any) => IDisposable, dueTime: TTime, comparer?: _Comparer):ScheduledItem; } export var ScheduledItem: ScheduledItemStatic } export interface IScheduler { /** * Schedules an action to be executed recursively. * @param {Mixed} state State passed to the action to be executed. * @param {Function} action Action to execute recursively. The last parameter passed to the action is used to trigger recursive scheduling of the action, passing in recursive invocation state. * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). */ scheduleRecursive(state: TState, action: (state: TState, action: (state: TState) => void) => void): IDisposable; /** * Schedules an action to be executed recursively after a specified relative due time. * @param {Mixed} state State passed to the action to be executed. * @param {Function} action Action to execute recursively. The last parameter passed to the action is used to trigger recursive scheduling of the action, passing in the recursive due time and invocation state. * @param {Number}dueTime Relative time after which to execute the action for the first time. * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). */ scheduleRecursiveFuture(state: TState, dueTime: TTime, action: (state: TState, action: (state: TState, dueTime: TTime) => void) => void): IDisposable; } export interface IScheduler { /** * Schedules a periodic piece of work by dynamically discovering the scheduler's capabilities. The periodic task will be scheduled using window.setInterval for the base implementation. * @param {Mixed} state Initial state passed to the action upon the first iteration. * @param {Number} period Period for running the work periodically. * @param {Function} action Action to be executed, potentially updating the state. * @returns {Disposable} The disposable object used to cancel the scheduled recurring action (best effort). */ schedulePeriodic(state: TState, period: number, action: (state: TState) => TState): IDisposable; } export module internals { export interface SchedulePeriodicRecursive { start(): IDisposable; } interface SchedulePeriodicRecursiveStatic { new (scheduler: any, state: any, period: any, action: any) : SchedulePeriodicRecursive; } export var SchedulePeriodicRecursive: SchedulePeriodicRecursiveStatic; } export interface SchedulerStatic { immediate: IScheduler; } export interface ICurrentThreadScheduler extends IScheduler { scheduleRequired(): boolean; } export interface SchedulerStatic { currentThread: ICurrentThreadScheduler; } export interface SchedulerStatic { default: IScheduler; async: IScheduler; } export module internals { // Priority Queue for Scheduling export interface PriorityQueue { length: number; isHigherPriority(left: number, right: number): boolean; percolate(index: number): void; heapify(index: number): void; peek(): ScheduledItem; removeAt(index: number): void; dequeue(): ScheduledItem; enqueue(item: ScheduledItem): void; remove(item: ScheduledItem): boolean; } interface PriorityQueueStatic { new (capacity: number) : PriorityQueue; count: number; } export var PriorityQueue : PriorityQueueStatic; } export interface CheckedObserver extends Observer { checkAccess(): void; } /** * Supports push-style iteration over an observable sequence. */ export interface IObserver { /** * Notifies the observer of a new element in the sequence. * @param {Any} value Next element in the sequence. */ onNext(value: T): void; /** * Notifies the observer that an exception has occurred. * @param {Any} error The error that has occurred. */ onError(exception: any): void; /** * Notifies the observer of the end of the sequence. */ onCompleted(): void; } export interface Observer { /** * Notifies the observer of a new element in the sequence. * @param {Any} value Next element in the sequence. */ onNext(value: T): void; /** * Notifies the observer that an exception has occurred. * @param {Any} error The error that has occurred. */ onError(exception: any): void; /** * Notifies the observer of the end of the sequence. */ onCompleted(): void; } export interface ObserverStatic { /** * Creates an observer from the specified OnNext, along with optional OnError, and OnCompleted actions. * @param {Function} [onNext] Observer's OnNext action implementation. * @param {Function} [onError] Observer's OnError action implementation. * @param {Function} [onCompleted] Observer's OnCompleted action implementation. * @returns {Observer} The observer object implemented using the given actions. */ create(onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): Observer; } /** * Supports push-style iteration over an observable sequence. */ export var Observer: ObserverStatic; export module internals { /** * Abstract base class for implementations of the Observer class. * This base class enforces the grammar of observers where OnError and OnCompleted are terminal messages. */ export interface AbstractObserver extends Rx.IObserver, Rx.IDisposable { /** * Notifies the observer of a new element in the sequence. * @param {Any} value Next element in the sequence. */ onNext(value: T): void; /** * Notifies the observer that an exception has occurred. * @param {Any} error The error that has occurred. */ onError(exception: any): void; /** * Notifies the observer of the end of the sequence. */ onCompleted(): void; isStopped: boolean; /** * Disposes the observer, causing it to transition to the stopped state. */ dispose(): void; fail(e: any): boolean; // Must be implemented by other observers next(value: T): void; error(error: any): void; completed(): void; } interface AbstractObserverStatic { new (): AbstractObserver; } export var AbstractObserver: AbstractObserverStatic } /** * Class to create an Observer instance from delegate-based implementations of the on* methods. */ export interface AnonymousObserver extends Observer { /** * Notifies the observer of a new element in the sequence. * @param {Any} value Next element in the sequence. */ onNext(value: T): void; /** * Notifies the observer that an exception has occurred. * @param {Any} error The error that has occurred. */ onError(exception: any): void; /** * Notifies the observer of the end of the sequence. */ onCompleted(): void; } interface AnonymousObserverStatic { /** * Creates an observer from the specified OnNext, OnError, and OnCompleted actions. * @param {Any} onNext Observer's OnNext action implementation. * @param {Any} onError Observer's OnError action implementation. * @param {Any} onCompleted Observer's OnCompleted action implementation. */ new (onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): AnonymousObserver; } export var AnonymousObserver : AnonymousObserverStatic; export interface AnonymousObservable extends Observable { } export interface ObservableStatic { /** * Creates an observable sequence from a specified subscribe method implementation. * @example * var res = Rx.Observable.create(function (observer) { return function () { } ); * var res = Rx.Observable.create(function (observer) { return Rx.Disposable.empty; } ); * var res = Rx.Observable.create(function (observer) { } ); * @param {Function} subscribe Implementation of the resulting observable sequence's subscribe method, returning a function that will be wrapped in a Disposable. * @returns {Observable} The observable sequence with the specified implementation for the Subscribe method. */ create(subscribe: (observer: Observer) => IDisposable | Function | void): Observable; } } declare module "rx" { export = Rx; }