UNPKG

@glandjs/events

Version:

A fast, zero‑dependency event broker and message bus for building scalable, event‑driven applications.

15 lines (14 loc) 845 B
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]; };