diff --git a/packages/client/src/runtime/core/compositeProxy/createCompositeProxy.test.ts b/packages/client/src/runtime/core/compositeProxy/createCompositeProxy.test.ts index ad02f95182d4..5c16fad7e7d7 100644 --- a/packages/client/src/runtime/core/compositeProxy/createCompositeProxy.test.ts +++ b/packages/client/src/runtime/core/compositeProxy/createCompositeProxy.test.ts @@ -247,6 +247,29 @@ test('allows to override a property from a layer', () => { expect(proxy.prop).toBe('override') }) +test('allows to override a property from a layer using defineProperty', () => { + const target = {} as Record + + const proxy = createCompositeProxy(target, [ + { + getKeys() { + return ['prop'] + }, + + getPropertyValue() { + return 'from proxy' + }, + }, + ]) + + Object.defineProperty(proxy, 'prop', { + value: 'override', + }) + + expect(target.prop).toBe('override') + expect(proxy.prop).toBe('override') +}) + test('does not allow to overriding property from a layer if it is non writable', () => { const target = {} as Record diff --git a/packages/client/src/runtime/core/compositeProxy/createCompositeProxy.ts b/packages/client/src/runtime/core/compositeProxy/createCompositeProxy.ts index 7611b7844220..2a19f70e8882 100644 --- a/packages/client/src/runtime/core/compositeProxy/createCompositeProxy.ts +++ b/packages/client/src/runtime/core/compositeProxy/createCompositeProxy.ts @@ -99,6 +99,11 @@ export function createCompositeProxy(target: T, layers: Compos } return defaultPropertyDescriptor }, + + defineProperty(target, property, attributes) { + overwrittenKeys.add(property) + return Reflect.defineProperty(target, property, attributes) + }, }) proxy[customInspect] = function (depth: number, options: InspectOptions, defaultInspect: typeof inspect = inspect) {