danholibraryjs 1.11.0 → 2.0.1

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 (210) hide show
  1. package/README.md +0 -1
  2. package/_package.github-release.json +6 -0
  3. package/_package.npm-release.json +6 -0
  4. package/dist/Classes/DanhoLogger.d.ts +23 -0
  5. package/dist/Classes/DanhoLogger.js +65 -0
  6. package/dist/Classes/Events/Event.d.ts +66 -66
  7. package/dist/Classes/Events/Event.js +114 -114
  8. package/dist/Classes/Events/EventCollection.d.ts +57 -57
  9. package/dist/Classes/Events/EventCollection.js +109 -109
  10. package/dist/Classes/Events/EventEmitter.d.ts +74 -74
  11. package/dist/Classes/Events/EventEmitter.js +97 -97
  12. package/dist/Classes/Events/index.d.ts +3 -3
  13. package/dist/Classes/Events/index.js +19 -19
  14. package/dist/Classes/Time/Date.d.ts +148 -147
  15. package/dist/Classes/Time/Date.js +241 -238
  16. package/dist/Classes/Time/Time.d.ts +66 -65
  17. package/dist/Classes/Time/Time.js +120 -117
  18. package/dist/Classes/Time/TimeProperties.d.ts +3 -3
  19. package/dist/Classes/Time/TimeProperties.js +2 -2
  20. package/dist/Classes/Time/TimeSpan.d.ts +123 -123
  21. package/dist/Classes/Time/TimeSpan.js +179 -179
  22. package/dist/Classes/Time/index.d.ts +4 -4
  23. package/dist/Classes/Time/index.js +20 -20
  24. package/dist/Classes/index.d.ts +4 -3
  25. package/dist/Classes/index.js +20 -19
  26. package/dist/Classes/store.d.ts +75 -75
  27. package/dist/Classes/store.js +84 -84
  28. package/dist/Extensions/Array/array.extension.d.ts +42 -0
  29. package/dist/Extensions/Array/array.extension.js +57 -0
  30. package/dist/Extensions/Array/crud.extension.d.ts +24 -0
  31. package/dist/Extensions/Array/crud.extension.js +28 -0
  32. package/dist/Extensions/Array/index.d.ts +6 -0
  33. package/dist/Extensions/Array/index.js +22 -0
  34. package/dist/Extensions/Array/loop.extension.d.ts +18 -0
  35. package/dist/Extensions/Array/loop.extension.js +23 -0
  36. package/dist/Extensions/Array/random.extension.d.ts +23 -0
  37. package/dist/Extensions/Array/random.extension.js +35 -0
  38. package/dist/Extensions/Array/sort.extension.d.ts +27 -0
  39. package/dist/Extensions/Array/sort.extension.js +31 -0
  40. package/dist/Extensions/Array/string.extension.d.ts +13 -0
  41. package/dist/Extensions/Array/string.extension.js +14 -0
  42. package/dist/Extensions/Function.d.ts +29 -14
  43. package/dist/Extensions/Function.js +23 -10
  44. package/dist/Extensions/Map.d.ts +54 -54
  45. package/dist/Extensions/Map.js +42 -42
  46. package/dist/Extensions/Number.d.ts +13 -0
  47. package/dist/Extensions/Number.js +40 -0
  48. package/dist/Extensions/Object/arrays.extension.d.ts +17 -0
  49. package/dist/Extensions/Object/arrays.extension.js +13 -0
  50. package/dist/Extensions/Object/booleans.extension.d.ts +18 -0
  51. package/dist/Extensions/Object/booleans.extension.js +37 -0
  52. package/dist/Extensions/Object/extracts.extension.d.ts +38 -0
  53. package/dist/Extensions/Object/extracts.extension.js +72 -0
  54. package/dist/Extensions/Object/index.d.ts +4 -49
  55. package/dist/Extensions/Object/index.js +20 -38
  56. package/dist/Extensions/Object/properties.d.ts +28 -28
  57. package/dist/Extensions/Object/properties.extension.d.ts +33 -0
  58. package/dist/Extensions/Object/properties.extension.js +21 -0
  59. package/dist/Extensions/Object/properties.js +20 -20
  60. package/dist/Extensions/String/case.extension.d.ts +12 -0
  61. package/dist/Extensions/String/case.extension.js +55 -0
  62. package/dist/Extensions/String/index.d.ts +1 -0
  63. package/dist/{Functions → Extensions/String}/index.js +17 -21
  64. package/dist/Extensions/index.d.ts +6 -17
  65. package/dist/Extensions/index.js +22 -30
  66. package/dist/Interfaces/ElementOptions.d.ts +15 -15
  67. package/dist/Interfaces/ElementOptions.js +2 -2
  68. package/dist/Interfaces/IReplacement.d.ts +12 -12
  69. package/dist/Interfaces/IReplacement.js +2 -2
  70. package/dist/Interfaces/index.d.ts +2 -2
  71. package/dist/Interfaces/index.js +18 -18
  72. package/dist/Types/Able.d.ts +16 -0
  73. package/dist/Types/Able.js +2 -0
  74. package/dist/Types/Array.d.ts +6 -0
  75. package/dist/Types/Array.js +2 -0
  76. package/dist/Types/BetterTypes.d.ts +9 -9
  77. package/dist/Types/BetterTypes.js +2 -2
  78. package/dist/Types/C#.d.ts +8 -0
  79. package/dist/Types/C#.js +2 -0
  80. package/dist/Types/Date.d.ts +6 -6
  81. package/dist/Types/Date.js +2 -2
  82. package/dist/Types/Events.d.ts +10 -10
  83. package/dist/Types/Events.js +2 -2
  84. package/dist/Types/Function.d.ts +5 -0
  85. package/dist/Types/Function.js +2 -0
  86. package/dist/Types/Object.d.ts +4 -0
  87. package/dist/Types/Object.js +2 -0
  88. package/dist/Types/PropertiesWith.d.ts +34 -13
  89. package/dist/Types/PropertiesWith.js +2 -2
  90. package/dist/Types/String.d.ts +1 -0
  91. package/dist/Types/String.js +2 -0
  92. package/dist/Types/TransformTypes.d.ts +22 -16
  93. package/dist/Types/TransformTypes.js +2 -2
  94. package/dist/Types/index.d.ts +24 -65
  95. package/dist/Types/index.js +27 -21
  96. package/dist/Utils/{ApiUtil → ApiUtils}/ApiTypes.d.ts +15 -15
  97. package/dist/Utils/{ApiUtil → ApiUtils}/ApiTypes.js +15 -15
  98. package/dist/Utils/{ApiUtil → ApiUtils}/RequestUtil.d.ts +19 -19
  99. package/dist/Utils/{ApiUtil → ApiUtils}/RequestUtil.js +73 -73
  100. package/dist/Utils/{ApiUtil → ApiUtils}/index.d.ts +20 -20
  101. package/dist/Utils/{ApiUtil → ApiUtils}/index.js +33 -33
  102. package/dist/Utils/ColorUtils.d.ts +11 -0
  103. package/dist/Utils/ColorUtils.js +93 -0
  104. package/dist/Utils/{FormUtil.d.ts → FormUtils.d.ts} +6 -6
  105. package/dist/Utils/{FormUtil.js → FormUtils.js} +35 -35
  106. package/dist/Utils/NumberUtils.d.ts +1 -0
  107. package/dist/Utils/NumberUtils.js +7 -0
  108. package/dist/Utils/PatcherUtils.d.ts +6 -0
  109. package/dist/Utils/PatcherUtils.js +80 -0
  110. package/dist/Utils/StringUtils.d.ts +3 -0
  111. package/dist/Utils/StringUtils.js +47 -0
  112. package/dist/Utils/TimeUtils/debounce.util.d.ts +22 -0
  113. package/dist/Utils/TimeUtils/debounce.util.js +78 -0
  114. package/dist/Utils/TimeUtils/functions.util.d.ts +4 -0
  115. package/dist/Utils/TimeUtils/functions.util.js +21 -0
  116. package/dist/Utils/TimeUtils/index.d.ts +15 -0
  117. package/dist/Utils/TimeUtils/index.js +34 -0
  118. package/dist/Utils/TimeUtils/throttle.util.d.ts +15 -0
  119. package/dist/Utils/TimeUtils/throttle.util.js +43 -0
  120. package/dist/Utils/index.d.ts +7 -2
  121. package/dist/Utils/index.js +23 -18
  122. package/dist/index.d.ts +4 -5
  123. package/dist/index.js +20 -21
  124. package/docs/Classes.md +78 -3
  125. package/docs/Extensions.md +219 -78
  126. package/docs/Types.md +202 -58
  127. package/docs/index.md +0 -1
  128. package/package.json +4 -2
  129. package/src/Classes/DanhoLogger.ts +78 -0
  130. package/src/Classes/Events/Event.ts +96 -96
  131. package/src/Classes/Events/EventCollection.ts +90 -90
  132. package/src/Classes/Events/EventEmitter.ts +68 -68
  133. package/src/Classes/Time/Date.ts +219 -216
  134. package/src/Classes/Time/Time.ts +109 -104
  135. package/src/Classes/Time/TimeSpan.ts +171 -171
  136. package/src/Classes/index.ts +1 -0
  137. package/src/Classes/store.ts +22 -22
  138. package/src/Extensions/Array/array.extension.ts +103 -0
  139. package/src/Extensions/Array/crud.extension.ts +46 -0
  140. package/src/Extensions/Array/index.ts +6 -0
  141. package/src/Extensions/Array/loop.extension.ts +38 -0
  142. package/src/Extensions/Array/random.extension.ts +56 -0
  143. package/src/Extensions/Array/sort.extension.ts +52 -0
  144. package/src/Extensions/Array/string.extension.ts +22 -0
  145. package/src/Extensions/Function.ts +37 -10
  146. package/src/Extensions/Map.ts +56 -56
  147. package/src/Extensions/Number.ts +50 -0
  148. package/src/Extensions/Object/arrays.extension.ts +27 -0
  149. package/src/Extensions/Object/booleans.extension.ts +46 -0
  150. package/src/Extensions/Object/extracts.extension.ts +102 -0
  151. package/src/Extensions/Object/index.ts +4 -82
  152. package/src/Extensions/Object/properties.extension.ts +59 -0
  153. package/src/Extensions/Object/properties.ts +36 -36
  154. package/src/Extensions/String/case.extension.ts +95 -0
  155. package/src/Extensions/String/index.ts +1 -0
  156. package/src/Extensions/index.ts +3 -21
  157. package/src/Interfaces/ElementOptions.ts +7 -7
  158. package/src/Interfaces/IReplacement.ts +2 -2
  159. package/src/Types/Able.ts +22 -0
  160. package/src/Types/Array.ts +7 -0
  161. package/src/Types/C#.ts +9 -0
  162. package/src/Types/Date.ts +1 -1
  163. package/src/Types/Events.ts +12 -12
  164. package/src/Types/Function.ts +10 -0
  165. package/src/Types/Object.ts +4 -0
  166. package/src/Types/PropertiesWith.ts +35 -4
  167. package/src/Types/String.ts +1 -0
  168. package/src/Types/TransformTypes.ts +21 -13
  169. package/src/Types/index.ts +7 -69
  170. package/src/Utils/{ApiUtil → ApiUtils}/ApiTypes.ts +2 -1
  171. package/src/Utils/{ApiUtil → ApiUtils}/index.ts +1 -1
  172. package/src/Utils/ColorUtils.ts +102 -0
  173. package/src/Utils/{FormUtil.ts → FormUtils.ts} +2 -2
  174. package/src/Utils/NumberUtils.ts +3 -0
  175. package/src/Utils/PatcherUtils.ts +111 -0
  176. package/src/Utils/StringUtils.ts +44 -0
  177. package/src/Utils/TimeUtils/debounce.util.ts +85 -0
  178. package/src/Utils/TimeUtils/functions.util.ts +18 -0
  179. package/src/Utils/TimeUtils/index.ts +9 -0
  180. package/src/Utils/TimeUtils/throttle.util.ts +44 -0
  181. package/src/Utils/index.ts +8 -2
  182. package/src/index.ts +0 -1
  183. package/dist/Extensions/Array.d.ts +0 -52
  184. package/dist/Extensions/Array.js +0 -51
  185. package/dist/Extensions/Document.d.ts +0 -27
  186. package/dist/Extensions/Document.js +0 -32
  187. package/dist/Extensions/String.d.ts +0 -36
  188. package/dist/Extensions/String.js +0 -25
  189. package/dist/Functions/CopyToClipboard.d.ts +0 -7
  190. package/dist/Functions/CopyToClipboard.js +0 -15
  191. package/dist/Functions/GetCSSProperty.d.ts +0 -15
  192. package/dist/Functions/GetCSSProperty.js +0 -26
  193. package/dist/Functions/GetNestedProperty.d.ts +0 -9
  194. package/dist/Functions/GetNestedProperty.js +0 -23
  195. package/dist/Functions/HTMLEvent.d.ts +0 -11
  196. package/dist/Functions/HTMLEvent.js +0 -14
  197. package/dist/Functions/SetNavigationSelected.d.ts +0 -9
  198. package/dist/Functions/SetNavigationSelected.js +0 -25
  199. package/dist/Functions/index.d.ts +0 -5
  200. package/docs/Functions.md +0 -61
  201. package/src/Extensions/Array.ts +0 -95
  202. package/src/Extensions/Document.ts +0 -58
  203. package/src/Extensions/String.ts +0 -54
  204. package/src/Functions/CopyToClipboard.ts +0 -10
  205. package/src/Functions/GetCSSProperty.ts +0 -27
  206. package/src/Functions/GetNestedProperty.ts +0 -29
  207. package/src/Functions/HTMLEvent.ts +0 -13
  208. package/src/Functions/SetNavigationSelected.ts +0 -19
  209. package/src/Functions/index.ts +0 -5
  210. /package/src/Utils/{ApiUtil → ApiUtils}/RequestUtil.ts +0 -0
@@ -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;