From 64e5741f6797ffe232b5377262d58f6d92b95f34 Mon Sep 17 00:00:00 2001 From: Roman Hotsiy Date: Thu, 9 Mar 2017 19:59:49 +0200 Subject: [PATCH] fix: optimize and support inherited discriminator --- lib/utils/spec-manager.ts | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/lib/utils/spec-manager.ts b/lib/utils/spec-manager.ts index b0535c5c99..64e95deb2f 100644 --- a/lib/utils/spec-manager.ts +++ b/lib/utils/spec-manager.ts @@ -183,6 +183,21 @@ export class SpecManager { let globalDefs = this._schema.definitions || {}; let res:DescendantInfo[] = []; let extendedDiscriminatorProp = definition['x-extendedDiscriminator']; + + let pointers; + if (definition['x-derived-from']) { + // support inherited discriminator o_O + let derivedDiscriminator = definition['x-derived-from'].filter(ptr => { + if (!ptr) return false; + let def = this.byPointer(ptr); + return def && def.discriminator; + }); + pointers = [defPointer, ...derivedDiscriminator]; + } else { + pointers = [defPointer]; + } + + for (let defName of Object.keys(globalDefs)) { let def = globalDefs[defName]; if (!def.allOf && @@ -190,12 +205,6 @@ export class SpecManager { let subTypes = def['x-derived-from'] || def.allOf.map(subType => subType._pointer || subType.$ref); - let pointers; - if (definition['x-derived-from']) { - pointers = [defPointer, ...definition['x-derived-from']]; - } else { - pointers = [defPointer]; - } let idx = -1; for (let ptr of pointers) {