danholibraryjs 1.10.0 → 2.0.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.
Files changed (158) hide show
  1. package/dist/Classes/DanhoLogger.d.ts +23 -0
  2. package/dist/Classes/DanhoLogger.js +65 -0
  3. package/dist/Classes/Events/EventEmitter.d.ts +1 -1
  4. package/dist/Classes/Events/EventEmitter.js +1 -1
  5. package/dist/Classes/Time/Date.d.ts +1 -0
  6. package/dist/Classes/Time/Date.js +4 -1
  7. package/dist/Classes/Time/Time.d.ts +5 -4
  8. package/dist/Classes/Time/Time.js +7 -4
  9. package/dist/Classes/index.d.ts +1 -0
  10. package/dist/Classes/index.js +1 -0
  11. package/dist/Classes/store.d.ts +5 -9
  12. package/dist/Extensions/Array/array.extension.d.ts +42 -0
  13. package/dist/Extensions/Array/array.extension.js +57 -0
  14. package/dist/Extensions/Array/crud.extension.d.ts +24 -0
  15. package/dist/Extensions/Array/crud.extension.js +28 -0
  16. package/dist/Extensions/Array/index.d.ts +20 -0
  17. package/dist/Extensions/Array/index.js +40 -0
  18. package/dist/Extensions/Array/loop.extension.d.ts +18 -0
  19. package/dist/Extensions/Array/loop.extension.js +23 -0
  20. package/dist/Extensions/Array/random.extension.d.ts +23 -0
  21. package/dist/Extensions/Array/random.extension.js +35 -0
  22. package/dist/Extensions/Array/sort.extension.d.ts +27 -0
  23. package/dist/Extensions/Array/sort.extension.js +31 -0
  24. package/dist/Extensions/Array/string.extension.d.ts +13 -0
  25. package/dist/Extensions/Array/string.extension.js +14 -0
  26. package/dist/Extensions/Array.d.ts +17 -3
  27. package/dist/Extensions/Array.js +0 -12
  28. package/dist/Extensions/Function.d.ts +17 -2
  29. package/dist/Extensions/Function.js +15 -2
  30. package/dist/Extensions/Number.d.ts +13 -0
  31. package/dist/Extensions/Number.js +40 -0
  32. package/dist/Extensions/Object/arrays.extension.d.ts +17 -0
  33. package/dist/Extensions/Object/arrays.extension.js +13 -0
  34. package/dist/Extensions/Object/booleans.extension.d.ts +18 -0
  35. package/dist/Extensions/Object/booleans.extension.js +37 -0
  36. package/dist/Extensions/Object/extracts.extension.d.ts +38 -0
  37. package/dist/Extensions/Object/extracts.extension.js +72 -0
  38. package/dist/Extensions/Object/index.d.ts +8 -47
  39. package/dist/Extensions/Object/index.js +31 -33
  40. package/dist/Extensions/Object/properties.extension.d.ts +6 -0
  41. package/dist/Extensions/Object/properties.extension.js +4 -0
  42. package/dist/Extensions/Object/properties.js +1 -2
  43. package/dist/Extensions/String/case.extension.d.ts +12 -0
  44. package/dist/Extensions/String/case.extension.js +55 -0
  45. package/dist/Extensions/String/index.d.ts +4 -0
  46. package/dist/Extensions/String/index.js +30 -0
  47. package/dist/Extensions/index.d.ts +1 -12
  48. package/dist/Extensions/index.js +1 -9
  49. package/dist/Types/Able.d.ts +16 -0
  50. package/dist/Types/Able.js +2 -0
  51. package/dist/Types/Array.d.ts +6 -0
  52. package/dist/Types/Array.js +2 -0
  53. package/dist/Types/C#.d.ts +8 -0
  54. package/dist/Types/C#.js +2 -0
  55. package/dist/Types/Date.d.ts +1 -1
  56. package/dist/Types/Events.d.ts +2 -2
  57. package/dist/Types/Function.d.ts +5 -0
  58. package/dist/Types/Function.js +2 -0
  59. package/dist/Types/Object.d.ts +4 -0
  60. package/dist/Types/Object.js +2 -0
  61. package/dist/Types/PropertiesWith.d.ts +21 -0
  62. package/dist/Types/String.d.ts +1 -0
  63. package/dist/Types/String.js +2 -0
  64. package/dist/Types/TransformTypes.d.ts +9 -0
  65. package/dist/Types/index.d.ts +6 -28
  66. package/dist/Types/index.js +6 -0
  67. package/dist/Utils/ApiUtil/ApiTypes.d.ts +15 -0
  68. package/dist/Utils/ApiUtil/ApiTypes.js +15 -0
  69. package/dist/Utils/ApiUtil/RequestUtil.d.ts +19 -0
  70. package/dist/Utils/ApiUtil/RequestUtil.js +73 -0
  71. package/dist/Utils/ApiUtil/index.d.ts +20 -0
  72. package/dist/Utils/ApiUtil/index.js +33 -0
  73. package/dist/Utils/ApiUtils/ApiTypes.d.ts +15 -0
  74. package/dist/Utils/ApiUtils/ApiTypes.js +15 -0
  75. package/dist/Utils/ApiUtils/RequestUtil.d.ts +19 -0
  76. package/dist/Utils/ApiUtils/RequestUtil.js +73 -0
  77. package/dist/Utils/ApiUtils/index.d.ts +20 -0
  78. package/dist/Utils/ApiUtils/index.js +33 -0
  79. package/dist/Utils/ColorUtils.d.ts +11 -0
  80. package/dist/Utils/ColorUtils.js +93 -0
  81. package/dist/Utils/FormUtil.d.ts +6 -0
  82. package/dist/Utils/FormUtil.js +35 -0
  83. package/dist/Utils/FormUtils.d.ts +6 -0
  84. package/dist/Utils/FormUtils.js +35 -0
  85. package/dist/Utils/NumberUtils.d.ts +1 -0
  86. package/dist/Utils/NumberUtils.js +7 -0
  87. package/dist/Utils/PatcherUtils.d.ts +6 -0
  88. package/dist/Utils/PatcherUtils.js +80 -0
  89. package/dist/Utils/StringUtils.d.ts +3 -0
  90. package/dist/Utils/StringUtils.js +47 -0
  91. package/dist/Utils/TimeUtils/debounce.util.d.ts +22 -0
  92. package/dist/Utils/TimeUtils/debounce.util.js +78 -0
  93. package/dist/Utils/TimeUtils/functions.util.d.ts +4 -0
  94. package/dist/Utils/TimeUtils/functions.util.js +21 -0
  95. package/dist/Utils/TimeUtils/index.d.ts +15 -0
  96. package/dist/Utils/TimeUtils/index.js +34 -0
  97. package/dist/Utils/TimeUtils/throttle.util.d.ts +15 -0
  98. package/dist/Utils/TimeUtils/throttle.util.js +43 -0
  99. package/dist/Utils/index.d.ts +7 -0
  100. package/dist/Utils/index.js +23 -0
  101. package/package.json +4 -2
  102. package/src/Classes/DanhoLogger.ts +78 -0
  103. package/src/Classes/Events/Event.ts +96 -96
  104. package/src/Classes/Events/EventCollection.ts +90 -90
  105. package/src/Classes/Events/EventEmitter.ts +68 -68
  106. package/src/Classes/Time/Date.ts +219 -216
  107. package/src/Classes/Time/Time.ts +109 -104
  108. package/src/Classes/Time/TimeSpan.ts +171 -171
  109. package/src/Classes/index.ts +1 -0
  110. package/src/Classes/store.ts +22 -22
  111. package/src/Extensions/Array/array.extension.ts +103 -0
  112. package/src/Extensions/Array/crud.extension.ts +46 -0
  113. package/src/Extensions/Array/index.ts +15 -0
  114. package/src/Extensions/Array/loop.extension.ts +38 -0
  115. package/src/Extensions/Array/random.extension.ts +56 -0
  116. package/src/Extensions/Array/sort.extension.ts +52 -0
  117. package/src/Extensions/Array/string.extension.ts +22 -0
  118. package/src/Extensions/Document.ts +39 -39
  119. package/src/Extensions/Function.ts +37 -10
  120. package/src/Extensions/Map.ts +56 -56
  121. package/src/Extensions/Number.ts +50 -0
  122. package/src/Extensions/Object/arrays.extension.ts +27 -0
  123. package/src/Extensions/Object/booleans.extension.ts +46 -0
  124. package/src/Extensions/Object/extracts.extension.ts +102 -0
  125. package/src/Extensions/Object/index.ts +9 -80
  126. package/src/Extensions/Object/properties.extension.ts +11 -0
  127. package/src/Extensions/Object/properties.ts +35 -36
  128. package/src/Extensions/String/case.extension.ts +95 -0
  129. package/src/Extensions/String/index.ts +5 -0
  130. package/src/Extensions/index.ts +2 -20
  131. package/src/Interfaces/ElementOptions.ts +7 -7
  132. package/src/Interfaces/IReplacement.ts +2 -2
  133. package/src/Types/Able.ts +22 -0
  134. package/src/Types/Array.ts +7 -0
  135. package/src/Types/C#.ts +9 -0
  136. package/src/Types/Date.ts +1 -1
  137. package/src/Types/Events.ts +12 -12
  138. package/src/Types/Function.ts +10 -0
  139. package/src/Types/Object.ts +4 -0
  140. package/src/Types/PropertiesWith.ts +35 -4
  141. package/src/Types/String.ts +1 -0
  142. package/src/Types/TransformTypes.ts +23 -5
  143. package/src/Types/index.ts +7 -41
  144. package/src/Utils/ApiUtils/ApiTypes.ts +43 -0
  145. package/src/Utils/ApiUtils/RequestUtil.ts +87 -0
  146. package/src/Utils/ApiUtils/index.ts +39 -0
  147. package/src/Utils/ColorUtils.ts +102 -0
  148. package/src/Utils/FormUtils.ts +33 -0
  149. package/src/Utils/NumberUtils.ts +3 -0
  150. package/src/Utils/PatcherUtils.ts +111 -0
  151. package/src/Utils/StringUtils.ts +44 -0
  152. package/src/Utils/TimeUtils/debounce.util.ts +85 -0
  153. package/src/Utils/TimeUtils/functions.util.ts +18 -0
  154. package/src/Utils/TimeUtils/index.ts +9 -0
  155. package/src/Utils/TimeUtils/throttle.util.ts +44 -0
  156. package/src/Utils/index.ts +8 -0
  157. package/src/Extensions/Array.ts +0 -95
  158. package/src/Extensions/String.ts +0 -54
