import { $EventOptions, $MutArgEventHandler } from "../event-base/$types.js"; export interface $QueneEventEmitter { on(eventname: K, handler: $InOutEventHandler, opts?: $EventOptions): unknown; once(eventname: K, handler: $InOutEventHandler, opts?: Omit<$EventOptions, "once">): unknown; has(eventname: K, handler?: $InOutEventHandler): boolean; off(eventname: K, handler: $InOutEventHandler): boolean; emit(eventname: K, data: EM[K]["in"]): EM[K]["out"] | Promise | undefined; emitToAsyncGenerator(eventname: K, data: EM[K]["in"]): AsyncGenerator; TYPE: EM; } export interface $SyncQueneEventEmitter extends $QueneEventEmitter { on(eventname: K, handler: $InOutSyncEventHandler, opts?: $EventOptions): void; has(eventname: K, handler?: $InOutSyncEventHandler): boolean; off(eventname: K, handler: $InOutSyncEventHandler): boolean; emit(eventname: K, data: EM[K]["in"]): EM[K]["out"] | undefined; } export declare type $EventInOut = { in: I; out: O; }; export declare type $UnknownEventInOut = $EventInOut; export declare type $EventHandler = (data: A, next: () => R | Promise) => R | Promise | AsyncGenerator | Generator; export declare type $SyncEventHandler = (data: A, next: () => R) => R; export declare type $InOutSyncEventHandler = $SyncEventHandler; export declare type $InOutEventHandler = $EventHandler; export declare type $EventInOutMap = { [key: string]: $UnknownEventInOut; }; export declare type $EventInOutHanldersMap = { [key in keyof EM]?: Map<$InOutEventHandler, $EventOptions>; }; declare type $InnerErrorInOutHandlerArg = [ unknown, { eventname: K; arg: EM[K]["in"]; } ]; export declare type $InnerErrorInOutHandler = $MutArgEventHandler<$InnerErrorInOutHandlerArg>; declare type _IOEM_To_Object = { [K in keyof EM]: { eventname: K; args: EM[K]["in"]; }; }; export declare type $InnerAnyInOutHandlerArg = [ _IOEM_To_Object[keyof _IOEM_To_Object] ]; export declare type $InnerAnyInOutHandler = $MutArgEventHandler<$InnerAnyInOutHandlerArg>; export {};