| 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;
 |