@@ -0,0 +1,78 @@
1
+ type LogOptions = {
2
+ name?: string;
3
+ color?: string;
4
+ preferCollapsed?: boolean;
5
+ }
6
+
7
+ export default class DanhoLogger {
8
+ public name: string;
9
+ public color?: string
10
+ private _preferCollapsed: boolean;
11
+
12
+ constructor(options: LogOptions = {}) {
13
+ this.name = options.name || 'DanhoLogger';
14
+ this.color = options.color;
15
+ this._preferCollapsed = options.preferCollapsed ?? false;
16
+ }
17
+
18
+ private _getPrefix() {
19
+ return {
20
+ prefix: `%c[${this.name}]`,
21
+ style: `color: ${this.color || 'inherit'}; font-weight: bold;`
22
+ };
23
+ }
24
+ private _log(
25
+ type: 'log' | 'warn' | 'error',
26
+ ...args: any[]
27
+ ) {
28
+ const { prefix, style } = this._getPrefix();
29
+ console[type](prefix, style, ...args);
30
+ return this;
31
+ }
32
+
33
+ public log(...args: any[]) {
34
+ return this._log('log', ...args);
35
+ }
36
+ public warn(...args: any[]) {
37
+ return this._log('warn', ...args);
38
+ }
39
+ public error(...args: any[]) {
40
+ return this._log('error', ...args);
41
+ }
42
+
43
+ public group(...args: any[]) {
44
+ const { prefix, style } = this._getPrefix();
45
+
46
+ const groupMethod = this._preferCollapsed ? console.groupCollapsed : console.group;
47
+ groupMethod(prefix, style, ...args);
48
+
49
+ return this;
50
+ }
51
+ public groupCollapsed(...args: any[]) {
52
+ const { prefix, style } = this._getPrefix();
53
+ console.groupCollapsed(prefix, style, ...args);
54
+ return this;
55
+ }
56
+ public groupEnd(...args: any[]) {
57
+ if (args.length) console.log(...args);
58
+ console.groupEnd();
59
+ return this;
60
+ }
61
+
62
+ time(label: string) {
63
+ const { prefix } = this._getPrefix();
64
+ console.time(`${prefix} ${label}`);
65
+ return this;
66
+ }
67
+ timeEnd(label: string) {
68
+ const { prefix } = this._getPrefix();
69
+ console.timeEnd(`${prefix} ${label}`);
70
+ return this;
71
+ }
72
+
73
+ table(data: any, columns?: string[]) {
74
+ this.log();
75
+ console.table(data, columns);
76
+ return this;
77
+ }
78
+ }
@@ -4,111 +4,111 @@ import { BaseEvent, EventHandler } from "../../Types/Events";
4
4
  * Base event for @see EventEmitter, @borrows EventHandler @borrows BaseEvent
