Skip to content

Commit 7f94b48

Browse files
committed
Fix circular allOf merging
1 parent bebd143 commit 7f94b48

File tree

1 file changed

+40
-8
lines changed

1 file changed

+40
-8
lines changed

packages/docusaurus-plugin-openapi-docs/src/markdown/createSchema.ts

Lines changed: 40 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -783,17 +783,49 @@ export function createNodes(
783783
}
784784

785785
if (schema.allOf !== undefined) {
786-
const mergedSchemas = mergeAllOf(schema) as SchemaObject;
787-
788786
if (
789-
mergedSchemas.oneOf !== undefined ||
790-
mergedSchemas.anyOf !== undefined
787+
schema.allOf.length &&
788+
typeof schema.allOf[0] === "string" &&
789+
(schema.allOf[0] as string).includes("circular")
791790
) {
792-
nodes.push(createAnyOneOf(mergedSchemas));
793-
}
791+
nodes.push(
792+
create("div", {
793+
style: {
794+
marginTop: ".5rem",
795+
marginBottom: ".5rem",
796+
marginLeft: "1rem",
797+
},
798+
children: createDescription(schema.allOf[0]),
799+
})
800+
);
794801

795-
if (mergedSchemas.properties !== undefined) {
796-
nodes.push(createProperties(mergedSchemas));
802+
const rest = schema.allOf.slice(1);
803+
if (rest.length) {
804+
const mergedSchemas = mergeAllOf({ allOf: rest } as SchemaObject);
805+
if (
806+
mergedSchemas.oneOf !== undefined ||
807+
mergedSchemas.anyOf !== undefined
808+
) {
809+
nodes.push(createAnyOneOf(mergedSchemas));
810+
}
811+
812+
if (mergedSchemas.properties !== undefined) {
813+
nodes.push(createProperties(mergedSchemas));
814+
}
815+
}
816+
} else {
817+
const mergedSchemas = mergeAllOf(schema) as SchemaObject;
818+
819+
if (
820+
mergedSchemas.oneOf !== undefined ||
821+
mergedSchemas.anyOf !== undefined
822+
) {
823+
nodes.push(createAnyOneOf(mergedSchemas));
824+
}
825+
826+
if (mergedSchemas.properties !== undefined) {
827+
nodes.push(createProperties(mergedSchemas));
828+
}
797829
}
798830
}
799831

0 commit comments

Comments
 (0)