UNPKG

shineout

Version:

Shein 前端组件库

66 lines (53 loc) 1.71 kB
"use strict"; exports.__esModule = true; exports.deepClone = exports.shallowClone = exports.fastClone = void 0; var _is = require("./is"); // eslint-disable-next-line var cloneArray = function cloneArray(source) { return Array.from(source, function (x) { return deepClone(x); }); }; var cloneObject = function cloneObject(source, specialKeys) { if (specialKeys === void 0) { specialKeys = []; } var target = Object.create(Object.getPrototypeOf(source)); /* File or Response (non-serializable data) will throw error */ try { // eslint-disable-next-line guard-for-in for (var key in target) { target[key] = target[key]; } } catch (e) { console.error('should not pass non-serializable data', source); console.error(e); target = {}; } ; [].concat(specialKeys, Object.keys(source)).forEach(function (k) { // eslint-disable-next-line target[k] = deepClone(source[k]); }); return target; }; var fastClone = function fastClone(obj) { return JSON.parse(JSON.stringify(obj)); }; exports.fastClone = fastClone; var shallowClone = function shallowClone(val) { if (!val) return val; if ((0, _is.isDate)(val)) return new Date(val); if ((0, _is.isMap)(val)) return new Map(val); if ((0, _is.isSet)(val)) return new Set(val); if ((0, _is.isRegexp)(val)) return new RegExp(val); if ((0, _is.isError)(val)) return cloneObject(val, ['message']); return val; }; exports.shallowClone = shallowClone; var deepClone = function deepClone(source) { if ((0, _is.isArray)(source)) return cloneArray(source); if ((0, _is.isMergeable)(source)) return cloneObject(source); return shallowClone(source); }; exports.deepClone = deepClone;