export declare class EventToken<TEvent = void> {
    readonly name: string;
    constructor(name: string);
}
type EventHandler<TEvent> = (event: TEvent) => void | Promise<void>;
type ListenerMethodKey = string | symbol;
export interface ListenerMethodMetadata<TEvent = unknown> {
    token: EventToken<TEvent>;
    methodName: ListenerMethodKey;
    order: number;
}
export declare class EventBus {
    private handlers;
    listen<TEvent>(token: EventToken<TEvent>, handler: EventHandler<TEvent>, order?: number): () => void;
    dispatch<TEvent>(token: EventToken<TEvent>, event: TEvent): Promise<void>;
}
declare function listen<TEvent>(token: EventToken<TEvent>, order?: number): MethodDecorator;
export declare const event: {
    listen: typeof listen;
};
export declare const eventDispatcher: {
    listen: typeof listen;
};
export declare function getListenerMethodMetadata(instanceOrPrototype: object): ListenerMethodMetadata[];
export {};
//# sourceMappingURL=event-bus.d.ts.map