stunk 3.0.0-beta.3 → 3.0.0-rc

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ import {a as a$1}from'./chunk-PZ7A72TA.js';var m=new Set,a=new Map,M=0;function O(s,l={}){let o=M++,d=`chunk_${o}`,f=l.middleware||[];l.strict??false;if(s===void 0)throw new Error(`[${d}] Initial value cannot be undefined.`);let D=f.length>0,_=false,n=s,c=new Set,y=()=>{c.forEach(e=>e(n));};a.set(o,{notify:y});let k=()=>{if(c.size===0){a.delete(o);return}y();},g=()=>(n),S=()=>n,x=e=>{let t;if(typeof e=="function"?t=e(n):t=e,_);let r=D?a$1(t,f):t;r!==n&&(n=r,k());},T=e=>{if(typeof e!="function")throw new Error("Callback must be a function.");return c.add(e),()=>c.delete(e)},b={get:g,peek:S,set:x,subscribe:T,derive:e=>{if(typeof e!="function")throw new Error("Derive function must be a function.");let t=e(n),r=O(t),u=T(()=>{let E=e(n);r.set(E);}),i=r.destroy;return r.destroy=()=>{u(),i();},r},reset:()=>{n=s,k();},destroy:()=>{c.clear(),n=s,m.delete(o),a.delete(o);}};return b}export{O as a};
@@ -0,0 +1 @@
1
+ function d(e,r){if(e===void 0)throw new Error("Value cannot be undefined.");if(r.length===0)return e;let t=e;for(let o=0;o<r.length;o++){let s=r[o],l=typeof s=="function"?s:s.fn,u=typeof s=="function"?`index ${o}`:s.name||`index ${o}`;try{let f=l(t);if(f===void 0)break;if(f===null)throw new Error(`Middleware "${u}" returned null value.`);t=f;}catch(f){let y=f instanceof Error?f.message:String(f);throw new Error(`Middleware "${u}" threw an error: ${y}`)}}return t}function p(e,r){if(e===r)return true;if(!e||!r||typeof e!=typeof r)return false;if(Array.isArray(e)&&Array.isArray(r)){if(e.length!==r.length)return false;for(let t=0;t<e.length;t++)if(e[t]!==r[t])return false;return true}if(typeof e=="object"&&typeof r=="object"){let t=Object.keys(e),o=Object.keys(r);if(t.length!==o.length)return false;for(let s of t)if(!Object.prototype.hasOwnProperty.call(r,s)||e[s]!==r[s])return false;return true}return false}function h(e,r,t="",o={}){let{checkMissing:s=true,checkTypes:l=true}=o;if(e===null||r===null||e===void 0||r===void 0)return;if(typeof e!=typeof r){console.error(`\u{1F6A8} Stunk: Type mismatch at '${t||"root"}'. Expected ${typeof e}, got ${typeof r}.`);return}if(typeof e!="object"||typeof r!="object")return;if(Array.isArray(e)!==Array.isArray(r)){console.error(`\u{1F6A8} Stunk: Type mismatch at '${t||"root"}'. Expected ${Array.isArray(e)?"array":"object"}, got ${Array.isArray(r)?"array":"object"}.`);return}if(Array.isArray(e)&&Array.isArray(r)){if(e.length>0&&typeof e[0]=="object")for(let n=0;n<r.length;n++)h(e[0],r[n],`${t}[${n}]`,o);return}let u=Object.keys(e),f=Object.keys(r),y=new Set(u),k=new Set(f),a=f.filter(n=>!y.has(n));if(a.length>0&&(console.error(`\u{1F6A8} Stunk: Unknown properties at '${t||"root"}': ${a.join(", ")}`),console.error("Expected keys:",u),console.error("Received keys:",f)),s){let n=u.filter(c=>!k.has(c));n.length>0&&console.error(`\u{1F6A8} Stunk: Missing properties at '${t||"root"}': ${n.join(", ")}`);}for(let n of u){let c=e[n],i=r[n];c===void 0||i===void 0||i===null||(l&&typeof c!="object"&&typeof c!=typeof i&&console.error(`\u{1F6A8} Stunk: Type mismatch at '${t?t+".":""}${n}'. Expected ${typeof c}, got ${typeof i}.`),h(c,i,t?`${t}.${n}`:n,o));}}export{d as a,p as b,h as c};
@@ -20,4 +20,4 @@ interface ReadOnlyChunk<T> extends Omit<Chunk<T>, 'set' | 'reset'> {
20
20
  derive: <D>(fn: (value: T) => D) => ReadOnlyChunk<D>;
21
21
  }
22
22
 
