@trpc/tanstack-react-query
Version:
TanStack React Query Integration for tRPC
1 lines • 99.5 kB
Source Map (JSON)
{"version":3,"file":"src-B9VQqALx.mjs","names":[],"sources":["../src/internals/utils.ts","../src/internals/handles.ts","../src/internals/infiniteQueryOptions.ts","../src/internals/mutationOptions.ts","../src/internals/queryOptions.ts","../src/internals/subscriptionOptions.ts","../src/internals/createOptionsProxy.ts","../src/internals/Context.tsx","../src/internals/hydration.ts","../src/internals/HydrateClient.tsx"],"sourcesContent":["import { skipToken, type QueryClient } from '@tanstack/react-query';\nimport {\n isFunction,\n isObject,\n run,\n} from '@trpc/server/unstable-core-do-not-import';\nimport type {\n AnyTRPCMutationKey,\n AnyTRPCQueryKey,\n FeatureFlags,\n QueryType,\n TRPCMutationKeyWithoutPrefix,\n TRPCQueryKey,\n TRPCQueryKeyWithoutPrefix,\n TRPCQueryKeyWithPrefix,\n TRPCQueryOptionsResult,\n} from './types';\n\n/**\n * @internal\n */\nexport function createTRPCOptionsResult(value: {\n path: string[];\n}): TRPCQueryOptionsResult['trpc'] {\n const path = value.path.join('.');\n\n return {\n path,\n };\n}\n\nexport function isPrefixedQueryKey(\n queryKey: TRPCQueryKey<any>,\n): queryKey is TRPCQueryKeyWithPrefix {\n return queryKey.length >= 3;\n}\n\nexport function readQueryKey(queryKey: AnyTRPCQueryKey) {\n if (isPrefixedQueryKey(queryKey)) {\n return {\n type: 'prefixed' as const,\n prefix: queryKey[0],\n path: queryKey[1],\n args: queryKey[2],\n };\n } else {\n return {\n type: 'unprefixed' as const,\n prefix: undefined,\n path: queryKey[0],\n args: queryKey[1],\n };\n }\n}\n\n/**\n * @internal\n */\nexport function getClientArgs<TOptions, TFeatureFlags extends FeatureFlags>(\n queryKey: TRPCQueryKey<TFeatureFlags['keyPrefix']>,\n opts: TOptions,\n infiniteParams?: {\n pageParam: any;\n direction: 'forward' | 'backward';\n },\n) {\n const queryKeyData = readQueryKey(queryKey);\n\n let input = queryKeyData.args?.input;\n if (infiniteParams) {\n input = {\n ...(queryKeyData.args?.input ?? {}),\n ...(infiniteParams.pageParam !== undefined\n ? { cursor: infiniteParams.pageParam }\n : {}),\n direction: infiniteParams.direction,\n };\n }\n return [queryKeyData.path.join('.'), input, (opts as any)?.trpc] as const;\n}\n\n/**\n * @internal\n */\nexport async function buildQueryFromAsyncIterable<\n TQueryKey extends TRPCQueryKey<any>,\n>(\n asyncIterable: AsyncIterable<unknown>,\n queryClient: QueryClient,\n queryKey: TQueryKey,\n) {\n const queryCache = queryClient.getQueryCache();\n\n const query = queryCache.build(queryClient, {\n queryKey,\n });\n\n query.setState({\n data: [],\n status: 'success',\n });\n\n const aggregate: unknown[] = [];\n for await (const value of asyncIterable) {\n aggregate.push(value);\n\n query.setState({\n data: [...aggregate],\n });\n }\n return aggregate;\n}\n\n/**\n * To allow easy interactions with groups of related queries, such as\n * invalidating all queries of a router, we use an array as the path when\n * storing in tanstack query.\n *\n * @internal\n */\nexport function getQueryKeyInternal(opts: {\n path: string[];\n input?: unknown;\n type: QueryType;\n prefix: string | undefined;\n}): AnyTRPCQueryKey {\n const key = run((): TRPCQueryKeyWithoutPrefix => {\n const { input, type } = opts;\n\n // Construct a query key that is easy to destructure and flexible for\n // partial selecting etc.\n // https://github.com/trpc/trpc/issues/3128\n\n // some parts of the path may be dot-separated, split them up\n const splitPath = opts.path.flatMap((part) => part.split('.'));\n\n if (typeof input === 'undefined' && type === 'any') {\n // this matches also all mutations (see `getMutationKeyInternal`)\n\n // for `utils.invalidate()` to match all queries (including vanilla react-query)\n // we don't want nested array if path is empty, i.e. `[]` instead of `[[]]`\n return splitPath.length ? [splitPath] : ([] as unknown as TRPCQueryKey);\n }\n\n if (\n type === 'infinite' &&\n isObject(input) &&\n ('direction' in input || 'cursor' in input)\n ) {\n const {\n cursor: _,\n direction: __,\n ...inputWithoutCursorAndDirection\n } = input;\n return [\n splitPath,\n {\n input: inputWithoutCursorAndDirection,\n type: 'infinite',\n },\n ];\n }\n\n return [\n splitPath,\n {\n ...(typeof input !== 'undefined' &&\n input !== skipToken && { input: input }),\n ...(type && type !== 'any' && { type: type }),\n },\n ];\n });\n\n if (opts.prefix) {\n key.unshift([opts.prefix]);\n }\n return key;\n}\n\n/**\n * @internal\n */\nexport function getMutationKeyInternal(opts: {\n prefix: string | undefined;\n path: string[];\n}): AnyTRPCMutationKey {\n // some parts of the path may be dot-separated, split them up\n const key: TRPCMutationKeyWithoutPrefix = [\n opts.path.flatMap((part) => part.split('.')),\n ];\n\n if (opts.prefix) {\n key.unshift([opts.prefix]);\n }\n return key;\n}\n\n/**\n * @internal\n */\nexport function unwrapLazyArg<T>(valueOrLazy: T | (() => T)): T {\n return (isFunction(valueOrLazy) ? valueOrLazy() : valueOrLazy) as T;\n}\n","import type {\n FetchQueryOptions,\n GetNextPageParamFunction,\n QueryClient,\n QueryFunction,\n} from '@tanstack/react-query';\nimport { hashKey, isCancelledError } from '@tanstack/react-query';\nimport type { TRPCClientErrorLike } from '@trpc/client';\nimport { isTRPCClientError } from '@trpc/client';\nimport type {\n UnusedSkipTokenTRPCInfiniteQueryOptionsIn,\n UnusedSkipTokenTRPCInfiniteQueryOptionsOut,\n} from './infiniteQueryOptions';\nimport type {\n UnusedSkipTokenTRPCQueryOptionsIn,\n UnusedSkipTokenTRPCQueryOptionsOut,\n} from './queryOptions';\nimport type {\n ExtractCursorType,\n FeatureFlags,\n ResolverDef,\n TRPCQueryBaseOptions,\n TRPCQueryKey,\n} from './types';\nimport { readQueryKey } from './utils';\n\ndeclare const handleDef: unique symbol;\n\ntype ErrorOf<TDef extends ResolverDef> = TRPCClientErrorLike<{\n transformer: TDef['transformer'];\n errorShape: TDef['errorShape'];\n}>;\n\ntype InfiniteHandleInput<TInput> = TInput extends object\n ? Omit<TInput, 'cursor' | 'direction'>\n : TInput;\n\n/**\n * A plain tuple typed with the procedure's input. TanStack Router's serializability check\n * rejects `unknown` inputs and `DataTag`-ged keys, so handles in `beforeLoad` need this shape.\n */\ntype HandleQueryKey<\n TDef extends ResolverDef,\n TInput,\n TType extends 'query' | 'infinite',\n> = TDef['featureFlags']['keyPrefix'] extends true\n ? [prefix: string[], path: string[], opts?: { input?: TInput; type?: TType }]\n : [path: string[], opts?: { input?: TInput; type?: TType }];\n\n/**\n * A serializable reference to a query started on the server (or in a loader).\n * Pass it to a client component and read it with `trpc.unstable_$fromHandle(handle)`.\n */\nexport interface unstable_TRPCQueryHandle<\n TDef extends ResolverDef = ResolverDef,\n> {\n /**\n * Type-only: never present at runtime. Required, so only the handle verbs\n * create handles.\n */\n readonly [handleDef]: TDef & { kind: 'query' };\n readonly queryKey: HandleQueryKey<TDef, TDef['input'], 'query'>;\n /** The input the query was started with */\n readonly input: TDef['input'];\n}\n\n/**\n * A serializable reference to an infinite query started on the server (or in a loader).\n * Read it with `trpc.unstable_$fromHandle(handle, { getNextPageParam })`.\n */\nexport interface unstable_TRPCInfiniteQueryHandle<\n TDef extends ResolverDef = ResolverDef,\n> {\n /**\n * Type-only: never present at runtime. Required, so only the handle verbs\n * create handles.\n */\n readonly [handleDef]: TDef & { kind: 'infinite' };\n readonly queryKey: HandleQueryKey<\n TDef,\n InfiniteHandleInput<TDef['input']>,\n 'infinite'\n >;\n /** The input the query was started with, without `cursor` and `direction` */\n readonly input: InfiniteHandleInput<TDef['input']>;\n readonly initialCursor?: NonNullable<ExtractCursorType<TDef['input']>> | null;\n}\n\n/** Any query or infinite query handle. */\nexport type unstable_AnyTRPCHandle =\n | unstable_TRPCQueryHandle<any>\n | unstable_TRPCInfiniteQueryHandle<any>;\n\n/** Options for starting a query that returns a handle */\nexport interface unstable_TRPCPrefetchOptions\n extends\n Pick<\n FetchQueryOptions,\n 'staleTime' | 'retry' | 'retryDelay' | 'gcTime' | 'meta'\n >,\n TRPCQueryBaseOptions {}\n\ntype HandleGetNextPageParam<TDef extends ResolverDef> =\n GetNextPageParamFunction<\n NonNullable<ExtractCursorType<TDef['input']>> | null,\n TDef['output']\n >;\n\n/**\n * Options for starting an infinite query that returns a handle. Pass\n * `pages` and `getNextPageParam` to load several pages up front.\n * @see https://trpc.io/docs/client/tanstack-react-query/handles#infinite-queries\n */\nexport type unstable_TRPCPrefetchInfiniteOptions<TDef extends ResolverDef> =\n unstable_TRPCPrefetchOptions & {\n initialCursor?: NonNullable<ExtractCursorType<TDef['input']>> | null;\n } & (\n | {\n pages?: never;\n /**\n * Without it, refetching a cached query with more than one page\n * fails on the second page.\n */\n getNextPageParam?: HandleGetNextPageParam<TDef>;\n }\n | {\n /** Number of pages to load up front */\n pages: number;\n getNextPageParam: HandleGetNextPageParam<TDef>;\n }\n );\n\n/** Verbs added to query procedures */\nexport interface DecorateQueryHandleVerbs<TDef extends ResolverDef> {\n /**\n * Start the query without waiting and return a serializable handle for it.\n * Never throws: errors surface where the handle is read.\n *\n * Same as `void queryClient.prefetchQuery(trpc.<path>.queryOptions(input, opts))`.\n * On `useTRPC()`, call it during render: like TanStack's `usePrefetchQuery`, it only\n * starts a query the cache has no state for.\n * @see https://trpc.io/docs/client/tanstack-react-query/handles\n */\n unstable_$prefetch: (\n ...args: undefined extends TDef['input']\n ? [input?: TDef['input'], opts?: unstable_TRPCPrefetchOptions]\n : [input: TDef['input'], opts?: unstable_TRPCPrefetchOptions]\n ) => unstable_TRPCQueryHandle<TDef>;\n /**\n * Start the query and wait until the cache has data for it, so a loader can hold\n * navigation until then. The handle carries no data: read it with `useSuspenseQuery`\n * to get data that's always defined. Rejects if that request fails.\n *\n * Same as `await queryClient.ensureQueryData({ ...trpc.<path>.queryOptions(input, opts), revalidateIfStale: true })`.\n * Not available on `useTRPC()`.\n * @see https://trpc.io/docs/client/tanstack-react-query/handles\n */\n unstable_$ensure: (\n ...args: undefined extends TDef['input']\n ? [input?: TDef['input'], opts?: unstable_TRPCPrefetchOptions]\n : [input: TDef['input'], opts?: unstable_TRPCPrefetchOptions]\n ) => Promise<unstable_TRPCQueryHandle<TDef>>;\n /**\n * Like `unstable_$ensure`, but stale data in the cache is refetched before it resolves.\n * Rejects if that request fails.\n *\n * Same as `await queryClient.fetchQuery(trpc.<path>.queryOptions(input, opts))`.\n * Not available on `useTRPC()`.\n * @see https://trpc.io/docs/client/tanstack-react-query/handles#fetch\n */\n unstable_$fetch: (\n ...args: undefined extends TDef['input']\n ? [input?: TDef['input'], opts?: unstable_TRPCPrefetchOptions]\n : [input: TDef['input'], opts?: unstable_TRPCPrefetchOptions]\n ) => Promise<unstable_TRPCQueryHandle<TDef>>;\n}\n\n/** Verbs added to query procedures with a `cursor` input */\nexport interface DecorateInfiniteQueryHandleVerbs<TDef extends ResolverDef> {\n /**\n * Like `unstable_$prefetch`, for an infinite query. Loads the first page unless `pages` is set.\n *\n * Same as `void queryClient.prefetchInfiniteQuery(trpc.<path>.infiniteQueryOptions(input, opts))`.\n * On `useTRPC()`, call it during render, like `unstable_$prefetch`.\n * @see https://trpc.io/docs/client/tanstack-react-query/handles#infinite-queries\n */\n unstable_$prefetchInfinite: (\n input: TDef['input'],\n opts?: unstable_TRPCPrefetchInfiniteOptions<TDef>,\n ) => unstable_TRPCInfiniteQueryHandle<TDef>;\n /**\n * Like `unstable_$ensure`, for an infinite query.\n *\n * Same as `await queryClient.ensureInfiniteQueryData({ ...trpc.<path>.infiniteQueryOptions(input, opts), revalidateIfStale: true })`.\n * Not available on `useTRPC()`.\n * @see https://trpc.io/docs/client/tanstack-react-query/handles#infinite-queries\n */\n unstable_$ensureInfinite: (\n input: TDef['input'],\n opts?: unstable_TRPCPrefetchInfiniteOptions<TDef>,\n ) => Promise<unstable_TRPCInfiniteQueryHandle<TDef>>;\n /**\n * Like `unstable_$fetch`, for an infinite query.\n *\n * Same as `await queryClient.fetchInfiniteQuery(trpc.<path>.infiniteQueryOptions(input, opts))`.\n * Not available on `useTRPC()`.\n * @see https://trpc.io/docs/client/tanstack-react-query/handles#infinite-queries\n */\n unstable_$fetchInfinite: (\n input: TDef['input'],\n opts?: unstable_TRPCPrefetchInfiniteOptions<TDef>,\n ) => Promise<unstable_TRPCInfiniteQueryHandle<TDef>>;\n}\n\n/** Readers added to every router level of the options proxy */\nexport interface DecorateHandleReaders<TFeatureFlags extends FeatureFlags> {\n /**\n * Options for a handle: the same options `trpc.<path>.queryOptions(input)` or\n * `trpc.<path>.infiniteQueryOptions(input, opts)` return for the handle's procedure and input.\n * Pass them to `useQuery`, `useSuspenseQuery`, `useSuspenseInfiniteQuery`, etc.\n * @see https://trpc.io/docs/client/tanstack-react-query/handles#reading-a-handle\n */\n unstable_$fromHandle: {\n <TDef extends ResolverDef, TData = TDef['output']>(\n handle: unstable_TRPCQueryHandle<TDef>,\n opts?: UnusedSkipTokenTRPCQueryOptionsIn<\n NoInfer<TDef['output']>,\n TData,\n ErrorOf<TDef>,\n TFeatureFlags\n >,\n ): UnusedSkipTokenTRPCQueryOptionsOut<\n TDef['output'],\n TData,\n ErrorOf<TDef>,\n TFeatureFlags\n >;\n <TDef extends ResolverDef, TData = TDef['output']>(\n handle: unstable_TRPCInfiniteQueryHandle<TDef>,\n opts: UnusedSkipTokenTRPCInfiniteQueryOptionsIn<\n TDef['input'],\n NoInfer<TDef['output']>,\n TData,\n ErrorOf<TDef>,\n TFeatureFlags\n >,\n ): UnusedSkipTokenTRPCInfiniteQueryOptionsOut<\n TDef['input'],\n TDef['output'],\n TData,\n ErrorOf<TDef>,\n TFeatureFlags\n >;\n };\n}\n\n/**\n * The handle type a query procedure's `unstable_$prefetch()` returns, for\n * typing props. `unstable_$ensure()` and `unstable_$fetch()` resolve to the\n * same type.\n * @see https://trpc.io/docs/client/tanstack-react-query/handles#typing-props\n */\nexport type unstable_inferQueryHandle<\n TProcedure extends DecorateQueryHandleVerbs<any>,\n> = ReturnType<TProcedure['unstable_$prefetch']>;\n\n/**\n * The handle type an infinite query procedure's\n * `unstable_$prefetchInfinite()` returns, for typing props.\n * @see https://trpc.io/docs/client/tanstack-react-query/handles#typing-props\n */\nexport type unstable_inferInfiniteQueryHandle<\n TProcedure extends DecorateInfiniteQueryHandleVerbs<any>,\n> = ReturnType<TProcedure['unstable_$prefetchInfinite']>;\n\n/**\n * @internal\n */\nexport function readHandle(\n handle: unstable_AnyTRPCHandle,\n prefix: string | undefined,\n) {\n const queryKey = handle?.queryKey as unknown as TRPCQueryKey<any> | undefined;\n if (!Array.isArray(queryKey)) {\n throw new Error(\n `Expected a tRPC handle from \\`.unstable_$prefetch()\\` / \\`.unstable_$ensure()\\` / \\`.unstable_$fetch()\\`, got ${JSON.stringify(handle)}`,\n );\n }\n const data = readQueryKey(queryKey);\n const type = data.args?.type;\n if (type !== 'query' && type !== 'infinite') {\n throw new Error(\n `Expected a tRPC handle from \\`.unstable_$prefetch()\\` / \\`.unstable_$ensure()\\` / \\`.unstable_$fetch()\\`, got a key of type ${String(type)} for \"${data.path.join('.')}\"`,\n );\n }\n if ((data.prefix?.[0] ?? undefined) !== prefix) {\n throw new Error(\n `The handle for \"${data.path.join('.')}\" was created with keyPrefix ${JSON.stringify(data.prefix?.[0])}, but this proxy uses ${JSON.stringify(prefix)}`,\n );\n }\n return {\n type,\n path: data.path,\n input: data.args?.input,\n queryKey,\n };\n}\n\n/**\n * @internal\n */\nexport type HandleVerb = 'prefetch' | 'ensure' | 'fetch';\n\n/**\n * A prefetch during render runs on every render, so it follows the rule of\n * TanStack's `usePrefetchQuery`: start only a query the cache has no state for.\n * Stale data is refetched by the reader's observer, and an error stays until\n * the reader's error boundary resets it: restarting it here would suspend the\n * reader again.\n */\nfunction needsRenderPrefetch(queryClient: QueryClient, options: any) {\n return !queryClient.getQueryState(options.queryKey);\n}\n\n/**\n * @internal\n */\nexport function startHandle(opts: {\n queryClient: QueryClient;\n options: any;\n kind: 'query' | 'infinite';\n verb: HandleVerb;\n inRender: boolean;\n}) {\n const { queryClient, options, kind, verb, inRender } = opts;\n const input = readQueryKey(options.queryKey).args?.input;\n const handle: Record<string, unknown> = { queryKey: options.queryKey, input };\n if (kind === 'infinite' && options.initialPageParam != null) {\n handle['initialCursor'] = options.initialPageParam;\n }\n if (inRender) {\n if (needsRenderPrefetch(queryClient, options)) {\n void (kind === 'infinite'\n ? queryClient.prefetchInfiniteQuery(options)\n : queryClient.prefetchQuery(options));\n }\n return handle;\n }\n const toHandle = () => handle;\n\n if (kind === 'infinite') {\n switch (verb) {\n case 'prefetch':\n void queryClient.prefetchInfiniteQuery(options);\n return handle;\n case 'ensure':\n return queryClient\n .ensureInfiniteQueryData({ ...options, revalidateIfStale: true })\n .then(toHandle);\n case 'fetch':\n return queryClient.fetchInfiniteQuery(options).then(toHandle);\n }\n }\n switch (verb) {\n case 'prefetch':\n void queryClient.prefetchQuery(options);\n return handle;\n case 'ensure':\n return queryClient\n .ensureQueryData({ ...options, revalidateIfStale: true })\n .then(toHandle);\n case 'fetch':\n return queryClient.fetchQuery(options).then(toHandle);\n }\n}\n\n/**\n * @internal\n */\nexport function isServerEnvironment() {\n return typeof window === 'undefined' || 'Deno' in globalThis;\n}\n\nconst warnedNotHydrated = new Set<string>();\n\nfunction warnIfNotHydrated(\n path: readonly string[],\n queryFn: QueryFunction<any, any, any>,\n): QueryFunction<any, any, any> {\n return (context) => {\n if (isServerEnvironment()) {\n const queryHash = hashKey(context.queryKey);\n if (!warnedNotHydrated.has(queryHash)) {\n warnedNotHydrated.add(queryHash);\n // oxlint-disable-next-line no-console\n console.warn(\n `[@trpc/tanstack-react-query] The handle for \"${path.join('.')}\" is being fetched again during server rendering: ` +\n `the query it refers to isn't in this QueryClient. ` +\n `Render the reading component inside <HydrateClient> or <HydrationBoundary>, and don't return handles from server functions or server actions. ` +\n `See https://trpc.io/docs/client/tanstack-react-query/handles#where-handles-dont-work`,\n );\n }\n }\n return queryFn(context);\n };\n}\n\nconst watchedHydrations = new WeakSet<Promise<unknown>>();\n\n/**\n * A query dehydrated as pending that later rejects reaches the browser as a\n * redacted error, before any `retry` from `unstable_$fromHandle()` applies. Refetch such\n * a query once so error boundaries see a `TRPCClientError` from this client.\n */\nfunction refetchRejectedHydration(queryClient: QueryClient, options: any) {\n if (isServerEnvironment()) {\n return;\n }\n const query = queryClient\n .getQueryCache()\n .find({ queryKey: options.queryKey, exact: true });\n const promise = query?.promise;\n if (\n !query ||\n !promise ||\n query.state.data !== undefined ||\n query.state.fetchStatus === 'idle' ||\n watchedHydrations.has(promise)\n ) {\n return;\n }\n watchedHydrations.add(promise);\n promise.catch((error: unknown) => {\n if (\n isTRPCClientError(error) ||\n isCancelledError(error) ||\n query.state.fetchStatus !== 'idle'\n ) {\n return;\n }\n query.fetch(queryClient.defaultQueryOptions(options)).catch(() => {\n // surfaces through the query's state\n });\n });\n}\n\n/**\n * @internal\n */\nexport function prepareHandleRead<TOptions extends { queryFn?: unknown }>(\n queryClient: QueryClient,\n handle: ReturnType<typeof readHandle>,\n options: TOptions,\n): TOptions {\n if (\n globalThis.process?.env?.['NODE_ENV'] !== 'production' &&\n typeof options.queryFn === 'function'\n ) {\n options.queryFn = warnIfNotHydrated(\n handle.path,\n options.queryFn as QueryFunction<any, any, any>,\n );\n }\n refetchRejectedHydration(queryClient, options);\n return options;\n}\n","import type {\n DataTag,\n DefinedInitialDataInfiniteOptions,\n QueryClient,\n QueryFunction,\n SkipToken,\n UndefinedInitialDataInfiniteOptions,\n UnusedSkipTokenInfiniteOptions,\n} from '@tanstack/react-query';\nimport { infiniteQueryOptions, skipToken } from '@tanstack/react-query';\nimport type { TRPCClientErrorLike, TRPCUntypedClient } from '@trpc/client';\nimport type { DistributiveOmit } from '@trpc/server/unstable-core-do-not-import';\nimport type {\n ExtractCursorType,\n FeatureFlags,\n ResolverDef,\n TRPCInfiniteData,\n TRPCQueryBaseOptions,\n TRPCQueryKey,\n TRPCQueryOptionsResult,\n} from './types';\nimport { createTRPCOptionsResult, getClientArgs } from './utils';\n\ntype ReservedOptions =\n | 'queryKey'\n | 'queryFn'\n | 'queryHashFn'\n | 'queryHash'\n | 'initialPageParam';\n\ninterface UndefinedTRPCInfiniteQueryOptionsIn<\n TInput,\n TQueryFnData,\n TData,\n TError,\n TFeatureFlags extends FeatureFlags,\n>\n extends\n DistributiveOmit<\n UndefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError,\n TRPCInfiniteData<TInput, TData>,\n TRPCQueryKey<TFeatureFlags['keyPrefix']>,\n NonNullable<ExtractCursorType<TInput>> | null\n >,\n ReservedOptions\n >,\n TRPCQueryBaseOptions {\n initialCursor?: NonNullable<ExtractCursorType<TInput>> | null;\n}\n\ninterface UndefinedTRPCInfiniteQueryOptionsOut<\n TInput,\n TQueryFnData,\n TData,\n TError,\n TFeatureFlags extends FeatureFlags,\n>\n extends\n DistributiveOmit<\n UndefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError,\n TRPCInfiniteData<TInput, TData>,\n TRPCQueryKey<TFeatureFlags['keyPrefix']>,\n NonNullable<ExtractCursorType<TInput>> | null\n >,\n 'initialPageParam'\n >,\n TRPCQueryOptionsResult {\n queryKey: DataTag<\n TRPCQueryKey<TFeatureFlags['keyPrefix']>,\n TRPCInfiniteData<TInput, TData>,\n TError\n >;\n initialPageParam: NonNullable<ExtractCursorType<TInput>> | null;\n}\n\ninterface DefinedTRPCInfiniteQueryOptionsIn<\n TInput,\n TQueryFnData,\n TData,\n TError,\n TFeatureFlags extends FeatureFlags,\n>\n extends\n DistributiveOmit<\n DefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError,\n TRPCInfiniteData<TInput, TData>,\n TRPCQueryKey<TFeatureFlags['keyPrefix']>,\n NonNullable<ExtractCursorType<TInput>> | null\n >,\n ReservedOptions\n >,\n TRPCQueryBaseOptions {\n initialCursor?: NonNullable<ExtractCursorType<TInput>> | null;\n}\n\nexport interface DefinedTRPCInfiniteQueryOptionsOut<\n TInput,\n TQueryFnData,\n TData,\n TError,\n TFeatureFlags extends FeatureFlags,\n>\n extends\n DistributiveOmit<\n DefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError,\n TRPCInfiniteData<TInput, TData>,\n TRPCQueryKey<TFeatureFlags['keyPrefix']>,\n NonNullable<ExtractCursorType<TInput>> | null\n >,\n 'initialPageParam'\n >,\n TRPCQueryOptionsResult {\n queryKey: DataTag<\n TRPCQueryKey<TFeatureFlags['keyPrefix']>,\n TRPCInfiniteData<TInput, TData>,\n TError\n >;\n initialPageParam: NonNullable<ExtractCursorType<TInput>> | null;\n}\n\nexport interface UnusedSkipTokenTRPCInfiniteQueryOptionsIn<\n TInput,\n TQueryFnData,\n TData,\n TError,\n TFeatureFlags extends FeatureFlags,\n>\n extends\n DistributiveOmit<\n UnusedSkipTokenInfiniteOptions<\n TQueryFnData,\n TError,\n TRPCInfiniteData<TInput, TData>,\n TRPCQueryKey<TFeatureFlags['keyPrefix']>,\n NonNullable<ExtractCursorType<TInput>> | null\n >,\n ReservedOptions\n >,\n TRPCQueryBaseOptions {\n initialCursor?: NonNullable<ExtractCursorType<TInput>> | null;\n}\n\nexport interface UnusedSkipTokenTRPCInfiniteQueryOptionsOut<\n TInput,\n TQueryFnData,\n TData,\n TError,\n TFeatureFlags extends FeatureFlags,\n>\n extends\n DistributiveOmit<\n UnusedSkipTokenInfiniteOptions<\n TQueryFnData,\n TError,\n TRPCInfiniteData<TInput, TData>,\n TRPCQueryKey<TFeatureFlags['keyPrefix']>,\n NonNullable<ExtractCursorType<TInput>> | null\n >,\n 'initialPageParam'\n >,\n TRPCQueryOptionsResult {\n queryKey: DataTag<\n TRPCQueryKey<TFeatureFlags['keyPrefix']>,\n TRPCInfiniteData<TInput, TData>,\n TError\n >;\n initialPageParam: NonNullable<ExtractCursorType<TInput>> | null;\n}\n\n/**\n * The `infiniteQueryOptions` helper on a query procedure. Returns options for `useInfiniteQuery`, `prefetchInfiniteQuery` and so on.\n * @see https://trpc.io/docs/client/tanstack-react-query/usage#infiniteQueryOptions\n */\nexport interface TRPCInfiniteQueryOptions<TDef extends ResolverDef> {\n <TQueryFnData extends TDef['output'], TData = TQueryFnData>(\n input: TDef['input'] | SkipToken,\n opts: DefinedTRPCInfiniteQueryOptionsIn<\n TDef['input'],\n TQueryFnData,\n TData,\n TRPCClientErrorLike<{\n transformer: TDef['transformer'];\n errorShape: TDef['errorShape'];\n }>,\n TDef['featureFlags']\n >,\n ): DefinedTRPCInfiniteQueryOptionsOut<\n TDef['input'],\n TQueryFnData,\n TData,\n TRPCClientErrorLike<{\n transformer: TDef['transformer'];\n errorShape: TDef['errorShape'];\n }>,\n TDef['featureFlags']\n >;\n <TQueryFnData extends TDef['output'], TData = TQueryFnData>(\n input: TDef['input'],\n opts: UnusedSkipTokenTRPCInfiniteQueryOptionsIn<\n TDef['input'],\n TQueryFnData,\n TData,\n TRPCClientErrorLike<{\n transformer: TDef['transformer'];\n errorShape: TDef['errorShape'];\n }>,\n TDef['featureFlags']\n >,\n ): UnusedSkipTokenTRPCInfiniteQueryOptionsOut<\n TDef['input'],\n TQueryFnData,\n TData,\n TRPCClientErrorLike<{\n transformer: TDef['transformer'];\n errorShape: TDef['errorShape'];\n }>,\n TDef['featureFlags']\n >;\n <TQueryFnData extends TDef['output'], TData = TQueryFnData>(\n input: TDef['input'] | SkipToken,\n opts: UndefinedTRPCInfiniteQueryOptionsIn<\n TDef['input'],\n TQueryFnData,\n TData,\n TRPCClientErrorLike<{\n transformer: TDef['transformer'];\n errorShape: TDef['errorShape'];\n }>,\n TDef['featureFlags']\n >,\n ): UndefinedTRPCInfiniteQueryOptionsOut<\n TDef['input'],\n TQueryFnData,\n TData,\n TRPCClientErrorLike<{\n transformer: TDef['transformer'];\n errorShape: TDef['errorShape'];\n }>,\n TDef['featureFlags']\n >;\n}\n\ntype AnyTRPCInfiniteQueryOptionsIn<TFeatureFlags extends FeatureFlags> =\n | DefinedTRPCInfiniteQueryOptionsIn<any, any, any, any, TFeatureFlags>\n | UnusedSkipTokenTRPCInfiniteQueryOptionsIn<any, any, any, any, TFeatureFlags>\n | UndefinedTRPCInfiniteQueryOptionsIn<any, any, any, any, TFeatureFlags>;\n\ntype AnyTRPCInfiniteQueryOptionsOut<TFeatureFlags extends FeatureFlags> =\n | DefinedTRPCInfiniteQueryOptionsOut<any, any, any, any, TFeatureFlags>\n | UnusedSkipTokenTRPCInfiniteQueryOptionsOut<\n any,\n any,\n any,\n any,\n TFeatureFlags\n >\n | UndefinedTRPCInfiniteQueryOptionsOut<any, any, any, any, TFeatureFlags>;\n\nexport function trpcInfiniteQueryOptions<\n TFeatureFlags extends FeatureFlags,\n>(args: {\n input: unknown;\n query: typeof TRPCUntypedClient.prototype.query;\n queryClient: QueryClient | (() => QueryClient);\n path: string[];\n queryKey: TRPCQueryKey<TFeatureFlags['keyPrefix']>;\n opts: AnyTRPCInfiniteQueryOptionsIn<TFeatureFlags> | undefined;\n}): AnyTRPCInfiniteQueryOptionsOut<TFeatureFlags> {\n const { input, query, path, queryKey, opts } = args;\n const inputIsSkipToken = input === skipToken;\n\n const queryFn: QueryFunction<\n unknown,\n TRPCQueryKey<TFeatureFlags['keyPrefix']>,\n unknown\n > = async (queryFnContext) => {\n const actualOpts = {\n ...opts,\n trpc: {\n ...opts?.trpc,\n ...(opts?.trpc?.abortOnUnmount\n ? { signal: queryFnContext.signal }\n : { signal: null }),\n },\n };\n\n const result = await query(\n ...getClientArgs(queryKey, actualOpts, {\n direction: queryFnContext.direction,\n pageParam: queryFnContext.pageParam,\n }),\n );\n\n return result;\n };\n\n return Object.assign(\n infiniteQueryOptions({\n ...(opts ?? ({} as AnyTRPCInfiniteQueryOptionsIn<TFeatureFlags>)),\n queryKey,\n queryFn: inputIsSkipToken ? skipToken : queryFn,\n initialPageParam: opts?.initialCursor ?? (input as any)?.cursor,\n }),\n { trpc: createTRPCOptionsResult({ path }) },\n );\n}\n","import type {\n MutationFunction,\n QueryClient,\n UseMutationOptions,\n} from '@tanstack/react-query';\nimport type { TRPCClientErrorLike, TRPCUntypedClient } from '@trpc/client';\nimport type {\n DistributiveOmit,\n MaybePromise,\n} from '@trpc/server/unstable-core-do-not-import';\nimport type {\n DefaultFeatureFlags,\n FeatureFlags,\n KeyPrefixOptions,\n ResolverDef,\n TRPCMutationKey,\n TRPCQueryBaseOptions,\n TRPCQueryOptionsResult,\n} from './types';\nimport {\n createTRPCOptionsResult,\n getClientArgs,\n getMutationKeyInternal,\n unwrapLazyArg,\n} from './utils';\n\ntype ReservedOptions = 'mutationKey' | 'mutationFn';\n\ntype TRPCMutationOptionsIn<\n TInput,\n TError,\n TOutput,\n TContext,\n TFeatureFlags extends FeatureFlags,\n> = DistributiveOmit<\n UseMutationOptions<TOutput, TError, TInput, TContext>,\n ReservedOptions\n> &\n TRPCQueryBaseOptions &\n KeyPrefixOptions<TFeatureFlags>;\n\ninterface TRPCMutationOptionsOut<\n TInput,\n TError,\n TOutput,\n TContext,\n TFeatureFlags extends FeatureFlags,\n>\n extends\n UseMutationOptions<TOutput, TError, TInput, TContext>,\n TRPCQueryOptionsResult {\n mutationKey: TRPCMutationKey<TFeatureFlags['keyPrefix']>;\n}\n\n/**\n * The `mutationOptions` helper on a mutation procedure. Returns options for `useMutation`.\n * @see https://trpc.io/docs/client/tanstack-react-query/usage#mutationOptions\n */\nexport interface TRPCMutationOptions<\n TDef extends ResolverDef,\n TFeatureFlags extends FeatureFlags = DefaultFeatureFlags,\n> {\n <TContext = unknown>(\n opts?: TRPCMutationOptionsIn<\n TDef['input'],\n TRPCClientErrorLike<TDef>,\n TDef['output'],\n TContext,\n TFeatureFlags\n >,\n ): TRPCMutationOptionsOut<\n TDef['input'],\n TRPCClientErrorLike<TDef>,\n TDef['output'],\n TContext,\n TFeatureFlags\n >;\n}\n\n/**\n * @internal\n */\nexport interface MutationOptionsOverride {\n onSuccess: (opts: {\n /**\n * Calls the original function that was defined in the query's `onSuccess` option\n */\n originalFn: () => MaybePromise<unknown>;\n queryClient: QueryClient;\n /**\n * Meta data passed in from the `useMutation()` hook\n */\n meta: Record<string, unknown>;\n }) => MaybePromise<unknown>;\n}\n\ntype AnyTRPCMutationOptionsIn<TFeatureFlags extends FeatureFlags> =\n TRPCMutationOptionsIn<unknown, unknown, unknown, unknown, TFeatureFlags>;\n\ntype AnyTRPCMutationOptionsOut<TFeatureFlags extends FeatureFlags> =\n TRPCMutationOptionsOut<unknown, unknown, unknown, unknown, TFeatureFlags>;\n\n/**\n * @internal\n */\nexport function trpcMutationOptions<TFeatureFlags extends FeatureFlags>(args: {\n mutate: typeof TRPCUntypedClient.prototype.mutation;\n queryClient: QueryClient | (() => QueryClient);\n path: string[];\n prefix: string | undefined;\n opts: AnyTRPCMutationOptionsIn<TFeatureFlags> | undefined;\n overrides: MutationOptionsOverride | undefined;\n}): AnyTRPCMutationOptionsOut<TFeatureFlags> {\n const { mutate, path, prefix, opts, overrides } = args;\n const queryClient = unwrapLazyArg(args.queryClient);\n\n const mutationKey = getMutationKeyInternal({\n path,\n prefix: opts?.keyPrefix ?? prefix,\n }) as TRPCMutationKey<TFeatureFlags['keyPrefix']>;\n\n const defaultOpts = queryClient.defaultMutationOptions(\n queryClient.getMutationDefaults(mutationKey),\n );\n\n const mutationSuccessOverride: MutationOptionsOverride['onSuccess'] =\n overrides?.onSuccess ?? ((options) => options.originalFn());\n\n const mutationFn: MutationFunction = async (input) => {\n const result = await mutate(\n ...getClientArgs([...mutationKey, { input }] as any, opts),\n );\n\n return result;\n };\n\n return {\n ...opts,\n mutationKey,\n mutationFn,\n onSuccess(...args) {\n const originalFn = () =>\n opts?.onSuccess?.(...args) ?? defaultOpts?.onSuccess?.(...args);\n\n return mutationSuccessOverride({\n originalFn,\n queryClient,\n meta: opts?.meta ?? defaultOpts?.meta ?? {},\n });\n },\n trpc: createTRPCOptionsResult({ path }),\n };\n}\n","import type {\n DataTag,\n DefinedInitialDataOptions,\n QueryClient,\n QueryFunction,\n SkipToken,\n UndefinedInitialDataOptions,\n UnusedSkipTokenOptions,\n} from '@tanstack/react-query';\nimport { queryOptions, skipToken } from '@tanstack/react-query';\nimport type { TRPCClientErrorLike, TRPCUntypedClient } from '@trpc/client';\nimport type {\n coerceAsyncIterableToArray,\n DistributiveOmit,\n} from '@trpc/server/unstable-core-do-not-import';\nimport { isAsyncIterable } from '@trpc/server/unstable-core-do-not-import';\nimport type {\n DefaultFeatureFlags,\n FeatureFlags,\n ResolverDef,\n TRPCQueryBaseOptions,\n TRPCQueryKey,\n TRPCQueryOptionsResult,\n} from './types';\nimport {\n buildQueryFromAsyncIterable,\n createTRPCOptionsResult,\n getClientArgs,\n unwrapLazyArg,\n} from './utils';\n\ntype ReservedOptions = 'queryKey' | 'queryFn' | 'queryHashFn' | 'queryHash';\n\ninterface UndefinedTRPCQueryOptionsIn<\n TQueryFnData,\n TData,\n TError,\n TFeatureFlags extends FeatureFlags,\n>\n extends\n DistributiveOmit<\n UndefinedInitialDataOptions<\n coerceAsyncIterableToArray<TQueryFnData>,\n TError,\n coerceAsyncIterableToArray<TData>,\n TRPCQueryKey<TFeatureFlags['keyPrefix']>\n >,\n ReservedOptions\n >,\n TRPCQueryBaseOptions {}\n\ninterface UndefinedTRPCQueryOptionsOut<\n TQueryFnData,\n TOutput,\n TError,\n TFeatureFlags extends FeatureFlags,\n>\n extends\n UndefinedInitialDataOptions<\n coerceAsyncIterableToArray<TQueryFnData>,\n TError,\n coerceAsyncIterableToArray<TOutput>,\n TRPCQueryKey<TFeatureFlags['keyPrefix']>\n >,\n TRPCQueryOptionsResult {\n queryKey: DataTag<\n TRPCQueryKey<TFeatureFlags['keyPrefix']>,\n coerceAsyncIterableToArray<TOutput>,\n TError\n >;\n}\n\ninterface DefinedTRPCQueryOptionsIn<\n TQueryFnData,\n TData,\n TError,\n TFeatureFlags extends FeatureFlags,\n>\n extends\n DistributiveOmit<\n DefinedInitialDataOptions<\n coerceAsyncIterableToArray<NoInfer<TQueryFnData>>,\n TError,\n coerceAsyncIterableToArray<TData>,\n TRPCQueryKey<TFeatureFlags['keyPrefix']>\n >,\n ReservedOptions\n >,\n TRPCQueryBaseOptions {}\n\nexport interface DefinedTRPCQueryOptionsOut<\n TQueryFnData,\n TData,\n TError,\n TFeatureFlags extends FeatureFlags,\n>\n extends\n DefinedInitialDataOptions<\n coerceAsyncIterableToArray<TQueryFnData>,\n TError,\n coerceAsyncIterableToArray<TData>,\n TRPCQueryKey<TFeatureFlags['keyPrefix']>\n >,\n TRPCQueryOptionsResult {\n queryKey: DataTag<\n TRPCQueryKey<TFeatureFlags['keyPrefix']>,\n coerceAsyncIterableToArray<TData>,\n TError\n >;\n}\n\nexport interface UnusedSkipTokenTRPCQueryOptionsIn<\n TQueryFnData,\n TData,\n TError,\n TFeatureFlags extends FeatureFlags,\n>\n extends\n DistributiveOmit<\n UnusedSkipTokenOptions<\n coerceAsyncIterableToArray<TQueryFnData>,\n TError,\n coerceAsyncIterableToArray<TData>,\n TRPCQueryKey<TFeatureFlags['keyPrefix']>\n >,\n ReservedOptions\n >,\n TRPCQueryBaseOptions {}\n\nexport interface UnusedSkipTokenTRPCQueryOptionsOut<\n TQueryFnData,\n TOutput,\n TError,\n TFeatureFlags extends FeatureFlags,\n>\n extends\n UnusedSkipTokenOptions<\n coerceAsyncIterableToArray<TQueryFnData>,\n TError,\n coerceAsyncIterableToArray<TOutput>,\n TRPCQueryKey<TFeatureFlags['keyPrefix']>\n >,\n TRPCQueryOptionsResult {\n queryKey: DataTag<\n TRPCQueryKey<TFeatureFlags['keyPrefix']>,\n coerceAsyncIterableToArray<TOutput>,\n TError\n >;\n}\n\n/**\n * The `queryOptions` helper on a query procedure. Returns options for `useQuery`, `prefetchQuery` and so on.\n * @see https://trpc.io/docs/client/tanstack-react-query/usage#queryOptions\n */\nexport interface TRPCQueryOptions<\n TDef extends ResolverDef,\n TFeatureFlags extends FeatureFlags = DefaultFeatureFlags,\n> {\n <TQueryFnData extends TDef['output'], TData = TQueryFnData>(\n input: TDef['input'] | SkipToken,\n opts: DefinedTRPCQueryOptionsIn<\n TQueryFnData,\n TData,\n TRPCClientErrorLike<{\n transformer: TDef['transformer'];\n errorShape: TDef['errorShape'];\n }>,\n TFeatureFlags\n >,\n ): DefinedTRPCQueryOptionsOut<\n TQueryFnData,\n TData,\n TRPCClientErrorLike<{\n transformer: TDef['transformer'];\n errorShape: TDef['errorShape'];\n }>,\n TFeatureFlags\n >;\n <TQueryFnData extends TDef['output'], TData = TQueryFnData>(\n input: TDef['input'],\n opts?: UnusedSkipTokenTRPCQueryOptionsIn<\n TQueryFnData,\n TData,\n TRPCClientErrorLike<{\n transformer: TDef['transformer'];\n errorShape: TDef['errorShape'];\n }>,\n TFeatureFlags\n >,\n ): UnusedSkipTokenTRPCQueryOptionsOut<\n TQueryFnData,\n TData,\n TRPCClientErrorLike<{\n transformer: TDef['transformer'];\n errorShape: TDef['errorShape'];\n }>,\n TFeatureFlags\n >;\n <TQueryFnData extends TDef['output'], TData = TQueryFnData>(\n input: TDef['input'] | SkipToken,\n opts?: UndefinedTRPCQueryOptionsIn<\n TQueryFnData,\n TData,\n TRPCClientErrorLike<{\n transformer: TDef['transformer'];\n errorShape: TDef['errorShape'];\n }>,\n TFeatureFlags\n >,\n ): UndefinedTRPCQueryOptionsOut<\n TQueryFnData,\n TData,\n TRPCClientErrorLike<{\n transformer: TDef['transformer'];\n errorShape: TDef['errorShape'];\n }>,\n TFeatureFlags\n >;\n}\n\ntype AnyTRPCQueryOptionsIn<TFeatureFlags extends FeatureFlags> =\n | DefinedTRPCQueryOptionsIn<unknown, unknown, unknown, TFeatureFlags>\n | UnusedSkipTokenTRPCQueryOptionsIn<unknown, unknown, unknown, TFeatureFlags>\n | UndefinedTRPCQueryOptionsIn<unknown, unknown, unknown, TFeatureFlags>;\n\ntype AnyTRPCQueryOptionsOut<\n TFeatureFlags extends FeatureFlags = DefaultFeatureFlags,\n> =\n | DefinedTRPCQueryOptionsOut<unknown, unknown, unknown, TFeatureFlags>\n | UnusedSkipTokenTRPCQueryOptionsOut<unknown, unknown, unknown, TFeatureFlags>\n | UndefinedTRPCQueryOptionsOut<unknown, unknown, unknown, TFeatureFlags>;\n\n/**\n * @internal\n */\nexport function trpcQueryOptions<TFeatureFlags extends FeatureFlags>(args: {\n input: unknown;\n query: typeof TRPCUntypedClient.prototype.query;\n queryClient: QueryClient | (() => QueryClient);\n path: string[];\n queryKey: TRPCQueryKey<TFeatureFlags['keyPrefix']>;\n opts: AnyTRPCQueryOptionsIn<TFeatureFlags> | undefined;\n}): AnyTRPCQueryOptionsOut<TFeatureFlags> {\n const { input, query, path, queryKey, opts } = args;\n const queryClient = unwrapLazyArg(args.queryClient);\n\n const inputIsSkipToken = input === skipToken;\n\n const queryFn: QueryFunction<\n unknown,\n TRPCQueryKey<TFeatureFlags['keyPrefix']>\n > = async (queryFnContext) => {\n const actualOpts = {\n ...opts,\n trpc: {\n ...opts?.trpc,\n ...(opts?.trpc?.abortOnUnmount\n ? { signal: queryFnContext.signal }\n : { signal: null }),\n },\n };\n const queryKey = queryFnContext.queryKey;\n\n const result = await query(...getClientArgs(queryKey, actualOpts));\n\n if (isAsyncIterable(result)) {\n return buildQueryFromAsyncIterable(result, queryClient, queryKey);\n }\n\n return result;\n };\n\n return Object.assign(\n queryOptions({\n ...opts,\n queryKey: queryKey,\n queryFn: inputIsSkipToken ? skipToken : queryFn,\n }),\n { trpc: createTRPCOptionsResult({ path }) },\n );\n}\n","import type { SkipToken } from '@tanstack/react-query';\nimport { hashKey, skipToken } from '@tanstack/react-query';\nimport type { TRPCClientErrorLike, TRPCUntypedClient } from '@trpc/client';\nimport type { TRPCConnectionState } from '@trpc/client/unstable-internals';\nimport type { Unsubscribable } from '@trpc/server/observable';\nimport type { inferAsyncIterableYield } from '@trpc/server/unstable-core-do-not-import';\nimport * as React from 'react';\nimport type {\n DefaultFeatureFlags,\n FeatureFlags,\n ResolverDef,\n TRPCQueryKey,\n TRPCQueryOptionsResult,\n} from './types';\nimport { createTRPCOptionsResult } from './utils';\n\ninterface BaseTRPCSubscriptionOptionsIn<TOutput, TError> {\n enabled?: boolean;\n onStarted?: () => void;\n onData?: (data: inferAsyncIterableYield<TOutput>) => void;\n onError?: (err: TError) => void;\n onStopped?: () => void;\n /**\n * Called when the subscription is completed on the server.\n * The status will transition to `'idle'` with `data: undefined`.\n */\n onComplete?: () => void;\n onConnectionStateChange?: (state: TRPCConnectionState<TError>) => void;\n}\n\ninterface UnusedSkipTokenTRPCSubscriptionOptionsIn<TOutput, TError> {\n onStarted?: () => void;\n onData?: (data: inferAsyncIterableYield<TOutput>) => void;\n onError?: (err: TError) => void;\n onStopped?: () => void;\n /**\n * Called when the subscription is completed on the server.\n * The status will transition to `'idle'` with `data: undefined`.\n */\n onComplete?: () => void;\n onConnectionStateChange?: (state: TRPCConnectionState<TError>) => void;\n}\n\ninterface TRPCSubscriptionOptionsOut<\n TOutput,\n TError,\n TFeatureFlags extends FeatureFlags,\n>\n extends\n UnusedSkipTokenTRPCSubscriptionOptionsIn<TOutput, TError>,\n TRPCQueryOptionsResult {\n enabled: boolean;\n queryKey: TRPCQueryKey<TFeatureFlags['keyPrefix']>;\n subscribe: (\n innerOpts: UnusedSkipTokenTRPCSubscriptionOptionsIn<TOutput, TError>,\n ) => Unsubscribable;\n}\n\n/**\n * The `subscriptionOptions` helper on a subscription procedure. Returns options for {@link useSubscription}.\n * @see https://trpc.io/docs/client/tanstack-react-query/usage#subscriptionOptions\n */\nexport interface TRPCSubscriptionOptions<\n TDef extends ResolverDef,\n TFeatureFlags extends FeatureFlags = DefaultFeatureFlags,\n> {\n (\n input: TDef['input'],\n opts?: UnusedSkipTokenTRPCSubscriptionOptionsIn<\n inferAsyncIterableYield<TDef['output']>,\n TRPCClientErrorLike<TDef>\n >,\n ): TRPCSubscriptionOptionsOut<\n inferAsyncIterableYield<TDef['output']>,\n TRPCClientErrorLike<TDef>,\n TFeatureFlags\n >;\n (\n input: TDef['input'] | SkipToken,\n opts?: BaseTRPCSubscriptionOptionsIn<\n inferAsyncIterableYield<TDef['output']>,\n TRPCClientErrorLike<TDef>\n >,\n ): TRPCSubscriptionOptionsOut<\n inferAsyncIterableYield<TDef['output']>,\n TRPCClientErrorLike<TDef>,\n TFeatureFlags\n >;\n}\n/**\n * The status of a subscription.\n */\nexport type TRPCSubscriptionStatus =\n | 'idle'\n | 'connecting'\n | 'pending'\n | 'error';\n\n/**\n * Fields shared by every {@link useSubscription} result.\n */\nexport interface TRPCSubscriptionBaseResult<TOutput, TError> {\n /**\n * Where the subscription is in its lifecycle.\n */\n status: TRPCSubscriptionStatus;\n /**\n * The last data received.\n */\n data: undefined | TOutput;\n /**\n * The last error, if any.\n */\n error: null | TError;\n /**\n * Reset the subscription\n */\n reset: () => void;\n}\n\n/**\n * Result while the subscription is not running.\n */\nexport interface TRPCSubscriptionIdleResult<\n TOutput,\n> extends TRPCSubscriptionBaseResult<TOutput, null> {\n status: 'idle';\n data: undefined;\n error: null;\n}\n\n/**\n * Result while connecting or reconnecting.\n */\nexport interface TRPCSubscriptionConnectingResult<\n TOutput,\n TError,\n> extends TRPCSubscriptionBaseResult<TOutput, TError> {\n status: 'connecting';\n data: undefined | TOutput;\n error: TError | null;\n}\n\n/**\n * Result while connected and waiting for data.\n */\nexport interface TRPCSubscriptionPendingResult<\n TOutput,\n> extends TRPCSubscriptionBaseResult<TOutput, undefined> {\n status: 'pending';\n data: TOutput | undefined;\n error: null;\n}\n\n/**\n * Result after an error that stopped the subscription.\n */\nexport interface TRPCSubscriptionErrorResult<\n TOutput,\n TError,\n> extends TRPCSubscriptionBaseResult<TOutput, TError> {\n status: 'error';\n data: TOutput | undefined;\n error: TError;\n}\n\n/**\n * The result of {@link useSubscription}. Check `status` to narrow it.\n */\nexport type TRPCSubscriptionResult<TOutput, TError> =\n | TRPCSubscriptionIdleResult<TOutput>\n | TRPCSubscriptionConnectingResult<TOutput, TError>\n | TRPCSubscriptionErrorResult<TOutput, TError>\n | TRPCSubscriptionPendingResult<TOutput>;\n\ntype AnyTRPCSubscriptionOptionsIn =\n | BaseTRPCSubscriptionOptionsIn<unknown, unknown>\n | UnusedSkipTokenTRPCSubscriptionOptionsIn<unknown, unknown>;\n\ntype AnyTRPCSubscriptionOptionsOut<TFeatureFlags extends FeatureFlags> =\n TRPCSubscriptionOptionsOut<unknown, unknown, TFeatureFlags>;\n\n/**\n * @internal\n */\nexport const trpcSubscriptionOptions = <\n TFeatureFlags extends FeatureFlags,\n>(args: {\n subscribe: typeof TRPCUntypedClient.prototype.subscription;\n path: string[];\n queryKey: TRPCQueryKey<TFeatureFlags['keyPrefix']>;\n /**\n * The raw input before queryKey serialization. Required to correctly detect\n * `skipToken` because `getQueryKeyInternal` strips it from the queryKey args.\n */\n input: unknown;\n opts?: AnyTRPCSubscriptionOptionsIn;\n}): AnyTRPCSubscriptionOptionsOut<TFeatureFlags> => {\n const { subscribe, path, queryKey, input, opts = {} } = args;\n const enabled = 'enabled' in opts ? !!opts.enabled : input !== skipToken;\n\n const _subscribe: ReturnType<\n TRPCSubscriptionOptions<any, TFeatureFlags>\n >['subscribe'] = (innerOpts) => {\n return subscribe(\n path.join('.'),\n input === skipToken ? undefined : input,\n innerOpts,\n );\n };\n\n return {\n ...opts,\n enabled,\n subscribe: _subscribe,\n queryKey,\n trpc: createTRPCOptionsResult({ path }),\n };\n};\n\n/**\n * Runs a subscription while the component is mounted.\n *\n * @example\n * ```ts\n * const trpc = useTRPC();\n * const sub = useSubscription(\n * trpc.chat.onMessage.subscriptionOptions({ roomId }),\n * );\n * ```\n *\n * @see https://trpc.io/docs/client/tanstack-react-query/usage#subscriptionOptions\n */\nexport function useSubscription<TOutput, TError>(\n opts: TRPCSubscriptionOptionsOut<TOutput, TError, any>,\n): TRPCSubscriptionResult<TOutput, TError> {\n type $Result = TRPCSubscriptionResult<TOutput, TError>;\n\n const optsRef = React.useRef(opts);\n optsRef.current = opts;\n\n const trackedProps = React.useRef(new Set<keyof $Result>([]));\n\n const addTrackedProp = React.useCallback((key: keyof $Result) => {\n trackedProps.current.add(key);\n }, []);\n\n type Unsubscribe = () => void;\n const currentSubscriptionRef = React.useRef<Unsubscribe>(() => {\n // noop\n });\n\n const reset = React.useCallback((): void => {\n // unsubscribe from the previous subscription\n currentSubscriptionRef.current?.();\n\n updateState(getInitialState);\n if (!opts.enabled) {\n return;\n }\n\n // links complete the observable when it's unsubscribed, which must not\n // be treated as the server ending the subscription\n let isUnsubscribed = false;\n let isEnded = false;\n // runs before the user's callback, so a `reset()` from inside it wins\n const setEnded = () => {\n if (isEnded) {\n return;\n }\n isEnded = true;\n updateState((prev) => ({\n ...prev,\n status: 'idle',\n data: undefined,\n error: null,\n }));\n };\n\n const subscription = opts.subscribe({\n onStarted: () => {\n optsRef.current.onStarted?.();\n updateState((prev) => ({\n ...(prev as any),\n status: 'pending',\n error: null,\n }));\n },\n onData: (data) => {\n optsRef.current.onData?.(data);\n updateState((prev) => ({\n ...(prev as any),\n status: 'pending',\n data,\n error: null,\n }));\n },\n onError: (error) => {\n optsRef.current.onError?.(error);\n updateState((prev) => ({\n ...(prev as any),\n status: 'error',\n error,\n }));\n },\n onStopped: () => {\n if (isUnsubscribed) {\n return;\n }\n setEnded();\n optsRef.current.onStopped?.();\n },\n onComplete: () => {\n if (isUnsubscribed) {\n return;\n }\n setEnded();\n optsRef.current.onComplete?.();\n },\n onConnectionStateChange: (result) => {\n optsRef.current.onConnectionStateChange?.(result);\n updateState((prev) => {\n switch (result.state) {\n case 'connecting':\n return {\n ...prev,\n status: 'connecting',\n error: result.error,\n };\n case 'pending':\n // handled in onStarted\n return prev;\n case 'idle':\n return {\n ...prev,\n status: 'idle',\n data: undefined,\n error: null,\n };\n }\n });\n },\n });\n\n currentSubscriptionRef.current = () => {\n isUnsubscribed = true;\n subscription.unsubscribe();\n };\n // oxlint-disable-next-line react/exhaustive-deps\n }, [hashKey(opts.queryKey), opts.enabled]);\n\n const getInitialState = React.useCallback((): $Result => {\n return opts.enabled\n ? {\n data: undefined,\n error: null,\n status: 'connecting',\n reset,\n }\n : {\n data: undefined,\n error: null,\n status: 'idle',\n reset,\n };\n }, [opts.enabled, reset]);\n\n const resultRef = React.useRef<$Result>(getInitialState());\n\n const [state, setState] = React.useState<$Result>(\n trackResult(resultRef, addTrackedProp),\n );\n\n state.reset = reset;\n\n const updateState = React.useCallback(\n (callback: (prevState: $Result) => $Result) => {\n const prev = resultRef.current;\n const next = (resultRef.current = callback(prev));\n\n let shouldUpdate = false;\n for (const key of trackedProps.current) {\n if (prev[key] !== next[key]) {\n shouldUpdate = true;\n break;\n }\n }\n if (shouldUpdate) {\n setState(trackResult(resultRef, addTrackedProp));\n }\n },\n [addTrackedProp],\n );\n\n React.useEffect(() => {\n if (!opts.enabled) {\n return;\n }\n reset();\n\n return () => {\n currentSubscriptionRef.current?.();\n };\n }, [reset, opts.enabled]);\n\n return state;\n}\n\nfunction trackResult<T extends object>(\n result: React.RefObject<T>,\n onTrackResult: (key: keyof T) => void,\n): T {\n const trackedResult = new Proxy(result.current, {\n get(_target, prop) {\n onTrackResult(prop as keyof T);\n // Bypass target, so that we always get the latest value\n return result.current[prop as keyof T];\n },\n });\n\n return trackedResult;\n}\n","import type { DataTag, QueryClient, QueryFilters } from '@tanstack/react-query';\nimport type {\n TRPCClient,\n TRPCClientErrorLike,\n TRPCRequestOptions,\n} from '@trpc/client';\nimport { getUntypedClient, TRPCUntypedClient } from '@trpc/client';\nimport type {\n AnyTRPCProcedure,\n AnyTRPCRootTypes,\n AnyTRPCRouter,\n inferProcedureErrorShape,\n inferProcedureInput,\n inferRouterContext,\n inferTransformedProcedureOutput,\n TRPCProcedureType,\n TRPCRouterRecord,\n} from '@trpc/server';\nimport { callTRPCProcedure, createTRPCRecursiveProxy } from '@trpc/server';\nimport type { MaybePromise } from '@trpc/server/unstable-core-do-not-import';\nimport type {\n DecorateHandleReaders,\n DecorateInfiniteQueryHandleVerbs,\n DecorateQueryHandleVerbs,\n HandleVerb,\n} from './handles';\nimport { prepareHandleRead, readHandle, startHandle } from './handles';\nimport {\n trpcInfiniteQueryOptions,\n type TRPCInfiniteQueryOptions,\n} from './infiniteQueryOptions';\nimport type { MutationOptionsOverride } from './mutationOptions';\nimport {\n trpcMutationOptions,\n type TRPCMutationOptions,\n} from './mutationOptions';\nimport { trpcQueryOptions, type TRPCQueryOptions } from './queryOptions';\nimport {\n trpcSubscriptionOptions,\n type TRPCSubscriptionOptions,\n} from './subscriptionOptions';\nimport type {\n DefaultFeatureFlags,\n FeatureFlags,\n KeyPrefixOptions,\n OptionalCursorInput,\n ResolverDef,\n TRPCInfiniteData,\n TRPCMutationKey,\n TRPCQueryKey,\n WithRequired,\n} from './types';\nimport {\n getMutationKeyInternal,\n getQueryKeyInternal,\n unwrapLazyArg,\n} from './utils';\n\n/**\n * Key and filter helpers for a router path.\n */\nexport interface DecorateRouterKeyable<TFeatureFlags extends FeatureFlags> {\n /**\n * Calculate the TanStack Query Key for any path, could be used to invalidate every procedure beneath this path\n *\n * @see https://tanstack.com/query/latest/docs/framework/react/guides/query-keys\n * @see https://trpc.io/docs/client/tanstack-react-query/usage#queryKey\n */\n pathKey: () => TRPCQueryKey<TFeatureFlags['keyPrefix']>;\n\n /**\n * Calculate a TanStack Query Filter for any path, could be used to manipulate every procedure beneath this path\n *\n * @see https://tanstack.com/query/latest/docs/framework/react/guides/filters\n * @see https://trpc.io/docs/client/tanstack-react-query/usage#queryFilter\n */\n pathFilter: (\n filters?: QueryFilters<TRPCQueryKey<TFeatureFlags['keyPrefix']>>,\n ) => WithRequired<\n QueryFilters<TRPCQueryKey<TFeatureFlags['keyPrefix']>>,\n 'queryKey'\n >;\n}\n\ninterface TypeHelper<TDef extends ResolverDef> {\n /**\n * @internal prefer using inferInput and inferOutput to access types\n */\n '~types': {\n input: TDef['input'];\n output: TDef['output'];\n errorShape: TDef['errorShape'];\n };\n}\n\n/**\n * The input type of a procedure on the options proxy.\n * @see https://trpc.io/docs/client/tanstack-react-query/usage#inferring-input-and-output-types\n */\nexport type inferInput<\n TProcedure extends\n | DecorateInfiniteQueryProcedure<any>\n | DecorateQueryProcedure<any>\n | DecorateMutationProcedure<any>,\n> = TProcedure['~types']['input'];\n\n/**\n * The output type of a procedure on the options proxy.\n * @see https://trpc.io/docs/client/tanstack-react-query/usage#inferring-input-and-output-types\n */\nexport type inferOutput<\n TProcedure extends\n | DecorateInfiniteQueryProcedure<any>\n | DecorateQueryProcedure<any>\n | DecorateMutationProcedure<any>,\n> = TProcedure['~types']['output'];\n\n/**\n * The helpers for a query procedure whose input has a `cursor`.\n * @see https://trpc.io/docs/client/tanstack-react-query/usage#infiniteQueryOptions\n */\nexport interface DecorateInfiniteQueryProcedure<TDef extends ResolverDef>\n extends TypeHelper<TDef>, DecorateInfiniteQueryHandleVerbs<TDef> {\n /**\n * Create a set of type-safe infinite query options that can be passed to `useInfiniteQuery`, `prefetchInfiniteQuery` etc.\n *\n * @see https://tanstack.com/query/latest/docs/framework/react/reference/infiniteQueryOptions#infinitequeryoptions\n * @see https://trpc.io/docs/client/tanstack-react-query/usage#infiniteQueryOptions\n */\n infiniteQueryOptions: TRPCInfiniteQueryOptions<TDef>;\n\n /**\n * Calculate the TanStack Query Key for a Infinite Query Procedure\n *\n * @see https://tanstack.com/query/latest/docs/framework/react/guides/query-keys\n * @see https://trpc.io/docs/client/tanstack-react-query/usage#queryKey\n */\n infiniteQueryKey: (input?: Partial<TDef['input']>) => DataTag<\n TRPCQueryKey<TDef['featureFlags']['keyPrefix']>,\n TRPCInfiniteData<TDef['input'], TDef['output']>,\n TRPCClientErrorLike<{\n transformer: TDef['transformer'];\n errorShape: TDef['errorShape'];\n }>\n >;\n\n /**\n * Calculate a TanStack Query Filter for a Infinite Query Procedure\n *\n * @see https://tanstack.com/query/latest/docs/framework/react/guides/filters\n * @see https://trpc.io/docs/client/tanstack-react-query/usage#queryFilter\n */\n infiniteQueryFilter: (\n input?: Partial<TDef['input']>,\n filters?: QueryFilters<\n DataTag<\n TRPCQueryKey<TDef['featureFlags']['keyPrefix']>,\n TRPCInfiniteData<TDef['input'], TDef['output']>,\n TRPCClientErrorLike<{\n transformer: TDef['transformer'];\n errorShape: TDef['errorShape'];\n }>\n >\n >,\n ) => WithRequired<\n QueryFilters<\n DataTag<\n TRPCQueryKey<TDef['featureFlags']['keyPrefix']>,\n TRPCInfiniteData<TDef['input'], TDef['output']>,\n TRPCClientErrorLike<{\n transformer: TDef['transformer'];\n errorShape: TDef['errorShape'];\n }>\n >\n >,\n 'queryKey'\n >;\n}\n\n/**\n * The helpers for a query procedure.\n * @see https://trpc.io/docs/client/tanstack-react-query/usage#queryOptions\n */\nexport interface DecorateQueryProcedure<TDef extends ResolverDef>\n extends\n TypeHelper<TDef>,\n DecorateRouterKeyable<TDef['featureFlags']>,\n DecorateQueryHandleVerbs<TDef> {\n /**\n * Create a set of type-safe query options that can be passed to `useQuery`, `prefetchQuery` etc.\n *\n * @see https://tanstack.com/query/latest/docs/framework/react/reference/queryOptions#queryoptions\n * @see https://trpc.io/docs/client/tanstack-react-query/usage#queryOptions\n */\n queryOptions: TRPCQueryOptions<TDef>;\n\n /**\n * Calculate the TanStack Query Key for a Query Procedure\n *\n * @see https://tanstack.com/query/latest/docs/framework/react/guides/query-keys\n * @see https://trpc.io/docs/client/tanstack-react-query/usage#queryKey\n */\n queryKey: (input?: Partial<TDef['input']>) => DataTag<\n TRPCQueryKey<TDef['featureFlags']['keyPrefix']>,\n TDef['output'],\n TRPCClientErrorLike<{\n transformer: TDef['transformer'];\n errorShape: TDef['errorShape'];\n }>\n >;\n\n /**\n * Calculate a TanStack Query Filter for a Query Procedure\n *\n * @see https://tanstack.com/query/latest/docs/framework/react/guides/filters\n * @see https://trpc.io/docs/client/tanstack-react-query/usage#queryFilter\n */\n queryFilter: (\n input?: Partial<TDef['input']>,\n filters?: QueryFilters<\n DataTag<\n TRPCQueryKey<TDef['featureFlags']['keyPrefix']>,\n TDef['output'],\n TRPCClientErrorLike<{\n transformer: TDef['transformer'];\n errorShape: TDef['errorShape'];\n }>\n >\n >,\n ) => WithRequired<\n QueryFilters<\n DataTag<\n TRPCQueryKey<TDef['featureFlags']['keyPrefix']>,\n TDef['output'],\n TRPCClientErrorLike<{\n transformer: TDef['transformer'];\n errorShape: TDef['errorShape'];\n }>\n >\n >,\n 'queryKey'\n >;\n}\n\n/**\n * The helpers for a mutation procedure.\n * @see https://trpc.io/docs/client/tanstack-react-query/usage#mutationOptions\n */\nexport interface DecorateMutationProcedure<\n TDef extends ResolverDef,\n> extends TypeHelper<TDef> {\n /**\n * Create a set of type-safe mutation options that can be passed to `useMutation`\n *\n * @see https://trpc.io/docs/client/tanstack-react-query/usage#mutationOptions\n */\n mutationOptions: TRPCMutationOptions<TDef>;\n\n /**\n * Calculate the TanStack Mutation Key for a Mutation Procedure\n *\n * @see https://trpc.io/docs/client/tanstack-react-query/usage#mutationKey\n */\n mutationKey: () => TRPCMutationKey<TDef['featureFlags']['keyPrefix']>;\n}\n\n/**\n * The helpers for a subscription procedure.\n * @see https://trpc.io/docs/client/tanstack-react-query/usage#subscriptionOptions\n */\nexport interface DecorateSubscriptionProcedure<\n TDef extends ResolverDef,\n> extends TypeHelper<TDef> {\n /**\n * Create a set of type-safe subscription options that can be passed to `useSubscription`\n *\n * @see https://trpc.io/docs/client/tanstack-react-query/usage#subscriptionOptions\n */\n subscriptionOptions: TRPCSubscriptionOptions<TDef>;\n}\n\n/**\n * The helpers for a procedure of the given type.\n */\nexport type DecorateProcedure<\n TType extends TRPCProcedureType,\n TDef extends ResolverDef,\n> = TType extends 'query'\n ? DecorateQueryProcedure<TDef> &\n (TDef['input'] extends OptionalCursorInput\n ? DecorateInfiniteQueryProcedure<TDef>\n : Record<string, never>)\n : TType extends 'mutation'\n ? DecorateMutationProcedure<TDef>\n : TType extends 'subscription'\n ? DecorateSubscriptionProcedure<TDef>\n : never;\n\n/**\n * @internal\n */\nexport type DecoratedRouterRecord<\n TRoot extends AnyTRPCRootTypes,\n TRecord extends TRPCRouterRecord,\n TFeatureFlags extends FeatureFlags = DefaultFeatureFlags,\n> = {\n [TKey in keyof TRecord]: TRecord[TKey] extends infer $Value\n ? $Value extends TRPCRouterRecord\n ? DecoratedRouterRecord<TRoot, $Value, TFeatureFlags> &\n DecorateRouterKeyable<TFeatureFlags> &\n DecorateHandleReaders<TFeatureFlags>\n : $Value extends AnyTRPCProcedure\n ? DecorateProcedure<\n $Value['_def']['type'],\n {\n input: inferProcedureInput<$Value>;\n output: inferTransformedProcedureOutput<TRoot, $Value>;\n transformer: TRoot['transformer'];\n errorShape: inferProcedureErrorShape<TRoot, $Value>;\n featureFlags: TFeatureFlags;\n }\n >\n : never\n : never;\n};\n\n/**\n * The object returned by `useTRPC()` and `createTRPCOptionsProxy`. It mirrors your router and has query, mutation and subscription option helpers on each procedure.\n * @see https://trpc.io/docs/client/tanstack-react-query/usage\n */\nexport type TRPCOptionsProxy<\n TRouter extends AnyTRPCRouter,\n TFeatureFlags extends FeatureFlags = DefaultFeatureFlags,\n> = DecoratedRouterRecord<\n TRouter['_def']['_config']['$types'],\n TRouter['_def']['record'],\n TFeatureFlags\n> &\n DecorateRouterKeyable<TFeatureFlags> &\n DecorateHandleReaders<TFeatureFlags>;\n\n/**\n * Options shared by every {@link createTRPCOptionsProxy} call.\n */\nexport type TRPCOptionsProxyOptionsBase<\n TFeatureFlags extends FeatureFlags = DefaultFeatureFlags,\n> = {\n /**\n * The `QueryClient`, or a function that returns it.\n */\n queryClient: QueryClient | (() => QueryClient);\n /**\n * @internal\n */\n overrides?: {\n mutations?: MutationOptionsOverride;\n };\n} & KeyPrefixOptions<TFeatureFlags>;\n\n/**\n * Call procedures on a router directly, for example on the server.\n */\nexport interface TRPCOptionsProxyOptionsInternal<\n TRouter extends AnyTRPCRouter,\n> {\n /**\n * The router to call.\n */\n router: TRouter;\n /**\n * The context for each call, or a function that returns it.\n */\n ctx:\n | inferRouterContext<TRouter>\n | (() => MaybePromise<inferRouterContext<TRouter>>);\n}\n\n/**\n * Call procedures through a tRPC client.\n */\nexport interface TRPCOptionsProxyOptionsExternal<\n TRouter extends AnyTRPCRouter,\n> {\n /**\n * The tRPC client to call procedures with.\n */\n client: TRPCUntypedClient<TRouter> | TRPCClient<TRouter>;\n}\n\n/**\n * Options for {@link createTRPCOptionsProxy}. Pass either `client` or `router` and `ctx`.\n */\nexport type TRPCOptionsProxyOptions<\n TRouter extends AnyTRPCRouter,\n TFeatureFlags extends FeatureFlags = DefaultFeatureFlags,\n> = TRPCOptionsProxyOptionsBase<TFeatureFlags> &\n (\n | TRPCOptionsProxyOptionsInternal<TRouter>\n | TRPCOptionsProxyOptionsExternal<TRouter>\n );\n\n/**\n * Marks the `useTRPC()` proxy, whose handle verbs run during render\n * @internal\n */\nexport const renderHandleVerbs = Symbol('renderHandleVerbs');\n\ntype UtilsMethods =\n | keyof DecorateQueryProcedure<any>\n | keyof DecorateHandleReaders<any>\n | keyof DecorateInfiniteQueryProcedure<any>\n | keyof DecorateMutationProcedure<any>\n | keyof DecorateSubscriptionProcedure<any>;\n\n/**\n * Creates the options proxy without React context. Works on the server too.\n *\n * @example\n * ```ts\n * export const trpc = createTRPCOptionsProxy<AppRouter>({\n * client: trpcClient,\n * queryClient,\n * });\n * ```\n *\n * @see https://trpc.io/docs/client/tanstack-react-query/setup#3c-set-up-without-react-context\n * @see https://trpc.io/docs/client/tanstack-react-query/server-components#5-create-a-trpc-caller-for-server-components\n */\nexport function createTRPCOptionsProxy<\n TRouter extends AnyTRPCRouter,\n TFeatureFlags extends FeatureFlags = DefaultFeatureFlags,\n>(\n opts: TRPCOptionsProxyOptions<TRouter, TFeatureFlags>,\n): TRPCOptionsProxy<TRouter, TFeatureFlags> {\n const prefix = opts.keyPrefix;\n\n const callIt = (type: TRPCProcedureType): any => {\n return (path: string, input: unknown, trpcOpts: TRPCRequestOptions) => {\n if ('router' in opts) {\n return Promise.resolve(unwrapLazyArg(opts.ctx)).then((ctx) =>\n callTRPCProcedure({\n router: opts.router,\n path: path,\n getRawInput: async () => input,\n ctx: ctx,\n type: type,\n signal: undefined,\n batchIndex: 0,\n }),\n );\n }\n\n const untypedClient =\n opts.client instanceof TRPCUntypedClient\n ? opts.client\n : getUntypedClient(opts.client);\n\n return untypedClient[type](path, input, trpcOpts);\n };\n };\n\n return createTRPCRecursiveProxy(({ args, path: _path }) => {\n const path = [..._path];\n const utilName = path.pop() as UtilsMethods;\n const [arg1, arg2] = args as any[];\n\n const startQueryHandle = (kind: 'query' | 'infinite', verb: HandleVerb) => {\n const inRender =\n (opts as { [renderHandleVerbs]?: boolean })[renderHandleVerbs] === true;\n if (inRender && verb !== 'prefetch') {\n throw new Error(\n `\\`${[...path, utilName].join('.')}()\\` on \\`useTRPC()\\` waits for its query, which a render can't. ` +\n `Start queries in components with \\`unstable_$prefetch\\` or \\`unstable_$prefetchInfinite\\`, ` +\n `and wait where you read the handle, with \\`useSuspenseQuery\\`. ` +\n `See https://trpc.io/docs/client/tanstack-react-query/handles#in-render`,\n );\n }\n const options =\n kind === 'infinite'\n ? trpcInfiniteQueryOptions({\n input: arg1,\n opts: arg2,\n path,\n queryClient: opts.queryClient,\n queryKey: getQueryKeyInternal({\n path,\n input: arg1,\n type: 'infinite',\n prefix,\n }),\n query: callIt('query'),\n })\n : trpcQueryOptions({\n input: arg1,\n opts: arg2,\n path,\n queryClient: opts.queryClient,\n queryKey: getQueryKeyInternal({\n path,\n input: arg1,\n type: 'query',\n prefix,\n }),\n query: callIt('query'),\n });\n return startHandle({\n queryClient: unwrapLazyArg(opts.queryClient),\n options,\n kind,\n verb,\n inRender,\n });\n };\n\n const contextMap: Record<UtilsMethods, () => unknown> = {\n '~types': undefined as any,\n\n pathKey: () => {\n return getQueryKeyInternal({\n path,\n type: 'any',\n prefix,\n });\n },\n pathFilter: (): QueryFilters => {\n return {\n ...arg1,\n queryKey: getQueryKeyInternal({\n path,\n type: 'any',\n prefix,\n }),\n };\n },\n\n queryOptions: () => {\n return trpcQueryOptions({\n input: arg1,\n opts: arg2,\n path,\n queryClient: opts.queryClient,\n queryKey: getQueryKeyInternal({\n path,\n input: arg1,\n type: 'query',\n prefix,\n }),\n query: callIt('query'),\n });\n },\n queryKey: () => {\n return getQueryKeyInternal({\n path,\n input: arg1,\n type: 'query',\n prefix,\n });\n },\n queryFilter: (): QueryFilters => {\n return {\n ...arg2,\n queryKey: getQueryKeyInternal({\n path,\n input: arg1,\n type: 'query',\n prefix,\n }),\n };\n },\n\n infiniteQueryOptions: () => {\n return trpcInfiniteQueryOptions({\n input: arg1,\n opts: arg2,\n path,\n queryClient: opts.queryClient,\n queryKey: getQueryKeyInternal({\n path,\n input: arg1,\n type: 'infinite',\n prefix,\n }),\n query: callIt('query'),\n });\n },\n infiniteQueryKey: () => {\n return getQueryKeyInternal({\n path,\n input: arg1,\n type: 'infinite',\n prefix,\n });\n },\n infiniteQueryFilter: (): QueryFilters => {\n return {\n ...arg2,\n queryKey: getQueryKeyInternal({\n path,\n input: arg1,\n type: 'infinite',\n prefix,\n }),\n };\n },\n\n unstable_$fromHandle: () => {\n const handle = readHandle(arg1, prefix);\n const options =\n handle.type === 'infinite'\n ? trpcInfiniteQueryOptions({\n input: handle.input,\n opts: {\n initialCursor: arg1.initialCursor,\n ...arg2,\n },\n path: handle.path,\n queryClient: opts.queryClient,\n queryKey: handle.queryKey,\n query: callIt('query'),\n })\n : trpcQueryOptions({\n input: handle.input,\n opts: arg2,\n path: handle.path,\n queryClient: opts.queryClient,\n queryKey: handle.queryKey,\n query: callIt('query'),\n });\n return prepareHandleRead(\n unwrapLazyArg(opts.queryClient),\n handle,\n options,\n );\n },\n unstable_$prefetch: () => startQueryHandle('query', 'prefetch'),\n unstable_$ensure: () => startQueryHandle('query', 'ensure'),\n unstable_$fetch: () => startQueryHandle('query', 'fetch'),\n unstable_$prefetchInfinite: () =>\n startQueryHandle('infinite', 'prefetch'),\n unstable_$ensureInfinite: () => startQueryHandle('infinite', 'ensure'),\n unstable_$fetchInfinite: () => startQueryHandle('infinite', 'fetch'),\n\n mutationOptions: () => {\n return trpcMutationOptions({\n opts: arg1,\n path,\n prefix,\n queryClient: opts.queryClient,\n mutate: callIt('mutation'),\n overrides: opts.overrides?.mutations,\n });\n },\n mutationKey: () => {\n return getMutationKeyInternal({\n path,\n prefix,\n });\n },\n\n subscriptionOptions: () => {\n return trpcSubscriptionOptions({\n opts: arg2,\n path,\n input: arg1,\n queryKey: getQueryKeyInternal({\n path,\n input: arg1,\n type: 'any',\n prefix,\n }),\n subscribe: callIt('subscription'),\n });\n },\n };\n\n return contextMap[utilName]();\n });\n}\n","import type { QueryClient } from '@tanstack/react-query';\nimport type { TRPCClient } from '@trpc/client';\nimport type { AnyTRPCRouter } from '@trpc/server';\nimport * as React from 'react';\nimport type { TRPCOptionsProxy } from './createOptionsProxy';\nimport {\n createTRPCOptionsProxy,\n renderHandleVerbs,\n} from './createOptionsProxy';\nimport type {\n DefaultFeatureFlags,\n FeatureFlags,\n KeyPrefixOptions,\n} from './types';\n\ntype TRPCProviderType<\n TRouter extends AnyTRPCRouter,\n TFeatureFlags extends FeatureFlags = DefaultFeatureFlags,\n> = React.FC<\n {\n children: React.ReactNode;\n queryClient: QueryClient;\n trpcClient: TRPCClient<TRouter>;\n } & KeyPrefixOptions<TFeatureFlags>\n>;\n\n/**\n * What {@link createTRPCContext} returns.\n */\nexport interface CreateTRPCContextResult<\n TRouter extends AnyTRPCRouter,\n TFeatureFlags extends FeatureFlags = DefaultFeatureFlags,\n> {\n /**\n * Provides the tRPC client and `QueryClient` to `useTRPC` and\n * `useTRPCClient`.\n */\n TRPCProvider: TRPCProviderType<TRouter, TFeatureFlags>;\n /**\n * Returns the options proxy for your router.\n * @see https://trpc.io/docs/client/tanstack-react-query/usage\n */\n useTRPC: () => TRPCOptionsProxy<TRouter, TFeatureFlags>;\n /**\n * Returns the tRPC client, for calling procedures directly.\n * @see https://trpc.io/docs/client/tanstack-react-query/usage#useTRPCClient\n */\n useTRPCClient: () => TRPCClient<TRouter>;\n}\n\n/**\n * Creates a `TRPCProvider` and the `useTRPC` and `useTRPCClient` hooks for\n * your router.\n *\n * @example\n * ```ts\n * export const { TRPCProvider, useTRPC, useTRPCClient } =\n * createTRPCContext<AppRouter>();\n * ```\n *\n * @see https://trpc.io/docs/client/tanstack-react-query/setup#3a-set-up-the-trpc-context-provider\n */\nexport function createTRPCContext<\n TRouter extends AnyTRPCRouter,\n TFeatureFlags extends FeatureFlags = DefaultFeatureFlags,\n>(): CreateTRPCContextResult<TRouter, TFeatureFlags> {\n const TRPCClientContext = React.createContext<TRPCClient<TRouter> | null>(\n null,\n );\n const TRPCContext = React.createContext<TRPCOptionsProxy<\n TRouter,\n TFeatureFlags\n > | null>(null);\n\n const TRPCProvider: TRPCProviderType<TRouter, TFeatureFlags> = (props) => {\n const value = React.useMemo(\n () =>\n createTRPCOptionsProxy<TRouter, TFeatureFlags>({\n client: props.trpcClient,\n queryClient: props.queryClient,\n keyPrefix: props.keyPrefix as any,\n [renderHandleVerbs]: true,\n }),\n [props.trpcClient, props.queryClient, props.keyPrefix],\n );\n return (\n <TRPCClientContext.Provider value={props.trpcClient}>\n <TRPCContext.Provider value={value}>\n {props.children}\n </TRPCContext.Provider>\n </TRPCClientContext.Provider>\n );\n };\n TRPCProvider.displayName = 'TRPCProvider';\n\n function useTRPC() {\n const utils = React.useContext(TRPCContext);\n if (!utils) {\n throw new Error('useTRPC() can only be used inside of a <TRPCProvider>');\n }\n return utils;\n }\n\n function useTRPCClient() {\n const client = React.useContext(TRPCClientContext);\n if (!client) {\n throw new Error(\n 'useTRPCClient() can only be used inside of a <TRPCProvider>',\n );\n }\n return client;\n }\n\n return { TRPCProvider, useTRPC, useTRPCClient };\n}\n","import type {\n DehydratedState,\n Mutation,\n Query,\n QueryClient,\n} from '@tanstack/react-query';\nimport {\n defaultShouldDehydrateMutation,\n defaultShouldDehydrateQuery,\n dehydrate,\n} from '@tanstack/react-query';\n\ninterface SentQuery {\n dataUpdatedAt: number;\n /** The request whose result is already on its way, if it was sent pending */\n promise: Promise<unknown> | undefined;\n}\n\ninterface SentEntries {\n queries: Map<string, SentQuery>;\n mutations: WeakSet<Mutation>;\n watchingPending: boolean;\n}\n\n/**\n * Keyed by the request's `QueryClient`, so one server render's boundaries\n * share it and the next request starts over.\n */\nconst sentByClient = new WeakMap<QueryClient, SentEntries>();\n\nfunction sentEntries(queryClient: QueryClient) {\n let sent = sentByClient.get(queryClient);\n if (!sent) {\n sent = {\n queries: new Map(),\n mutations: new WeakSet(),\n watchingPending: false,\n };\n sentByClient.set(queryClient, sent);\n }\n return sent;\n}\n\n/**\n * A query sent pending carries its request's promise, so the data that\n * request writes is already on its way. Record it once it lands: the query\n * drops its promise after settling, so it can't be compared later.\n */\nfunction watchPendingSends(queryClient: QueryClient, sent: SentEntries) {\n if (sent.watchingPending) {\n return;\n }\n sent.watchingPending = true;\n queryClient.getQueryCache().subscribe((event) => {\n if (\n event.type !== 'updated' ||\n event.action.type !== 'success' ||\n event.action.manual\n ) {\n return;\n }\n const entry = sent.queries.get(event.query.queryHash);\n if (entry?.promise && entry.promise === event.query.promise) {\n entry.dataUpdatedAt = event.query.state.dataUpdatedAt;\n entry.promise = undefined;\n }\n });\n}\n\nfunction isAlreadySent(query: Query, sent: SentQuery | undefined) {\n return sent !== undefined && query.state.dataUpdatedAt <= sent.dataUpdatedAt;\n}\n\n/**\n * Dehydrate what the client's `dehydrate` defaults select, minus entries an\n * earlier call already sent for this client with the same or newer data.\n * @internal\n */\nexport function dehydrateUnsent(queryClient: QueryClient): DehydratedState {\n const defaults = queryClient.getDefaultOptions().dehydrate;\n const shouldDehydrateQuery =\n defaults?.shouldDehydrateQuery ?? defaultShouldDehydrateQuery;\n const shouldDehydrateMutation =\n defaults?.shouldDehydrateMutation ?? defaultShouldDehydrateMutation;\n const sent = sentEntries(queryClient);\n\n return dehydrate(queryClient, {\n shouldDehydrateQuery: (query) => {\n if (\n isAlreadySent(query, sent.queries.get(query.queryHash)) ||\n !shouldDehydrateQuery(query)\n ) {\n return false;\n }\n const promise =\n query.state.status === 'pending' ? query.promise : undefined;\n if (promise) {\n watchPendingSends(queryClient, sent);\n }\n sent.queries.set(query.queryHash, {\n dataUpdatedAt: query.state.dataUpdatedAt,\n promise,\n });\n return true;\n },\n shouldDehydrateMutation: (mutation) => {\n if (sent.mutations.has(mutation) || !shouldDehydrateMutation(mutation)) {\n return false;\n }\n sent.mutations.add(mutation);\n return true;\n },\n });\n}\n","import type { QueryClient } from '@tanstack/react-query';\nimport { HydrationBoundary } from '@tanstack/react-query';\nimport * as React from 'react';\nimport { dehydrateUnsent } from './hydration';\nimport { unwrapLazyArg } from './utils';\n\n/** The props of the component `unstable_createHydrateClient` returns. */\nexport interface unstable_HydrateClientProps {\n /** Rendered inside the hydration boundary. */\n children?: React.ReactNode;\n}\n\n/**\n * Create a `HydrateClient` server component for the request's `QueryClient`.\n * It sends the queries started so far in this request to the browser,\n * pending ones as promises that stream in as they settle. A query an earlier\n * `HydrateClient` already sent is skipped, so nesting them is fine.\n *\n * React Server Components only: the package resolves to the server build\n * through the `react-server` export condition.\n *\n * @see https://trpc.io/docs/client/tanstack-react-query/handles#hydrate-client\n */\nexport function unstable_createHydrateClient(\n _queryClient: QueryClient | (() => QueryClient),\n): React.FC<unstable_HydrateClientProps> {\n function HydrateClient(): React.ReactNode {\n throw new Error(\n '`HydrateClient` from `unstable_createHydrateClient()` works only in React Server Components. ' +\n \"Render it from a server component; in client components, use TanStack Query's `HydrationBoundary`.\",\n );\n }\n return HydrateClient;\n}\n\n/**\n * `unstable_createHydrateClient` for the `react-server` export condition.\n * @internal\n */\nexport function createHydrateClientReactServer(\n queryClient: QueryClient | (() => QueryClient),\n): React.FC<unstable_HydrateClientProps> {\n function HydrateClient(props: unstable_HydrateClientProps) {\n return (\n <HydrationBoundary state={dehydrateUnsent(unwrapLazyArg(queryClient))}>\n {props.children}\n </HydrationBoundary>\n );\n }\n return HydrateClient;\n}\n"],"mappings":"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"}