@reldens/utils 0.21.1 → 0.23.0
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/events-manager.js +58 -33
- package/lib/logger.js +25 -15
- package/lib/shortcuts.js +6 -4
- package/package.json +1 -1
package/lib/events-manager.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* This extension includes a few new features:
|
|
6
6
|
*
|
|
7
7
|
* - The onWithKey and offWithKey methods will allow you to specify a "group" key for the event listener, the related
|
|
8
|
-
* event will be referenced in a new property called "eventsByRemoveKey" so you can
|
|
8
|
+
* event will be referenced in a new property called "eventsByRemoveKey" so you can detach multiple listeners at the
|
|
9
9
|
* time.
|
|
10
10
|
*
|
|
11
11
|
* - Then the normal "on" and "off" aliases were override to include a debug check with a log. Using the debug property
|
|
@@ -28,46 +28,66 @@ class AwaitEventEmitterExtended extends AwaitEventEmitter
|
|
|
28
28
|
this.debug = false;
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
-
onWithKey(eventName, callback,
|
|
31
|
+
onWithKey(eventName, callback, uniqueRemoveKey, masterKey)
|
|
32
32
|
{
|
|
33
33
|
if(
|
|
34
|
-
|
|
35
|
-
||
|
|
34
|
+
sc.hasOwn(this.eventsByRemoveKeys, uniqueRemoveKey)
|
|
35
|
+
|| (
|
|
36
|
+
masterKey
|
|
37
|
+
&& sc.hasOwn(this.eventsByRemoveKeys, masterKey)
|
|
38
|
+
&& sc.hasOwn(this.eventsByRemoveKeys[masterKey], uniqueRemoveKey)
|
|
39
|
+
)
|
|
36
40
|
){
|
|
37
|
-
|
|
41
|
+
Logger.debug('Event "'+eventName+'" exists with key "'+uniqueRemoveKey+'" and masterKey "'+masterKey+'".');
|
|
38
42
|
return false;
|
|
39
43
|
}
|
|
40
44
|
this.on(eventName, callback);
|
|
41
45
|
let dataArr = this.listeners(eventName);
|
|
42
|
-
let
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
this.eventsByRemoveKeys[
|
|
46
|
+
let currentListenerIndex = dataArr.indexOf(callback);
|
|
47
|
+
let currentListener = dataArr[currentListenerIndex];
|
|
48
|
+
if(!masterKey){
|
|
49
|
+
this.eventsByRemoveKeys[uniqueRemoveKey] = {eventName, callback};
|
|
50
|
+
return currentListener;
|
|
51
|
+
}
|
|
52
|
+
if(!sc.hasOwn(this.eventsByRemoveKeys, masterKey)){
|
|
53
|
+
this.eventsByRemoveKeys[masterKey] = {};
|
|
50
54
|
}
|
|
55
|
+
this.eventsByRemoveKeys[masterKey][uniqueRemoveKey] = {eventName, callback};
|
|
51
56
|
return currentListener;
|
|
52
57
|
}
|
|
53
58
|
|
|
54
59
|
/**
|
|
55
|
-
* This method will remove a SINGLE event using the remove key.
|
|
56
|
-
*
|
|
60
|
+
* This method will remove a SINGLE event using the unique remove key.
|
|
61
|
+
* If the event listener was assigned using a masterKey then we need to pass it as well to find the event.
|
|
57
62
|
*/
|
|
58
|
-
offWithKey(
|
|
63
|
+
offWithKey(uniqueRemoveKey, masterKey)
|
|
59
64
|
{
|
|
60
|
-
if(
|
|
61
|
-
(
|
|
62
|
-
|| (!masterKey && !sc.hasOwn(this.eventsByRemoveKeys, removeKey))
|
|
63
|
-
){
|
|
64
|
-
// event not found:
|
|
65
|
+
if(masterKey && !sc.hasOwn(this.eventsByRemoveKeys, masterKey)){
|
|
66
|
+
Logger.debug('Event not found by masterKey "'+masterKey+'".');
|
|
65
67
|
return false;
|
|
66
68
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
69
|
+
if(!masterKey && !sc.hasOwn(this.eventsByRemoveKeys, uniqueRemoveKey)){
|
|
70
|
+
Logger.debug('Event not found by removeKey "'+uniqueRemoveKey+'".');
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
let eventToRemove = masterKey
|
|
74
|
+
? this.eventsByRemoveKeys[masterKey][uniqueRemoveKey]
|
|
75
|
+
: this.eventsByRemoveKeys[uniqueRemoveKey];
|
|
76
|
+
|
|
77
|
+
let dataArr = this.listeners(eventToRemove.eventName);
|
|
78
|
+
let currentListenerIndex = dataArr.indexOf(eventToRemove.callback);
|
|
79
|
+
this._events[eventToRemove.eventName].splice(currentListenerIndex, 1);
|
|
80
|
+
if(0 === this._events[eventToRemove.eventName].length){
|
|
81
|
+
delete this._events[eventToRemove.eventName];
|
|
82
|
+
}
|
|
83
|
+
if(masterKey){
|
|
84
|
+
delete this.eventsByRemoveKeys[masterKey][uniqueRemoveKey];
|
|
85
|
+
Logger.debug('Deleted event by removeKey "'+uniqueRemoveKey+'" and masterKey "'+masterKey+'".');
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
delete this.eventsByRemoveKeys[uniqueRemoveKey];
|
|
89
|
+
Logger.debug('Deleted event by removeKey "'+uniqueRemoveKey+'".');
|
|
90
|
+
return true;
|
|
71
91
|
}
|
|
72
92
|
|
|
73
93
|
/**
|
|
@@ -76,16 +96,21 @@ class AwaitEventEmitterExtended extends AwaitEventEmitter
|
|
|
76
96
|
offByMasterKey(masterKey)
|
|
77
97
|
{
|
|
78
98
|
if(!sc.hasOwn(this.eventsByRemoveKeys, masterKey)){
|
|
79
|
-
|
|
99
|
+
Logger.debug('Events not found by masterKey "'+masterKey+'".');
|
|
80
100
|
return false;
|
|
81
101
|
}
|
|
82
|
-
// loop all the events related to the masterKey and remove them one by one
|
|
83
|
-
// with
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
102
|
+
// @NOTE: we loop all the events related to the masterKey and remove them one by one since the _events property
|
|
103
|
+
// is an object with multiple listeners attached.
|
|
104
|
+
Logger.debug('Removing events by masterKey: '+masterKey, Object.keys(this.eventsByRemoveKeys[masterKey]));
|
|
105
|
+
for(let uniqueRemoveKey of Object.keys(this.eventsByRemoveKeys[masterKey])){
|
|
106
|
+
let eventToRemove = this.eventsByRemoveKeys[masterKey][uniqueRemoveKey];
|
|
107
|
+
let dataArr = this.listeners(eventToRemove.eventName);
|
|
108
|
+
let currentListenerIndex = dataArr.indexOf(eventToRemove.callback);
|
|
109
|
+
this._events[eventToRemove.eventName].splice(currentListenerIndex, 1);
|
|
110
|
+
if(0 === this._events[eventToRemove.eventName].length){
|
|
111
|
+
delete this._events[eventToRemove.eventName];
|
|
112
|
+
}
|
|
87
113
|
}
|
|
88
|
-
// then delete the master key:
|
|
89
114
|
delete this.eventsByRemoveKeys[masterKey];
|
|
90
115
|
}
|
|
91
116
|
|
|
@@ -112,7 +137,7 @@ class AwaitEventEmitterExtended extends AwaitEventEmitter
|
|
|
112
137
|
|| this.debug.indexOf(key) !== -1
|
|
113
138
|
|| key.indexOf(this.debug) !== -1
|
|
114
139
|
){
|
|
115
|
-
Logger.
|
|
140
|
+
Logger.debug(type+' Event:', key);
|
|
116
141
|
}
|
|
117
142
|
}
|
|
118
143
|
|
package/lib/logger.js
CHANGED
|
@@ -25,8 +25,6 @@ class Logger
|
|
|
25
25
|
// - Implement different log systems (console.log, files logs, db log?).
|
|
26
26
|
// - Implement notifications system (email?), and make it configurable for the different log levels.
|
|
27
27
|
let context = this.context();
|
|
28
|
-
this.logLevel = context.RELDENS_LOG_LEVEL || 0;
|
|
29
|
-
this.enableTraceFor = (context.RELDENS_ENABLE_TRACE_FOR || '').split(',');
|
|
30
28
|
}
|
|
31
29
|
|
|
32
30
|
context()
|
|
@@ -40,21 +38,33 @@ class Logger
|
|
|
40
38
|
return context;
|
|
41
39
|
}
|
|
42
40
|
|
|
41
|
+
logLevel()
|
|
42
|
+
{
|
|
43
|
+
return this.context().RELDENS_LOG_LEVEL || 0;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
enableTraceFor()
|
|
47
|
+
{
|
|
48
|
+
return (this.context().RELDENS_ENABLE_TRACE_FOR || '').split(',');
|
|
49
|
+
}
|
|
50
|
+
|
|
43
51
|
log(levelLabel, ...args)
|
|
44
52
|
{
|
|
45
53
|
console.log(levelLabel.toUpperCase()+' -', ...args);
|
|
46
|
-
if(-1 !== this.enableTraceFor.indexOf('all') || -1 !== this.enableTraceFor.indexOf(levelLabel)){
|
|
47
|
-
if('function'
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
console.log(stackHolder.stack);
|
|
54
|
+
if(-1 !== this.enableTraceFor().indexOf('all') || -1 !== this.enableTraceFor().indexOf(levelLabel)){
|
|
55
|
+
if('function' !== typeof Error?.captureStackTrace){
|
|
56
|
+
console.log('Error.captureStackTrace is not available.', typeof Error?.captureStackTrace);
|
|
57
|
+
return;
|
|
51
58
|
}
|
|
59
|
+
let stackHolder = {};
|
|
60
|
+
Error.captureStackTrace(stackHolder, levelLabel);
|
|
61
|
+
console.log(stackHolder.stack);
|
|
52
62
|
}
|
|
53
63
|
}
|
|
54
64
|
|
|
55
65
|
debug(...args)
|
|
56
66
|
{
|
|
57
|
-
if(8 > this.logLevel){
|
|
67
|
+
if(8 > this.logLevel()){
|
|
58
68
|
return;
|
|
59
69
|
}
|
|
60
70
|
this.log('debug', ...args);
|
|
@@ -62,7 +72,7 @@ class Logger
|
|
|
62
72
|
|
|
63
73
|
info(...args)
|
|
64
74
|
{
|
|
65
|
-
if(7 > this.logLevel){
|
|
75
|
+
if(7 > this.logLevel()){
|
|
66
76
|
return;
|
|
67
77
|
}
|
|
68
78
|
this.log('info', ...args);
|
|
@@ -70,7 +80,7 @@ class Logger
|
|
|
70
80
|
|
|
71
81
|
notice(...args)
|
|
72
82
|
{
|
|
73
|
-
if(6 > this.logLevel){
|
|
83
|
+
if(6 > this.logLevel()){
|
|
74
84
|
return;
|
|
75
85
|
}
|
|
76
86
|
this.log('notice', ...args);
|
|
@@ -78,7 +88,7 @@ class Logger
|
|
|
78
88
|
|
|
79
89
|
warning(...args)
|
|
80
90
|
{
|
|
81
|
-
if(5 > this.logLevel){
|
|
91
|
+
if(5 > this.logLevel()){
|
|
82
92
|
return;
|
|
83
93
|
}
|
|
84
94
|
this.log('warning', ...args);
|
|
@@ -86,7 +96,7 @@ class Logger
|
|
|
86
96
|
|
|
87
97
|
error(...args)
|
|
88
98
|
{
|
|
89
|
-
if(4 > this.logLevel){
|
|
99
|
+
if(4 > this.logLevel()){
|
|
90
100
|
return;
|
|
91
101
|
}
|
|
92
102
|
this.log('error', ...args);
|
|
@@ -94,7 +104,7 @@ class Logger
|
|
|
94
104
|
|
|
95
105
|
critical(...args)
|
|
96
106
|
{
|
|
97
|
-
if(3 > this.logLevel){
|
|
107
|
+
if(3 > this.logLevel()){
|
|
98
108
|
return;
|
|
99
109
|
}
|
|
100
110
|
this.log('critical', ...args);
|
|
@@ -102,7 +112,7 @@ class Logger
|
|
|
102
112
|
|
|
103
113
|
alert(...args)
|
|
104
114
|
{
|
|
105
|
-
if(2 > this.logLevel){
|
|
115
|
+
if(2 > this.logLevel()){
|
|
106
116
|
return;
|
|
107
117
|
}
|
|
108
118
|
this.log('alert', ...args);
|
|
@@ -110,7 +120,7 @@ class Logger
|
|
|
110
120
|
|
|
111
121
|
emergency(...args)
|
|
112
122
|
{
|
|
113
|
-
if(1 > this.logLevel){
|
|
123
|
+
if(1 > this.logLevel()){
|
|
114
124
|
return;
|
|
115
125
|
}
|
|
116
126
|
this.log('emergency', ...args);
|
package/lib/shortcuts.js
CHANGED
|
@@ -256,10 +256,12 @@ class Shortcuts
|
|
|
256
256
|
|
|
257
257
|
getCurrentDate()
|
|
258
258
|
{
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
259
|
+
return (new Date()).toISOString().slice(0, 19).replace('T', ' ');
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
getTime()
|
|
263
|
+
{
|
|
264
|
+
return (new Date()).getTime();
|
|
263
265
|
}
|
|
264
266
|
|
|
265
267
|
randomInteger(min, max)
|