UNPKG

stunk

Version:

Stunk is a lightweight, framework-agnostic state management library for JavaScript and TypeScript. It uses chunk-based state units for efficient updates, reactivity, and performance optimization in React, Vue(WIP), Svelte(Coming soon), and Vanilla JS/TS a

1 lines 6.57 kB
import {b,a}from'../chunk-DLH6F22O.js';import'../chunk-PZ7A72TA.js';var G={};function ce(o){G={...o.query!==void 0&&{query:{...G.query,...o.query}},...o.mutation!==void 0&&{mutation:{...G.mutation,...o.mutation}}};}function q(){return G}function de(){G={};}var V=new Map,fe=0;function U(o,i={}){let u=q().query??{},{key:x,initialData:g=null,enabled:m=true,onSuccess:v=u.onSuccess,onError:b$1=u.onError,retryCount:r=u.retryCount??0,retryDelay:A=u.retryDelay??1e3,keepPreviousData:p=false,clearOnParamChange:l=false,staleTime:y=u.staleTime??0,cacheTime:f=u.cacheTime??5*60*1e3,refetchInterval:M=u.refetchInterval,refetchOnWindowFocus:J=u.refetchOnWindowFocus??false,pagination:c,scoped:se=false}=i,t={},Y=x??`async_chunk_${fe++}`,T=()=>typeof m=="function"?m(t):m??true,P=!!c,L=c?.mode||"replace",S=!!c?.cursorMode,D=o.length>0,Z={loading:T()&&!D,error:null,data:g,lastFetched:void 0,isPlaceholderData:false,pagination:P?{page:c.initialPage||1,pageSize:c.pageSize||10,total:void 0,hasMore:void 0,cursor:void 0}:void 0},a$1=b(Z),Q=null,w=null,O=null,N=0,I=false,W=false,ee=()=>{let e=a$1.get();return !e.lastFetched||y===0?true:Date.now()-e.lastFetched>y},ue=()=>{a$1.set({...a$1.get(),data:g,lastFetched:void 0});},le=()=>{w&&clearTimeout(w),f>0&&(w=setTimeout(()=>{N<=0&&ue();},f));},j=()=>{Q&&(clearInterval(Q),Q=null),w&&(clearTimeout(w),w=null),O&&typeof window<"u"&&(window.removeEventListener("focus",O),O=null);},_=()=>{T()&&(typeof window>"u"||(M&&M>0&&!Q&&(Q=setInterval(()=>{d(void 0,0,false);},M)),J&&!O&&(O=()=>{ee()&&d(void 0,0,false);},window.addEventListener("focus",O))));},d=async(e,n=r,s=false)=>{if(!T()||(e!==void 0&&(t={...t,...e}),!s&&!ee()&&a$1.get().data!==null))return;let F=JSON.stringify(t),z=`${Y}:${F}`;if(V.has(z))return V.get(z);let $=a$1.get(),H=$.data;a$1.set({...$,loading:true,error:null,data:$.data,isPlaceholderData:p&&$.data!==null});let re=(async()=>{try{let E={...t};if(P){let h=a$1.get().pagination;h&&(S?(E.cursor=h.cursor,E.pageSize=h.pageSize):(E.page=h.page,E.pageSize=h.pageSize));}let C=D?await o(E):await o();if(JSON.stringify(t)!==F||W)return;let k,ne,te,B;if(C&&typeof C=="object"&&"data"in C){let h=C;k=h.data,ne=h.total,te=h.hasMore,S&&(B=c.cursorMode.getNextCursor(h));}else k=C;let oe=a$1.get();P&&L==="accumulate"&&I&&H&&Array.isArray(H)&&Array.isArray(k)&&(k=[...H,...k]),a$1.set({loading:!1,error:null,data:k,lastFetched:Date.now(),isPlaceholderData:!1,pagination:P?{...oe.pagination,total:ne,hasMore:S?B!==void 0:te,cursor:S?B:oe.pagination.cursor}:void 0}),le(),v&&v(k);}catch(E){if(JSON.stringify(t)!==F)return;if(n>0&&!E?.nonRetryable)return await new Promise(k=>setTimeout(k,A)),V.delete(z),d(e,n-1,s);let C=a$1.get();a$1.set({loading:false,error:E,data:C.data,lastFetched:C.lastFetched,isPlaceholderData:false,pagination:C.pagination}),b$1&&b$1(E);}finally{V.delete(z);}})();return V.set(z,re),re};if(typeof m=="function"){let[,e]=a(()=>m(t)),n=T();e.forEach(s=>{s.subscribe(()=>{let F=T();!n&&F&&!D&&(j(),_(),d(void 0,r,true)),n=F;});});}_(),T()&&!D&&d();let ae={...a$1,subscribe:e=>{N++;let n=a$1.subscribe(e);return ()=>{n(),N--;}},cancel:()=>{W=true;let e=`${Y}:${JSON.stringify(t)}`;V.delete(e);let n=a$1.get();n.loading&&a$1.set({...n,loading:false});},reload:async e=>{if(W=false,!(D&&!P&&Object.keys(t).length===0)){if(P){let n=a$1.get();n.pagination&&a$1.set({...n,pagination:{...n.pagination,page:c?.initialPage||1,cursor:void 0}});}await d(e,r,true);}},refresh:async e=>{await d(e,r,false);},mutate:e=>{let n=a$1.get();a$1.set({...n,data:e(n.data)});},reset:(e=true)=>{j(),t={},a$1.set({...Z,loading:T()&&e&&(P||!D)}),_(),T()&&e&&(P||!D)&&d();},cleanup:()=>{N<=0&&j();},forceCleanup:()=>{j();},setParams:e=>{W=false;let n={...t};for(let s in e)e[s]===null?delete n[s]:n[s]=e[s];if(t=n,P){let s=a$1.get();s.pagination&&a$1.set({...s,data:l||L==="accumulate"?g:s.data,pagination:{...s.pagination,page:c?.initialPage||1,cursor:void 0}});}else if(l){let s=a$1.get();a$1.set({...s,data:g,error:null,lastFetched:void 0,isPlaceholderData:false});}T()&&d(t,r,true);},clearParams:()=>{t={},T()&&d(void 0,r,true);}},K;return P?K={...ae,nextPage:async()=>{let e=a$1.get();!e.pagination||e.pagination.hasMore===false||(S?(I=true,await d(t,r,true),I=false):(a$1.set({...e,pagination:{...e.pagination,page:e.pagination.page+1}}),I=true,await d(t,r,true),I=false));},prevPage:async()=>{if(S)return;let e=a$1.get();!e.pagination||e.pagination.page<=1||(a$1.set({...e,pagination:{...e.pagination,page:e.pagination.page-1}}),await d(t,r,true));},goToPage:async e=>{if(S)return;let n=a$1.get();!n.pagination||e<1||(a$1.set({...n,pagination:{...n.pagination,page:e}}),await d(t,r,true));},resetPagination:async()=>{let e=a$1.get();e.pagination&&(a$1.set({...e,data:L==="accumulate"?g:e.data,pagination:{...e.pagination,page:c?.initialPage||1,cursor:void 0}}),await d(t,r,true));}}:K=ae,se&&Object.defineProperty(K,"__scopedFactory",{value:()=>U(o,i),enumerable:false,writable:false}),K}function ge(o,i={}){return U(o,i)}function X(o,i){return U(o,i)}function pe(o,i={}){let{pageSize:u=10,cursorMode:x,...g}=i;return X(o,{...g,pagination:{pageSize:u,mode:"accumulate",initialPage:1,cursorMode:x}})}function ye(o){let i=Object.entries(o),u=i.reduce((r,[A,p])=>(r[A]=p.get().data,r),{}),x=i.reduce((r,[A,p])=>{let l=p.get().error;return l&&(r[A]=l),r},{}),g=i.some(([,r])=>r.get().loading),m=i.find(([,r])=>r.get().error)?.[1].get().error??null,b$1=b({loading:g,error:m,errors:x,data:u});return i.forEach(([r,A])=>{A.subscribe(()=>{let p=false,l=null,y={},f={...b$1.get().data};i.forEach(([M,J])=>{let c=J.get();c.loading&&(p=true),c.error&&(l||(l=c.error),y[M]=c.error),f[M]=c.data;}),b$1.set({loading:p,error:l,errors:y,data:f});});}),b$1}function me(o,i={}){let u=q().mutation??{},{invalidates:x=[],onSuccess:g=u.onSuccess,onError:m=u.onError,onSettled:v}=i,b$1={loading:false,data:null,error:null,isSuccess:false},r=b(b$1);return {mutate:async(...p)=>{let l=p[0];r.set({loading:true,data:null,error:null,isSuccess:false});try{let y=await o(l);return r.set({loading:!1,data:y,error:null,isSuccess:!0}),x.length>0&&await Promise.all(x.map(f=>"resetPagination"in f?f.resetPagination():f.reload())),g&&g(y,l),v&&v(y,null,l),{data:y,error:null}}catch(y){let f=y;return r.set({loading:false,data:null,error:f,isSuccess:false}),m&&m(f,l),v&&v(null,f,l),{data:null,error:f}}},get:()=>r.get(),subscribe:p=>r.subscribe(p),reset:()=>r.set(b$1)}}export{ge as asyncChunk,ye as combineAsyncChunks,ce as configureQuery,q as getGlobalQueryConfig,pe as infiniteAsyncChunk,me as mutation,X as paginatedAsyncChunk,de as resetQueryConfig};