OpenAPI: hotfix recursive oneOf schema UI

This commit is contained in:
Fuma Nama
2025-11-14 00:13:09 +08:00
parent cd2f25b7a1
commit e792e4316e
3 changed files with 36 additions and 7 deletions
+5
View File
@@ -0,0 +1,5 @@
---
'fumadocs-openapi': patch
---
hotfix recursive `oneOf` schema UI
+8 -7
View File
@@ -70,7 +70,7 @@ export function Schema({
);
}
function generateSchemaUI({
export function generateSchemaUI({
ctx,
root,
}: SchemaUIOptions): SchemaUIGeneratedData {
@@ -105,7 +105,7 @@ function generateSchemaUI({
fields.push(field('Multiple Of', schema.multipleOf));
}
let range = getRange(
let range = formatRange(
'value',
schema.minimum,
schema.exclusiveMinimum,
@@ -114,7 +114,7 @@ function generateSchemaUI({
);
if (range) fields.push(field('Range', range));
range = getRange(
range = formatRange(
'length',
schema.minLength,
undefined,
@@ -123,7 +123,7 @@ function generateSchemaUI({
);
if (range) fields.push(field('Length', range));
range = getRange(
range = formatRange(
'properties',
schema.minProperties,
undefined,
@@ -132,7 +132,7 @@ function generateSchemaUI({
);
if (range) fields.push(field('Properties', range));
range = getRange(
range = formatRange(
'items',
schema.minItems,
undefined,
@@ -243,6 +243,7 @@ function generateSchemaUI({
...schema,
...item,
};
delete extended['oneOf'];
scanRefs(key, extended);
out.items.push({
@@ -324,14 +325,14 @@ function generateSchemaUI({
};
}
function getRange(
function formatRange(
value: string,
min: number | undefined,
exclusiveMin: number | undefined,
max: number | undefined,
exclusiveMax: number | undefined,
) {
const out = [];
const out: string[] = [];
if (min !== undefined) {
out.push(`${min} <=`);
} else if (exclusiveMin !== undefined) {
+23
View File
@@ -0,0 +1,23 @@
import { RenderContext } from '@/types';
import { processDocument } from '@/utils/process-document';
import Slugger from 'github-slugger';
export async function renderContextFrom(input: string): Promise<RenderContext> {
const schema = await processDocument(input);
return {
mediaAdapters: {},
renderCodeBlock(_lang, code) {
return code;
},
renderHeading(_depth, text) {
return text;
},
renderMarkdown(text) {
return text;
},
schema,
servers: schema.dereferenced.servers!,
slugger: new Slugger(),
};
}