UNPKG

@onesy/utils

Version:
24 lines (23 loc) 864 B
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const isArray = value => Array.isArray(value); const isObject = value => typeof value === 'object' && !!value && value.constructor === Object; // It keeps the references of the methods and classes, // unlike JSON.stringify usually used for deep simple copy const copy = (value, values_) => { const values = !values_ ? new WeakSet() : values_; // Ref circular value if (values.has(value)) return value; if (isObject(value) || isArray(value)) values.add(value); if (isArray(value)) return value.map(item => copy(item, values)); if (isObject(value)) { const newValue = {}; Object.keys(value).forEach(key => newValue[key] = copy(value[key], values)); return newValue; } return value; }; exports.default = copy;