@cdellacqua/signals
Version:
A simple signal pattern implementation that enables reactive programming
2 lines (1 loc) • 1.2 kB
JavaScript
;Object.defineProperty(exports,"__esModule",{value:!0});exports[Symbol.toStringTag]="Module";function f(e,u){const c=t(),b=s=>{c.emit(u(s))},i=()=>{n&&c.nOfSubscriptions()===0&&(n(),n=null)};let n=null;return{nOfSubscriptions:c.nOfSubscriptions,subscribe:s=>{const r=c.subscribe(s);return n||(n=e.subscribe(b)),()=>{r(),i()}},subscribeOnce:s=>{const r=c.subscribeOnce(o=>{s(o),i()});return n||(n=e.subscribe(b)),()=>{r(),i()}}}}function l(e){const u=t(),c=n=>{u.emit(n)},b=()=>{i&&u.nOfSubscriptions()===0&&(i.forEach(n=>n()),i=null)};let i=null;return{nOfSubscriptions:u.nOfSubscriptions,subscribe:n=>{const s=u.subscribe(n);return i||(i=e.map(r=>r.subscribe(c))),()=>{s(),b()}},subscribeOnce:n=>{const s=u.subscribeOnce(r=>{n(r),b()});return i||(i=e.map(r=>r.subscribe(c))),()=>{s(),b()}}}}function t(){const e=[];function u(n){if(e.length!==0)for(const s of e.slice())s(n)}function c(n){const s=e.indexOf(n);s!==-1&&e.splice(s,1)}function b(n){return e.indexOf(n)===-1&&e.push(n),()=>c(n)}function i(n){const s=b(r=>{s(),n(r)});return s}return{emit:u,subscribe:b,subscribeOnce:i,nOfSubscriptions(){return e.length}}}exports.coalesceSignals=l;exports.deriveSignal=f;exports.makeSignal=t;