UNPKG

containerized-state

Version:

Fast and minimal state container which can be used and shared across React or non-React components.

2 lines 1.22 kB
const e={DEFAULT:`default`,COMPUTED:`computed`};var t=class t{static create(e){return new t(e)}constructor(e){let t=typeof e==`function`?e():e;this._initialValue=t,this._value=t,this._subscribers=new Set}getValue(){return this._value}async setValue(t){let n=this._value;this._value=t;let r=[];for(let i of this._subscribers){let a=Promise.resolve();if(i.type===e.COMPUTED){let{computeValue:e,cb:r,isEqual:o}=i,s=e(t),c=e(n);if(o?.(c,s)??Object.is(s,c)){a=Promise.resolve();continue}a=Promise.resolve(r(s))}else{if(Object.is(n,t)){a=Promise.resolve();continue}a=Promise.resolve(i.cb(t))}r.push(a)}await Promise.all(r)}subscribe(t,n){let{signal:r}=n??{},i={type:e.DEFAULT,cb:async e=>t(e)};this._subscribers.add(i);let a=()=>{this._subscribers.delete(i),r?.removeEventListener(`abort`,a)};return r?.addEventListener(`abort`,a),r?.aborted&&a(),a}computedSubscribe(t,n,r){let{isEqual:i,signal:a}=r??{},o={type:e.COMPUTED,computeValue:t,cb:async e=>n(e),isEqual:i};this._subscribers.add(o);let s=()=>{this._subscribers.delete(o),a?.removeEventListener(`abort`,s)};return a?.addEventListener(`abort`,s),a?.aborted&&s(),s}reset(){return this.setValue(this._initialValue)}};export{t as Container}; //# sourceMappingURL=index.js.map