import { IFacility } from "./Activator";
import { IActivityHandler, IActivityContext, Deferrable } from "./IActivityHandler";
/** Do not reference. */
export interface IActivityHandlerConstructorWithFacility<T> {
    new (): IActivityHandlerWithFacility<T>;
    prototype: IActivityHandlerWithFacility<T>;
}
/** Do not reference. */
export interface IActivityHandlerConstructorWithTwoFacilities<T1, T2> {
    new (): IActivityHandlerWithTwoFacilities<T1, T2>;
    prototype: IActivityHandlerWithTwoFacilities<T1, T2>;
}
/** Do not reference. */
export interface IActivityHandlerWithFacility<T> {
    execute(inputs: {}, context: IActivityContext, facility: T, ...args: any[]): Deferrable<{}>;
}
/** Do not reference. */
export interface IActivityHandlerWithTwoFacilities<T1, T2> {
    execute(inputs: {}, context: IActivityContext, facility1: T1, facility2: T2, ...args: any[]): Deferrable<{}>;
}
/** Decorates activity handlers which require a facility. */
export declare function activate<T extends IFacility>(basis: T): (target: IActivityHandlerConstructorWithFacility<T>) => void;
/** Decorates activity handlers which require two facilities. */
export declare function activateTwo<T1 extends IFacility, T2 extends IFacility>(basis1: T1, basis2: T2): (target: IActivityHandlerConstructorWithTwoFacilities<T1, T2>) => void;
/**
 * Discovered facility types previously assigned to the specified handler.
 * @param handler An activity handler to inspect for associated facilities.
 */
export declare function query(handler: IActivityHandler): IFacility[];
