fluoro
Version:
A Meta-Framework
41 lines (40 loc) • 1.62 kB
TypeScript
/** 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;