fix: remove implicit discriminator mapping when explicit is present

This commit is contained in:
Roman Hotsiy 2019-12-12 18:05:37 +02:00
parent 11cc4c4c3e
commit cbb9f50fa0
No known key found for this signature in database
GPG Key ID: 5CB7B3ACABA57CB0

View File

@ -216,7 +216,10 @@ export class SchemaModel {
) { ) {
const discriminator = getDiscriminator(schema)!; const discriminator = getDiscriminator(schema)!;
this.discriminatorProp = discriminator.propertyName; this.discriminatorProp = discriminator.propertyName;
const inversedMapping = parser.findDerived([...(schema.parentRefs || []), this.pointer]); const implicitInversedMapping = parser.findDerived([
...(schema.parentRefs || []),
this.pointer,
]);
if (schema.oneOf) { if (schema.oneOf) {
for (const variant of schema.oneOf) { for (const variant of schema.oneOf) {
@ -224,21 +227,24 @@ export class SchemaModel {
continue; continue;
} }
const name = JsonPointer.baseName(variant.$ref); const name = JsonPointer.baseName(variant.$ref);
inversedMapping[variant.$ref] = [name]; implicitInversedMapping[variant.$ref] = [name];
} }
} }
const mapping = discriminator.mapping || {}; const mapping = discriminator.mapping || {};
const explicitInversedMapping = {};
for (const name in mapping) { for (const name in mapping) {
const $ref = mapping[name]; const $ref = mapping[name];
if (Array.isArray(inversedMapping[$ref])) { if (Array.isArray(explicitInversedMapping[$ref])) {
inversedMapping[$ref].push(name); explicitInversedMapping[$ref].push(name);
} else { } else {
inversedMapping[$ref] = [name]; explicitInversedMapping[$ref] = [name];
} }
} }
const inversedMapping = { ...implicitInversedMapping, ...explicitInversedMapping };
const refs: Array<{ $ref; name }> = []; const refs: Array<{ $ref; name }> = [];
for (const $ref of Object.keys(inversedMapping)) { for (const $ref of Object.keys(inversedMapping)) {