UNPKG

@suspensive/react-query-4

Version:

Suspensive interfaces for @tanstack/react-query@4

1 lines 3.34 kB
{"version":3,"file":"createGetQueryClient.mjs","names":[],"sources":["../src/createGetQueryClient.ts"],"sourcesContent":["import { QueryClient, type QueryClientConfig, isServer } from '@tanstack/react-query'\n\n/**\n * Creates a function that returns a QueryClient instance, with different behavior for server and client environments.\n *\n * On the server, it always creates a new QueryClient instance with `cacheTime: Infinity` to prevent data from being garbage collected.\n * On the client, it reuses the same QueryClient instance to avoid recreating it during React's initial render suspension.\n *\n * @experimental This component is experimental and may be changed or removed in the future.\n *\n * @param config - Optional QueryClient configuration. On the server, `cacheTime` will be automatically set to `Infinity`.\n * @returns An object containing a `getQueryClient` function that returns a QueryClient instance.\n *\n * @example\n * ```tsx\n * // Create a get-query-client.ts file in your project:\n * // get-query-client.ts\n * import { createGetQueryClient } from '@suspensive/react-query'\n *\n * export const { getQueryClient } = createGetQueryClient()\n *\n * @example\n * ```tsx\n * // Then import and use it in your code:\n * // app/providers.tsx\n * 'use client'\n *\n * import { QueryClientProvider } from '@tanstack/react-query'\n * import { ReactQueryDevtools } from '@tanstack/react-query-devtools'\n * import { getQueryClient } from '@/app/get-query-client'\n * import type * as React from 'react'\n *\n * export default function Providers({ children }: { children: React.ReactNode }) {\n * const queryClient = getQueryClient()\n *\n * return (\n * <QueryClientProvider client={queryClient}>\n * {children}\n * <ReactQueryDevtools />\n * </QueryClientProvider>\n * )\n * }\n * ```\n *\n * @see {@link https://suspensive.org/docs/react-query/createGetQueryClient Suspensive Docs}\n */\nexport function createGetQueryClient(config: QueryClientConfig = {}) {\n let browserQueryClient: QueryClient | undefined\n const getQueryClientConfig: QueryClientConfig = isServer\n ? {\n ...config,\n defaultOptions: {\n ...config.defaultOptions,\n queries: {\n ...config.defaultOptions?.queries,\n cacheTime: Infinity,\n },\n },\n }\n : config\n\n function getQueryClient() {\n if (isServer) {\n // Server: always make a new query client\n return new QueryClient(getQueryClientConfig)\n }\n // Browser: make a new query client if we don't already have one\n // This is very important, so we don't re-make a new client if React\n // suspends during the initial render. This may not be needed if we\n // have a suspense boundary BELOW the creation of the query client\n if (!browserQueryClient) {\n browserQueryClient = new QueryClient(getQueryClientConfig)\n }\n return browserQueryClient\n }\n\n return { getQueryClient }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CA,SAAgB,qBAAqB,SAA4B,CAAC,GAAG;;CACnE,IAAI;CACJ,MAAM,uBAA0C,6CAEvC,eACH,kDACK,OAAO,uBACV,oEACK,OAAO,8FAAgB,gBAC1B,WAAW,UACb,GACF,GACF,IACA;CAEJ,SAAS,iBAAiB;EACxB,IAAI,UAEF,OAAO,IAAI,YAAY,oBAAoB;EAM7C,IAAI,CAAC,oBACH,qBAAqB,IAAI,YAAY,oBAAoB;EAE3D,OAAO;CACT;CAEA,OAAO,EAAE,eAAe;AAC1B"}