@glandjs/events
Version:
A fast, zero‑dependency event broker and message bus for building scalable, event‑driven applications.
15 lines (14 loc) • 845 B
TypeScript
export type IOEvent<TPayload = any, TReturn = void> = {
payload: TPayload;
return: TReturn;
};
export type EventType = string;
export type EventRecord = Record<EventType, any>;
export type Events<TEvents extends EventRecord> = keyof TEvents & string;
export type EventPayload<TEvents extends EventRecord, K extends Events<TEvents>> = TEvents[K] extends IOEvent<infer P, any> ? P : TEvents[K];
export type EventReturn<TEvents extends EventRecord, K extends Events<TEvents>> = TEvents[K] extends IOEvent<any, infer R> ? R : void;
export type Listener<Payload = any, Return = void> = (payload: Payload) => Return;
export type BrokerId = string;
export type ChannelEvents<TPrefix extends EventType, TEvents extends EventRecord> = {
[K in keyof TEvents as K extends `${TPrefix}${EventType}${infer Event}` ? Event : never]: TEvents[K];
};