Original: fa1664e6cc
This commit is contained in:
Vincent LE GOFF 2019-03-28 17:31:15 +01:00 committed by Ryan Dahl
parent 8f0407efad
commit 13aeee460a
21 changed files with 1072 additions and 0 deletions

28
util/deep_assign.ts Normal file
View file

@ -0,0 +1,28 @@
// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license.
export function deepAssign(target: object, ...sources: object[]): object {
for (let i = 0; i < sources.length; i++) {
const source = sources[i];
if (!source || typeof source !== `object`) {
return;
}
Object.entries(source).forEach(([key, value]) => {
if (value instanceof Date) {
target[key] = new Date(value);
return;
}
if (!value || typeof value !== `object`) {
target[key] = value;
return;
}
if (Array.isArray(value)) {
target[key] = [];
}
// value is an Object
if (typeof target[key] !== `object` || !target[key]) {
target[key] = {};
}
deepAssign(target[key], value);
});
}
return target;
}