| var _cloneRegExp = |
| /*#__PURE__*/ |
| require("./_cloneRegExp"); |
| |
| var type = |
| /*#__PURE__*/ |
| require("../type"); |
| /** |
| * Copies an object. |
| * |
| * @private |
| * @param {*} value The value to be copied |
| * @param {Array} refFrom Array containing the source references |
| * @param {Array} refTo Array containing the copied source references |
| * @param {Boolean} deep Whether or not to perform deep cloning. |
| * @return {*} The copied value. |
| */ |
| |
| |
| function _clone(value, refFrom, refTo, deep) { |
| var copy = function copy(copiedValue) { |
| var len = refFrom.length; |
| var idx = 0; |
| |
| while (idx < len) { |
| if (value === refFrom[idx]) { |
| return refTo[idx]; |
| } |
| |
| idx += 1; |
| } |
| |
| refFrom[idx + 1] = value; |
| refTo[idx + 1] = copiedValue; |
| |
| for (var key in value) { |
| copiedValue[key] = deep ? _clone(value[key], refFrom, refTo, true) : value[key]; |
| } |
| |
| return copiedValue; |
| }; |
| |
| switch (type(value)) { |
| case 'Object': |
| return copy({}); |
| |
| case 'Array': |
| return copy([]); |
| |
| case 'Date': |
| return new Date(value.valueOf()); |
| |
| case 'RegExp': |
| return _cloneRegExp(value); |
| |
| default: |
| return value; |
| } |
| } |
| |
| module.exports = _clone; |