UNPKG

@haandev/core

Version:

Core library for @haandev packages

34 lines (32 loc) 1.62 kB
type Events = Record<string, (...args: any[]) => any>; type AllListener<E extends Events, K extends keyof E> = (event: K, ...args: Parameters<E[K]>) => any; declare class EventListener<E extends Events> { private listeners; private allListeners; on<K extends keyof E>(event: K, callback: E[K]): () => void; off<K extends keyof E>(event: K, callback: E[K]): void; onAll(callback: AllListener<E, keyof E>): () => void; offAll(callback: AllListener<E, keyof E>): void; once<K extends keyof E>(event: K, callback: E[K]): void; emit<K extends keyof E>(event: K, ...args: [...Parameters<E[K]>, AbortSignal?]): Promise<{ results: ReturnType<E[K]>[]; errors: any[]; }>; emitSync<K extends keyof E>(event: K, ...args: [...Parameters<E[K]>, AbortSignal?]): { results: ReturnType<E[K]>[]; errors: any[]; }; hasListeners<K extends keyof E>(event: K): boolean; clear(event?: keyof E): void; listeningEvents(): (keyof E)[]; addListener<K extends keyof E>(event: K, callback: E[K]): void; removeListener<K extends keyof E>(event: K, callback: E[K]): void; } type EventTupleToHandler<T extends Record<string, any[]>> = { [K in keyof T]: (...args: T[K]) => void; }; type Streamable<T extends Record<string, (...args: any[]) => any>> = { [K in keyof T]: T[K] extends (...args: infer A) => any ? [K, ...A] : never; }[keyof T]; type StreamableFromEventTuples<T extends Record<string, any[]>> = Streamable<EventTupleToHandler<T>>; export { EventListener, type EventTupleToHandler, type Streamable, type StreamableFromEventTuples };