/**
 * SyncTasks.ts
 * Author: David de Regt
 * Copyright: Microsoft 2015
 *
 * A very simple promise library that resolves all promises synchronously instead of
 * kicking them back to the main ticking thread.  This affirmatively rejects the A+
 * standard for promises, and is used for a combination of performance (wrapping
 * things back to the main thread is really slow) and because indexeddb loses
 * context for its calls if you send them around the event loop and transactions
 * automatically close.
 */
export declare const config: {
    exceptionsToConsole: boolean;
    catchExceptions: boolean;
    traceEnabled: boolean;
    exceptionHandler: ((ex: Error) => void) | undefined;
    unhandledErrorHandler: (err: any) => void;
};
export interface Es6Thenable<R> {
    then<U>(onFulfilled?: (value: R) => U | Es6Thenable<U>, onRejected?: (error: any) => U | Es6Thenable<U>): Es6Thenable<U>;
    then<U>(onFulfilled?: (value: R) => U | Es6Thenable<U>, onRejected?: (error: any) => void): Es6Thenable<U>;
}
export declare function fromThenable<T>(thenable: Es6Thenable<T>): STPromise<T>;
/**
 * This function will defer callback of the specified callback lambda until the next JS tick, simulating standard A+ promise behavior
 */
export declare function asyncCallback(callback: () => void): void;
export declare type SuccessFunc<T, U> = (value: T) => U | Thenable<U>;
export declare type ErrorFunc<U> = (error: any) => U | Thenable<U>;
export declare type CancelFunc = (context: any) => void;
export interface Deferred<T> {
    resolve(obj: T): Deferred<T>;
    reject(obj?: any): Deferred<T>;
    promise(): STPromise<T>;
    onCancel(callback: CancelFunc): Deferred<T>;
}
export interface Thenable<T> {
    then<U>(successFunc: SuccessFunc<T, U>, errorFunc?: ErrorFunc<U>): STPromise<U>;
}
export interface Cancelable {
    cancel(context?: any): void;
}
export interface STPromise<T> extends Thenable<T>, Cancelable {
    catch(errorFunc: ErrorFunc<T>): STPromise<T>;
    finally(func: (value: T | any) => void): STPromise<T>;
    always<U>(func: (value: T | any) => U | Thenable<U>): STPromise<U>;
    done(successFunc: (value: T) => void): STPromise<T>;
    fail(errorFunc: (error: any) => void): STPromise<T>;
    thenAsync<U>(successFunc: SuccessFunc<T, U>, errorFunc?: ErrorFunc<U>): STPromise<U>;
    setTracingEnabled(enabled: boolean): STPromise<T>;
    toEs6Promise(): Promise<T>;
}
export { STPromise as Promise };
export declare type Raceable<T> = T | Thenable<T> | undefined | null;
export declare function all<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(values: [Raceable<T1>, Raceable<T2>, Raceable<T3>, Raceable<T4>, Raceable<T5>, Raceable<T6>, Raceable<T7>, Raceable<T8>, Raceable<T9>, Raceable<T10>]): STPromise<[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]>;
export declare function all<T1, T2, T3, T4, T5, T6, T7, T8, T9>(values: [Raceable<T1>, Raceable<T2>, Raceable<T3>, Raceable<T4>, Raceable<T5>, Raceable<T6>, Raceable<T7>, Raceable<T8>, Raceable<T9>]): STPromise<[T1, T2, T3, T4, T5, T6, T7, T8, T9]>;
export declare function all<T1, T2, T3, T4, T5, T6, T7, T8>(values: [Raceable<T1>, Raceable<T2>, Raceable<T3>, Raceable<T4>, Raceable<T5>, Raceable<T6>, Raceable<T7>, Raceable<T8>]): STPromise<[T1, T2, T3, T4, T5, T6, T7, T8]>;
export declare function all<T1, T2, T3, T4, T5, T6, T7>(values: [Raceable<T1>, Raceable<T2>, Raceable<T3>, Raceable<T4>, Raceable<T5>, Raceable<T6>, Raceable<T7>]): STPromise<[T1, T2, T3, T4, T5, T6, T7]>;
export declare function all<T1, T2, T3, T4, T5, T6>(values: [Raceable<T1>, Raceable<T2>, Raceable<T3>, Raceable<T4>, Raceable<T5>, Raceable<T6>]): STPromise<[T1, T2, T3, T4, T5, T6]>;
export declare function all<T1, T2, T3, T4, T5>(values: [Raceable<T1>, Raceable<T2>, Raceable<T3>, Raceable<T4>, Raceable<T5>]): STPromise<[T1, T2, T3, T4, T5]>;
export declare function all<T1, T2, T3, T4>(values: [Raceable<T1>, Raceable<T2>, Raceable<T3>, Raceable<T4>]): STPromise<[T1, T2, T3, T4]>;
export declare function all<T1, T2, T3>(values: [Raceable<T1>, Raceable<T2>, Raceable<T3>]): STPromise<[T1, T2, T3]>;
export declare function all<T1, T2>(values: [Raceable<T1>, Raceable<T2>]): STPromise<[T1, T2]>;
export declare function all<T>(values: (T | Thenable<T>)[]): STPromise<T[]>;
export declare function Defer<T>(): Deferred<T>;
export declare function Resolved<T extends void>(): STPromise<T>;
export declare function Resolved<T>(val: T): STPromise<T>;
export declare function Rejected<T>(val?: any): STPromise<T>;
export declare function race<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(values: [Raceable<T1>, Raceable<T2>, Raceable<T3>, Raceable<T4>, Raceable<T5>, Raceable<T6>, Raceable<T7>, Raceable<T8>, Raceable<T9>, Raceable<T10>]): STPromise<T1 | T2 | T3 | T4 | T5 | T6 | T7 | T8 | T9 | T10>;
export declare function race<T1, T2, T3, T4, T5, T6, T7, T8, T9>(values: [Raceable<T1>, Raceable<T2>, Raceable<T3>, Raceable<T4>, Raceable<T5>, Raceable<T6>, Raceable<T7>, Raceable<T8>, Raceable<T9>]): STPromise<T1 | T2 | T3 | T4 | T5 | T6 | T7 | T8 | T9>;
export declare function race<T1, T2, T3, T4, T5, T6, T7, T8>(values: [Raceable<T1>, Raceable<T2>, Raceable<T3>, Raceable<T4>, Raceable<T5>, Raceable<T6>, Raceable<T7>, Raceable<T8>]): STPromise<T1 | T2 | T3 | T4 | T5 | T6 | T7 | T8>;
export declare function race<T1, T2, T3, T4, T5, T6, T7>(values: [Raceable<T1>, Raceable<T2>, Raceable<T3>, Raceable<T4>, Raceable<T5>, Raceable<T6>, Raceable<T7>]): STPromise<T1 | T2 | T3 | T4 | T5 | T6 | T7>;
export declare function race<T1, T2, T3, T4, T5, T6>(values: [Raceable<T1>, Raceable<T2>, Raceable<T3>, Raceable<T4>, Raceable<T5>, Raceable<T6>]): STPromise<T1 | T2 | T3 | T4 | T5 | T6>;
export declare function race<T1, T2, T3, T4, T5>(values: [Raceable<T1>, Raceable<T2>, Raceable<T3>, Raceable<T4>, Raceable<T5>]): STPromise<T1 | T2 | T3 | T4 | T5>;
export declare function race<T1, T2, T3, T4>(values: [Raceable<T1>, Raceable<T2>, Raceable<T3>, Raceable<T4>]): STPromise<T1 | T2 | T3 | T4>;
export declare function race<T1, T2, T3>(values: [Raceable<T1>, Raceable<T2>, Raceable<T3>]): STPromise<T1 | T2 | T3>;
export declare function race<T1, T2>(values: [Raceable<T1>, Raceable<T2>]): STPromise<T1 | T2>;
export declare function race<T>(values: (T | Thenable<T>)[]): STPromise<T[]>;
export declare type RaceTimerResponse<T> = {
    timedOut: boolean;
    result?: T;
};
export declare function raceTimer<T>(promise: STPromise<T>, timeMs: number): STPromise<RaceTimerResponse<T>>;
