Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ulixee
GitHub Repository: ulixee/secret-agent
Path: blob/main/plugins/default-browser-emulator/injected-scripts/polyfill.modify.ts
1029 views
1
for (const itemToModify of args.itemsToModify || []) {
2
try {
3
if (itemToModify.propertyName === '_$function') {
4
const func = getObjectAtPath(itemToModify.path);
5
overriddenFns.set(func, itemToModify.property);
6
}
7
if (
8
itemToModify.propertyName === '_$setToStringToString' ||
9
itemToModify.propertyName === '_$getToStringToString'
10
) {
11
nativeToStringFunctionString = itemToModify.property;
12
continue;
13
}
14
15
const parts = getParentAndProperty(itemToModify.path);
16
const property = parts.property;
17
const parent = parts.parent;
18
const descriptorInHierarchy = getDescriptorInHierarchy(parent, property);
19
if (!descriptorInHierarchy) {
20
console.warn('Descriptor not found for polyfill', itemToModify);
21
continue;
22
}
23
const { descriptor } = descriptorInHierarchy;
24
25
if (itemToModify.propertyName === '_$value') {
26
if (descriptor.get) {
27
descriptor.get = proxyGetter(parent, property, () => itemToModify.property);
28
} else {
29
descriptor.value = itemToModify.property;
30
Object.defineProperty(parent, property, descriptor);
31
}
32
} else if (itemToModify.propertyName === '_$get') {
33
overriddenFns.set(descriptor.get, itemToModify.property);
34
} else if (itemToModify.propertyName === '_$set') {
35
overriddenFns.set(descriptor.set, itemToModify.property);
36
}
37
} catch (err) {
38
console.log(`WARN: error changing prop ${itemToModify.path}.${itemToModify.propertyName}\n${err.stack}`);
39
}
40
}
41
42