23
- export type { Chunk as C, Middleware as M };
23
+ export type { Chunk as C, Middleware as M, ReadOnlyChunk as R };
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- var be=Object.defineProperty;var re=(e,a)=>{for(var t in a)be(e,t,{get:a[t],enumerable:true});};function ne(e,a){if(e===void 0)throw new Error("Value cannot be undefined.");if(a.length===0)return e;let t=e;for(let c=0;c<a.length;c++){let i=a[c],s=typeof i=="function"?i:i.fn,f=typeof i=="function"?`index ${c}`:i.name||`index ${c}`;try{let n=s(t);if(n===void 0)break;if(n===null)throw new Error(`Middleware "${f}" returned null value.`);t=n;}catch(n){let r=n instanceof Error?n.message:String(n);throw new Error(`Middleware "${f}" threw an error: ${r}`)}}return t}function O(e,a){if(e===a)return true;if(!e||!a||typeof e!=typeof a)return false;if(Array.isArray(e)&&Array.isArray(a)){if(e.length!==a.length)return false;for(let t=0;t<e.length;t++)if(e[t]!==a[t])return false;return true}if(typeof e=="object"&&typeof a=="object"){let t=Object.keys(e),c=Object.keys(a);if(t.length!==c.length)return false;for(let i of t)if(!Object.prototype.hasOwnProperty.call(a,i)||e[i]!==a[i])return false;return true}return false}function ke(e){return e[Symbol.for("stunk.meta")]}var _=null;function U(e){let a=new Set,t=_;_=a;try{return [e(),Array.from(a)]}finally{_=t;}}function Ee(e){_&&_.add(e);}var Q=false,G=new Set,W=new Map,ve=0;function xe(e){let a=Q;Q=true;try{e();}finally{if(!a){Q=false;let t=[...G];G.clear(),t.forEach(c=>{let i=W.get(c);i&&i.notify();});}}}function v(e,a={}){let t=ve++,c=`chunk_${t}`,i=a.middleware||[];a.strict??false;if(e===void 0)throw new Error(`[${c}] Initial value cannot be undefined.`);let n=e,r=new Set,p=()=>{r.forEach(h=>h(n));};W.set(t,{notify:p});let u=()=>{if(r.size===0){W.delete(t);return}Q?G.add(t):p();},o=()=>(Ee(D),n),d=()=>n,m=h=>{let x;typeof h=="function"?x=h(n):x=h;let P=ne(x,i);P!==n&&(n=P,u());},T=h=>{if(typeof h!="function")throw new Error("Callback must be a function.");return r.add(h),()=>r.delete(h)},D={get:o,peek:d,set:m,subscribe:T,derive:h=>{if(typeof h!="function")throw new Error("Derive function must be a function.");let x=h(n),P=v(x),y=T(()=>{let $=h(n);P.set($);}),g=P.destroy;return P.destroy=()=>{y(),g();},P},reset:()=>{n=e,u();},destroy:()=>{r.clear(),n=e,G.delete(t),W.delete(t);}};return D}function oe(e){let[a,t]=U(e),c=a,i=t,s=false,f=[],n=0,r=v(c),p=()=>{if(!s)return;s=false;let[o,d]=U(e);O(d,i)||(f.forEach(T=>T()),f=d.map(T=>T.subscribe(()=>{s=true,n>0&&p();})),i=d),(typeof o=="object"&&typeof c=="object"?!O(o,c):o!==c)&&(c=o,r.set(o));};f=i.map(o=>o.subscribe(()=>{s=true,n>0&&p();}));let u;return u={get:()=>(s&&p(),r.get()),peek:()=>c,subscribe:o=>{let d=r.subscribe(o);return n++,()=>{n=Math.max(0,n-1),d();}},derive:o=>(n++,oe(()=>o(u.get()))),recompute:()=>{s=true,p();},isDirty:()=>s,destroy:()=>{f.forEach(o=>o()),r.destroy(),n=0;}},u}function ae(e,a,t={}){let{useShallowEqual:c=false}=t,i=e.get(),s=a(i),f=v(s),n=()=>{let d=e.get(),m=a(d);(c?!O(m,s):m!==s)&&(s=m,f.set(m));},r=e.subscribe(n),{set:p,reset:u,...o}=f;return {...o,derive:d=>ae(f,d,t),destroy:()=>{r(),f.destroy();}}}var ce={};re(ce,{history:()=>ue,logger:()=>ie,nonNegativeValidator:()=>se,persist:()=>le});function ie(){return e=>(console.log("Setting value:",e),e)}var se=e=>{if(e<0)throw new Error("Value must be non-negative!");return e};function ue(e,a={}){let{maxHistory:t=100,skipDuplicates:c=false}=a,i=[e.get()],s=0;return {...e,get:()=>e.get(),peek:()=>e.peek(),set:n=>{let r;if(typeof n=="function"?r=n(e.get()):r=n,c){let p=i[s];if(r===p||c==="shallow"&&typeof r=="object"&&typeof p=="object"&&r!==null&&p!==null&&O(r,p))return}if(i.splice(s+1),i.push(r),i.length>t){let p=i.length-t;i.splice(0,p);}s=i.length-1,e.set(r);},undo:()=>{s<=0||(s--,e.set(i[s]));},redo:()=>{s>=i.length-1||(s++,e.set(i[s]));},canUndo:()=>s>0,canRedo:()=>s<i.length-1,getHistory:()=>[...i],clearHistory:()=>{let n=e.get();i.length=0,i.push(n),s=0;},reset:()=>{e.reset(),i.length=0,i.push(e.get()),s=0;},destroy:()=>{i.length=0,e.destroy();},subscribe:n=>e.subscribe(n)}}function le(e,a){let{key:t,serialize:c=JSON.stringify,deserialize:i=JSON.parse,onError:s}=a,f="storage"in a?a.storage:typeof window<"u"?localStorage:void 0;if(!f)return console.warn(`persist: Storage not available for key "${t}". Persistence disabled.`),{...e,clearStorage:()=>{}};let n=e.get();try{let u=f.getItem(t);if(u!==null){let o=i(u);if(o!==null&&n!==null&&(typeof o!=typeof n||Array.isArray(o)!==Array.isArray(n))){let T=`persist: Type mismatch for "${t}". Expected ${Array.isArray(n)?"array":typeof n}, got ${Array.isArray(o)?"array":typeof o}. Using initial value.`;console.warn(T),s?.(new Error(T),"load");}else e.set(o);}}catch(u){let o=u instanceof Error?u:new Error(String(u));console.error(`persist: Failed to load state for "${t}":`,o),s?.(o,"load");}let r=e.subscribe(u=>{try{f.setItem(t,c(u));}catch(o){let d=o instanceof Error?o:new Error(String(o));console.error(`persist: Failed to save state for "${t}":`,d),s?.(d,"save");}});return {...e,get:()=>e.get(),peek:()=>e.peek(),set:u=>e.set(u),subscribe:u=>e.subscribe(u),derive:u=>e.derive(u),reset:()=>e.reset(),destroy:()=>{r(),e.destroy();},clearStorage:()=>{try{f.removeItem(t);}catch(u){let o=u instanceof Error?u:new Error(String(u));console.error(`persist: Failed to clear storage for "${t}":`,o),s?.(o,"save");}}}}var he={};re(he,{asyncChunk:()=>K,combineAsyncChunks:()=>pe,configureQuery:()=>de,getGlobalQueryConfig:()=>F,infiniteAsyncChunk:()=>ye,mutation:()=>me,resetQueryConfig:()=>fe});var q={};function de(e){q={...e.query!==void 0&&{query:{...q.query,...e.query}},...e.mutation!==void 0&&{mutation:{...q.mutation,...e.mutation}}};}function F(){return q}function fe(){q={};}var N=new Map,Pe=0;function K(e,a={}){let t=F().query??{},{key:c,initialData:i=null,enabled:s=true,onSuccess:f=t.onSuccess,onError:n=t.onError,retryCount:r=t.retryCount??0,retryDelay:p=t.retryDelay??1e3,keepPreviousData:u=false,staleTime:o=t.staleTime??0,cacheTime:d=t.cacheTime??5*60*1e3,refetchInterval:m=t.refetchInterval,refetchOnWindowFocus:T=t.refetchOnWindowFocus??false,pagination:A}=a,E=c??`async_chunk_${Pe++}`,C=()=>typeof s=="function"?s():s,D=!!A,h=A?.mode||"replace",x=e.length>0,P={loading:C()&&!x,error:null,data:i,lastFetched:void 0,isPlaceholderData:false,pagination:D?{page:A.initialPage||1,pageSize:A.pageSize||10,total:void 0,hasMore:void 0}:void 0},y=v(P),g={},$=null,R=null,I=null,H=0,J=()=>{let l=y.get();return !l.lastFetched||o===0?true:Date.now()-l.lastFetched>o},ge=()=>{y.set({...y.get(),data:i,lastFetched:void 0});},Te=()=>{R&&clearTimeout(R),d>0&&(R=setTimeout(ge,d));},B=()=>{$&&(clearInterval($),$=null),R&&(clearTimeout(R),R=null),I&&typeof window<"u"&&(window.removeEventListener("focus",I),I=null);},X=()=>{C()&&(typeof window>"u"||(m&&m>0&&($=setInterval(()=>{k(void 0,0,false);},m)),T&&(I=()=>{J()&&k(void 0,0,false);},window.addEventListener("focus",I))));},k=async(l,b=r,M=false)=>{if(!C()||(l!==void 0&&(g={...g,...l}),!M&&!J()&&y.get().data!==null))return;if(N.has(E))return N.get(E);let L=y.get();y.set({...L,loading:true,error:null,data:L.data,isPlaceholderData:u&&L.data!==null});let Z=(async()=>{try{let j={...g};if(D){let V=y.get().pagination;V&&(j.page=V.page,j.pageSize=V.pageSize);}let w=x?await e(j):await e(),S,ee,te;if(w&&typeof w=="object"&&"data"in w){let V=w;S=V.data,ee=V.total,te=V.hasMore;}else S=w;let z=y.get();D&&h==="accumulate"&&z.data&&Array.isArray(z.data)&&Array.isArray(S)&&(S=[...z.data,...S]),y.set({loading:!1,error:null,data:S,lastFetched:Date.now(),isPlaceholderData:!1,pagination:D?{...z.pagination,total:ee,hasMore:te}:void 0}),Te(),f&&f(S);}catch(j){if(b>0)return await new Promise(S=>setTimeout(S,p)),N.delete(E),k(l,b-1,M);let w=y.get();y.set({loading:false,error:j,data:w.data,lastFetched:w.lastFetched,isPlaceholderData:false,pagination:w.pagination}),n&&n(j);}finally{N.delete(E);}})();return N.set(E,Z),Z};X(),C()&&!x&&k();let Y={...y,subscribe:l=>{H++;let b=y.subscribe(l);return ()=>{b(),H--;}},reload:async l=>{await k(l,r,true);},refresh:async l=>{await k(l,r,false);},mutate:l=>{let b=y.get();y.set({...b,data:l(b.data)});},reset:()=>{B(),g={},y.set({...P,loading:C()&&!x}),X(),C()&&!x&&k();},cleanup:()=>{H<=0&&B();},forceCleanup:()=>{B();},setParams:l=>{let b={...g};for(let M in l)l[M]===null?delete b[M]:b[M]=l[M];g=b,C()&&k(g,r,true);},clearParams:()=>{g={},C()&&k(void 0,r,true);}};return D?{...Y,nextPage:async()=>{let l=y.get();!l.pagination||l.pagination.hasMore===false||(y.set({...l,pagination:{...l.pagination,page:l.pagination.page+1}}),await k(g,r,true));},prevPage:async()=>{let l=y.get();!l.pagination||l.pagination.page<=1||(y.set({...l,pagination:{...l.pagination,page:l.pagination.page-1}}),await k(g,r,true));},goToPage:async l=>{let b=y.get();!b.pagination||l<1||(y.set({...b,pagination:{...b.pagination,page:l}}),await k(g,r,true));},resetPagination:async()=>{let l=y.get();l.pagination&&(y.set({...l,data:h==="accumulate"?i:l.data,pagination:{...l.pagination,page:A?.initialPage||1}}),await k(g,r,true));}}:Y}function ye(e,a={}){let{pageSize:t=10,...c}=a;return K(e,{...c,pagination:{pageSize:t,mode:"accumulate",initialPage:1}})}function pe(e){let a=Object.entries(e),t=a.reduce((r,[p,u])=>(r[p]=u.get().data,r),{}),c=a.reduce((r,[p,u])=>{let o=u.get().error;return o&&(r[p]=o),r},{}),i=a.some(([,r])=>r.get().loading),s=a.find(([,r])=>r.get().error)?.[1].get().error??null,n=v({loading:i,error:s,errors:c,data:t});return a.forEach(([r,p])=>{p.subscribe(()=>{let u=false,o=null,d={},m={...n.get().data};a.forEach(([T,A])=>{let E=A.get();E.loading&&(u=true),E.error&&(o||(o=E.error),d[T]=E.error),m[T]=E.data;}),n.set({loading:u,error:o,errors:d,data:m});});}),n}function me(e,a={}){let t=F().mutation??{},{invalidates:c=[],onSuccess:i=t.onSuccess,onError:s=t.onError,onSettled:f}=a,n={loading:false,data:null,error:null,isSuccess:false},r=v(n);return {mutate:async(...u)=>{let o=u[0];r.set({loading:true,data:null,error:null,isSuccess:false});try{let d=await e(o);return r.set({loading:!1,data:d,error:null,isSuccess:!0}),c.length>0&&await Promise.all(c.map(m=>m.reload())),i&&i(d,o),f&&f(d,null,o),{data:d,error:null}}catch(d){let m=d;return r.set({loading:false,data:null,error:m,isSuccess:false}),s&&s(m,o),f&&f(null,m,o),{data:null,error:m}}},get:()=>r.get(),subscribe:u=>r.subscribe(u),reset:()=>r.set(n)}}export{xe as batch,v as chunk,oe as computed,ke as getChunkMeta,ce as middleware,he as query,ae as select};
1
+ var ke=Object.defineProperty;var ne=(e,r)=>{for(var t in r)ke(e,t,{get:r[t],enumerable:true});};function oe(e,r){if(e===void 0)throw new Error("Value cannot be undefined.");if(r.length===0)return e;let t=e;for(let c=0;c<r.length;c++){let o=r[c],i=typeof o=="function"?o:o.fn,p=typeof o=="function"?`index ${c}`:o.name||`index ${c}`;try{let s=i(t);if(s===void 0)break;if(s===null)throw new Error(`Middleware "${p}" returned null value.`);t=s;}catch(s){let a=s instanceof Error?s.message:String(s);throw new Error(`Middleware "${p}" threw an error: ${a}`)}}return t}function j(e,r){if(e===r)return true;if(!e||!r||typeof e!=typeof r)return false;if(Array.isArray(e)&&Array.isArray(r)){if(e.length!==r.length)return false;for(let t=0;t<e.length;t++)if(e[t]!==r[t])return false;return true}if(typeof e=="object"&&typeof r=="object"){let t=Object.keys(e),c=Object.keys(r);if(t.length!==c.length)return false;for(let o of t)if(!Object.prototype.hasOwnProperty.call(r,o)||e[o]!==r[o])return false;return true}return false}function Ee(e){return e[Symbol.for("stunk.meta")]}var I=null;function J(e){let r=new Set,t=I;I=r;try{return [e(),Array.from(r)]}finally{I=t;}}function ve(e){I&&I.add(e);}var Q=false,G=new Set,W=new Map,Ce=0;function Pe(e){let r=Q;Q=true;try{e();}finally{if(!r){Q=false;let t=[...G];G.clear(),t.forEach(c=>{let o=W.get(c);o&&o.notify();});}}}function x(e,r={}){let t=Ce++,c=`chunk_${t}`,o=r.middleware||[];r.strict??false;if(e===void 0)throw new Error(`[${c}] Initial value cannot be undefined.`);let s=o.length>0,a=false,h=e,u=new Set,n=()=>{u.forEach(b=>b(h));};W.set(t,{notify:n});let f=()=>{if(u.size===0){W.delete(t);return}Q?G.add(t):n();},l=()=>(ve(M),h),m=()=>h,v=b=>{let y;if(typeof b=="function"?y=b(h):y=b,a);let g=s?oe(y,o):y;g!==h&&(h=g,f());},T=b=>{if(typeof b!="function")throw new Error("Callback must be a function.");return u.add(b),()=>u.delete(b)},M={get:l,peek:m,set:v,subscribe:T,derive:b=>{if(typeof b!="function")throw new Error("Derive function must be a function.");let y=b(h),g=x(y),w=T(()=>{let V=b(h);g.set(V);}),C=g.destroy;return g.destroy=()=>{w(),C();},g},reset:()=>{h=e,f();},destroy:()=>{u.clear(),h=e,G.delete(t),W.delete(t);}};return M}function ae(e){let[r,t]=J(e),c=r,o=t,i=false,p=[],s=new Set,a=x(c),h=l=>l.map(m=>m.subscribe(()=>{i=true,(s.size>0||a.subscribe!==void 0)&&u();})),u=()=>{if(!i)return;i=false;let[l,m]=J(e);(m.length!==o.length||m.some((k,A)=>k!==o[A]))&&(p.forEach(k=>k()),p=h(m),o=m),(typeof l=="object"&&l!==null&&typeof c=="object"&&c!==null?!j(l,c):l!==c)&&(c=l,a.set(l),s.forEach(k=>k(c)));},n=()=>()=>{i=true,s.size>0&&u();};p=o.map(l=>l.subscribe(n()));let f;return f={get:()=>(i&&u(),a.get()),peek:()=>c,subscribe:l=>(s.add(l),()=>{s.delete(l);}),derive:l=>{let m=f.subscribe(()=>{}),v=ae(()=>l(f.get())),T=v.destroy;return v.destroy=()=>{m(),T();},v},recompute:()=>{i=true,u();},isDirty:()=>i,destroy:()=>{p.forEach(l=>l()),s.clear(),a.destroy();}},f}function ie(e,r,t={}){let{useShallowEqual:c=false}=t,o=e.get(),i=r(o),p=x(i),s=()=>{let f=e.get(),l=r(f);(c?!j(l,i):l!==i)&&(i=l,p.set(l));},a=e.subscribe(s),{set:h,reset:u,...n}=p;return {...n,derive:f=>ie(p,f,t),destroy:()=>{a(),p.destroy();}}}var de={};ne(de,{history:()=>le,logger:()=>se,nonNegativeValidator:()=>ue,persist:()=>ce});function se(){return e=>(console.log("Setting value:",e),e)}var ue=e=>{if(e<0)throw new Error("Value must be non-negative!");return e};function le(e,r={}){let{maxHistory:t=100,skipDuplicates:c=false}=r,o=[e.get()],i=0;return {...e,get:()=>e.get(),peek:()=>e.peek(),set:s=>{let a;if(typeof s=="function"?a=s(e.get()):a=s,c){let h=o[i];if(a===h||c==="shallow"&&typeof a=="object"&&typeof h=="object"&&a!==null&&h!==null&&j(a,h))return}if(o.splice(i+1),o.push(a),o.length>t){let h=o.length-t;o.splice(0,h);}i=o.length-1,e.set(a);},undo:()=>{i<=0||(i--,e.set(o[i]));},redo:()=>{i>=o.length-1||(i++,e.set(o[i]));},canUndo:()=>i>0,canRedo:()=>i<o.length-1,getHistory:()=>[...o],clearHistory:()=>{let s=e.get();o.length=0,o.push(s),i=0;},reset:()=>{e.reset(),o.length=0,o.push(e.get()),i=0;},destroy:()=>{o.length=0,e.destroy();},subscribe:s=>e.subscribe(s)}}function ce(e,r){let{key:t,serialize:c=JSON.stringify,deserialize:o=JSON.parse,onError:i}=r,p="storage"in r?r.storage:typeof window<"u"?localStorage:void 0;if(!p)return console.warn(`persist: Storage not available for key "${t}". Persistence disabled.`),{...e,clearStorage:()=>{}};let s=e.get();try{let u=p.getItem(t);if(u!==null){let n=o(u);if(n!==null&&s!==null&&(typeof n!=typeof s||Array.isArray(n)!==Array.isArray(s))){let m=`persist: Type mismatch for "${t}". Expected ${Array.isArray(s)?"array":typeof s}, got ${Array.isArray(n)?"array":typeof n}. Using initial value.`;console.warn(m),i?.(new Error(m),"load");}else e.set(n);}}catch(u){let n=u instanceof Error?u:new Error(String(u));console.error(`persist: Failed to load state for "${t}":`,n),i?.(n,"load");}let a=e.subscribe(u=>{try{p.setItem(t,c(u));}catch(n){let f=n instanceof Error?n:new Error(String(n));console.error(`persist: Failed to save state for "${t}":`,f),i?.(f,"save");}});return {...e,get:()=>e.get(),peek:()=>e.peek(),set:u=>e.set(u),subscribe:u=>e.subscribe(u),derive:u=>e.derive(u),reset:()=>e.reset(),destroy:()=>{a(),e.destroy();},clearStorage:()=>{try{p.removeItem(t);}catch(u){let n=u instanceof Error?u:new Error(String(u));console.error(`persist: Failed to clear storage for "${t}":`,n),i?.(n,"save");}}}}var me={};ne(me,{asyncChunk:()=>H,combineAsyncChunks:()=>he,configureQuery:()=>fe,getGlobalQueryConfig:()=>F,infiniteAsyncChunk:()=>pe,mutation:()=>ge,resetQueryConfig:()=>ye});var _={};function fe(e){_={...e.query!==void 0&&{query:{..._.query,...e.query}},...e.mutation!==void 0&&{mutation:{..._.mutation,...e.mutation}}};}function F(){return _}function ye(){_={};}var q=new Map,xe=0;function H(e,r={}){let t=F().query??{},{key:c,initialData:o=null,enabled:i=true,onSuccess:p=t.onSuccess,onError:s=t.onError,retryCount:a=t.retryCount??0,retryDelay:h=t.retryDelay??1e3,keepPreviousData:u=false,staleTime:n=t.staleTime??0,cacheTime:f=t.cacheTime??5*60*1e3,refetchInterval:l=t.refetchInterval,refetchOnWindowFocus:m=t.refetchOnWindowFocus??false,pagination:v}=r,T=c??`async_chunk_${xe++}`,k=()=>typeof i=="function"?i():i,A=!!v,K=v?.mode||"replace",M=e.length>0,b={loading:k()&&!M,error:null,data:o,lastFetched:void 0,isPlaceholderData:false,pagination:A?{page:v.initialPage||1,pageSize:v.pageSize||10,total:void 0,hasMore:void 0}:void 0},y=x(b),g={},w=null,C=null,V=null,U=0,X=()=>{let d=y.get();return !d.lastFetched||n===0?true:Date.now()-d.lastFetched>n},Te=()=>{y.set({...y.get(),data:o,lastFetched:void 0});},be=()=>{C&&clearTimeout(C),f>0&&(C=setTimeout(Te,f));},B=()=>{w&&(clearInterval(w),w=null),C&&(clearTimeout(C),C=null),V&&typeof window<"u"&&(window.removeEventListener("focus",V),V=null);},Y=()=>{k()&&(typeof window>"u"||(l&&l>0&&(w=setInterval(()=>{P(void 0,0,false);},l)),m&&(V=()=>{X()&&P(void 0,0,false);},window.addEventListener("focus",V))));},P=async(d,E=a,O=false)=>{if(!k()||(d!==void 0&&(g={...g,...d}),!O&&!X()&&y.get().data!==null))return;if(q.has(T))return q.get(T);let L=y.get();y.set({...L,loading:true,error:null,data:L.data,isPlaceholderData:u&&L.data!==null});let ee=(async()=>{try{let R={...g};if(A){let $=y.get().pagination;$&&(R.page=$.page,R.pageSize=$.pageSize);}let S=M?await e(R):await e(),D,te,re;if(S&&typeof S=="object"&&"data"in S){let $=S;D=$.data,te=$.total,re=$.hasMore;}else D=S;let z=y.get();A&&K==="accumulate"&&z.data&&Array.isArray(z.data)&&Array.isArray(D)&&(D=[...z.data,...D]),y.set({loading:!1,error:null,data:D,lastFetched:Date.now(),isPlaceholderData:!1,pagination:A?{...z.pagination,total:te,hasMore:re}:void 0}),be(),p&&p(D);}catch(R){if(E>0)return await new Promise(D=>setTimeout(D,h)),q.delete(T),P(d,E-1,O);let S=y.get();y.set({loading:false,error:R,data:S.data,lastFetched:S.lastFetched,isPlaceholderData:false,pagination:S.pagination}),s&&s(R);}finally{q.delete(T);}})();return q.set(T,ee),ee};Y(),k()&&!M&&P();let Z={...y,subscribe:d=>{U++;let E=y.subscribe(d);return ()=>{E(),U--;}},reload:async d=>{await P(d,a,true);},refresh:async d=>{await P(d,a,false);},mutate:d=>{let E=y.get();y.set({...E,data:d(E.data)});},reset:()=>{B(),g={},y.set({...b,loading:k()&&!M}),Y(),k()&&!M&&P();},cleanup:()=>{U<=0&&B();},forceCleanup:()=>{B();},setParams:d=>{let E={...g};for(let O in d)d[O]===null?delete E[O]:E[O]=d[O];g=E,k()&&P(g,a,true);},clearParams:()=>{g={},k()&&P(void 0,a,true);}};return A?{...Z,nextPage:async()=>{let d=y.get();!d.pagination||d.pagination.hasMore===false||(y.set({...d,pagination:{...d.pagination,page:d.pagination.page+1}}),await P(g,a,true));},prevPage:async()=>{let d=y.get();!d.pagination||d.pagination.page<=1||(y.set({...d,pagination:{...d.pagination,page:d.pagination.page-1}}),await P(g,a,true));},goToPage:async d=>{let E=y.get();!E.pagination||d<1||(y.set({...E,pagination:{...E.pagination,page:d}}),await P(g,a,true));},resetPagination:async()=>{let d=y.get();d.pagination&&(y.set({...d,data:K==="accumulate"?o:d.data,pagination:{...d.pagination,page:v?.initialPage||1}}),await P(g,a,true));}}:Z}function pe(e,r={}){let{pageSize:t=10,...c}=r;return H(e,{...c,pagination:{pageSize:t,mode:"accumulate",initialPage:1}})}function he(e){let r=Object.entries(e),t=r.reduce((a,[h,u])=>(a[h]=u.get().data,a),{}),c=r.reduce((a,[h,u])=>{let n=u.get().error;return n&&(a[h]=n),a},{}),o=r.some(([,a])=>a.get().loading),i=r.find(([,a])=>a.get().error)?.[1].get().error??null,s=x({loading:o,error:i,errors:c,data:t});return r.forEach(([a,h])=>{h.subscribe(()=>{let u=false,n=null,f={},l={...s.get().data};r.forEach(([m,v])=>{let T=v.get();T.loading&&(u=true),T.error&&(n||(n=T.error),f[m]=T.error),l[m]=T.data;}),s.set({loading:u,error:n,errors:f,data:l});});}),s}function ge(e,r={}){let t=F().mutation??{},{invalidates:c=[],onSuccess:o=t.onSuccess,onError:i=t.onError,onSettled:p}=r,s={loading:false,data:null,error:null,isSuccess:false},a=x(s);return {mutate:async(...u)=>{let n=u[0];a.set({loading:true,data:null,error:null,isSuccess:false});try{let f=await e(n);return a.set({loading:!1,data:f,error:null,isSuccess:!0}),c.length>0&&await Promise.all(c.map(l=>l.reload())),o&&o(f,n),p&&p(f,null,n),{data:f,error:null}}catch(f){let l=f;return a.set({loading:false,data:null,error:l,isSuccess:false}),i&&i(l,n),p&&p(null,l,n),{data:null,error:l}}},get:()=>a.get(),subscribe:u=>a.subscribe(u),reset:()=>a.set(s)}}export{Pe as batch,x as chunk,ae as computed,Ee as getChunkMeta,de as middleware,me as query,ie as select};
@@ -1,4 +1,4 @@
1
- import { M as Middleware, C as Chunk } from '../core-DsoxfUCH.js';
1
+ import { M as Middleware, C as Chunk } from '../core-DAc7hZla.js';
2
2
 
