1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const logLevel_1 = require("./options/logLevel");
|
4 | require("reflect-metadata");
|
5 | const STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg;
|
6 | const ARGUMENT_NAMES = /([^\s,]+)/g;
|
7 | function extractName(target) {
|
8 | if (!target.name && target.constructor) {
|
9 | return target.constructor.name;
|
10 | }
|
11 | return target.name;
|
12 | }
|
13 | function postLogError(logger, target, error, propertyKey, _methodIdentifier) {
|
14 | if (logger) {
|
15 | let name = extractName(target);
|
16 | logger.error(`${_methodIdentifier} :: ${name}.${propertyKey} ## `, error.message, error.stack);
|
17 | }
|
18 | }
|
19 | exports.postLogError = postLogError;
|
20 | function preLog(target, propertyKey, args, logLevel, _methodIdentifier, filename) {
|
21 | let logger;
|
22 | let name = extractName(target);
|
23 | let method = target[propertyKey];
|
24 | if (!method) {
|
25 | method = target.prototype[propertyKey];
|
26 | }
|
27 | if (!logger && target.logelas)
|
28 | logger = target.logelas;
|
29 | if (!logger && target.constructor.logelas)
|
30 | logger = target.constructor.logelas;
|
31 | if (logger) {
|
32 | logger.__methodname = `${_methodIdentifier} :: ${name}.${propertyKey}`;
|
33 | logger[logLevel_1.LogLevelStr[logLevel]](`${_methodIdentifier} :: ${name}.${propertyKey} => `, parseArgs(args, method), filename);
|
34 | }
|
35 | return logger;
|
36 | }
|
37 | exports.preLog = preLog;
|
38 | function postLog(target, propertyKey, result, logLevel, _methodIdentifier, filename) {
|
39 | let name = extractName(target);
|
40 | let logger = target.logelas;
|
41 | if (result && result.toString && result.toString() === '[object Promise]') {
|
42 | result.then((data) => {
|
43 | if (logger)
|
44 | logger[logLevel_1.LogLevelStr[logLevel]](`${_methodIdentifier} :: ${name}.${propertyKey} <= `, data === undefined ? 'void' : data, filename);
|
45 | return data;
|
46 | });
|
47 | }
|
48 | else {
|
49 | if (logger)
|
50 | logger[logLevel_1.LogLevelStr[logLevel]](`${_methodIdentifier} :: ${name}.${propertyKey} <= `, result === undefined ? 'void' : result, filename);
|
51 | }
|
52 | return result;
|
53 | }
|
54 | exports.postLog = postLog;
|
55 | function stringify(object) {
|
56 | try {
|
57 | return JSON.stringify(object);
|
58 | }
|
59 | catch (error) {
|
60 | return '[circular ]';
|
61 | }
|
62 | }
|
63 | function parseArgs(argValues, func) {
|
64 | if (!argValues || argValues.length === 0) {
|
65 | return;
|
66 | }
|
67 | const fnStr = func.toString().replace(STRIP_COMMENTS, '');
|
68 | let argNames = fnStr.slice(fnStr.indexOf('(') + 1, fnStr.indexOf(')')).match(ARGUMENT_NAMES);
|
69 | if (argNames === null)
|
70 | return [];
|
71 | const requiredArgNames = argNames;
|
72 | return requiredArgNames.map(function (argName) {
|
73 | return argNames.indexOf(argName);
|
74 | }).map(function (argNameIndex) {
|
75 | if (argNameIndex === -1 || argNameIndex >= argValues.length)
|
76 | return;
|
77 | if (typeof argValues[argNameIndex] === 'function') {
|
78 | return `${argNames[argNameIndex]} = ${argValues[argNameIndex].name}`;
|
79 | }
|
80 | else {
|
81 | return `${argNames[argNameIndex]} = ${stringify(argValues[argNameIndex])}`;
|
82 | }
|
83 | }).join(' | | ');
|
84 | }
|
85 |
|
\ | No newline at end of file |