mirror of
https://github.com/Redocly/redoc.git
synced 2024-11-22 00:26:34 +03:00
fix: show siblings schema with oneOf (#2576)
This commit is contained in:
parent
a7607eafdd
commit
60d131b0a9
|
@ -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,
|
||||
};
|
||||
}),
|
||||
|
|
|
@ -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,
|
||||
},
|
||||
],
|
||||
}
|
||||
`;
|
||||
|
|
|
@ -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 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user