Files
turbostarter/apps/web/src/lib/query/client.tsx
Alejandro Gutiérrez 3527e732d4 feat: turbostarter boilerplate
Production-ready Next.js boilerplate with:
- Runtime env validation (fail-fast on missing vars)
- Feature-gated config (S3, Stripe, email, OAuth)
- Docker + Coolify deployment pipeline
- PostgreSQL + pgvector, MinIO S3, Better Auth
- TypeScript strict mode (no ignoreBuildErrors)
- i18n (en/es), AI modules, billing, monitoring

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 01:01:55 +01:00

31 lines
935 B
TypeScript

"use client";
import { QueryClientProvider as TanstackQueryClientProvider } from "@tanstack/react-query";
import { ReactQueryDevtools } from "@tanstack/react-query-devtools";
import { createQueryClient } from "./utils";
import type { QueryClient } from "@tanstack/react-query";
let clientQueryClientSingleton: QueryClient | undefined = undefined;
export const getQueryClient = () => {
if (typeof window === "undefined") {
// Server: always make a new query client
return createQueryClient();
} else {
// Browser: use singleton pattern to keep the same query client
return (clientQueryClientSingleton ??= createQueryClient());
}
};
export function QueryClientProvider(props: { children: React.ReactNode }) {
const queryClient = getQueryClient();
return (
<TanstackQueryClientProvider client={queryClient}>
{props.children}
<ReactQueryDevtools />
</TanstackQueryClientProvider>
);
}