@cichol/logger 2.0.8 → 4.0.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/README.md +1 -1
  2. package/package.json +15 -34
  3. package/releases/cjs.js +554 -0
  4. package/releases/esm.js +523 -0
  5. package/releases/index.d.ts +196 -0
  6. package/LICENSE +0 -21
  7. package/releases/cjs/classes/logger.cjs +0 -142
  8. package/releases/cjs/classes/logger.d.ts +0 -33
  9. package/releases/cjs/formatters/command-line.cjs +0 -60
  10. package/releases/cjs/formatters/command-line.d.ts +0 -2
  11. package/releases/cjs/formatters/morgan.cjs +0 -87
  12. package/releases/cjs/formatters/morgan.d.ts +0 -8
  13. package/releases/cjs/handlers/debug.cjs +0 -29
  14. package/releases/cjs/handlers/debug.d.ts +0 -4
  15. package/releases/cjs/handlers/error.cjs +0 -115
  16. package/releases/cjs/handlers/error.d.ts +0 -13
  17. package/releases/cjs/handlers/fatal.cjs +0 -36
  18. package/releases/cjs/handlers/fatal.d.ts +0 -4
  19. package/releases/cjs/handlers/http.cjs +0 -29
  20. package/releases/cjs/handlers/http.d.ts +0 -4
  21. package/releases/cjs/handlers/index.cjs +0 -41
  22. package/releases/cjs/handlers/index.d.ts +0 -12
  23. package/releases/cjs/handlers/info.cjs +0 -29
  24. package/releases/cjs/handlers/info.d.ts +0 -4
  25. package/releases/cjs/handlers/notice.cjs +0 -29
  26. package/releases/cjs/handlers/notice.d.ts +0 -4
  27. package/releases/cjs/handlers/query.cjs +0 -41
  28. package/releases/cjs/handlers/query.d.ts +0 -13
  29. package/releases/cjs/handlers/verbose.cjs +0 -29
  30. package/releases/cjs/handlers/verbose.d.ts +0 -4
  31. package/releases/cjs/handlers/warning.cjs +0 -29
  32. package/releases/cjs/handlers/warning.d.ts +0 -4
  33. package/releases/cjs/helpers/color-scheme.cjs +0 -80
  34. package/releases/cjs/helpers/color-scheme.d.ts +0 -12
  35. package/releases/cjs/helpers/constants.cjs +0 -41
  36. package/releases/cjs/helpers/constants.d.ts +0 -18
  37. package/releases/cjs/helpers/label-decorator.cjs +0 -34
  38. package/releases/cjs/helpers/label-decorator.d.ts +0 -2
  39. package/releases/cjs/helpers/logging-level.cjs +0 -28
  40. package/releases/cjs/helpers/logging-level.d.ts +0 -13
  41. package/releases/cjs/index.cjs +0 -19
  42. package/releases/cjs/index.d.ts +0 -1
  43. package/releases/esm/classes/logger.d.ts +0 -33
  44. package/releases/esm/classes/logger.mjs +0 -118
  45. package/releases/esm/formatters/command-line.d.ts +0 -2
  46. package/releases/esm/formatters/command-line.mjs +0 -39
  47. package/releases/esm/formatters/morgan.d.ts +0 -8
  48. package/releases/esm/formatters/morgan.mjs +0 -66
  49. package/releases/esm/handlers/debug.d.ts +0 -4
  50. package/releases/esm/handlers/debug.mjs +0 -10
  51. package/releases/esm/handlers/error.d.ts +0 -13
  52. package/releases/esm/handlers/error.mjs +0 -83
  53. package/releases/esm/handlers/fatal.d.ts +0 -4
  54. package/releases/esm/handlers/fatal.mjs +0 -10
  55. package/releases/esm/handlers/http.d.ts +0 -4
  56. package/releases/esm/handlers/http.mjs +0 -10
  57. package/releases/esm/handlers/index.d.ts +0 -12
  58. package/releases/esm/handlers/index.mjs +0 -13
  59. package/releases/esm/handlers/info.d.ts +0 -4
  60. package/releases/esm/handlers/info.mjs +0 -10
  61. package/releases/esm/handlers/notice.d.ts +0 -4
  62. package/releases/esm/handlers/notice.mjs +0 -10
  63. package/releases/esm/handlers/query.d.ts +0 -13
  64. package/releases/esm/handlers/query.mjs +0 -21
  65. package/releases/esm/handlers/verbose.d.ts +0 -4
  66. package/releases/esm/handlers/verbose.mjs +0 -10
  67. package/releases/esm/handlers/warning.d.ts +0 -4
  68. package/releases/esm/handlers/warning.mjs +0 -10
  69. package/releases/esm/helpers/color-scheme.d.ts +0 -12
  70. package/releases/esm/helpers/color-scheme.mjs +0 -60
  71. package/releases/esm/helpers/constants.d.ts +0 -18
  72. package/releases/esm/helpers/constants.mjs +0 -22
  73. package/releases/esm/helpers/label-decorator.d.ts +0 -2
  74. package/releases/esm/helpers/label-decorator.mjs +0 -19
  75. package/releases/esm/helpers/logging-level.d.ts +0 -13
  76. package/releases/esm/helpers/logging-level.mjs +0 -18
  77. package/releases/esm/index.d.ts +0 -1
  78. package/releases/esm/index.mjs +0 -2
