UNPKG

@trpc/react-query

Version:

The tRPC React library

80 lines (79 loc) 3.56 kB
import { TRPCFetchInfiniteQueryOptions, TRPCFetchQueryOptions } from "./getQueryKey.d-CruH3ncI.mjs"; import { TRPCClientError } from "@trpc/client"; import { QueryClient } from "@tanstack/react-query"; import { AnyProcedure, AnyRootTypes, AnyRouter, RouterCaller, RouterRecord, TypeError, inferProcedureInput, inferProcedureOutput, inferRouterRootTypes } from "@trpc/server/unstable-core-do-not-import"; import * as React from "react"; import { inferTransformedProcedureOutput as inferTransformedProcedureOutput$1 } from "@trpc/server"; //#region src/rsc.d.ts type DecorateProcedure<TRoot extends AnyRootTypes, TProcedure extends AnyProcedure> = { (input: inferProcedureInput<TProcedure>): Promise<inferProcedureOutput<TProcedure>>; prefetch: (input: inferProcedureInput<TProcedure>, opts?: TRPCFetchQueryOptions<inferTransformedProcedureOutput$1<TRoot, TProcedure>, TRPCClientError<TRoot>>) => Promise<void>; prefetchInfinite: (input: inferProcedureInput<TProcedure>, opts?: TRPCFetchInfiniteQueryOptions<inferProcedureInput<TProcedure>, inferTransformedProcedureOutput$1<TRoot, TProcedure>, TRPCClientError<TRoot>>) => Promise<void>; }; type DecorateRouterRecord<TRoot extends AnyRootTypes, TRecord extends RouterRecord> = { [TKey in keyof TRecord]: TRecord[TKey] extends infer $Value ? $Value extends AnyProcedure ? DecorateProcedure<TRoot, $Value> : $Value extends RouterRecord ? DecorateRouterRecord<TRoot, $Value> : never : never }; type Caller<TRouter extends AnyRouter> = ReturnType<RouterCaller<inferRouterRootTypes<TRouter>, TRouter['_def']['record']>>; /** * @note This requires `@tanstack/react-query@^5.49.0` * @note Make sure to have `dehydrate.serializeData` and `hydrate.deserializeData` * set to your data transformer in your `QueryClient` factory. * @example * ```ts * export const createQueryClient = () => * new QueryClient({ * defaultOptions: { * dehydrate: { * serializeData: transformer.serialize, * }, * hydrate: { * deserializeData: transformer.deserialize, * }, * }, * }); * ``` */ declare function createHydrationHelpers<TRouter extends AnyRouter>(caller: AnyRouter extends TRouter ? TypeError<'Generic parameter missing in `createHydrationHelpers<HERE>`'> : Caller<TRouter>, getQueryClient: () => QueryClient): { /*** * Wrapped caller with prefetch helpers * Can be used as a regular [server-side caller](https://trpc.io/docs/server/server-side-calls) * or using prefetch helpers to put the promise into the QueryClient cache * @example * ```ts * const data = await trpc.post.get("postId"); * * // or * void trpc.post.get.prefetch("postId"); * ``` */ trpc: DecorateRouterRecord<inferRouterRootTypes<TRouter>, TRouter["_def"]["record"]>; /** * HoC to hydrate the query client for a client component * to pick up the prefetched promise and skip an initial * client-side fetch. * @example * ```tsx * // MyRSC.tsx * const MyRSC = ({ params }) => { * void trpc.post.get.prefetch(params.postId); * * return ( * <HydrateClient> * <MyCC postId={params.postId} /> * </HydrateClient> * ); * }; * * // MyCC.tsx * "use client" * const MyCC = ({ postId }) => { * const { data: post } = trpc.post.get.useQuery(postId); * return <div>{post.title}</div>; * }; * ``` */ HydrateClient: (props: { children: React.ReactNode; }) => React.JSX.Element; }; //#endregion export { createHydrationHelpers }; //# sourceMappingURL=rsc.d.mts.map