import type { EntityMetadata } from '../typings';
import type { EventArgs, EventSubscriber, FlushEventArgs, TransactionEventArgs } from './EventSubscriber';
import { EventType, type TransactionEventType } from '../enums';
export declare class EventManager {
    private readonly listeners;
    private readonly entities;
    private readonly cache;
    private readonly subscribers;
    constructor(subscribers: EventSubscriber[]);
    registerSubscriber(subscriber: EventSubscriber): void;
    dispatchEvent<T extends object>(event: TransactionEventType, args: TransactionEventArgs, meta?: EntityMetadata<T>): unknown;
    dispatchEvent<T extends object>(event: EventType.onInit, args: Partial<EventArgs<T>>, meta?: EntityMetadata<T>): unknown;
    dispatchEvent<T extends object>(event: EventType, args: Partial<EventArgs<T> | FlushEventArgs>, meta?: EntityMetadata<T>): Promise<unknown>;
    hasListeners<T>(event: EventType, meta: EntityMetadata<T>): boolean;
    clone(): EventManager;
    private getSubscribedEntities;
}
