@bitmovin/api-sdk
Version:
Bitmovin JS/TS API SDK
41 lines (40 loc) • 1.14 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.map = map;
exports.mapArray = mapArray;
const models = require("../models");
function map(value, clazz) {
return mapInternal(value, clazz);
}
function mapArray(value, clazz) {
if (!value) {
return [];
}
return value.map(item => mapInternal(item, clazz));
}
function mapInternal(value, clazz) {
if (!value) {
return value;
}
if (!clazz || typeof clazz !== 'function') {
return value;
}
const actualClazz = calculateType(value, clazz);
return new actualClazz(value);
}
function calculateType(value, clazz) {
const discriminatorName = clazz._discriminatorName;
const discriminatorMapping = clazz._discriminatorMapping;
if (!discriminatorName || !discriminatorMapping) {
return clazz;
}
const discriminatorValue = value[discriminatorName];
if (!discriminatorValue) {
return clazz;
}
if (discriminatorValue in discriminatorMapping) {
const type = discriminatorMapping[discriminatorValue];
return models[type];
}
return clazz;
}