@niceties/logger 1.0.0-alpha.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.
- package/LICENSE +21 -0
- package/README.md +241 -0
- package/console-appender/package.json +3 -0
- package/core/package.json +3 -0
- package/default-formatting/package.json +3 -0
- package/dist/appender-utils.d.ts +3 -0
- package/dist/console-appender.d.ts +2 -0
- package/dist/console-appender.js +11 -0
- package/dist/console-appender.mjs +7 -0
- package/dist/console-appender.umd.js +2 -0
- package/dist/console-appender.umd.js.map +1 -0
- package/dist/core.d.ts +11 -0
- package/dist/core.js +80 -0
- package/dist/core.mjs +74 -0
- package/dist/core.umd.js +2 -0
- package/dist/core.umd.js.map +1 -0
- package/dist/default-formatting.d.ts +4 -0
- package/dist/default-formatting.js +19 -0
- package/dist/default-formatting.mjs +9 -0
- package/dist/default-formatting.umd.js +2 -0
- package/dist/default-formatting.umd.js.map +1 -0
- package/dist/details/global-appender.d.ts +3 -0
- package/dist/format-utils.d.ts +3 -0
- package/dist/format-utils.js +23 -0
- package/dist/format-utils.mjs +18 -0
- package/dist/format-utils.umd.js +2 -0
- package/dist/format-utils.umd.js.map +1 -0
- package/dist/global-appender-1e01c3e5.js +34 -0
- package/dist/global-appender-f4ab2f94.js +32 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +18 -0
- package/dist/index.mjs +14 -0
- package/dist/index.umd.js +2 -0
- package/dist/index.umd.js.map +1 -0
- package/dist/simple.d.ts +8 -0
- package/dist/simple.js +33 -0
- package/dist/simple.mjs +27 -0
- package/dist/simple.umd.js +2 -0
- package/dist/simple.umd.js.map +1 -0
- package/dist/types.d.ts +41 -0
- package/format-utils/package.json +3 -0
- package/package.json +86 -0
- package/simple/package.json +3 -0
- package/types/package.json +3 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2021 Konstantin Shutkin
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
# Logger
|
|
2
|
+
|
|
3
|
+
Experimental logger/reporter for async tasks.
|
|
4
|
+
|
|
5
|
+
- Provides API for reporting async events that can be later handled by custom appender.
|
|
6
|
+
|
|
7
|
+
- Provides default appender that uses console for output.
|
|
8
|
+
|
|
9
|
+
- Modular and configurable
|
|
10
|
+
|
|
11
|
+
- Small size
|
|
12
|
+
|
|
13
|
+
# Installation
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
yarn add @niceties/logger
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
or
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
npm install --save @niceties/logger
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
# Example
|
|
26
|
+
|
|
27
|
+
```javascript
|
|
28
|
+
import { createLogger } from '@niceties/logger';
|
|
29
|
+
|
|
30
|
+
const logger = createLogger();
|
|
31
|
+
|
|
32
|
+
try {
|
|
33
|
+
logger.start('starting something');
|
|
34
|
+
...
|
|
35
|
+
// some async code
|
|
36
|
+
...
|
|
37
|
+
logger.finish('finished something');
|
|
38
|
+
} catch(e) {
|
|
39
|
+
logger.finish('finished something', 3);
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
# API
|
|
44
|
+
|
|
45
|
+
Logger factory:
|
|
46
|
+
|
|
47
|
+
```typescript
|
|
48
|
+
function createLogger<ErrorContext = Error>(...args: [] | [string | Identity] | [string, Identity]): ((message: string, loglevel?: LogLevel, context?: ErrorContext | undefined) => void) & {
|
|
49
|
+
start(message: string, loglevel?: LogLevel | undefined): void;
|
|
50
|
+
update(message: string, loglevel?: LogLevel | undefined): void;
|
|
51
|
+
finish(message: string, loglevel?: LogLevel | undefined): void;
|
|
52
|
+
withAppender(appender: Appender<ErrorContext>): ((message: string, loglevel?: LogLevel, context?: ErrorContext | undefined) => void) & any;
|
|
53
|
+
};
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Will return a logger instance that can be viewed as an entry for a single async task.
|
|
57
|
+
|
|
58
|
+
```typescript
|
|
59
|
+
const logger = createLogger('tag');
|
|
60
|
+
const logger2 = createLogger(logger);
|
|
61
|
+
const logger3 = createLogger('tag2', logger);
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
`tag` can be used to distinguish between async tasks (will be provided to appender).
|
|
65
|
+
logger can be used as parent of another logger (will be provided as parentId to appender).
|
|
66
|
+
|
|
67
|
+
```typescript
|
|
68
|
+
const log = createLogger();
|
|
69
|
+
|
|
70
|
+
try {
|
|
71
|
+
// some code
|
|
72
|
+
log('some message');
|
|
73
|
+
} catch (e) {
|
|
74
|
+
log('some message', 1, e);
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Logger can be used as a function that logs message or error with context. Context type can be defined during creation of the logger (only in typescript).
|
|
79
|
+
|
|
80
|
+
```typescript
|
|
81
|
+
const log = createLogger<Context>();
|
|
82
|
+
|
|
83
|
+
try {
|
|
84
|
+
// some code
|
|
85
|
+
log('some message');
|
|
86
|
+
} catch (e: Context) {
|
|
87
|
+
log('some message', LogLevel.info, e);
|
|
88
|
+
}
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
```typescript
|
|
92
|
+
start(message: string, loglevel?: LogLevel | undefined): void;
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
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`.
|
|
96
|
+
|
|
97
|
+
```typescript
|
|
98
|
+
update(message: string, loglevel?: LogLevel | undefined): void;
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
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.
|
|
102
|
+
|
|
103
|
+
```typescript
|
|
104
|
+
finish(message: string, loglevel?: LogLevel | undefined): void;
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
Emits finish event. Can be used to inform user that task finished. loglevel is optional and equals initial loglevel if omitted.
|
|
108
|
+
|
|
109
|
+
```typescript
|
|
110
|
+
const log = createLogger()
|
|
111
|
+
.withAppender(someFancyAppender);
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
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.
|
|
115
|
+
|
|
116
|
+
```typescript
|
|
117
|
+
const log = createLogger()
|
|
118
|
+
.withFilter(predicate);
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
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.
|
|
122
|
+
|
|
123
|
+
## Log levels
|
|
124
|
+
|
|
125
|
+
```typescript
|
|
126
|
+
const enum LogLevel {
|
|
127
|
+
verbose, // for debugging logs, not for displaying on screen in normal cases
|
|
128
|
+
info, // should be printed to user but not an error
|
|
129
|
+
warn, // something is probably wrong, but we can continue
|
|
130
|
+
error // operation completely failed
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## Setting another appender
|
|
135
|
+
|
|
136
|
+
User or another library can set another appender by calling:
|
|
137
|
+
|
|
138
|
+
```typescript
|
|
139
|
+
function appender<ErrorContext = Error>(appender?: Appender<ErrorContext>): Appender<any>;
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
where appender is a function with following type
|
|
143
|
+
|
|
144
|
+
```typescript
|
|
145
|
+
(message: LogMessage<ErrorContext>) => void;
|
|
146
|
+
|
|
147
|
+
const enum Action {
|
|
148
|
+
start,
|
|
149
|
+
update,
|
|
150
|
+
success,
|
|
151
|
+
fail
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
type LogMessage<ErrorContext = Error> = {
|
|
155
|
+
inputId: number;
|
|
156
|
+
loglevel: LogLevel;
|
|
157
|
+
message: string;
|
|
158
|
+
action: Action.start | Action.update | Action.finish;
|
|
159
|
+
tag?: string;
|
|
160
|
+
parentId?: string;
|
|
161
|
+
ref: WeakRef<never>;
|
|
162
|
+
} | {
|
|
163
|
+
inputId?: number;
|
|
164
|
+
loglevel: LogLevel;
|
|
165
|
+
message: string;
|
|
166
|
+
action: Action.log;
|
|
167
|
+
tag?: string;
|
|
168
|
+
parentId?: string;
|
|
169
|
+
ref?: WeakRef<never>;
|
|
170
|
+
context?: ErrorContext;
|
|
171
|
+
};
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
Same appender function without arguments can be used to get current appender.
|
|
175
|
+
|
|
176
|
+
# FAQ
|
|
177
|
+
|
|
178
|
+
## Can I use more than 4 log levels
|
|
179
|
+
|
|
180
|
+
Despite the fact loglevel defined as an enum it is just a number. Logger does not make assumptions about loglevels besides defining default loglevel as 1 (LogLevel.info).
|
|
181
|
+
|
|
182
|
+
It is generally safe to expand loglevels into both positive and negative range (finer debug messages) as far as appender takes them into account.
|
|
183
|
+
|
|
184
|
+
As an example:
|
|
185
|
+
|
|
186
|
+
```typescript
|
|
187
|
+
const log = createLogger();
|
|
188
|
+
|
|
189
|
+
log('some message', -1);
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
will send a log message with finer loglevel than verbose through appender but default appender will ignore it.
|
|
193
|
+
|
|
194
|
+
## Can I use multiple appenders?
|
|
195
|
+
|
|
196
|
+
It is possible using combuneAppenders and appender functions:
|
|
197
|
+
|
|
198
|
+
```javascript
|
|
199
|
+
import { createLogger, appender } from "@niceties/logger";
|
|
200
|
+
import { combineAppenders } from "@niceties/logger/appender-utils";
|
|
201
|
+
|
|
202
|
+
appender(combineAppenders(appender(), appender2));
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
## Can I set filter for certain loglevel
|
|
206
|
+
|
|
207
|
+
It is possible using filterMessages and appender functions:
|
|
208
|
+
|
|
209
|
+
```javascript
|
|
210
|
+
import { filterMessages } from "@niceties/logger/appender-utils";
|
|
211
|
+
|
|
212
|
+
let desiredLoglevel = 0;
|
|
213
|
+
|
|
214
|
+
appender(filterMessages((msg) => msg.loglevel >= desiredLoglevel, appender()));
|
|
215
|
+
|
|
216
|
+
function setLoglevel(loglevel) {
|
|
217
|
+
desiredLoglevel = loglevel;
|
|
218
|
+
}
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
# Subpackages
|
|
222
|
+
|
|
223
|
+
Default subpackage `'@niceties/logger'` exports types, `createLogger()` factory and `appender()` function.
|
|
224
|
+
|
|
225
|
+
Subpackage `'@niceties/logger/default-formatting'` exports formatting constants that is part of default configuration of the console appender.
|
|
226
|
+
|
|
227
|
+
Subpackage `'@niceties/logger/core'` exports `createLogger()` factory and `appender()` function.
|
|
228
|
+
|
|
229
|
+
Subpackage `'@niceties/logger/console-appender'` exports `createConsoleAppender()` factory.
|
|
230
|
+
|
|
231
|
+
Subpackage `'@niceties/logger/format-utils'` exports `createFormatter()` and `terminalSupportsUnicode()` functions.
|
|
232
|
+
|
|
233
|
+
Subpackage `'@niceties/logger/appender-utils'` exports `filterMessages()` and `combineAppenders()` functions.
|
|
234
|
+
|
|
235
|
+
# Prior art
|
|
236
|
+
|
|
237
|
+
- [loglevel](https://github.com/pimterry/loglevel)
|
|
238
|
+
|
|
239
|
+
# License
|
|
240
|
+
|
|
241
|
+
[MIT](./LICENSE)
|
|
@@ -0,0 +1,3 @@
|
|
|
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>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
function createConsoleAppender(formatter) {
|
|
6
|
+
return function consoleAppender({ loglevel, action, message }) {
|
|
7
|
+
console.log(formatter(message, loglevel, action === 2 /* finish */));
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
exports.createConsoleAppender = createConsoleAppender;
|
|
@@ -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).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})}));
|
|
2
|
+
//# sourceMappingURL=console-appender.umd.js.map
|
|
@@ -0,0 +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"}
|
package/dist/core.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { combineAppenders, filterMessages } from './appender-utils';
|
|
2
|
+
import { appender } from './details/global-appender';
|
|
3
|
+
import { Appender, LogLevel, LogMessage, Identity } from './types';
|
|
4
|
+
export declare function createLogger<ErrorContext = Error>(...args: [] | [string | Identity] | [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;
|
|
10
|
+
};
|
|
11
|
+
export { appender, combineAppenders, filterMessages };
|
package/dist/core.js
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var globalAppender = require('./global-appender-f4ab2f94.js');
|
|
6
|
+
|
|
7
|
+
let globalInputId = 0;
|
|
8
|
+
function createLogger(...args) {
|
|
9
|
+
let initialLogLevel = 1 /* info */;
|
|
10
|
+
const inputId = globalInputId++;
|
|
11
|
+
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) {
|
|
14
|
+
append(message, 3 /* log */, loglevel, context);
|
|
15
|
+
}, {
|
|
16
|
+
// Fine to be started multiple times
|
|
17
|
+
start(message, loglevel) {
|
|
18
|
+
if (loglevel !== undefined) {
|
|
19
|
+
initialLogLevel = loglevel;
|
|
20
|
+
}
|
|
21
|
+
append(message, 0 /* start */, initialLogLevel);
|
|
22
|
+
},
|
|
23
|
+
// Fine to be updated multiple times
|
|
24
|
+
update(message, loglevel) {
|
|
25
|
+
append(message, 1 /* update */, loglevel || initialLogLevel);
|
|
26
|
+
},
|
|
27
|
+
// Fine to be finished multiple times
|
|
28
|
+
finish(message, loglevel) {
|
|
29
|
+
append(message, 2 /* finish */, loglevel || initialLogLevel);
|
|
30
|
+
},
|
|
31
|
+
withFilter(predicate) {
|
|
32
|
+
myAppender = globalAppender.filterMessages(predicate, myAppender);
|
|
33
|
+
return loggerInstance;
|
|
34
|
+
},
|
|
35
|
+
withAppender(appender) {
|
|
36
|
+
myAppender = globalAppender.combineAppenders(myAppender, appender);
|
|
37
|
+
return loggerInstance;
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
Object.defineProperty(loggerInstance, 'id', {
|
|
41
|
+
value: inputId,
|
|
42
|
+
writable: false
|
|
43
|
+
});
|
|
44
|
+
const ref = new WeakRef(loggerInstance);
|
|
45
|
+
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
|
+
}
|
|
76
|
+
|
|
77
|
+
exports.appender = globalAppender.appender;
|
|
78
|
+
exports.combineAppenders = globalAppender.combineAppenders;
|
|
79
|
+
exports.filterMessages = globalAppender.filterMessages;
|
|
80
|
+
exports.createLogger = createLogger;
|
package/dist/core.mjs
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { g as globalAppender, f as filterMessages, c as combineAppenders } from './global-appender-1e01c3e5.js';
|
|
2
|
+
export { a as appender, c as combineAppenders, f as filterMessages } from './global-appender-1e01c3e5.js';
|
|
3
|
+
|
|
4
|
+
let globalInputId = 0;
|
|
5
|
+
function createLogger(...args) {
|
|
6
|
+
let initialLogLevel = 1 /* info */;
|
|
7
|
+
const inputId = globalInputId++;
|
|
8
|
+
const { tag, parentId } = getOptions(args);
|
|
9
|
+
let myAppender = (message) => { globalAppender && globalAppender(message); };
|
|
10
|
+
const loggerInstance = Object.assign(function log(message, loglevel = 1 /* info */, context) {
|
|
11
|
+
append(message, 3 /* log */, loglevel, context);
|
|
12
|
+
}, {
|
|
13
|
+
// Fine to be started multiple times
|
|
14
|
+
start(message, loglevel) {
|
|
15
|
+
if (loglevel !== undefined) {
|
|
16
|
+
initialLogLevel = loglevel;
|
|
17
|
+
}
|
|
18
|
+
append(message, 0 /* start */, initialLogLevel);
|
|
19
|
+
},
|
|
20
|
+
// Fine to be updated multiple times
|
|
21
|
+
update(message, loglevel) {
|
|
22
|
+
append(message, 1 /* update */, loglevel || initialLogLevel);
|
|
23
|
+
},
|
|
24
|
+
// Fine to be finished multiple times
|
|
25
|
+
finish(message, loglevel) {
|
|
26
|
+
append(message, 2 /* finish */, loglevel || initialLogLevel);
|
|
27
|
+
},
|
|
28
|
+
withFilter(predicate) {
|
|
29
|
+
myAppender = filterMessages(predicate, myAppender);
|
|
30
|
+
return loggerInstance;
|
|
31
|
+
},
|
|
32
|
+
withAppender(appender) {
|
|
33
|
+
myAppender = combineAppenders(myAppender, appender);
|
|
34
|
+
return loggerInstance;
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
Object.defineProperty(loggerInstance, 'id', {
|
|
38
|
+
value: inputId,
|
|
39
|
+
writable: false
|
|
40
|
+
});
|
|
41
|
+
const ref = new WeakRef(loggerInstance);
|
|
42
|
+
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
|
+
}
|
|
73
|
+
|
|
74
|
+
export { createLogger };
|
package/dist/core.umd.js
ADDED
|
@@ -0,0 +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 f=1;const u=i++,{tag:r,parentId:c}=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 l=t=>{o&&o(t)};const d=Object.assign((function(t,e=1,n){a(t,3,e,n)}),{start(t,e){void 0!==e&&(f=e),a(t,0,f)},update(t,e){a(t,1,e||f)},finish(t,e){a(t,2,e||f)},withFilter:t=>(l=e(t,l),d),withAppender:t=>(l=n(l,t),d)});Object.defineProperty(d,"id",{value:u,writable:!1});const s=new WeakRef(d);return d;function a(t,e,n,o){l({action:e,inputId:u,message:t,loglevel:n,tag:r,parentId:c,ref:s,context:o})}},t.filterMessages=e,Object.defineProperty(t,"__esModule",{value:!0})}));
|
|
2
|
+
//# sourceMappingURL=core.umd.js.map
|
|
@@ -0,0 +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] | [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] | [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,GAAYZ,IAG/CiB,OAAOvB,EAAiBkB,GACpBE,EAAOpB,IAAwBkB,GAAYZ,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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var kleur = require('kleur');
|
|
6
|
+
|
|
7
|
+
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
8
|
+
|
|
9
|
+
var kleur__default = /*#__PURE__*/_interopDefaultLegacy(kleur);
|
|
10
|
+
|
|
11
|
+
const { green, red, yellow } = kleur__default["default"];
|
|
12
|
+
const unicodePrefixes = [`${green('✓')}`, `${green('✓')}`, '⚠', '✕'];
|
|
13
|
+
const asciiPrefixes = [`${green('+')}`, `${green('+')}`, '!', 'x'];
|
|
14
|
+
// eslint-disable-next-line no-sparse-arrays
|
|
15
|
+
const colors = [, , yellow, red];
|
|
16
|
+
|
|
17
|
+
exports.asciiPrefixes = asciiPrefixes;
|
|
18
|
+
exports.colors = colors;
|
|
19
|
+
exports.unicodePrefixes = unicodePrefixes;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import kleur from 'kleur';
|
|
2
|
+
|
|
3
|
+
const { green, red, yellow } = kleur;
|
|
4
|
+
const unicodePrefixes = [`${green('✓')}`, `${green('✓')}`, '⚠', '✕'];
|
|
5
|
+
const asciiPrefixes = [`${green('+')}`, `${green('+')}`, '!', 'x'];
|
|
6
|
+
// eslint-disable-next-line no-sparse-arrays
|
|
7
|
+
const colors = [, , yellow, red];
|
|
8
|
+
|
|
9
|
+
export { asciiPrefixes, colors, unicodePrefixes };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("kleur")):"function"==typeof define&&define.amd?define(["exports","kleur"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).nicetiesLoggerDefaultFormatting={},e.kleur)}(this,(function(e,t){"use strict";function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=o(t);const{green:f,red:u,yellow:i}=n.default,l=[`${f("✓")}`,`${f("✓")}`,"⚠","✕"],r=[`${f("+")}`,`${f("+")}`,"!","x"],d=[,,i,u];e.asciiPrefixes=r,e.colors=d,e.unicodePrefixes=l,Object.defineProperty(e,"__esModule",{value:!0})}));
|
|
2
|
+
//# sourceMappingURL=default-formatting.umd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default-formatting.umd.js","sources":["../src/default-formatting.ts"],"sourcesContent":["import kleur from 'kleur';\nimport { ColorFormatters, Prefixes } from './types';\nconst { green, red, yellow } = kleur;\n\nexport const unicodePrefixes: Prefixes = [`${green('✓')}`, `${green('✓')}`, '⚠', '✕'];\nexport const asciiPrefixes: Prefixes = [`${green('+')}`, `${green('+')}`, '!', 'x'];\n// eslint-disable-next-line no-sparse-arrays\nexport const colors: ColorFormatters = [,,yellow, red];"],"names":["green","red","yellow","kleur","unicodePrefixes","asciiPrefixes","colors"],"mappings":"6XAEA,MAAMA,MAAEA,EAAKC,IAAEA,EAAGC,OAAEA,GAAWC,UAElBC,EAA4B,CAAC,GAAGJ,EAAM,OAAQ,GAAGA,EAAM,OAAQ,IAAK,KACpEK,EAA0B,CAAC,GAAGL,EAAM,OAAQ,GAAGA,EAAM,OAAQ,IAAK,KAElEM,EAA0B,GAAGJ,EAAQD"}
|
|
@@ -0,0 +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;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
function createFormatter(colors, prefixes) {
|
|
6
|
+
return function formatMessage(message, loglevel, usePrefix, identation = 0) {
|
|
7
|
+
const prefix = usePrefix === true ? (`${prefixes[loglevel]} `) : (typeof usePrefix === 'string' ? (`${usePrefix} `) : '');
|
|
8
|
+
const color = colors[loglevel];
|
|
9
|
+
const text = `${prefix}${message}`;
|
|
10
|
+
return `${' '.repeat(identation)}${color ? color(text) : text}`;
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
// from dreidels/utils
|
|
14
|
+
function terminalSupportsUnicode() {
|
|
15
|
+
// The default command prompt and powershell in Windows do not support Unicode characters.
|
|
16
|
+
// However, the VSCode integrated terminal and the Windows Terminal both do.
|
|
17
|
+
return process.platform !== 'win32'
|
|
18
|
+
|| process.env.TERM_PROGRAM === 'vscode'
|
|
19
|
+
|| !!process.env.WT_SESSION;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
exports.createFormatter = createFormatter;
|
|
23
|
+
exports.terminalSupportsUnicode = terminalSupportsUnicode;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
function createFormatter(colors, prefixes) {
|
|
2
|
+
return function formatMessage(message, loglevel, usePrefix, identation = 0) {
|
|
3
|
+
const prefix = usePrefix === true ? (`${prefixes[loglevel]} `) : (typeof usePrefix === 'string' ? (`${usePrefix} `) : '');
|
|
4
|
+
const color = colors[loglevel];
|
|
5
|
+
const text = `${prefix}${message}`;
|
|
6
|
+
return `${' '.repeat(identation)}${color ? color(text) : text}`;
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
// from dreidels/utils
|
|
10
|
+
function terminalSupportsUnicode() {
|
|
11
|
+
// The default command prompt and powershell in Windows do not support Unicode characters.
|
|
12
|
+
// However, the VSCode integrated terminal and the Windows Terminal both do.
|
|
13
|
+
return process.platform !== 'win32'
|
|
14
|
+
|| process.env.TERM_PROGRAM === 'vscode'
|
|
15
|
+
|| !!process.env.WT_SESSION;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export { createFormatter, terminalSupportsUnicode };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((e="undefined"!=typeof globalThis?globalThis:e||self).nicetiesLoggerFormatUtils={})}(this,(function(e){"use strict";e.createFormatter=function(e,n){return function(o,t,s,f=0){const i=!0===s?`${n[t]} `:"string"==typeof s?`${s} `:"",u=e[t],c=`${i}${o}`;return`${" ".repeat(f)}${u?u(c):c}`}},e.terminalSupportsUnicode=function(){return"win32"!==process.platform||"vscode"===process.env.TERM_PROGRAM||!!process.env.WT_SESSION},Object.defineProperty(e,"__esModule",{value:!0})}));
|
|
2
|
+
//# sourceMappingURL=format-utils.umd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format-utils.umd.js","sources":["../src/format-utils.ts"],"sourcesContent":["import { ColorFormatters, LogLevel, Prefixes } from './types';\n\nexport function createFormatter(colors: ColorFormatters, prefixes: Prefixes) {\n return function formatMessage(message: string, loglevel: LogLevel, usePrefix?: string | boolean, identation = 0): string {\n const prefix = usePrefix === true ? (`${prefixes[loglevel]} `) : (typeof usePrefix === 'string' ? (`${usePrefix} `) : '');\n const color = colors[loglevel];\n const text = `${prefix}${message}`;\n return `${' '.repeat(identation)}${color ? color(text) : text}`;\n };\n}\n\n// from dreidels/utils\nexport function terminalSupportsUnicode() {\n // The default command prompt and powershell in Windows do not support Unicode characters.\n // However, the VSCode integrated terminal and the Windows Terminal both do.\n return process.platform !== 'win32'\n || process.env.TERM_PROGRAM === 'vscode'\n || !!process.env.WT_SESSION;\n}"],"names":["colors","prefixes","message","loglevel","usePrefix","identation","prefix","color","text","repeat","process","platform","env","TERM_PROGRAM","WT_SESSION"],"mappings":"4RAEgCA,EAAyBC,GACrD,OAAO,SAAuBC,EAAiBC,EAAoBC,EAA8BC,EAAa,GAC1G,MAAMC,GAAuB,IAAdF,KAAyBH,EAASE,MAAsC,iBAAdC,KAA6BA,KAAgB,GAChHG,EAAQP,EAAOG,GACfK,EAAO,GAAGF,IAASJ,IACzB,MAAO,GAAG,IAAIO,OAAOJ,KAAcE,EAAQA,EAAMC,GAAQA,2CAQ7D,MAA4B,UAArBE,QAAQC,UACmB,WAA7BD,QAAQE,IAAIC,gBACVH,QAAQE,IAAIE"}
|
|
@@ -0,0 +1,34 @@
|
|
|
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
|
+
var appenderUtils = /*#__PURE__*/Object.freeze({
|
|
20
|
+
__proto__: null,
|
|
21
|
+
filterMessages: filterMessages,
|
|
22
|
+
combineAppenders: combineAppenders
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
26
|
+
let globalAppender;
|
|
27
|
+
function appender(appender) {
|
|
28
|
+
if (appender !== undefined) {
|
|
29
|
+
globalAppender = appender;
|
|
30
|
+
}
|
|
31
|
+
return globalAppender;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export { appender as a, appenderUtils as b, combineAppenders as c, filterMessages as f, globalAppender as g };
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
'use strict';
|
|
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
|
+
}
|
|
20
|
+
|
|
21
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
22
|
+
exports.globalAppender = void 0;
|
|
23
|
+
function appender(appender) {
|
|
24
|
+
if (appender !== undefined) {
|
|
25
|
+
exports.globalAppender = appender;
|
|
26
|
+
}
|
|
27
|
+
return exports.globalAppender;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
exports.appender = appender;
|
|
31
|
+
exports.combineAppenders = combineAppenders;
|
|
32
|
+
exports.filterMessages = filterMessages;
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var core = require('./core.js');
|
|
6
|
+
var globalAppender = require('./global-appender-f4ab2f94.js');
|
|
7
|
+
|
|
8
|
+
if (!globalAppender.appender()) {
|
|
9
|
+
const { asciiPrefixes, colors, unicodePrefixes } = require('./default-formatting');
|
|
10
|
+
const { createConsoleAppender } = require('./console-appender');
|
|
11
|
+
const { filterMessages } = require('./appender-utils');
|
|
12
|
+
const { createFormatter, terminalSupportsUnicode } = require('./format-utils');
|
|
13
|
+
const formatter = createFormatter(colors, terminalSupportsUnicode() ? unicodePrefixes : asciiPrefixes);
|
|
14
|
+
globalAppender.appender(filterMessages((message) => message.loglevel > 0 /* verbose */, createConsoleAppender(formatter)));
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
exports.createLogger = core.createLogger;
|
|
18
|
+
exports.appender = globalAppender.appender;
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export { createLogger } from './core.mjs';
|
|
2
|
+
import { a as appender } from './global-appender-1e01c3e5.js';
|
|
3
|
+
export { a as appender } from './global-appender-1e01c3e5.js';
|
|
4
|
+
|
|
5
|
+
if (!appender()) {
|
|
6
|
+
const [{ asciiPrefixes, colors, unicodePrefixes }, { createConsoleAppender }, { filterMessages }, { createFormatter, terminalSupportsUnicode }] = await Promise.all([
|
|
7
|
+
import('./default-formatting.mjs'),
|
|
8
|
+
import('./console-appender.mjs'),
|
|
9
|
+
import('./global-appender-1e01c3e5.js').then(function (n) { return n.b; }),
|
|
10
|
+
import('./format-utils.mjs')
|
|
11
|
+
]);
|
|
12
|
+
const formatter = createFormatter(colors, terminalSupportsUnicode() ? unicodePrefixes : asciiPrefixes);
|
|
13
|
+
appender(filterMessages((message) => message.loglevel > 0 /* verbose */, createConsoleAppender(formatter)));
|
|
14
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("./core"),require("./default-formatting"),require("./console-appender"),require("./format-utils")):"function"==typeof define&&define.amd?define(["exports","./core","./default-formatting","./console-appender","./format-utils"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).nicetiesLogger={},e.nicetiesLoggerCore,e.nicetiesLoggerDefaultFormatting,e.nicetiesLoggerConsoleAppender,e.nicetiesLoggerFormatUtils)}(this,(function(e,t,n,o,r){"use strict";let i;function u(e){return void 0!==e&&(i=e),i}if(!u()){const e=r.createFormatter(n.colors,r.terminalSupportsUnicode()?n.unicodePrefixes:n.asciiPrefixes);u(function(e,t){return function(n){e(n)&&t(n)}}((e=>e.loglevel>0),o.createConsoleAppender(e)))}Object.defineProperty(e,"createLogger",{enumerable:!0,get:function(){return t.createLogger}}),e.appender=u,Object.defineProperty(e,"__esModule",{value:!0})}));
|
|
2
|
+
//# sourceMappingURL=index.umd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.umd.js","sources":["../src/details/global-appender.ts","../src/index.ts","../src/appender-utils.ts"],"sourcesContent":["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 { createLogger } from './core';\nimport { appender } from './details/global-appender';\nimport { LogLevel, LogMessage } from './types';\nimport { asciiPrefixes, colors, unicodePrefixes } from './default-formatting';\nimport { createConsoleAppender } from './console-appender';\nimport { filterMessages } from './appender-utils';\nimport { createFormatter, terminalSupportsUnicode } from './format-utils';\n\nif (!appender()) {\n const formatter = createFormatter(colors, terminalSupportsUnicode() ? unicodePrefixes : asciiPrefixes);\n appender(filterMessages((message: LogMessage) => (message.loglevel as number) > LogLevel.verbose, createConsoleAppender(formatter)));\n}\n\nexport * from './types';\nexport { createLogger, appender };\n","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}"],"names":["globalAppender","appender","undefined","formatter","createFormatter","colors","terminalSupportsUnicode","unicodePrefixes","asciiPrefixes","predicate","logMessage","filterMessages","message","loglevel","createConsoleAppender"],"mappings":"iiBAGO,IAAIA,WAEKC,EAA+BA,GAI3C,YAHiBC,IAAbD,IACAD,EAAiBC,GAEdD,ECDX,IAAKC,IAAY,CACb,MAAME,EAAYC,kBAAgBC,SAAQC,4BAA4BC,kBAAkBC,iBACxFP,WCRiDQ,EAA8DR,GAC/G,OAAO,SAASS,GACRD,EAAUC,IACVT,EAASS,IDKRC,EAAgBC,GAAyBA,EAAQC,YAAwCC,wBAAsBX"}
|
package/dist/simple.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { combineAppenders, filterMessages } from './appender-utils';
|
|
2
|
+
import { appender } from './details/global-appender';
|
|
3
|
+
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;
|
|
7
|
+
};
|
|
8
|
+
export { appender, combineAppenders, filterMessages };
|
package/dist/simple.js
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var globalAppender = require('./global-appender-f4ab2f94.js');
|
|
6
|
+
|
|
7
|
+
function createLogger(tag) {
|
|
8
|
+
let myAppender = (message) => { globalAppender.globalAppender && globalAppender.globalAppender(message); };
|
|
9
|
+
const loggerInstance = Object.assign(function log(message, loglevel = 1 /* info */, context) {
|
|
10
|
+
myAppender({
|
|
11
|
+
action: 3 /* log */,
|
|
12
|
+
message,
|
|
13
|
+
loglevel,
|
|
14
|
+
tag,
|
|
15
|
+
context
|
|
16
|
+
});
|
|
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;
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
return loggerInstance;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
exports.appender = globalAppender.appender;
|
|
31
|
+
exports.combineAppenders = globalAppender.combineAppenders;
|
|
32
|
+
exports.filterMessages = globalAppender.filterMessages;
|
|
33
|
+
exports.createLogger = createLogger;
|
package/dist/simple.mjs
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { f as filterMessages, c as combineAppenders, g as globalAppender } from './global-appender-1e01c3e5.js';
|
|
2
|
+
export { a as appender, c as combineAppenders, f as filterMessages } from './global-appender-1e01c3e5.js';
|
|
3
|
+
|
|
4
|
+
function createLogger(tag) {
|
|
5
|
+
let myAppender = (message) => { globalAppender && globalAppender(message); };
|
|
6
|
+
const loggerInstance = Object.assign(function log(message, loglevel = 1 /* info */, context) {
|
|
7
|
+
myAppender({
|
|
8
|
+
action: 3 /* log */,
|
|
9
|
+
message,
|
|
10
|
+
loglevel,
|
|
11
|
+
tag,
|
|
12
|
+
context
|
|
13
|
+
});
|
|
14
|
+
}, {
|
|
15
|
+
withFilter(predicate) {
|
|
16
|
+
myAppender = filterMessages(predicate, myAppender);
|
|
17
|
+
return loggerInstance;
|
|
18
|
+
},
|
|
19
|
+
withAppender(appender) {
|
|
20
|
+
myAppender = combineAppenders(myAppender, appender);
|
|
21
|
+
return loggerInstance;
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
return loggerInstance;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export { createLogger };
|
|
@@ -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).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})}));
|
|
2
|
+
//# sourceMappingURL=simple.umd.js.map
|
|
@@ -0,0 +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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export declare const enum LogLevel {
|
|
2
|
+
verbose = 0,
|
|
3
|
+
info = 1,
|
|
4
|
+
warn = 2,
|
|
5
|
+
error = 3
|
|
6
|
+
}
|
|
7
|
+
export declare const enum Action {
|
|
8
|
+
start = 0,
|
|
9
|
+
update = 1,
|
|
10
|
+
finish = 2,
|
|
11
|
+
log = 3
|
|
12
|
+
}
|
|
13
|
+
export declare type LogMessage<ErrorContext = Error> = {
|
|
14
|
+
inputId: number;
|
|
15
|
+
loglevel: LogLevel;
|
|
16
|
+
message: string;
|
|
17
|
+
action: Action.start | Action.update | Action.finish;
|
|
18
|
+
tag?: string;
|
|
19
|
+
parentId?: number;
|
|
20
|
+
ref: WeakRef<never>;
|
|
21
|
+
} | {
|
|
22
|
+
inputId?: number;
|
|
23
|
+
loglevel: LogLevel;
|
|
24
|
+
message: string;
|
|
25
|
+
action: Action.log;
|
|
26
|
+
tag?: string;
|
|
27
|
+
parentId?: number;
|
|
28
|
+
ref?: WeakRef<never>;
|
|
29
|
+
context?: ErrorContext;
|
|
30
|
+
};
|
|
31
|
+
export declare type Appender<ErrorContext = Error> = (message: LogMessage<ErrorContext>) => void;
|
|
32
|
+
export declare type Identity = {
|
|
33
|
+
id?: number;
|
|
34
|
+
};
|
|
35
|
+
export declare type Prefixes = {
|
|
36
|
+
[index in LogLevel]: string;
|
|
37
|
+
};
|
|
38
|
+
export declare type ColorFormatters = {
|
|
39
|
+
[index in LogLevel]: (((text: string) => string) | undefined);
|
|
40
|
+
};
|
|
41
|
+
export declare type Formatter = (message: string, loglevel: LogLevel, usePrefix?: string | boolean, identation?: number) => string;
|
package/package.json
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "1.0.0-alpha.2",
|
|
3
|
+
"license": "MIT",
|
|
4
|
+
"name": "@niceties/logger",
|
|
5
|
+
"author": "Konstantin Shutkin",
|
|
6
|
+
"funding": "https://www.donationalerts.com/r/excitingcode",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"require": "./dist/index.js",
|
|
11
|
+
"default": "./dist/index.mjs"
|
|
12
|
+
},
|
|
13
|
+
"./default-formatting": {
|
|
14
|
+
"require": "./dist/default-formatting.js",
|
|
15
|
+
"default": "./dist/default-formatting.mjs"
|
|
16
|
+
},
|
|
17
|
+
"./core": {
|
|
18
|
+
"require": "./dist/core.js",
|
|
19
|
+
"default": "./dist/core.mjs"
|
|
20
|
+
},
|
|
21
|
+
"./simple": {
|
|
22
|
+
"require": "./dist/simple.js",
|
|
23
|
+
"default": "./dist/simple.mjs"
|
|
24
|
+
},
|
|
25
|
+
"./console-appender": {
|
|
26
|
+
"require": "./dist/console-appender.js",
|
|
27
|
+
"default": "./dist/console-appender.mjs"
|
|
28
|
+
},
|
|
29
|
+
"./format-utils": {
|
|
30
|
+
"require": "./dist/format-utils.js",
|
|
31
|
+
"default": "./dist/format-utils.mjs"
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
"main": "./dist/index.js",
|
|
35
|
+
"module": "./dist/index.mjs",
|
|
36
|
+
"typings": "./dist/index.d.ts",
|
|
37
|
+
"unpkg": "./dist/index.umd.js",
|
|
38
|
+
"files": [
|
|
39
|
+
"dist",
|
|
40
|
+
"default-formatting",
|
|
41
|
+
"core",
|
|
42
|
+
"console-appender",
|
|
43
|
+
"format-utils",
|
|
44
|
+
"types",
|
|
45
|
+
"simple"
|
|
46
|
+
],
|
|
47
|
+
"engines": {
|
|
48
|
+
"node": ">=14.8"
|
|
49
|
+
},
|
|
50
|
+
"scripts": {
|
|
51
|
+
"build": "rimraf ./dist && rollup -c",
|
|
52
|
+
"dev": "rimraf ./dist && rollup -c -w",
|
|
53
|
+
"test": "jest --collectCoverage",
|
|
54
|
+
"lint": "eslint ./src",
|
|
55
|
+
"semantic-release": "npx semantic-release"
|
|
56
|
+
},
|
|
57
|
+
"devDependencies": {
|
|
58
|
+
"@rollup/plugin-commonjs": "21.0.1",
|
|
59
|
+
"@rollup/plugin-node-resolve": "13.0.6",
|
|
60
|
+
"@semantic-release/changelog": "6.0.1",
|
|
61
|
+
"@semantic-release/commit-analyzer": "9.0.1",
|
|
62
|
+
"@semantic-release/git": "10.0.1",
|
|
63
|
+
"@semantic-release/npm": "8.0.2",
|
|
64
|
+
"@semantic-release/release-notes-generator": "10.0.2",
|
|
65
|
+
"@types/jest": "27.0.2",
|
|
66
|
+
"@typescript-eslint/eslint-plugin": "5.3.0",
|
|
67
|
+
"@typescript-eslint/parser": "5.3.0",
|
|
68
|
+
"conventional-changelog-angular": "5.0.13",
|
|
69
|
+
"eslint": "8.1.0",
|
|
70
|
+
"jest": "27.3.1",
|
|
71
|
+
"lodash": "4.17.21",
|
|
72
|
+
"rimraf": "3.0.2",
|
|
73
|
+
"rollup": "2.60.1",
|
|
74
|
+
"rollup-plugin-preprocess": "0.0.4",
|
|
75
|
+
"rollup-plugin-terser": "7.0.2",
|
|
76
|
+
"rollup-plugin-typescript2": "0.31.1",
|
|
77
|
+
"semantic-release": "18.0.0",
|
|
78
|
+
"semantic-release-monorepo": "7.0.5",
|
|
79
|
+
"ts-jest": "27.0.7",
|
|
80
|
+
"tslib": "2.3.1",
|
|
81
|
+
"typescript": "4.4.x"
|
|
82
|
+
},
|
|
83
|
+
"dependencies": {
|
|
84
|
+
"kleur": "^4.1.4"
|
|
85
|
+
}
|
|
86
|
+
}
|