mirror of
https://github.com/n8n-io/n8n.git
synced 2025-01-30 13:51:21 -08:00
fix(core): AugmentObject should handle the constructor property correctly (#12744)
This commit is contained in:
parent
af5b64a61d
commit
36bc164da4
|
@ -36,6 +36,7 @@ export function augmentArray<T>(data: T[]): T[] {
|
|||
return Reflect.deleteProperty(getData(), key);
|
||||
},
|
||||
get(target, key: string, receiver): unknown {
|
||||
if (key === 'constructor') return Array;
|
||||
const value = Reflect.get(newData ?? target, key, receiver) as unknown;
|
||||
const newValue = augment(value);
|
||||
if (newValue !== value) {
|
||||
|
@ -83,6 +84,8 @@ export function augmentObject<T extends object>(data: T): T {
|
|||
|
||||
const proxy = new Proxy(data, {
|
||||
get(target, key: string, receiver): unknown {
|
||||
if (key === 'constructor') return Object;
|
||||
|
||||
if (deletedProperties.has(key)) {
|
||||
return undefined;
|
||||
}
|
||||
|
|
|
@ -10,6 +10,8 @@ describe('AugmentObject', () => {
|
|||
|
||||
const augmentedObject = augmentArray(originalObject);
|
||||
|
||||
expect(augmentedObject.constructor.name).toEqual('Array');
|
||||
|
||||
expect(augmentedObject.push(5)).toEqual(6);
|
||||
expect(augmentedObject).toEqual([1, 2, 3, 4, null, 5]);
|
||||
expect(originalObject).toEqual(copyOriginal);
|
||||
|
@ -207,6 +209,8 @@ describe('AugmentObject', () => {
|
|||
|
||||
const augmentedObject = augmentObject(originalObject);
|
||||
|
||||
expect(augmentedObject.constructor.name).toEqual('Object');
|
||||
|
||||
augmentedObject[1] = 911;
|
||||
expect(originalObject[1]).toEqual(11);
|
||||
expect(augmentedObject[1]).toEqual(911);
|
||||
|
@ -589,5 +593,29 @@ describe('AugmentObject', () => {
|
|||
delete augmentedObject.toString;
|
||||
expect(augmentedObject.toString).toBeUndefined();
|
||||
});
|
||||
|
||||
test('should handle constructor property correctly', () => {
|
||||
const originalObject: any = {
|
||||
a: {
|
||||
b: {
|
||||
c: {
|
||||
d: '4',
|
||||
},
|
||||
},
|
||||
},
|
||||
};
|
||||
const augmentedObject = augmentObject(originalObject);
|
||||
|
||||
expect(augmentedObject.constructor.name).toEqual('Object');
|
||||
expect(augmentedObject.a.constructor.name).toEqual('Object');
|
||||
expect(augmentedObject.a.b.constructor.name).toEqual('Object');
|
||||
expect(augmentedObject.a.b.c.constructor.name).toEqual('Object');
|
||||
|
||||
augmentedObject.constructor = {};
|
||||
expect(augmentedObject.constructor.name).toEqual('Object');
|
||||
|
||||
delete augmentedObject.constructor;
|
||||
expect(augmentedObject.constructor.name).toEqual('Object');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
Loading…
Reference in a new issue