@@ -26,6 +26,11 @@ export type ContractOtherResponse<T extends ContractAnyType> = Opaque<
2626 'ContractOtherResponse'
2727> ;
2828
29+ export type AppRouteResponse =
30+ | ContractAnyType
31+ | ContractNoBodyType
32+ | ContractOtherResponse < ContractAnyType > ;
33+
2934type AppRouteCommon = {
3035 path : Path ;
3136 pathParams ?: ContractAnyType ;
@@ -34,12 +39,7 @@ type AppRouteCommon = {
3439 summary ?: string ;
3540 description ?: string ;
3641 deprecated ?: boolean ;
37- responses : Record <
38- number ,
39- | ContractAnyType
40- | ContractNoBodyType
41- | ContractOtherResponse < ContractAnyType >
42- > ;
42+ responses : Record < number , AppRouteResponse > ;
4343 strictStatusCodes ?: boolean ;
4444 metadata ?: unknown ;
4545
@@ -131,7 +131,7 @@ type UniversalMerge<A, B> = A extends z.AnyZodObject
131131type ApplyOptions <
132132 TRoute extends AppRoute ,
133133 TOptions extends RouterOptions ,
134- > = Omit < TRoute , 'headers' | 'path' > &
134+ > = Omit < TRoute , 'headers' | 'path' | 'responses' > &
135135 WithoutUnknown < {
136136 path : TOptions [ 'pathPrefix' ] extends string
137137 ? `${TOptions [ 'pathPrefix' ] } ${TRoute [ 'path' ] } `
@@ -142,6 +142,9 @@ type ApplyOptions<
142142 : TOptions [ 'strictStatusCodes' ] extends boolean
143143 ? TOptions [ 'strictStatusCodes' ]
144144 : unknown ;
145+ responses : 'commonResponses' extends keyof TOptions
146+ ? Prettify < Merge < TOptions [ 'commonResponses' ] , TRoute [ 'responses' ] > >
147+ : TRoute [ 'responses' ] ;
145148 } > ;
146149
147150/**
@@ -164,6 +167,7 @@ export type RouterOptions<TPrefix extends string = string> = {
164167 baseHeaders ?: unknown ;
165168 strictStatusCodes ?: boolean ;
166169 pathPrefix ?: TPrefix ;
170+ commonResponses ?: Record < number , AppRouteResponse > ;
167171
168172 /**
169173 * @deprecated Use `validateResponse` on the client options
@@ -210,12 +214,7 @@ type ContractInstance = {
210214 * a {@link AppRouter}
211215 */
212216 mutation : < T extends AppRouteMutation > ( mutation : NarrowObject < T > ) => T ;
213- responses : <
214- TResponses extends Record <
215- number ,
216- ContractAnyType | ContractOtherResponse < ContractAnyType >
217- > ,
218- > (
217+ responses : < TResponses extends Record < number , AppRouteResponse > > (
219218 responses : TResponses ,
220219 ) => TResponses ;
221220 /**
@@ -270,6 +269,10 @@ const recursivelyApplyOptions = <T extends AppRouter>(
270269 validateResponseOnClient :
271270 value . validateResponseOnClient ??
272271 options ?. validateResponseOnClient ,
272+ responses : {
273+ ...options ?. commonResponses ,
274+ ...value . responses ,
275+ } ,
273276 } ,
274277 ] ;
275278 } else {
0 commit comments