@@ -10,6 +10,11 @@ import { mergeMiddlewares } from './middleware-utils'
1010import { isProcedure , Procedure } from './procedure'
1111import { getHiddenRouterContract } from './router-hidden'
1212
13+ /**
14+ * Resolves a nested router by walking the given path segments.
15+ *
16+ * @info If a lazy router is encountered mid-path, the remaining segments are deferred into a new lazy loader.
17+ */
1318export function getRouter < T extends Lazyable < AnyRouter | undefined > > (
1419 router : T ,
1520 path : readonly string [ ] ,
@@ -57,6 +62,9 @@ export type AccessibleLazyRouter<T extends Lazyable<AnyRouter | undefined>>
5762 [ K in keyof T ] : T [ K ] extends Lazyable < AnyRouter > ? AccessibleLazyRouter < T [ K ] > : never
5863 }
5964
65+ /**
66+ * Creates a proxy around a lazy router that enables dot-notation property access without eager loading.
67+ */
6068export function createAccessibleLazyRouter < T extends Lazy < AnyRouter | undefined > > ( lazied : T ) : AccessibleLazyRouter < T > {
6169 const recursive = new Proxy ( lazied , {
6270 get ( target , key ) {
@@ -107,6 +115,11 @@ export interface EnhanceRouterOptions<TErrorMap extends ErrorMap> extends Enhanc
107115 dedupeLeadingMiddlewares : boolean
108116}
109117
118+ /**
119+ * Recursively applies middlewares, error maps, and route options to every procedure in a router tree.
120+ *
121+ * @info Lazy routers are wrapped so enhancement is deferred until loading. Non-object primitive values are safely skipped.
122+ */
110123export function enhanceRouter <
111124 T extends Lazyable < AnyRouter > ,
112125 TInitialContext extends Context ,
@@ -183,6 +196,11 @@ export interface LazyTraverseContractProceduresOptions {
183196 path : readonly string [ ]
184197}
185198
199+ /**
200+ * Synchronously walks a router tree, invoking the callback for each contract procedure and collecting lazy routers for deferred resolution.
201+ *
202+ * @info Non-object primitive values in the tree are safely skipped.
203+ */
186204export function traverseContractProcedures (
187205 options : TraverseContractProceduresOptions ,
188206 callback : ( options : TraverseContractProcedureCallbackOptions ) => void ,
@@ -226,6 +244,9 @@ export function traverseContractProcedures(
226244 return lazyOptions
227245}
228246
247+ /**
248+ * Asynchronously resolves all procedures in a router tree, including those behind lazy loaders.
249+ */
229250export async function resolveContractProcedures (
230251 options : TraverseContractProceduresOptions ,
231252 callback : ( options : TraverseContractProcedureCallbackOptions ) => void ,
@@ -253,6 +274,11 @@ export type UnlaziedRouter<T extends AnyRouter>
253274 [ K in keyof T ] : T [ K ] extends Lazyable < infer U extends AnyRouter > ? UnlaziedRouter < U > : never
254275 }
255276
277+ /**
278+ * Recursively resolves all lazy-loaded components in a router tree, returning a fully eager copy.
279+ *
280+ * @info Procedures are returned as-is. Non-object primitive values are safely skipped.
281+ */
256282export async function unlazyRouter < T extends AnyRouter > ( router : T ) : Promise < UnlaziedRouter < T > > {
257283 if ( isProcedure ( router ) ) {
258284 return router as any
0 commit comments