'use strict';

Object.defineProperty(exports, "__esModule", {
    value: true
});
exports.deepAssign = deepAssign;

var _commonUtil = require('../utils/commonUtil');

var hasOwnProperty = Object.prototype.hasOwnProperty;


function assignKey(to, from, key) {
    var val = from[key];

    if (!(0, _commonUtil.isDef)(val)) {
        return;
    }

    if (!hasOwnProperty.call(to, key) || !(0, _commonUtil.isObj)(val) || typeof val === 'function') {
        to[key] = val;
    } else {
        // eslint-disable-next-line no-use-before-define
        to[key] = deepAssign(Object(to[key]), from[key]);
    }
}

function deepAssign(to, from) {
    Object.keys(from).forEach(function (key) {
        assignKey(to, from, key);
    });

    return to;
}