cabbie-sync
Version:
A synchronous webdriver client
44 lines (41 loc) • 1.39 kB
Flow
/**
* @flow
* This file is generated automatically, run npm run build to re-generate.
**/
import * as assert from 'assert';
import { inspect } from 'util';
const inspectKey = inspect.custom || 'inspect';
function addLogging(cls: any, options: { baseClass?: boolean; inspect?: (obj: any, depth: number, options: Object) => string; } = { baseClass: false }) {
const proto = cls.prototype;
Object.getOwnPropertyNames(proto).forEach(name => {
if (typeof proto[name] !== 'function') {
return;
}
if (name[0] === '_') {
return;
}
const fun = proto[name];
proto[name] = function (...args) {
const start = Date.now();
let result;
try {
result = fun.call(this, ...args);
} catch (err) {
this.debug.onCall({ obj: this, name, args, duration: Date.now() - start, success: false, err });
throw err;
}
this.debug.onCall({ obj: this, name, args, duration: Date.now() - start, success: true, result });
return result;
};
});
if (options.inspect) {
const ins = options.inspect;
assert.equal(typeof options.inspect, 'function');
proto[inspectKey] = function (depth: number, options: Object): string {
return ins(this, depth, options);
};
} else if (!proto[inspectKey] && !options.baseClass) {
proto[inspectKey] = () => cls.name;
}
}
export default addLogging;