package/README.md CHANGED
@@ -26,7 +26,7 @@ $ npm install --save @cichol/logger
26
26
 
27
27
  ## License
28
28
 
29
- [MIT Licensed](LICENSE).
29
+ [MIT Licensed](../../LICENSE).
30
30
 
31
31
  [github actions badge]: https://img.shields.io/github/workflow/status/morrighan/logger/On%20default/develop?style=flat-square
32
32
  [github actions]: https://github.com/morrighan/logger/actions
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@cichol/logger",
3
- "version": "2.0.8",
3
+ "version": "4.0.0-alpha.1",
4
4
  "description": "A logger based on `winston` for personal projects.",
5
- "homepage": "https://github.com/morrighan/logger",
5
+ "homepage": "https://github.com/morrighan/packages",
6
6
  "bugs": {
7
- "url": "https://github.com/morrighan/logger/issues"
7
+ "url": "https://github.com/morrighan/packages/issues"
8
8
  },
9
9
  "license": "MIT",
10
10
  "author": {
@@ -12,32 +12,28 @@
12
12
  "email": "contact@cichol.com",
13
13
  "url": "https://www.cichol.com/"
14
14
  },
15
- "type": "module",
16
- "main": "releases/cjs/index.cjs",
17
- "module": "releases/esm/index.mjs",
15
+ "main": "releases/cjs.js",
16
+ "module": "releases/esm.js",
17
+ "types": "releases/index.d.ts",
18
18
  "directories": {
19
19
  "lib": "releases"
20
20
  },
21
21
  "exports": {
22
- "import": "./releases/esm/index.mjs",
23
- "require": "./releases/cjs/index.cjs"
22
+ "import": "./releases/esm.js",
23
+ "require": "./releases/cjs.js"
24
24
  },
25
25
  "repository": {
26
26
  "type": "git",
27
- "url": "git+https://github.com/morrighan/logger.git"
27
+ "url": "git+https://github.com/morrighan/packages.git",
28
+ "directory": "packages/logger"
28
29
  },
29
30
  "scripts": {
30
- "build": "npm run build:cjs && npm run build:esm",
31
- "build:cjs": "BABEL_ENV=\"cjs\" JS_EXTENSION=\".cjs\" npm run compile",
32
- "build:esm": "BABEL_ENV=\"esm\" JS_EXTENSION=\".mjs\" npm run compile",
33
- "compile": "npx babel --root-mode upward sources --extensions .js,.ts --out-dir releases/$BABEL_ENV --out-file-extension $JS_EXTENSION --source-maps inline --delete-dir-on-start && npx tsc --project sources --outDir releases/$BABEL_ENV",
34
- "test": "npm run test:eslint && npm run test:tsc",
35
- "test:eslint": "npx eslint . --ext .js,.ts",
36
- "test:tsc": "npx tsc --project . --noEmit"
31
+ "build": "npm run build:tsc",
32
+ "build:tsc": "npx tsc --project sources --outFile releases/index.d.ts"
37
33
  },
