123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- '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 (key === '__proto__') {
- 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);
- }
- /**
- * Expose `mixinDeep`
- */
- module.exports = mixinDeep;
|