export function deepCopy(value, seen = new Set()) {
    if (typeof value !== 'object' ||
        value === null ||
        (value.constructor !== Object && value.constructor !== Array)) {
        return value;
    }
    if (seen.has(value)) {
        throw new TypeError('Recursively copying circular structure');
    }
    seen.add(value);
    let copy;
    if (value.constructor === Array) {
        copy = value.map((value) => deepCopy(value, seen));
    }
    else {
        const object = {};
        for (const key in value) {
            object[key] = deepCopy(value[key], seen);
        }
        copy = object;
    }
    seen.delete(value);
    return copy;
}
export default deepCopy;
