1 | "use strict";
|
2 | var ConsoleLogger_1;
|
3 | Object.defineProperty(exports, "__esModule", { value: true });
|
4 | exports.ConsoleLogger = void 0;
|
5 | const tslib_1 = require("tslib");
|
6 | const injectable_decorator_1 = require("../decorators/core/injectable.decorator");
|
7 | const optional_decorator_1 = require("../decorators/core/optional.decorator");
|
8 | const cli_colors_util_1 = require("../utils/cli-colors.util");
|
9 | const shared_utils_1 = require("../utils/shared.utils");
|
10 | const utils_1 = require("./utils");
|
11 | const DEFAULT_LOG_LEVELS = [
|
12 | 'log',
|
13 | 'error',
|
14 | 'warn',
|
15 | 'debug',
|
16 | 'verbose',
|
17 | ];
|
18 | let ConsoleLogger = ConsoleLogger_1 = class ConsoleLogger {
|
19 | constructor(context, options = {}) {
|
20 | this.context = context;
|
21 | this.options = options;
|
22 | if (!options.logLevels) {
|
23 | options.logLevels = DEFAULT_LOG_LEVELS;
|
24 | }
|
25 | if (context) {
|
26 | this.originalContext = context;
|
27 | }
|
28 | }
|
29 | log(message, ...optionalParams) {
|
30 | if (!this.isLevelEnabled('log')) {
|
31 | return;
|
32 | }
|
33 | const { messages, context } = this.getContextAndMessagesToPrint([
|
34 | message,
|
35 | ...optionalParams,
|
36 | ]);
|
37 | this.printMessages(messages, context, 'log');
|
38 | }
|
39 | error(message, ...optionalParams) {
|
40 | if (!this.isLevelEnabled('error')) {
|
41 | return;
|
42 | }
|
43 | const { messages, context, stack } = this.getContextAndStackAndMessagesToPrint([message, ...optionalParams]);
|
44 | this.printMessages(messages, context, 'error', 'stderr');
|
45 | this.printStackTrace(stack);
|
46 | }
|
47 | warn(message, ...optionalParams) {
|
48 | if (!this.isLevelEnabled('warn')) {
|
49 | return;
|
50 | }
|
51 | const { messages, context } = this.getContextAndMessagesToPrint([
|
52 | message,
|
53 | ...optionalParams,
|
54 | ]);
|
55 | this.printMessages(messages, context, 'warn');
|
56 | }
|
57 | debug(message, ...optionalParams) {
|
58 | if (!this.isLevelEnabled('debug')) {
|
59 | return;
|
60 | }
|
61 | const { messages, context } = this.getContextAndMessagesToPrint([
|
62 | message,
|
63 | ...optionalParams,
|
64 | ]);
|
65 | this.printMessages(messages, context, 'debug');
|
66 | }
|
67 | verbose(message, ...optionalParams) {
|
68 | if (!this.isLevelEnabled('verbose')) {
|
69 | return;
|
70 | }
|
71 | const { messages, context } = this.getContextAndMessagesToPrint([
|
72 | message,
|
73 | ...optionalParams,
|
74 | ]);
|
75 | this.printMessages(messages, context, 'verbose');
|
76 | }
|
77 | |
78 |
|
79 |
|
80 |
|
81 | setLogLevels(levels) {
|
82 | if (!this.options) {
|
83 | this.options = {};
|
84 | }
|
85 | this.options.logLevels = levels;
|
86 | }
|
87 | |
88 |
|
89 |
|
90 |
|
91 | setContext(context) {
|
92 | this.context = context;
|
93 | }
|
94 | |
95 |
|
96 |
|
97 | resetContext() {
|
98 | this.context = this.originalContext;
|
99 | }
|
100 | isLevelEnabled(level) {
|
101 | var _a;
|
102 | const logLevels = (_a = this.options) === null || _a === void 0 ? void 0 : _a.logLevels;
|
103 | return utils_1.isLogLevelEnabled(level, logLevels);
|
104 | }
|
105 | getTimestamp() {
|
106 | const localeStringOptions = {
|
107 | year: 'numeric',
|
108 | hour: 'numeric',
|
109 | minute: 'numeric',
|
110 | second: 'numeric',
|
111 | day: '2-digit',
|
112 | month: '2-digit',
|
113 | };
|
114 | return new Date(Date.now()).toLocaleString(undefined, localeStringOptions);
|
115 | }
|
116 | printMessages(messages, context = '', logLevel = 'log', writeStreamType) {
|
117 | const color = this.getColorByLogLevel(logLevel);
|
118 | messages.forEach(message => {
|
119 | const output = shared_utils_1.isPlainObject(message)
|
120 | ? `${color('Object:')}\n${JSON.stringify(message, (key, value) => typeof value === 'bigint' ? value.toString() : value, 2)}\n`
|
121 | : color(message);
|
122 | const pidMessage = color(`[Nest] ${process.pid} - `);
|
123 | const contextMessage = context ? cli_colors_util_1.yellow(`[${context}] `) : '';
|
124 | const timestampDiff = this.updateAndGetTimestampDiff();
|
125 | const formattedLogLevel = color(logLevel.toUpperCase().padStart(7, ' '));
|
126 | const computedMessage = `${pidMessage}${this.getTimestamp()} ${formattedLogLevel} ${contextMessage}${output}${timestampDiff}\n`;
|
127 | process[writeStreamType !== null && writeStreamType !== void 0 ? writeStreamType : 'stdout'].write(computedMessage);
|
128 | });
|
129 | }
|
130 | printStackTrace(stack) {
|
131 | if (!stack) {
|
132 | return;
|
133 | }
|
134 | process.stderr.write(`${stack}\n`);
|
135 | }
|
136 | updateAndGetTimestampDiff() {
|
137 | var _a;
|
138 | const includeTimestamp = ConsoleLogger_1.lastTimestampAt && ((_a = this.options) === null || _a === void 0 ? void 0 : _a.timestamp);
|
139 | const result = includeTimestamp
|
140 | ? cli_colors_util_1.yellow(` +${Date.now() - ConsoleLogger_1.lastTimestampAt}ms`)
|
141 | : '';
|
142 | ConsoleLogger_1.lastTimestampAt = Date.now();
|
143 | return result;
|
144 | }
|
145 | getContextAndMessagesToPrint(args) {
|
146 | if ((args === null || args === void 0 ? void 0 : args.length) <= 1) {
|
147 | return { messages: args, context: this.context };
|
148 | }
|
149 | const lastElement = args[args.length - 1];
|
150 | const isContext = typeof lastElement === 'string';
|
151 | if (!isContext) {
|
152 | return { messages: args, context: this.context };
|
153 | }
|
154 | return {
|
155 | context: lastElement,
|
156 | messages: args.slice(0, args.length - 1),
|
157 | };
|
158 | }
|
159 | getContextAndStackAndMessagesToPrint(args) {
|
160 | const { messages, context } = this.getContextAndMessagesToPrint(args);
|
161 | if ((messages === null || messages === void 0 ? void 0 : messages.length) <= 1) {
|
162 | return { messages, context };
|
163 | }
|
164 | const lastElement = messages[messages.length - 1];
|
165 | const isStack = typeof lastElement === 'string';
|
166 | if (!isStack) {
|
167 | return { messages, context };
|
168 | }
|
169 | return {
|
170 | stack: lastElement,
|
171 | messages: messages.slice(0, messages.length - 1),
|
172 | context,
|
173 | };
|
174 | }
|
175 | getColorByLogLevel(level) {
|
176 | switch (level) {
|
177 | case 'debug':
|
178 | return cli_colors_util_1.clc.magentaBright;
|
179 | case 'warn':
|
180 | return cli_colors_util_1.clc.yellow;
|
181 | case 'error':
|
182 | return cli_colors_util_1.clc.red;
|
183 | case 'verbose':
|
184 | return cli_colors_util_1.clc.cyanBright;
|
185 | default:
|
186 | return cli_colors_util_1.clc.green;
|
187 | }
|
188 | }
|
189 | };
|
190 | ConsoleLogger = ConsoleLogger_1 = tslib_1.__decorate([
|
191 | injectable_decorator_1.Injectable(),
|
192 | tslib_1.__param(0, optional_decorator_1.Optional()),
|
193 | tslib_1.__param(1, optional_decorator_1.Optional()),
|
194 | tslib_1.__metadata("design:paramtypes", [String, Object])
|
195 | ], ConsoleLogger);
|
196 | exports.ConsoleLogger = ConsoleLogger;
|