import { EventFilter, Listener } from './Types';
export interface GlobalOption {
    separator: string;
}
export interface EventInfo {
    separator: string;
    event: string;
}
export interface EventHistory {
    event: string;
    listenerId: string;
    timestamp: number;
    args: unknown[];
}
export interface ThrottleDebounceOption {
    delay: number;
    leading?: boolean;
    trailing?: boolean;
}
export interface Option {
    filter?: EventFilter;
    /**
     * Throttle configuration. Can be a number (delay in ms) or an object with delay, leading, and trailing.
     */
    throttle?: number | ThrottleDebounceOption;
    /**
     * Debounce configuration. Can be a number (delay in ms) or an object with delay, leading, and trailing.
     */
    debounce?: number | ThrottleDebounceOption;
    priority?: number;
    separator?: string;
    concurrency?: number;
}
export interface EventListener {
    listener: Listener;
    priority: number;
    eventInfo: EventInfo;
    concurrency: number;
    id: string;
}
export interface EventNamespace {
    [event: string]: {
        listeners: EventListener[];
        throttled?: boolean;
    };
}
export type Hook = (eventName: string, ...args: unknown[]) => void | Promise<void>;
export interface Hooks {
    beforeEmit: Hook[];
    afterEmit: Hook[];
}
