UNPKG

jotai

Version:

👻 Next gen state management that will spook you

2 lines (1 loc) • 3.65 kB
System.register([],function(P){"use strict";return{execute:function(){P("atom",U);let T=0;function U(r,i){const v=`atom${++T}`,u={toString:()=>v};return typeof r=="function"?u.read=r:(u.init=r,u.read=y=>y(u),u.write=(y,b,g)=>b(u,typeof g=="function"?g(y(u)):g)),i&&(u.write=i),u}const B=r=>"init"in r,F=r=>!!r.write,m=new WeakMap,V=(r,i)=>{m.set(r,i),r.catch(()=>{}).finally(()=>m.delete(r))},G=(r,i)=>{const v=m.get(r);v&&(m.delete(r),v(i))},H=(r,i)=>{r.status="fulfilled",r.value=i},I=(r,i)=>{r.status="rejected",r.reason=i},M=(r,i)=>"v"in r&&"v"in i&&Object.is(r.v,i.v),K=(r,i)=>"e"in r&&"e"in i&&Object.is(r.e,i.e),j=r=>"v"in r&&r.v instanceof Promise,p=r=>{if("e"in r)throw r.e;return r.v},_=P("createStore",()=>{const r=new WeakMap,i=new WeakMap,v=new Map,u=t=>r.get(t),y=(t,e)=>{const n=r.get(t);if(r.set(t,e),v.has(t)||v.set(t,n),n&&j(n)){const o="v"in e?e.v instanceof Promise?e.v:Promise.resolve(e.v):Promise.reject(e.e);G(n.v,o)}},b=(t,e,n)=>{const o=new Map;let s=!1;n.forEach(c=>{const l=c===t?e:u(c);l&&(o.set(c,l),e.d.get(c)!==l&&(s=!0))}),(s||e.d.size!==o.size)&&(e.d=o)},g=(t,e,n)=>{const o=u(t),s={d:(o==null?void 0:o.d)||new Map,v:e};return n&&b(t,s,n),o&&M(o,s)&&o.d===s.d?o:(y(t,s),s)},$=(t,e,n)=>{const o=u(t),s={d:(o==null?void 0:o.d)||new Map,e};return n&&b(t,s,n),o&&K(o,s)&&o.d===s.d?o:(y(t,s),s)},w=t=>{const e=u(t);if(e&&(e.d.forEach((a,f)=>{f!==t&&!i.has(f)&&w(f)}),Array.from(e.d).every(([a,f])=>a===t||u(a)===f)))return e;const n=new Set;let o=!0;const s=a=>{if(n.add(a),a===t){const d=u(a);if(d)return p(d);if(B(a))return a.init;throw new Error("no atom init")}const f=w(a);return p(f)};let c,l;const z={get signal(){return c||(c=new AbortController),c.signal},get setSelf(){return!l&&F(t)&&(l=(...a)=>{if(!o)return D(t,...a)}),l}};try{const a=t.read(s,z);if(a instanceof Promise){let f;const d=new Promise((S,X)=>{let E=!1;a.then(h=>{E||(H(d,h),S(h))},h=>{E||(I(d,h),X(h))}).finally(()=>{E||(E=!0,g(t,d,n))}),f=h=>{E||(E=!0,h.then(q=>H(d,q),q=>I(d,q)),S(h))}});return d.status="pending",V(d,S=>{S&&f(S),c==null||c.abort()}),g(t,d,n)}return g(t,a,n)}catch(a){return $(t,a,n)}finally{o=!1}},x=t=>p(w(t)),J=t=>{let e=i.get(t);return e||(e=O(t)),e},A=(t,e)=>!e.l.size&&(!e.t.size||e.t.size===1&&e.t.has(t)),N=t=>{const e=i.get(t);e&&A(t,e)&&W(t)},L=t=>{const e=i.get(t);e==null||e.t.forEach(n=>{if(n!==t){const o=u(n),s=w(n);(!o||!M(o,s))&&L(n)}})},R=(t,...e)=>{let n=!0;const o=l=>p(w(l)),s=(l,...z)=>{let a;if(l===t){if(!B(l))throw new Error("atom not writable");const f=u(l),d=g(l,z[0]);(!f||!M(f,d))&&L(l)}else a=R(l,...z);return n||C(),a},c=t.write(o,s,...e);return n=!1,c},D=(t,...e)=>{const n=R(t,...e);return C(),n},O=(t,e)=>{const n={t:new Set(e&&[e]),l:new Set};if(i.set(t,n),w(t).d.forEach((o,s)=>{const c=i.get(s);c?c.t.add(t):s!==t&&O(s,t)}),w(t),F(t)&&t.onMount){const o=t.onMount((...s)=>D(t,...s));o&&(n.u=o)}return n},W=t=>{var e;const n=(e=i.get(t))==null?void 0:e.u;n&&n(),i.delete(t);const o=u(t);o&&(j(o)&&G(o.v),o.d.forEach((s,c)=>{if(c!==t){const l=i.get(c);l&&(l.t.delete(t),A(c,l)&&W(c))}}))},Q=(t,e,n)=>{const o=new Set(e.d.keys());n==null||n.forEach((s,c)=>{if(o.has(c)){o.delete(c);return}const l=i.get(c);l&&(l.t.delete(t),A(c,l)&&W(c))}),o.forEach(s=>{const c=i.get(s);c?c.t.add(t):i.has(t)&&O(s,t)})},C=()=>{for(;v.size;){const t=Array.from(v);v.clear(),t.forEach(([e,n])=>{const o=u(e);if(o){o.d!==(n==null?void 0:n.d)&&Q(e,o,n==null?void 0:n.d);const s=i.get(e);s&&!(n&&!j(n)&&(M(n,o)||K(n,o)))&&s.l.forEach(c=>c())}})}};return{get:x,set:D,sub:(t,e)=>{const n=J(t);C();const o=n.l;return o.add(e),()=>{o.delete(e),N(t)}}}});let k;const Y=P("getDefaultStore",()=>(k||(k=_()),k))}}});