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.
30 lines
939 B
JavaScript
30 lines
939 B
JavaScript
10 months ago
|
'use strict';
|
||
|
|
||
|
const getDiscriminatorByValue = require('./getDiscriminatorByValue');
|
||
|
|
||
|
/**
|
||
|
* Find the correct constructor, taking into account discriminators
|
||
|
* @api private
|
||
|
*/
|
||
|
|
||
|
module.exports = function getConstructor(Constructor, value, defaultDiscriminatorValue) {
|
||
|
const discriminatorKey = Constructor.schema.options.discriminatorKey;
|
||
|
let discriminatorValue = (value != null && value[discriminatorKey]);
|
||
|
if (discriminatorValue == null) {
|
||
|
discriminatorValue = defaultDiscriminatorValue;
|
||
|
}
|
||
|
if (Constructor.discriminators &&
|
||
|
discriminatorValue != null) {
|
||
|
if (Constructor.discriminators[discriminatorValue]) {
|
||
|
Constructor = Constructor.discriminators[discriminatorValue];
|
||
|
} else {
|
||
|
const constructorByValue = getDiscriminatorByValue(Constructor.discriminators, discriminatorValue);
|
||
|
if (constructorByValue) {
|
||
|
Constructor = constructorByValue;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return Constructor;
|
||
|
};
|