import { defaultShouldDehydrateQuery, isServer, QueryClient } from '@tanstack/react-query' function makeQueryClient() { return new QueryClient({ defaultOptions: { queries: { staleTime: 30 * 1000, gcTime: 5 * 60 * 1000, refetchOnWindowFocus: false, retry: 1, retryOnMount: false, }, mutations: { retry: false, }, dehydrate: { shouldDehydrateQuery: (query) => defaultShouldDehydrateQuery(query) || query.state.status === 'pending', }, }, }) } let browserQueryClient: QueryClient | undefined /** * Returns a QueryClient instance. On the server, creates a new instance per request. * On the client, reuses a singleton instance. */ export function getQueryClient() { if (isServer) { return makeQueryClient() } if (!browserQueryClient) { browserQueryClient = makeQueryClient() } return browserQueryClient }