in packages/shared/src/clone.ts [52:95]
let nativeClone: (values: any) => any
if (Array.isArray(values)) {
return values.map((item) => clone(item, filter))
} else if (isNativeObject(values)) {
nativeClone = isNativeObject(values)
return isFn(nativeClone) ? nativeClone(values) : values
} else if (typeof values === 'object' && !!values) {
if ('$$typeof' in values && '_owner' in values) {
return values
}
if (values._isAMomentObject) {
return values
}
if (values._isJSONSchemaObject) {
return values
}
if (isFn(values.toJS)) {
return values
}
if (isFn(values.toJSON)) {
return values
}
if (Object.getOwnPropertySymbols(values || {}).length) {
return values
}
const res = {}
for (const key in values) {
if (Object.hasOwnProperty.call(values, key)) {
if (isFn(filter)) {
if (filter(values[key], key)) {
res[key] = clone(values[key], filter)
} else {
res[key] = values[key]
}
} else {
res[key] = clone(values[key], filter)
}
}
}
return res
} else {
return values
}