@@ -38,6 +38,11 @@ type RecursiveRouterObj<T extends AppRouter> = {
3838 : never ;
3939} ;
4040
41+ type InitialisedRouter < TContract extends AppRouter > = {
42+ contract : TContract ;
43+ routes : RecursiveRouterObj < TContract > ;
44+ } ;
45+
4146type RegisterRouterOptions = {
4247 logInitialization ?: boolean ;
4348 jsonQuery ?: boolean ;
@@ -100,9 +105,15 @@ const validateRequest = (
100105} ;
101106
102107export const initServer = ( ) => ( {
103- router : < T extends AppRouter > ( router : T , args : RecursiveRouterObj < T > ) => args ,
108+ router : < TContract extends AppRouter > (
109+ contract : TContract ,
110+ routes : RecursiveRouterObj < TContract >
111+ ) : InitialisedRouter < TContract > => ( {
112+ contract,
113+ routes,
114+ } ) ,
104115 registerRouter : <
105- T extends RecursiveRouterObj < TContract > ,
116+ T extends InitialisedRouter < TContract > ,
106117 TContract extends AppRouter
107118 > (
108119 contract : TContract ,
@@ -115,12 +126,34 @@ export const initServer = () => ({
115126 requestValidationErrorHandler : 'combined' ,
116127 }
117128 ) => {
118- recursivelyRegisterRouter ( routerImpl , contract , [ ] , app , options ) ;
129+ recursivelyRegisterRouter ( routerImpl . routes , contract , [ ] , app , options ) ;
119130
120131 app . setErrorHandler (
121132 requestValidationErrorHandler ( options . requestValidationErrorHandler )
122133 ) ;
123134 } ,
135+ plugin :
136+ < T extends AppRouter > (
137+ router : InitialisedRouter < T >
138+ ) : fastify . FastifyPluginCallback < RegisterRouterOptions > =>
139+ (
140+ app ,
141+ opts = {
142+ logInitialization : true ,
143+ jsonQuery : false ,
144+ responseValidation : false ,
145+ requestValidationErrorHandler : 'combined' ,
146+ } ,
147+ done
148+ ) => {
149+ recursivelyRegisterRouter ( router . routes , router . contract , [ ] , app , opts ) ;
150+
151+ app . setErrorHandler (
152+ requestValidationErrorHandler ( opts . requestValidationErrorHandler )
153+ ) ;
154+
155+ done ( ) ;
156+ } ,
124157} ) ;
125158
126159const requestValidationErrorHandler = (
0 commit comments