@cdellacqua/signals
Version:
A simple signal pattern implementation that enables reactive programming
2 lines • 1.16 kB
JavaScript
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});function e(e,t){let r=n(),i=e=>{r.emit(t(e))},a=()=>{o&&r.nOfSubscriptions()===0&&(o(),o=null)},o=null;return{nOfSubscriptions:r.nOfSubscriptions,subscribe:t=>{let n=r.subscribe(t);return o||=e.subscribe(i),()=>{n(),a()}},subscribeOnce:t=>{let n=r.subscribeOnce(e=>{t(e),a()});return o||=e.subscribe(i),()=>{n(),a()}}}}function t(e){let t=n(),r=e=>{t.emit(e)},i=()=>{a&&t.nOfSubscriptions()===0&&(a.forEach(e=>e()),a=null)},a=null;return{nOfSubscriptions:t.nOfSubscriptions,subscribe:n=>{let o=t.subscribe(n);return a||=e.map(e=>e.subscribe(r)),()=>{o(),i()}},subscribeOnce:n=>{let o=t.subscribeOnce(e=>{n(e),i()});return a||=e.map(e=>e.subscribe(r)),()=>{o(),i()}}}}function n(){let e=[];function t(t){if(e.length!==0)for(let n of e.slice())n(t)}function n(t){let n=e.indexOf(t);n!==-1&&e.splice(n,1)}function r(t){return e.indexOf(t)===-1&&e.push(t),()=>n(t)}function i(e){let t=r(n=>{t(),e(n)});return t}return{emit:t,subscribe:r,subscribeOnce:i,nOfSubscriptions(){return e.length}}}exports.coalesceSignals=t,exports.deriveSignal=e,exports.makeSignal=n;
//# sourceMappingURL=index.cjs.map