OpenAPI: Remove undefined values in generated frontmatter

This commit is contained in:
Fuma Nama
2025-09-06 17:04:16 +08:00
parent 0146178f4f
commit 44a560f5c4
4 changed files with 39 additions and 6 deletions
+5
View File
@@ -0,0 +1,5 @@
---
'fumadocs-openapi': patch
---
Remove undefined values in generated frontmatter
+11 -5
View File
@@ -1,13 +1,19 @@
export function removeUndefined<T extends object>(value: T, deep = false): T {
const obj = value as Record<string, unknown>;
for (const key of Object.keys(obj)) {
for (const key in obj) {
if (obj[key] === undefined) delete obj[key];
if (!deep) continue;
if (deep && typeof obj[key] === 'object' && obj[key] !== null) {
removeUndefined(obj[key], deep);
} else if (deep && Array.isArray(obj[key])) {
obj[key].forEach((v) => removeUndefined(v, deep));
const entry = obj[key];
if (typeof entry === 'object' && entry !== null) {
removeUndefined(entry, deep);
continue;
}
if (Array.isArray(entry)) {
for (const item of entry) removeUndefined(item, deep);
}
}
+2 -1
View File
@@ -12,6 +12,7 @@ import type { Document, TagObject } from '@/types';
import { dump } from 'js-yaml';
import type { NoReference } from '@/utils/schema';
import Slugger from 'github-slugger';
import { removeUndefined } from '@/utils/remove-undefined';
export interface GenerateOptions {
/**
@@ -231,7 +232,7 @@ export function generateDocument(
): string {
const { addGeneratedComment = true, imports } = options;
const out: string[] = [];
const banner = dump(frontmatter).trim();
const banner = dump(removeUndefined(frontmatter as object)).trimEnd();
if (banner.length > 0) out.push(`---\n${banner}\n---`);
if (addGeneratedComment) {
@@ -0,0 +1,21 @@
export function removeUndefined<T extends object>(value: T, deep = false): T {
const obj = value as Record<string, unknown>;
for (const key in obj) {
if (obj[key] === undefined) delete obj[key];
if (!deep) continue;
const entry = obj[key];
if (typeof entry === 'object' && entry !== null) {
removeUndefined(entry, deep);
continue;
}
if (Array.isArray(entry)) {
for (const item of entry) removeUndefined(item, deep);
}
}
return value;
}