Spaces:
Runtime error
Runtime error
| ; | |
| /** | |
| * 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; | |