import { AnyObject } from '../types' import isObject from './isObject' export default function mergeDeep(target: AnyObject, source: AnyObject) { const output = { ...target } if (isObject(target) && isObject(source)) { Object.keys(source).forEach(key => { if (isObject(source[key])) { if (!(key in target)) { Object.assign(output, { [key]: source[key] }) } else { output[key] = mergeDeep(target[key], source[key]) } } else { Object.assign(output, { [key]: source[key] }) } }) } return output }