jotai
Version:
👻 Next gen state management that will spook you
2 lines (1 loc) • 8.04 kB
JavaScript
System.register(["jotai","react"],function(E){"use strict";var u,L,C,N,W,I,M;return{setters:[function(d){u=d.atom,L=d.SECRET_INTERNAL_getScopeContext,C=d.useAtom,N=d.useSetAtom,E({useAtomValue:d.useAtomValue,useUpdateAtom:d.useSetAtom})},function(d){W=d.useContext,I=d.useCallback,M=d.useMemo}],execute:function(){E({atomFamily:Z,atomWithDefault:ue,atomWithHash:Le,atomWithObservable:We,atomWithReducer:X,atomWithReset:G,atomWithStorage:F,createJSONStorage:D,freezeAtom:se,freezeAtomCreator:ce,loadable:ke,selectAtom:re,splitAtom:le,useAtomCallback:ne,useHydrateAtoms:ze,useReducerAtom:Q,useResetAtom:K,waitForAll:we});const d=E("RESET",Symbol());function G(e){const t=u(e,(r,n,o)=>{o===d?n(t,e):n(t,typeof o=="function"?o(r(t)):o)});return t}const Y="w",B="h";function K(e,t){const r=L(t),n=W(r).s;return I(()=>n[Y](e,d),[n,e])}function Q(e,t,r){const[n,o]=C(e,r),s=I(c=>{o(i=>t(i,c))},[o,t]);return[n,s]}function X(e,t){const r=u(e,(n,o,s)=>o(r,t(n(r),s)));return r}function Z(e,t){let r=null;const n=new Map,o=s=>{let c;if(t===void 0)c=n.get(s);else for(const[a,l]of n)if(t(a,s)){c=l;break}if(c!==void 0)if(r!=null&&r(c[1],s))n.delete(s);else return c[0];const i=e(s);return n.set(s,[i,Date.now()]),i};return o.remove=s=>{if(t===void 0)n.delete(s);else for(const[c]of n)if(t(c,s)){n.delete(c);break}},o.setShouldRemove=s=>{if(r=s,!!r)for(const[c,i]of n)r(i[1],c)&&n.delete(c)},o}const q=(e,t)=>{do{const[r,...n]=t,o=e.get(r);if(!o)return;if(!n.length)return o[1];e=o[0],t=n}while(t.length)},ee=(e,t,r)=>{do{const[n,...o]=t;let s=e.get(n);if(s||(s=[new WeakMap],e.set(n,s)),!o.length){s[1]=r;return}e=s[0],t=o}while(t.length)},g=()=>{const e=new WeakMap;return(r,n)=>{const o=q(e,n);if(o)return o;const s=r();return ee(e,n,s),s}},te=g();function re(e,t,r=Object.is){return te(()=>{const n=u(()=>({}));return u(s=>{const c=t(s(e)),i=s(n);return"prev"in i&&r(i.prev,c)?i.prev:(i.prev=c,c)})},[e,t,r])}function ne(e,t){const r=M(()=>u(null,(o,s,[c,i,a])=>{try{i(e(o,s,c))}catch(l){a(l)}}),[e]),n=N(r,t);return I(o=>new Promise((s,c)=>{n([o,s,c])}),[n])}const oe=g(),z=e=>{if(typeof e!="object"||e===null)return;Object.freeze(e);const t=Object.getOwnPropertyNames(e);for(const r of t){const n=e[r];z(n)}return e};function se(e){return oe(()=>u(r=>z(r(e)),(r,n,o)=>n(e,o)),[e])}function ce(e){return(...t)=>{const r=e(...t),n=r.read;return r.read=o=>z(n(o)),r}}const ae=g(),k=e=>!!e.write,ie=e=>typeof e=="function";function le(e,t){return ae(()=>{const r=new WeakMap,n=(a,l)=>{let f=r.get(a);if(f)return f;const h=l&&r.get(l),m=[],p=[];return a.forEach((O,v)=>{const b=t?t(O):v;p[v]=b;const U=h&&h.atomList[h.keyList.indexOf(b)];if(U){m[v]=U;return}const $e=u(()=>({})),V=A=>{const S=A($e),P=A(o),w=A(e),_=n(w,P.prev).keyList.indexOf(b);if(_<0||_>=w.length){if("prev"in S)return S.prev;throw new Error("splitAtom: index out of bounds for read")}return S.prev=w[_],w[_]},je=(A,S,P)=>{const w=A(o),y=A(e),R=n(y,w.prev).keyList.indexOf(b);if(R<0||R>=y.length)throw new Error("splitAtom: index out of bounds for write");const Te=ie(P)?P(y[R]):P;S(e,[...y.slice(0,R),Te,...y.slice(R+1)])};m[v]=k(e)?u(V,je):u(V)}),h&&h.keyList.length===p.length&&h.keyList.every((O,v)=>O===p[v])?f=h:f={atomList:m,keyList:p},r.set(a,f),f},o=u(()=>({})),s=a=>{const l=a(o),f=a(e),h=n(f,l.prev);return l.prev=f,h.atomList},c=(a,l,f)=>{const h=a(i).indexOf(f);if(h>=0){const m=a(e);l(e,[...m.slice(0,h),...m.slice(h+1)])}},i=k(e)?u(s,c):u(s);return i},t?[e,t]:[e])}function ue(e){const t=Symbol(),r=u(t),n=u(o=>{const s=o(r);return s!==t?s:e(o)},(o,s,c)=>c===d?s(r,t):s(r,typeof c=="function"?c(o(n)):c));return n}var me=Object.defineProperty,fe=Object.defineProperties,he=Object.getOwnPropertyDescriptors,$=Object.getOwnPropertySymbols,de=Object.prototype.hasOwnProperty,pe=Object.prototype.propertyIsEnumerable,j=(e,t,r)=>t in e?me(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,ve=(e,t)=>{for(var r in t||(t={}))de.call(t,r)&&j(e,r,t[r]);if($)for(var r of $(t))pe.call(t,r)&&j(e,r,t[r]);return e},be=(e,t)=>fe(e,he(t));const Ae=g();function we(e){const t=()=>{const r=ye(e);return u(o=>{const s=[],c=r.map((i,a)=>{try{return o(i)}catch(l){if(l instanceof Promise)s[a]=l;else throw l}});if(s.length)throw Promise.all(s);return ge(e,c)})};return Array.isArray(e)?Ae(t,e):t()}const ye=e=>Array.isArray(e)?e:Object.getOwnPropertyNames(e).map(t=>e[t]),ge=(e,t)=>Array.isArray(e)?t:Object.getOwnPropertyNames(e).reduce((r,n,o)=>be(ve({},r),{[n]:t[o]}),{});var Oe=Object.defineProperty,Se=Object.defineProperties,Pe=Object.getOwnPropertyDescriptors,T=Object.getOwnPropertySymbols,_e=Object.prototype.hasOwnProperty,Re=Object.prototype.propertyIsEnumerable,x=(e,t,r)=>t in e?Oe(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,Ie=(e,t)=>{for(var r in t||(t={}))_e.call(t,r)&&x(e,r,t[r]);if(T)for(var r of T(t))Re.call(t,r)&&x(e,r,t[r]);return e},Ee=(e,t)=>Se(e,Pe(t));function D(e){return{getItem:t=>{const r=e().getItem(t);return r instanceof Promise?r.then(n=>JSON.parse(n||"")):JSON.parse(r||"")},setItem:(t,r)=>e().setItem(t,JSON.stringify(r)),removeItem:t=>e().removeItem(t)}}const J=D(()=>localStorage);J.subscribe=(e,t)=>{const r=n=>{n.key===e&&n.newValue&&t(JSON.parse(n.newValue))};return window.addEventListener("storage",r),()=>{window.removeEventListener("storage",r)}};function F(e,t,r=J){const n=()=>{try{const c=r.getItem(e);return c instanceof Promise?c.catch(()=>t):c}catch{return t}},o=u(r.delayInit?t:n());return o.onMount=c=>{let i;if(r.subscribe&&(i=r.subscribe(e,c)),r.delayInit){const a=n();a instanceof Promise?a.then(c):c(a)}return i},u(c=>c(o),(c,i,a)=>{if(a===d)return i(o,t),r.removeItem(e);const l=typeof a=="function"?a(c(o)):a;return i(o,l),r.setItem(e,l)})}function Le(e,t,r){const n=(r==null?void 0:r.serialize)||JSON.stringify,o=(r==null?void 0:r.deserialize)||JSON.parse,s=(r==null?void 0:r.subscribe)||(i=>(window.addEventListener("hashchange",i),()=>{window.removeEventListener("hashchange",i)})),c=Ee(Ie({getItem:i=>{const l=new URLSearchParams(location.hash.slice(1)).get(i);if(l===null)throw new Error("no value stored");return o(l)},setItem:(i,a)=>{const l=new URLSearchParams(location.hash.slice(1));l.set(i,n(a)),r!=null&&r.replaceState?history.replaceState(null,"","#"+l.toString()):location.hash=l.toString()},removeItem:i=>{const a=new URLSearchParams(location.hash.slice(1));a.delete(i),r!=null&&r.replaceState?history.replaceState(null,"","#"+a.toString()):location.hash=a.toString()}},(r==null?void 0:r.delayInit)&&{delayInit:!0}),{subscribe:(i,a)=>s(()=>{const h=new URLSearchParams(location.hash.slice(1)).get(i);a(h!==null?o(h):t)})});return F(e,t,c)}function We(e){const t=u(n=>{var o;let s=null,c=e(n);const i=(o=c[Symbol.observable])==null?void 0:o.call(c);i&&(c=i);const a=u(new Promise((p,O)=>{s=(v,b)=>{b?O(b):p(v)}}));let l=()=>{throw new Error("setting data without mount")};const f=p=>{s?(s(p),s=null,m&&!l&&(m.unsubscribe(),m=null)):l(p)},h=p=>{s?(s(null,p),s=null,m&&!l&&(m.unsubscribe(),m=null)):l(Promise.reject(p))};let m=null;return m=c.subscribe(f,h),s||(m.unsubscribe(),m=null),a.onMount=p=>(l=p,m||(m=c.subscribe(f,h)),()=>{m==null||m.unsubscribe(),m=null}),{dataAtom:a,observable:c}});return u(n=>{const{dataAtom:o}=n(t);return n(o)},(n,o,s)=>{const{observable:c}=n(t);if("next"in c)c.next(s);else throw new Error("observable is not subject")})}const H=new WeakMap;function ze(e,t){const r=L(t),n=W(r),o=n.s,s=Ce(n),c=[];for(const i of e){const a=i[0];s.has(a)||(s.add(a),c.push(i))}c.length&&o[B](c)}function Ce(e){let t=H.get(e);return t||(t=new WeakSet,H.set(e,t)),t}const Ne=g(),Me={state:"loading"};function ke(e){return Ne(()=>{const t=new WeakMap,r=u(o=>{let s;try{const a=o(e);return u({state:"hasData",data:a})}catch(a){if(a instanceof Promise)s=a;else return u({state:"hasError",error:a})}const c=t.get(s);if(c)return c;const i=u(Me,async(a,l)=>{try{const f=await a(e,{unstable_promise:!0});l(i,{state:"hasData",data:f})}catch(f){l(i,{state:"hasError",error:f})}});return i.onMount=a=>{a()},t.set(s,i),i});return u(o=>{const s=o(r);return o(s)})},[e])}}}});