From 5d898661046f58413630ffe4d5d4452c36de4c75 Mon Sep 17 00:00:00 2001 From: Tim Griesser Date: Tue, 21 Mar 2023 12:43:25 -0400 Subject: [PATCH] fix: maintain the object's property descriptor --- packages/utils/src/helpers.ts | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/packages/utils/src/helpers.ts b/packages/utils/src/helpers.ts index 82bc6a6c8406..eaa68d03b3af 100644 --- a/packages/utils/src/helpers.ts +++ b/packages/utils/src/helpers.ts @@ -87,10 +87,24 @@ export function clone(val: T, seen: WeakMap): T { // we don't need properties from prototype const props = getOwnProperties(val) for (const k of props) { - Object.defineProperty(out, k, { - enumerable: true, - value: clone((val as any)[k], seen), - }) + const descriptor = Object.getOwnPropertyDescriptor(val, k) + if (!descriptor) + continue + const cloned = clone((val as any)[k], seen) + if ('get' in descriptor) { + Object.defineProperty(out, k, { + ...descriptor, + get() { + return cloned + }, + }) + } + else { + Object.defineProperty(out, k, { + ...descriptor, + value: cloned, + }) + } } return out }