Skip to content

Commit 5d21c1c

Browse files
committed
feat: custom content for responses
1 parent 20efc73 commit 5d21c1c

File tree

2 files changed

+27
-9
lines changed

2 files changed

+27
-9
lines changed

src/core/responses.ts

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,24 @@ export function addBadRequest(queryParams?: unknown, requestBody?: unknown) {
99

1010
export function bundleResponses<Defs extends Record<string, unknown>>(collection: ResponseCollection<Defs>) {
1111
return Object.entries(collection).reduce((result, [key, response]: [string, ResponseDefinition<unknown>]) => {
12-
return {
13-
...result,
14-
[key]: {
15-
description: response.description,
16-
content: resolveContent(response.content, response.isArray, false, response.example, response.examples),
17-
} satisfies ResponseObject,
18-
};
12+
if (response.content) {
13+
return {
14+
...result,
15+
[key]: {
16+
description: response.description,
17+
content: resolveContent(response.content, response.isArray, false, response.example, response.examples),
18+
} satisfies ResponseObject,
19+
};
20+
}
21+
if (response.customContent) {
22+
return {
23+
...result,
24+
[key]: {
25+
description: response.description,
26+
content: response.customContent,
27+
} satisfies ResponseObject,
28+
};
29+
}
30+
return result;
1931
}, {}) as ResponsesObject;
2032
}

src/types/response.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,19 @@
11
import type { ExampleObject } from "@omer-x/openapi-types/example";
2+
import type { MediaTypeObject } from "@omer-x/openapi-types/media-type";
23
import type { ZodType, ZodTypeDef } from "zod";
34

45
export type ResponseDefinition<O, I = O> = {
56
description: string,
67
isArray?: boolean,
7-
content?: ZodType<O, ZodTypeDef, I> | string,
88
example?: NoInfer<O>,
99
examples?: Record<string, ExampleObject<NoInfer<O>>>,
10-
};
10+
} & ({
11+
content?: ZodType<O, ZodTypeDef, I> | string,
12+
customContent?: never,
13+
} | {
14+
content?: never,
15+
customContent?: Record<string, MediaTypeObject>,
16+
});
1117

1218
export type ResponseCollection<T extends Record<string, unknown>> = {
1319
[K in keyof T]: ResponseDefinition<T[K]>;

0 commit comments

Comments
 (0)