@niceties/logger 1.0.4 → 1.1.2

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 (40) hide show
  1. package/README.md +25 -23
  2. package/appender-utils/package.json +3 -0
  3. package/dist/appender-utils.cjs +24 -0
  4. package/dist/appender-utils.d.ts +2 -2
  5. package/dist/appender-utils.mjs +19 -0
  6. package/dist/appender-utils.umd.js +2 -0
  7. package/dist/appender-utils.umd.js.map +1 -0
  8. package/dist/console-appender.cjs +4 -4
  9. package/dist/console-appender.d.ts +1 -1
  10. package/dist/console-appender.mjs +4 -4
  11. package/dist/console-appender.umd.js +1 -1
  12. package/dist/console-appender.umd.js.map +1 -1
  13. package/dist/core.cjs +44 -49
  14. package/dist/core.d.ts +5 -9
  15. package/dist/core.mjs +45 -48
  16. package/dist/core.umd.js +1 -1
  17. package/dist/core.umd.js.map +1 -1
  18. package/dist/default-formatting.cjs +6 -2
  19. package/dist/default-formatting.d.ts +1 -0
  20. package/dist/default-formatting.mjs +6 -3
  21. package/dist/format-utils.cjs +6 -6
  22. package/dist/format-utils.d.ts +3 -3
  23. package/dist/format-utils.mjs +6 -6
  24. package/dist/global-appender.cjs +3 -21
  25. package/dist/global-appender.d.ts +3 -0
  26. package/dist/global-appender.mjs +3 -21
  27. package/dist/global-appender.umd.js +2 -0
  28. package/dist/global-appender.umd.js.map +1 -0
  29. package/dist/index.cjs +7 -5
  30. package/dist/index.d.ts +3 -3
  31. package/dist/index.mjs +10 -6
  32. package/dist/simple.cjs +8 -13
  33. package/dist/simple.d.ts +2 -6
  34. package/dist/simple.mjs +9 -12
  35. package/dist/simple.umd.js +1 -1
  36. package/dist/simple.umd.js.map +1 -1
  37. package/dist/types.d.ts +11 -1
  38. package/global-appender/package.json +3 -0
  39. package/package.json +23 -9
  40. package/dist/details/global-appender.d.ts +0 -3
package/README.md CHANGED
@@ -12,12 +12,6 @@ Experimental logger/reporter for async tasks.
12
12
 
13
13
  # Installation
14
14
 
15
- ```
16
- yarn add @niceties/logger
17
- ```
18
-
19
- or
20
-
21
15
  ```
22
16
  npm install --save @niceties/logger
23
17
  ```
