import { isProxy, toRaw } from 'vue'; function normalizeCloneable(value: T): T { if (value === null || value === undefined) { return value; } if (typeof value !== 'object') { return value; } const rawValue = isProxy(value) ? toRaw(value) : value; if (Array.isArray(rawValue)) { return rawValue.map(item => normalizeCloneable(item)) as T; } const plainObject = Object.fromEntries( Object.entries(rawValue).map(([key, nestedValue]) => [key, normalizeCloneable(nestedValue)]) ); return plainObject as T; } export function clonePlain(value: T): T { return structuredClone(normalizeCloneable(value)); }