Skip to content

Commit 64e5741

Browse files
committed
fix: optimize and support inherited discriminator
1 parent 193f4bf commit 64e5741

File tree

1 file changed

+15
-6
lines changed

1 file changed

+15
-6
lines changed

lib/utils/spec-manager.ts

+15-6
Original file line numberDiff line numberDiff line change
@@ -183,19 +183,28 @@ export class SpecManager {
183183
let globalDefs = this._schema.definitions || {};
184184
let res:DescendantInfo[] = [];
185185
let extendedDiscriminatorProp = definition['x-extendedDiscriminator'];
186+
187+
let pointers;
188+
if (definition['x-derived-from']) {
189+
// support inherited discriminator o_O
190+
let derivedDiscriminator = definition['x-derived-from'].filter(ptr => {
191+
if (!ptr) return false;
192+
let def = this.byPointer(ptr);
193+
return def && def.discriminator;
194+
});
195+
pointers = [defPointer, ...derivedDiscriminator];
196+
} else {
197+
pointers = [defPointer];
198+
}
199+
200+
186201
for (let defName of Object.keys(globalDefs)) {
187202
let def = globalDefs[defName];
188203
if (!def.allOf &&
189204
!def['x-derived-from']) continue;
190205
let subTypes = def['x-derived-from'] ||
191206
def.allOf.map(subType => subType._pointer || subType.$ref);
192207

193-
let pointers;
194-
if (definition['x-derived-from']) {
195-
pointers = [defPointer, ...definition['x-derived-from']];
196-
} else {
197-
pointers = [defPointer];
198-
}
199208
let idx = -1;
200209

201210
for (let ptr of pointers) {

0 commit comments

Comments
 (0)