import { ConstructableError } from '../../types' import { getOwnPropertyNames } from '../shortened-functions' import { cloneObject } from './clone-object' import { isError } from './is-error' import { isObject } from './is-object' export function cloneError(error: T): T { let copy: T = error if (isError(error)) { copy = new error.constructor() getOwnPropertyNames(error).forEach(key => { copy[key] = cloneError(error[key]) }) } else if (isObject(error)) { copy = cloneObject(error) } return copy }