containerized-state
Version:
Fast and minimal state container which can be used and shared across React or non-React components.
2 lines • 1.28 kB
JavaScript
var b={DEFAULT:"default",COMPUTED:"computed"};var m=class d{static create(s){return new d(s)}constructor(s){let i=typeof s=="function"?s():s;this._value=i,this._subscribers=new Set}getValue(){return this._value}async setValue(s){var o;let i=this._value;this._value=s;let t=[];for(let e of this._subscribers){let r=Promise.resolve();if(e.type===b.DEFAULT){if(Object.is(i,s)){r=Promise.resolve();continue}r=Promise.resolve(e.cb(s))}else if(e.type===b.COMPUTED){let{computeValue:c,cb:u,isEqual:n}=e,a=c(s),l=c(i);if(!!((o=n==null?void 0:n(l,a))!=null?o:Object.is(a,l))){r=Promise.resolve();continue}r=Promise.resolve(u(a))}t.push(r)}await Promise.all(t)}subscribe(s,i){let{signal:t}=i!=null?i:{},o=async c=>s(c),e={type:b.DEFAULT,cb:o};this._subscribers.add(e);let r=()=>{this._subscribers.delete(e),t==null||t.removeEventListener("abort",r)};return t==null||t.addEventListener("abort",r),t!=null&&t.aborted&&r(),r}computedSubscribe(s,i,t){let{isEqual:o,signal:e}=t!=null?t:{},r=async n=>i(n),c={type:b.COMPUTED,computeValue:s,cb:r,isEqual:o};this._subscribers.add(c);let u=()=>{this._subscribers.delete(c),e==null||e.removeEventListener("abort",u)};return e==null||e.addEventListener("abort",u),e!=null&&e.aborted&&u(),u}};export{m as Container};
//# sourceMappingURL=index.js.map