REFACTOR: Remove _.merge

This commit is contained in:
Robin Ward
2020-09-02 11:52:54 -04:00
parent 720cd57fb5
commit c4079780be
16 changed files with 70 additions and 18 deletions

View File

@ -0,0 +1,37 @@
// a fairly simple deep merge based on: https://gist.github.com/ahtcx/0cd94e62691f539160b32ecda18af3d6
export function merge(...objects) {
const isObject = obj => obj && typeof obj === "object";
function deepMergeInner(target, source) {
Object.keys(source).forEach(key => {
const targetValue = target[key];
const sourceValue = source[key];
if (Array.isArray(targetValue) && Array.isArray(sourceValue)) {
target[key] = targetValue.concat(sourceValue);
} else if (isObject(targetValue) && isObject(sourceValue)) {
target[key] = deepMergeInner(
Object.assign({}, targetValue),
sourceValue
);
} else {
target[key] = sourceValue;
}
});
return target;
}
if (objects.some(object => object && !isObject(object))) {
throw new Error('deepMerge: all values should be of type "object"');
}
const target = objects.shift();
let source;
while ((source = objects.shift())) {
deepMergeInner(target, source || {});
}
return target;
}