@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.
@@ -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 destroy multiple listeners at the
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, removeKey, masterKey)
31
+ onWithKey(eventName, callback, uniqueRemoveKey, masterKey)
32
32
  {
33
33
  if(
34
- (masterKey && sc.hasOwn(this.eventsByRemoveKeys, masterKey) && sc.hasOwn(masterKey, removeKey))
35
- || sc.hasOwn(this.eventsByRemoveKeys, removeKey)
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
- // event exists, don't register twice:
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 currentListener = dataArr[dataArr.length -1];
43
- if(masterKey){
44
- if(!sc.hasOwn(this.eventsByRemoveKeys, masterKey)){
45
- this.eventsByRemoveKeys[masterKey] = {};
46
- }
47
- this.eventsByRemoveKeys[masterKey][removeKey] = eventName;
48
- } else {
49
- this.eventsByRemoveKeys[removeKey] = eventName;
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. If the masterKey was specified, then this will look
56
- * into the masterKey property for the proper event name reference to remove it.
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(removeKey, masterKey)
63
+ offWithKey(uniqueRemoveKey, masterKey)
59
64
  {
60
- if(
61
- (masterKey && !sc.hasOwn(this.eventsByRemoveKeys, masterKey))
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
- let eventToRemove = masterKey ?
68
- this.eventsByRemoveKeys[masterKey][removeKey] : this.eventsByRemoveKeys[removeKey];
69
- (sc.hasOwn(this._events, eventToRemove) ? delete this._events[eventToRemove] : false);
70
- masterKey ? delete this.eventsByRemoveKeys[masterKey][removeKey] : delete this.eventsByRemoveKeys[removeKey];
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
- // master key not found:
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 (because the _events is an object
83
- // with all the listeners attached).
84
- for(let removeKey of Object.keys(this.eventsByRemoveKeys[masterKey])){
85
- let eventToRemove = this.eventsByRemoveKeys[masterKey][removeKey];
86
- delete this._events[eventToRemove];
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.info(type+' Event:', key);
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' === typeof Error.captureStackTrace){
48
- let stackHolder = {};
49
- Error.captureStackTrace(stackHolder, levelLabel);
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
- // get date:
260
- let date = new Date();
261
- // format:
262
- return date.toISOString().slice(0, 19).replace('T', ' ');
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)
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@reldens/utils",
3
3
  "scope": "@reldens",
4
- "version": "0.21.1",
4
+ "version": "0.23.0",
5
5
  "description": "Reldens - Utils",
6
6
  "author": "Damian A. Pastorini",
7
7
  "license": "MIT",