import { isRef, reactive } from 'vue'; import type { Ref } from 'vue'; type MaybeRef = T | Ref; /** * Converts ref to reactive. * * @see https://vueuse.org/toReactive * @param objectRef A ref of object */ export function toReactive(objectRef: MaybeRef): T { if (!isRef(objectRef)) return reactive(objectRef) as T; const proxy = new Proxy( {}, { get(_, p, receiver) { return Reflect.get(objectRef.value, p, receiver); }, set(_, p, value) { (objectRef.value as any)[p] = value; return true; }, deleteProperty(_, p) { return Reflect.deleteProperty(objectRef.value, p); }, has(_, p) { return Reflect.has(objectRef.value, p); }, ownKeys() { return Object.keys(objectRef.value); }, getOwnPropertyDescriptor() { return { enumerable: true, configurable: true, }; }, }, ); return reactive(proxy) as T; }