merge = (target, source) => {
    target = cloneJSON(target);

    Object.keys(source).forEach((key) => {
      if (isObject(target[key]) && isObject(source[key])) {
        target[key] = merge(target[key], source[key]);
      } else {
        target[key] = source[key];
      }
    });
    return target;
  }
returns a result of deep merge of two objects

@param {Object} target
@param {Object} source
@return {Object}