Skip to content

Commit d81b631

Browse files
committed
fix: add extra deref step for anyOf/oneOf variants
fixes #810
1 parent 869a91a commit d81b631

File tree

1 file changed

+11
-1
lines changed

1 file changed

+11
-1
lines changed

src/services/models/Schema.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,20 +161,30 @@ export class SchemaModel {
161161

162162
private initOneOf(oneOf: OpenAPISchema[], parser: OpenAPIParser) {
163163
this.oneOf = oneOf!.map((variant, idx) => {
164-
const merged = parser.mergeAllOf(variant, this.pointer + '/oneOf/' + idx);
164+
const derefVariant = parser.deref(variant);
165+
166+
const merged = parser.mergeAllOf(derefVariant, this.pointer + '/oneOf/' + idx);
167+
168+
// try to infer title
169+
const title =
170+
isNamedDefinition(variant.$ref) && !merged.title
171+
? JsonPointer.baseName(variant.$ref)
172+
: merged.title;
165173

166174
const schema = new SchemaModel(
167175
parser,
168176
// merge base schema into each of oneOf's subschemas
169177
{
170178
// variant may already have allOf so merge it to not get overwritten
171179
...merged,
180+
title,
172181
allOf: [{ ...this.schema, oneOf: undefined, anyOf: undefined }],
173182
} as OpenAPISchema,
174183
this.pointer + '/oneOf/' + idx,
175184
this.options,
176185
);
177186

187+
parser.exitRef(variant);
178188
// each oneOf should be independent so exiting all the parent refs
179189
// otherwise it will cause false-positive recursive detection
180190
parser.exitParents(merged);

0 commit comments

Comments
 (0)