UNPKG

jotai

Version:

👻 Next gen state management that will spook you

2 lines (1 loc) • 8.55 kB
System.register(["jotai","react"],function(P){"use strict";var m,I,C,M,V,T,W,j;return{setters:[function(b){m=b.atom,I=b.SECRET_INTERNAL_getScopeContext,C=b.useAtom,M=b.useSetAtom,V=b.SECRET_INTERNAL_registerPromiseAbort,P({useAtomValue:b.useAtomValue,useUpdateAtom:b.useSetAtom})},function(b){T=b.useContext,W=b.useCallback,j=b.useMemo}],execute:function(){P({abortableAtom:pt,atomFamily:B,atomWithDefault:it,atomWithHash:dt,atomWithObservable:bt,atomWithReducer:q,atomWithReset:F,atomWithStorage:U,createJSONStorage:J,freezeAtom:nt,freezeAtomCreator:rt,loadable:St,selectAtom:Z,splitAtom:at,useAtomCallback:tt,useHydrateAtoms:wt,useReducerAtom:K,useResetAtom:G,waitForAll:lt});const b=P("RESET",Symbol());function F(t){const e=m(t,(o,s,r)=>{const n=typeof r=="function"?r(o(e)):r;s(e,n===b?t:n)});return e}const H="w",$="h";function G(t,e){const o=I(e),s=T(o).s;return W(()=>s[H](t,b),[s,t])}function K(t,e,o){const[s,r]=C(t,o),n=W(a=>{r(i=>e(i,a))},[r,e]);return[s,n]}function q(t,e){const o=m(t,(s,r,n)=>r(o,e(s(o),n)));return o}function B(t,e){let o=null;const s=new Map,r=n=>{let a;if(e===void 0)a=s.get(n);else for(const[c,u]of s)if(e(c,n)){a=u;break}if(a!==void 0)if(o!=null&&o(a[1],n))r.remove(n);else return a[0];const i=t(n);return s.set(n,[i,Date.now()]),i};return r.remove=n=>{if(e===void 0)s.delete(n);else for(const[a]of s)if(e(a,n)){s.delete(a);break}},r.setShouldRemove=n=>{if(o=n,!!o)for(const[a,i]of s)o(i[1],a)&&s.delete(a)},r}const Q=(t,e)=>{do{const[o,...s]=e,r=t.get(o);if(!r)return;if(!s.length)return r[1];t=r[0],e=s}while(e.length)},X=(t,e,o)=>{do{const[s,...r]=e;let n=t.get(s);if(n||(n=[new WeakMap],t.set(s,n)),!r.length){n[1]=o;return}t=n[0],e=r}while(e.length)},E=()=>{const t=new WeakMap;return(e,o)=>{const s=Q(t,o);if(s)return s;const r=e();return X(t,o,r),r}},Y=E();function Z(t,e,o=Object.is){return Y(()=>{const s=m(()=>({}));return m(r=>{const n=e(r(t)),a=r(s);return"prev"in a&&o(a.prev,n)?a.prev:(a.prev=n,n)})},[t,e,o])}function tt(t,e){const o=j(()=>m(null,(r,n,[a,i,c])=>{try{i(t(r,n,a))}catch(u){c(u)}}),[t]),s=M(o,e);return W(r=>{let n=!0,a={};const i=new Promise((c,u)=>{s([r,l=>{n?a={v:l}:c(l)},l=>{n?a={e:l}:u(l)}])});if(n=!1,"e"in a)throw a.e;return"v"in a?a.v:i},[s])}const et=E(),_=t=>{if(typeof t!="object"||t===null)return;Object.freeze(t);const e=Object.getOwnPropertyNames(t);for(const o of e){const s=t[o];_(s)}return t};function nt(t){return et(()=>m(e=>_(e(t)),(e,o,s)=>o(t,s)),[t])}function rt(t){return(...e)=>{const o=t(...e),s=o.read;return o.read=r=>_(s(r)),o}}const ot=E(),z=t=>!!t.write,st=t=>typeof t=="function";function at(t,e){return ot(()=>{const o=new WeakMap,s=(c,u)=>{let l=o.get(c);if(l)return l;const f=u&&o.get(u),h=[],d=[];return c.forEach((S,A)=>{const w=e?e(S):A;d[A]=w;const p=f&&f.atomList[f.keyList.indexOf(w)];if(p){h[A]=p;return}const R=L=>{const x=L(r),g=L(t),k=s(g,x.prev).keyList.indexOf(w);if(k<0||k>=g.length){const y=c[s(c).keyList.indexOf(w)];if(y)return y;throw new Error("splitAtom: index out of bounds for read")}return g[k]},v=(L,x,g)=>{const k=L(r),y=L(t),N=s(y,k.prev).keyList.indexOf(w);if(N<0||N>=y.length)throw new Error("splitAtom: index out of bounds for write");const Et=st(g)?g(y[N]):g;x(t,[...y.slice(0,N),Et,...y.slice(N+1)])};h[A]=z(t)?m(R,v):m(R)}),f&&f.keyList.length===d.length&&f.keyList.every((S,A)=>S===d[A])?l=f:l={atomList:h,keyList:d},o.set(c,l),l},r=m(()=>({})),n=c=>{const u=c(r),l=c(t),f=s(l,u.prev);return u.prev=l,f.atomList},a=(c,u,l)=>{switch("read"in l&&(console.warn("atomToRemove is deprecated. use action with type"),l={type:"remove",atom:l}),l.type){case"remove":{const f=c(i).indexOf(l.atom);if(f>=0){const h=c(t);u(t,[...h.slice(0,f),...h.slice(f+1)])}break}case"insert":{const f=l.before?c(i).indexOf(l.before):c(i).length;if(f>=0){const h=c(t);u(t,[...h.slice(0,f),l.value,...h.slice(f)])}break}case"move":{const f=c(i).indexOf(l.atom),h=l.before?c(i).indexOf(l.before):c(i).length;if(f>=0&&h>=0){const d=c(t);f<h?u(t,[...d.slice(0,f),...d.slice(f+1,h),d[f],...d.slice(h)]):u(t,[...d.slice(0,h),d[f],...d.slice(h,f),...d.slice(f+1)])}break}}},i=z(t)?m(n,a):m(n);return i},e?[t,e]:[t])}function it(t){const e=Symbol(),o=m(e),s=m(r=>{const n=r(o);return n!==e?n:t(r)},(r,n,a)=>a===b?n(o,e):n(o,typeof a=="function"?a(r(s)):a));return s}const ct=E(),ut=m(()=>[]);function lt(t){const e=()=>{const o=ft(t);return m(s=>{const r=[],n=o.map((a,i)=>{try{return s(a)}catch(c){if(c instanceof Promise)r[i]=c;else throw c}});if(r.length)throw Promise.all(r);return mt(t,n)})};return Array.isArray(t)?t.length?ct(e,t):ut:e()}const ft=t=>Array.isArray(t)?t:Object.getOwnPropertyNames(t).map(e=>t[e]),mt=(t,e)=>Array.isArray(t)?e:Object.getOwnPropertyNames(t).reduce((o,s,r)=>({...o,[s]:e[r]}),{}),O=P("unstable_NO_STORAGE_VALUE",Symbol());function J(t){let e,o;const s={getItem:r=>{var n,a;const i=u=>{if(u=u||"",e!==u){try{o=JSON.parse(u)}catch{return O}e=u}return o},c=(a=(n=t())==null?void 0:n.getItem(r))!=null?a:null;return c instanceof Promise?c.then(i):i(c)},setItem:(r,n)=>{var a;return(a=t())==null?void 0:a.setItem(r,JSON.stringify(n))},removeItem:r=>{var n;return(n=t())==null?void 0:n.removeItem(r)}};return typeof window<"u"&&typeof window.addEventListener=="function"&&(s.subscribe=(r,n)=>{const a=i=>{i.key===r&&i.newValue&&n(JSON.parse(i.newValue))};return window.addEventListener("storage",a),()=>{window.removeEventListener("storage",a)}}),s}const ht=J(()=>typeof window<"u"?window.localStorage:void 0);function U(t,e,o=ht){const s=()=>{const n=o.getItem(t);return n instanceof Promise?n.then(a=>a===O?e:a):n===O?e:n},r=m(o.delayInit?e:s());return r.onMount=n=>{let a;if(o.subscribe&&(a=o.subscribe(t,n),n(s())),o.delayInit){const i=s();i instanceof Promise?i.then(n):n(i)}return a},m(n=>n(r),(n,a,i)=>{const c=typeof i=="function"?i(n(r)):i;return c===b?(a(r,e),o.removeItem(t)):(a(r,c),o.setItem(t,c))})}function dt(t,e,o){const s=(o==null?void 0:o.serialize)||JSON.stringify,r=(o==null?void 0:o.deserialize)||(i=>{try{return JSON.parse(i||"")}catch{return O}}),n=(o==null?void 0:o.subscribe)||(i=>(window.addEventListener("hashchange",i),()=>{window.removeEventListener("hashchange",i)})),a={getItem:i=>{if(typeof location>"u")return O;const c=new URLSearchParams(location.hash.slice(1)).get(i);return r(c)},setItem:(i,c)=>{const u=new URLSearchParams(location.hash.slice(1));u.set(i,s(c)),o!=null&&o.replaceState?history.replaceState(null,"","#"+u.toString()):location.hash=u.toString()},removeItem:i=>{const c=new URLSearchParams(location.hash.slice(1));c.delete(i),o!=null&&o.replaceState?history.replaceState(null,"","#"+c.toString()):location.hash=c.toString()},...(o==null?void 0:o.delayInit)&&{delayInit:!0},subscribe:(i,c)=>n(()=>{const u=new URLSearchParams(location.hash.slice(1)).get(i);c(u!==null?r(u):e)})};return U(t,e,a)}function bt(t,e){const o=m(s=>{var r;let n=t(s);const a=(r=n[Symbol.observable])==null?void 0:r.call(n);a&&(n=a);const i=Symbol();let c=null,u=(e==null?void 0:e.initialValue)===void 0?new Promise(v=>{c=v}):void 0,l=!1,f=i,h=!0,d=v=>{(e==null?void 0:e.initialValue)===void 0&&!l?(h&&(u=v),c==null||c(v),l=!0,c=null):f=v};const S=v=>{d(v)},A=v=>{d(Promise.reject(v))};let w=null,p;(e==null?void 0:e.initialValue)!==void 0?p=vt(e):(w=n.subscribe(S,A),p=u),h=!1;const R=m(p);return R.onMount=v=>(d=v,f!==i&&v(f),w||(w=n.subscribe(S,A)),()=>{w==null||w.unsubscribe(),w=null}),{dataAtom:R,observable:n}});return m(s=>{const{dataAtom:r}=s(o);return s(r)},(s,r,n)=>{const{dataAtom:a,observable:i}=s(o);if("next"in i){let c=null;const u=l=>{r(a,l),c==null||c.unsubscribe()};c=i.subscribe(u),i.next(n)}else throw new Error("observable is not subject")})}function vt(t){const e=t.initialValue;return e instanceof Function?e():e}const D=new WeakMap;function wt(t,e){const o=I(e),s=T(o),r=s.s,n=At(s),a=[];for(const i of t){const c=i[0];n.has(c)||(n.add(c),a.push(i))}a.length&&r[$](a)}function At(t){let e=D.get(t);return e||(e=new WeakSet,D.set(t,e)),e}const yt=E(),gt={state:"loading"};function St(t){return yt(()=>{const e=new WeakMap,o=m(s=>{let r;try{const i=s(t);return m({state:"hasData",data:i})}catch(i){if(i instanceof Promise)r=i;else return m({state:"hasError",error:i})}const n=e.get(r);if(n)return n;const a=m(gt,async(i,c)=>{try{const u=await i(t,{unstable_promise:!0});c(a,{state:"hasData",data:u})}catch(u){c(a,{state:"hasError",error:u})}});return a.onMount=i=>{i()},e.set(r,a),a});return m(s=>{const r=s(o);return s(r)})},[t])}function pt(t,e){return m(o=>{const s=new AbortController,r=t(o,{signal:s.signal});return r instanceof Promise&&V(r,()=>s.abort()),r},e)}}}});