import type { TRPCClientErrorLike } from '@trpc/client' import type { AnyMutationProcedure, AnyProcedure, AnyQueryProcedure, AnyRouter, ProcedureRouterRecord, inferProcedureInput, inferProcedureOutput, } from '@trpc/server' import type { AsyncData, AsyncDataOptions, KeyOfRes, PickFrom, _Transform, } from 'nuxt/dist/app/composables/asyncData' // Inspired by trpc/react-query client types // https://github.com/trpc/trpc/blob/next/packages/react-query/src/createTRPCReact.tsx /** * @internal */ export type DecorateProcedure< TProcedure extends AnyProcedure, TPath extends string, > = TProcedure extends AnyQueryProcedure ? { query: < TData = inferProcedureOutput, Transform extends _Transform = _Transform, PickKeys extends KeyOfRes = KeyOfRes, >( input: inferProcedureInput, opts?: AsyncDataOptions, ) => AsyncData, PickKeys>, TRPCClientErrorLike> } : TProcedure extends AnyMutationProcedure ? { mutate: < TData = inferProcedureOutput, Transform extends _Transform = _Transform, PickKeys extends KeyOfRes = KeyOfRes, >( input: inferProcedureInput, opts?: AsyncDataOptions, ) => AsyncData, PickKeys>, TRPCClientErrorLike> } : never /** * @internal */ export type DecoratedProcedureRecord< TProcedures extends ProcedureRouterRecord, TPath extends string = '', > = { [TKey in keyof TProcedures]: TProcedures[TKey] extends AnyRouter ? DecoratedProcedureRecord< TProcedures[TKey]['_def']['record'], `${TPath}${TKey & string}.` > : TProcedures[TKey] extends AnyProcedure ? DecorateProcedure : never; }