diff --git a/packages/workflow/src/AugmentObject.ts b/packages/workflow/src/AugmentObject.ts index b05e761a0..27602b3a2 100644 --- a/packages/workflow/src/AugmentObject.ts +++ b/packages/workflow/src/AugmentObject.ts @@ -143,7 +143,8 @@ export function augmentObject(data: T): T { }, getOwnPropertyDescriptor(target, key) { - return Object.getOwnPropertyDescriptor(data, key) ?? defaultPropertyDescriptor; + if (deletedProperties.indexOf(key) !== -1) return undefined; + return Object.getOwnPropertyDescriptor(key in newData ? newData : data, key); }, }); diff --git a/packages/workflow/test/AugmentObject.test.ts b/packages/workflow/test/AugmentObject.test.ts index 857114a10..dc6f0efd5 100644 --- a/packages/workflow/test/AugmentObject.test.ts +++ b/packages/workflow/test/AugmentObject.test.ts @@ -528,5 +528,34 @@ describe('AugmentObject', () => { const augmentedObject = augmentObject(originalObject); expect(Object.keys(augmentedObject)).toEqual(['a', 'b']); }); + + test('should return property descriptors', () => { + const originalObject = { + x: { + y: {}, + z: {}, + }, + }; + const augmentedObject = augmentObject(originalObject); + + expect(Object.getOwnPropertyDescriptor(augmentedObject.x, 'y')).toEqual({ + configurable: true, + enumerable: true, + value: {}, + writable: true, + }); + + delete augmentedObject.x.y; + expect(augmentedObject.x.hasOwnProperty('y')).toEqual(false); + + augmentedObject.x.y = 42; + expect(augmentedObject.x.hasOwnProperty('y')).toEqual(true); + expect(Object.getOwnPropertyDescriptor(augmentedObject.x, 'y')).toEqual({ + configurable: true, + enumerable: true, + value: 42, + writable: true, + }); + }); }); });