38
34
  "dependencies": {
39
35
  "bluebird": "^3.7.2",
40
- "chalk": "^4.1.1",
36
+ "chalk": "^4.1.2",
41
37
  "cli-highlight": "^2.1.11",
42
38
  "cls-rtracer": "^2.6.0",
43
39
  "lodash": "^4.17.21",
@@ -48,24 +44,9 @@
48
44
  "reflect-metadata": "^0.1.13",
49
45
  "winston": "^3.3.3"
50
46
  },
51
- "devDependencies": {
52
- "@babel/cli": "^7.14.3",
53
- "@babel/core": "^7.14.3",
54
- "@babel/plugin-transform-runtime": "^7.14.3",
55
- "@babel/preset-env": "^7.14.2",
56
- "@babel/preset-typescript": "^7.13.0",
57
- "@cichol/eslint-config": "^3.0.2",
58
- "@types/babel__core": "^7.1.14",
59
- "@types/bluebird": "^3.5.35",
60
- "@types/lodash": "^4.14.170",
61
- "@types/morgan": "^1.9.2",
62
- "@types/node": "^15.6.1",
63
- "eslint": "^7.27.0",
64
- "typescript": "^4.2.4"
65
- },
66
47
  "engines": {
67
- "node": "^14.16.0 || ^16",
68
- "npm": "^7.12.0"
48
+ "node": "^14.18.3 || ^16.13.2",
49
+ "npm": "^8.3.1"
69
50
  },