5
5
  */
6
6
  export class Event<
7
- Events extends BaseEvent<string, Array<any>>,
8
- Name extends keyof Events = keyof Events,
7
+ Events extends BaseEvent<string, Array<any>>,
8
+ Name extends keyof Events = keyof Events,
9
9
  > {
10
- /**
11
- * Base event for @see EventEmitter, @borrows EventHandler
12
- * @param name Name of event
13
- * @param listeners Listeners/Handlers to execute when emitted
14
- */
15
- constructor(name: Name, ...listeners: Array<EventHandler<Events, Name>>) {
16
- this.name = name;
17
- this._listeners = listeners;
18
- this._lastEmitted = new Date();
19
- }
10
+ /**
11
+ * Base event for @see EventEmitter, @borrows EventHandler
12
+ * @param name Name of event
13
+ * @param listeners Listeners/Handlers to execute when emitted
14
+ */
15
+ constructor(name: Name, ...listeners: Array<EventHandler<Events, Name>>) {
16
+ this.name = name;
17
+ this._listeners = listeners;
18
+ this._lastEmitted = new Date();
19
+ }
20
20
 
21
- /**Name of event*/
22
- public name: Name;
23
- /**Listener limit - default: 0 */
24
- public limit = 0;
25
- /**Number of times event was emitted - default: 0*/
26
- public get runs() {
27
- return this._runs
28
- }
29
- /**Timestamp of last emit - default: null*/
30
- public get lastEmitted() {
31
- return this._lastEmitted;
32
- }
21
+ /**Name of event*/
22
+ public name: Name;
23
+ /**Listener limit - default: 0 */
24
+ public limit = 0;
25
+ /**Number of times event was emitted - default: 0*/
26
+ public get runs() {
27
+ return this._runs;
28
+ }
29
+ /**Timestamp of last emit - default: null*/
30
+ public get lastEmitted() {
31
+ return this._lastEmitted;
32
+ }
33
33
 
34
- /**@private Internal listeners array*/
35
- private _listeners: Array<EventHandler<Events, Name>>;
36
- /**@private Internal runs*/
37
- private _runs = 0;
38
- /**@private Internal lastEmitted*/
39
- private _lastEmitted: Date;
34
+ /**@private Internal listeners array*/
35
+ private _listeners: Array<EventHandler<Events, Name>>;
36
+ /**@private Internal runs*/
37
+ private _runs = 0;
38
+ /**@private Internal lastEmitted*/
39
+ private _lastEmitted: Date;
40
40
 
41
- /**
42
- * Emits event and returns array of responses
43
- * @param args Arguments required for event listeners
44
- * @returns Return values of listeners' returns
45
- */
46
- public emit(...args: Events[Name]) {
47
- this._runs++;
48
- this._lastEmitted = new Date();
49
- return this._listeners.map(listener => (listener as any)(...args))
41
+ /**
42
+ * Emits event and returns array of responses
43
+ * @param args Arguments required for event listeners
44
+ * @returns Return values of listeners' returns
45
+ */
46
+ public emit(...args: Events[Name]) {
47
+ this._runs++;
48
+ this._lastEmitted = new Date();
49
+ return this._listeners.map(listener => (listener as any)(...args));
50
+ }
51
+ /**
52
+ * Adds listener to listeners array and returns self with new listener added
53
+ * @param listener Listener to add
54
+ * @param prepend Add first (true) or last (false) - default: false
55
+ * @returns this with listener added
56
+ *
57
+ * @throws Limit error, if limit was reached
58
+ */
59
+ public on(listener: EventHandler<Events, Name>, prepend = false) {
60
+ if (this.limit > 0 && this._listeners.length + 1 > this.limit) {
61
+ throw new Error(`Event limit, ${this.limit}, reached for event ${this.name.toString()}!`);
50
62
  }
51
- /**
52
- * Adds listener to listeners array and returns self with new listener added
53
- * @param listener Listener to add
54
- * @param prepend Add first (true) or last (false) - default: false
55
- * @returns this with listener added
56
- *
57
- * @throws Limit error, if limit was reached
58
- */
59
- public on(listener: EventHandler<Events, Name>, prepend = false) {
60
- if (this.limit > 0 && this._listeners.length + 1 > this.limit) {
61
- throw new Error(`Event limit, ${this.limit}, reached for event ${this.name.toString()}!`);
62
- }
63
63
 
64
- if (prepend) this._listeners = [listener, ...this._listeners]
65
- else this._listeners.add(listener);
64
+ if (prepend) this._listeners = [listener, ...this._listeners];
65
+ else this._listeners.add(listener);
66
66
 
67
- return this;
68
- }
69
- /**
70
- * Like Event#on, adds listener to listeners array and returns self with new listener added, however removes listener once emitted
71
- * @param listener Listener to add
72
- * @param prepend Add first (true) or last (false) - default: false
73
- * @returns this with listener added
74
- *
75
- * @throws Limit error, if limit was reached
76
- */
77
- public once(listener: EventHandler<Events, Name>, prepend = false) {
78
- const handler = (...params: Events[Name]) => {
79
- const result = (listener as any)(...params);
80
- this.off(handler as any);
81
- return result;
82
- }
83
- this.on(handler as any, prepend);
84
- return this;
85
- }
67
+ return this;
68
+ }
69
+ /**
70
+ * Like Event#on, adds listener to listeners array and returns self with new listener added, however removes listener once emitted
71
+ * @param listener Listener to add
72
+ * @param prepend Add first (true) or last (false) - default: false
73
+ * @returns this with listener added
74
+ *
75
+ * @throws Limit error, if limit was reached
76
+ */
77
+ public once(listener: EventHandler<Events, Name>, prepend = false) {
78
+ const handler = (...params: Events[Name]) => {
79
+ const result = (listener as any)(...params);
80
+ this.off(handler as any);
81
+ return result;
82
+ };
83
+ this.on(handler as any, prepend);
84
+ return this;
85
+ }
86
86
 
87
- /**
88
- * Returns true or false, depending if event includes listener
89
- * @param listener Listener to test
90
- * @returns True of false, depending if event includes listener
91
- */
92
- public includes(listener: EventHandler<Events, Name>) {
93
- return this._listeners.includes(listener);
94
- }
87
+ /**
88
+ * Returns true or false, depending if event includes listener
89
+ * @param listener Listener to test
90
+ * @returns True of false, depending if event includes listener
91
+ */
92
+ public includes(listener: EventHandler<Events, Name>) {
93
+ return this._listeners.includes(listener);
94
+ }
95
95
 
96
- /**
97
- * Removes listener from internal listeners array
98
- * @param listener Listener to remove. If none specified, all will be removed
99
- * @param throwNotFoundError Throw error if listener isn't in listeners array - default: false
100
- * @returns this, without listener
101
- *
102
- * @throws NotFound, if throwNotFoundError is true, and internal listeners array doesn't include listener provided
103
- */
104
- public off(listener?: EventHandler<Events, Name>, throwNotFoundError = false) {
105
- try {
106
- if (!listener) this._listeners = new Array<EventHandler<Events, Name>>()
107
- else if (!this._listeners.includes(listener)) return this;
108
- else this._listeners.remove(listener);
109
- }
110
- catch (err) { if (throwNotFoundError) throw err; }
111
- return this;
96
+ /**
97
+ * Removes listener from internal listeners array
98
+ * @param listener Listener to remove. If none specified, all will be removed
99
+ * @param throwNotFoundError Throw error if listener isn't in listeners array - default: false
100
+ * @returns this, without listener
101
+ *
102
+ * @throws NotFound, if throwNotFoundError is true, and internal listeners array doesn't include listener provided
103
+ */
104
+ public off(listener?: EventHandler<Events, Name>, throwNotFoundError = false) {
105
+ try {
106
+ if (!listener) this._listeners = new Array<EventHandler<Events, Name>>();
107
+ else if (!this._listeners.includes(listener)) return this;
108
+ else this._listeners.remove(listener);
112
109
  }
110
+ catch (err) { if (throwNotFoundError) throw err; }
111
+ return this;
112
+ }
113
113
  }
114
114
  export default Event;
@@ -7,103 +7,103 @@ import Event from './Event';
7
7
  * @borrows Event
8
8
  * @borrows BaseEvent
9
9
  */
10
- export class EventCollection<Events extends BaseEvent<string, Array<any>>> {
11
- constructor(events?: Map<keyof Events, EventHandler<Events>>) {
12
- this._events = !events ?
13
- new Map<keyof Events, Event<Events>>() :
14
- events.array().reduce((result, [event, handlers]) =>
15
- result.set(event, new Event<Events>(event, handlers)),
16
- new Map<keyof Events, Event<Events>>());
17
- }
10
+ export class EventCollection<Events extends BaseEvent<string, Array<any>>> {
11
+ constructor(events?: Map<keyof Events, EventHandler<Events>>) {
12
+ this._events = !events ?
13
+ new Map<keyof Events, Event<Events>>() :
14
+ events.array().reduce((result, [event, handlers]) =>
15
+ result.set(event, new Event<Events>(event, handlers)),
16
+ new Map<keyof Events, Event<Events>>());
17
+ }
18
18
 
19
- /**Amount of events stored*/
20
- public get size() {
21
- return this._events.size;
22
- }
23
- /**@private Internal event collection*/
24
- private _events = new Map<keyof Events, Event<Events>>();
25
- /**@private limit of events*/
26
- private _limit = 0;
27
-
28
- /**
29
- * Returns true if event is in collection
30
- * @param event Event name
31
- * @returns true if event is in collection
32
- */
33
- public has<EventName extends keyof Events>(event: EventName): boolean {
34
- return this._events.has(event);
35
- }
36
- /**
37
- * Returns event matching event parameter
38
- * @param event Event name
39
- * @returns Event
40
- */
41
- public get<EventName extends keyof Events>(event: EventName): Event<Events, EventName> {
42
- return this._events.get(event) as any;
43
- }
44
- /**
45
- * Adds handler to event collection with name as key
46
- * @param name Event name
47
- * @param handler Handler for event
48
- * @returns this
49
- */
50
- public add<EventName extends keyof Events>(name: EventName, handler: EventHandler<Events, keyof Events>, once = false): this {
51
- if (this._limit > 0 && this._limit + 1 > this._events.size) {
52
- throw new Error(`Listener limit, ${this._limit}, reached!`);
53
- }
19
+ /**Amount of events stored*/
20
+ public get size() {
21
+ return this._events.size;
22
+ }
23
+ /**@private Internal event collection*/
24
+ private _events = new Map<keyof Events, Event<Events>>();
25
+ /**@private limit of events*/
26
+ private _limit = 0;
54
27
 
55
- const event = (this.has(name) && this.get(name)) || new Event(name);
56
- this._events.set(name, event.on(handler, once) as any);
57
- return this;
28
+ /**
29
+ * Returns true if event is in collection
30
+ * @param event Event name
31
+ * @returns true if event is in collection
32
+ */
33
+ public has<EventName extends keyof Events>(event: EventName): boolean {
34
+ return this._events.has(event);
35
+ }
36
+ /**
37
+ * Returns event matching event parameter
38
+ * @param event Event name
39
+ * @returns Event
40
+ */
41
+ public get<EventName extends keyof Events>(event: EventName): Event<Events, EventName> {
42
+ return this._events.get(event) as any;
43
+ }
44
+ /**
45
+ * Adds handler to event collection with name as key
46
+ * @param name Event name
47
+ * @param handler Handler for event
48
+ * @returns this
49
+ */
50
+ public add<EventName extends keyof Events>(name: EventName, handler: EventHandler<Events, keyof Events>, once = false): this {
51
+ if (this._limit > 0 && this._limit + 1 > this._events.size) {
52
+ throw new Error(`Listener limit, ${this._limit}, reached!`);
58
53
  }
59
- /**
60
- * @summary clear(): Clears all events
61
- * @summary clear("all", myEventHandler): Removes myEventHandler from all events that have it
62
- * @summary clear("myEvent"): Clears all handlers tied to "myEvent"
63
- * @summary clear("myEvent", myEventHandler): Removes myEventHandler from "myEvent"
64
- *
65
- * @param name Event name | "all"
66
- * @param handler Specific handler to remove. If left blank, all handlers in name will be removed
67
- * @returns this
68
- */
69
- public clear<EventName extends keyof Events>(name: EventName | 'all' = 'all', handler?: EventHandler): this {
70
- const _name = name as string;
71
54
 
72
- if (_name.toLowerCase() == 'all' && handler == null) this._events.clear(); //clear(): Clears all events
73
- else if (_name.toLowerCase() == 'all' && handler) this._events = (() => { //clear("all", myEventHandler): Removes the "myEventHandler" handler from all events
74
- this._events.forEach(e => e.off(handler))
75
- return this._events;
76
- })();
77
- else if (_name.toLowerCase() != "all" && handler == null) this._events.delete(name); //clear("myEvent"): Clears All handlers tied to "myEvent"
78
- else if (_name.toLowerCase() != 'all' && handler) this._events.set(name, this._events.get(name)!.off(handler)); //clear("myEvent", myEventHandler): Removes the "myEventsHandler" handler from "myEvent"
79
- return this;
80
- }
55
+ const event = (this.has(name) && this.get(name)) || new Event(name);
56
+ this._events.set(name, event.on(handler, once) as any);
57
+ return this;
58
+ }
59
+ /**
60
+ * @summary clear(): Clears all events
61
+ * @summary clear("all", myEventHandler): Removes myEventHandler from all events that have it
62
+ * @summary clear("myEvent"): Clears all handlers tied to "myEvent"
63
+ * @summary clear("myEvent", myEventHandler): Removes myEventHandler from "myEvent"
64
+ *
65
+ * @param name Event name | "all"
66
+ * @param handler Specific handler to remove. If left blank, all handlers in name will be removed
67
+ * @returns this
68
+ */
69
+ public clear<EventName extends keyof Events>(name: EventName | 'all' = 'all', handler?: EventHandler): this {
70
+ const _name = name as string;
81
71
 
82
- public emit<Event extends keyof Events>(name: Event, ...args: Events[Event]) {
83
- return this.get(name)?.emit(...args);
84
- }
72
+ if (_name.toLowerCase() == 'all' && handler == null) this._events.clear(); //clear(): Clears all events
73
+ else if (_name.toLowerCase() == 'all' && handler) this._events = (() => { //clear("all", myEventHandler): Removes the "myEventHandler" handler from all events
74
+ this._events.forEach(e => e.off(handler));
75
+ return this._events;
76
+ })();
77
+ else if (_name.toLowerCase() != "all" && handler == null) this._events.delete(name); //clear("myEvent"): Clears All handlers tied to "myEvent"
78
+ else if (_name.toLowerCase() != 'all' && handler) this._events.set(name, this._events.get(name)!.off(handler)); //clear("myEvent", myEventHandler): Removes the "myEventsHandler" handler from "myEvent"
79
+ return this;
80
+ }
81
+
82
+ public emit<Event extends keyof Events>(name: Event, ...args: Events[Event]) {
83
+ return this.get(name)?.emit(...args);
84
+ }
85
85
 
86
- /**
87
- * Limits how many events to accept using EventEmitter#on or EventEmitter#once
88
- * @param limit Limit of events to keep
89
- * @returns this with the new limit
90
- *
91
- * @throws Unknown event, if event name isn't recognized
92
- */
93
- public limit<Event extends keyof Events>(eventName: 'all' | Event, limit: number) {
94
- if (limit <= 0) return;
95
-
96
- if (eventName == 'all') {
97
- this._limit = limit;
98
- return this;
99
- }
100
-
101
- const event = this.get(eventName);
102
- if (!event) throw new Error(`Unknown event, ${eventName.toString()}!`);
86
+ /**
87
+ * Limits how many events to accept using EventEmitter#on or EventEmitter#once
88
+ * @param limit Limit of events to keep
89
+ * @returns this with the new limit
90
+ *
91
+ * @throws Unknown event, if event name isn't recognized
92
+ */
93
+ public limit<Event extends keyof Events>(eventName: 'all' | Event, limit: number) {
94
+ if (limit <= 0) return;
103
95
 
104
- event.limit = limit;
105
- this._events.set(eventName, event as any);
106
- return this;
96
+ if (eventName == 'all') {
97
+ this._limit = limit;
98
+ return this;
107
99
  }
100
+
101
+ const event = this.get(eventName);
102
+ if (!event) throw new Error(`Unknown event, ${eventName.toString()}!`);
103
+
104
+ event.limit = limit;
105
+ this._events.set(eventName, event as any);
106
+ return this;
107
+ }
108
108
  }
109
109
  export default EventCollection;
@@ -32,77 +32,77 @@ import { BaseEvent, EventHandler } from '../../Types';
32
32
  * ```
33
33
  */
34
34
  export class EventEmitter<Events extends BaseEvent<string, Array<any>>> {
35
- /**@param events Map<name: string, handlers: EventHandler[]>*/
36
- constructor(events?: Map<keyof Events, EventHandler<Events>>) {
37
- this._events = new EventCollection(events);
38
- }
35
+ /**@param events Map<name: string, handlers: EventHandler[]>*/
36
+ constructor(events?: Map<keyof Events, EventHandler<Events>>) {
37
+ this._events = new EventCollection(events);
38
+ }
39
39
 
40
- /**@private Internal event collection*/
41
- private _events = new EventCollection<Events>();
42
-
43
- /**
44
- * Adds listener to event collection, and runs listener when event is emitted
45
- * @param event Event to handle
46
- * @param listener Callback function to run, when event occurs
47
- * @returns this
48
- */
49
- public on<Return extends any, Event extends keyof Events>(
50
- event: Event,
51
- listener: EventHandler<Events, Event, Return>
52
- ): EventEmitter<Events> {
53
- this._events.add(event, listener as any);
54
- return this;
55
- }
56
- /**
57
- * Adds listener to event collection, and runs listener once when event is emitted
58
- * @param event Event to handle
59
- * @param listener Callback function to run, when event occurs
60
- * @returns this
61
- */
62
- public once<Return extends any, Event extends keyof Events>(
63
- event: Event,
64
- listener: EventHandler<Events, Event, Return>
65
- ): EventEmitter<Events> {
66
- this._events.add(event, listener as any, true);
67
- return this;
68
- }
40
+ /**@private Internal event collection*/
41
+ private _events = new EventCollection<Events>();
69
42
 
70
- /**
71
- * Removes listener(s) from event
72
- * @param event Event to get collection of listeners | "all"
73
- * @param listener If left null, removes all listeners tied to event, else only removes listener from event
74
- * @returns this
75
- */
76
- public off<Return extends any, Event extends keyof Events>(
77
- event: Event | 'all' = "all",
78
- listener?: EventHandler<Events, Event, Return>
79
- ): EventEmitter<Events> {
80
- this._events.clear(event, listener);
81
- return this;
82
- }
43
+ /**
44
+ * Adds listener to event collection, and runs listener when event is emitted
45
+ * @param event Event to handle
46
+ * @param listener Callback function to run, when event occurs
47
+ * @returns this
48
+ */
49
+ public on<Return extends any, Event extends keyof Events>(
50
+ event: Event,
51
+ listener: EventHandler<Events, Event, Return>
52
+ ): EventEmitter<Events> {
53
+ this._events.add(event, listener as any);
54
+ return this;
55
+ }
56
+ /**
57
+ * Adds listener to event collection, and runs listener once when event is emitted
58
+ * @param event Event to handle
59
+ * @param listener Callback function to run, when event occurs
60
+ * @returns this
61
+ */
62
+ public once<Return extends any, Event extends keyof Events>(
63
+ event: Event,
64
+ listener: EventHandler<Events, Event, Return>
65
+ ): EventEmitter<Events> {
66
+ this._events.add(event, listener as any, true);
67
+ return this;
68
+ }
83
69
 
84
- /**
85
- * Emits event and runs all listeners tied to event
86
- * @param event Event to emit
87
- * @param args Arguments for the event
88
- * @fires event
89
- * @returns Array of listeners' reponses
90
- */
91
- public emit<Return extends any, Event extends keyof Events>(
92
- event: Event, ...args: Events[Event]
93
- ): Array<Return> {
94
- return this._events.emit(event, ...args) as Array<Return>;
95
- }
70
+ /**
71
+ * Removes listener(s) from event
72
+ * @param event Event to get collection of listeners | "all"
73
+ * @param listener If left null, removes all listeners tied to event, else only removes listener from event
74
+ * @returns this
75
+ */
76
+ public off<Return extends any, Event extends keyof Events>(
77
+ event: Event | 'all' = "all",
78
+ listener?: EventHandler<Events, Event, Return>
79
+ ): EventEmitter<Events> {
80
+ this._events.clear(event, listener);
81
+ return this;
82
+ }
96
83
 
97
- /**
98
- * Limits how many events to accept using EventEmitter#on or EventEmitter#once
99
- * @param event: Specific event to limit, or by default, 'all'
100
- * @param limit Limit of events to keep. If you want to limit amount of events saved, use 'all'.
101
- * @returns this with the new limit
102
- */
103
- public limit<Event extends keyof Events>(event: 'all' | Event, limit: number): EventEmitter<Events> {
104
- this._events.limit<Event>(event, limit);
105
- return this;
106
- }
84
+ /**
85
+ * Emits event and runs all listeners tied to event
86
+ * @param event Event to emit
87
+ * @param args Arguments for the event
88
+ * @fires event
89
+ * @returns Array of listeners' responses
90
+ */
91
+ public emit<Return extends any, Event extends keyof Events>(
92
+ event: Event, ...args: Events[Event]
93
+ ): Array<Return> {
94
+ return this._events.emit(event, ...args) as Array<Return>;
95
+ }
96
+
97
+ /**
98
+ * Limits how many events to accept using EventEmitter#on or EventEmitter#once
99
+ * @param event: Specific event to limit, or by default, 'all'
100
+ * @param limit Limit of events to keep. If you want to limit amount of events saved, use 'all'.
101
+ * @returns this with the new limit
102
+ */
103
+ public limit<Event extends keyof Events>(event: 'all' | Event, limit: number): EventEmitter<Events> {
104
+ this._events.limit<Event>(event, limit);
105
+ return this;
106
+ }
107
107
  }
108
108
  export default EventEmitter;