Skip to content

Commit

Permalink
fix: add extra deref step for anyOf/oneOf variants
Browse files Browse the repository at this point in the history
fixes #810
  • Loading branch information
RomanHotsiy committed Mar 15, 2019
1 parent 869a91a commit d81b631
Showing 1 changed file with 11 additions and 1 deletion.
12 changes: 11 additions & 1 deletion src/services/models/Schema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -161,20 +161,30 @@ export class SchemaModel {

private initOneOf(oneOf: OpenAPISchema[], parser: OpenAPIParser) {
this.oneOf = oneOf!.map((variant, idx) => {
const merged = parser.mergeAllOf(variant, this.pointer + '/oneOf/' + idx);
const derefVariant = parser.deref(variant);

const merged = parser.mergeAllOf(derefVariant, this.pointer + '/oneOf/' + idx);

// try to infer title
const title =
isNamedDefinition(variant.$ref) && !merged.title
? JsonPointer.baseName(variant.$ref)
: merged.title;

const schema = new SchemaModel(
parser,
// merge base schema into each of oneOf's subschemas
{
// variant may already have allOf so merge it to not get overwritten
...merged,
title,
allOf: [{ ...this.schema, oneOf: undefined, anyOf: undefined }],
} as OpenAPISchema,
this.pointer + '/oneOf/' + idx,
this.options,
);

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

0 comments on commit d81b631

Please sign in to comment.