3
3
  /**
4
4
  * Middleware that logs every value passed to `set()` to the console.
@@ -1 +1 @@
1
- import {b}from'../chunk-ILRKKHYZ.js';function u(){return r=>(console.log("Setting value:",r),r)}var m=r=>{if(r<0)throw new Error("Value must be non-negative!");return r};function T(r,c={}){let{maxHistory:n=100,skipDuplicates:p=false}=c,e=[r.get()],t=0;return {...r,get:()=>r.get(),peek:()=>r.peek(),set:i=>{let l;if(typeof i=="function"?l=i(r.get()):l=i,p){let a=e[t];if(l===a||p==="shallow"&&typeof l=="object"&&typeof a=="object"&&l!==null&&a!==null&&b(l,a))return}if(e.splice(t+1),e.push(l),e.length>n){let a=e.length-n;e.splice(0,a);}t=e.length-1,r.set(l);},undo:()=>{t<=0||(t--,r.set(e[t]));},redo:()=>{t>=e.length-1||(t++,r.set(e[t]));},canUndo:()=>t>0,canRedo:()=>t<e.length-1,getHistory:()=>[...e],clearHistory:()=>{let i=r.get();e.length=0,e.push(i),t=0;},reset:()=>{r.reset(),e.length=0,e.push(r.get()),t=0;},destroy:()=>{e.length=0,r.destroy();},subscribe:i=>r.subscribe(i)}}function h(r,c){let{key:n,serialize:p=JSON.stringify,deserialize:e=JSON.parse,onError:t}=c,d="storage"in c?c.storage:typeof window<"u"?localStorage:void 0;if(!d)return console.warn(`persist: Storage not available for key "${n}". Persistence disabled.`),{...r,clearStorage:()=>{}};let i=r.get();try{let o=d.getItem(n);if(o!==null){let s=e(o);if(s!==null&&i!==null&&(typeof s!=typeof i||Array.isArray(s)!==Array.isArray(i))){let y=`persist: Type mismatch for "${n}". Expected ${Array.isArray(i)?"array":typeof i}, got ${Array.isArray(s)?"array":typeof s}. Using initial value.`;console.warn(y),t?.(new Error(y),"load");}else r.set(s);}}catch(o){let s=o instanceof Error?o:new Error(String(o));console.error(`persist: Failed to load state for "${n}":`,s),t?.(s,"load");}let l=r.subscribe(o=>{try{d.setItem(n,p(o));}catch(s){let g=s instanceof Error?s:new Error(String(s));console.error(`persist: Failed to save state for "${n}":`,g),t?.(g,"save");}});return {...r,get:()=>r.get(),peek:()=>r.peek(),set:o=>r.set(o),subscribe:o=>r.subscribe(o),derive:o=>r.derive(o),reset:()=>r.reset(),destroy:()=>{l(),r.destroy();},clearStorage:()=>{try{d.removeItem(n);}catch(o){let s=o instanceof Error?o:new Error(String(o));console.error(`persist: Failed to clear storage for "${n}":`,s),t?.(s,"save");}}}}export{T as history,u as logger,m as nonNegativeValidator,h as persist};
1
+ import {b}from'../chunk-PZ7A72TA.js';function u(){return r=>(console.log("Setting value:",r),r)}var m=r=>{if(r<0)throw new Error("Value must be non-negative!");return r};function T(r,c={}){let{maxHistory:n=100,skipDuplicates:p=false}=c,e=[r.get()],t=0;return {...r,get:()=>r.get(),peek:()=>r.peek(),set:i=>{let l;if(typeof i=="function"?l=i(r.get()):l=i,p){let a=e[t];if(l===a||p==="shallow"&&typeof l=="object"&&typeof a=="object"&&l!==null&&a!==null&&b(l,a))return}if(e.splice(t+1),e.push(l),e.length>n){let a=e.length-n;e.splice(0,a);}t=e.length-1,r.set(l);},undo:()=>{t<=0||(t--,r.set(e[t]));},redo:()=>{t>=e.length-1||(t++,r.set(e[t]));},canUndo:()=>t>0,canRedo:()=>t<e.length-1,getHistory:()=>[...e],clearHistory:()=>{let i=r.get();e.length=0,e.push(i),t=0;},reset:()=>{r.reset(),e.length=0,e.push(r.get()),t=0;},destroy:()=>{e.length=0,r.destroy();},subscribe:i=>r.subscribe(i)}}function h(r,c){let{key:n,serialize:p=JSON.stringify,deserialize:e=JSON.parse,onError:t}=c,d="storage"in c?c.storage:typeof window<"u"?localStorage:void 0;if(!d)return console.warn(`persist: Storage not available for key "${n}". Persistence disabled.`),{...r,clearStorage:()=>{}};let i=r.get();try{let o=d.getItem(n);if(o!==null){let s=e(o);if(s!==null&&i!==null&&(typeof s!=typeof i||Array.isArray(s)!==Array.isArray(i))){let y=`persist: Type mismatch for "${n}". Expected ${Array.isArray(i)?"array":typeof i}, got ${Array.isArray(s)?"array":typeof s}. Using initial value.`;console.warn(y),t?.(new Error(y),"load");}else r.set(s);}}catch(o){let s=o instanceof Error?o:new Error(String(o));console.error(`persist: Failed to load state for "${n}":`,s),t?.(s,"load");}let l=r.subscribe(o=>{try{d.setItem(n,p(o));}catch(s){let g=s instanceof Error?s:new Error(String(s));console.error(`persist: Failed to save state for "${n}":`,g),t?.(g,"save");}});return {...r,get:()=>r.get(),peek:()=>r.peek(),set:o=>r.set(o),subscribe:o=>r.subscribe(o),derive:o=>r.derive(o),reset:()=>r.reset(),destroy:()=>{l(),r.destroy();},clearStorage:()=>{try{d.removeItem(n);}catch(o){let s=o instanceof Error?o:new Error(String(o));console.error(`persist: Failed to clear storage for "${n}":`,s),t?.(s,"save");}}}}export{T as history,u as logger,m as nonNegativeValidator,h as persist};
@@ -1,4 +1,4 @@
1
- import { C as Chunk } from './core-DsoxfUCH.js';
1
+ import { C as Chunk } from './core-DAc7hZla.js';
2
2
 
3
3
  interface AsyncState<T, E extends Error> {
4
4
  loading: boolean;
@@ -1,6 +1,6 @@
1
- import { A as AsyncChunk } from '../mutation-BGXZyZXA.js';
2
- export { c as AsyncState, d as AsyncStateWithPagination, M as Mutation, h as MutationFn, f as MutationOptions, b as MutationResult, g as MutationState, P as PaginatedAsyncChunk, e as asyncChunk, i as infiniteAsyncChunk, m as mutation } from '../mutation-BGXZyZXA.js';
3
- import { C as Chunk } from '../core-DsoxfUCH.js';
1
+ import { A as AsyncChunk } from '../mutation-CH7ZTMUa.js';
2
+ export { c as AsyncState, d as AsyncStateWithPagination, M as Mutation, h as MutationFn, f as MutationOptions, b as MutationResult, g as MutationState, P as PaginatedAsyncChunk, e as asyncChunk, i as infiniteAsyncChunk, m as mutation } from '../mutation-CH7ZTMUa.js';
3
+ import { C as Chunk } from '../core-DAc7hZla.js';
4
4
 
5
5
  interface GlobalQueryConfig {
6
6
  /**
@@ -1 +1 @@
1
- import {a}from'../chunk-3ATMNOKX.js';import'../chunk-ILRKKHYZ.js';var O={};function Y(i){O={...i.query!==void 0&&{query:{...O.query,...i.query}},...i.mutation!==void 0&&{mutation:{...O.mutation,...i.mutation}}};}function R(){return O}function Z(){O={};}var V=new Map,ee=0;function L(i,l={}){let r=R().query??{},{key:T,initialData:b=null,enabled:h=true,onSuccess:E=r.onSuccess,onError:p=r.onError,retryCount:a$1=r.retryCount??0,retryDelay:P=r.retryDelay??1e3,keepPreviousData:c=false,staleTime:n=r.staleTime??0,cacheTime:d=r.cacheTime??5*60*1e3,refetchInterval:s=r.refetchInterval,refetchOnWindowFocus:Q=r.refetchOnWindowFocus??false,pagination:k}=l,g=T??`async_chunk_${ee++}`,C=()=>typeof h=="function"?h():h,w=!!k,j=k?.mode||"replace",M=i.length>0,K={loading:C()&&!M,error:null,data:b,lastFetched:void 0,isPlaceholderData:false,pagination:w?{page:k.initialPage||1,pageSize:k.pageSize||10,total:void 0,hasMore:void 0}:void 0},t=a(K),f={},I=null,S=null,F=null,G=0,N=()=>{let e=t.get();return !e.lastFetched||n===0?true:Date.now()-e.lastFetched>n},U=()=>{t.set({...t.get(),data:b,lastFetched:void 0});},X=()=>{S&&clearTimeout(S),d>0&&(S=setTimeout(U,d));},q=()=>{I&&(clearInterval(I),I=null),S&&(clearTimeout(S),S=null),F&&typeof window<"u"&&(window.removeEventListener("focus",F),F=null);},_=()=>{C()&&(typeof window>"u"||(s&&s>0&&(I=setInterval(()=>{u(void 0,0,false);},s)),Q&&(F=()=>{N()&&u(void 0,0,false);},window.addEventListener("focus",F))));},u=async(e,o=a$1,v=false)=>{if(!C()||(e!==void 0&&(f={...f,...e}),!v&&!N()&&t.get().data!==null))return;if(V.has(g))return V.get(g);let W=t.get();t.set({...W,loading:true,error:null,data:W.data,isPlaceholderData:c&&W.data!==null});let $=(async()=>{try{let A={...f};if(w){let x=t.get().pagination;x&&(A.page=x.page,A.pageSize=x.pageSize);}let m=M?await i(A):await i(),y,B,J;if(m&&typeof m=="object"&&"data"in m){let x=m;y=x.data,B=x.total,J=x.hasMore;}else y=m;let z=t.get();w&&j==="accumulate"&&z.data&&Array.isArray(z.data)&&Array.isArray(y)&&(y=[...z.data,...y]),t.set({loading:!1,error:null,data:y,lastFetched:Date.now(),isPlaceholderData:!1,pagination:w?{...z.pagination,total:B,hasMore:J}:void 0}),X(),E&&E(y);}catch(A){if(o>0)return await new Promise(y=>setTimeout(y,P)),V.delete(g),u(e,o-1,v);let m=t.get();t.set({loading:false,error:A,data:m.data,lastFetched:m.lastFetched,isPlaceholderData:false,pagination:m.pagination}),p&&p(A);}finally{V.delete(g);}})();return V.set(g,$),$};_(),C()&&!M&&u();let H={...t,subscribe:e=>{G++;let o=t.subscribe(e);return ()=>{o(),G--;}},reload:async e=>{await u(e,a$1,true);},refresh:async e=>{await u(e,a$1,false);},mutate:e=>{let o=t.get();t.set({...o,data:e(o.data)});},reset:()=>{q(),f={},t.set({...K,loading:C()&&!M}),_(),C()&&!M&&u();},cleanup:()=>{G<=0&&q();},forceCleanup:()=>{q();},setParams:e=>{let o={...f};for(let v in e)e[v]===null?delete o[v]:o[v]=e[v];f=o,C()&&u(f,a$1,true);},clearParams:()=>{f={},C()&&u(void 0,a$1,true);}};return w?{...H,nextPage:async()=>{let e=t.get();!e.pagination||e.pagination.hasMore===false||(t.set({...e,pagination:{...e.pagination,page:e.pagination.page+1}}),await u(f,a$1,true));},prevPage:async()=>{let e=t.get();!e.pagination||e.pagination.page<=1||(t.set({...e,pagination:{...e.pagination,page:e.pagination.page-1}}),await u(f,a$1,true));},goToPage:async e=>{let o=t.get();!o.pagination||e<1||(t.set({...o,pagination:{...o.pagination,page:e}}),await u(f,a$1,true));},resetPagination:async()=>{let e=t.get();e.pagination&&(t.set({...e,data:j==="accumulate"?b:e.data,pagination:{...e.pagination,page:k?.initialPage||1}}),await u(f,a$1,true));}}:H}function ae(i,l={}){let{pageSize:r=10,...T}=l;return L(i,{...T,pagination:{pageSize:r,mode:"accumulate",initialPage:1}})}function te(i){let l=Object.entries(i),r=l.reduce((a,[P,c])=>(a[P]=c.get().data,a),{}),T=l.reduce((a,[P,c])=>{let n=c.get().error;return n&&(a[P]=n),a},{}),b=l.some(([,a])=>a.get().loading),h=l.find(([,a])=>a.get().error)?.[1].get().error??null,p=a({loading:b,error:h,errors:T,data:r});return l.forEach(([a,P])=>{P.subscribe(()=>{let c=false,n=null,d={},s={...p.get().data};l.forEach(([Q,k])=>{let g=k.get();g.loading&&(c=true),g.error&&(n||(n=g.error),d[Q]=g.error),s[Q]=g.data;}),p.set({loading:c,error:n,errors:d,data:s});});}),p}function re(i,l={}){let r=R().mutation??{},{invalidates:T=[],onSuccess:b=r.onSuccess,onError:h=r.onError,onSettled:E}=l,p={loading:false,data:null,error:null,isSuccess:false},a$1=a(p);return {mutate:async(...c)=>{let n=c[0];a$1.set({loading:true,data:null,error:null,isSuccess:false});try{let d=await i(n);return a$1.set({loading:!1,data:d,error:null,isSuccess:!0}),T.length>0&&await Promise.all(T.map(s=>s.reload())),b&&b(d,n),E&&E(d,null,n),{data:d,error:null}}catch(d){let s=d;return a$1.set({loading:false,data:null,error:s,isSuccess:false}),h&&h(s,n),E&&E(null,s,n),{data:null,error:s}}},get:()=>a$1.get(),subscribe:c=>a$1.subscribe(c),reset:()=>a$1.set(p)}}export{L as asyncChunk,te as combineAsyncChunks,Y as configureQuery,R as getGlobalQueryConfig,ae as infiniteAsyncChunk,re as mutation,Z as resetQueryConfig};
1
+ import {a}from'../chunk-7PLFRQ2T.js';import'../chunk-PZ7A72TA.js';var O={};function Y(i){O={...i.query!==void 0&&{query:{...O.query,...i.query}},...i.mutation!==void 0&&{mutation:{...O.mutation,...i.mutation}}};}function R(){return O}function Z(){O={};}var V=new Map,ee=0;function L(i,l={}){let r=R().query??{},{key:T,initialData:b=null,enabled:h=true,onSuccess:E=r.onSuccess,onError:p=r.onError,retryCount:a$1=r.retryCount??0,retryDelay:P=r.retryDelay??1e3,keepPreviousData:c=false,staleTime:n=r.staleTime??0,cacheTime:d=r.cacheTime??5*60*1e3,refetchInterval:s=r.refetchInterval,refetchOnWindowFocus:Q=r.refetchOnWindowFocus??false,pagination:k}=l,g=T??`async_chunk_${ee++}`,C=()=>typeof h=="function"?h():h,w=!!k,j=k?.mode||"replace",M=i.length>0,K={loading:C()&&!M,error:null,data:b,lastFetched:void 0,isPlaceholderData:false,pagination:w?{page:k.initialPage||1,pageSize:k.pageSize||10,total:void 0,hasMore:void 0}:void 0},t=a(K),f={},I=null,S=null,F=null,G=0,N=()=>{let e=t.get();return !e.lastFetched||n===0?true:Date.now()-e.lastFetched>n},U=()=>{t.set({...t.get(),data:b,lastFetched:void 0});},X=()=>{S&&clearTimeout(S),d>0&&(S=setTimeout(U,d));},q=()=>{I&&(clearInterval(I),I=null),S&&(clearTimeout(S),S=null),F&&typeof window<"u"&&(window.removeEventListener("focus",F),F=null);},_=()=>{C()&&(typeof window>"u"||(s&&s>0&&(I=setInterval(()=>{u(void 0,0,false);},s)),Q&&(F=()=>{N()&&u(void 0,0,false);},window.addEventListener("focus",F))));},u=async(e,o=a$1,v=false)=>{if(!C()||(e!==void 0&&(f={...f,...e}),!v&&!N()&&t.get().data!==null))return;if(V.has(g))return V.get(g);let W=t.get();t.set({...W,loading:true,error:null,data:W.data,isPlaceholderData:c&&W.data!==null});let $=(async()=>{try{let A={...f};if(w){let x=t.get().pagination;x&&(A.page=x.page,A.pageSize=x.pageSize);}let m=M?await i(A):await i(),y,B,J;if(m&&typeof m=="object"&&"data"in m){let x=m;y=x.data,B=x.total,J=x.hasMore;}else y=m;let z=t.get();w&&j==="accumulate"&&z.data&&Array.isArray(z.data)&&Array.isArray(y)&&(y=[...z.data,...y]),t.set({loading:!1,error:null,data:y,lastFetched:Date.now(),isPlaceholderData:!1,pagination:w?{...z.pagination,total:B,hasMore:J}:void 0}),X(),E&&E(y);}catch(A){if(o>0)return await new Promise(y=>setTimeout(y,P)),V.delete(g),u(e,o-1,v);let m=t.get();t.set({loading:false,error:A,data:m.data,lastFetched:m.lastFetched,isPlaceholderData:false,pagination:m.pagination}),p&&p(A);}finally{V.delete(g);}})();return V.set(g,$),$};_(),C()&&!M&&u();let H={...t,subscribe:e=>{G++;let o=t.subscribe(e);return ()=>{o(),G--;}},reload:async e=>{await u(e,a$1,true);},refresh:async e=>{await u(e,a$1,false);},mutate:e=>{let o=t.get();t.set({...o,data:e(o.data)});},reset:()=>{q(),f={},t.set({...K,loading:C()&&!M}),_(),C()&&!M&&u();},cleanup:()=>{G<=0&&q();},forceCleanup:()=>{q();},setParams:e=>{let o={...f};for(let v in e)e[v]===null?delete o[v]:o[v]=e[v];f=o,C()&&u(f,a$1,true);},clearParams:()=>{f={},C()&&u(void 0,a$1,true);}};return w?{...H,nextPage:async()=>{let e=t.get();!e.pagination||e.pagination.hasMore===false||(t.set({...e,pagination:{...e.pagination,page:e.pagination.page+1}}),await u(f,a$1,true));},prevPage:async()=>{let e=t.get();!e.pagination||e.pagination.page<=1||(t.set({...e,pagination:{...e.pagination,page:e.pagination.page-1}}),await u(f,a$1,true));},goToPage:async e=>{let o=t.get();!o.pagination||e<1||(t.set({...o,pagination:{...o.pagination,page:e}}),await u(f,a$1,true));},resetPagination:async()=>{let e=t.get();e.pagination&&(t.set({...e,data:j==="accumulate"?b:e.data,pagination:{...e.pagination,page:k?.initialPage||1}}),await u(f,a$1,true));}}:H}function ae(i,l={}){let{pageSize:r=10,...T}=l;return L(i,{...T,pagination:{pageSize:r,mode:"accumulate",initialPage:1}})}function te(i){let l=Object.entries(i),r=l.reduce((a,[P,c])=>(a[P]=c.get().data,a),{}),T=l.reduce((a,[P,c])=>{let n=c.get().error;return n&&(a[P]=n),a},{}),b=l.some(([,a])=>a.get().loading),h=l.find(([,a])=>a.get().error)?.[1].get().error??null,p=a({loading:b,error:h,errors:T,data:r});return l.forEach(([a,P])=>{P.subscribe(()=>{let c=false,n=null,d={},s={...p.get().data};l.forEach(([Q,k])=>{let g=k.get();g.loading&&(c=true),g.error&&(n||(n=g.error),d[Q]=g.error),s[Q]=g.data;}),p.set({loading:c,error:n,errors:d,data:s});});}),p}function re(i,l={}){let r=R().mutation??{},{invalidates:T=[],onSuccess:b=r.onSuccess,onError:h=r.onError,onSettled:E}=l,p={loading:false,data:null,error:null,isSuccess:false},a$1=a(p);return {mutate:async(...c)=>{let n=c[0];a$1.set({loading:true,data:null,error:null,isSuccess:false});try{let d=await i(n);return a$1.set({loading:!1,data:d,error:null,isSuccess:!0}),T.length>0&&await Promise.all(T.map(s=>s.reload())),b&&b(d,n),E&&E(d,null,n),{data:d,error:null}}catch(d){let s=d;return a$1.set({loading:false,data:null,error:s,isSuccess:false}),h&&h(s,n),E&&E(null,s,n),{data:null,error:s}}},get:()=>a$1.get(),subscribe:c=>a$1.subscribe(c),reset:()=>a$1.set(p)}}export{L as asyncChunk,te as combineAsyncChunks,Y as configureQuery,R as getGlobalQueryConfig,ae as infiniteAsyncChunk,re as mutation,Z as resetQueryConfig};
@@ -1,36 +1,42 @@
1
- import { C as Chunk } from '../core-DsoxfUCH.js';
2
- import { P as PaginatedAsyncChunk, a as PaginationState, A as AsyncChunk, I as InfiniteAsyncChunk, M as Mutation, b as MutationResult } from '../mutation-BGXZyZXA.js';
1
+ import { C as Chunk, R as ReadOnlyChunk } from '../core-DAc7hZla.js';
2
+ import { P as PaginatedAsyncChunk, a as PaginationState, A as AsyncChunk, I as InfiniteAsyncChunk, M as Mutation, b as MutationResult } from '../mutation-CH7ZTMUa.js';
3
3
 
4
4
  /**
5
- * Subscribes to a chunk and returns its current value along with `set`, `reset`, and `destroy`.
5
+ * Subscribes to a chunk and returns its current value along with setters,
6
+ * reset, and destroy. Accepts both writable `Chunk<T>` and read-only
7
+ * `ReadOnlyChunk<T>` (e.g. derived chunks from `.derive()` or `select()`).
6
8
  *
7
- * Pass an optional `selector` to derive a slice of the value and avoid
8
- * unnecessary re-renders when unrelated fields change.
9
- *
10
- * @param chunk - The chunk to subscribe to.
11
- * @param selector - Optional function to select a derived value.
12
- * @returns `[value, set, reset, destroy]`
9
+ * For read-only chunks, the returned `set` and `reset` will be no-ops at
10
+ * runtime prefer `useChunkValue` for derived/read-only chunks.
13
11
  *
14
12
  * @example
15
- * const [count, setCount, reset] = useChunk(countChunk);
13
+ * const count = chunk(0);
14
+ * const [value, setValue] = useChunk(count);
16
15
  *
17
16
  * @example
18
- * // Only re-renders when `name` changes
19
- * const [name, setUser] = useChunk(userChunk, u => u.name);
17
+ * // Works with derived chunks too
18
+ * const doubled = count.derive(n => n * 2);
19
+ * const [value] = useChunk(doubled);
20
20
  */
