@cichol/logger 2.0.10 → 4.0.0-alpha.3

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