@glandjs/events
Version:
A fast, zero‑dependency event broker and message bus for building scalable, event‑driven applications.
41 lines (40 loc) • 2.43 kB
TypeScript
import type { ChannelEvents, EventPayload, EventRecord, EventReturn, Events, Listener } from '../../types/common.types';
import type { Channel } from '../channel.interface';
import type { EventOptions } from './event-options.interface';
export interface OnMethod<TEvents extends EventRecord> {
on<K extends Events<TEvents>>(event: K, listener: Listener<EventPayload<TEvents, K>, void>, options?: EventOptions): this;
on<K extends Events<TEvents>>(event: K, listener: null | Listener<EventPayload<TEvents, K>, void>, options: EventOptions & {
watch: true;
}): Promise<EventPayload<TEvents, K>>;
}
export interface OnceMethod<TEvents extends EventRecord> {
once<K extends Events<TEvents>>(event: K, listener: Listener<EventPayload<TEvents, K>, void>): this;
once<K extends Events<TEvents>>(event: K, listener: Listener<EventPayload<TEvents, K>, void> | null, options: EventOptions & {
watch: true;
}): Promise<EventPayload<TEvents, K>>;
}
export interface CallMethod<TEvents extends EventRecord> {
call<K extends Events<TEvents>>(event: K, data: EventPayload<TEvents, K>): EventReturn<TEvents, K>;
call<K extends Events<TEvents>>(event: K, data: EventPayload<TEvents, K>, strategy: 'all'): EventReturn<TEvents, K>[];
}
export interface OffMethod<TEvents extends EventRecord> {
off<K extends Events<TEvents>>(event: K, listener?: Listener<EventPayload<TEvents, K>, void>): this;
}
export interface EmitMethod<TEvents extends EventRecord> {
emit<K extends Events<TEvents>>(event: K, payload: EventPayload<TEvents, K>, options?: EventOptions): this;
}
export interface GetListenerMethod<TEvents extends EventRecord> {
getListener<K extends Events<TEvents>>(event: K): Listener<EventPayload<TEvents, K>, EventReturn<TEvents, K>>[];
}
export interface ChannelMethod<TEvents extends EventRecord> {
channel<TPrefix extends Events<TEvents>, TChannelEvents extends ChannelEvents<TPrefix, TEvents> = ChannelEvents<TPrefix, TEvents>>(name: TPrefix): Channel<TChannelEvents>;
}
export interface ShutdownMethod {
shutdown(): void;
}
export interface BroadcastMethod<TEvents extends EventRecord> {
broadcast<K extends Events<TEvents>>(event: K, payload: EventPayload<TEvents, K>, options?: EventOptions): this;
}
export interface WatchMethod<TEvents extends EventRecord> {
watch<K extends Events<TEvents>>(event: K, timeoutMs?: number): Promise<EventPayload<TEvents, K>>;
}