UNPKG

@benev/slate

Version:
38 lines 946 B
import { deferPromise } from "./defer-promise.js"; /** * 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 function pubsub() { const set = new Set(); function subscribe(fn) { set.add(fn); return () => { set.delete(fn); }; } subscribe.publish = async (...a) => { await Promise.all([...set].map(fn => fn(...a))); }; subscribe.clear = () => set.clear(); subscribe.once = async () => { const { promise, resolve } = deferPromise(); const unsubscribe = subscribe((...a) => { resolve(a); unsubscribe(); }); return promise; }; return subscribe; } //# sourceMappingURL=pubsub.js.map