js trace function call
// details can be found here: https://2ality.com/2017/11/proxy-method-calls.html
function traceMethodCalls(obj) {
const handler = {
get(target, propKey, receiver) {
const targetValue = Reflect.get(target, propKey, receiver);
if (typeof targetValue === 'function') {
return function (...args) {
console.log('CALL', propKey, args);
return targetValue.apply(this, args); // (A)
}
} else {
return targetValue;
}
}
};
return new Proxy(obj, handler);
}
const objWithFunction = {
methodA: (a) => { return a; }
}
const proxyWithTrace = traceMethodCalls(objWithFunction);