fix: show siblings schema with oneOf (#2576)

This commit is contained in:
Alex Varchuk 2024-08-29 20:22:07 +02:00 committed by GitHub
parent a7607eafdd
commit 60d131b0a9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 89 additions and 5 deletions

View File

@ -364,14 +364,18 @@ export class OpenAPIParser {
const allOf = schema.allOf;
for (let i = 0; i < allOf.length; i++) {
const sub = allOf[i];
if (Array.isArray(sub.oneOf)) {
const { oneOf, ...sub } = allOf[i];
if (!oneOf) {
continue;
}
if (Array.isArray(oneOf)) {
const beforeAllOf = allOf.slice(0, i);
const afterAllOf = allOf.slice(i + 1);
const siblingValues = Object.keys(sub).length > 0 ? [sub] : [];
return {
oneOf: sub.oneOf.map((part: OpenAPISchema) => {
oneOf: oneOf.map((part: OpenAPISchema) => {
return {
allOf: [...beforeAllOf, part, ...afterAllOf],
allOf: [...beforeAllOf, ...siblingValues, part, ...afterAllOf],
'x-refsStack': refsStack,
};
}),

View File

@ -21,6 +21,14 @@ exports[`Models Schema should hoist oneOfs when mergin allOf 1`] = `
"oneOf": [
{
"allOf": [
{
"properties": {
"id": {
"description": "The user's ID",
"type": "integer",
},
},
},
{
"properties": {
"username": {
@ -61,6 +69,14 @@ exports[`Models Schema should hoist oneOfs when mergin allOf 1`] = `
},
{
"allOf": [
{
"properties": {
"id": {
"description": "The user's ID",
"type": "integer",
},
},
},
{
"properties": {
"email": {
@ -99,6 +115,55 @@ exports[`Models Schema should hoist oneOfs when mergin allOf 1`] = `
],
"x-refsStack": undefined,
},
{
"allOf": [
{
"properties": {
"id": {
"description": "The user's ID",
"type": "integer",
},
},
},
{
"properties": {
"id": {
"description": "The user's ID",
"format": "uuid",
"type": "string",
},
},
},
{
"properties": {
"extra": {
"type": "string",
},
},
},
{
"oneOf": [
{
"properties": {
"password": {
"description": "The user's password",
"type": "string",
},
},
},
{
"properties": {
"mobile": {
"description": "The user's mobile",
"type": "string",
},
},
},
],
},
],
"x-refsStack": undefined,
},
],
}
`;

View File

@ -9,6 +9,12 @@
"test": {
"allOf": [
{
"properties": {
"id": {
"description": "The user's ID",
"type": "integer"
}
},
"oneOf": [
{
"properties": {
@ -25,6 +31,15 @@
"type": "string"
}
}
},
{
"properties": {
"id": {
"description": "The user's ID",
"type": "string",
"format": "uuid"
}
}
}
]
},
@ -59,4 +74,4 @@
}
}
}
}
}