/**
 * @fileoverview
 * @author Taketoshi Aono
 */
import { Subscription } from 'rxjs';
import { Handler, StreamStore, HandlerResponse, CutPoints, Advices } from './handler';
import { IntentCallback } from './advice';
import { SubjectTree } from '../subject';
/**
 * Typedef for State handler map.
 */
export declare type StateHandlerMap = {
    [key: string]: Handler;
};
/**
 * Get registered stateHandlerRegistry.
 */
export declare function getHandlers(): StateHandlerMap;
/**
 * Register StateHandler to handler map.
 * @param newHandlers Handler map.
 */
export declare function registerHandlers(newHandlers: StateHandlerMap): {
    [key: string]: HandlerResponse;
};
/**
 * Remove specified handler from registry.
 * @param key Key or keys of target handler.
 */
export declare function removeHandler(key: string | string[]): void;
export declare abstract class StateHandler implements Handler {
    /**
     * Subject for exported stream.
     */
    protected readonly store: StreamStore;
    /**
     * Response of streams.
     */
    private readonly handlerResponse;
    private intentHandler;
    protected state: any;
    protected subject: SubjectTree;
    protected advices: Advices;
    protected cutPoints: CutPoints;
    setState(state: any): void;
    setIntent(intent: IntentCallback): void;
    setSubject(subject: SubjectTree): void;
    readonly intent: IntentCallback;
    constructor(advices?: Advices, cutPoints?: CutPoints);
    /**
     * @inheritDocs
     */
    abstract subscribe(props: {
        [key: string]: any;
    }): Subscription;
    /**
     * @inheritDocs
     */
    abstract clone<T = Handler>(...args: any[]): Handler;
    /**
     * Return response representation of stream.
     * @return Representation of stream response.
     */
    readonly response: HandlerResponse;
    /**
     * @inheritDocs
     */
    abstract push(key: string, args?: any): any;
    /**
     * @inheritDocs
     */
    callback<Args = any, ReturnType = any>(key: string, value?: any): (args?: Args) => Promise<ReturnType>;
}
