@reldens/utils 0.22.0 → 0.24.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/index.js +1 -0
- package/lib/events-manager.js +58 -33
- package/lib/file-handler.js +48 -0
- package/lib/shortcuts.js +16 -4
- package/package.json +1 -1
package/index.js
CHANGED
|
@@ -11,6 +11,7 @@ module.exports = {
|
|
|
11
11
|
EventsManagerSingleton: new EventsManager(),
|
|
12
12
|
ErrorManager: require('./lib/error-manager'),
|
|
13
13
|
InteractionArea: require('./lib/interaction-area'),
|
|
14
|
+
FileHandler: require('./lib/file-handler'),
|
|
14
15
|
Logger: require('./lib/logger'),
|
|
15
16
|
sc: require('./lib/shortcuts')
|
|
16
17
|
};
|
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
|
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
*
|
|
3
|
+
* Reldens - FileHandler
|
|
4
|
+
*
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
const fs = require('fs');
|
|
8
|
+
const path = require('path');
|
|
9
|
+
const Logger = require('./logger');
|
|
10
|
+
|
|
11
|
+
class FileHandler
|
|
12
|
+
{
|
|
13
|
+
|
|
14
|
+
constructor()
|
|
15
|
+
{
|
|
16
|
+
this.encoding = 'utf8';
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
joinPaths(...paths)
|
|
20
|
+
{
|
|
21
|
+
return path.join(...paths);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
copyFile(from, to, folder)
|
|
25
|
+
{
|
|
26
|
+
fs.copyFileSync(from, path.join(folder, to));
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
createFolder(folderPath)
|
|
30
|
+
{
|
|
31
|
+
fs.mkdirSync(folderPath, { recursive: true });
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
async writeFile(fileName, content)
|
|
35
|
+
{
|
|
36
|
+
return fs.writeFile(fileName, content, this.encoding, (err) => {
|
|
37
|
+
if(err){
|
|
38
|
+
Logger.error('Error saving the file:', err);
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
Logger.info('The file has been saved! New file name: '+fileName);
|
|
42
|
+
return true;
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
module.exports = FileHandler;
|
package/lib/shortcuts.js
CHANGED
|
@@ -256,10 +256,22 @@ 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
|
+
getDateForFileName()
|
|
263
|
+
{
|
|
264
|
+
return (new Date()).toISOString().slice(0, 19).replace('T', '-').replace(/:/g, '-');
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
getTime()
|
|
268
|
+
{
|
|
269
|
+
return (new Date()).getTime();
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
roundToPrecision(number, precision = 4)
|
|
273
|
+
{
|
|
274
|
+
return Number(number.toFixed(precision));
|
|
263
275
|
}
|
|
264
276
|
|
|
265
277
|
randomInteger(min, max)
|