You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
'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;
|