From 791d3545bbe0b18adba449656e73a2a6c55e4e06 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 13 Nov 2026 00:32:51 +0000 Subject: [PATCH] perf(server): make augmented router types cheaper to type-check AugmentedRouter and AugmentedRouterWithMiddlewares now match a procedure through its `~orpc` definition instead of the Procedure class, and test each key against AnyRouter before trying the `Lazy` inference, so only lazy keys pay for it. Both resolve to the same types as before. Co-Authored-By: Claude Fable 5.2 Claude-Session: https://claude.ai/code/session_01VVaw7SLCp5Vav859sAFS6N --- packages/server/src/router-utils.ts | 64 +++++++++++++++-------------- 1 file changed, 33 insertions(+), 31 deletions(-) diff --git a/packages/server/src/router-utils.ts b/packages/server/src/router-utils.ts index c31e55ddc..5796b4f97 100644 --- a/packages/server/src/router-utils.ts +++ b/packages/server/src/router-utils.ts @@ -13,62 +13,64 @@ import type { Context, MergedInitialContext } from './context' import type { Lazyable } from './lazy' import { Lazy, unlazy } from './lazy' import type { AnyMiddleware } from './middleware' -import type { AnyProcedure, ProcedureConfig } from './procedure' +import type { AnyProcedure, ProcedureConfig, ProcedureDefinition } from './procedure' import { Procedure } from './procedure' import { createContractProcedure } from './procedure-utils' import type { AnyRouter } from './router' import { getHiddenRouterContract } from './router-hidden' -export type AugmentedRouter = - T extends Procedure< +export type AugmentedRouter = T extends { + '~orpc': ProcedureDefinition< infer $InitialContext, infer $CurrentContext, infer $InputSchema, infer $OutputSchema, infer $ErrorMap > - ? Procedure< - $InitialContext, - $CurrentContext, - $InputSchema, - $OutputSchema, - MergedErrorMap - > - : { - [K in keyof T]: T[K] extends Lazy +} + ? Procedure< + $InitialContext, + $CurrentContext, + $InputSchema, + $OutputSchema, + MergedErrorMap + > + : { + [K in keyof T]: T[K] extends AnyRouter + ? AugmentedRouter + : T[K] extends Lazy ? Lazy> - : T[K] extends AnyRouter - ? AugmentedRouter - : never - } + : never + } export type AugmentedRouterWithMiddlewares< T extends AnyRouter, TInitialContext extends Context, TInjectedContext extends Context, TErrorMap extends ErrorMap, -> = - T extends Procedure< +> = T extends { + '~orpc': ProcedureDefinition< infer $InitialContext, infer $CurrentContext, infer $InputSchema, infer $OutputSchema, infer $ErrorMap > - ? Procedure< - MergedInitialContext, - $CurrentContext, - $InputSchema, - $OutputSchema, - MergedErrorMap - > - : { - [K in keyof T]: T[K] extends Lazy +} + ? Procedure< + MergedInitialContext, + $CurrentContext, + $InputSchema, + $OutputSchema, + MergedErrorMap + > + : { + [K in keyof T]: T[K] extends AnyRouter + ? AugmentedRouterWithMiddlewares + : T[K] extends Lazy ? Lazy> - : T[K] extends AnyRouter - ? AugmentedRouterWithMiddlewares - : never - } + : never + } interface AugmentRouterOptions extends AugmentContractRouterOptions, ProcedureConfig {