mirror of
https://github.com/QuiteAFancyEmerald/Holy-Unblocker.git
synced 2025-05-13 03:50:02 -04:00
Updated a few more things
This commit is contained in:
parent
c827e9f7e1
commit
73cdcb3186
47 changed files with 35805 additions and 1102 deletions
81
lib/browser/utils.js
Normal file
81
lib/browser/utils.js
Normal file
|
@ -0,0 +1,81 @@
|
|||
const corrosionProperties = [
|
||||
'$corrosion_string',
|
||||
'$corrosion_messagePath',
|
||||
'$corrosion_messageTarget',
|
||||
'$corrosion_messageSrcElement',
|
||||
'$corrosion_messageCurrentTarget',
|
||||
'$corrosion_messageEventPhase',
|
||||
];
|
||||
|
||||
function overrideFunction(obj, prop, wrap) {
|
||||
if (!obj || typeof obj[prop] != 'function') return false;
|
||||
const wrapped = wrapFunction(obj[prop], wrap);
|
||||
return obj[prop] = wrapped;
|
||||
};
|
||||
|
||||
function overrideConstructor(obj, prop, wrap) {
|
||||
if (!obj || typeof obj[prop] != 'function') return false;
|
||||
const wrapped = wrapConstructor(obj[prop], wrap);
|
||||
return obj[prop] = wrapped;
|
||||
};
|
||||
|
||||
function overrideAccessors(obj, prop, handler) {
|
||||
if (!obj || !obj.hasOwnProperty(prop)) return false;
|
||||
const descriptor = Object.getOwnPropertyDescriptor(obj, prop) || {};
|
||||
if (descriptor.get && handler.getter) overrideFunction(descriptor, 'get', handler.getter);
|
||||
if (descriptor.set && handler.setter) overrideFunction(descriptor, 'set', handler.setter);
|
||||
Object.defineProperty(obj, prop, descriptor);
|
||||
return true;
|
||||
};
|
||||
|
||||
function wrapFunction(fn, wrap) {
|
||||
/*const wrapped = new Proxy(fn, {
|
||||
apply: wrap,
|
||||
get: (target, prop) => target[prop],
|
||||
set: (target, prop, val) => target[prop] = val,
|
||||
});*/
|
||||
const wrapped = 'prototype' in fn ? function attach() {
|
||||
return wrap(fn, this, [...arguments]);
|
||||
} : {
|
||||
attach() {
|
||||
return wrap(fn, this, [...arguments]);
|
||||
},
|
||||
}['attach'];
|
||||
|
||||
['name', 'length', 'displayName'].forEach(key => {
|
||||
if (key in wrapped) {
|
||||
Object.defineProperty(wrapped, key, Object.getOwnPropertyDescriptor(fn, key));
|
||||
};
|
||||
});
|
||||
|
||||
wrapFnString(fn, wrapped);
|
||||
return wrapped;
|
||||
};
|
||||
|
||||
function wrapConstructor(fn, wrap) {
|
||||
/*
|
||||
const wrapped = new Proxy(fn, {
|
||||
construct: wrap,
|
||||
get: (target, prop) => target[prop],
|
||||
set: (target, prop, val) => target[prop] = val,
|
||||
});*/
|
||||
const wrapped = function () {
|
||||
return new.target ? wrap(fn, [...arguments]) : fn(...arguments);
|
||||
};
|
||||
['name', 'length'].forEach(key => {
|
||||
if (key in wrapped) {
|
||||
Object.defineProperty(wrapped, key, Object.getOwnPropertyDescriptor(fn, key));
|
||||
};
|
||||
});
|
||||
wrapped.prototype = fn.prototype;
|
||||
wrapped.prototype.constructor = wrapped;
|
||||
wrapFnString(fn, wrapped)
|
||||
return wrapped;
|
||||
};
|
||||
|
||||
function wrapFnString(fn, wrapped) {
|
||||
wrapped.$corrosion_string = Function.prototype.toString.call(fn);
|
||||
return true;
|
||||
};
|
||||
|
||||
module.exports = { corrosionProperties, overrideFunction, overrideConstructor, overrideAccessors, wrapFunction, wrapConstructor, wrapFnString };
|
Loading…
Add table
Add a link
Reference in a new issue