import { Expression } from '../../../../common';
import { SystemEvent } from '../../event';
import { SystemEventHandlerFindByRef, SystemEventHandlerRecord, SystemEventHandlerRef } from '../models';
/**
 * ** Registry for Events Handlers.
 */
export declare class SystemEventHandlerRegistry {
    /**
     * ** Returns Singleton instance.
     */
    static get instance(): SystemEventHandlerRegistry;
    private static _instance;
    private readonly handlers;
    /**
     * ** Constructor.
     *
     *    - Private constructor to make it Singleton.
     */
    private constructor();
    /**
     * ** Register Handler for SystemEvent/s.
     */
    static register<T>(knownEvents: SystemEvent | SystemEvent[], handlerRef: SystemEventHandlerRef, handlerClassInstance: T, handlerFilterExpression?: Expression): boolean;
    /**
     * ** Unregister Handler from registry.
     *
     *   - It should be done in ngOnDestroy() method in Services/Components to avoid potential memory leaks.
     */
    static unregister(knownEvents: SystemEvent | SystemEvent[], handlerRef: SystemEventHandlerRef): boolean;
    /**
     * ** Find Handler by reference looking through the Registry.
     */
    static findHandlerByReference(eventId: SystemEvent, handlerRef: SystemEventHandlerRef, handlerClassInstance?: any): SystemEventHandlerFindByRef;
    /**
     * ** Prepare array of handlers for execution of post or send.
     */
    static getPreparedArrayOfHandlers(eventId: SystemEvent, reversed?: boolean): SystemEventHandlerRecord[];
    private register;
    private unregister;
    private findHandlerByReference;
    private getPreparedArrayOfHandlers;
    /**
     * ** Generic abstraction for Register and Unregister handlers.
     */
    private execute;
    /**
     * ** Evaluate Handler register.
     */
    private executeRegister;
    /**
     * ** Evaluate Handler unregister.
     */
    private executeUnregister;
    /**
     * ** Prepares Event names in Array of strings format.
     */
    private prepareEventNames;
    /**
     * ** Returns special Handlers.
     */
    private getSpecialHandlers;
}
