| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 | 
							- 'use strict';
 
- var isExtendable = require('is-extendable');
 
- var forIn = require('for-in');
 
- function mixinDeep(target, objects) {
 
-   var len = arguments.length, i = 0;
 
-   while (++i < len) {
 
-     var obj = arguments[i];
 
-     if (isObject(obj)) {
 
-       forIn(obj, copy, target);
 
-     }
 
-   }
 
-   return target;
 
- }
 
- /**
 
-  * Copy properties from the source object to the
 
-  * target object.
 
-  *
 
-  * @param  {*} `val`
 
-  * @param  {String} `key`
 
-  */
 
- function copy(val, key) {
 
-   if (!isValidKey(key)) {
 
-     return;
 
-   }
 
-   var obj = this[key];
 
-   if (isObject(val) && isObject(obj)) {
 
-     mixinDeep(obj, val);
 
-   } else {
 
-     this[key] = val;
 
-   }
 
- }
 
- /**
 
-  * Returns true if `val` is an object or function.
 
-  *
 
-  * @param  {any} val
 
-  * @return {Boolean}
 
-  */
 
- function isObject(val) {
 
-   return isExtendable(val) && !Array.isArray(val);
 
- }
 
- /**
 
-  * Returns true if `key` is a valid key to use when extending objects.
 
-  *
 
-  * @param  {String} `key`
 
-  * @return {Boolean}
 
-  */
 
- function isValidKey(key) {
 
-   return key !== '__proto__' && key !== 'constructor' && key !== 'prototype';
 
- };
 
- /**
 
-  * Expose `mixinDeep`
 
-  */
 
- module.exports = mixinDeep;
 
 
  |