@@ -47,11 +41,11 @@ try {
47
41
  Logger factory:
48
42
 
49
43
  ```typescript
50
- function createLogger<ErrorContext = Error>(...args: [] | [string | Identity] | [string, Identity]): ((message: string, loglevel?: LogLevel, context?: ErrorContext | undefined) => void) & {
51
- start(message: string, loglevel?: LogLevel | undefined): void;
52
- update(message: string, loglevel?: LogLevel | undefined): void;
53
- finish(message: string, loglevel?: LogLevel | undefined): void;
54
- withAppender(appender: Appender<ErrorContext>): ((message: string, loglevel?: LogLevel, context?: ErrorContext | undefined) => void) & any;
44
+ function createLogger<ErrorContext = Error>(...args: [] | [string | Identity | undefined] | [string, Identity]): ((message: string, loglevel?: LogLevel, context?: ErrorContext | undefined) => void) & {
45
+ start(message: string, loglevel?: LogLevel | undefined, context?: ErrorContext | undefined): void;
46
+ update(message: string, loglevel?: LogLevel | undefined, context?: ErrorContext | undefined): void;
47
+ finish(message: string, loglevel?: LogLevel | undefined, context?: ErrorContext | undefined): void;
48
+ appender(appender?: Appender<ErrorContext> | undefined): (message: LogMessage<ErrorContext>) => void;
55
49
  };
56
50
  ```
57
51
 
@@ -91,36 +85,36 @@ try {
91
85
  ```
92
86
 
93
87
  ```typescript
94
- start(message: string, loglevel?: LogLevel | undefined): void;
88
+ start(message: string, loglevel?: LogLevel | undefined, context?: ErrorContext | undefined): void;
95
89
  ```
96
90
 
97
91
  Emits start event inside a logger. If loglevel provided it will be remembered and used as default loglevel in subsequent events in the same logger instance. Default loglevel (if argument is not provided) is `info`.
98
92
 
99
93
  ```typescript
100
- update(message: string, loglevel?: LogLevel | undefined): void;
94
+ update(message: string, loglevel?: LogLevel | undefined, context?: ErrorContext | undefined): void;
101
95
  ```
102
96
 
103
97
  Emits update event. Can be used to inform user that we are doing something else in the same async task. loglevel used to redefine default loglevel.
104
98
 
105
99
  ```typescript
106
- finish(message: string, loglevel?: LogLevel | undefined): void;
100
+ finish(message: string, loglevel?: LogLevel | undefined, context?: ErrorContext | undefined): void;
107
101
  ```
108
102
 
109
103
  Emits finish event. Can be used to inform user that task finished. loglevel is optional and equals initial loglevel if omitted.
110
104
 
111
105
  ```typescript
112
- const log = createLogger()
113
- .withAppender(someFancyAppender);
106
+ const logger = createLogger();
107
+ logger.appender(someFancyAppender);
114
108
  ```
115
109
 
116
- Adds new appender for the specific inctance of logger. It is not mandatory to use the return value because no new instance of logger created and appender added to the existing instance.
110
+ Sets different appender for the specific instance of the logger.
117
111
 
118
112
  ```typescript
119
- const log = createLogger()
120
- .withFilter(predicate);
113
+ const logger = createLogger();
114
+ const appender = logger.appender();
121
115
  ```
122
116
 
123
- Install filter on previosly installed appenders. It is not mandatory to use the return value because no new instance of logger created and filter added to the existing instance.
117
+ Returns current appender for the specific instance of the logger.
124
118
 
125
119
  ## Log levels
126
120
 
@@ -226,20 +220,28 @@ Default subpackage `'@niceties/logger'` exports types, `createLogger()` factory
226
220
 
227
221
  Subpackage `'@niceties/logger/default-formatting'` exports formatting constants that is part of default configuration of the console appender.
228
222
 
229
- Subpackage `'@niceties/logger/core'` exports `createLogger()` factory and `appender()`, `combineAppenders()`, `filterMessages()` functions.
223
+ Subpackage `'@niceties/logger/core'` exports `createLogger()` factory.
230
224
 
231
- Subpackage `'@niceties/logger/simple'` exports `createLogger()` factory and `appender()`, `combineAppenders()`, `filterMessages()` function.
225
+ Subpackage `'@niceties/logger/simple'` exports `createLogger()` factory.
232
226
 
233
227
  Subpackage `'@niceties/logger/console-appender'` exports `createConsoleAppender()` factory.
234
228
 
235
229
  Subpackage `'@niceties/logger/format-utils'` exports `createFormatter()` and `terminalSupportsUnicode()` functions.
236
230
 
231
+ Subpackage `'@niceties/logger/global-appender'` exports `appender()` and `globalAppender`.
232
+
233
+ Subpackage `'@niceties/logger/appender-utils'` exports `combineAppenders()` and `filterMessages()`.
234
+
237
235
  `simple` (default), `core` and `console-appender` exists as umd packages as well but probably require some effort to consume them.
238
236
 
239
237
  # Prior art
240
238
 
241
239
  - [loglevel](https://github.com/pimterry/loglevel)
240
+ - [winston](https://github.com/winstonjs/winston)
241
+ - [node-bunyan](https://github.com/trentm/node-bunyan)
242
+ - [log4js](https://github.com/log4js-node/log4js-node)
243
+ - [pino](https://github.com/pinojs/pino)
242
244
 
243
245
  # License
244
246
 
245
- [MIT](./LICENSE)
247
+ [MIT](./LICENSE)
@@ -0,0 +1,3 @@
1
+ {
2
+ "types": "../dist/appender-utils.d.ts"
3
+ }
@@ -0,0 +1,24 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ const filterMessages = (predicate, appender, api) => {
6
+ return Object.assign(function (logMessage) {
7
+ if (predicate(logMessage)) {
8
+ appender(logMessage);
9
+ }
10
+ }, api);
11
+ };
12
+ const combineAppenders = (...appenders) => {
13
+ return (message) => {
14
+ for (const appender of appenders) {
15
+ try {
16
+ appender(message);
17
+ }
18
+ catch (e) { /* eat the error */ }
19
+ }
20
+ };
21
+ };
22
+
23
+ exports.combineAppenders = combineAppenders;
24
+ exports.filterMessages = filterMessages;
@@ -1,3 +1,3 @@
1
1
  import { Appender, LogMessage } from './types';
2
- export declare function filterMessages<ErrorContext = Error>(predicate: (logMessage: LogMessage<ErrorContext>) => boolean, appender: Appender<ErrorContext>): Appender<ErrorContext>;
3
- export declare function combineAppenders<ErrorContext = Error>(...appenders: Appender<ErrorContext>[]): Appender<ErrorContext>;
2
+ export declare const filterMessages: <ErrorContext = Error, Api extends object = object>(predicate: (logMessage: LogMessage<ErrorContext>) => boolean, appender: Appender<ErrorContext>, api?: Api | undefined) => Appender<ErrorContext> & Api;
3
+ export declare const combineAppenders: <ErrorContext = Error>(...appenders: Appender<ErrorContext>[]) => Appender<ErrorContext>;
@@ -0,0 +1,19 @@
1
+ const filterMessages = (predicate, appender, api) => {
2
+ return Object.assign(function (logMessage) {
3
+ if (predicate(logMessage)) {
4
+ appender(logMessage);
5
+ }
6
+ }, api);
7
+ };
8
+ const combineAppenders = (...appenders) => {
9
+ return (message) => {
10
+ for (const appender of appenders) {
11
+ try {
12
+ appender(message);
13
+ }
14
+ catch (e) { /* eat the error */ }
15
+ }
16
+ };
17
+ };
18
+
19
+ export { combineAppenders, filterMessages };
@@ -0,0 +1,2 @@
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).nicetiesLoggerAppenderUtils={})}(this,(function(e){"use strict";e.combineAppenders=(...e)=>t=>{for(const o of e)try{o(t)}catch(e){}},e.filterMessages=(e,t,o)=>Object.assign((function(o){e(o)&&t(o)}),o),Object.defineProperty(e,"__esModule",{value:!0})}));
2
+ //# sourceMappingURL=appender-utils.umd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appender-utils.umd.js","sources":["../src/appender-utils.ts"],"sourcesContent":["import { Appender, LogMessage } from './types';\n\nexport const filterMessages = <ErrorContext = Error, Api extends object = object>(predicate: (logMessage: LogMessage<ErrorContext>) => boolean, appender: Appender<ErrorContext>, api?: Api): Appender<ErrorContext> & Api => {\n return Object.assign(function(logMessage: LogMessage<ErrorContext>) {\n if (predicate(logMessage)) {\n appender(logMessage);\n }\n }, api);\n};\n\nexport const combineAppenders = <ErrorContext = Error>(...appenders: Appender<ErrorContext>[]): Appender<ErrorContext> => {\n return (message: LogMessage<ErrorContext>) => {\n for(const appender of appenders) {\n try {\n appender(message);\n } catch(e) { /* eat the error */ }\n }\n };\n};\n"],"names":["appenders","message","appender","e","predicate","api","Object","assign","logMessage"],"mappings":"sRAUgC,IAA0BA,IAC9CC,IACJ,IAAI,MAAMC,KAAYF,EAClB,IACIE,EAASD,GACX,MAAME,uBAbU,CAAoDC,EAA8DF,EAAkCG,IACvKC,OAAOC,QAAO,SAASC,GACtBJ,EAAUI,IACVN,EAASM,KAEdH"}
@@ -2,10 +2,10 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- function createConsoleAppender(formatter) {
6
- return function consoleAppender({ loglevel, action, message }) {
7
- console.log(formatter(message, loglevel, action === 2 /* finish */));
5
+ const createConsoleAppender = (formatter) => {
6
+ return (message) => {
7
+ console.log(formatter(message, message.action === 2 /* finish */));
8
8
  };
9
- }
9
+ };
10
10
 
11
11
  exports.createConsoleAppender = createConsoleAppender;
@@ -1,2 +1,2 @@
1
1
  import { Formatter, LogMessage } from './types';
2
- export declare function createConsoleAppender(formatter: Formatter): ({ loglevel, action, message }: LogMessage) => void;
2
+ export declare const createConsoleAppender: (formatter: Formatter) => (message: LogMessage) => void;
@@ -1,7 +1,7 @@
1
- function createConsoleAppender(formatter) {
2
- return function consoleAppender({ loglevel, action, message }) {
3
- console.log(formatter(message, loglevel, action === 2 /* finish */));
1
+ const createConsoleAppender = (formatter) => {
2
+ return (message) => {
3
+ console.log(formatter(message, message.action === 2 /* finish */));
4
4
  };
5
- }
5
+ };
6
6
 
7
7
  export { createConsoleAppender };
@@ -1,2 +1,2 @@
1
- !function(e,o){"object"==typeof exports&&"undefined"!=typeof module?o(exports):"function"==typeof define&&define.amd?define(["exports"],o):o((e="undefined"!=typeof globalThis?globalThis:e||self).nicetiesLoggerConsoleAppender={})}(this,(function(e){"use strict";e.createConsoleAppender=function(e){return function({loglevel:o,action:n,message:t}){console.log(e(t,o,2===n))}},Object.defineProperty(e,"__esModule",{value:!0})}));
1
+ !function(e,o){"object"==typeof exports&&"undefined"!=typeof module?o(exports):"function"==typeof define&&define.amd?define(["exports"],o):o((e="undefined"!=typeof globalThis?globalThis:e||self).nicetiesLoggerConsoleAppender={})}(this,(function(e){"use strict";e.createConsoleAppender=e=>o=>{console.log(e(o,2===o.action))},Object.defineProperty(e,"__esModule",{value:!0})}));
2
2
  //# sourceMappingURL=console-appender.umd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"console-appender.umd.js","sources":["../src/console-appender.ts"],"sourcesContent":["import { Action, Formatter, LogMessage } from './types';\n\nexport function createConsoleAppender(formatter: Formatter) {\n return function consoleAppender({loglevel, action, message}: LogMessage) {\n console.log(formatter(message, loglevel, action === Action.finish));\n };\n}\n"],"names":["formatter","loglevel","action","message","console","log"],"mappings":"sSAEsCA,GAClC,OAAO,UAAyBC,SAACA,EAAQC,OAAEA,EAAMC,QAAEA,IAC/CC,QAAQC,IAAIL,EAAUG,EAASF,MAAUC"}
1
+ {"version":3,"file":"console-appender.umd.js","sources":["../src/console-appender.ts"],"sourcesContent":["import { Action, Formatter, LogMessage } from './types';\n\nexport const createConsoleAppender = (formatter: Formatter) => {\n return (message: LogMessage) => {\n console.log(formatter(message, message.action === Action.finish));\n };\n};\n"],"names":["formatter","message","console","log","action"],"mappings":"6RAEsCA,GAC1BC,IACJC,QAAQC,IAAIH,EAAUC,MAASA,EAAQG"}
package/dist/core.cjs CHANGED
@@ -5,36 +5,63 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  var globalAppender = require('./global-appender.cjs');
6
6
 
7
7
  let globalInputId = 0;
8
- function createLogger(...args) {
8
+ const getOptions = (options) => {
9
+ var _a, _b;
10
+ let parentId, tag;
11
+ if (options.length === 1) {
12
+ if (typeof options[0] === 'string') {
13
+ tag = options[0];
14
+ }
15
+ else {
16
+ parentId = (_a = options[0]) === null || _a === void 0 ? void 0 : _a.id;
17
+ }
18
+ }
19
+ else if (options.length === 2) {
20
+ tag = options[0];
21
+ parentId = (_b = options[1]) === null || _b === void 0 ? void 0 : _b.id;
22
+ }
23
+ return { parentId, tag };
24
+ };
25
+ const createLogger = (...args) => {
9
26
  let initialLogLevel = 1 /* info */;
27
+ let myAppender = (message) => { globalAppender.globalAppender && globalAppender.globalAppender(message); };
10
28
  const inputId = globalInputId++;
11
29
  const { tag, parentId } = getOptions(args);
12
- let myAppender = (message) => { globalAppender.globalAppender && globalAppender.globalAppender(message); };
13
- const loggerInstance = Object.assign(function log(message, loglevel = 1 /* info */, context) {
30
+ const append = (message, action, loglevel, context) => {
31
+ myAppender && myAppender({
32
+ action,
33
+ inputId,
34
+ message,
35
+ loglevel,
36
+ tag,
37
+ parentId,
38
+ ref,
39
+ context
40
+ });
41
+ };
42
+ const loggerInstance = Object.assign((message, loglevel = 1 /* info */, context) => {
14
43
  append(message, 3 /* log */, loglevel, context);
15
44
  }, {
16
45
  // Fine to be started multiple times
17
- start(message, loglevel) {
46
+ start(message, loglevel, context) {
18
47
  if (loglevel !== undefined) {
19
48
  initialLogLevel = loglevel;
20
49
  }
21
- append(message, 0 /* start */, initialLogLevel);
50
+ append(message, 0 /* start */, initialLogLevel, context);
22
51
  },
23
52
  // Fine to be updated multiple times
24
- update(message, loglevel) {
25
- append(message, 1 /* update */, loglevel !== null && loglevel !== void 0 ? loglevel : initialLogLevel);
53
+ update(message, loglevel, context) {
54
+ append(message, 1 /* update */, loglevel !== null && loglevel !== void 0 ? loglevel : initialLogLevel, context);
26
55
  },
27
56
  // Fine to be finished multiple times
28
- finish(message, loglevel) {
29
- append(message, 2 /* finish */, loglevel !== null && loglevel !== void 0 ? loglevel : initialLogLevel);
30
- },
31
- withFilter(predicate) {
32
- myAppender = globalAppender.filterMessages(predicate, myAppender);
33
- return loggerInstance;
57
+ finish(message, loglevel, context) {
58
+ append(message, 2 /* finish */, loglevel !== null && loglevel !== void 0 ? loglevel : initialLogLevel, context);
34
59
  },
35
- withAppender(appender) {
36
- myAppender = globalAppender.combineAppenders(myAppender, appender);
37
- return loggerInstance;
60
+ appender(appender) {
61
+ if (appender !== undefined) {
62
+ myAppender = appender;
63
+ }
64
+ return myAppender;
38
65
  }
39
66
  });
40
67
  Object.defineProperty(loggerInstance, 'id', {
@@ -43,38 +70,6 @@ function createLogger(...args) {
43
70
  });
44
71
  const ref = new WeakRef(loggerInstance);
45
72
  return loggerInstance;
46
- function append(message, action, loglevel, context) {
47
- myAppender({
48
- action,
49
- inputId,
50
- message,
51
- loglevel,
52
- tag,
53
- parentId,
54
- ref,
55
- context
56
- });
57
- }
58
- }
59
- function getOptions(options) {
60
- var _a, _b;
61
- let parentId, tag;
62
- if (options.length === 1) {
63
- if (typeof options[0] === 'string') {
64
- tag = options[0];
65
- }
66
- else {
67
- parentId = (_a = options[0]) === null || _a === void 0 ? void 0 : _a.id;
68
- }
69
- }
70
- else if (options.length === 2) {
71
- tag = options[0];
72
- parentId = (_b = options[1]) === null || _b === void 0 ? void 0 : _b.id;
73
- }
74
- return { parentId, tag };
75
- }
73
+ };
76
74
 
77
- exports.appender = globalAppender.appender;
78
- exports.combineAppenders = globalAppender.combineAppenders;
79
- exports.filterMessages = globalAppender.filterMessages;
80
75
  exports.createLogger = createLogger;
package/dist/core.d.ts CHANGED
@@ -1,11 +1,7 @@
1
- import { combineAppenders, filterMessages } from './appender-utils';
2
- import { appender } from './details/global-appender';
3
1
  import { Appender, LogLevel, LogMessage, Identity } from './types';
4
- export declare function createLogger<ErrorContext = Error>(...args: [] | [string | Identity | undefined] | [string, Identity]): ((message: string, loglevel?: LogLevel, context?: ErrorContext | undefined) => void) & {
5
- start(message: string, loglevel?: LogLevel | undefined): void;
6
- update(message: string, loglevel?: LogLevel | undefined): void;
7
- finish(message: string, loglevel?: LogLevel | undefined): void;
8
- withFilter(predicate: (logMessage: LogMessage<ErrorContext>) => boolean): ((message: string, loglevel?: LogLevel, context?: ErrorContext | undefined) => void) & any;
9
- withAppender(appender: Appender<ErrorContext>): ((message: string, loglevel?: LogLevel, context?: ErrorContext | undefined) => void) & any;
2
+ export declare const createLogger: <ErrorContext = Error>(...args: [] | [string | Identity | undefined] | [string, Identity]) => ((message: string, loglevel?: LogLevel, context?: ErrorContext | undefined) => void) & {
3
+ start(message: string, loglevel?: LogLevel | undefined, context?: ErrorContext | undefined): void;
4
+ update(message: string, loglevel?: LogLevel | undefined, context?: ErrorContext | undefined): void;
5
+ finish(message: string, loglevel?: LogLevel | undefined, context?: ErrorContext | undefined): void;
6
+ appender(appender?: Appender<ErrorContext> | undefined): (message: LogMessage<ErrorContext>) => void;
10
7
  };
11
- export { appender, combineAppenders, filterMessages };
package/dist/core.mjs CHANGED
@@ -1,37 +1,63 @@
1
- import { g as globalAppender, f as filterMessages, c as combineAppenders } from './global-appender.mjs';
2
- export { a as appender, c as combineAppenders, f as filterMessages } from './global-appender.mjs';
1
+ import { globalAppender } from './global-appender.mjs';
3
2
 
4
3
  let globalInputId = 0;
5
- function createLogger(...args) {
4
+ const getOptions = (options) => {
5
+ var _a, _b;
6
+ let parentId, tag;
7
+ if (options.length === 1) {
8
+ if (typeof options[0] === 'string') {
9
+ tag = options[0];
10
+ }
11
+ else {
12
+ parentId = (_a = options[0]) === null || _a === void 0 ? void 0 : _a.id;
13
+ }
14
+ }
15
+ else if (options.length === 2) {
16
+ tag = options[0];
17
+ parentId = (_b = options[1]) === null || _b === void 0 ? void 0 : _b.id;
18
+ }
19
+ return { parentId, tag };
20
+ };
21
+ const createLogger = (...args) => {
6
22
  let initialLogLevel = 1 /* info */;
23
+ let myAppender = (message) => { globalAppender && globalAppender(message); };
7
24
  const inputId = globalInputId++;
8
25
  const { tag, parentId } = getOptions(args);
9
- let myAppender = (message) => { globalAppender && globalAppender(message); };
10
- const loggerInstance = Object.assign(function log(message, loglevel = 1 /* info */, context) {
26
+ const append = (message, action, loglevel, context) => {
27
+ myAppender && myAppender({
28
+ action,
29
+ inputId,
30
+ message,
31
+ loglevel,
32
+ tag,
33
+ parentId,
34
+ ref,
35
+ context
36
+ });
37
+ };
38
+ const loggerInstance = Object.assign((message, loglevel = 1 /* info */, context) => {
11
39
  append(message, 3 /* log */, loglevel, context);
12
40
  }, {
13
41
  // Fine to be started multiple times
14
- start(message, loglevel) {
42
+ start(message, loglevel, context) {
15
43
  if (loglevel !== undefined) {
16
44
  initialLogLevel = loglevel;
17
45
  }
18
- append(message, 0 /* start */, initialLogLevel);
46
+ append(message, 0 /* start */, initialLogLevel, context);
19
47
  },
20
48
  // Fine to be updated multiple times
21
- update(message, loglevel) {
22
- append(message, 1 /* update */, loglevel !== null && loglevel !== void 0 ? loglevel : initialLogLevel);
49
+ update(message, loglevel, context) {
50
+ append(message, 1 /* update */, loglevel !== null && loglevel !== void 0 ? loglevel : initialLogLevel, context);
23
51
  },
24
52
  // Fine to be finished multiple times
25
- finish(message, loglevel) {
26
- append(message, 2 /* finish */, loglevel !== null && loglevel !== void 0 ? loglevel : initialLogLevel);
27
- },
28
- withFilter(predicate) {
29
- myAppender = filterMessages(predicate, myAppender);
30
- return loggerInstance;
53
+ finish(message, loglevel, context) {
54
+ append(message, 2 /* finish */, loglevel !== null && loglevel !== void 0 ? loglevel : initialLogLevel, context);
31
55
  },
32
- withAppender(appender) {
33
- myAppender = combineAppenders(myAppender, appender);
34
- return loggerInstance;
56
+ appender(appender) {
57
+ if (appender !== undefined) {
58
+ myAppender = appender;
59
+ }
60
+ return myAppender;
35
61
  }
36
62
  });
37
63
  Object.defineProperty(loggerInstance, 'id', {
@@ -40,35 +66,6 @@ function createLogger(...args) {
40
66
  });
41
67
  const ref = new WeakRef(loggerInstance);
42
68
  return loggerInstance;
43
- function append(message, action, loglevel, context) {
44
- myAppender({
45
- action,
46
- inputId,
47
- message,
48
- loglevel,
49
- tag,
50
- parentId,
51
- ref,
52
- context
53
- });
54
- }
55
- }
56
- function getOptions(options) {
57
- var _a, _b;
58
- let parentId, tag;
59
- if (options.length === 1) {
60
- if (typeof options[0] === 'string') {
61
- tag = options[0];
62
- }
63
- else {
64
- parentId = (_a = options[0]) === null || _a === void 0 ? void 0 : _a.id;
65
- }
66
- }
67
- else if (options.length === 2) {
68
- tag = options[0];
69
- parentId = (_b = options[1]) === null || _b === void 0 ? void 0 : _b.id;
70
- }
71
- return { parentId, tag };
72
- }
69
+ };
73
70
 
74
71
  export { createLogger };
package/dist/core.umd.js CHANGED
@@ -1,2 +1,2 @@
1
- !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).nicetiesLoggerCore={})}(this,(function(t){"use strict";function e(t,e){return function(n){t(n)&&e(n)}}function n(...t){return e=>{for(const n of t)try{n(e)}catch(t){}}}let o;let i=0;t.appender=function(t){return void 0!==t&&(o=t),o},t.combineAppenders=n,t.createLogger=function(...t){let u=1;const f=i++,{tag:l,parentId:r}=function(t){var e,n;let o,i;1===t.length?"string"==typeof t[0]?i=t[0]:o=null===(e=t[0])||void 0===e?void 0:e.id:2===t.length&&(i=t[0],o=null===(n=t[1])||void 0===n?void 0:n.id);return{parentId:o,tag:i}}(t);let c=t=>{o&&o(t)};const d=Object.assign((function(t,e=1,n){a(t,3,e,n)}),{start(t,e){void 0!==e&&(u=e),a(t,0,u)},update(t,e){a(t,1,null!=e?e:u)},finish(t,e){a(t,2,null!=e?e:u)},withFilter:t=>(c=e(t,c),d),withAppender:t=>(c=n(c,t),d)});Object.defineProperty(d,"id",{value:f,writable:!1});const s=new WeakRef(d);return d;function a(t,e,n,o){c({action:e,inputId:f,message:t,loglevel:n,tag:l,parentId:r,ref:s,context:o})}},t.filterMessages=e,Object.defineProperty(t,"__esModule",{value:!0})}));
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("./global-appender")):"function"==typeof define&&define.amd?define(["exports","./global-appender"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).nicetiesLoggerCore={},e.nicetiesLoggerGlobalAppender)}(this,(function(e,t){"use strict";let n=0;e.createLogger=(...e)=>{let o=1,l=e=>{t.globalAppender&&t.globalAppender(e)};const i=n++,{tag:d,parentId:a}=(e=>{var t,n;let o,l;return 1===e.length?"string"==typeof e[0]?l=e[0]:o=null===(t=e[0])||void 0===t?void 0:t.id:2===e.length&&(l=e[0],o=null===(n=e[1])||void 0===n?void 0:n.id),{parentId:o,tag:l}})(e),r=(e,t,n,o)=>{l&&l({action:t,inputId:i,message:e,loglevel:n,tag:d,parentId:a,ref:u,context:o})},p=Object.assign(((e,t=1,n)=>{r(e,3,t,n)}),{start(e,t,n){void 0!==t&&(o=t),r(e,0,o,n)},update(e,t,n){r(e,1,null!=t?t:o,n)},finish(e,t,n){r(e,2,null!=t?t:o,n)},appender:e=>(void 0!==e&&(l=e),l)});Object.defineProperty(p,"id",{value:i,writable:!1});const u=new WeakRef(p);return p},Object.defineProperty(e,"__esModule",{value:!0})}));
2
2
  //# sourceMappingURL=core.umd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"core.umd.js","sources":["../src/appender-utils.ts","../src/details/global-appender.ts","../src/core.ts"],"sourcesContent":["import { Appender, LogMessage } from './types';\n\nexport function filterMessages<ErrorContext = Error>(predicate: (logMessage: LogMessage<ErrorContext>) => boolean, appender: Appender<ErrorContext> ): Appender<ErrorContext> {\n return function(logMessage: LogMessage<ErrorContext>) {\n if (predicate(logMessage)) {\n appender(logMessage);\n }\n };\n}\n\nexport function combineAppenders<ErrorContext = Error>(...appenders: Appender<ErrorContext>[]): Appender<ErrorContext> {\n return (message: LogMessage<ErrorContext>) => {\n for(const appender of appenders) {\n try {\n appender(message);\n } catch(e) { /* eat the error */ }\n }\n };\n}","import { Appender } from '../types';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport let globalAppender: Appender<any>;\n\nexport function appender<ErrorContext = Error>(appender?: Appender<ErrorContext>) {\n if (appender !== undefined) {\n globalAppender = appender;\n }\n return globalAppender;\n}\n","import { combineAppenders, filterMessages } from './appender-utils';\nimport { globalAppender, appender } from './details/global-appender';\nimport { Action, Appender, LogLevel, LogMessage, Identity } from './types';\n\nlet globalInputId = 0;\n\nexport function createLogger<ErrorContext = Error>(...args: [] | [string | Identity | undefined] | [string, Identity]) {\n let initialLogLevel: number = LogLevel.info;\n \n const inputId = globalInputId++;\n \n const { tag, parentId } = getOptions(args);\n \n let myAppender = (message: LogMessage<ErrorContext>) => { globalAppender && globalAppender(message); };\n\n const loggerInstance = Object.assign(\n function log(message: string, loglevel: LogLevel = LogLevel.info, context?: ErrorContext) {\n append(message, Action.log, loglevel, context);\n }, {\n // Fine to be started multiple times\n start(message: string, loglevel?: LogLevel) {\n if (loglevel !== undefined) {\n initialLogLevel = loglevel;\n }\n append(message, Action.start, initialLogLevel);\n },\n // Fine to be updated multiple times\n update(message: string, loglevel?: LogLevel) {\n append(message, Action.update, loglevel ?? initialLogLevel);\n },\n // Fine to be finished multiple times\n finish(message: string, loglevel?: LogLevel) {\n append(message, Action.finish, loglevel ?? initialLogLevel);\n },\n withFilter(predicate: (logMessage: LogMessage<ErrorContext>) => boolean) {\n myAppender = filterMessages(predicate, myAppender);\n return loggerInstance;\n },\n withAppender(appender: Appender<ErrorContext>) {\n myAppender = combineAppenders(myAppender, appender);\n return loggerInstance;\n }\n }\n );\n\n Object.defineProperty(loggerInstance, 'id', {\n value: inputId,\n writable: false\n });\n\n const ref = new WeakRef(loggerInstance);\n\n return loggerInstance;\n\n function append(message: string, action: Action, loglevel: LogLevel, context?: ErrorContext) {\n myAppender({\n action,\n inputId,\n message,\n loglevel,\n tag,\n parentId,\n ref,\n context\n } as LogMessage<ErrorContext>);\n }\n}\n\nfunction getOptions(options: [] | [string | Identity | undefined] | [string, Identity]): { tag?: string, parentId?: number } {\n let parentId, tag;\n if (options.length === 1) {\n if (typeof options[0] === 'string') {\n tag = options[0];\n } else {\n parentId = options[0]?.id;\n }\n } else if (options.length === 2) {\n tag = options[0];\n parentId = options[1]?.id;\n }\n return { parentId, tag };\n}\n\nexport { appender, combineAppenders, filterMessages };"],"names":["filterMessages","predicate","appender","logMessage","combineAppenders","appenders","message","e","globalAppender","globalInputId","undefined","args","initialLogLevel","inputId","tag","parentId","options","length","id","getOptions","myAppender","loggerInstance","Object","assign","loglevel","context","append","start","update","finish","withFilter","withAppender","defineProperty","value","writable","ref","WeakRef","action"],"mappings":"mQAEgBA,EAAqCC,EAA8DC,GAC/G,OAAO,SAASC,GACRF,EAAUE,IACVD,EAASC,aAKLC,KAA0CC,GACtD,OAAQC,IACJ,IAAI,MAAMJ,KAAYG,EAClB,IACIH,EAASI,GACX,MAAMC,MCZb,IAAIC,ECCX,IAAIC,EAAgB,sBDC2BP,GAI3C,YAHiBQ,IAAbR,IACAM,EAAiBN,GAEdM,mDCH2CG,GAClD,IAAIC,IAEJ,MAAMC,EAAUJ,KAEVK,IAAEA,EAAGC,SAAEA,GAyDjB,SAAoBC,WAChB,IAAID,EAAUD,EACS,IAAnBE,EAAQC,OACkB,iBAAfD,EAAQ,GACfF,EAAME,EAAQ,GAEdD,YAAWC,EAAQ,yBAAIE,GAED,IAAnBF,EAAQC,SACfH,EAAME,EAAQ,GACdD,YAAWC,EAAQ,yBAAIE,IAE3B,MAAO,CAAEH,SAAAA,EAAUD,IAAAA,GArEOK,CAAWR,GAErC,IAAIS,EAAcd,IAAwCE,GAAkBA,EAAeF,IAE3F,MAAMe,EAAiBC,OAAOC,QAC1B,SAAajB,EAAiBkB,IAAoCC,GAC9DC,EAAOpB,IAAqBkB,EAAUC,KACvC,CAECE,MAAMrB,EAAiBkB,QACFd,IAAbc,IACAZ,EAAkBY,GAEtBE,EAAOpB,IAAuBM,IAGlCgB,OAAOtB,EAAiBkB,GACpBE,EAAOpB,IAAwBkB,MAAAA,EAAAA,EAAYZ,IAG/CiB,OAAOvB,EAAiBkB,GACpBE,EAAOpB,IAAwBkB,MAAAA,EAAAA,EAAYZ,IAE/CkB,WAAW7B,IACPmB,EAAapB,EAAeC,EAAWmB,GAChCC,GAEXU,aAAa7B,IACTkB,EAAahB,EAAiBgB,EAAYlB,GACnCmB,KAKnBC,OAAOU,eAAeX,EAAgB,KAAM,CACxCY,MAAOpB,EACPqB,UAAU,IAGd,MAAMC,EAAM,IAAIC,QAAQf,GAExB,OAAOA,EAEP,SAASK,EAAOpB,EAAiB+B,EAAgBb,EAAoBC,GACjEL,EAAW,CACPiB,OAAAA,EACAxB,QAAAA,EACAP,QAAAA,EACAkB,SAAAA,EACAV,IAAAA,EACAC,SAAAA,EACAoB,IAAAA,EACAV,QAAAA"}
1
+ {"version":3,"file":"core.umd.js","sources":["../src/core.ts"],"sourcesContent":["import { globalAppender } from './global-appender';\nimport { Action, Appender, LogLevel, LogMessage, Identity } from './types';\n\nlet globalInputId = 0;\n\nconst getOptions = (options: [] | [string | Identity | undefined] | [string, Identity]): { tag?: string, parentId?: number } => {\n let parentId, tag;\n if (options.length === 1) {\n if (typeof options[0] === 'string') {\n tag = options[0];\n } else {\n parentId = options[0]?.id;\n }\n } else if (options.length === 2) {\n tag = options[0];\n parentId = options[1]?.id;\n }\n return { parentId, tag };\n};\n\nexport const createLogger = <ErrorContext = Error>(...args: [] | [string | Identity | undefined] | [string, Identity]) => {\n let initialLogLevel: number = LogLevel.info;\n\n let myAppender = (message: LogMessage<ErrorContext>) => { globalAppender && globalAppender(message); };\n \n const inputId = globalInputId++;\n \n const { tag, parentId } = getOptions(args);\n \n const append = (message: string, action: Action, loglevel: LogLevel, context?: ErrorContext) => {\n myAppender && myAppender({\n action,\n inputId,\n message,\n loglevel,\n tag,\n parentId,\n ref,\n context\n } as LogMessage<ErrorContext>);\n };\n\n const loggerInstance = Object.assign(\n (message: string, loglevel: LogLevel = LogLevel.info, context?: ErrorContext) => {\n append(message, Action.log, loglevel, context);\n }, {\n // Fine to be started multiple times\n start(message: string, loglevel?: LogLevel, context?: ErrorContext) {\n if (loglevel !== undefined) {\n initialLogLevel = loglevel;\n }\n append(message, Action.start, initialLogLevel, context);\n },\n // Fine to be updated multiple times\n update(message: string, loglevel?: LogLevel, context?: ErrorContext) {\n append(message, Action.update, loglevel ?? initialLogLevel, context);\n },\n // Fine to be finished multiple times\n finish(message: string, loglevel?: LogLevel, context?: ErrorContext) {\n append(message, Action.finish, loglevel ?? initialLogLevel, context);\n },\n appender(appender?: Appender<ErrorContext>) {\n if (appender !== undefined) {\n myAppender = appender;\n }\n return myAppender;\n }\n }\n );\n\n Object.defineProperty(loggerInstance, 'id', {\n value: inputId,\n writable: false\n });\n\n const ref = new WeakRef(loggerInstance);\n\n return loggerInstance;\n};\n"],"names":["globalInputId","args","initialLogLevel","myAppender","message","globalAppender","inputId","tag","parentId","options","length","id","getOptions","append","action","loglevel","context","ref","loggerInstance","Object","assign","start","undefined","update","finish","appender","defineProperty","value","writable","WeakRef"],"mappings":"4UAGA,IAAIA,EAAgB,iBAiBQ,IAA0BC,KAClD,IAAIC,IAEAC,EAAcC,IAAwCC,kBAAkBA,iBAAeD,IAE3F,MAAME,EAAUN,KAEVO,IAAEA,EAAGC,SAAEA,GAtBE,CAACC,YAChB,IAAID,EAAUD,EAWd,OAVuB,IAAnBE,EAAQC,OACkB,iBAAfD,EAAQ,GACfF,EAAME,EAAQ,GAEdD,YAAWC,EAAQ,yBAAIE,GAED,IAAnBF,EAAQC,SACfH,EAAME,EAAQ,GACdD,YAAWC,EAAQ,yBAAIE,IAEpB,CAAEH,SAAAA,EAAUD,IAAAA,IAUOK,CAAWX,GAE/BY,EAAS,CAACT,EAAiBU,EAAgBC,EAAoBC,KACjEb,GAAcA,EAAW,CACrBW,OAAAA,EACAR,QAAAA,EACAF,QAAAA,EACAW,SAAAA,EACAR,IAAAA,EACAC,SAAAA,EACAS,IAAAA,EACAD,QAAAA,KAIFE,EAAiBC,OAAOC,QAC1B,CAAChB,EAAiBW,IAAoCC,KAClDH,EAAOT,IAAqBW,EAAUC,KACvC,CAECK,MAAMjB,EAAiBW,EAAqBC,QACvBM,IAAbP,IACAb,EAAkBa,GAEtBF,EAAOT,IAAuBF,EAAiBc,IAGnDO,OAAOnB,EAAiBW,EAAqBC,GACzCH,EAAOT,IAAwBW,MAAAA,EAAAA,EAAYb,EAAiBc,IAGhEQ,OAAOpB,EAAiBW,EAAqBC,GACzCH,EAAOT,IAAwBW,MAAAA,EAAAA,EAAYb,EAAiBc,IAEhES,SAASA,SACYH,IAAbG,IACAtB,EAAasB,GAEVtB,KAKnBgB,OAAOO,eAAeR,EAAgB,KAAM,CACxCS,MAAOrB,EACPsB,UAAU,IAGd,MAAMX,EAAM,IAAIY,QAAQX,GAExB,OAAOA"}
@@ -8,12 +8,16 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
8
8
 
9
9
  var kleur__default = /*#__PURE__*/_interopDefaultLegacy(kleur);
10
10
 
11
- const { green, red, yellow } = kleur__default["default"];
11
+ const { green, red, yellow, blue } = kleur__default["default"];
12
12
  const unicodePrefixes = [`${green('✓')}`, `${green('✓')}`, '⚠', '✕'];
13
13
  const asciiPrefixes = [`${green('+')}`, `${green('+')}`, '!', 'x'];
14
14
  // eslint-disable-next-line no-sparse-arrays
15
- const colors = [, , yellow, red];
15
+ const colors = [, , yellow, red];
16
+ const tagFactory = (tag) => {
17
+ return '[' + blue(tag) + ']';
18
+ };
16
19
 
17
20
  exports.asciiPrefixes = asciiPrefixes;
18
21
  exports.colors = colors;
22
+ exports.tagFactory = tagFactory;
19
23
  exports.unicodePrefixes = unicodePrefixes;
@@ -2,3 +2,4 @@ import { ColorFormatters, Prefixes } from './types';
2
2
  export declare const unicodePrefixes: Prefixes;
3
3
  export declare const asciiPrefixes: Prefixes;
4
4
  export declare const colors: ColorFormatters;
5
+ export declare const tagFactory: (tag: string) => string;
@@ -1,9 +1,12 @@
1
1
  import kleur from 'kleur';
2
2
 
3
- const { green, red, yellow } = kleur;
3
+ const { green, red, yellow, blue } = kleur;
4
4
  const unicodePrefixes = [`${green('✓')}`, `${green('✓')}`, '⚠', '✕'];
5
5
  const asciiPrefixes = [`${green('+')}`, `${green('+')}`, '!', 'x'];
6
6
  // eslint-disable-next-line no-sparse-arrays
7
- const colors = [, , yellow, red];
7
+ const colors = [, , yellow, red];
8
+ const tagFactory = (tag) => {
9
+ return '[' + blue(tag) + ']';
10
+ };
8
11
 
9
- export { asciiPrefixes, colors, unicodePrefixes };
12
+ export { asciiPrefixes, colors, tagFactory, unicodePrefixes };
@@ -2,22 +2,22 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- function createFormatter(colors, prefixes) {
6
- return function formatMessage(message, loglevel, usePrefix, identation = 0) {
5
+ const createFormatter = (colors, prefixes, tagFactory) => {
6
+ return ({ loglevel, message, context, action, tag }, usePrefix, identation = 0) => {
7
7
  const prefix = usePrefix === true ? (`${prefixes[loglevel]} `) : (typeof usePrefix === 'string' ? (`${usePrefix} `) : '');
8
8
  const color = colors[loglevel];
9
- const text = `${prefix}${message}`;
9
+ const text = `${prefix}${loglevel === 0 /* verbose */ && action === 3 /* log */ && tag !== undefined ? tagFactory(tag) + ' ' : ''}${message}${context != null ? ' ' + context : ''}`;
10
10
  return `${' '.repeat(identation)}${color ? color(text) : text}`;
11
11
  };
12
- }
12
+ };
13
13
  // from dreidels/utils
14
- function terminalSupportsUnicode() {
14
+ const terminalSupportsUnicode = () => {
15
15
  // The default command prompt and powershell in Windows do not support Unicode characters.
16
16
  // However, the VSCode integrated terminal and the Windows Terminal both do.
17
17
  return process.platform !== 'win32'
18
18
  || process.env.TERM_PROGRAM === 'vscode'
19
19
  || !!process.env.WT_SESSION;
20
- }
20
+ };
21
21
 
22
22
  exports.createFormatter = createFormatter;
23
23
  exports.terminalSupportsUnicode = terminalSupportsUnicode;
@@ -1,3 +1,3 @@
1
- import { ColorFormatters, LogLevel, Prefixes } from './types';
2
- export declare function createFormatter(colors: ColorFormatters, prefixes: Prefixes): (message: string, loglevel: LogLevel, usePrefix?: string | boolean | undefined, identation?: number) => string;
3
- export declare function terminalSupportsUnicode(): boolean;
1
+ import { ColorFormatters, LogMessage, Prefixes } from './types';
2
+ export declare const createFormatter: (colors: ColorFormatters, prefixes: Prefixes, tagFactory: (tag: string) => string) => ({ loglevel, message, context, action, tag }: LogMessage, usePrefix?: string | boolean | undefined, identation?: number) => string;
3
+ export declare const terminalSupportsUnicode: () => boolean;
@@ -1,18 +1,18 @@
1
- function createFormatter(colors, prefixes) {
2
- return function formatMessage(message, loglevel, usePrefix, identation = 0) {
1
+ const createFormatter = (colors, prefixes, tagFactory) => {
2
+ return ({ loglevel, message, context, action, tag }, usePrefix, identation = 0) => {
3
3
  const prefix = usePrefix === true ? (`${prefixes[loglevel]} `) : (typeof usePrefix === 'string' ? (`${usePrefix} `) : '');
4
4
  const color = colors[loglevel];
5
- const text = `${prefix}${message}`;
5
+ const text = `${prefix}${loglevel === 0 /* verbose */ && action === 3 /* log */ && tag !== undefined ? tagFactory(tag) + ' ' : ''}${message}${context != null ? ' ' + context : ''}`;
6
6
  return `${' '.repeat(identation)}${color ? color(text) : text}`;
7
7
  };
8
- }
8
+ };
9
9
  // from dreidels/utils
10
- function terminalSupportsUnicode() {
10
+ const terminalSupportsUnicode = () => {
11
11
  // The default command prompt and powershell in Windows do not support Unicode characters.
12
12
  // However, the VSCode integrated terminal and the Windows Terminal both do.
13
13
  return process.platform !== 'win32'
14
14
  || process.env.TERM_PROGRAM === 'vscode'
15
15
  || !!process.env.WT_SESSION;
16
- }
16
+ };
17
17
 
18
18
  export { createFormatter, terminalSupportsUnicode };
@@ -1,32 +1,14 @@
1
1
  'use strict';
2
2
 
3
- function filterMessages(predicate, appender) {
4
- return function (logMessage) {
5
- if (predicate(logMessage)) {
6
- appender(logMessage);
7
- }
8
- };
9
- }
10
- function combineAppenders(...appenders) {
11
- return (message) => {
12
- for (const appender of appenders) {
13
- try {
14
- appender(message);
15
- }
16
- catch (e) { /* eat the error */ }
17
- }
18
- };
19
- }
3
+ Object.defineProperty(exports, '__esModule', { value: true });
20
4
 
21
5
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
22
6
  exports.globalAppender = void 0;
23
- function appender(appender) {
7
+ const appender = (appender) => {
24
8
  if (appender !== undefined) {
25
9
  exports.globalAppender = appender;
26
10
  }
27
11
  return exports.globalAppender;
28
- }
12
+ };
29
13
 
30
14
  exports.appender = appender;
31
- exports.combineAppenders = combineAppenders;
32
- exports.filterMessages = filterMessages;
@@ -0,0 +1,3 @@
1
+ import { Appender } from './types';
2
+ export declare let globalAppender: Appender<any>;
3
+ export declare const appender: <ErrorContext = Error>(appender?: Appender<ErrorContext> | undefined) => Appender<any>;
@@ -1,28 +1,10 @@
1
- function filterMessages(predicate, appender) {
2
- return function (logMessage) {
3
- if (predicate(logMessage)) {
4
- appender(logMessage);
5
- }
6
- };
7
- }
8
- function combineAppenders(...appenders) {
9
- return (message) => {
10
- for (const appender of appenders) {
11
- try {
12
- appender(message);
13
- }
14
- catch (e) { /* eat the error */ }
15
- }
16
- };
17
- }
18
-
19
1
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
20
2
  let globalAppender;
21
- function appender(appender) {
3
+ const appender = (appender) => {
22
4
  if (appender !== undefined) {
23
5
  globalAppender = appender;
24
6
  }
25
7
  return globalAppender;
26
- }
8
+ };
27
9
 
28
- export { appender as a, combineAppenders as c, filterMessages as f, globalAppender as g };
10
+ export { appender, globalAppender };
@@ -0,0 +1,2 @@
1
+ !function(e,o){"object"==typeof exports&&"undefined"!=typeof module?o(exports):"function"==typeof define&&define.amd?define(["exports"],o):o((e="undefined"!=typeof globalThis?globalThis:e||self).nicetiesLoggerGlobalAppender={})}(this,(function(e){"use strict";e.globalAppender=void 0;e.appender=o=>(void 0!==o&&(e.globalAppender=o),e.globalAppender),Object.defineProperty(e,"__esModule",{value:!0})}));
2
+ //# sourceMappingURL=global-appender.umd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-appender.umd.js","sources":["../src/global-appender.ts"],"sourcesContent":["import { Appender } from './types';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport let globalAppender: Appender<any>;\n\nexport const appender = <ErrorContext = Error>(appender?: Appender<ErrorContext>) => {\n if (appender !== undefined) {\n globalAppender = appender;\n }\n return globalAppender;\n};\n"],"names":["appender","undefined","globalAppender"],"mappings":"uSAK+CA,SAC1BC,IAAbD,IACAE,iBAAiBF,GAEdE"}
package/dist/index.cjs CHANGED
@@ -6,14 +6,16 @@ var core = require('./core.cjs');
6
6
  var globalAppender = require('./global-appender.cjs');
7
7
 
8
8
  if (!globalAppender.appender()) {
9
- const { asciiPrefixes, colors, unicodePrefixes } = require('./default-formatting.cjs');
9
+ const { asciiPrefixes, colors, unicodePrefixes, tagFactory } = require('./default-formatting.cjs');
10
10
  const { createConsoleAppender } = require('./console-appender.cjs');
11
11
  const { createFormatter, terminalSupportsUnicode } = require('./format-utils.cjs');
12
- const formatter = createFormatter(colors, terminalSupportsUnicode() ? unicodePrefixes : asciiPrefixes);
13
- globalAppender.appender(globalAppender.filterMessages((message) => message.loglevel > 0 /* verbose */, createConsoleAppender(formatter)));
12
+ const { filterMessages } = require('./appender-utils.cjs');
13
+ const formatter = createFormatter(colors, terminalSupportsUnicode() ? unicodePrefixes : asciiPrefixes, tagFactory);
14
+ let minLogLevel = 1 /* info */;
15
+ globalAppender.appender(filterMessages((message) => message.loglevel >= minLogLevel, createConsoleAppender(formatter), // eslint-disable-line indent
16
+ { setMinLevel(logLevel) { minLogLevel = logLevel; } } // eslint-disable-line indent
17
+ ));
14
18
  }
15
19
 
16
20
  exports.createLogger = core.createLogger;
17
21
  exports.appender = globalAppender.appender;
18
- exports.combineAppenders = globalAppender.combineAppenders;
19
- exports.filterMessages = globalAppender.filterMessages;
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { createLogger, filterMessages, combineAppenders } from './core';
2
- import { appender } from './details/global-appender';
1
+ import { createLogger } from './core';
2
+ import { appender } from './global-appender';
3
3
  export * from './types';
4
- export { createLogger, appender, filterMessages, combineAppenders };
4
+ export { createLogger, appender };
package/dist/index.mjs CHANGED
@@ -1,13 +1,17 @@
1
1
  export { createLogger } from './core.mjs';
2
- import { a as appender, f as filterMessages } from './global-appender.mjs';
3
- export { a as appender, c as combineAppenders, f as filterMessages } from './global-appender.mjs';
2
+ import { appender } from './global-appender.mjs';
3
+ export { appender } from './global-appender.mjs';
4
4
 
5
5
  if (!appender()) {
6
- const [{ asciiPrefixes, colors, unicodePrefixes }, { createConsoleAppender }, { createFormatter, terminalSupportsUnicode }] = await Promise.all([
6
+ const [{ asciiPrefixes, colors, unicodePrefixes, tagFactory }, { createConsoleAppender }, { createFormatter, terminalSupportsUnicode }, { filterMessages }] = await Promise.all([
7
7
  import('./default-formatting.mjs'),
8
8
  import('./console-appender.mjs'),
9
- import('./format-utils.mjs')
9
+ import('./format-utils.mjs'),
10
+ import('./appender-utils.mjs')
10
11
  ]);
11
- const formatter = createFormatter(colors, terminalSupportsUnicode() ? unicodePrefixes : asciiPrefixes);
12
- appender(filterMessages((message) => message.loglevel > 0 /* verbose */, createConsoleAppender(formatter)));
12
+ const formatter = createFormatter(colors, terminalSupportsUnicode() ? unicodePrefixes : asciiPrefixes, tagFactory);
13
+ let minLogLevel = 1 /* info */;
14
+ appender(filterMessages((message) => message.loglevel >= minLogLevel, createConsoleAppender(formatter), // eslint-disable-line indent
15
+ { setMinLevel(logLevel) { minLogLevel = logLevel; } } // eslint-disable-line indent
16
+ ));
13
17
  }
package/dist/simple.cjs CHANGED
@@ -4,10 +4,10 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var globalAppender = require('./global-appender.cjs');
6
6
 
7
- function createLogger(tag) {
7
+ const createLogger = (tag) => {
8
8
  let myAppender = (message) => { globalAppender.globalAppender && globalAppender.globalAppender(message); };
9
9
  const loggerInstance = Object.assign(function log(message, loglevel = 1 /* info */, context) {
10
- myAppender({
10
+ myAppender && myAppender({
11
11
  action: 3 /* log */,
12
12
  message,
13
13
  loglevel,
@@ -15,19 +15,14 @@ function createLogger(tag) {
15
15
  context
16
16
  });
17
17
  }, {
18
- withFilter(predicate) {
19
- myAppender = globalAppender.filterMessages(predicate, myAppender);
20
- return loggerInstance;
21
- },
22
- withAppender(appender) {
23
- myAppender = globalAppender.combineAppenders(myAppender, appender);
24
- return loggerInstance;
18
+ appender(appender) {
19
+ if (appender !== undefined) {
20
+ myAppender = appender;
21
+ }
22
+ return myAppender;
25
23
  }
26
24
  });
27
25
  return loggerInstance;
28
- }
26
+ };
29
27
 
30
- exports.appender = globalAppender.appender;
31
- exports.combineAppenders = globalAppender.combineAppenders;
32
- exports.filterMessages = globalAppender.filterMessages;
33
28
  exports.createLogger = createLogger;
package/dist/simple.d.ts CHANGED
@@ -1,8 +1,4 @@
1
- import { combineAppenders, filterMessages } from './appender-utils';
2
- import { appender } from './details/global-appender';
3
1
  import { Appender, LogLevel, LogMessage } from './types';
4
- export declare function createLogger<ErrorContext = Error>(tag?: string): ((message: string, loglevel?: LogLevel, context?: ErrorContext | undefined) => void) & {
5
- withFilter(predicate: (logMessage: LogMessage<ErrorContext>) => boolean): ((message: string, loglevel?: LogLevel, context?: ErrorContext | undefined) => void) & any;
6
- withAppender(appender: Appender<ErrorContext>): ((message: string, loglevel?: LogLevel, context?: ErrorContext | undefined) => void) & any;
2
+ export declare const createLogger: <ErrorContext = Error>(tag?: string | undefined) => ((message: string, loglevel?: LogLevel, context?: ErrorContext | undefined) => void) & {
3
+ appender(appender?: Appender<ErrorContext> | undefined): (message: LogMessage<ErrorContext>) => void;
7
4
  };
8
- export { appender, combineAppenders, filterMessages };
package/dist/simple.mjs CHANGED
@@ -1,10 +1,9 @@
1
- import { f as filterMessages, c as combineAppenders, g as globalAppender } from './global-appender.mjs';
2
- export { a as appender, c as combineAppenders, f as filterMessages } from './global-appender.mjs';
1
+ import { globalAppender } from './global-appender.mjs';
3
2
 
4
- function createLogger(tag) {
3
+ const createLogger = (tag) => {
5
4
  let myAppender = (message) => { globalAppender && globalAppender(message); };
6
5
  const loggerInstance = Object.assign(function log(message, loglevel = 1 /* info */, context) {
7
- myAppender({
6
+ myAppender && myAppender({
8
7
  action: 3 /* log */,
9
8
  message,
10
9
  loglevel,
@@ -12,16 +11,14 @@ function createLogger(tag) {
12
11
  context
13
12
  });
14
13
  }, {
15
- withFilter(predicate) {
16
- myAppender = filterMessages(predicate, myAppender);
17
- return loggerInstance;
18
- },
19
- withAppender(appender) {
20
- myAppender = combineAppenders(myAppender, appender);
21
- return loggerInstance;
14
+ appender(appender) {
15
+ if (appender !== undefined) {
16
+ myAppender = appender;
17
+ }
18
+ return myAppender;
22
19
  }
23
20
  });
24
21
  return loggerInstance;
25
- }
22
+ };
26
23
 
27
24
  export { createLogger };
@@ -1,2 +1,2 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).nicetiesLoggerSimple={})}(this,(function(e){"use strict";function t(e,t){return function(n){e(n)&&t(n)}}function n(...e){return t=>{for(const n of e)try{n(t)}catch(e){}}}let o;e.appender=function(e){return void 0!==e&&(o=e),o},e.combineAppenders=n,e.createLogger=function(e){let i=e=>{o&&o(e)};const f=Object.assign((function(t,n=1,o){i({action:3,message:t,loglevel:n,tag:e,context:o})}),{withFilter:e=>(i=t(e,i),f),withAppender:e=>(i=n(i,e),f)});return f},e.filterMessages=t,Object.defineProperty(e,"__esModule",{value:!0})}));
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("./global-appender")):"function"==typeof define&&define.amd?define(["exports","./global-appender"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).nicetiesLoggerSimple={},e.nicetiesLoggerGlobalAppender)}(this,(function(e,t){"use strict";e.createLogger=e=>{let o=e=>{t.globalAppender&&t.globalAppender(e)};return Object.assign((function(t,n=1,i){o&&o({action:3,message:t,loglevel:n,tag:e,context:i})}),{appender:e=>(void 0!==e&&(o=e),o)})},Object.defineProperty(e,"__esModule",{value:!0})}));
2
2
  //# sourceMappingURL=simple.umd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"simple.umd.js","sources":["../src/appender-utils.ts","../src/details/global-appender.ts","../src/simple.ts"],"sourcesContent":["import { Appender, LogMessage } from './types';\n\nexport function filterMessages<ErrorContext = Error>(predicate: (logMessage: LogMessage<ErrorContext>) => boolean, appender: Appender<ErrorContext> ): Appender<ErrorContext> {\n return function(logMessage: LogMessage<ErrorContext>) {\n if (predicate(logMessage)) {\n appender(logMessage);\n }\n };\n}\n\nexport function combineAppenders<ErrorContext = Error>(...appenders: Appender<ErrorContext>[]): Appender<ErrorContext> {\n return (message: LogMessage<ErrorContext>) => {\n for(const appender of appenders) {\n try {\n appender(message);\n } catch(e) { /* eat the error */ }\n }\n };\n}","import { Appender } from '../types';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport let globalAppender: Appender<any>;\n\nexport function appender<ErrorContext = Error>(appender?: Appender<ErrorContext>) {\n if (appender !== undefined) {\n globalAppender = appender;\n }\n return globalAppender;\n}\n","import { combineAppenders, filterMessages } from './appender-utils';\nimport { globalAppender, appender } from './details/global-appender';\nimport { Action, Appender, LogLevel, LogMessage } from './types';\n\nexport function createLogger<ErrorContext = Error>(tag?: string) {\n let myAppender = (message: LogMessage<ErrorContext>) => { globalAppender && globalAppender(message); };\n\n const loggerInstance = Object.assign(\n function log(message: string, loglevel: LogLevel = LogLevel.info, context?: ErrorContext) {\n myAppender({\n action: Action.log,\n message,\n loglevel,\n tag,\n context\n } as LogMessage<ErrorContext>);\n }, {\n withFilter(predicate: (logMessage: LogMessage<ErrorContext>) => boolean) {\n myAppender = filterMessages(predicate, myAppender);\n return loggerInstance;\n },\n withAppender(appender: Appender<ErrorContext>) {\n myAppender = combineAppenders(myAppender, appender);\n return loggerInstance;\n }\n }\n );\n\n return loggerInstance;\n}\n\nexport { appender, combineAppenders, filterMessages };"],"names":["filterMessages","predicate","appender","logMessage","combineAppenders","appenders","message","e","globalAppender","undefined","tag","myAppender","loggerInstance","Object","assign","loglevel","context","action","withFilter","withAppender"],"mappings":"qQAEgBA,EAAqCC,EAA8DC,GAC/G,OAAO,SAASC,GACRF,EAAUE,IACVD,EAASC,aAKLC,KAA0CC,GACtD,OAAQC,IACJ,IAAI,MAAMJ,KAAYG,EAClB,IACIH,EAASI,GACX,MAAMC,MCZb,IAAIC,sBAEoCN,GAI3C,YAHiBO,IAAbP,IACAM,EAAiBN,GAEdM,gDCLwCE,GAC/C,IAAIC,EAAcL,IAAwCE,GAAkBA,EAAeF,IAE3F,MAAMM,EAAiBC,OAAOC,QAC1B,SAAaR,EAAiBS,IAAoCC,GAC9DL,EAAW,CACPM,SACAX,QAAAA,EACAS,SAAAA,EACAL,IAAAA,EACAM,QAAAA,MAEL,CACCE,WAAWjB,IACPU,EAAaX,EAAeC,EAAWU,GAChCC,GAEXO,aAAajB,IACTS,EAAaP,EAAiBO,EAAYT,GACnCU,KAKnB,OAAOA"}
1
+ {"version":3,"file":"simple.umd.js","sources":["../src/simple.ts"],"sourcesContent":["import { globalAppender } from './global-appender';\nimport { Action, Appender, LogLevel, LogMessage } from './types';\n\nexport const createLogger = <ErrorContext = Error>(tag?: string) => {\n let myAppender = (message: LogMessage<ErrorContext>) => { globalAppender && globalAppender(message); };\n\n const loggerInstance = Object.assign(\n function log(message: string, loglevel: LogLevel = LogLevel.info, context?: ErrorContext) {\n myAppender && myAppender({\n action: Action.log,\n message,\n loglevel,\n tag,\n context\n } as LogMessage<ErrorContext>);\n }, {\n appender(appender?: Appender<ErrorContext>) {\n if (appender !== undefined) {\n myAppender = appender;\n }\n return myAppender;\n }\n }\n );\n\n return loggerInstance;\n};\n"],"names":["tag","myAppender","message","globalAppender","Object","assign","loglevel","context","action","appender","undefined"],"mappings":"6VAGmDA,IAC/C,IAAIC,EAAcC,IAAwCC,kBAAkBA,iBAAeD,IAqB3F,OAnBuBE,OAAOC,QAC1B,SAAaH,EAAiBI,IAAoCC,GAC9DN,GAAcA,EAAW,CACrBO,SACAN,QAAAA,EACAI,SAAAA,EACAN,IAAAA,EACAO,QAAAA,MAEL,CACCE,SAASA,SACYC,IAAbD,IACAR,EAAaQ,GAEVR"}
package/dist/types.d.ts CHANGED
@@ -18,6 +18,7 @@ export declare type LogMessage<ErrorContext = Error> = {
18
18
  tag?: string;
19
19
  parentId?: number;
20
20
  ref: WeakRef<never>;
21
+ context?: ErrorContext;
21
22
  } | {
22
23
  inputId?: number;
23
24
  loglevel: LogLevel;
@@ -38,4 +39,13 @@ export declare type Prefixes = {
38
39
  export declare type ColorFormatters = {
39
40
  [index in LogLevel]: (((text: string) => string) | undefined);
40
41
  };
41
- export declare type Formatter = (message: string, loglevel: LogLevel, usePrefix?: string | boolean, identation?: number) => string;
42
+ export declare type Formatter<ErrorContext = Error> = (message: LogMessage<ErrorContext>, usePrefix?: string | boolean, identation?: number) => string;
43
+ export declare type Logger<ErrorContext = Error> = ((message: string, loglevel?: LogLevel, context?: ErrorContext | undefined) => void) & {
44
+ start(message: string, loglevel?: LogLevel | undefined, context?: ErrorContext | undefined): void;
45
+ update(message: string, loglevel?: LogLevel | undefined, context?: ErrorContext | undefined): void;
46
+ finish(message: string, loglevel?: LogLevel | undefined, context?: ErrorContext | undefined): void;
47
+ appender(appender?: Appender<ErrorContext>): (message: LogMessage<ErrorContext>) => void;
48
+ };
49
+ export declare type MinLogLevelApi = {
50
+ setMinLevel(logLevel: LogLevel): void;
51
+ };
@@ -0,0 +1,3 @@
1
+ {
2
+ "types": "../dist/global-appender.d.ts"
3
+ }
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.0.4",
2
+ "version": "1.1.2",
3
3
  "license": "MIT",
4
4
  "name": "@niceties/logger",
5
5
  "author": "Konstantin Shutkin",
@@ -29,6 +29,14 @@
29
29
  "./format-utils": {
30
30
  "require": "./dist/format-utils.cjs",
31
31
  "default": "./dist/format-utils.mjs"
32
+ },
33
+ "./global-appender": {
34
+ "require": "./dist/global-appender.cjs",
35
+ "default": "./dist/global-appender.mjs"
36
+ },
37
+ "./appender-utils": {
38
+ "require": "./dist/appender-utils.cjs",
39
+ "default": "./dist/appender-utils.mjs"
32
40
  }
33
41
  },
34
42
  "main": "./dist/index.cjs",
@@ -40,6 +48,8 @@
40
48
  "default-formatting",
41
49
  "core",
42
50
  "console-appender",
51
+ "global-appender",
52
+ "appender-utils",
43
53
  "format-utils",
44
54
  "types",
45
55
  "simple"
@@ -55,6 +65,8 @@
55
65
  "url": "https://github.com/kshutkin/niceties/issues"
56
66
  },
57
67
  "homepage": "https://github.com/kshutkin/niceties/blob/main/logger/README.md",
68
+ "readme": "REAMDE.md",
69
+ "description": "Experimental logger/reporter for async tasks.",
58
70
  "scripts": {
59
71
  "build": "rimraf ./dist && rollup -c",
60
72
  "dev": "rimraf ./dist && rollup -c -w",
@@ -70,23 +82,25 @@
70
82
  "@semantic-release/git": "10.0.1",
71
83
  "@semantic-release/npm": "8.0.2",
72
84
  "@semantic-release/release-notes-generator": "10.0.2",
73
- "@types/jest": "27.0.2",
74
- "@typescript-eslint/eslint-plugin": "5.3.0",
75
- "@typescript-eslint/parser": "5.3.0",
85
+ "@types/jest": "27.0.3",
86
+ "@types/node": "17.0.5",
87
+ "@typescript-eslint/eslint-plugin": "5.8.1",
88
+ "@typescript-eslint/parser": "5.8.1",
76
89
  "conventional-changelog-angular": "5.0.13",
77
- "eslint": "8.1.0",
78
- "jest": "27.3.1",
90
+ "eslint": "8.5.0",
91
+ "jest": "27.4.5",
79
92
  "lodash": "4.17.21",
80
93
  "rimraf": "3.0.2",
81
- "rollup": "2.60.1",
94
+ "rollup": "2.62.0",
82
95
  "rollup-plugin-preprocess": "0.0.4",
83
96
  "rollup-plugin-terser": "7.0.2",
84
97
  "rollup-plugin-typescript2": "0.31.1",
85
98
  "semantic-release": "18.0.0",
86
99
  "semantic-release-monorepo": "7.0.5",
87
- "ts-jest": "27.0.7",
100
+ "ts-jest": "27.1.2",
88
101
  "tslib": "2.3.1",
89
- "typescript": "4.4.x"
102
+ "typescript": "4.5.x",
103
+ "pkgbld": "1.2.0"
90
104
  },
91
105
  "dependencies": {
92
106
  "kleur": "^4.1.4"
@@ -1,3 +0,0 @@
1
- import { Appender } from '../types';
2
- export declare let globalAppender: Appender<any>;
3
- export declare function appender<ErrorContext = Error>(appender?: Appender<ErrorContext>): Appender<any>;