UNPKG

containerized-state

Version:

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

2 lines 1.76 kB
"use strict";var m=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var E=Object.getOwnPropertyNames;var v=Object.prototype.hasOwnProperty;var C=(o,e)=>{for(var r in e)m(o,r,{get:e[r],enumerable:!0})},T=(o,e,r,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of E(e))!v.call(o,i)&&i!==r&&m(o,i,{get:()=>e[i],enumerable:!(t=y(e,i))||t.enumerable});return o};var P=o=>T(m({},"__esModule",{value:!0}),o);var f={};C(f,{Container:()=>d});module.exports=P(f);var a={DEFAULT:"default",COMPUTED:"computed"};var d=class o{static create(e){return new o(e)}constructor(e){let r=typeof e=="function"?e():e;this._value=r,this._subscribers=new Set}getValue(){return this._value}async setValue(e){var i;let r=this._value;this._value=e;let t=[];for(let s of this._subscribers){let c=Promise.resolve();if(s.type===a.DEFAULT){if(Object.is(r,e)){c=Promise.resolve();continue}c=Promise.resolve(s.cb(e))}else if(s.type===a.COMPUTED){let{computeValue:u,cb:n,isEqual:b}=s,l=u(e),p=u(r);if(!!((i=b==null?void 0:b(p,l))!=null?i:Object.is(l,p))){c=Promise.resolve();continue}c=Promise.resolve(n(l))}t.push(c)}await Promise.all(t)}subscribe(e,r){let{signal:t}=r!=null?r:{},i=async u=>e(u),s={type:a.DEFAULT,cb:i};this._subscribers.add(s);let c=()=>{this._subscribers.delete(s),t==null||t.removeEventListener("abort",c)};return t==null||t.addEventListener("abort",c),t!=null&&t.aborted&&c(),c}computedSubscribe(e,r,t){let{isEqual:i,signal:s}=t!=null?t:{},c=async b=>r(b),u={type:a.COMPUTED,computeValue:e,cb:c,isEqual:i};this._subscribers.add(u);let n=()=>{this._subscribers.delete(u),s==null||s.removeEventListener("abort",n)};return s==null||s.addEventListener("abort",n),s!=null&&s.aborted&&n(),n}};0&&(module.exports={Container}); //# sourceMappingURL=index.cjs.map