@wbg-mde/repository
Version:
Managing all common method for file system CRUD operations.
75 lines (74 loc) • 3.72 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const model_1 = require("@wbg-mde/model");
const project_configuration_1 = require("../configuration/project.configuration");
const winston_logger_1 = require("../shared/winston.logger");
const _ = require('lodash');
let traceOptions = {};
function Trace(options) {
const writeLog = (logFor, className, methodName, args) => {
project_configuration_1.configuaration.refresh();
let logConfig = [model_1.LogPreferences.writeOnlyErrors, model_1.LogBoolStatus.disabled, model_1.LogBoolStatus.disabled];
let clArgs;
if (project_configuration_1.configuaration.appLogConfig) {
logConfig[0] = project_configuration_1.configuaration.appLogConfig.level || model_1.LogPreferences.writeOnlyErrors;
logConfig[1] = project_configuration_1.configuaration.appLogConfig.includeLongParams === undefined ? model_1.LogBoolStatus.disabled : project_configuration_1.configuaration.appLogConfig.includeLongParams;
logConfig[2] = project_configuration_1.configuaration.appLogConfig.includeRecMethods === undefined ? model_1.LogBoolStatus.disabled : project_configuration_1.configuaration.appLogConfig.includeRecMethods;
}
if (logConfig[0] === model_1.LogPreferences.writeAllInfo) {
if (traceOptions[className]) {
let tOptions = traceOptions[className];
if (tOptions.exclude && tOptions.exclude.indexOf(methodName) !== -1 && logConfig[2] === model_1.LogBoolStatus.disabled) {
return;
}
if (tOptions.params && tOptions.params[methodName] && logConfig[1] === model_1.LogBoolStatus.disabled) {
clArgs = _.clone(args);
let exPrms = tOptions.params[methodName];
if (exPrms[0] === '*') {
clArgs = ['**All arguments removed from log**'];
}
else {
for (let i = 0; i < exPrms.length; i++) {
clArgs[exPrms[i]] = '**Param ' + exPrms[i] + ' removed from log**';
}
}
}
}
winston_logger_1.ApplicationLogger.writeLog(model_1.LogLevels.info, {
context: logFor === 1 ? model_1.TracerLogFor.class : model_1.TracerLogFor.method,
class: className,
method: methodName,
parameters: clArgs || args
});
}
};
return (target, name, descriptor) => {
if (descriptor) {
let original = descriptor.value;
descriptor.value = function (...args) {
writeLog(2, target.constructor.name, name, args);
let ret = original.apply(this, args);
return ret;
};
return descriptor;
}
else {
if (options) {
traceOptions[target.name] = options;
}
Object.getOwnPropertyNames(target.prototype).forEach((methodName) => {
let original = target.prototype[methodName];
if (typeof original !== "function" || methodName === "constructor") {
return;
}
target.prototype[methodName] = function (...args) {
writeLog(1, target.name, methodName, args);
let ret = original.apply(this, args);
return ret;
};
});
return target;
}
};
}
exports.Trace = Trace;