21
- declare function useChunk<T, S = T>(chunk: Chunk<T>, selector?: (value: T) => S): readonly [S, (valueOrUpdater: T | ((currentValue: T) => T)) => void, () => void, () => void];
21
+ declare function useChunk<T, S = T>(chunk: Chunk<T> | ReadOnlyChunk<T>, selector?: (value: T) => S): readonly [S, (valueOrUpdater: T | ((currentValue: T) => T)) => void, () => void, () => void];
22
22
 
23
23
  /**
24
24
  * Subscribes to a chunk and returns only its current value.
25
- * Use this in read-only components that never need to call `set`.
25
+ * Accepts both writable `Chunk<T>` and read-only `ReadOnlyChunk<T>`
26
+ * (e.g. derived chunks from `.derive()`, `select()`, or `computed()`).
27
+ *
28
+ * Prefer this over `useChunk` when you only need to read — it makes
29
+ * the read-only intent explicit and works correctly with derived chunks.
26
30
  *
27
- * @param chunk - The chunk to subscribe to.
28
- * @param selector - Optional function to select a derived value.
31
+ * @example
32
+ * const isAuthenticated = userChunk.derive(u => u !== null);
33
+ * const auth = useChunkValue(isAuthenticated); // ✅ no type error
29
34
  *
30
35
  * @example
31
- * const name = useChunkValue(userChunk, u => u.name);
36
+ * const total = computed(() => price.get() * qty.get());
37
+ * const value = useChunkValue(total); // ✅ no type error
32
38
  */
