UNPKG

broadcast

Version:

A promises based notification channel

3 lines (2 loc) 703 B
/*! (c) Andrea Giammarchi - ISC */ const t=new WeakMap;class e{constructor(){t.set(this,{v:new Map,f:new Map})}all(e,s){const{v:n,f:o}=t.get(this);o.has(e)||o.set(e,new Set),o.get(e).add(s),n.has(e)&&Promise.resolve(n.get(e)).then(s)}drop(e){const{v:s,f:n}=t.get(this);1<arguments.length?n.has(e)&&n.get(e).delete(arguments[1]):(s.delete(e),n.delete(e))}that(e){if(!(1<arguments.length))return t=>this.that(e,t);{const s=arguments[1],{v:n,f:o}=t.get(this);if(n.set(e,s),o.has(e))for(const t of o.get(e))t(s)}}when(e){const{v:s}=t.get(this);return s.has(e)?Promise.resolve(s.get(e)):new Promise((t=>{const s=n=>{this.drop(e,s),t(n)};this.all(e,s)}))}}const s=new e;export{e as Broadcast,s as broadcast};