Skip to content

Commit ffa69a9

Browse files
authored
Add support for rendering additionalProperties schemas (#465)
* Add support for rendering additionalProperties schemas * Check for properties, items, anyOf, oneOf, additionalProperties or allOf before returning createDetailsComponent * Add check for array
1 parent 0b7ab97 commit ffa69a9

File tree

2 files changed

+45
-3
lines changed

2 files changed

+45
-3
lines changed

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

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ export function mergeAllOf(allOf: SchemaObject[]) {
3434
return true;
3535
},
3636
},
37-
ignoreAdditionalProperties: true,
37+
ignoreAdditionalProperties: false,
3838
});
3939

4040
const required = allOf.reduce((acc, cur) => {
@@ -157,6 +157,28 @@ function createAdditionalProperties(schema: SchemaObject) {
157157
// },
158158
// type: 'array'
159159
// }
160+
const additionalProperties = schema.additionalProperties;
161+
const type: string | unknown = additionalProperties?.type;
162+
if (
163+
(type === "object" || type === "array") &&
164+
(additionalProperties?.properties ||
165+
additionalProperties?.items ||
166+
additionalProperties?.allOf ||
167+
additionalProperties?.additionalProperties ||
168+
additionalProperties?.oneOf ||
169+
additionalProperties?.anyOf)
170+
) {
171+
const title = additionalProperties.title;
172+
const schemaName = title ? `object (${title})` : "object";
173+
const required = schema.required ?? false;
174+
return createDetailsNode(
175+
"property name*",
176+
schemaName,
177+
additionalProperties,
178+
required,
179+
schema.nullable
180+
);
181+
}
160182

161183
if (
162184
(schema.additionalProperties?.type as string) === "string" ||
@@ -165,7 +187,6 @@ function createAdditionalProperties(schema: SchemaObject) {
165187
(schema.additionalProperties?.type as string) === "integer" ||
166188
(schema.additionalProperties?.type as string) === "number"
167189
) {
168-
const type = schema.additionalProperties?.type;
169190
const additionalProperties =
170191
schema.additionalProperties?.additionalProperties;
171192
if (additionalProperties !== undefined) {

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

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,28 @@ function createAdditionalProperties(schema: SchemaObject) {
163163
// },
164164
// type: 'array'
165165
// }
166+
const additionalProperties = schema.additionalProperties;
167+
const type: string | unknown = additionalProperties?.type;
168+
if (
169+
(type === "object" || type === "array") &&
170+
(additionalProperties?.properties ||
171+
additionalProperties?.items ||
172+
additionalProperties?.allOf ||
173+
additionalProperties?.additionalProperties ||
174+
additionalProperties?.oneOf ||
175+
additionalProperties?.anyOf)
176+
) {
177+
const title = additionalProperties.title;
178+
const schemaName = title ? `object (${title})` : "object";
179+
const required = schema.required ?? false;
180+
return createDetailsNode(
181+
"property name*",
182+
schemaName,
183+
additionalProperties,
184+
required,
185+
schema.nullable
186+
);
187+
}
166188

167189
if (
168190
(schema.additionalProperties?.type as string) === "string" ||
@@ -171,7 +193,6 @@ function createAdditionalProperties(schema: SchemaObject) {
171193
(schema.additionalProperties?.type as string) === "integer" ||
172194
(schema.additionalProperties?.type as string) === "number"
173195
) {
174-
const type = schema.additionalProperties?.type;
175196
const additionalProperties =
176197
schema.additionalProperties?.additionalProperties;
177198
if (additionalProperties !== undefined) {

0 commit comments

Comments
 (0)