function deepAssign() {
  for (var _len = arguments.length, args = Array(_len), _key2 = 0; _key2 < _len; _key2++) {
    args[_key2] = arguments[_key2];
  }

  if (args.length < 2) {
    throw new Error('deepAssign accept two and more argument');
  }
  for (var i = args.length - 1; i > -1; i--) {
    if (isPrimitive(args[i])) {
      throw new TypeError('deepAssign only accept non primitive type');
    }
  }
  var target = args.shift();
  args.forEach(function (source) {
    return _deepAssign(source, target);
  });
  return target;
}
function deepAssign() {
  for (var _len = arguments.length, args = Array(_len), _key2 = 0; _key2 < _len; _key2++) {
    args[_key2] = arguments[_key2];
  }

  if (args.length < 2) {
    throw new Error('deepAssign accept two and more argument');
  }
  for (var i = args.length - 1; i > -1; i--) {
    if (isPrimitive(args[i])) {
      throw new TypeError('deepAssign only accept non primitive type');
    }
  }
  var target = args.shift();
  args.forEach(function (source) {
    return _deepAssign(source, target);
  });
  return target;
}
function deepAssign ( ) { for ( var _len = arguments . length , args = Array ( _len ) , _key2 = 0 ; _key2 < _len ; _key2 ++ ) { args [ _key2 ] = arguments [ _key2 ] ; } if ( args . length < 2 ) { throw new Error ( 'deepAssign accept two and more argument' ) ; } for ( var i = args . length - 1 ; i > - 1 ; i -- ) { if ( isPrimitive ( args [ i ] ) ) { throw new TypeError ( 'deepAssign only accept non primitive type' ) ; } } var target = args . shift ( ) ; args . forEach ( function ( source ) { return _deepAssign ( source , target ) ; } ) ; return target ; }
merge multiple objects
@param  {...Object} args [description]
@return {merge-object}         [description]
merge multiple objects