docs: merge allOf in OAS to show all object types (#8453)
* docs: merge allOf in OAS to show all object types * add case for non objects
This commit is contained in:
@@ -3,6 +3,7 @@ import dynamic from "next/dynamic"
|
||||
import type { TagOperationParametersDefaultProps } from "../Default"
|
||||
import { TagOperationParametersObjectProps } from "../Object"
|
||||
import { Loading } from "docs-ui"
|
||||
import mergeAllOfTypes from "../../../../../../utils/merge-all-of-types"
|
||||
|
||||
const TagOperationParametersObject = dynamic<TagOperationParametersObjectProps>(
|
||||
async () => import("../Object"),
|
||||
@@ -34,7 +35,9 @@ const TagOperationParametersUnion = ({
|
||||
}: TagOperationParametersUnionProps) => {
|
||||
const objectSchema = schema.anyOf
|
||||
? schema.anyOf.find((item) => item.type === "object" && item.properties)
|
||||
: schema.allOf?.find((item) => item.type === "object" && item.properties)
|
||||
: schema.allOf
|
||||
? mergeAllOfTypes(schema)
|
||||
: undefined
|
||||
|
||||
if (!objectSchema) {
|
||||
return (
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
import type { PropertiesObject, SchemaObject } from "@/types/openapi"
|
||||
|
||||
export default function mergeAllOfTypes(
|
||||
allOfSchema: SchemaObject
|
||||
): SchemaObject {
|
||||
if (!allOfSchema.allOf) {
|
||||
// return whatever the schema is
|
||||
return allOfSchema
|
||||
}
|
||||
// merge objects' properties in this var
|
||||
let properties: PropertiesObject = {}
|
||||
let foundObjects = false
|
||||
|
||||
allOfSchema.allOf.forEach((item) => {
|
||||
if (item.type !== "object") {
|
||||
return
|
||||
}
|
||||
|
||||
properties = Object.assign(properties, item.properties)
|
||||
foundObjects = true
|
||||
})
|
||||
|
||||
if (!foundObjects && allOfSchema.allOf.length) {
|
||||
// return the first item in the union.
|
||||
// allOf should always include an object but just in case
|
||||
return allOfSchema.allOf[0]
|
||||
}
|
||||
|
||||
return {
|
||||
type: "object",
|
||||
properties,
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user