refactor(core): Use a Set for deletedProperties in AugmentObject (no-changelog) (#7131)

This commit is contained in:
कारतोफ्फेलस्क्रिप्ट™ 2023-09-07 15:07:32 +02:00 committed by GitHub
parent 7b49cf2a2c
commit 67aaad15eb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -76,11 +76,11 @@ export function augmentObject<T extends object>(data: T): T {
if (augmentedObjects.has(data)) return data; if (augmentedObjects.has(data)) return data;
const newData = {} as IDataObject; const newData = {} as IDataObject;
const deletedProperties: Array<string | symbol> = []; const deletedProperties = new Set<string | symbol>();
const proxy = new Proxy(data, { const proxy = new Proxy(data, {
get(target, key: string, receiver): unknown { get(target, key: string, receiver): unknown {
if (deletedProperties.indexOf(key) !== -1) { if (deletedProperties.has(key)) {
return undefined; return undefined;
} }
@ -107,7 +107,7 @@ export function augmentObject<T extends object>(data: T): T {
delete newData[key]; delete newData[key];
} }
if (key in target) { if (key in target) {
deletedProperties.push(key); deletedProperties.add(key);
} }
return true; return true;
@ -118,34 +118,33 @@ export function augmentObject<T extends object>(data: T): T {
delete newData[key]; delete newData[key];
} }
if (key in target) { if (key in target) {
deletedProperties.push(key); deletedProperties.add(key);
} }
return true; return true;
} }
newData[key] = newValue as IDataObject; newData[key] = newValue as IDataObject;
const deleteIndex = deletedProperties.indexOf(key); if (deletedProperties.has(key)) {
if (deleteIndex !== -1) { deletedProperties.delete(key);
deletedProperties.splice(deleteIndex, 1);
} }
return true; return true;
}, },
has(target, key) { has(target, key) {
if (deletedProperties.indexOf(key) !== -1) return false; if (deletedProperties.has(key)) return false;
return Reflect.has(newData, key) || Reflect.has(target, key); return Reflect.has(newData, key) || Reflect.has(target, key);
}, },
ownKeys(target) { ownKeys(target) {
const originalKeys = Reflect.ownKeys(target); const originalKeys = Reflect.ownKeys(target);
const newKeys = Object.keys(newData); const newKeys = Object.keys(newData);
return [...new Set([...originalKeys, ...newKeys])].filter( return [...new Set([...originalKeys, ...newKeys])].filter(
(key) => deletedProperties.indexOf(key) === -1, (key) => !deletedProperties.has(key),
); );
}, },
getOwnPropertyDescriptor(target, key) { getOwnPropertyDescriptor(target, key) {
if (deletedProperties.indexOf(key) !== -1) return undefined; if (deletedProperties.has(key)) return undefined;
return Object.getOwnPropertyDescriptor(key in newData ? newData : data, key); return Object.getOwnPropertyDescriptor(key in newData ? newData : data, key);
}, },
}); });