Skip to content

Commit 44a560f

Browse files
committed
OpenAPI: Remove undefined values in generated frontmatter
1 parent 0146178 commit 44a560f

File tree

4 files changed

+39
-6
lines changed

4 files changed

+39
-6
lines changed

.changeset/itchy-boats-follow.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'fumadocs-openapi': patch
3+
---
4+
5+
Remove undefined values in generated frontmatter

packages/core/src/utils/remove-undefined.ts

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,19 @@
11
export function removeUndefined<T extends object>(value: T, deep = false): T {
22
const obj = value as Record<string, unknown>;
33

4-
for (const key of Object.keys(obj)) {
4+
for (const key in obj) {
55
if (obj[key] === undefined) delete obj[key];
6+
if (!deep) continue;
67

7-
if (deep && typeof obj[key] === 'object' && obj[key] !== null) {
8-
removeUndefined(obj[key], deep);
9-
} else if (deep && Array.isArray(obj[key])) {
10-
obj[key].forEach((v) => removeUndefined(v, deep));
8+
const entry = obj[key];
9+
10+
if (typeof entry === 'object' && entry !== null) {
11+
removeUndefined(entry, deep);
12+
continue;
13+
}
14+
15+
if (Array.isArray(entry)) {
16+
for (const item of entry) removeUndefined(item, deep);
1117
}
1218
}
1319

packages/openapi/src/generate.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import type { Document, TagObject } from '@/types';
1212
import { dump } from 'js-yaml';
1313
import type { NoReference } from '@/utils/schema';
1414
import Slugger from 'github-slugger';
15+
import { removeUndefined } from '@/utils/remove-undefined';
1516

1617
export interface GenerateOptions {
1718
/**
@@ -231,7 +232,7 @@ export function generateDocument(
231232
): string {
232233
const { addGeneratedComment = true, imports } = options;
233234
const out: string[] = [];
234-
const banner = dump(frontmatter).trim();
235+
const banner = dump(removeUndefined(frontmatter as object)).trimEnd();
235236
if (banner.length > 0) out.push(`---\n${banner}\n---`);
236237

237238
if (addGeneratedComment) {
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
export function removeUndefined<T extends object>(value: T, deep = false): T {
2+
const obj = value as Record<string, unknown>;
3+
4+
for (const key in obj) {
5+
if (obj[key] === undefined) delete obj[key];
6+
if (!deep) continue;
7+
8+
const entry = obj[key];
9+
10+
if (typeof entry === 'object' && entry !== null) {
11+
removeUndefined(entry, deep);
12+
continue;
13+
}
14+
15+
if (Array.isArray(entry)) {
16+
for (const item of entry) removeUndefined(item, deep);
17+
}
18+
}
19+
20+
return value;
21+
}

0 commit comments

Comments
 (0)