mirror of
https://github.com/n8n-io/n8n.git
synced 2025-01-30 22:02:03 -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);
|
return Reflect.deleteProperty(getData(), key);
|
||||||
},
|
},
|
||||||
get(target, key: string, receiver): unknown {
|
get(target, key: string, receiver): unknown {
|
||||||
|
if (key === 'constructor') return Array;
|
||||||
const value = Reflect.get(newData ?? target, key, receiver) as unknown;
|
const value = Reflect.get(newData ?? target, key, receiver) as unknown;
|
||||||
const newValue = augment(value);
|
const newValue = augment(value);
|
||||||
if (newValue !== value) {
|
if (newValue !== value) {
|
||||||
|
@ -83,6 +84,8 @@ export function augmentObject<T extends object>(data: T): T {
|
||||||
|
|
||||||
const proxy = new Proxy(data, {
|
const proxy = new Proxy(data, {
|
||||||
get(target, key: string, receiver): unknown {
|
get(target, key: string, receiver): unknown {
|
||||||
|
if (key === 'constructor') return Object;
|
||||||
|
|
||||||
if (deletedProperties.has(key)) {
|
if (deletedProperties.has(key)) {
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,8 @@ describe('AugmentObject', () => {
|
||||||
|
|
||||||
const augmentedObject = augmentArray(originalObject);
|
const augmentedObject = augmentArray(originalObject);
|
||||||
|
|
||||||
|
expect(augmentedObject.constructor.name).toEqual('Array');
|
||||||
|
|
||||||
expect(augmentedObject.push(5)).toEqual(6);
|
expect(augmentedObject.push(5)).toEqual(6);
|
||||||
expect(augmentedObject).toEqual([1, 2, 3, 4, null, 5]);
|
expect(augmentedObject).toEqual([1, 2, 3, 4, null, 5]);
|
||||||
expect(originalObject).toEqual(copyOriginal);
|
expect(originalObject).toEqual(copyOriginal);
|
||||||
|
@ -207,6 +209,8 @@ describe('AugmentObject', () => {
|
||||||
|
|
||||||
const augmentedObject = augmentObject(originalObject);
|
const augmentedObject = augmentObject(originalObject);
|
||||||
|
|
||||||
|
expect(augmentedObject.constructor.name).toEqual('Object');
|
||||||
|
|
||||||
augmentedObject[1] = 911;
|
augmentedObject[1] = 911;
|
||||||
expect(originalObject[1]).toEqual(11);
|
expect(originalObject[1]).toEqual(11);
|
||||||
expect(augmentedObject[1]).toEqual(911);
|
expect(augmentedObject[1]).toEqual(911);
|
||||||
|
@ -589,5 +593,29 @@ describe('AugmentObject', () => {
|
||||||
delete augmentedObject.toString;
|
delete augmentedObject.toString;
|
||||||
expect(augmentedObject.toString).toBeUndefined();
|
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