@benev/slate
Version:
frontend web stuff
25 lines (24 loc) • 627 B
TypeScript
export type PubsubListener<A extends any[]> = (...a: A) => (void | Promise<void>);
export interface Pubsub<A extends any[] = []> {
(fn: PubsubListener<A>): () => void;
publish(...a: A): Promise<void>;
once(): Promise<A>;
clear(): void;
}
/**
* simple pub-sub mechanism.
*
* // create pubsub function
* const onCount = pubsub<[string, number]>()
*
* // subscribe
* const stop = onCount((a, b) => console.log(a, b))
*
* // publish
* onWhatever.publish("count", 123)
*
* // unsubscribe
* stop()
*
*/
export declare function pubsub<A extends any[] = []>(): Pubsub<A>;