lib/index.js
function merge(/* object, sources */) {
	var lastSource = arguments[arguments.length - 1];
	if (
		typeof lastSource === 'function' ||
		(
			arguments.length > 2 &&
			Array.isArray(lastSource) &&
			lastSource.indexOf(arguments[1]) >= 0
		)
	) {
		return mergeHeavy.apply(null, arguments);
	} else {
		return mergeLight.apply(null, arguments);
	}
}
function merge(/* object, sources */) {
	var lastSource = arguments[arguments.length - 1];
	if (
		typeof lastSource === 'function' ||
		(
			arguments.length > 2 &&
			Array.isArray(lastSource) &&
			lastSource.indexOf(arguments[1]) >= 0
		)
	) {
		return mergeHeavy.apply(null, arguments);
	} else {
		return mergeLight.apply(null, arguments);
	}
}
function merge ( /* object, sources */ ) { var lastSource = arguments [ arguments . length - 1 ] ; if ( typeof lastSource === 'function' || ( arguments . length > 2 && Array . isArray ( lastSource ) && lastSource . indexOf ( arguments [ 1 ] ) >= 0 ) ) { return mergeHeavy . apply ( null , arguments ) ; } else { return mergeLight . apply ( null , arguments ) ; } }
Merges n objects together.

@method merge
@static
@param {Object} object - the destination object
@param {Object} sources - the source object
@param {Function} customizer - the function to customize merging properties
If provided, customizer is invoked to produce the merged values of the destination and source
properties. If customizer returns undefined, merging is handled by the method instead.
@param {Mixed} customizer.objectValue - the value at `key` in the base object
@param {Mixed} customizer.sourceValue - the value at `key` in the source object
@param {Mixed} customizer.key - the key currently being merged
@param {Mixed} customizer.object - the base object
@param {Mixed} customizer.source - the source object
@return {Object} - the merged object
Merges n objects together .