UNPKG

fluoro

Version:
41 lines (40 loc) 1.62 kB
/** Mapping of event names to their callback function signatures */ export interface EventsMapping { /** * Emitted when the bot is ready. */ ready(): void; /** * Emitted when an error occurs. * * @param error - The error object */ error(error: Error): void; /** * Emitted when the bot is disposed. */ dispose(): void; } /** Utility type to extract only the event callback functions from a type */ export type EventsList<T = EventsMapping> = { [K in keyof T]: T[K] extends (...args: any) => any ? Parameters<T[K]>[1] extends never | undefined | null ? Parameters<T[K]>[0] : [...Parameters<T[K]>] : never; }; type EventsTool<T> = { [K in keyof T]: T[K] extends EventsCallback ? T[K] : never; }; type EventsCallback = (...args: any) => unknown; /** * Class for managing and emitting events. * * @template A - The type of events mapping, defaults to EventsMapping */ export declare class Events<A = EventsMapping> { protected list: Map<keyof EventsTool<A>, Set<EventsTool<A>[keyof EventsTool<A>]>>; emit<T extends keyof EventsTool<A>>(type: T, ...data: [...Parameters<EventsTool<A>[T]>]): void; parallel<T extends keyof EventsTool<A>>(type: T, ...data: [...Parameters<EventsTool<A>[T]>]): Promise<void>; on<T extends keyof EventsTool<A>>(type: T, callback: EventsTool<A>[T]): void; once<T extends keyof EventsTool<A>>(type: T, callback: EventsTool<A>[T]): void; off<T extends keyof EventsTool<A>>(type: T, callback: EventsTool<A>[T]): void; offAll<T extends keyof EventsTool<A>>(type: T): void; } export default Events;