33
- declare function useChunkValue<T, S = T>(chunk: Chunk<T>, selector?: (value: T) => S): S;
39
+ declare function useChunkValue<T, S = T>(chunk: Chunk<T> | ReadOnlyChunk<T>, selector?: (value: T) => S): S;
34
40
 
35
41
  interface UseAsyncChunkResult<T, E extends Error, P extends Record<string, any>> {
36
42
  data: T | null;
@@ -1 +1 @@
1
- import {a}from'../chunk-3ATMNOKX.js';import {b}from'../chunk-ILRKKHYZ.js';import {useState,useEffect,useCallback,useRef}from'react';function k(e,s,t={}){let{useShallowEqual:i=false}=t,u=e.get(),n=s(u),a$1=a(n),P=()=>{let m=e.get(),l=s(m);(i?!b(l,n):l!==n)&&(n=l,a$1.set(l));},o=e.subscribe(P),{set:d,reset:T,...E}=a$1;return {...E,derive:m=>k(a$1,m,t),destroy:()=>{o(),a$1.destroy();}}}function U(e,s){let t=s?k(e,s):e,[i,u]=useState(()=>t.get());useEffect(()=>{let o=t.subscribe(d=>{u(()=>d);});return ()=>o()},[t]);let n=useCallback(o=>{e.set(o);},[e]),a=useCallback(()=>{e.reset();},[e]),P=useCallback(()=>{e.destroy();},[e]);return [i,n,a,P]}function _(e,s){let[t]=U(e,s);return t}function x(e){return "nextPage"in e}function M(e){return "setParams"in e}function G(e){return "clearParams"in e}function O(e,s={}){let{initialParams:t,fetchOnMount:i=false}=s,[u,n]=useState(()=>e.get()),a=useRef({initialParams:t,fetchOnMount:i});a.current={initialParams:t,fetchOnMount:i},useEffect(()=>{n(e.get());let r=e.subscribe(q=>{n(q);}),{initialParams:D,fetchOnMount:F}=a.current;return D&&M(e)?e.setParams(D):F&&e.reload(),()=>{r(),e.cleanup();}},[e]);let P=useCallback(r=>e.reload(r),[e]),o=useCallback(r=>e.refresh(r),[e]),d=useCallback(r=>e.mutate(r),[e]),T=useCallback(()=>e.reset(),[e]),E=useCallback(r=>{M(e)&&e.setParams(r);},[e]),m=useCallback(()=>{G(e)&&e.clearParams();},[e]),l=useCallback(()=>x(e)?e.nextPage():Promise.resolve(),[e]),f=useCallback(()=>x(e)?e.prevPage():Promise.resolve(),[e]),h=useCallback(r=>x(e)?e.goToPage(r):Promise.resolve(),[e]),y=useCallback(()=>x(e)?e.resetPagination():Promise.resolve(),[e]),{data:b,loading:v,error:p,lastFetched:g,isPlaceholderData:C=false,pagination:w}=u,A={data:b,loading:v,error:p,lastFetched:g,isPlaceholderData:C,reload:P,refresh:o,mutate:d,reset:T};if(M(e)&&(A.setParams=E,A.clearParams=m),x(e)){let r=A;r.pagination=w,r.nextPage=l,r.prevPage=f,r.goToPage=h,r.resetPagination=y;}return A}function N(e,s={}){let{initialParams:t,autoLoad:i=true,threshold:u=1,fetchOnMount:n}=s,a=O(e,{...t&&{initialParams:t},fetchOnMount:n}),{loading:P,pagination:o,nextPage:d,data:T,error:E,isPlaceholderData:m}=a,l=useRef(P),f=useRef(o?.hasMore??false),h=useRef(d);l.current=P,f.current=o?.hasMore??false,h.current=d;let y=useRef(null);useEffect(()=>{if(!i||typeof window>"u"||!("IntersectionObserver"in window))return;let p=new IntersectionObserver(C=>{C[0].isIntersecting&&!l.current&&f.current&&h.current();},{threshold:u}),g=y.current;return g&&p.observe(g),()=>{g&&p.unobserve(g),p.disconnect();}},[i,u]);let b=useCallback(()=>{!l.current&&f.current&&h.current();},[]),v=P&&T!==null&&T.length>0&&(o?.page??1)>1;return {...a,data:T,error:E,isPlaceholderData:m??false,isFetchingMore:v,hasMore:o?.hasMore??false,loadMore:b,observerTarget:y}}function Y(e){let[s,t]=useState(()=>e.get());useEffect(()=>(t(e.get()),e.subscribe(a=>{t(a);})),[e]);let i=useCallback((...n)=>e.mutate(...n),[e]),u=useCallback(()=>e.reset(),[e]);return {loading:s.loading,data:s.data,error:s.error,isSuccess:s.isSuccess,mutate:i,reset:u}}export{O as useAsyncChunk,U as useChunk,_ as useChunkValue,N as useInfiniteAsyncChunk,Y as useMutation};
1
+ import {a}from'../chunk-7PLFRQ2T.js';import {b}from'../chunk-PZ7A72TA.js';import {useState,useEffect,useCallback,useRef}from'react';function k(e,s,t={}){let{useShallowEqual:i=false}=t,u=e.get(),n=s(u),a$1=a(n),P=()=>{let m=e.get(),l=s(m);(i?!b(l,n):l!==n)&&(n=l,a$1.set(l));},o=e.subscribe(P),{set:d,reset:T,...h}=a$1;return {...h,derive:m=>k(a$1,m,t),destroy:()=>{o(),a$1.destroy();}}}function U(e,s){let t=s?k(e,s):e,[i,u]=useState(()=>t.get());useEffect(()=>{let o=t.subscribe(d=>{u(()=>d);});return ()=>o()},[t]);let n=useCallback(o=>{"set"in e&&e.set(o);},[e]),a=useCallback(()=>{"reset"in e&&e.reset();},[e]),P=useCallback(()=>{e.destroy();},[e]);return [i,n,a,P]}function _(e,s){let[t]=U(e,s);return t}function y(e){return "nextPage"in e}function M(e){return "setParams"in e}function G(e){return "clearParams"in e}function O(e,s={}){let{initialParams:t,fetchOnMount:i=false}=s,[u,n]=useState(()=>e.get()),a=useRef({initialParams:t,fetchOnMount:i});a.current={initialParams:t,fetchOnMount:i},useEffect(()=>{n(e.get());let r=e.subscribe(q=>{n(q);}),{initialParams:D,fetchOnMount:F}=a.current;return D&&M(e)?e.setParams(D):F&&e.reload(),()=>{r(),e.cleanup();}},[e]);let P=useCallback(r=>e.reload(r),[e]),o=useCallback(r=>e.refresh(r),[e]),d=useCallback(r=>e.mutate(r),[e]),T=useCallback(()=>e.reset(),[e]),h=useCallback(r=>{M(e)&&e.setParams(r);},[e]),m=useCallback(()=>{G(e)&&e.clearParams();},[e]),l=useCallback(()=>y(e)?e.nextPage():Promise.resolve(),[e]),f=useCallback(()=>y(e)?e.prevPage():Promise.resolve(),[e]),E=useCallback(r=>y(e)?e.goToPage(r):Promise.resolve(),[e]),x=useCallback(()=>y(e)?e.resetPagination():Promise.resolve(),[e]),{data:b,loading:C,error:p,lastFetched:g,isPlaceholderData:v=false,pagination:w}=u,R={data:b,loading:C,error:p,lastFetched:g,isPlaceholderData:v,reload:P,refresh:o,mutate:d,reset:T};if(M(e)&&(R.setParams=h,R.clearParams=m),y(e)){let r=R;r.pagination=w,r.nextPage=l,r.prevPage=f,r.goToPage=E,r.resetPagination=x;}return R}function N(e,s={}){let{initialParams:t,autoLoad:i=true,threshold:u=1,fetchOnMount:n}=s,a=O(e,{...t&&{initialParams:t},fetchOnMount:n}),{loading:P,pagination:o,nextPage:d,data:T,error:h,isPlaceholderData:m}=a,l=useRef(P),f=useRef(o?.hasMore??false),E=useRef(d);l.current=P,f.current=o?.hasMore??false,E.current=d;let x=useRef(null);useEffect(()=>{if(!i||typeof window>"u"||!("IntersectionObserver"in window))return;let p=new IntersectionObserver(v=>{v[0].isIntersecting&&!l.current&&f.current&&E.current();},{threshold:u}),g=x.current;return g&&p.observe(g),()=>{g&&p.unobserve(g),p.disconnect();}},[i,u]);let b=useCallback(()=>{!l.current&&f.current&&E.current();},[]),C=P&&T!==null&&T.length>0&&(o?.page??1)>1;return {...a,data:T,error:h,isPlaceholderData:m??false,isFetchingMore:C,hasMore:o?.hasMore??false,loadMore:b,observerTarget:x}}function Y(e){let[s,t]=useState(()=>e.get());useEffect(()=>(t(e.get()),e.subscribe(a=>{t(a);})),[e]);let i=useCallback((...n)=>e.mutate(...n),[e]),u=useCallback(()=>e.reset(),[e]);return {loading:s.loading,data:s.data,error:s.error,isSuccess:s.isSuccess,mutate:i,reset:u}}export{O as useAsyncChunk,U as useChunk,_ as useChunkValue,N as useInfiniteAsyncChunk,Y as useMutation};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "stunk",
3
- "version": "3.0.0-beta.3",
3
+ "version": "3.0.0-rc",
4
4
  "description": "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 applications.",
5
5
  "type": "module",
6
6
  "repository": {
@@ -1 +0,0 @@
1
- import {a}from'./chunk-ILRKKHYZ.js';var b=new Set,c=new Map,g=0;function S(r,u={}){let s=g++,w=`chunk_${s}`,p=u.middleware||[];u.strict??false;if(r===void 0)throw new Error(`[${w}] Initial value cannot be undefined.`);let n=r,o=new Set,l=()=>{o.forEach(e=>e(n));};c.set(s,{notify:l});let d=()=>{if(o.size===0){c.delete(s);return}l();},v=()=>(n),m=()=>n,C=e=>{let i;typeof e=="function"?i=e(n):i=e;let t=a(i,p);t!==n&&(n=t,d());},f=e=>{if(typeof e!="function")throw new Error("Callback must be a function.");return o.add(e),()=>o.delete(e)},y={get:v,peek:m,set:C,subscribe:f,derive:e=>{if(typeof e!="function")throw new Error("Derive function must be a function.");let i=e(n),t=S(i),h=f(()=>{let D=e(n);t.set(D);}),a=t.destroy;return t.destroy=()=>{h(),a();},t},reset:()=>{n=r,d();},destroy:()=>{o.clear(),n=r,b.delete(s),c.delete(s);}};return y}export{S as a};
@@ -1 +0,0 @@
1
- function i(e,r){if(e===void 0)throw new Error("Value cannot be undefined.");if(r.length===0)return e;let t=e;for(let o=0;o<r.length;o++){let n=r[o],c=typeof n=="function"?n:n.fn,f=typeof n=="function"?`index ${o}`:n.name||`index ${o}`;try{let s=c(t);if(s===void 0)break;if(s===null)throw new Error(`Middleware "${f}" returned null value.`);t=s;}catch(s){let u=s instanceof Error?s.message:String(s);throw new Error(`Middleware "${f}" threw an error: ${u}`)}}return t}function l(e,r){if(e===r)return true;if(!e||!r||typeof e!=typeof r)return false;if(Array.isArray(e)&&Array.isArray(r)){if(e.length!==r.length)return false;for(let t=0;t<e.length;t++)if(e[t]!==r[t])return false;return true}if(typeof e=="object"&&typeof r=="object"){let t=Object.keys(e),o=Object.keys(r);if(t.length!==o.length)return false;for(let n of t)if(!Object.prototype.hasOwnProperty.call(r,n)||e[n]!==r[n])return false;return true}return false}export{i as a,l as b};