aws-cdk
Version:
CDK Toolkit, the command line tool for CDK apps
59 lines • 7.11 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.traceMethods = exports.traceCall = exports.enableTracing = void 0;
const logging_1 = require("../logging");
let ENABLED = false;
let INDENT = 0;
function enableTracing(enabled) {
ENABLED = enabled;
}
exports.enableTracing = enableTracing;
/**
* Method decorator to trace a single static or member method, any time it's called
*/
function traceCall(receiver, _propertyKey, descriptor, parentClassName) {
const fn = descriptor.value;
const className = typeof receiver === 'function' ? receiver.name : parentClassName;
descriptor.value = function (...args) {
if (!ENABLED) {
return fn.apply(this, args);
}
(0, logging_1.debug)(`[trace] ${' '.repeat(INDENT)}${className || this.constructor.name || '(anonymous)'}#${fn.name}()`);
INDENT += 2;
const ret = fn.apply(this, args);
if (ret instanceof Promise) {
return ret.finally(() => {
INDENT -= 2;
});
}
else {
INDENT -= 2;
return ret;
}
};
return descriptor;
}
exports.traceCall = traceCall;
/**
* Class decorator, enable tracing for all methods on this class
*/
function traceMethods(constructor) {
// Statics
for (const [name, descriptor] of Object.entries(Object.getOwnPropertyDescriptors(constructor))) {
if (typeof descriptor.value !== 'function') {
continue;
}
const newDescriptor = traceCall(constructor, name, descriptor, constructor.name) ?? descriptor;
Object.defineProperty(constructor, name, newDescriptor);
}
// Instancne members
for (const [name, descriptor] of Object.entries(Object.getOwnPropertyDescriptors(constructor.prototype))) {
if (typeof descriptor.value !== 'function') {
continue;
}
const newDescriptor = traceCall(constructor.prototype, name, descriptor, constructor.name) ?? descriptor;
Object.defineProperty(constructor.prototype, name, newDescriptor);
}
}
exports.traceMethods = traceMethods;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2luZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRyYWNpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsd0NBQW1DO0FBRW5DLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztBQUNwQixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFFZixTQUFnQixhQUFhLENBQUMsT0FBZ0I7SUFDNUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztBQUNwQixDQUFDO0FBRkQsc0NBRUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLFNBQVMsQ0FBQyxRQUFnQixFQUFFLFlBQW9CLEVBQUUsVUFBOEIsRUFBRSxlQUF3QjtJQUN4SCxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDO0lBQzVCLE1BQU0sU0FBUyxHQUFHLE9BQU8sUUFBUSxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDO0lBRW5GLFVBQVUsQ0FBQyxLQUFLLEdBQUcsVUFBVSxHQUFHLElBQVc7UUFDekMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUFFLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FBRTtRQUU5QyxJQUFBLGVBQUssRUFBQyxXQUFXLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsU0FBUyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLGFBQWEsSUFBSSxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztRQUMxRyxNQUFNLElBQUksQ0FBQyxDQUFDO1FBRVosTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDakMsSUFBSSxHQUFHLFlBQVksT0FBTyxFQUFFO1lBQzFCLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUU7Z0JBQ3RCLE1BQU0sSUFBSSxDQUFDLENBQUM7WUFDZCxDQUFDLENBQUMsQ0FBQztTQUNKO2FBQU07WUFDTCxNQUFNLElBQUksQ0FBQyxDQUFDO1lBQ1osT0FBTyxHQUFHLENBQUM7U0FDWjtJQUNILENBQUMsQ0FBQztJQUNGLE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUM7QUFyQkQsOEJBcUJDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixZQUFZLENBQUMsV0FBcUI7SUFDaEQsVUFBVTtJQUNWLEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFO1FBQzlGLElBQUksT0FBTyxVQUFVLENBQUMsS0FBSyxLQUFLLFVBQVUsRUFBRTtZQUFFLFNBQVM7U0FBRTtRQUN6RCxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsQ0FBQztRQUMvRixNQUFNLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUM7S0FDekQ7SUFFRCxvQkFBb0I7SUFDcEIsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLHlCQUF5QixDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFO1FBQ3hHLElBQUksT0FBTyxVQUFVLENBQUMsS0FBSyxLQUFLLFVBQVUsRUFBRTtZQUFFLFNBQVM7U0FBRTtRQUN6RCxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxVQUFVLENBQUM7UUFDekcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQztLQUNuRTtBQUNILENBQUM7QUFkRCxvQ0FjQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlYnVnIH0gZnJvbSAnLi4vbG9nZ2luZyc7XG5cbmxldCBFTkFCTEVEID0gZmFsc2U7XG5sZXQgSU5ERU5UID0gMDtcblxuZXhwb3J0IGZ1bmN0aW9uIGVuYWJsZVRyYWNpbmcoZW5hYmxlZDogYm9vbGVhbikge1xuICBFTkFCTEVEID0gZW5hYmxlZDtcbn1cblxuLyoqXG4gKiBNZXRob2QgZGVjb3JhdG9yIHRvIHRyYWNlIGEgc2luZ2xlIHN0YXRpYyBvciBtZW1iZXIgbWV0aG9kLCBhbnkgdGltZSBpdCdzIGNhbGxlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJhY2VDYWxsKHJlY2VpdmVyOiBvYmplY3QsIF9wcm9wZXJ0eUtleTogc3RyaW5nLCBkZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3IsIHBhcmVudENsYXNzTmFtZT86IHN0cmluZykge1xuICBjb25zdCBmbiA9IGRlc2NyaXB0b3IudmFsdWU7XG4gIGNvbnN0IGNsYXNzTmFtZSA9IHR5cGVvZiByZWNlaXZlciA9PT0gJ2Z1bmN0aW9uJyA/IHJlY2VpdmVyLm5hbWUgOiBwYXJlbnRDbGFzc05hbWU7XG5cbiAgZGVzY3JpcHRvci52YWx1ZSA9IGZ1bmN0aW9uICguLi5hcmdzOiBhbnlbXSkge1xuICAgIGlmICghRU5BQkxFRCkgeyByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJncyk7IH1cblxuICAgIGRlYnVnKGBbdHJhY2VdICR7JyAnLnJlcGVhdChJTkRFTlQpfSR7Y2xhc3NOYW1lIHx8IHRoaXMuY29uc3RydWN0b3IubmFtZSB8fCAnKGFub255bW91cyknfSMke2ZuLm5hbWV9KClgKTtcbiAgICBJTkRFTlQgKz0gMjtcblxuICAgIGNvbnN0IHJldCA9IGZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIGlmIChyZXQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICByZXR1cm4gcmV0LmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICBJTkRFTlQgLT0gMjtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBJTkRFTlQgLT0gMjtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICB9O1xuICByZXR1cm4gZGVzY3JpcHRvcjtcbn1cblxuLyoqXG4gKiBDbGFzcyBkZWNvcmF0b3IsIGVuYWJsZSB0cmFjaW5nIGZvciBhbGwgbWV0aG9kcyBvbiB0aGlzIGNsYXNzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmFjZU1ldGhvZHMoY29uc3RydWN0b3I6IEZ1bmN0aW9uKSB7XG4gIC8vIFN0YXRpY3NcbiAgZm9yIChjb25zdCBbbmFtZSwgZGVzY3JpcHRvcl0gb2YgT2JqZWN0LmVudHJpZXMoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoY29uc3RydWN0b3IpKSkge1xuICAgIGlmICh0eXBlb2YgZGVzY3JpcHRvci52YWx1ZSAhPT0gJ2Z1bmN0aW9uJykgeyBjb250aW51ZTsgfVxuICAgIGNvbnN0IG5ld0Rlc2NyaXB0b3IgPSB0cmFjZUNhbGwoY29uc3RydWN0b3IsIG5hbWUsIGRlc2NyaXB0b3IsIGNvbnN0cnVjdG9yLm5hbWUpID8/IGRlc2NyaXB0b3I7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnN0cnVjdG9yLCBuYW1lLCBuZXdEZXNjcmlwdG9yKTtcbiAgfVxuXG4gIC8vIEluc3RhbmNuZSBtZW1iZXJzXG4gIGZvciAoY29uc3QgW25hbWUsIGRlc2NyaXB0b3JdIG9mIE9iamVjdC5lbnRyaWVzKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGNvbnN0cnVjdG9yLnByb3RvdHlwZSkpKSB7XG4gICAgaWYgKHR5cGVvZiBkZXNjcmlwdG9yLnZhbHVlICE9PSAnZnVuY3Rpb24nKSB7IGNvbnRpbnVlOyB9XG4gICAgY29uc3QgbmV3RGVzY3JpcHRvciA9IHRyYWNlQ2FsbChjb25zdHJ1Y3Rvci5wcm90b3R5cGUsIG5hbWUsIGRlc2NyaXB0b3IsIGNvbnN0cnVjdG9yLm5hbWUpID8/IGRlc2NyaXB0b3I7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnN0cnVjdG9yLnByb3RvdHlwZSwgbmFtZSwgbmV3RGVzY3JpcHRvcik7XG4gIH1cbn0iXX0=