21 lines
890 B
JavaScript
21 lines
890 B
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.deserializeWith = deserializeWith;
|
|
const options_1 = require("../options");
|
|
const generic_1 = require("./generic");
|
|
function deserializeWith(deserializer, into, options) {
|
|
const visitor = new generic_1.GenericVisitor();
|
|
const target = new into();
|
|
const obj = deserializer.deserializeObject(visitor);
|
|
const newObject = {};
|
|
for (const property in target) {
|
|
const name = options.getPropertyName(property, options_1.Stage.Deserialize);
|
|
const value = obj[name] || options.getDefault(property);
|
|
newObject[property] = value;
|
|
delete obj[name];
|
|
}
|
|
if (options.options.denyUnknownFields && Object.keys(obj).length > 0) {
|
|
throw new TypeError(`Unexpected fields: ${Object.keys(obj).join(', ')}`);
|
|
}
|
|
return Object.assign(target, newObject);
|
|
}
|