import { AnyMiddlewareFunction, MiddlewareBuilder, MiddlewareFunction } from '../middleware'; import { inferParser, Parser } from '../parser'; import { MutationProcedure, QueryProcedure, SubscriptionProcedure } from '../procedure'; import { MaybePromise, ProcedureType, Simplify } from '../types'; import { DefaultValue, GetRawInputFn, Overwrite, UnsetMarker } from './utils'; type IntersectIfDefined = UnsetMarker extends TType ? TWith : Simplify; type ErrorMessage = TMessage; export type ProcedureBuilderDef = { procedure: true; inputs: Parser[]; output?: Parser; meta?: TMeta; resolver?: ProcedureBuilderResolver; middlewares: AnyMiddlewareFunction[]; mutation?: boolean; query?: boolean; subscription?: boolean; }; export type AnyProcedureBuilderDef = ProcedureBuilderDef; /** * Procedure resolver options * @internal */ interface ResolverOptions { ctx: Simplify>; input: TInputOut extends UnsetMarker ? undefined : TInputOut; } /** * A procedure resolver */ type ProcedureResolver = (opts: { ctx: Simplify>; input: TInputOut extends UnsetMarker ? undefined : TInputOut; }) => MaybePromise>; export interface ProcedureBuilder { /** * Add an input parser to the procedure. * @see https://trpc.io/docs/server/validators */ input<$Parser extends Parser>(schema: TInputOut extends UnsetMarker ? $Parser : inferParser<$Parser>['out'] extends Record | undefined ? TInputOut extends Record | undefined ? undefined extends inferParser<$Parser>['out'] ? undefined extends TInputOut ? $Parser : ErrorMessage<'Cannot chain an optional parser to a required parser'> : $Parser : ErrorMessage<'All input parsers did not resolve to an object'> : ErrorMessage<'All input parsers did not resolve to an object'>): ProcedureBuilder['in']>, IntersectIfDefined['out']>, TOutputIn, TOutputOut>; /** * Add an output parser to the procedure. * @see https://trpc.io/docs/server/validators */ output<$Parser extends Parser>(schema: $Parser): ProcedureBuilder['in']>, IntersectIfDefined['out']>>; /** * Add a meta data to the procedure. * @see https://trpc.io/docs/server/metadata */ meta(meta: TMeta): ProcedureBuilder; /** * Add a middleware to the procedure. * @see https://trpc.io/docs/server/middlewares */ use<$ContextOverridesOut>(fn: MiddlewareBuilder, TMeta, $ContextOverridesOut, TInputIn> | MiddlewareFunction): ProcedureBuilder, TInputIn, TInputOut, TOutputIn, TOutputOut>; /** * Query procedure * @see https://trpc.io/docs/concepts#vocabulary */ query<$Output>(resolver: ProcedureResolver): QueryProcedure<{ input: DefaultValue; output: DefaultValue; }>; /** * Mutation procedure * @see https://trpc.io/docs/concepts#vocabulary */ mutation<$Output>(resolver: ProcedureResolver): MutationProcedure<{ input: DefaultValue; output: DefaultValue; }>; /** * Subscription procedure * @see https://trpc.io/docs/concepts#vocabulary */ subscription<$Output>(resolver: ProcedureResolver): SubscriptionProcedure<{ input: DefaultValue; output: DefaultValue; }>; /** * @internal */ _def: ProcedureBuilderDef; } export type ProcedureBuilderResolver = (opts: ResolverOptions) => Promise; export declare function createBuilder(initDef?: Partial): ProcedureBuilder; /** * @internal */ export interface ProcedureCallOptions { ctx: unknown; getRawInput: GetRawInputFn; input?: unknown; path: string; type: ProcedureType; } export {}; //# sourceMappingURL=procedureBuilder.d.ts.map