import { isObject } from "@thorium/typeguards/isObject"; /** * Deep merge two objects. * @param target * @param ...sources */ export function mergeDeep(target: T, ...sources: Partial[]): T { if (!sources.length) return target; const source = sources.shift(); if (isObject(target) && isObject(source)) { for (const key in source) { if (isObject(source[key])) { if (!target[key]) Object.assign(target, { [key]: {} }); mergeDeep(target[key], source[key] as any); } else { Object.assign(target, { [key]: source[key] }); } } } return mergeDeep(target, ...sources); }