@@ -140,43 +140,54 @@ export const getRequestBodyObject = (
140140export const hasInputs = ( schema : unknown ) =>
141141 instanceofZodType ( schema ) && ! instanceofZodTypeLikeVoid ( unwrapZodType ( schema , true ) ) ;
142142
143+ const errorResponseObjectByCode : Record < string , ZodOpenApiResponseObject > = { } ;
144+
143145export const errorResponseObject = (
144- code ?: string ,
146+ code = 'INTERNAL_SERVER_ERROR' ,
145147 message ?: string ,
146148 issues ?: { message : string } [ ] ,
147- ) : ZodOpenApiResponseObject => ( {
148- description : message ?? 'An error response' ,
149- content : {
150- 'application/json' : {
151- schema : z
152- . object ( {
153- message : z . string ( ) . openapi ( {
154- description : 'The error message' ,
155- example : message ?? 'Internal server error' ,
156- } ) ,
157- code : z
158- . string ( )
159- . openapi ( { description : 'The error code' , example : code ?? 'INTERNAL_SERVER_ERROR' } ) ,
160- issues : z
161- . array ( z . object ( { message : z . string ( ) } ) )
162- . optional ( )
149+ ) : ZodOpenApiResponseObject => {
150+ if ( ! errorResponseObjectByCode [ code ] ) {
151+ errorResponseObjectByCode [ code ] = {
152+ description : message ?? 'An error response' ,
153+ content : {
154+ 'application/json' : {
155+ schema : z
156+ . object ( {
157+ message : z . string ( ) . openapi ( {
158+ description : 'The error message' ,
159+ example : message ?? 'Internal server error' ,
160+ } ) ,
161+ code : z
162+ . string ( )
163+ . openapi ( {
164+ description : 'The error code' ,
165+ example : code ?? 'INTERNAL_SERVER_ERROR' ,
166+ } ) ,
167+ issues : z
168+ . array ( z . object ( { message : z . string ( ) } ) )
169+ . optional ( )
170+ . openapi ( {
171+ description : 'An array of issues that were responsible for the error' ,
172+ example : issues ?? [ ] ,
173+ } ) ,
174+ } )
163175 . openapi ( {
164- description : 'An array of issues that were responsible for the error' ,
165- example : issues ?? [ ] ,
176+ title : 'Error' ,
177+ description : 'The error information' ,
178+ example : {
179+ code : code ?? 'INTERNAL_SERVER_ERROR' ,
180+ message : message ?? 'Internal server error' ,
181+ issues : issues ?? [ ] ,
182+ } ,
183+ ref : `error.${ code } ` ,
166184 } ) ,
167- } )
168- . openapi ( {
169- title : 'Error' ,
170- description : 'The error information' ,
171- example : {
172- code : code ?? 'INTERNAL_SERVER_ERROR' ,
173- message : message ?? 'Internal server error' ,
174- issues : issues ?? [ ] ,
175- } ,
176- } ) ,
177- } ,
178- } ,
179- } ) ;
185+ } ,
186+ } ,
187+ } ;
188+ }
189+ return errorResponseObjectByCode [ code ] ! ;
190+ } ;
180191
181192export const errorResponseFromStatusCode = ( status : number ) => {
182193 const code = HTTP_STATUS_TRPC_ERROR_CODE [ status ] ;
0 commit comments