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