UNPKG

@trpc/server

Version:

The tRPC server library

1 lines • 46.5 kB
{"version":3,"file":"initTRPC-B259os3T.mjs","names":[],"sources":["../src/unstable-core-do-not-import/middleware.ts","../src/vendor/standard-schema-v1/error.ts","../src/unstable-core-do-not-import/parser.ts","../src/unstable-core-do-not-import/procedureBuilder.ts","../src/unstable-core-do-not-import/rootConfig.ts","../src/unstable-core-do-not-import/initTRPC.ts"],"sourcesContent":["import { TRPCError } from './error/TRPCError';\nimport type { ParseFn } from './parser';\nimport type { ProcedureType } from './procedure';\nimport type { GetRawInputFn, Overwrite, Simplify } from './types';\nimport { isObject } from './utils';\n\n/** @internal */\nexport const middlewareMarker = 'middlewareMarker' as 'middlewareMarker' & {\n __brand: 'middlewareMarker';\n};\ntype MiddlewareMarker = typeof middlewareMarker;\n\ninterface MiddlewareResultBase {\n /**\n * All middlewares should pass through their `next()`'s output.\n * Requiring this marker makes sure that can't be forgotten at compile-time.\n */\n readonly marker: MiddlewareMarker;\n}\n\ninterface MiddlewareOKResult<_TContextOverride> extends MiddlewareResultBase {\n ok: true;\n data: unknown;\n // this could be extended with `input`/`rawInput` later\n}\n\ninterface MiddlewareErrorResult<\n _TContextOverride,\n> extends MiddlewareResultBase {\n ok: false;\n error: TRPCError;\n}\n\n/**\n * @internal\n */\nexport type MiddlewareResult<_TContextOverride> =\n | MiddlewareErrorResult<_TContextOverride>\n | MiddlewareOKResult<_TContextOverride>;\n\n/**\n * @internal\n */\nexport interface MiddlewareBuilder<\n TContext,\n TMeta,\n TContextOverrides,\n TInputOut,\n> {\n /**\n * Create a new builder based on the current middleware builder\n */\n unstable_pipe<$ContextOverridesOut>(\n fn:\n | MiddlewareFunction<\n TContext,\n TMeta,\n TContextOverrides,\n $ContextOverridesOut,\n TInputOut\n >\n | MiddlewareBuilder<\n Overwrite<TContext, TContextOverrides>,\n TMeta,\n $ContextOverridesOut,\n TInputOut\n >,\n ): MiddlewareBuilder<\n TContext,\n TMeta,\n Overwrite<TContextOverrides, $ContextOverridesOut>,\n TInputOut\n >;\n\n /**\n * List of middlewares within this middleware builder\n */\n _middlewares: MiddlewareFunction<\n TContext,\n TMeta,\n TContextOverrides,\n object,\n TInputOut\n >[];\n}\n\n/**\n * @internal\n */\nexport type MiddlewareFunction<\n TContext,\n TMeta,\n TContextOverridesIn,\n $ContextOverridesOut,\n TInputOut,\n> = {\n (opts: {\n ctx: Simplify<Overwrite<TContext, TContextOverridesIn>>;\n type: ProcedureType;\n path: string;\n input: TInputOut;\n getRawInput: GetRawInputFn;\n meta: TMeta | undefined;\n signal: AbortSignal | undefined;\n /**\n * The index of this call in a batch request.\n */\n batchIndex: number;\n next: {\n (): Promise<MiddlewareResult<TContextOverridesIn>>;\n <$ContextOverride>(opts: {\n ctx?: $ContextOverride;\n input?: unknown;\n }): Promise<MiddlewareResult<$ContextOverride>>;\n (opts: {\n getRawInput: GetRawInputFn;\n }): Promise<MiddlewareResult<TContextOverridesIn>>;\n };\n }): Promise<MiddlewareResult<$ContextOverridesOut>>;\n _type?: string | undefined;\n};\n\nexport type AnyMiddlewareFunction = MiddlewareFunction<any, any, any, any, any>;\nexport type AnyMiddlewareBuilder = MiddlewareBuilder<any, any, any, any>;\n/**\n * @internal\n */\nexport function createMiddlewareFactory<\n TContext,\n TMeta,\n TInputOut = unknown,\n>() {\n function createMiddlewareInner(\n middlewares: AnyMiddlewareFunction[],\n ): AnyMiddlewareBuilder {\n return {\n _middlewares: middlewares,\n unstable_pipe(middlewareBuilderOrFn) {\n const pipedMiddleware =\n '_middlewares' in middlewareBuilderOrFn\n ? middlewareBuilderOrFn._middlewares\n : [middlewareBuilderOrFn];\n\n return createMiddlewareInner([...middlewares, ...pipedMiddleware]);\n },\n };\n }\n\n function createMiddleware<$ContextOverrides>(\n fn: MiddlewareFunction<\n TContext,\n TMeta,\n object,\n $ContextOverrides,\n TInputOut\n >,\n ): MiddlewareBuilder<TContext, TMeta, $ContextOverrides, TInputOut> {\n return createMiddlewareInner([fn]);\n }\n\n return createMiddleware;\n}\n\n/**\n * Create a standalone middleware\n * @see https://trpc.io/docs/v11/server/middlewares#experimental-standalone-middlewares\n * @deprecated use `.concat()` instead\n */\nexport const experimental_standaloneMiddleware = <\n TCtx extends {\n ctx?: object;\n meta?: object;\n input?: unknown;\n },\n>() => ({\n create: createMiddlewareFactory<\n TCtx extends { ctx: infer T extends object } ? T : any,\n TCtx extends { meta: infer T extends object } ? T : object,\n TCtx extends { input: infer T } ? T : unknown\n >(),\n});\n\n/**\n * @internal\n * Please note, `trpc-openapi` uses this function.\n */\nexport function createInputMiddleware<TInput>(parse: ParseFn<TInput>) {\n const inputMiddleware: AnyMiddlewareFunction =\n async function inputValidatorMiddleware(opts) {\n let parsedInput: ReturnType<typeof parse>;\n\n const rawInput = await opts.getRawInput();\n try {\n parsedInput = await parse(rawInput);\n } catch (cause) {\n throw new TRPCError({\n code: 'BAD_REQUEST',\n cause,\n });\n }\n\n // Multiple input parsers\n const combinedInput =\n isObject(opts.input) && isObject(parsedInput)\n ? {\n ...opts.input,\n ...parsedInput,\n }\n : parsedInput;\n\n return opts.next({ input: combinedInput });\n };\n inputMiddleware._type = 'input';\n return inputMiddleware;\n}\n\n/**\n * @internal\n */\nexport function createOutputMiddleware<TOutput>(parse: ParseFn<TOutput>) {\n const outputMiddleware: AnyMiddlewareFunction =\n async function outputValidatorMiddleware({ next }) {\n const result = await next();\n if (!result.ok) {\n // pass through failures without validating\n return result;\n }\n try {\n const data = await parse(result.data);\n return {\n ...result,\n data,\n };\n } catch (cause) {\n throw new TRPCError({\n message: 'Output validation failed',\n code: 'INTERNAL_SERVER_ERROR',\n cause,\n });\n }\n };\n outputMiddleware._type = 'output';\n return outputMiddleware;\n}\n","import type { StandardSchemaV1 } from \"./spec\";\n\n/** A schema error with useful information. */\n\nexport class StandardSchemaV1Error extends Error {\n /** The schema issues. */\n public readonly issues: ReadonlyArray<StandardSchemaV1.Issue>;\n\n /**\n * Creates a schema error with useful information.\n *\n * @param issues The schema issues.\n */\n constructor(issues: ReadonlyArray<StandardSchemaV1.Issue>) {\n super(issues[0]?.message);\n this.name = 'SchemaError';\n this.issues = issues;\n }\n}\n","import { StandardSchemaV1Error } from '../vendor/standard-schema-v1/error';\nimport { type StandardSchemaV1 } from '../vendor/standard-schema-v1/spec';\n\n// zod / typeschema\nexport type ParserZodEsque<TInput, TParsedInput> = {\n _input: TInput;\n _output: TParsedInput;\n};\n\nexport type ParserValibotEsque<TInput, TParsedInput> = {\n schema: {\n _types?: {\n input: TInput;\n output: TParsedInput;\n };\n };\n};\n\nexport type ParserArkTypeEsque<TInput, TParsedInput> = {\n inferIn: TInput;\n infer: TParsedInput;\n};\n\nexport type ParserStandardSchemaEsque<TInput, TParsedInput> = StandardSchemaV1<\n TInput,\n TParsedInput\n>;\n\nexport type ParserMyZodEsque<TInput> = {\n parse: (input: any) => TInput;\n};\n\nexport type ParserSuperstructEsque<TInput> = {\n create: (input: unknown) => TInput;\n};\n\nexport type ParserCustomValidatorEsque<TInput> = (\n input: unknown,\n) => Promise<TInput> | TInput;\n\nexport type ParserYupEsque<TInput> = {\n validateSync: (input: unknown) => TInput;\n};\n\nexport type ParserScaleEsque<TInput> = {\n assert(value: unknown): asserts value is TInput;\n};\n\nexport type ParserWithoutInput<TInput> =\n | ParserCustomValidatorEsque<TInput>\n | ParserMyZodEsque<TInput>\n | ParserScaleEsque<TInput>\n | ParserSuperstructEsque<TInput>\n | ParserYupEsque<TInput>;\n\nexport type ParserWithInputOutput<TInput, TParsedInput> =\n | ParserZodEsque<TInput, TParsedInput>\n | ParserValibotEsque<TInput, TParsedInput>\n | ParserArkTypeEsque<TInput, TParsedInput>\n | ParserStandardSchemaEsque<TInput, TParsedInput>;\n\nexport type Parser = ParserWithInputOutput<any, any> | ParserWithoutInput<any>;\n\nexport type inferParser<TParser extends Parser> =\n TParser extends ParserStandardSchemaEsque<infer $TIn, infer $TOut>\n ? {\n in: $TIn;\n out: $TOut;\n }\n : TParser extends ParserWithInputOutput<infer $TIn, infer $TOut>\n ? {\n in: $TIn;\n out: $TOut;\n }\n : TParser extends ParserWithoutInput<infer $InOut>\n ? {\n in: $InOut;\n out: $InOut;\n }\n : never;\n\nexport type ParseFn<TType> = (value: unknown) => Promise<TType> | TType;\n\nexport function getParseFn<TType>(procedureParser: Parser): ParseFn<TType> {\n const parser = procedureParser as any;\n const isStandardSchema = '~standard' in parser;\n\n if (typeof parser === 'function' && typeof parser.assert === 'function') {\n // ParserArkTypeEsque - arktype schemas shouldn't be called as a function because they return a union type instead of throwing\n return parser.assert.bind(parser);\n }\n\n if (typeof parser === 'function' && !isStandardSchema) {\n // ParserValibotEsque (>= v0.31.0)\n // ParserCustomValidatorEsque - note the check for standard-schema conformance - some libraries like `effect` use function schemas which are *not* a \"parse\" function.\n return parser;\n }\n\n if (typeof parser.parseAsync === 'function') {\n // ParserZodEsque\n return parser.parseAsync.bind(parser);\n }\n\n if (typeof parser.parse === 'function') {\n // ParserZodEsque\n // ParserValibotEsque (< v0.13.0)\n return parser.parse.bind(parser);\n }\n\n if (typeof parser.validateSync === 'function') {\n // ParserYupEsque\n return parser.validateSync.bind(parser);\n }\n\n if (typeof parser.create === 'function') {\n // ParserSuperstructEsque\n return parser.create.bind(parser);\n }\n\n if (typeof parser.assert === 'function') {\n // ParserScaleEsque\n return (value) => {\n parser.assert(value);\n return value as TType;\n };\n }\n\n if (isStandardSchema) {\n // StandardSchemaEsque\n return async (value) => {\n const result = await parser['~standard'].validate(value);\n if (result.issues) {\n throw new StandardSchemaV1Error(result.issues);\n }\n return result.value;\n };\n }\n\n throw new Error('Could not find a validator fn');\n}\n","import type { inferObservableValue, Observable } from '../observable';\nimport { getTRPCErrorFromUnknown, TRPCError } from './error/TRPCError';\nimport type {\n AnyMiddlewareFunction,\n MiddlewareBuilder,\n MiddlewareFunction,\n MiddlewareResult,\n} from './middleware';\nimport {\n createInputMiddleware,\n createOutputMiddleware,\n middlewareMarker,\n} from './middleware';\nimport type { inferParser, Parser } from './parser';\nimport { getParseFn } from './parser';\nimport type {\n AnyMutationProcedure,\n AnyProcedure,\n AnyQueryProcedure,\n LegacyObservableSubscriptionProcedure,\n MutationProcedure,\n ProcedureType,\n QueryProcedure,\n SubscriptionProcedure,\n} from './procedure';\nimport type { inferTrackedOutput } from './stream/tracked';\nimport type {\n GetRawInputFn,\n MaybePromise,\n Overwrite,\n Simplify,\n TypeError,\n} from './types';\nimport type { UnsetMarker } from './utils';\nimport { mergeWithoutOverrides } from './utils';\n\ntype IntersectIfDefined<TType, TWith> = TType extends UnsetMarker\n ? TWith\n : TWith extends UnsetMarker\n ? TType\n : Simplify<TType & TWith>;\n\ntype DefaultValue<TValue, TFallback> = TValue extends UnsetMarker\n ? TFallback\n : TValue;\n\ntype inferAsyncIterable<TOutput> =\n TOutput extends AsyncIterable<infer $Yield, infer $Return, infer $Next>\n ? {\n yield: $Yield;\n return: $Return;\n next: $Next;\n }\n : never;\ntype inferSubscriptionOutput<TOutput> =\n TOutput extends AsyncIterable<any>\n ? AsyncIterable<\n inferTrackedOutput<inferAsyncIterable<TOutput>['yield']>,\n inferAsyncIterable<TOutput>['return'],\n inferAsyncIterable<TOutput>['next']\n >\n : TypeError<'Subscription output could not be inferred'>;\n\nexport type CallerOverride<TContext> = (opts: {\n args: unknown[];\n invoke: (opts: ProcedureCallOptions<TContext>) => Promise<unknown>;\n _def: AnyProcedure['_def'];\n}) => Promise<unknown>;\ntype ProcedureBuilderDef<TMeta> = {\n procedure: true;\n inputs: Parser[];\n output?: Parser;\n meta?: TMeta;\n resolver?: ProcedureBuilderResolver;\n middlewares: AnyMiddlewareFunction[];\n /**\n * @deprecated use `type` instead\n */\n mutation?: boolean;\n /**\n * @deprecated use `type` instead\n */\n query?: boolean;\n /**\n * @deprecated use `type` instead\n */\n subscription?: boolean;\n type?: ProcedureType;\n caller?: CallerOverride<unknown>;\n};\n\ntype AnyProcedureBuilderDef = ProcedureBuilderDef<any>;\n\n/**\n * Procedure resolver options (what the `.query()`, `.mutation()`, and `.subscription()` functions receive)\n * @internal\n */\nexport interface ProcedureResolverOptions<\n TContext,\n _TMeta,\n TContextOverridesIn,\n TInputOut,\n> {\n ctx: Simplify<Overwrite<TContext, TContextOverridesIn>>;\n input: TInputOut extends UnsetMarker ? undefined : TInputOut;\n /**\n * The AbortSignal of the request\n */\n signal: AbortSignal | undefined;\n /**\n * The path of the procedure\n */\n path: string;\n /**\n * The index of this call in a batch request.\n * Will be set when the procedure is called as part of a batch.\n */\n batchIndex?: number;\n}\n\n/**\n * A procedure resolver\n */\ntype ProcedureResolver<\n TContext,\n TMeta,\n TContextOverrides,\n TInputOut,\n TOutputParserIn,\n $Output,\n> = (\n opts: ProcedureResolverOptions<TContext, TMeta, TContextOverrides, TInputOut>,\n) => MaybePromise<\n // If an output parser is defined, we need to return what the parser expects, otherwise we return the inferred type\n DefaultValue<TOutputParserIn, $Output>\n>;\n\ntype AnyResolver = ProcedureResolver<any, any, any, any, any, any>;\nexport type AnyProcedureBuilder = ProcedureBuilder<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n>;\n\n/**\n * Infer the context type from a procedure builder\n * Useful to create common helper functions for different procedures\n */\nexport type inferProcedureBuilderResolverOptions<\n TProcedureBuilder extends AnyProcedureBuilder,\n> =\n TProcedureBuilder extends ProcedureBuilder<\n infer TContext,\n infer TMeta,\n infer TContextOverrides,\n infer _TInputIn,\n infer TInputOut,\n infer _TOutputIn,\n infer _TOutputOut,\n infer _TCaller\n >\n ? ProcedureResolverOptions<\n TContext,\n TMeta,\n TContextOverrides,\n TInputOut extends UnsetMarker\n ? // if input is not set, we don't want to infer it as `undefined` since a procedure further down the chain might have set an input\n unknown\n : TInputOut extends object\n ? Simplify<\n TInputOut & {\n /**\n * Extra input params might have been added by a `.input()` further down the chain\n */\n [keyAddedByInputCallFurtherDown: string]: unknown;\n }\n >\n : TInputOut\n >\n : never;\n\nexport interface ProcedureBuilder<\n TContext,\n TMeta,\n TContextOverrides,\n TInputIn,\n TInputOut,\n TOutputIn,\n TOutputOut,\n TCaller extends boolean,\n> {\n /**\n * Add an input parser to the procedure.\n * @see https://trpc.io/docs/v11/server/validators\n */\n input<$Parser extends Parser>(\n schema: TInputOut extends UnsetMarker\n ? $Parser\n : inferParser<$Parser>['out'] extends Record<string, unknown> | undefined\n ? TInputOut extends Record<string, unknown> | undefined\n ? undefined extends inferParser<$Parser>['out'] // if current is optional the previous must be too\n ? undefined extends TInputOut\n ? $Parser\n : TypeError<'Cannot chain an optional parser to a required parser'>\n : $Parser\n : TypeError<'All input parsers did not resolve to an object'>\n : TypeError<'All input parsers did not resolve to an object'>,\n ): ProcedureBuilder<\n TContext,\n TMeta,\n TContextOverrides,\n IntersectIfDefined<TInputIn, inferParser<$Parser>['in']>,\n IntersectIfDefined<TInputOut, inferParser<$Parser>['out']>,\n TOutputIn,\n TOutputOut,\n TCaller\n >;\n /**\n * Add an output parser to the procedure.\n * @see https://trpc.io/docs/v11/server/validators\n */\n output<$Parser extends Parser>(\n schema: $Parser,\n ): ProcedureBuilder<\n TContext,\n TMeta,\n TContextOverrides,\n TInputIn,\n TInputOut,\n IntersectIfDefined<TOutputIn, inferParser<$Parser>['in']>,\n IntersectIfDefined<TOutputOut, inferParser<$Parser>['out']>,\n TCaller\n >;\n /**\n * Add a meta data to the procedure.\n * @see https://trpc.io/docs/v11/server/metadata\n */\n meta(\n meta: TMeta,\n ): ProcedureBuilder<\n TContext,\n TMeta,\n TContextOverrides,\n TInputIn,\n TInputOut,\n TOutputIn,\n TOutputOut,\n TCaller\n >;\n /**\n * Add a middleware to the procedure.\n * @see https://trpc.io/docs/v11/server/middlewares\n */\n use<$ContextOverridesOut>(\n fn:\n | MiddlewareBuilder<\n Overwrite<TContext, TContextOverrides>,\n TMeta,\n $ContextOverridesOut,\n TInputOut\n >\n | MiddlewareFunction<\n TContext,\n TMeta,\n TContextOverrides,\n $ContextOverridesOut,\n TInputOut\n >,\n ): ProcedureBuilder<\n TContext,\n TMeta,\n Overwrite<TContextOverrides, $ContextOverridesOut>,\n TInputIn,\n TInputOut,\n TOutputIn,\n TOutputOut,\n TCaller\n >;\n\n /**\n * @deprecated use {@link concat} instead\n */\n unstable_concat<\n $Context,\n $Meta,\n $ContextOverrides,\n $InputIn,\n $InputOut,\n $OutputIn,\n $OutputOut,\n >(\n builder: Overwrite<TContext, TContextOverrides> extends $Context\n ? TMeta extends $Meta\n ? ProcedureBuilder<\n $Context,\n $Meta,\n $ContextOverrides,\n $InputIn,\n $InputOut,\n $OutputIn,\n $OutputOut,\n TCaller\n >\n : TypeError<'Meta mismatch'>\n : TypeError<'Context mismatch'>,\n ): ProcedureBuilder<\n TContext,\n TMeta,\n Overwrite<TContextOverrides, $ContextOverrides>,\n IntersectIfDefined<TInputIn, $InputIn>,\n IntersectIfDefined<TInputOut, $InputOut>,\n IntersectIfDefined<TOutputIn, $OutputIn>,\n IntersectIfDefined<TOutputOut, $OutputOut>,\n TCaller\n >;\n\n /**\n * Combine two procedure builders\n */\n concat<\n $Context,\n $Meta,\n $ContextOverrides,\n $InputIn,\n $InputOut,\n $OutputIn,\n $OutputOut,\n >(\n builder: Overwrite<TContext, TContextOverrides> extends $Context\n ? TMeta extends $Meta\n ? ProcedureBuilder<\n $Context,\n $Meta,\n $ContextOverrides,\n $InputIn,\n $InputOut,\n $OutputIn,\n $OutputOut,\n TCaller\n >\n : TypeError<'Meta mismatch'>\n : TypeError<'Context mismatch'>,\n ): ProcedureBuilder<\n TContext,\n TMeta,\n Overwrite<TContextOverrides, $ContextOverrides>,\n IntersectIfDefined<TInputIn, $InputIn>,\n IntersectIfDefined<TInputOut, $InputOut>,\n IntersectIfDefined<TOutputIn, $OutputIn>,\n IntersectIfDefined<TOutputOut, $OutputOut>,\n TCaller\n >;\n /**\n * Query procedure\n * @see https://trpc.io/docs/v11/concepts#vocabulary\n */\n query<$Output>(\n resolver: ProcedureResolver<\n TContext,\n TMeta,\n TContextOverrides,\n TInputOut,\n TOutputIn,\n $Output\n >,\n ): TCaller extends true\n ? (\n input: DefaultValue<TInputIn, void>,\n ) => Promise<DefaultValue<TOutputOut, $Output>>\n : QueryProcedure<{\n input: DefaultValue<TInputIn, void>;\n output: DefaultValue<TOutputOut, $Output>;\n meta: TMeta;\n }>;\n\n /**\n * Mutation procedure\n * @see https://trpc.io/docs/v11/concepts#vocabulary\n */\n mutation<$Output>(\n resolver: ProcedureResolver<\n TContext,\n TMeta,\n TContextOverrides,\n TInputOut,\n TOutputIn,\n $Output\n >,\n ): TCaller extends true\n ? (\n input: DefaultValue<TInputIn, void>,\n ) => Promise<DefaultValue<TOutputOut, $Output>>\n : MutationProcedure<{\n input: DefaultValue<TInputIn, void>;\n output: DefaultValue<TOutputOut, $Output>;\n meta: TMeta;\n }>;\n\n /**\n * Subscription procedure\n * @see https://trpc.io/docs/v11/server/subscriptions\n */\n subscription<$Output extends AsyncIterable<any, void, any>>(\n resolver: ProcedureResolver<\n TContext,\n TMeta,\n TContextOverrides,\n TInputOut,\n TOutputIn,\n $Output\n >,\n ): TCaller extends true\n ? TypeError<'Not implemented'>\n : SubscriptionProcedure<{\n input: DefaultValue<TInputIn, void>;\n output: inferSubscriptionOutput<DefaultValue<TOutputOut, $Output>>;\n meta: TMeta;\n }>;\n /**\n * @deprecated Using subscriptions with an observable is deprecated. Use an async generator instead.\n * This feature will be removed in v12 of tRPC.\n * @see https://trpc.io/docs/v11/server/subscriptions\n */\n subscription<$Output extends Observable<any, any>>(\n resolver: ProcedureResolver<\n TContext,\n TMeta,\n TContextOverrides,\n TInputOut,\n TOutputIn,\n $Output\n >,\n ): TCaller extends true\n ? TypeError<'Not implemented'>\n : LegacyObservableSubscriptionProcedure<{\n input: DefaultValue<TInputIn, void>;\n output: inferObservableValue<DefaultValue<TOutputOut, $Output>>;\n meta: TMeta;\n }>;\n /**\n * Overrides the way a procedure is invoked\n * Do not use this unless you know what you're doing - this is an experimental API\n */\n experimental_caller(\n caller: CallerOverride<TContext>,\n ): ProcedureBuilder<\n TContext,\n TMeta,\n TContextOverrides,\n TInputIn,\n TInputOut,\n TOutputIn,\n TOutputOut,\n true\n >;\n /**\n * @internal\n */\n _def: ProcedureBuilderDef<TMeta>;\n}\n\ntype ProcedureBuilderResolver = (\n opts: ProcedureResolverOptions<any, any, any, any>,\n) => Promise<unknown>;\n\nfunction createNewBuilder(\n def1: AnyProcedureBuilderDef,\n def2: Partial<AnyProcedureBuilderDef>,\n): AnyProcedureBuilder {\n const { middlewares = [], inputs, meta, ...rest } = def2;\n\n // TODO: maybe have a fn here to warn about calls\n return createBuilder({\n ...mergeWithoutOverrides(def1, rest),\n inputs: [...def1.inputs, ...(inputs ?? [])],\n middlewares: [...def1.middlewares, ...middlewares],\n meta: def1.meta && meta ? { ...def1.meta, ...meta } : (meta ?? def1.meta),\n });\n}\n\nexport function createBuilder<TContext, TMeta>(\n initDef: Partial<AnyProcedureBuilderDef> = {},\n): ProcedureBuilder<\n TContext,\n TMeta,\n object,\n UnsetMarker,\n UnsetMarker,\n UnsetMarker,\n UnsetMarker,\n false\n> {\n const _def: AnyProcedureBuilderDef = {\n procedure: true,\n inputs: [],\n middlewares: [],\n ...initDef,\n };\n\n const builder: AnyProcedureBuilder = {\n _def,\n input(input) {\n const parser = getParseFn(input as Parser);\n return createNewBuilder(_def, {\n inputs: [input as Parser],\n middlewares: [createInputMiddleware(parser)],\n });\n },\n output(output: Parser) {\n const parser = getParseFn(output);\n return createNewBuilder(_def, {\n output,\n middlewares: [createOutputMiddleware(parser)],\n });\n },\n meta(meta) {\n return createNewBuilder(_def, {\n meta,\n });\n },\n use(middlewareBuilderOrFn) {\n // Distinguish between a middleware builder and a middleware function\n const middlewares =\n '_middlewares' in middlewareBuilderOrFn\n ? middlewareBuilderOrFn._middlewares\n : [middlewareBuilderOrFn];\n\n return createNewBuilder(_def, {\n middlewares: middlewares,\n });\n },\n unstable_concat(builder) {\n return createNewBuilder(_def, (builder as AnyProcedureBuilder)._def);\n },\n concat(builder) {\n return createNewBuilder(_def, (builder as AnyProcedureBuilder)._def);\n },\n query(resolver) {\n return createResolver(\n { ..._def, type: 'query' },\n resolver,\n ) as AnyQueryProcedure;\n },\n mutation(resolver) {\n return createResolver(\n { ..._def, type: 'mutation' },\n resolver,\n ) as AnyMutationProcedure;\n },\n subscription(resolver: ProcedureResolver<any, any, any, any, any, any>) {\n return createResolver({ ..._def, type: 'subscription' }, resolver) as any;\n },\n experimental_caller(caller) {\n return createNewBuilder(_def, {\n caller,\n }) as any;\n },\n };\n\n return builder;\n}\n\nfunction createResolver(\n _defIn: AnyProcedureBuilderDef & { type: ProcedureType },\n resolver: AnyResolver,\n) {\n const finalBuilder = createNewBuilder(_defIn, {\n resolver,\n middlewares: [\n async function resolveMiddleware(opts) {\n const data = await resolver(opts);\n return {\n marker: middlewareMarker,\n ok: true,\n data,\n ctx: opts.ctx,\n } as const;\n },\n ],\n });\n const _def: AnyProcedure['_def'] = {\n ...finalBuilder._def,\n type: _defIn.type,\n experimental_caller: Boolean(finalBuilder._def.caller),\n meta: finalBuilder._def.meta,\n $types: null as any,\n };\n\n const invoke = createProcedureCaller(finalBuilder._def);\n const callerOverride = finalBuilder._def.caller;\n if (!callerOverride) {\n return invoke;\n }\n const callerWrapper = async (...args: unknown[]) => {\n return await callerOverride({\n args,\n invoke,\n _def: _def,\n });\n };\n\n callerWrapper._def = _def;\n\n return callerWrapper;\n}\n\n/**\n * @internal\n */\nexport interface ProcedureCallOptions<TContext> {\n ctx: TContext;\n getRawInput: GetRawInputFn;\n input?: unknown;\n path: string;\n type: ProcedureType;\n signal: AbortSignal | undefined;\n /**\n * The index of this call in a batch request.\n */\n batchIndex: number;\n}\n\nconst codeblock = `\nThis is a client-only function.\nIf you want to call this function on the server, see https://trpc.io/docs/v11/server/server-side-calls\n`.trim();\n\n// run the middlewares recursively with the resolver as the last one\nasync function callRecursive(\n index: number,\n _def: AnyProcedureBuilderDef,\n opts: ProcedureCallOptions<any>,\n): Promise<MiddlewareResult<any>> {\n try {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const middleware = _def.middlewares[index]!;\n const result = await middleware({\n ...opts,\n meta: _def.meta,\n input: opts.input,\n next(_nextOpts?: any) {\n const nextOpts = _nextOpts as\n | {\n ctx?: Record<string, unknown>;\n input?: unknown;\n getRawInput?: GetRawInputFn;\n }\n | undefined;\n\n return callRecursive(index + 1, _def, {\n ...opts,\n ctx: nextOpts?.ctx ? { ...opts.ctx, ...nextOpts.ctx } : opts.ctx,\n input: nextOpts && 'input' in nextOpts ? nextOpts.input : opts.input,\n getRawInput: nextOpts?.getRawInput ?? opts.getRawInput,\n });\n },\n });\n\n return result;\n } catch (cause) {\n return {\n ok: false,\n error: getTRPCErrorFromUnknown(cause),\n marker: middlewareMarker,\n };\n }\n}\n\nfunction createProcedureCaller(_def: AnyProcedureBuilderDef): AnyProcedure {\n async function procedure(opts: ProcedureCallOptions<unknown>) {\n // is direct server-side call\n if (!opts || !('getRawInput' in opts)) {\n throw new Error(codeblock);\n }\n\n // there's always at least one \"next\" since we wrap this.resolver in a middleware\n const result = await callRecursive(0, _def, opts);\n\n if (!result) {\n throw new TRPCError({\n code: 'INTERNAL_SERVER_ERROR',\n message:\n 'No result from middlewares - did you forget to `return next()`?',\n });\n }\n if (!result.ok) {\n // re-throw original error\n throw result.error;\n }\n return result.data;\n }\n\n procedure._def = _def;\n procedure.procedure = true;\n procedure.meta = _def.meta;\n\n // FIXME typecast shouldn't be needed - fixittt\n return procedure as unknown as AnyProcedure;\n}\n","import type { CombinedDataTransformer } from '../unstable-core-do-not-import';\nimport type { DefaultErrorShape, ErrorFormatter } from './error/formatter';\nimport type { JSONLProducerOptions } from './stream/jsonl';\nimport type { SSEStreamProducerOptions } from './stream/sse';\n\n/**\n * The initial generics that are used in the init function\n * @internal\n */\nexport interface RootTypes {\n ctx: object;\n meta: object;\n errorShape: DefaultErrorShape;\n transformer: boolean;\n}\n\n/**\n * The default check to see if we're in a server\n */\nexport const isServerDefault: boolean =\n typeof window === 'undefined' ||\n 'Deno' in window ||\n // eslint-disable-next-line @typescript-eslint/dot-notation\n globalThis.process?.env?.['NODE_ENV'] === 'test' ||\n !!globalThis.process?.env?.['JEST_WORKER_ID'] ||\n !!globalThis.process?.env?.['VITEST_WORKER_ID'];\n\n/**\n * The tRPC root config\n * @internal\n */\nexport interface RootConfig<TTypes extends RootTypes> {\n /**\n * The types that are used in the config\n * @internal\n */\n $types: TTypes;\n /**\n * Use a data transformer\n * @see https://trpc.io/docs/v11/data-transformers\n */\n transformer: CombinedDataTransformer;\n /**\n * Use custom error formatting\n * @see https://trpc.io/docs/v11/error-formatting\n */\n errorFormatter: ErrorFormatter<TTypes['ctx'], TTypes['errorShape']>;\n /**\n * Allow `@trpc/server` to run in non-server environments\n * @warning **Use with caution**, this should likely mainly be used within testing.\n * @default false\n */\n allowOutsideOfServer: boolean;\n /**\n * Is this a server environment?\n * @warning **Use with caution**, this should likely mainly be used within testing.\n * @default typeof window === 'undefined' || 'Deno' in window || process.env.NODE_ENV === 'test'\n */\n isServer: boolean;\n /**\n * Is this development?\n * Will be used to decide if the API should return stack traces\n * @default process.env.NODE_ENV !== 'production'\n */\n isDev: boolean;\n\n defaultMeta?: TTypes['meta'] extends object ? TTypes['meta'] : never;\n\n /**\n * Options for server-sent events (SSE) subscriptions\n * @see https://trpc.io/docs/client/links/httpSubscriptionLink\n */\n sse?: {\n /**\n * Enable server-sent events (SSE) subscriptions\n * @default true\n */\n enabled?: boolean;\n } & Pick<\n SSEStreamProducerOptions,\n 'ping' | 'emitAndEndImmediately' | 'maxDurationMs' | 'client'\n >;\n\n /**\n * Options for batch stream\n * @see https://trpc.io/docs/client/links/httpBatchStreamLink\n */\n jsonl?: Pick<JSONLProducerOptions, 'pingMs'>;\n experimental?: {};\n}\n\n/**\n * @internal\n */\nexport type CreateRootTypes<TGenerics extends RootTypes> = TGenerics;\n\nexport type AnyRootTypes = CreateRootTypes<{\n ctx: any;\n meta: any;\n errorShape: any;\n transformer: any;\n}>;\n\ntype PartialIf<TCondition extends boolean, TType> = TCondition extends true\n ? Partial<TType>\n : TType;\n\n/**\n * Adds a `createContext` option with a given callback function\n * If context is the default value, then the `createContext` option is optional\n */\nexport type CreateContextCallback<\n TContext,\n TFunction extends (...args: any[]) => any,\n> = PartialIf<\n object extends TContext ? true : false,\n {\n /**\n * @see https://trpc.io/docs/v11/context\n **/\n createContext: TFunction;\n }\n>;\n","import {\n defaultFormatter,\n type DefaultErrorShape,\n type ErrorFormatter,\n} from './error/formatter';\nimport type { MiddlewareBuilder, MiddlewareFunction } from './middleware';\nimport { createMiddlewareFactory } from './middleware';\nimport type { ProcedureBuilder } from './procedureBuilder';\nimport { createBuilder } from './procedureBuilder';\nimport type { AnyRootTypes, CreateRootTypes } from './rootConfig';\nimport { isServerDefault, type RootConfig } from './rootConfig';\nimport type {\n AnyRouter,\n MergeRouters,\n RouterBuilder,\n RouterCallerFactory,\n} from './router';\nimport {\n createCallerFactory,\n createRouterFactory,\n mergeRouters,\n} from './router';\nimport type { DataTransformerOptions } from './transformer';\nimport { defaultTransformer, getDataTransformer } from './transformer';\nimport type { Unwrap, ValidateShape } from './types';\nimport type { UnsetMarker } from './utils';\n\ntype inferErrorFormatterShape<TType> =\n TType extends ErrorFormatter<any, infer TShape> ? TShape : DefaultErrorShape;\n/** @internal */\nexport interface RuntimeConfigOptions<\n TContext extends object,\n TMeta extends object,\n> extends Partial<\n Omit<\n RootConfig<{\n ctx: TContext;\n meta: TMeta;\n errorShape: any;\n transformer: any;\n }>,\n '$types' | 'transformer'\n >\n> {\n /**\n * Use a data transformer\n * @see https://trpc.io/docs/v11/data-transformers\n */\n transformer?: DataTransformerOptions;\n}\n\ntype ContextCallback = (...args: any[]) => object | Promise<object>;\n\nexport interface TRPCRootObject<\n TContext extends object,\n TMeta extends object,\n TOptions extends RuntimeConfigOptions<TContext, TMeta>,\n $Root extends AnyRootTypes = {\n ctx: TContext;\n meta: TMeta;\n errorShape: undefined extends TOptions['errorFormatter']\n ? DefaultErrorShape\n : inferErrorFormatterShape<TOptions['errorFormatter']>;\n transformer: undefined extends TOptions['transformer'] ? false : true;\n },\n> {\n /**\n * Your router config\n * @internal\n */\n _config: RootConfig<$Root>;\n\n /**\n * Builder object for creating procedures\n * @see https://trpc.io/docs/v11/server/procedures\n */\n procedure: ProcedureBuilder<\n TContext,\n TMeta,\n object,\n UnsetMarker,\n UnsetMarker,\n UnsetMarker,\n UnsetMarker,\n false\n >;\n\n /**\n * Create reusable middlewares\n * @see https://trpc.io/docs/v11/server/middlewares\n */\n middleware: <$ContextOverrides>(\n fn: MiddlewareFunction<TContext, TMeta, object, $ContextOverrides, unknown>,\n ) => MiddlewareBuilder<TContext, TMeta, $ContextOverrides, unknown>;\n\n /**\n * Create a router\n * @see https://trpc.io/docs/v11/server/routers\n */\n router: RouterBuilder<$Root>;\n\n /**\n * Merge Routers\n * @see https://trpc.io/docs/v11/server/merging-routers\n */\n mergeRouters: <TRouters extends AnyRouter[]>(\n ...routerList: [...TRouters]\n ) => MergeRouters<TRouters>;\n\n /**\n * Create a server-side caller for a router\n * @see https://trpc.io/docs/v11/server/server-side-calls\n */\n createCallerFactory: RouterCallerFactory<$Root>;\n}\n\nclass TRPCBuilder<TContext extends object, TMeta extends object> {\n /**\n * Add a context shape as a generic to the root object\n * @see https://trpc.io/docs/v11/server/context\n */\n context<TNewContext extends object | ContextCallback>() {\n return new TRPCBuilder<\n TNewContext extends ContextCallback ? Unwrap<TNewContext> : TNewContext,\n TMeta\n >();\n }\n\n /**\n * Add a meta shape as a generic to the root object\n * @see https://trpc.io/docs/v11/quickstart\n */\n meta<TNewMeta extends object>() {\n return new TRPCBuilder<TContext, TNewMeta>();\n }\n\n /**\n * Create the root object\n * @see https://trpc.io/docs/v11/server/routers#initialize-trpc\n */\n create<TOptions extends RuntimeConfigOptions<TContext, TMeta>>(\n opts?: ValidateShape<TOptions, RuntimeConfigOptions<TContext, TMeta>>,\n ): TRPCRootObject<TContext, TMeta, TOptions> {\n type $Root = CreateRootTypes<{\n ctx: TContext;\n meta: TMeta;\n errorShape: undefined extends TOptions['errorFormatter']\n ? DefaultErrorShape\n : inferErrorFormatterShape<TOptions['errorFormatter']>;\n transformer: undefined extends TOptions['transformer'] ? false : true;\n }>;\n\n const config: RootConfig<$Root> = {\n ...opts,\n transformer: getDataTransformer(opts?.transformer ?? defaultTransformer),\n isDev:\n opts?.isDev ??\n // eslint-disable-next-line @typescript-eslint/dot-notation\n globalThis.process?.env['NODE_ENV'] !== 'production',\n allowOutsideOfServer: opts?.allowOutsideOfServer ?? false,\n errorFormatter: opts?.errorFormatter ?? defaultFormatter,\n isServer: opts?.isServer ?? isServerDefault,\n /**\n * These are just types, they can't be used at runtime\n * @internal\n */\n $types: null as any,\n };\n\n {\n // Server check\n const isServer: boolean = opts?.isServer ?? isServerDefault;\n\n if (!isServer && opts?.allowOutsideOfServer !== true) {\n throw new Error(\n `You're trying to use @trpc/server in a non-server environment. This is not supported by default.`,\n );\n }\n }\n return {\n /**\n * Your router config\n * @internal\n */\n _config: config,\n /**\n * Builder object for creating procedures\n * @see https://trpc.io/docs/v11/server/procedures\n */\n procedure: createBuilder<$Root['ctx'], $Root['meta']>({\n meta: opts?.defaultMeta,\n }),\n /**\n * Create reusable middlewares\n * @see https://trpc.io/docs/v11/server/middlewares\n */\n middleware: createMiddlewareFactory<$Root['ctx'], $Root['meta']>(),\n /**\n * Create a router\n * @see https://trpc.io/docs/v11/server/routers\n */\n router: createRouterFactory<$Root>(config),\n /**\n * Merge Routers\n * @see https://trpc.io/docs/v11/server/merging-routers\n */\n mergeRouters,\n /**\n * Create a server-side caller for a router\n * @see https://trpc.io/docs/v11/server/server-side-calls\n */\n createCallerFactory: createCallerFactory<$Root>(),\n };\n }\n}\n\n/**\n * Builder to initialize the tRPC root object - use this exactly once per backend\n * @see https://trpc.io/docs/v11/quickstart\n */\nexport const initTRPC = new TRPCBuilder();\nexport type { TRPCBuilder };\n"],"mappings":"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"}