Skip to content

Commit ae902bc

Browse files
committed
refactor: resolveContent with createMediaType
1 parent ba2b4fb commit ae902bc

File tree

3 files changed

+21
-4
lines changed

3 files changed

+21
-4
lines changed

src/core/content.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,20 @@
11
import { createSchemaRef } from "~/utils/openapi-components";
2+
import createMediaType from "./createMediaType";
23
import convertToOpenAPI from "./zod-to-openapi";
34
import type { RequestBodyObject } from "@omer-x/openapi-types/request-body";
45
import type { ZodType } from "zod";
56

6-
export function resolveContent(source?: ZodType<unknown> | string, isArray: boolean = false, isFormData: boolean = false) {
7+
export function resolveContent(
8+
source?: ZodType<unknown> | string,
9+
isArray: boolean = false,
10+
isFormData: boolean = false,
11+
customExample?: unknown,
12+
) {
713
if (!source) return undefined;
814

915
const schema = typeof source === "string" ? createSchemaRef(source, isArray) : convertToOpenAPI(source, isArray);
1016

1117
return {
12-
[isFormData ? "multipart/form-data" : "application/json"]: {
13-
schema,
14-
},
18+
[isFormData ? "multipart/form-data" : "application/json"]: createMediaType(schema, customExample),
1519
} as RequestBodyObject["content"];
1620
}

src/core/createMediaType.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import type { Entry } from "~/types/entry";
2+
import type { MediaTypeObject } from "@omer-x/openapi-types/media-type";
3+
import type { SchemaObject } from "@omer-x/openapi-types/schema";
4+
5+
export default function createMediaType(schema: SchemaObject, example?: MediaTypeObject["example"]) {
6+
const mediaTypeEntries = [] as Entry<MediaTypeObject>[];
7+
mediaTypeEntries.push(["schema", schema]);
8+
if (example) {
9+
mediaTypeEntries.push(["example", example]);
10+
}
11+
return Object.fromEntries(mediaTypeEntries) as MediaTypeObject;
12+
}

src/types/entry.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export type Entry<T> = [keyof T, T[keyof T]];

0 commit comments

Comments
 (0)