literally just a patcher

master
Drake 2 years ago
commit bf1d5f0932

@ -0,0 +1,26 @@
function monkeyPatch(name, parentObj, patches) {
const injId = Math.random().toString(36).slice(2).toUpperCase()
const before = (patches["before"] === undefined) ? (...args)=>args : patches["before"];
const instead = (patches["instead"] === undefined) ? (...args)=>args : patches["instead"];
const after = (patches["after"] === undefined) ? (args, res)=>res : patches["after"];
const handler = {
apply: (target, thisArg, args) => {
before(args);
res = (patches["instead"] === undefined) ? target(...args) : instead(...args);
return after(...args, res);
}
};
const prox = new Proxy(parentObj[name], handler);
const orig = parentObj[name];
parentObj[name] = prox;
const unpatch = () => {
parentObj[name] = orig;
}
parentObj[injId] = {
name: name,
orig: orig,
unpatch: unpatch
};
return unpatch;
}
module.exports = monkeyPatch
Loading…
Cancel
Save