ts-bus
Version:
<p align="center"> <img src="logo.png" width="100" height="100"/> </p>
28 lines (27 loc) • 1.25 kB
TypeScript
import { EventEmitter2 as EventEmitter } from "eventemitter2";
import { BusEvent, EventCreatorFn } from "./types";
export declare type PredicateFn<T> = (event: T) => boolean;
declare type TestPredicateFn<P> = (payload: P) => boolean;
declare type EventDefinitionOptions<P> = {
test?: (payload: P) => boolean;
};
export declare function createEventDefinition<P = void>(options?: EventDefinitionOptions<P> | TestPredicateFn<P>): <T extends string>(type: T) => {
(payload: P): {
type: T;
payload: P;
};
eventType: T;
toString(): T;
};
export declare function defineEvent<T extends BusEvent>(type: T["type"]): EventCreatorFn<T>;
export declare class EventBus {
emitter: EventEmitter;
publish<T extends BusEvent>(event: T, meta?: any): void;
subscribe<T extends BusEvent>(subscription: string, handler: (e: BusEvent) => void): () => void;
subscribe<T extends BusEvent>(subscription: EventCreatorFn<T>, handler: (e: ReturnType<typeof subscription>) => void): () => void;
subscribe<T extends BusEvent>(subscription: PredicateFn<T>, handler: (e: T) => void): () => void;
subscribe<T extends {
type: string;
}>(subscription: T["type"], handler: (e: T) => void): () => void;
}
export {};