@bitblit/ratchet-common 4.0.115-alpha → 4.0.119-alpha
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/lib/index.d.ts +73 -1
- package/lib/index.mjs +4 -0
- package/lib/index.mjs.map +1 -0
- package/lib/lang/base64-ratchet.d.ts +1 -1
- package/lib/stream/buffer-writable.d.ts +2 -2
- package/lib/stream/multi-stream.d.ts +1 -1
- package/lib/stream/stream-ratchet.d.ts +2 -2
- package/lib/stream/string-writable.d.ts +1 -1
- package/package.json +9 -5
- package/lib/2d/line-2d.js +0 -1
- package/lib/2d/plane-2d.js +0 -1
- package/lib/2d/point-2d.js +0 -1
- package/lib/2d/poly-line-2d.js +0 -1
- package/lib/2d/ratchet-2d.js +0 -245
- package/lib/2d/ratchet-2d.spec.js +0 -117
- package/lib/build/build-information.js +0 -1
- package/lib/build/ratchet-common-info.js +0 -14
- package/lib/histogram/histogram-entry.js +0 -1
- package/lib/histogram/histogram.js +0 -48
- package/lib/histogram/histogram.spec.js +0 -19
- package/lib/index.js +0 -1
- package/lib/jwt/common-jwt-token.js +0 -1
- package/lib/jwt/expired-jwt-handling.js +0 -6
- package/lib/jwt/jwt-ratchet-like.js +0 -1
- package/lib/jwt/jwt-ratchet.js +0 -164
- package/lib/jwt/jwt-ratchet.spec.js +0 -49
- package/lib/jwt/jwt-token-base.js +0 -1
- package/lib/lang/array-ratchet.js +0 -83
- package/lib/lang/array-ratchet.spec.js +0 -68
- package/lib/lang/base64-ratchet.js +0 -45
- package/lib/lang/base64-ratchet.spec.js +0 -28
- package/lib/lang/boolean-ratchet.js +0 -45
- package/lib/lang/boolean-ratchet.spec.js +0 -81
- package/lib/lang/composite-last-success-provider.js +0 -26
- package/lib/lang/composite-last-success-provider.spec.js +0 -26
- package/lib/lang/date-ratchet.js +0 -29
- package/lib/lang/date-ratchet.spec.js +0 -21
- package/lib/lang/duration-ratchet.js +0 -42
- package/lib/lang/duration-ratchet.spec.js +0 -39
- package/lib/lang/enum-ratchet.js +0 -30
- package/lib/lang/enum-ratchet.spec.js +0 -31
- package/lib/lang/error-ratchet.js +0 -44
- package/lib/lang/error-ratchet.spec.js +0 -20
- package/lib/lang/esm-ratchet.js +0 -17
- package/lib/lang/expiring-object.js +0 -72
- package/lib/lang/expiring-object.spec.js +0 -51
- package/lib/lang/geolocation-ratchet.js +0 -263
- package/lib/lang/geolocation-ratchet.spec.js +0 -74
- package/lib/lang/global-ratchet.js +0 -43
- package/lib/lang/global-ratchet.spec.js +0 -14
- package/lib/lang/key-value.js +0 -4
- package/lib/lang/last-success-provider.js +0 -1
- package/lib/lang/map-ratchet.js +0 -164
- package/lib/lang/map-ratchet.spec.js +0 -90
- package/lib/lang/no.js +0 -4
- package/lib/lang/no.spec.js +0 -7
- package/lib/lang/number-ratchet.js +0 -155
- package/lib/lang/number-ratchet.spec.js +0 -118
- package/lib/lang/parsed-url.js +0 -1
- package/lib/lang/promise-ratchet.js +0 -138
- package/lib/lang/promise-ratchet.spec.js +0 -74
- package/lib/lang/require-ratchet.js +0 -56
- package/lib/lang/require-ratchet.spec.js +0 -80
- package/lib/lang/stop-watch.js +0 -114
- package/lib/lang/string-ratchet.js +0 -201
- package/lib/lang/string-ratchet.spec.js +0 -158
- package/lib/lang/time-zone-ratchet.js +0 -77
- package/lib/lang/time-zone-ratchet.spec.js +0 -40
- package/lib/lang/timeout-token.js +0 -17
- package/lib/lang/timeout-token.spec.js +0 -9
- package/lib/lang/transform-ratchet.js +0 -66
- package/lib/lang/transform-ratchet.spec.js +0 -118
- package/lib/logger/classic-single-line-log-message-formatter.js +0 -13
- package/lib/logger/log-message-builder.js +0 -48
- package/lib/logger/log-message-format-type.js +0 -6
- package/lib/logger/log-message-formatter.js +0 -1
- package/lib/logger/log-message-processor.js +0 -1
- package/lib/logger/log-message.js +0 -1
- package/lib/logger/log-snapshot.js +0 -1
- package/lib/logger/logger-instance.js +0 -208
- package/lib/logger/logger-level-name.js +0 -9
- package/lib/logger/logger-meta.js +0 -1
- package/lib/logger/logger-options.js +0 -1
- package/lib/logger/logger-output-function.js +0 -6
- package/lib/logger/logger-ring-buffer.js +0 -73
- package/lib/logger/logger-util.js +0 -44
- package/lib/logger/logger-util.spec.js +0 -9
- package/lib/logger/logger.js +0 -134
- package/lib/logger/logger.spec.js +0 -134
- package/lib/logger/none-log-message-formatter.js +0 -5
- package/lib/logger/structured-json-log-message-formatter.js +0 -19
- package/lib/network/browser-local-ip-provider.js +0 -21
- package/lib/network/browser-local-ip-provider.spec.js +0 -16
- package/lib/network/fixed-local-ip-provider.js +0 -9
- package/lib/network/local-ip-provider.js +0 -1
- package/lib/network/network-ratchet.js +0 -102
- package/lib/network/network-ratchet.spec.js +0 -13
- package/lib/stream/buffer-writable.js +0 -16
- package/lib/stream/multi-stream.js +0 -12
- package/lib/stream/stream-ratchet.js +0 -68
- package/lib/stream/stream-ratchet.spec.js +0 -13
- package/lib/stream/string-writable.js +0 -14
- package/lib/stream/string-writable.spec.js +0 -12
- package/lib/third-party/google/google-recaptcha-ratchet.js +0 -28
- package/lib/third-party/google/google-recaptcha-ratchet.spec.js +0 -20
- package/lib/third-party/twilio/twilio-ratchet.js +0 -73
- package/lib/transform/built-in-transforms.js +0 -191
- package/lib/transform/transform-rule.js +0 -1
- package/lib/tx/transaction-configuration.js +0 -1
- package/lib/tx/transaction-final-state.js +0 -6
- package/lib/tx/transaction-ratchet.js +0 -76
- package/lib/tx/transaction-ratchet.spec.js +0 -130
- package/lib/tx/transaction-result.js +0 -1
- package/lib/tx/transaction-step.js +0 -1
|
@@ -1,208 +0,0 @@
|
|
|
1
|
-
import { LoggerRingBuffer } from './logger-ring-buffer.js';
|
|
2
|
-
import { LoggerLevelName } from './logger-level-name.js';
|
|
3
|
-
import { LoggerUtil } from './logger-util.js';
|
|
4
|
-
import { LogMessageFormatType } from './log-message-format-type.js';
|
|
5
|
-
import { ClassicSingleLineLogMessageFormatter } from './classic-single-line-log-message-formatter.js';
|
|
6
|
-
import { NoneLogMessageFormatter } from './none-log-message-formatter.js';
|
|
7
|
-
import { StructuredJsonLogMessageFormatter } from './structured-json-log-message-formatter.js';
|
|
8
|
-
import { StringRatchet } from '../lang/string-ratchet.js';
|
|
9
|
-
export class LoggerInstance {
|
|
10
|
-
loggerInstanceName;
|
|
11
|
-
_loggerMeta;
|
|
12
|
-
_ringBuffer;
|
|
13
|
-
_formatter;
|
|
14
|
-
_level;
|
|
15
|
-
_handlerFunctionMap;
|
|
16
|
-
_options;
|
|
17
|
-
constructor(loggerInstanceName = 'default', inOptions) {
|
|
18
|
-
this.loggerInstanceName = loggerInstanceName;
|
|
19
|
-
this.options = inOptions;
|
|
20
|
-
}
|
|
21
|
-
addPreProcessor(proc) {
|
|
22
|
-
if (proc) {
|
|
23
|
-
this._options.preProcessors = this._options.preProcessors || [];
|
|
24
|
-
this._options.preProcessors.push(proc);
|
|
25
|
-
}
|
|
26
|
-
return Object.assign([], this._options.preProcessors);
|
|
27
|
-
}
|
|
28
|
-
get ringBuffer() {
|
|
29
|
-
return this._ringBuffer;
|
|
30
|
-
}
|
|
31
|
-
dumpConfigurationIntoLog() {
|
|
32
|
-
this.error('ERROR enabled');
|
|
33
|
-
this.warn('WARN enabled');
|
|
34
|
-
this.info('INFO enabled');
|
|
35
|
-
this.verbose('VERBOSE enabled');
|
|
36
|
-
this.debug('DEBUG enabled');
|
|
37
|
-
this.silly('SILLY enabled');
|
|
38
|
-
}
|
|
39
|
-
dumpOptionsIntoLog() {
|
|
40
|
-
this.info('Options: %j', this.options);
|
|
41
|
-
if (this?.options?.preProcessors?.length) {
|
|
42
|
-
const labels = this.options.preProcessors.map((p) => StringRatchet.trimToNull(p.label()) || 'Unlabelled');
|
|
43
|
-
this.info('Preprocessors: %j', labels);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
changeRingBufferSize(newSize) {
|
|
47
|
-
this._ringBuffer = null;
|
|
48
|
-
if (newSize) {
|
|
49
|
-
this._ringBuffer = new LoggerRingBuffer(newSize);
|
|
50
|
-
this._options.ringBufferSize = newSize;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
updateTracePrefix(newValue) {
|
|
54
|
-
this._options.trace = newValue;
|
|
55
|
-
}
|
|
56
|
-
get options() {
|
|
57
|
-
return Object.assign({}, this._options);
|
|
58
|
-
}
|
|
59
|
-
set options(newOpts) {
|
|
60
|
-
this._options = Object.assign({}, newOpts);
|
|
61
|
-
if (this._options.ringBufferSize) {
|
|
62
|
-
this._ringBuffer = new LoggerRingBuffer(this._options.ringBufferSize);
|
|
63
|
-
}
|
|
64
|
-
switch (this._options.formatType) {
|
|
65
|
-
case LogMessageFormatType.None:
|
|
66
|
-
this._formatter = new NoneLogMessageFormatter();
|
|
67
|
-
break;
|
|
68
|
-
case LogMessageFormatType.StructuredJson:
|
|
69
|
-
this._formatter = new StructuredJsonLogMessageFormatter();
|
|
70
|
-
break;
|
|
71
|
-
default:
|
|
72
|
-
this._formatter = new ClassicSingleLineLogMessageFormatter();
|
|
73
|
-
break;
|
|
74
|
-
}
|
|
75
|
-
this._level = this._options.initialLevel;
|
|
76
|
-
this._handlerFunctionMap = LoggerUtil.handlerFunctionMap(this._options.outputFunction);
|
|
77
|
-
const oldId = this._loggerMeta ? this._loggerMeta.loggerInstanceId : null;
|
|
78
|
-
this._loggerMeta = {
|
|
79
|
-
options: this._options,
|
|
80
|
-
loggerInstanceName: this.loggerInstanceName,
|
|
81
|
-
loggerInstanceId: oldId || StringRatchet.createRandomHexString(8),
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
get level() {
|
|
85
|
-
return this._level;
|
|
86
|
-
}
|
|
87
|
-
set level(newLevel) {
|
|
88
|
-
if (!newLevel) {
|
|
89
|
-
throw new Error('Cannot set level to null/undefined');
|
|
90
|
-
}
|
|
91
|
-
this._level = newLevel;
|
|
92
|
-
}
|
|
93
|
-
consoleLogPassThru(level, ...input) {
|
|
94
|
-
if (LoggerUtil.levelIsEnabled(level, this._level)) {
|
|
95
|
-
let passThruPrefix = this._options.trace || '';
|
|
96
|
-
passThruPrefix += '[' + level + '] ';
|
|
97
|
-
input.unshift(passThruPrefix);
|
|
98
|
-
const fn = this._handlerFunctionMap.get(level) || LoggerUtil.defaultHandlerFunction;
|
|
99
|
-
fn(...input);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
createLogMessage(level, params, format, ...input) {
|
|
103
|
-
const rval = {
|
|
104
|
-
lvl: level,
|
|
105
|
-
timestamp: Date.now(),
|
|
106
|
-
messageSource: format,
|
|
107
|
-
subsVars: input,
|
|
108
|
-
params: params,
|
|
109
|
-
};
|
|
110
|
-
return rval;
|
|
111
|
-
}
|
|
112
|
-
formatMessage(msg) {
|
|
113
|
-
const rval = msg ? this._formatter.formatMessage(msg, this._loggerMeta) : null;
|
|
114
|
-
return rval;
|
|
115
|
-
}
|
|
116
|
-
formatMessages(msgs) {
|
|
117
|
-
const rval = (msgs || []).map((m) => this.formatMessage(m)).filter((m) => !!m);
|
|
118
|
-
return rval;
|
|
119
|
-
}
|
|
120
|
-
recordMessageBuilder(msgBuild) {
|
|
121
|
-
return this.recordMessage(msgBuild.toMessage());
|
|
122
|
-
}
|
|
123
|
-
recordMessage(inMsg) {
|
|
124
|
-
let rval = null;
|
|
125
|
-
if (LoggerUtil.levelIsEnabled(inMsg.lvl, this._level)) {
|
|
126
|
-
let msg = Object.assign({}, inMsg);
|
|
127
|
-
if (this._options.preProcessors?.length) {
|
|
128
|
-
for (let i = 0; i < this._options.preProcessors.length; i++) {
|
|
129
|
-
msg = this._options.preProcessors[i].process(msg);
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
rval = this.formatMessage(msg);
|
|
133
|
-
if (rval) {
|
|
134
|
-
const fn = this._handlerFunctionMap.get(msg.lvl) || LoggerUtil.defaultHandlerFunction;
|
|
135
|
-
fn(rval);
|
|
136
|
-
if (this._ringBuffer) {
|
|
137
|
-
this._ringBuffer.addToRingBuffer(msg);
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
else {
|
|
142
|
-
}
|
|
143
|
-
return rval;
|
|
144
|
-
}
|
|
145
|
-
error(format, ...input) {
|
|
146
|
-
const msg = this.createLogMessage(LoggerLevelName.error, {}, format, ...input);
|
|
147
|
-
return this.recordMessage(msg);
|
|
148
|
-
}
|
|
149
|
-
errorP(...input) {
|
|
150
|
-
this.consoleLogPassThru(LoggerLevelName.error, ...input);
|
|
151
|
-
}
|
|
152
|
-
warn(format, ...input) {
|
|
153
|
-
const msg = this.createLogMessage(LoggerLevelName.warn, {}, format, ...input);
|
|
154
|
-
return this.recordMessage(msg);
|
|
155
|
-
}
|
|
156
|
-
warnP(...input) {
|
|
157
|
-
this.consoleLogPassThru(LoggerLevelName.warn, ...input);
|
|
158
|
-
}
|
|
159
|
-
info(format, ...input) {
|
|
160
|
-
const msg = this.createLogMessage(LoggerLevelName.info, {}, format, ...input);
|
|
161
|
-
return this.recordMessage(msg);
|
|
162
|
-
}
|
|
163
|
-
infoP(...input) {
|
|
164
|
-
this.consoleLogPassThru(LoggerLevelName.info, ...input);
|
|
165
|
-
}
|
|
166
|
-
verbose(format, ...input) {
|
|
167
|
-
const msg = this.createLogMessage(LoggerLevelName.verbose, {}, format, ...input);
|
|
168
|
-
return this.recordMessage(msg);
|
|
169
|
-
}
|
|
170
|
-
verboseP(...input) {
|
|
171
|
-
this.consoleLogPassThru(LoggerLevelName.verbose, ...input);
|
|
172
|
-
}
|
|
173
|
-
debug(format, ...input) {
|
|
174
|
-
const msg = this.createLogMessage(LoggerLevelName.debug, {}, format, ...input);
|
|
175
|
-
return this.recordMessage(msg);
|
|
176
|
-
}
|
|
177
|
-
debugP(...input) {
|
|
178
|
-
this.consoleLogPassThru(LoggerLevelName.debug, ...input);
|
|
179
|
-
}
|
|
180
|
-
silly(format, ...input) {
|
|
181
|
-
const msg = this.createLogMessage(LoggerLevelName.silly, {}, format, ...input);
|
|
182
|
-
return this.recordMessage(msg);
|
|
183
|
-
}
|
|
184
|
-
sillyP(...input) {
|
|
185
|
-
this.consoleLogPassThru(LoggerLevelName.silly, ...input);
|
|
186
|
-
}
|
|
187
|
-
logByLevel(level, format, ...input) {
|
|
188
|
-
const msg = this.createLogMessage(level, {}, format, ...input);
|
|
189
|
-
this.recordMessage(msg);
|
|
190
|
-
}
|
|
191
|
-
importMessages(msgs, prefixIn = '', addTimestamp = true) {
|
|
192
|
-
const prefix = prefixIn || '';
|
|
193
|
-
if (msgs && msgs.length > 0) {
|
|
194
|
-
this.silly('Received import data : %d msgs', msgs.length);
|
|
195
|
-
msgs.forEach((m) => {
|
|
196
|
-
if (m.messageSource) {
|
|
197
|
-
let mOut = prefix;
|
|
198
|
-
if (addTimestamp) {
|
|
199
|
-
const ts = String(new Date()).substring(15, 24);
|
|
200
|
-
mOut += ' (' + ts + ') : ';
|
|
201
|
-
mOut += m.messageSource;
|
|
202
|
-
}
|
|
203
|
-
this.logByLevel(m.lvl, mOut);
|
|
204
|
-
}
|
|
205
|
-
});
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
export var LoggerLevelName;
|
|
2
|
-
(function (LoggerLevelName) {
|
|
3
|
-
LoggerLevelName["error"] = "error";
|
|
4
|
-
LoggerLevelName["warn"] = "warn";
|
|
5
|
-
LoggerLevelName["info"] = "info";
|
|
6
|
-
LoggerLevelName["verbose"] = "verbose";
|
|
7
|
-
LoggerLevelName["debug"] = "debug";
|
|
8
|
-
LoggerLevelName["silly"] = "silly";
|
|
9
|
-
})(LoggerLevelName || (LoggerLevelName = {}));
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
export var LoggerOutputFunction;
|
|
2
|
-
(function (LoggerOutputFunction) {
|
|
3
|
-
LoggerOutputFunction["Console"] = "Console";
|
|
4
|
-
LoggerOutputFunction["ConsoleNoDebug"] = "ConsoleNoDebug";
|
|
5
|
-
LoggerOutputFunction["StdOut"] = "StdOut";
|
|
6
|
-
})(LoggerOutputFunction || (LoggerOutputFunction = {}));
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import { Logger } from './logger.js';
|
|
2
|
-
import { LoggerLevelName } from './logger-level-name.js';
|
|
3
|
-
export class LoggerRingBuffer {
|
|
4
|
-
_lastLogMessage = { messageSource: 'No message yet', timestamp: new Date().getTime(), lvl: LoggerLevelName.info };
|
|
5
|
-
_buffer = [];
|
|
6
|
-
_bufferIdx = 0;
|
|
7
|
-
_lastSnapshotIdx = 0;
|
|
8
|
-
_bufferSize;
|
|
9
|
-
constructor(size) {
|
|
10
|
-
if (!size) {
|
|
11
|
-
throw new Error('Cannot create ring buffer of size 0');
|
|
12
|
-
}
|
|
13
|
-
this._bufferSize = size;
|
|
14
|
-
}
|
|
15
|
-
get currentIndex() {
|
|
16
|
-
return this._bufferIdx;
|
|
17
|
-
}
|
|
18
|
-
get lastSnapshotIdx() {
|
|
19
|
-
return this._lastSnapshotIdx;
|
|
20
|
-
}
|
|
21
|
-
set bufferSize(newSize) {
|
|
22
|
-
if (!newSize) {
|
|
23
|
-
throw new Error('Cannot create ring buffer of size 0');
|
|
24
|
-
}
|
|
25
|
-
this._bufferSize = newSize;
|
|
26
|
-
this.clearRingBuffer();
|
|
27
|
-
}
|
|
28
|
-
getMessages(inStartFrom = null, clear = false, reverseSort = false) {
|
|
29
|
-
let rval = null;
|
|
30
|
-
if (this._bufferIdx < this._bufferSize) {
|
|
31
|
-
const start = inStartFrom == null ? 0 : inStartFrom;
|
|
32
|
-
rval = this._buffer.slice(start, this._bufferIdx);
|
|
33
|
-
}
|
|
34
|
-
else {
|
|
35
|
-
rval = [];
|
|
36
|
-
const firstIdx = this._bufferIdx - this._bufferSize;
|
|
37
|
-
const startFrom = inStartFrom ? Math.max(inStartFrom, firstIdx) : firstIdx;
|
|
38
|
-
for (let i = startFrom; i < this._bufferIdx; i++) {
|
|
39
|
-
rval.push(this._buffer[i % this._bufferSize]);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
if (clear) {
|
|
43
|
-
this.clearRingBuffer();
|
|
44
|
-
}
|
|
45
|
-
if (reverseSort) {
|
|
46
|
-
rval = rval.reverse();
|
|
47
|
-
}
|
|
48
|
-
return rval;
|
|
49
|
-
}
|
|
50
|
-
takeSnapshot() {
|
|
51
|
-
const trailingEdge = Math.max(0, this._bufferIdx - this._bufferSize);
|
|
52
|
-
const rval = {
|
|
53
|
-
messages: Logger.getMessages(this._lastSnapshotIdx),
|
|
54
|
-
logMessagesTruncated: Math.max(0, trailingEdge - this._lastSnapshotIdx),
|
|
55
|
-
};
|
|
56
|
-
this._lastSnapshotIdx = this._bufferIdx;
|
|
57
|
-
return rval;
|
|
58
|
-
}
|
|
59
|
-
getLastLogMessage() {
|
|
60
|
-
return Object.assign({}, this._lastLogMessage);
|
|
61
|
-
}
|
|
62
|
-
clearRingBuffer() {
|
|
63
|
-
this._buffer = [];
|
|
64
|
-
this._bufferIdx = 0;
|
|
65
|
-
this._lastSnapshotIdx = 0;
|
|
66
|
-
Logger.info('Cleared ring buffer (size is now %d)', this._bufferSize);
|
|
67
|
-
}
|
|
68
|
-
addToRingBuffer(newMsg) {
|
|
69
|
-
this._lastLogMessage = newMsg;
|
|
70
|
-
this._buffer[this._bufferIdx % this._bufferSize] = newMsg;
|
|
71
|
-
this._bufferIdx++;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { LoggerLevelName } from './logger-level-name.js';
|
|
2
|
-
import { LoggerOutputFunction } from './logger-output-function.js';
|
|
3
|
-
export class LoggerUtil {
|
|
4
|
-
static LOG_LEVELS_IN_ORDER = [
|
|
5
|
-
LoggerLevelName.error,
|
|
6
|
-
LoggerLevelName.warn,
|
|
7
|
-
LoggerLevelName.info,
|
|
8
|
-
LoggerLevelName.verbose,
|
|
9
|
-
LoggerLevelName.debug,
|
|
10
|
-
LoggerLevelName.silly,
|
|
11
|
-
];
|
|
12
|
-
static handlerFunctionMap(outputFn = LoggerOutputFunction.Console) {
|
|
13
|
-
const output = new Map();
|
|
14
|
-
if (outputFn === LoggerOutputFunction.StdOut) {
|
|
15
|
-
if (!process?.stdout?.write) {
|
|
16
|
-
throw new Error('Cannot use standard out - process.stdout.write not found');
|
|
17
|
-
}
|
|
18
|
-
const myStdOut = (chunk, cb) => process.stdout.write(chunk, 'utf-8', cb);
|
|
19
|
-
output.set(LoggerLevelName.error, myStdOut);
|
|
20
|
-
output.set(LoggerLevelName.warn, myStdOut);
|
|
21
|
-
output.set(LoggerLevelName.info, myStdOut);
|
|
22
|
-
output.set(LoggerLevelName.verbose, myStdOut);
|
|
23
|
-
output.set(LoggerLevelName.debug, myStdOut);
|
|
24
|
-
output.set(LoggerLevelName.silly, myStdOut);
|
|
25
|
-
}
|
|
26
|
-
else {
|
|
27
|
-
output.set(LoggerLevelName.error, console.error);
|
|
28
|
-
output.set(LoggerLevelName.warn, console.warn);
|
|
29
|
-
output.set(LoggerLevelName.info, console.info);
|
|
30
|
-
output.set(LoggerLevelName.verbose, outputFn === LoggerOutputFunction.ConsoleNoDebug ? console.log : console.debug);
|
|
31
|
-
output.set(LoggerLevelName.debug, outputFn === LoggerOutputFunction.ConsoleNoDebug ? console.log : console.debug);
|
|
32
|
-
output.set(LoggerLevelName.silly, outputFn === LoggerOutputFunction.ConsoleNoDebug ? console.log : console.debug);
|
|
33
|
-
}
|
|
34
|
-
return output;
|
|
35
|
-
}
|
|
36
|
-
static defaultHandlerFunction() {
|
|
37
|
-
return console.info;
|
|
38
|
-
}
|
|
39
|
-
static levelIsEnabled(targetLevel, currentEnabled) {
|
|
40
|
-
const idxTarget = LoggerUtil.LOG_LEVELS_IN_ORDER.indexOf(targetLevel);
|
|
41
|
-
const lvl = LoggerUtil.LOG_LEVELS_IN_ORDER.indexOf(currentEnabled);
|
|
42
|
-
return idxTarget > -1 && lvl > -1 && lvl >= idxTarget;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { LoggerUtil } from './logger-util.js';
|
|
2
|
-
import { LoggerLevelName } from './logger-level-name.js';
|
|
3
|
-
describe('#checkLevel', function () {
|
|
4
|
-
it('should check that level logging works', function () {
|
|
5
|
-
expect(LoggerUtil.levelIsEnabled(LoggerLevelName.info, LoggerLevelName.warn)).toEqual(false);
|
|
6
|
-
expect(LoggerUtil.levelIsEnabled(LoggerLevelName.warn, LoggerLevelName.info)).toEqual(true);
|
|
7
|
-
expect(LoggerUtil.levelIsEnabled(LoggerLevelName.warn, LoggerLevelName.warn)).toEqual(true);
|
|
8
|
-
});
|
|
9
|
-
});
|
package/lib/logger/logger.js
DELETED
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
import { LoggerInstance } from './logger-instance.js';
|
|
2
|
-
import { LogMessageFormatType } from './log-message-format-type.js';
|
|
3
|
-
import { LoggerLevelName } from './logger-level-name.js';
|
|
4
|
-
import { LoggerOutputFunction } from './logger-output-function.js';
|
|
5
|
-
export class Logger {
|
|
6
|
-
static LOGGER_INSTANCES = new Map();
|
|
7
|
-
static DEFAULT_OPTIONS = {
|
|
8
|
-
initialLevel: LoggerLevelName.info,
|
|
9
|
-
formatType: LogMessageFormatType.ClassicSingleLine,
|
|
10
|
-
trace: null,
|
|
11
|
-
globalVars: {},
|
|
12
|
-
outputFunction: LoggerOutputFunction.Console,
|
|
13
|
-
ringBufferSize: 0,
|
|
14
|
-
preProcessors: [],
|
|
15
|
-
};
|
|
16
|
-
static applyDefaultsToOptions(input) {
|
|
17
|
-
const rval = input || {};
|
|
18
|
-
rval.initialLevel = rval.initialLevel ?? Logger.DEFAULT_OPTIONS.initialLevel;
|
|
19
|
-
rval.formatType = rval.formatType ?? Logger.DEFAULT_OPTIONS.formatType;
|
|
20
|
-
rval.trace = rval.trace ?? Logger.DEFAULT_OPTIONS.trace;
|
|
21
|
-
rval.globalVars = rval.globalVars ?? Logger.DEFAULT_OPTIONS.globalVars;
|
|
22
|
-
rval.outputFunction = rval.outputFunction ?? Logger.DEFAULT_OPTIONS.outputFunction;
|
|
23
|
-
rval.ringBufferSize = rval.ringBufferSize ?? Logger.DEFAULT_OPTIONS.ringBufferSize;
|
|
24
|
-
return rval;
|
|
25
|
-
}
|
|
26
|
-
static changeDefaultOptions(input, retroactive) {
|
|
27
|
-
if (!input || !input.initialLevel || !input.formatType) {
|
|
28
|
-
throw new Error('Default options must be non-null, and provide initial level and format type');
|
|
29
|
-
}
|
|
30
|
-
Logger.DEFAULT_OPTIONS = Object.assign({}, input);
|
|
31
|
-
if (retroactive) {
|
|
32
|
-
Array.from(Logger.LOGGER_INSTANCES.values()).forEach((li) => (li.options = input));
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
static getLogger(loggerName = 'default', inOptions) {
|
|
36
|
-
let inst = Logger.LOGGER_INSTANCES.get(loggerName);
|
|
37
|
-
if (!inst) {
|
|
38
|
-
const options = Logger.applyDefaultsToOptions(inOptions);
|
|
39
|
-
inst = new LoggerInstance(loggerName, options);
|
|
40
|
-
Logger.LOGGER_INSTANCES.set(loggerName, inst);
|
|
41
|
-
}
|
|
42
|
-
return inst;
|
|
43
|
-
}
|
|
44
|
-
static recordMessageBuilder(msgBuild) {
|
|
45
|
-
return Logger.getLogger().recordMessageBuilder(msgBuild);
|
|
46
|
-
}
|
|
47
|
-
static recordMessage(msg) {
|
|
48
|
-
return Logger.getLogger().recordMessage(msg);
|
|
49
|
-
}
|
|
50
|
-
static formatMessages(msgs) {
|
|
51
|
-
return Logger.getLogger().formatMessages(msgs);
|
|
52
|
-
}
|
|
53
|
-
static updateTracePrefix(newValue) {
|
|
54
|
-
return Logger.getLogger().updateTracePrefix(newValue);
|
|
55
|
-
}
|
|
56
|
-
static changeRingBufferSize(newValue) {
|
|
57
|
-
return Logger.getLogger().changeRingBufferSize(newValue);
|
|
58
|
-
}
|
|
59
|
-
static getRingBuffer() {
|
|
60
|
-
return Logger.getLogger().ringBuffer;
|
|
61
|
-
}
|
|
62
|
-
static dumpConfigurationIntoLog() {
|
|
63
|
-
return Logger.getLogger().dumpConfigurationIntoLog();
|
|
64
|
-
}
|
|
65
|
-
static dumpOptionsIntoLog() {
|
|
66
|
-
return Logger.getLogger().dumpOptionsIntoLog();
|
|
67
|
-
}
|
|
68
|
-
static getLevel() {
|
|
69
|
-
return Logger.getLogger().level;
|
|
70
|
-
}
|
|
71
|
-
static setLevel(newLevel) {
|
|
72
|
-
Logger.getLogger().level = newLevel;
|
|
73
|
-
}
|
|
74
|
-
static getOptions() {
|
|
75
|
-
return Logger.getLogger().options;
|
|
76
|
-
}
|
|
77
|
-
static getMessages(inStartFrom = null, clear = false, reverseSort = false) {
|
|
78
|
-
const buf = Logger.getLogger().ringBuffer;
|
|
79
|
-
return buf ? buf.getMessages(inStartFrom, clear, reverseSort) : null;
|
|
80
|
-
}
|
|
81
|
-
static consoleLogPassThru(level, ...input) {
|
|
82
|
-
return Logger.getLogger().consoleLogPassThru(level, ...input);
|
|
83
|
-
}
|
|
84
|
-
static error(format, ...input) {
|
|
85
|
-
return Logger.getLogger().error(format, ...input);
|
|
86
|
-
}
|
|
87
|
-
static errorP(...input) {
|
|
88
|
-
return Logger.getLogger().errorP(...input);
|
|
89
|
-
}
|
|
90
|
-
static warn(format, ...input) {
|
|
91
|
-
return Logger.getLogger().warn(format, ...input);
|
|
92
|
-
}
|
|
93
|
-
static warnP(...input) {
|
|
94
|
-
return Logger.getLogger().warnP(...input);
|
|
95
|
-
}
|
|
96
|
-
static info(format, ...input) {
|
|
97
|
-
return Logger.getLogger().info(format, ...input);
|
|
98
|
-
}
|
|
99
|
-
static infoP(...input) {
|
|
100
|
-
return Logger.getLogger().infoP(...input);
|
|
101
|
-
}
|
|
102
|
-
static verbose(format, ...input) {
|
|
103
|
-
return Logger.getLogger().verbose(format, ...input);
|
|
104
|
-
}
|
|
105
|
-
static verboseP(...input) {
|
|
106
|
-
return Logger.getLogger().verboseP(...input);
|
|
107
|
-
}
|
|
108
|
-
static debug(format, ...input) {
|
|
109
|
-
return Logger.getLogger().debug(format, ...input);
|
|
110
|
-
}
|
|
111
|
-
static debugP(...input) {
|
|
112
|
-
return Logger.getLogger().debugP(...input);
|
|
113
|
-
}
|
|
114
|
-
static silly(format, ...input) {
|
|
115
|
-
return Logger.getLogger().silly(format, ...input);
|
|
116
|
-
}
|
|
117
|
-
static sillyP(...input) {
|
|
118
|
-
return Logger.getLogger().sillyP(...input);
|
|
119
|
-
}
|
|
120
|
-
static takeSnapshot() {
|
|
121
|
-
const buf = Logger.getLogger().ringBuffer;
|
|
122
|
-
return buf ? buf.takeSnapshot() : null;
|
|
123
|
-
}
|
|
124
|
-
static logByLevel(level, format, ...input) {
|
|
125
|
-
return Logger.getLogger().logByLevel(level, format, ...input);
|
|
126
|
-
}
|
|
127
|
-
static importMessages(msgs, prefixIn = '', addTimestamp = true) {
|
|
128
|
-
return Logger.getLogger().importMessages(msgs, prefixIn, addTimestamp);
|
|
129
|
-
}
|
|
130
|
-
static getLastLogMessage() {
|
|
131
|
-
const buf = Logger.getLogger().ringBuffer;
|
|
132
|
-
return buf ? buf.getLastLogMessage() : null;
|
|
133
|
-
}
|
|
134
|
-
}
|
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
import { Logger } from './logger.js';
|
|
2
|
-
import { LoggerLevelName } from './logger-level-name.js';
|
|
3
|
-
import { StringRatchet } from '../lang/string-ratchet.js';
|
|
4
|
-
import { LogMessageBuilder } from './log-message-builder.js';
|
|
5
|
-
import { LogMessageFormatType } from './log-message-format-type.js';
|
|
6
|
-
import { LoggerOutputFunction } from './logger-output-function.js';
|
|
7
|
-
describe('#setLevel', function () {
|
|
8
|
-
it('should change the level to debug then info then debug', function () {
|
|
9
|
-
Logger.dumpConfigurationIntoLog();
|
|
10
|
-
expect(Logger.getLevel()).toEqual(LoggerLevelName.info);
|
|
11
|
-
Logger.setLevel(LoggerLevelName.debug);
|
|
12
|
-
expect(Logger.getLevel()).toEqual(LoggerLevelName.debug);
|
|
13
|
-
Logger.setLevel(LoggerLevelName.info);
|
|
14
|
-
expect(Logger.getLevel()).toEqual(LoggerLevelName.info);
|
|
15
|
-
Logger.setLevel(LoggerLevelName.debug);
|
|
16
|
-
expect(Logger.getLevel()).toEqual(LoggerLevelName.debug);
|
|
17
|
-
});
|
|
18
|
-
});
|
|
19
|
-
describe('#takeSnapshot', function () {
|
|
20
|
-
it('should advance the pointer correctly after a snapshot', function () {
|
|
21
|
-
Logger.changeRingBufferSize(5);
|
|
22
|
-
expect(Logger.getRingBuffer().currentIndex).toEqual(0);
|
|
23
|
-
Logger.info('m1');
|
|
24
|
-
Logger.info('m2');
|
|
25
|
-
Logger.info('m3');
|
|
26
|
-
const snap1 = Logger.takeSnapshot();
|
|
27
|
-
Logger.info('m4');
|
|
28
|
-
Logger.info('m5');
|
|
29
|
-
const snap2 = Logger.takeSnapshot();
|
|
30
|
-
Logger.info('m6');
|
|
31
|
-
Logger.info('m7');
|
|
32
|
-
Logger.info('m8');
|
|
33
|
-
const snap3 = Logger.takeSnapshot();
|
|
34
|
-
expect(snap1.messages.length).toEqual(3);
|
|
35
|
-
expect(snap2.messages.length).toEqual(2);
|
|
36
|
-
expect(snap3.messages.length).toEqual(3);
|
|
37
|
-
expect(Logger.getRingBuffer().currentIndex).toEqual(8);
|
|
38
|
-
});
|
|
39
|
-
});
|
|
40
|
-
describe('#testTracePrefix', function () {
|
|
41
|
-
it('should apply a trace prefix correctly', function () {
|
|
42
|
-
Logger.updateTracePrefix('::TRACE::');
|
|
43
|
-
Logger.changeRingBufferSize(3);
|
|
44
|
-
Logger.info('m1');
|
|
45
|
-
Logger.info('m2');
|
|
46
|
-
const snap1 = Logger.takeSnapshot();
|
|
47
|
-
const snap1String = Logger.formatMessages(snap1.messages);
|
|
48
|
-
expect(snap1String.length).toBeGreaterThan(0);
|
|
49
|
-
snap1String.forEach((m) => {
|
|
50
|
-
expect(m.indexOf('::TRACE::')).toBeGreaterThan(-1);
|
|
51
|
-
});
|
|
52
|
-
Logger.updateTracePrefix(null);
|
|
53
|
-
Logger.info('m1');
|
|
54
|
-
Logger.info('m2');
|
|
55
|
-
const snap2 = Logger.takeSnapshot();
|
|
56
|
-
expect(snap2.messages.length).toBeGreaterThan(0);
|
|
57
|
-
snap2.messages.forEach((m) => {
|
|
58
|
-
expect(m.messageSource.indexOf('::TRACE::')).toEqual(-1);
|
|
59
|
-
});
|
|
60
|
-
});
|
|
61
|
-
});
|
|
62
|
-
describe('#testLastMessage', function () {
|
|
63
|
-
it('should return the last message', function () {
|
|
64
|
-
Logger.info('m1');
|
|
65
|
-
Logger.info('m2');
|
|
66
|
-
const last = Logger.getLastLogMessage();
|
|
67
|
-
expect(last).toBeTruthy();
|
|
68
|
-
expect(last.lvl).toEqual(LoggerLevelName.info);
|
|
69
|
-
expect(last.messageSource.endsWith('m2')).toBeTruthy();
|
|
70
|
-
});
|
|
71
|
-
});
|
|
72
|
-
describe('#testPassThruFunctions', function () {
|
|
73
|
-
it('should pass through values', function () {
|
|
74
|
-
Logger.setLevel(LoggerLevelName.debug);
|
|
75
|
-
Logger.error('Test %s', 'tVal');
|
|
76
|
-
Logger.errorP('TestP %s', 'tVal');
|
|
77
|
-
Logger.errorP('TestP 2', 27, { some: 'Object' });
|
|
78
|
-
Logger.warn('Test %s', 'tVal');
|
|
79
|
-
Logger.warnP('TestP %s', 'tVal');
|
|
80
|
-
Logger.info('Test %s', 'tVal');
|
|
81
|
-
Logger.infoP('TestP %s', 'tVal');
|
|
82
|
-
Logger.debug('Test %s', 'tVal');
|
|
83
|
-
Logger.debugP('TestP %s', 'tVal');
|
|
84
|
-
Logger.verbose('Test %s', 'tVal');
|
|
85
|
-
Logger.verboseP('TestP %s', 'tVal');
|
|
86
|
-
Logger.silly('Test %s', 'tVal');
|
|
87
|
-
Logger.sillyP('TestP %s', 'tVal');
|
|
88
|
-
Logger.setLevel(LoggerLevelName.debug);
|
|
89
|
-
});
|
|
90
|
-
});
|
|
91
|
-
describe('#testFormatter', function () {
|
|
92
|
-
it('should format values', function () {
|
|
93
|
-
const msg = {
|
|
94
|
-
lvl: LoggerLevelName.info,
|
|
95
|
-
timestamp: Date.now(),
|
|
96
|
-
messageSource: 'Test %d %d',
|
|
97
|
-
subsVars: [1, 2],
|
|
98
|
-
params: {},
|
|
99
|
-
};
|
|
100
|
-
Logger.info('Test %d %d', 3, 4);
|
|
101
|
-
const msgS = Logger.formatMessages([msg])[0];
|
|
102
|
-
expect(msgS).toEqual('[info] Test 1 2');
|
|
103
|
-
});
|
|
104
|
-
});
|
|
105
|
-
describe('#testPreProcessor', function () {
|
|
106
|
-
it('should perform a preprocess', function () {
|
|
107
|
-
const preProc = {
|
|
108
|
-
process(msg) {
|
|
109
|
-
msg.messageSource = 'Preprocess';
|
|
110
|
-
return msg;
|
|
111
|
-
},
|
|
112
|
-
};
|
|
113
|
-
const output = Logger.getLogger(StringRatchet.createRandomHexString(4), { preProcessors: [preProc] }).info('This is a test %s', 'bob');
|
|
114
|
-
expect(output).toEqual('[info] Preprocess bob');
|
|
115
|
-
});
|
|
116
|
-
});
|
|
117
|
-
describe('#testBuilder', function () {
|
|
118
|
-
it('should use a builder', function () {
|
|
119
|
-
const output = Logger.getLogger(StringRatchet.createRandomHexString(4)).recordMessageBuilder(new LogMessageBuilder(LoggerLevelName.warn, 'This is a test %s').subVars(['bob']));
|
|
120
|
-
expect(output).toEqual('[warn] This is a test bob');
|
|
121
|
-
});
|
|
122
|
-
});
|
|
123
|
-
describe('#testStructured', function () {
|
|
124
|
-
it('should use a structured logger', function () {
|
|
125
|
-
const output = Logger.getLogger(StringRatchet.createRandomHexString(4), {
|
|
126
|
-
formatType: LogMessageFormatType.StructuredJson,
|
|
127
|
-
outputFunction: LoggerOutputFunction.StdOut,
|
|
128
|
-
}).recordMessageBuilder(new LogMessageBuilder(LoggerLevelName.warn, 'This is a test %s').subVars(['bob']).p('a', 27));
|
|
129
|
-
const parsed = JSON.parse(output);
|
|
130
|
-
expect(parsed.msg).toEqual('This is a test bob');
|
|
131
|
-
expect(parsed.logLevel).toEqual('warn');
|
|
132
|
-
expect(parsed.a).toEqual(27);
|
|
133
|
-
});
|
|
134
|
-
});
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import util from 'util';
|
|
2
|
-
export class StructuredJsonLogMessageFormatter {
|
|
3
|
-
formatMessage(msg, meta) {
|
|
4
|
-
let rval = null;
|
|
5
|
-
if (msg) {
|
|
6
|
-
const tmp = Object.assign({}, meta.options.globalVars || {}, msg.params || {});
|
|
7
|
-
tmp['msg'] = util.format(msg.messageSource, ...msg.subsVars);
|
|
8
|
-
tmp['utcDateTime'] = new Date(msg.timestamp).toISOString();
|
|
9
|
-
tmp['logLevel'] = msg.lvl;
|
|
10
|
-
if (meta.options.trace) {
|
|
11
|
-
tmp['trace'] = meta.options.trace;
|
|
12
|
-
}
|
|
13
|
-
tmp['logName'] = meta.loggerInstanceName;
|
|
14
|
-
tmp['logId'] = meta.loggerInstanceId;
|
|
15
|
-
rval = JSON.stringify(tmp) + '\n';
|
|
16
|
-
}
|
|
17
|
-
return rval;
|
|
18
|
-
}
|
|
19
|
-
}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { NetworkRatchet } from './network-ratchet.js';
|
|
2
|
-
import { Logger } from '../logger/logger.js';
|
|
3
|
-
export class BrowserLocalIpProvider {
|
|
4
|
-
currentIp = 'UNSET';
|
|
5
|
-
constructor() {
|
|
6
|
-
NetworkRatchet.findLocalIp(false)
|
|
7
|
-
.then((result) => {
|
|
8
|
-
Logger.info('Setting local IP to %s', result);
|
|
9
|
-
this.currentIp = result;
|
|
10
|
-
})
|
|
11
|
-
.catch((err) => {
|
|
12
|
-
Logger.warn('Unable to set current IP - leaving as UNSET : %s', err);
|
|
13
|
-
});
|
|
14
|
-
}
|
|
15
|
-
ready() {
|
|
16
|
-
return this.currentIp !== 'UNSET';
|
|
17
|
-
}
|
|
18
|
-
currentLocalIpAddress() {
|
|
19
|
-
return this.currentIp;
|
|
20
|
-
}
|
|
21
|
-
}
|