lib/options.js
function merge (target, source) {
  if (isMergeable(source)) {
    var keys = Object.keys(source);
    for (var i = 0; i < keys.length; i++) {
      var key = keys[i];
      var sourceSetting = source[key];
      var targetSetting = target[key];

      if (isMergeable(sourceSetting)) {
        // It's a nested object, so merge it recursively
        target[key] = merge(targetSetting || {}, sourceSetting);
      }
      else if (sourceSetting !== undefined) {
        // It's a scalar value, function, or array. No merging necessary. Just overwrite the target value.
        target[key] = sourceSetting;
      }
    }
  }
  return target;
}
function merge (target, source) {
  if (isMergeable(source)) {
    var keys = Object.keys(source);
    for (var i = 0; i < keys.length; i++) {
      var key = keys[i];
      var sourceSetting = source[key];
      var targetSetting = target[key];

      if (isMergeable(sourceSetting)) {
        // It's a nested object, so merge it recursively
        target[key] = merge(targetSetting || {}, sourceSetting);
      }
      else if (sourceSetting !== undefined) {
        // It's a scalar value, function, or array. No merging necessary. Just overwrite the target value.
        target[key] = sourceSetting;
      }
    }
  }
  return target;
}
function merge ( target , source ) { if ( isMergeable ( source ) ) { var keys = Object . keys ( source ) ; for ( var i = 0 ; i < keys . length ; i ++ ) { var key = keys [ i ] ; var sourceSetting = source [ key ] ; var targetSetting = target [ key ] ; if ( isMergeable ( sourceSetting ) ) { // It's a nested object, so merge it recursively target [ key ] = merge ( targetSetting || { } , sourceSetting ) ; } else if ( sourceSetting !== undefined ) { // It's a scalar value, function, or array. No merging necessary. Just overwrite the target value. target [ key ] = sourceSetting ; } } } return target ; }
Merges the properties of the source object into the target object.

@param {object} target - The object that we're populating
@param {?object} source - The options that are being merged
@returns {object}
Merges the properties of the source object into the target object .