UNPKG

@trpc/tanstack-react-query

Version:

TanStack React Query Integration for tRPC

1 lines • 68.9 kB
{"version":3,"file":"src-CH8R2e0M.mjs","names":[],"sources":["../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 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(path.join('.'), input === skipToken ? undefined : input, {\n      ...innerOpts,\n      // `subscribe` needs at least one defined callback to return an `Unsubscribable`\n      onComplete: () => innerOpts.onComplete?.(),\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 {\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<\n  TDef extends ResolverDef,\n> extends TypeHelper<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 TypeHelper<TDef>, DecorateRouterKeyable<TDef['featureFlags']> {\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      : $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\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\ntype UtilsMethods =\n  | '~queryClient'\n  | keyof DecorateQueryProcedure<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      // for a subscription, `trpcOpts` also has the callbacks from `trpcSubscriptionOptions`\n      return untypedClient[type](path, input, trpcOpts as any);\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 contextMap: Record<UtilsMethods, () => unknown> = {\n      '~types': undefined as any,\n      // Untyped on purpose: the `QueryClient` this proxy uses, for code that\n      // only gets the proxy, like other entry points of this package\n      '~queryClient': () => unwrapLazyArg(opts.queryClient),\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      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 { createTRPCOptionsProxy } 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        }),\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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"}