@@ -17,12 +17,25 @@ export type Property<T, K extends keyof any, D = unknown> =
1717export type ValueOf<T, D = never> = T extends Record<string, unknown> ? T[keyof T] : D;
1818
1919export type EmptyObject = Record<never, never>;
20+
21+ export type StatusCode<Status> =
22+ Status extends '4XX' ? FourXX :
23+ Status extends '5XX' ? FiveXX :
24+ Status extends number ? Status :
25+ Status extends \`\${infer N extends number}\` ? N :
26+ never;
27+
28+ export type FourXX = 400 | 401 | 402 | 403 | 404 | 405 | 406 | 407 | 408 | 409 |
29+ 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 421 |
30+ 422 | 423 | 424 | 425 | 426 | 428 | 429 | 431 | 451;
31+
32+ export type FiveXX = 500 | 501 | 502 | 503 | 504 | 505 | 506 | 507 | 508 | 510 | 511;
2033` ;
2134
2235export const requests = `
23- import {Params, Request, Response } from '@openapi-ts/request-types';
36+ import {Params, Request} from '@openapi-ts/request-types';
2437import {operations} from './spec';
25- import {EmptyObject, Property, ValueOf} from './utils';
38+ import {EmptyObject, Property, ValueOf, StatusCode } from './utils';
2639
2740export type RequestBody<OperationId extends keyof operations> =
2841 operations[OperationId] extends {requestBody: Record<string, any>} ?
@@ -38,8 +51,23 @@ export type RequestQuery<OperationId extends keyof operations> =
3851export type RequestHeaders<OperationId extends keyof operations> =
3952 Property<Property<operations[OperationId], 'parameters', EmptyObject>, 'header', EmptyObject>;
4053
41- export type ResponseBody<OperationId extends keyof operations> =
42- ValueOf<Property<ValueOf<Property<operations[OperationId], 'responses', EmptyObject>>, 'content'>, void>;
54+ export type OperationResponse<OpName extends keyof operations> = {
55+ [Status in keyof operations[OpName]['responses']]:
56+ operations[OpName]['responses'][Status] extends {
57+ content: infer Content;
58+ }
59+ ? {
60+ [CT in keyof Content]: {
61+ statusCode: StatusCode<Status>;
62+ headers: { 'Content-Type': CT };
63+ body: Content[CT];
64+ }
65+ }[keyof Content]
66+ : {
67+ statusCode: StatusCode<Status>;
68+ headers: EmptyObject;
69+ };
70+ }[keyof operations[OpName]['responses']]
4371
4472export type ResponseHeaders<OperationId extends keyof operations> =
4573 Property<ValueOf<Property<operations[OperationId], 'responses', EmptyObject>>, 'headers'>;
@@ -49,10 +77,6 @@ export type OperationRequest<OperationId extends keyof operations> = Request<
4977 Params & RequestPathParams<OperationId>,
5078 Params & RequestQuery<OperationId>,
5179 Params & RequestHeaders<OperationId>>;
52-
53- export type OperationResponse<OperationId extends keyof operations> = Response<
54- ResponseBody<OperationId>,
55- Params & ResponseHeaders<OperationId>>;
5680` ;
5781
5882export const handlers = `
0 commit comments