UNPKG

@cdellacqua/signals

Version:

A simple signal pattern implementation that enables reactive programming

2 lines (1 loc) 1.4 kB
(function(r,o){typeof exports=="object"&&typeof module!="undefined"?o(exports):typeof define=="function"&&define.amd?define(["exports"],o):(r=typeof globalThis!="undefined"?globalThis:r||self,o(r.signals={}))})(this,function(r){"use strict";function o(s,t){const c=f(),b=e=>{c.emit(t(e))},i=()=>{n&&c.nOfSubscriptions()===0&&(n(),n=null)};let n=null;return{nOfSubscriptions:c.nOfSubscriptions,subscribe:e=>{const u=c.subscribe(e);return n||(n=s.subscribe(b)),()=>{u(),i()}},subscribeOnce:e=>{const u=c.subscribeOnce(d=>{e(d),i()});return n||(n=s.subscribe(b)),()=>{u(),i()}}}}function l(s){const t=f(),c=n=>{t.emit(n)},b=()=>{i&&t.nOfSubscriptions()===0&&(i.forEach(n=>n()),i=null)};let i=null;return{nOfSubscriptions:t.nOfSubscriptions,subscribe:n=>{const e=t.subscribe(n);return i||(i=s.map(u=>u.subscribe(c))),()=>{e(),b()}},subscribeOnce:n=>{const e=t.subscribeOnce(u=>{n(u),b()});return i||(i=s.map(u=>u.subscribe(c))),()=>{e(),b()}}}}function f(){const s=[];function t(n){if(s.length!==0)for(const e of s.slice())e(n)}function c(n){const e=s.indexOf(n);e!==-1&&s.splice(e,1)}function b(n){return s.indexOf(n)===-1&&s.push(n),()=>c(n)}function i(n){const e=b(u=>{e(),n(u)});return e}return{emit:t,subscribe:b,subscribeOnce:i,nOfSubscriptions(){return s.length}}}r.coalesceSignals=l,r.deriveSignal=o,r.makeSignal=f,Object.defineProperty(r,"__esModule",{value:!0}),r[Symbol.toStringTag]="Module"});