UNPKG

@cdellacqua/signals

Version:

A simple signal pattern implementation that enables reactive programming

2 lines 1.35 kB
(function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports):typeof define==`function`&&define.amd?define([`exports`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.signals={}))})(this,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function t(e,t){let n=r(),i=e=>{n.emit(t(e))},a=()=>{o&&n.nOfSubscriptions()===0&&(o(),o=null)},o=null;return{nOfSubscriptions:n.nOfSubscriptions,subscribe:t=>{let r=n.subscribe(t);return o||=e.subscribe(i),()=>{r(),a()}},subscribeOnce:t=>{let r=n.subscribeOnce(e=>{t(e),a()});return o||=e.subscribe(i),()=>{r(),a()}}}}function n(e){let t=r(),n=e=>{t.emit(e)},i=()=>{a&&t.nOfSubscriptions()===0&&(a.forEach(e=>e()),a=null)},a=null;return{nOfSubscriptions:t.nOfSubscriptions,subscribe:r=>{let o=t.subscribe(r);return a||=e.map(e=>e.subscribe(n)),()=>{o(),i()}},subscribeOnce:r=>{let o=t.subscribeOnce(e=>{r(e),i()});return a||=e.map(e=>e.subscribe(n)),()=>{o(),i()}}}}function r(){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}}}e.coalesceSignals=n,e.deriveSignal=t,e.makeSignal=r}); //# sourceMappingURL=index.umd.js.map