diff --git a/packages/workflow/src/AugmentObject.ts b/packages/workflow/src/AugmentObject.ts index 515f7a554c..d991e7fab7 100644 --- a/packages/workflow/src/AugmentObject.ts +++ b/packages/workflow/src/AugmentObject.ts @@ -1,5 +1,7 @@ import type { IDataObject } from './Interfaces'; +const defaultPropertyDescriptor = Object.freeze({ enumerable: true, configurable: true }); + const augmentedObjects = new WeakSet(); function augment(value: T): T { @@ -47,7 +49,8 @@ export function augmentArray(data: T[]): T[] { if (key === 'length') { return Reflect.getOwnPropertyDescriptor(newData, key); } - return { configurable: true, enumerable: true }; + + return Object.getOwnPropertyDescriptor(data, key) ?? defaultPropertyDescriptor; }, has(target, key) { return Reflect.has(newData !== undefined ? newData : target, key); @@ -124,18 +127,17 @@ export function augmentObject(data: T): T { return true; }, + ownKeys(target) { - return [...new Set([...Reflect.ownKeys(target), ...Object.keys(newData)])].filter( + const originalKeys = Reflect.ownKeys(target); + const newKeys = Object.keys(newData); + return [...new Set([...originalKeys, ...newKeys])].filter( (key) => deletedProperties.indexOf(key) === -1, ); }, - // eslint-disable-next-line @typescript-eslint/no-unused-vars - getOwnPropertyDescriptor(k) { - return { - enumerable: true, - configurable: true, - }; + getOwnPropertyDescriptor(target, key) { + return Object.getOwnPropertyDescriptor(data, key) ?? defaultPropertyDescriptor; }, }); diff --git a/packages/workflow/test/AugmentObject.test.ts b/packages/workflow/test/AugmentObject.test.ts index f30989aec3..e9fe6ee948 100644 --- a/packages/workflow/test/AugmentObject.test.ts +++ b/packages/workflow/test/AugmentObject.test.ts @@ -520,5 +520,13 @@ describe('AugmentObject', () => { expect(timeAugmented).toBeLessThan(timeCopied); }); + + test('should ignore non-enumerable keys', () => { + const originalObject = { a: 1, b: 2 }; + Object.defineProperty(originalObject, '__hiddenProp', { enumerable: false }); + + const augmentedObject = augmentObject(originalObject); + expect(Object.keys(augmentedObject)).toEqual(['a', 'b']); + }); }); });