@haandev/core
Version:
Core library for @haandev packages
34 lines (32 loc) • 1.62 kB
TypeScript
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 };