1import{s as e,t}from"./react-CtTwWkI9.js";import{t as n}from"./jsx-runtime-Deq3KfO3.js";import{l as r,m as i,n as a,o,v as s}from"./api-DnNaRTil.js";var c=e(n(),1),l=e(t(),1),u=(0,l.createContext)({registry:null}),d=({children:e,debug:t,expiration:n,maxIdleEntries:r})=>{let i=o();if(i===void 0)throw Error("Could not find Convex client! `ConvexQueryCacheProvider` must be used in the React component tree under `ConvexProvider`. Did you forget it? See https://docs.convex.dev/quick-start#set-up-convex-in-your-react-app");let a=(0,l.useMemo)(()=>new m(i,{debug:t,expiration:n,maxIdleEntries:r}),[i,t,n,r]);return(0,c.jsx)(u.Provider,{value:{registry:a},children:e})},f=3e5,p=250,m=class{queries;subs;convex;timeout;maxIdleEntries;idle;constructor(e,t){if(this.queries=new Map,this.subs=new Map,this.convex=e,this.idle=0,this.timeout=t.expiration??f,this.maxIdleEntries=t.maxIdleEntries??p,t.debug??!1){let e=new WeakRef(this),t=setInterval(()=>{let n=e.deref();n===void 0?clearInterval(t):n.debug()},3e3)}}start(e,t,n,r){let i=this.queries.get(t);this.subs.set(e,t),i===void 0?(i={refs:new Set,evictTimer:null,unsub:this.convex.watchQuery(n,r).onUpdate(()=>{})},this.queries.set(t,i)):i.evictTimer!==null&&(--this.idle,clearTimeout(i.evictTimer),i.evictTimer=null),i.refs.add(e)}end(e){let t=this.subs.get(e);if(t){this.subs.delete(e);let n=this.queries.get(t);if(n?.refs.delete(e),n?.refs.size===0){let e=()=>{n.unsub(),this.queries.delete(t)};this.idle==this.maxIdleEntries?e():(this.idle+=1,n.evictTimer=window.setTimeout(()=>{--this.idle,e()},this.timeout))}}}debug(){console.log(`DEBUG CACHE`),console.log(`IDLE = ${this.idle}`),console.log(` SUBS`);
1for(let[e,t]of this.subs.entries())console.log(` ${e} => ${t}`);console.log(` QUERIES`);for(let[e,t]of this.queries.entries())console.log(` ${e} => ${t.refs.size} refs, evict = ${t.evictTimer}`);console.log(`~~~~~~~~~~~~~~~~~~~~~~`)}},h=typeof crypto<`u`&&crypto.randomUUID?crypto.randomUUID.bind(crypto):()=>Math.random().toString(36).substring(2)+Math.random().toString(36).substring(2);function g(e){let{registry:t}=(0,l.useContext)(u);if(t===null)throw Error("Could not find `ConvexQueryCacheContext`! This `useQuery` implementation must be used in the React component tree under `ConvexQueryCacheProvider`. Did you forget it? ");let n={};for(let[t,{query:r,args:i}]of Object.entries(e))n[t]=v(r,i);(0,l.useEffect)(()=>{let r=[];for(let[i,{query:a,args:o}]of Object.entries(e)){let e=h();t.start(e,n[i],a,o),r.push(e)}return()=>{for(let e of r)t.end(e)}},[t,JSON.stringify(n)]);let r=(0,l.useMemo)(()=>e,[JSON.stringify(n)]);return a(r)}function _(e,...t){let n=t[0]??{},r=g(n===`skip`?{}:{_default:{query:e,args:n}})._default;if(r instanceof Error)throw r;return r}function v(e,t){let n=[r(e),s(t)];return JSON.stringify(n)}function y(){return 0}var b=(e,t,n)=>r=>{let i={...r.queries},a=r.nextPageKey,o=r.nextPageKey+1,s=r.nextPageKey+2;i[a]={query:r.query,args:{...r.args,paginationOpts:{...r.queries[e].args.paginationOpts,endCursor:t}}},i[o]={query:r.query,args:{...r.args,paginationOpts:{...r.queries[e].args.paginationOpts,cursor:t,endCursor:n}}};let c={...r.ongoingSplits};return c[e]=[a,o],{...r,nextPageKey:s,queries:i,ongoingSplits:c}},x=e=>t=>{let n=t.ongoingSplits[e];if(n===void 0)return t;let r={...t.queries};delete r[e];let i={...t.ongoingSplits};delete i[e];let a=t.pageKeys.slice(),o=t.pageKeys.findIndex(t=>t===e);return o>=0&&(a=[...t.pageKeys.slice(0,o),...n,...t.pageKeys.slice(o+1)]),{...t,queries:r,pageKeys:a,ongoingSplits:i}};function S(e,t,n){if(typeof n?.initialNumItems!=`number`||n.initialNumItems<=0)throw Error(`\`options.initialNumItems\` must be a positive number. Received \`${n?.initialNumItems}\`.`);let a=t===`skip`,c=a?{}:t,u=r(e),d=(0,l.useMemo)(()=>()=>{let t=y();return{query:e,args:c,id:t,nextPageKey:1,pageKeys:a?[]:[0],queries:a?{}:{0:{query:e,args:{...c,paginationOpts:{numItems:n.initialNumItems,cursor:null,id:t}}}},ongoingSplits:{},skip:a}},[JSON.stringify(s(c)),u,n.initialNumItems,a]),[f,p]=(0,l.useState)(d),m=f;(a!==f.skip||r(e)!==r(f.query)||JSON.stringify(s(c))!==JSON.stringify(s(f.args)))&&(m=d(),p(m));let h=o().logger,_=g(m.queries),[v,S]=(0,l.useMemo)(()=>{let e,t=[];for(let r of m.pageKeys){if(e=_[r],e===void 0)break;if(e instanceof Error){if(e.message.includes(`InvalidCursor`)||e instanceof i&&typeof e.data==`object`&&e.data?.isConvexSystemError===!0&&e.data?.paginationError===`InvalidCursor`)return h.warn(`usePaginatedQuery hit error, resetting pagination state: `+e.message),p(d),[[],void 0];throw e}let a=m.ongoingSplits[r];if(a===void 0?e.splitCursor&&(e.pageStatus===`SplitRecommended`||e.pageStatus===`SplitRequired`||(n.customPagination?e.page.length>n.initialNumItems:e.page.length>n.initialNumItems*2))&&p(b(r,e.splitCursor,e.continueCursor)):_[a[0]]!==void 0&&_[a[1]]!==void 0&&p(x(r)),e.pageStatus===`SplitRequired`)return[t,void 0];t.push(...e.page)}return[t,e]},[_,m.pageKeys,m.ongoingSplits,n.initialNumItems,d,h]);return{results:v,...(0,l.useMemo)(()=>{if(S===void 0&&m.pageKeys.length<=1)return{status:`LoadingFirstPage`,isLoading:!0,loadMore:e=>{}};if(S===void 0||n.customPagination&&m.ongoingSplits[m.pageKeys.at(-1)]!==void 0)return{status:`LoadingMore`,isLoading:!0,loadMore:e=>{}};if(S.isDone)return{status:`Exhausted`,isLoading:!1,loadMore:e=>{}};let e=S.continueCursor,t=!1;return{status:`CanLoadMore`,isLoading:!1,loadMore:r=>{t||(t=!0,p(t=>{let i=t.nextPageKey,a={...t.queries},o=t.ongoingSplits,s=t.pageKeys;if(n.customPagination){let n=t.pageKeys.at(-1),r=i;a[r]={query:t.query,args:{...t.args,paginationOpts:{...a[n].args.paginationOpts,endCursor:e}}},i++,o={...o,[n]:[r,i]}}else s=[...t.pageKeys,i];return a[i]={query:t.query,args:{...t.args,paginationOpts:{numItems:r,cursor:e,id:t.id}}},i++,{...t,pageKeys:s,nextPageKey:i,queries:a,ongoingSplits:o}}))}}},[S,m.nextPageKey,n.customPagination])}}export{_ as n,d as r,S as t};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.