import { SurrogateHandlerContainer } from '../containers';
import { Which } from '../which';
import type { EventMap, WhichContainers, SurrogateOptions, SurrogateHandlers, SurrogateEventManager, SurrogateHandlerOptions } from '../interfaces';
export declare class EventManager<T extends object = any> implements SurrogateEventManager<T> {
    globalOptions: SurrogateOptions;
    private readonly events;
    constructor(globalOptions?: SurrogateOptions);
    getEventMap(): EventMap<T>;
    getEventHandlers(event: string): WhichContainers<T>;
    getPreEventHandlers(event: string): SurrogateHandlerContainer<T>[];
    getPostEventHandlers(event: string): SurrogateHandlerContainer<T>[];
    eventIsHandled(event: string): boolean;
    registerHook(event: string, type: Which, handler: SurrogateHandlers<T>, options: SurrogateHandlerOptions<T>): EventManager<T>;
    registerPreHook(event: string, handler: SurrogateHandlers<T>, options?: SurrogateHandlerOptions<T>): EventManager<T>;
    registerPostHook(event: string, handler: SurrogateHandlers<T>, options?: SurrogateHandlerOptions<T>): EventManager<T>;
    private setEventHandlers;
    private getEventHandlersFor;
    private setEventHandlersFor;
    deregisterHooks(): EventManager<T>;
    deregisterHooksFor(event: string): EventManager<T>;
    deregisterPreHook(event: string, handler: SurrogateHandlers<T>): EventManager<T>;
    deregisterPostHook(event: string, handler: SurrogateHandlers<T>): EventManager<T>;
    private deregisterHookType;
    deregisterPostHooks(event: string): EventManager<T>;
    deregisterPreHooks(event: string): EventManager<T>;
}
