| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 | 
							- 'use strict';
 
- /**
 
-  * Module dependenices
 
-  */
 
- const clone = require('shallow-clone');
 
- const typeOf = require('kind-of');
 
- const isPlainObject = require('is-plain-object');
 
- function cloneDeep(val, instanceClone) {
 
-   switch (typeOf(val)) {
 
-     case 'object':
 
-       return cloneObjectDeep(val, instanceClone);
 
-     case 'array':
 
-       return cloneArrayDeep(val, instanceClone);
 
-     default: {
 
-       return clone(val);
 
-     }
 
-   }
 
- }
 
- function cloneObjectDeep(val, instanceClone) {
 
-   if (typeof instanceClone === 'function') {
 
-     return instanceClone(val);
 
-   }
 
-   if (instanceClone || isPlainObject(val)) {
 
-     const res = new val.constructor();
 
-     for (let key in val) {
 
-       res[key] = cloneDeep(val[key], instanceClone);
 
-     }
 
-     return res;
 
-   }
 
-   return val;
 
- }
 
- function cloneArrayDeep(val, instanceClone) {
 
-   const res = new val.constructor(val.length);
 
-   for (let i = 0; i < val.length; i++) {
 
-     res[i] = cloneDeep(val[i], instanceClone);
 
-   }
 
-   return res;
 
- }
 
- /**
 
-  * Expose `cloneDeep`
 
-  */
 
- module.exports = cloneDeep;
 
 
  |