70
51
  "publishConfig": {
71
52
  "registry": "https://registry.npmjs.org/",
@@ -0,0 +1,554 @@
1
+ 'use strict';
2
+
3
+ var _Symbol = require('@babel/runtime-corejs3/core-js/symbol');
4
+ var _filterInstanceProperty = require('@babel/runtime-corejs3/core-js/instance/filter');
5
+ var _mapInstanceProperty = require('@babel/runtime-corejs3/core-js/instance/map');
6
+ var _trimInstanceProperty = require('@babel/runtime-corejs3/core-js/instance/trim');
7
+ var _Reflect$hasOwnMetadata = require('@babel/runtime-corejs3/core-js/reflect/has-own-metadata');
8
+ var _Reflect$getOwnMetadata = require('@babel/runtime-corejs3/core-js/reflect/get-own-metadata');
9
+ var _Reflect$defineMetadata = require('@babel/runtime-corejs3/core-js/reflect/define-metadata');
10
+ require('reflect-metadata');
11
+ var http$1 = require('http');
12
+ var stream = require('stream');
13
+ var Promise$1 = require('bluebird');
14
+ var lodash = require('lodash');
15
+ var morgan = require('morgan');
16
+ var winston = require('winston');
17
+ var _findInstanceProperty = require('@babel/runtime-corejs3/core-js/instance/find');
18
+ var _Reflect$apply = require('@babel/runtime-corejs3/core-js/reflect/apply');
19
+ var chalk = require('chalk');
20
+ var rTracer = require('cls-rtracer');
21
+ var moment = require('moment');
22
+ var _Map = require('@babel/runtime-corejs3/core-js/map');
23
+ var process = require('process');
24
+ var _Symbol$for = require('@babel/runtime-corejs3/core-js/symbol/for');
25
+ var _startsWithInstanceProperty = require('@babel/runtime-corejs3/core-js/instance/starts-with');
26
+ var _sliceInstanceProperty = require('@babel/runtime-corejs3/core-js/instance/slice');
27
+ var path = require('path');
28
+ var highlight = require('cli-highlight');
29
+ var prettyBytes = require('pretty-bytes');
30
+ var prettyMs = require('pretty-ms');
31
+ var cluster = require('cluster');
32
+ require('worker_threads');
33
+
34
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
35
+
36
+ var _Symbol__default = /*#__PURE__*/_interopDefaultLegacy(_Symbol);
37
+ var _filterInstanceProperty__default = /*#__PURE__*/_interopDefaultLegacy(_filterInstanceProperty);
38
+ var _mapInstanceProperty__default = /*#__PURE__*/_interopDefaultLegacy(_mapInstanceProperty);
39
+ var _trimInstanceProperty__default = /*#__PURE__*/_interopDefaultLegacy(_trimInstanceProperty);
40
+ var _Reflect$hasOwnMetadata__default = /*#__PURE__*/_interopDefaultLegacy(_Reflect$hasOwnMetadata);
41
+ var _Reflect$getOwnMetadata__default = /*#__PURE__*/_interopDefaultLegacy(_Reflect$getOwnMetadata);
42
+ var _Reflect$defineMetadata__default = /*#__PURE__*/_interopDefaultLegacy(_Reflect$defineMetadata);
43
+ var Promise__default = /*#__PURE__*/_interopDefaultLegacy(Promise$1);
44
+ var lodash__default = /*#__PURE__*/_interopDefaultLegacy(lodash);
45
+ var morgan__default = /*#__PURE__*/_interopDefaultLegacy(morgan);
46
+ var winston__default = /*#__PURE__*/_interopDefaultLegacy(winston);
47
+ var _findInstanceProperty__default = /*#__PURE__*/_interopDefaultLegacy(_findInstanceProperty);
48
+ var _Reflect$apply__default = /*#__PURE__*/_interopDefaultLegacy(_Reflect$apply);
49
+ var chalk__default = /*#__PURE__*/_interopDefaultLegacy(chalk);
50
+ var rTracer__default = /*#__PURE__*/_interopDefaultLegacy(rTracer);
51
+ var moment__default = /*#__PURE__*/_interopDefaultLegacy(moment);
52
+ var _Map__default = /*#__PURE__*/_interopDefaultLegacy(_Map);
53
+ var process__default = /*#__PURE__*/_interopDefaultLegacy(process);
54
+ var _Symbol$for__default = /*#__PURE__*/_interopDefaultLegacy(_Symbol$for);
55
+ var _startsWithInstanceProperty__default = /*#__PURE__*/_interopDefaultLegacy(_startsWithInstanceProperty);
56
+ var _sliceInstanceProperty__default = /*#__PURE__*/_interopDefaultLegacy(_sliceInstanceProperty);
57
+ var path__default = /*#__PURE__*/_interopDefaultLegacy(path);
58
+ var highlight__default = /*#__PURE__*/_interopDefaultLegacy(highlight);
59
+ var prettyBytes__default = /*#__PURE__*/_interopDefaultLegacy(prettyBytes);
60
+ var prettyMs__default = /*#__PURE__*/_interopDefaultLegacy(prettyMs);
61
+ var cluster__default = /*#__PURE__*/_interopDefaultLegacy(cluster);
62
+
63
+ const LoggingLevel = {
64
+ // Critical levels. (It will crash the process)
65
+ Fatal: 0,
66
+ Error: 1,
67
+ // Warning levels. (It just report warning information, not crash the process)
68
+ Warning: 2,
69
+ // Regular level and aliases.
70
+ Notice: 3,
71
+ Info: 3,
72
+ // Maybe sensitive levels. (In general, does not useful)
73
+ Http: 4,
74
+ Query: 4,
75
+ // Loud levels.
76
+ Verbose: 5,
77
+ Debug: 5
78
+ };
79
+
80
+ const colorizerMap = new _Map__default["default"](); // Helpers.
81
+
82
+ function createScheme(options) {
83
+ const nextIndex = colorizerMap.size;
84
+ const colorizer = chalk__default["default"].bgHex(options.background).hex(options.foreground);
85
+ colorizerMap.set(nextIndex, colorizer);
86
+ return nextIndex;
87
+ } // Color definitions.
88
+
89
+
90
+ const ColorValue = {
91
+ // Basic colors.
92
+ White: '#FFFFFF',
93
+ Gray: '#808080',
94
+ Black: '#000000',
95
+ // Specialized colors.
96
+ Critical: '#D63031',
97
+ Warning: '#FDCB6E',
98
+ Regular: '#0984E3',
99
+ Http: '#6AB04C',
100
+ Query: '#399AF3'
101
+ };
102
+ const ColorScheme = {
103
+ Critical: createScheme({
104
+ background: ColorValue.Critical,
105
+ foreground: ColorValue.Black
106
+ }),
107
+ Warning: createScheme({
108
+ background: ColorValue.Warning,
109
+ foreground: ColorValue.Black
110
+ }),
111
+ Regular: createScheme({
112
+ background: ColorValue.Regular,
113
+ foreground: ColorValue.White
114
+ }),
115
+ Http: createScheme({
116
+ background: ColorValue.Http,
117
+ foreground: ColorValue.Black
118
+ }),
119
+ Query: createScheme({
120
+ background: ColorValue.Query,
121
+ foreground: ColorValue.Black
122
+ }),
123
+ Loud: createScheme({
124
+ background: ColorValue.Black,
125
+ foreground: ColorValue.Gray
126
+ })
127
+ };
128
+ function getChalkOf(colorSet) {
129
+ return colorizerMap.get(colorSet) ?? chalk__default["default"];
130
+ }
131
+ /* eslint-enable no-use-before-define */
132
+
133
+ // Node.js built-in APIs.
134
+
135
+ const {
136
+ isTTY
137
+ } = process__default["default"].stdout;
138
+ const isNotOnCLI = !isTTY;
139
+ function decorateLabel(label, scheme) {
140
+ if (isNotOnCLI) {
141
+ return label;
142
+ }
143
+
144
+ const chalk = getChalkOf(scheme);
145
+ const decoratedLabel = chalk.bold(` ${label} `);
146
+ return decoratedLabel;
147
+ }
148
+
149
+ // Constants.
150
+ const rootPath = process__default["default"].cwd();
151
+ const conjunction = ` ${chalk__default["default"].blue('──')} `;
152
+
153
+ const splat = _Symbol$for__default["default"]('splat'); // Handler metadata.
154
+
155
+
156
+ const name$8 = 'error';
157
+ const level$8 = LoggingLevel.Error;
158
+ const label$8 = decorateLabel('ERROR', ColorScheme.Critical);
159
+
160
+ function mapLocationOfErrorThrown(filename) {
161
+ let target = path__default["default"].relative(rootPath, filename);
162
+
163
+ if (_startsWithInstanceProperty__default["default"](target).call(target, 'node_modules')) {
164
+ target = chalk__default["default"].gray(target).replace(/node_modules[\\/]([^\\/]+)(.*)/, (matches, moduleName, trailing) => `node_modules${path__default["default"].sep}${chalk__default["default"].bold.underline(moduleName)}${chalk__default["default"].gray(trailing)}` // eslint-disable-line max-len
165
+ );
166
+ } else {
167
+ target = `${chalk__default["default"].gray(path__default["default"].dirname(target) + path__default["default"].sep)}${chalk__default["default"].bold.underline(path__default["default"].basename(target))}`;
168
+ }
169
+
170
+ return target;
171
+ }
172
+
173
+ function handle$1(data) {
174
+ var _context, _context2, _context3;
175
+
176
+ const {
177
+ [splat]: [error] = []
178
+ } = data;
179
+
180
+ if (!(error instanceof Error)) {
181
+ return undefined;
182
+ }
183
+
184
+ const {
185
+ name,
186
+ message,
187
+ stack: rawStack = ''
188
+ } = error;
189
+
190
+ const stack = _mapInstanceProperty__default["default"](_context = _mapInstanceProperty__default["default"](_context2 = _mapInstanceProperty__default["default"](_context3 = _sliceInstanceProperty__default["default"](rawStack).call(rawStack, name.length + message.length + 3).split('\n')).call(_context3, line => line.replace(/^\s+at /g, ''))).call(_context2, line => path__default["default"].isAbsolute(line) ? `<anonymous>${conjunction}${mapLocationOfErrorThrown(line)}` : line)).call(_context, line => line.replace(/^(.+) \((.+)\)$/, (matches, contextName, rawLocation) => {
191
+ let location;
192
+
193
+ if (rawLocation === '<anonymous>') {
194
+ location = chalk__default["default"].gray(rawLocation);
195
+ } else {
196
+ const [filename, line, column] = rawLocation.split(':');
197
+
198
+ if (path__default["default"].isAbsolute(filename)) {
199
+ const target = mapLocationOfErrorThrown(path__default["default"].relative(rootPath, filename));
200
+ const trailing = chalk__default["default"].gray(`:${line}:${column}`);
201
+ location = target + trailing;
202
+ } else {
203
+ location = chalk__default["default"].gray(`https://github.com/${chalk__default["default"].bold.underline('nodejs')}/node/blob/${process.version}/lib/${filename}#L${line}`); // eslint-disable-line max-len
204
+ }
205
+ }
206
+
207
+ return `${contextName}${conjunction}${location}`;
208
+ })).join('\n');
209
+
210
+ const label = decorateLabel(name, ColorScheme.Critical);
211
+ const payload = `${message}\n\n${stack}\n`;
212
+ return {
213
+ label,
214
+ payload
215
+ };
216
+ }
217
+
218
+ var ErrorHandler = /*#__PURE__*/Object.freeze({
219
+ __proto__: null,
220
+ name: name$8,
221
+ level: level$8,
222
+ label: label$8,
223
+ 'default': handle$1
224
+ });
225
+
226
+ // Local helpers.
227
+
228
+ const name$7 = 'fatal';
229
+ const level$7 = LoggingLevel.Fatal;
230
+ const label$7 = decorateLabel('FATAL', ColorScheme.Critical);
231
+
232
+ var FatalHandler = /*#__PURE__*/Object.freeze({
233
+ __proto__: null,
234
+ name: name$7,
235
+ level: level$7,
236
+ label: label$7,
237
+ 'default': handle$1
238
+ });
239
+
240
+ // Local helpers.
241
+
242
+ const name$6 = 'warning';
243
+ const level$6 = LoggingLevel.Warning;
244
+ const label$6 = decorateLabel('WARNING', ColorScheme.Warning);
245
+ var warning = null;
246
+
247
+ var WarningHandler = /*#__PURE__*/Object.freeze({
248
+ __proto__: null,
249
+ name: name$6,
250
+ level: level$6,
251
+ label: label$6,
252
+ 'default': warning
253
+ });
254
+
255
+ // Local helpers.
256
+
257
+ const name$5 = 'notice';
258
+ const level$5 = LoggingLevel.Notice;
259
+ const label$5 = decorateLabel('NOTICE', ColorScheme.Regular);
260
+ var notice = null;
261
+
262
+ var NoticeHandler = /*#__PURE__*/Object.freeze({
263
+ __proto__: null,
264
+ name: name$5,
265
+ level: level$5,
266
+ label: label$5,
267
+ 'default': notice
268
+ });
269
+
270
+ // Local helpers.
271
+
272
+ const name$4 = 'info';
273
+ const level$4 = LoggingLevel.Info;
274
+ const label$4 = decorateLabel('INFO', ColorScheme.Regular);
275
+ var info = null;
276
+
277
+ var InfoHandler = /*#__PURE__*/Object.freeze({
278
+ __proto__: null,
279
+ name: name$4,
280
+ level: level$4,
281
+ label: label$4,
282
+ 'default': info
283
+ });
284
+
285
+ // Local helpers.
286
+
287
+ const name$3 = 'http';
288
+ const level$3 = LoggingLevel.Http;
289
+ const label$3 = decorateLabel('HTTP', ColorScheme.Http);
290
+ var http = null;
291
+
292
+ var HttpHandler = /*#__PURE__*/Object.freeze({
293
+ __proto__: null,
294
+ name: name$3,
295
+ level: level$3,
296
+ label: label$3,
297
+ 'default': http
298
+ });
299
+
300
+ // Highlight.js
301
+
302
+ // Handler metadata.
303
+ const name$2 = 'query';
304
+ const level$2 = LoggingLevel.Query;
305
+ const label$2 = decorateLabel('QUERY', ColorScheme.Query);
306
+ function handle(data) {
307
+ const payload = highlight__default["default"](data.message, {
308
+ language: 'sql'
309
+ });
310
+ return {
311
+ label: label$2,
312
+ payload
313
+ };
314
+ }
315
+
316
+ var QueryHandler = /*#__PURE__*/Object.freeze({
317
+ __proto__: null,
318
+ name: name$2,
319
+ level: level$2,
320
+ label: label$2,
321
+ 'default': handle
322
+ });
323
+
324
+ // Local helpers.
325
+
326
+ const name$1 = 'verbose';
327
+ const level$1 = LoggingLevel.Verbose;
328
+ const label$1 = decorateLabel('VERBOSE', ColorScheme.Loud);
329
+ var verbose = null;
330
+
331
+ var VerboseHandler = /*#__PURE__*/Object.freeze({
332
+ __proto__: null,
333
+ name: name$1,
334
+ level: level$1,
335
+ label: label$1,
336
+ 'default': verbose
337
+ });
338
+
339
+ // Local helpers.
340
+
341
+ const name = 'debug';
342
+ const level = LoggingLevel.Debug;
343
+ const label = decorateLabel('DEBUG', ColorScheme.Loud);
344
+ var debug = null;
345
+
346
+ var DebugHandler = /*#__PURE__*/Object.freeze({
347
+ __proto__: null,
348
+ name: name,
349
+ level: level,
350
+ label: label,
351
+ 'default': debug
352
+ });
353
+
354
+ // Handler implementations.
355
+ const handlers = [FatalHandler, ErrorHandler, WarningHandler, NoticeHandler, InfoHandler, HttpHandler, QueryHandler, VerboseHandler, DebugHandler];
356
+
357
+ var formatForCLI = winston.format.printf(data => {
358
+ const timestamp = chalk__default["default"].gray(moment__default["default"]().toISOString(true));
359
+
360
+ const handler = _findInstanceProperty__default["default"](handlers).call(handlers, ({
361
+ name
362
+ }) => name === data.level);
363
+
364
+ const fallback = {
365
+ label: handler?.label,
366
+ payload: data.message
367
+ };
368
+
369
+ const performHandle = handler?.default ?? (() => fallback); // Execute handler and then, get decorated payload.
370
+
371
+
372
+ const {
373
+ label,
374
+ payload
375
+ } = _Reflect$apply__default["default"](performHandle, undefined, [data]) ?? fallback;
376
+ let extraFingerprint;
377
+
378
+ if (handler?.level === LoggingLevel.Http) {
379
+ extraFingerprint = data.transactionId ? `(Transaction-ID = ${data.transactionId})` : `(Request-ID = ${rTracer__default["default"].id()})`;
380
+ }
381
+
382
+ return `${label} ${timestamp}${extraFingerprint ? ` ${extraFingerprint}` : ''}\n${payload}`;
383
+ });
384
+
385
+ // Node.js built-in APIs.
386
+
387
+ const ExecutionMode = {
388
+ DevelopmentMode: 'development',
389
+ ProductionMode: 'production'
390
+ };
391
+ const ClusteringMode = {
392
+ MasterProcess: 0,
393
+ WorkerProcess: 1
394
+ };
395
+ // Exportings.
396
+ const executionMode = process.env.NODE_ENV ?? ExecutionMode.DevelopmentMode;
397
+ cluster__default["default"].isPrimary ?? cluster__default["default"].isMaster ? ClusteringMode.MasterProcess : ClusteringMode.WorkerProcess;
398
+
399
+ // Node.js built-in APIs.
400
+
401
+ // Helpers.
402
+ function decorateStatusCode(statusCode) {
403
+ const groupOfCode = Math.floor(Number(statusCode) / 100) * 100;
404
+ const baseMessage = `${statusCode} ${http$1.STATUS_CODES[statusCode]}`;
405
+
406
+ switch (groupOfCode) {
407
+ case 200:
408
+ {
409
+ return chalk__default["default"].green(baseMessage);
410
+ }
411
+
412
+ case 300:
413
+ {
414
+ return chalk__default["default"].magenta(baseMessage);
415
+ }
416
+
417
+ case 400:
418
+ case 500:
419
+ {
420
+ return chalk__default["default"].red(baseMessage);
421
+ }
422
+
423
+ default:
424
+ {
425
+ return chalk__default["default"].gray(baseMessage);
426
+ }
427
+ }
428
+ }
429
+
430
+ function formatForMorgan(tokens, request, response) {
431
+ function _(token, ...subArgs) {
432
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
433
+ return tokens[token](request, response, ...subArgs);
434
+ } // Raw values.
435
+
436
+
437
+ const method = _('method');
438
+
439
+ const URL = _('url');
440
+
441
+ const httpVersion = `HTTP/${_('http-version')}`;
442
+ const statusCode = Number(_('status'));
443
+ const contentLength = Number(_('res', 'content-length') ?? -1);
444
+ const responseTime = Number(_('response-time') ?? -1); // Decorated values.
445
+
446
+ const $method = chalk__default["default"].bold(method);
447
+ const $version = chalk__default["default"].rgb(98, 177, 255)(httpVersion);
448
+ const $statusCode = decorateStatusCode(statusCode);
449
+ const $contentLength = contentLength >= 0 ? prettyBytes__default["default"](contentLength) : '? B';
450
+ const $responseTime = responseTime >= 0 ? prettyMs__default["default"](responseTime) : ''; // Additional information.
451
+
452
+ const metadata = `(${$contentLength}, ${$responseTime})`;
453
+ return [`→ ${$method} ${URL} ${$version}`, `← ${$version} ${$statusCode} ${metadata}`].join('\n');
454
+ }
455
+
456
+ var formatForMorgan$1 = executionMode === ExecutionMode.DevelopmentMode ? formatForMorgan : morgan__default["default"].combined;
457
+
458
+ var _context, _context2;
459
+
460
+ // Transports.
461
+ const {
462
+ Console: ConsoleTransport
463
+ } = winston__default["default"].transports; // Keys in order to access private properties.
464
+
465
+ const KeyOfInstance = _Symbol__default["default"]('@cichol/logger::classes/logger::Instance');
466
+
467
+ const KeyOfPassport = _Symbol__default["default"]('@cichol/logger::classes/logger::Passport');
468
+
469
+ class Logger {
470
+ #logger = winston__default["default"].createLogger({
471
+ levels: _filterInstanceProperty__default["default"](_context = _mapInstanceProperty__default["default"](_context2 = lodash__default["default"](handlers)).call(_context2, ({
472
+ name,
473
+ level
474
+ }) => [name, level])).call(_context, ([, level]) => typeof level === 'number').fromPairs().value(),
475
+ level: executionMode === ExecutionMode.ProductionMode ? 'http' : 'verbose',
476
+ transports: [new ConsoleTransport({
477
+ format: formatForCLI
478
+ })],
479
+ exitOnError: false
480
+ });
481
+ #morgan = morgan__default["default"](formatForMorgan$1, {
482
+ stream: new stream.PassThrough({
483
+ objectMode: true
484
+ }).on('data', data => {
485
+ this.log('http', _trimInstanceProperty__default["default"](data).call(data));
486
+ })
487
+ });
488
+
489
+ constructor(passport) {
490
+ if (passport !== KeyOfPassport) {
491
+ throw new ReferenceError('Logger class cannot be constructed in directly');
492
+ }
493
+ }
494
+
495
+ static get instance() {
496
+ if (this !== Logger) {
497
+ throw new ReferenceError('Logger class is not inheritable');
498
+ }
499
+
500
+ if (_Reflect$hasOwnMetadata__default["default"](KeyOfInstance, Logger)) {
501
+ return _Reflect$getOwnMetadata__default["default"](KeyOfInstance, Logger);
502
+ }
503
+
504
+ const instance = new Logger(KeyOfPassport);
505
+
506
+ try {
507
+ return instance;
508
+ } finally {
509
+ _Reflect$defineMetadata__default["default"](KeyOfInstance, instance, Logger);
510
+ }
511
+ }
512
+ /**
513
+ * Logging message with specific level.
514
+ *
515
+ * @param level
516
+ * @param message
517
+ * @param args Additional metadata.
518
+ */
519
+
520
+
521
+ log(...args) {
522
+ const logger = this.#logger;
523
+ const morgan = this.#morgan;
524
+
525
+ switch (true) {
526
+ case args.length >= 2 && args[0] instanceof http$1.IncomingMessage && args[1] instanceof http$1.ServerResponse:
527
+ {
528
+ const [request, response] = args;
529
+ return Promise__default["default"].fromCallback(callback => morgan(request, response, callback));
530
+ }
531
+
532
+ case args.length >= 1 && args[0] instanceof Error:
533
+ {
534
+ const [error, ...data] = args; // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
535
+
536
+ logger.log('error', error.message, error, ...data);
537
+ return undefined;
538
+ }
539
+
540
+ default:
541
+ {
542
+ const [level, message, ...data] = args; // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
543
+
544
+ logger.log(level, message, ...data);
545
+ return undefined;
546
+ }
547
+ }
548
+ }
549
+
550
+ }
551
+
552
+ var logger = Logger.instance;
553
+
554
+ module.exports = logger;