You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
24 lines
641 B
JavaScript
24 lines
641 B
JavaScript
11 months ago
|
'use strict';
|
||
|
|
||
|
module.exports = applyEmbeddedDiscriminators;
|
||
|
|
||
|
function applyEmbeddedDiscriminators(schema, seen = new WeakSet()) {
|
||
|
if (seen.has(schema)) {
|
||
|
return;
|
||
|
}
|
||
|
seen.add(schema);
|
||
|
for (const path of Object.keys(schema.paths)) {
|
||
|
const schemaType = schema.paths[path];
|
||
|
if (!schemaType.schema) {
|
||
|
continue;
|
||
|
}
|
||
|
applyEmbeddedDiscriminators(schemaType.schema, seen);
|
||
|
if (!schemaType.schema._applyDiscriminators) {
|
||
|
continue;
|
||
|
}
|
||
|
for (const disc of schemaType.schema._applyDiscriminators.keys()) {
|
||
|
schemaType.discriminator(disc, schemaType.schema._applyDiscriminators.get(disc));
|
||
|
}
|
||
|
}
|
||
|
}
|