diff --git a/packages/core/useManualRefHistory/index.ts b/packages/core/useManualRefHistory/index.ts index 35b2b652e35..6aa7a2a31ee 100644 --- a/packages/core/useManualRefHistory/index.ts +++ b/packages/core/useManualRefHistory/index.ts @@ -1,20 +1,19 @@ import { isFunction, timestamp } from '@vueuse/shared' import type { Ref } from 'vue-demi' import { computed, markRaw, ref } from 'vue-demi' +import type { CloneFn } from '../useCloned' +import { cloneFnJSON } from '../useCloned' export interface UseRefHistoryRecord { snapshot: T timestamp: number } -export type CloneFn = (x: F) => T - export interface UseManualRefHistoryOptions { /** * Maximum number of history to be kept. Default to unlimited. */ capacity?: number - /** * Clone when taking a snapshot, shortcut for dump: JSON.parse(JSON.stringify(value)). * Default to false @@ -99,18 +98,17 @@ export interface UseManualRefHistoryReturn { reset: () => void } -const fnClone = (v: F): T => JSON.parse(JSON.stringify(v)) const fnBypass = (v: F) => v as unknown as T const fnSetSource = (source: Ref, value: F) => source.value = value type FnCloneOrBypass = (v: F) => T function defaultDump(clone?: boolean | CloneFn) { - return (clone ? isFunction(clone) ? clone : fnClone : fnBypass) as unknown as FnCloneOrBypass + return (clone ? isFunction(clone) ? clone : cloneFnJSON : fnBypass) as unknown as FnCloneOrBypass } function defaultParse(clone?: boolean | CloneFn) { - return (clone ? isFunction(clone) ? clone : fnClone : fnBypass) as unknown as FnCloneOrBypass + return (clone ? isFunction(clone) ? clone : cloneFnJSON : fnBypass) as unknown as FnCloneOrBypass } /**