danholibraryjs 1.3.0 → 1.7.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 (103) hide show
  1. package/.gitattributes +2 -2
  2. package/README.md +12 -304
  3. package/Time.xlsx +0 -0
  4. package/dist/Classes/{Event.d.ts → Events/Event.d.ts} +14 -11
  5. package/dist/Classes/{Event.js → Events/Event.js} +16 -6
  6. package/dist/Classes/{EventCollection.d.ts → Events/EventCollection.d.ts} +10 -9
  7. package/dist/Classes/{EventCollection.js → Events/EventCollection.js} +27 -28
  8. package/dist/Classes/{EventEmitter.d.ts → Events/EventEmitter.d.ts} +11 -8
  9. package/dist/Classes/{EventEmitter.js → Events/EventEmitter.js} +7 -1
  10. package/dist/Classes/Events/index.d.ts +3 -0
  11. package/dist/Classes/Events/index.js +19 -0
  12. package/dist/Classes/Time/Date.d.ts +147 -0
  13. package/dist/Classes/Time/Date.js +238 -0
  14. package/dist/Classes/Time/Time.d.ts +65 -0
  15. package/dist/Classes/Time/Time.js +117 -0
  16. package/dist/Classes/Time/TimeProperties.d.ts +3 -0
  17. package/dist/{Types/EventHandler.js → Classes/Time/TimeProperties.js} +0 -0
  18. package/dist/Classes/Time/TimeSpan.d.ts +123 -0
  19. package/dist/Classes/Time/TimeSpan.js +179 -0
  20. package/dist/Classes/Time/index.d.ts +4 -0
  21. package/dist/Classes/Time/index.js +20 -0
  22. package/dist/Classes/index.d.ts +2 -2
  23. package/dist/Classes/index.js +7 -3
  24. package/dist/Extensions/Array.d.ts +31 -0
  25. package/dist/Extensions/Array.js +26 -0
  26. package/dist/Extensions/Map.d.ts +38 -0
  27. package/dist/Extensions/Map.js +31 -0
  28. package/dist/Extensions/Object.d.ts +16 -0
  29. package/dist/Extensions/Object.js +8 -0
  30. package/dist/Extensions/String.d.ts +26 -0
  31. package/dist/Extensions/String.js +17 -0
  32. package/dist/Extensions/index.d.ts +29 -0
  33. package/dist/Extensions/index.js +71 -0
  34. package/dist/Functions/GetCSSProperty.d.ts +15 -0
  35. package/dist/Functions/GetCSSProperty.js +26 -0
  36. package/dist/Functions/HTMLEvent.d.ts +11 -0
  37. package/dist/Functions/HTMLEvent.js +14 -0
  38. package/dist/Functions/SetNavigationSelected.js +2 -0
  39. package/dist/Functions/index.d.ts +2 -0
  40. package/dist/Functions/index.js +7 -1
  41. package/dist/Interfaces/ElementOptions.d.ts +12 -18
  42. package/dist/Interfaces/IReplacement.d.ts +3 -2
  43. package/dist/Interfaces/index.js +5 -1
  44. package/dist/Types/BetterTypes.d.ts +9 -0
  45. package/dist/Types/{IElement.js → BetterTypes.js} +0 -0
  46. package/dist/Types/Date.d.ts +6 -0
  47. package/dist/Types/{StringRegex.js → Date.js} +0 -0
  48. package/dist/Types/Events.d.ts +10 -0
  49. package/dist/Types/Events.js +2 -0
  50. package/dist/Types/PropertiesWith.d.ts +13 -0
  51. package/dist/Types/PropertiesWith.js +2 -0
  52. package/dist/Types/TransformTypes.d.ts +13 -0
  53. package/dist/Types/TransformTypes.js +2 -0
  54. package/dist/Types/index.d.ts +31 -3
  55. package/dist/Types/index.js +10 -4
  56. package/dist/index.d.ts +5 -9
  57. package/dist/index.js +19 -8
  58. package/docs/Classes.md +455 -0
  59. package/docs/Extensions.md +146 -0
  60. package/docs/Functions.md +53 -0
  61. package/docs/Interfaces.md +34 -0
  62. package/docs/Types.md +129 -0
  63. package/docs/index.md +29 -0
  64. package/package.json +22 -21
  65. package/src/Classes/{Event.ts → Events/Event.ts} +31 -20
  66. package/src/Classes/Events/EventCollection.ts +109 -0
  67. package/src/Classes/{EventEmitter.ts → Events/EventEmitter.ts} +16 -13
  68. package/src/Classes/Events/index.ts +3 -0
  69. package/src/Classes/Time/Date.ts +264 -0
  70. package/src/Classes/Time/Time.ts +134 -0
  71. package/src/Classes/Time/TimeProperties.ts +3 -0
  72. package/src/Classes/Time/TimeSpan.ts +195 -0
  73. package/src/Classes/Time/index.ts +4 -0
  74. package/src/Classes/index.ts +2 -2
  75. package/src/Extensions/Array.ts +57 -0
  76. package/src/Extensions/Map.ts +73 -0
  77. package/src/Extensions/Object.ts +25 -0
  78. package/src/Extensions/String.ts +43 -0
  79. package/src/Extensions/index.ts +83 -0
  80. package/src/Functions/GetCSSProperty.ts +27 -0
  81. package/src/Functions/HTMLEvent.ts +13 -0
  82. package/src/Functions/SetNavigationSelected.ts +1 -0
  83. package/src/Functions/index.ts +3 -1
  84. package/src/Interfaces/ElementOptions.ts +18 -16
  85. package/src/Interfaces/IReplacement.ts +4 -3
  86. package/src/Types/BetterTypes.ts +10 -0
  87. package/src/Types/Date.ts +7 -0
  88. package/src/Types/Events.ts +15 -0
  89. package/src/Types/PropertiesWith.ts +14 -0
  90. package/src/Types/TransformTypes.ts +18 -0
  91. package/src/Types/index.ts +36 -3
  92. package/src/index.ts +5 -13
  93. package/tsconfig.json +99 -7
  94. package/dist/Extensions.d.ts +0 -81
  95. package/dist/Extensions.js +0 -80
  96. package/dist/Types/EventHandler.d.ts +0 -6
  97. package/dist/Types/IElement.d.ts +0 -9
  98. package/dist/Types/StringRegex.d.ts +0 -2
  99. package/src/Classes/EventCollection.ts +0 -115
  100. package/src/Extensions.ts +0 -179
  101. package/src/Types/EventHandler.ts +0 -6
  102. package/src/Types/IElement.ts +0 -9
  103. package/src/Types/StringRegex.ts +0 -2
package/.gitattributes CHANGED
@@ -1,2 +1,2 @@
1
- # Auto detect text files and perform LF normalization
2
- * text=auto
1
+ # Auto detect text files and perform LF normalization
2
+ * text=auto
package/README.md CHANGED
@@ -1,13 +1,18 @@
1
1
  # DanhoLibraryJS
2
+
2
3
  [By DanielSimonsen90 // Danhosaur](https://github.com/DanielSimonsen90)
3
4
 
5
+ ## Installation
6
+
4
7
  ### Vanilla
8
+
5
9
  ```html
6
10
  <script src="https://cdn.jsdelivr.net/gh/DanielSimonsen90/DanhoLibraryJS@latest/dist/index.js"></script>
7
11
  ```
8
12
 
9
13
  ### Node
10
- ```
14
+
15
+ ```cmd
11
16
  npm install danholibraryjs
12
17
  ```
13
18
 
@@ -15,307 +20,10 @@ npm install danholibraryjs
15
20
  import { ... } from 'DanhoLibraryJS';
16
21
  ```
17
22
 
18
- ### Documentation
19
- #### Extensions
20
- ```ts
21
- class Document {
22
- /**
23
- * Creates an element like Document#createElement, however with construction options to assign values in construction instead of after construction.
24
- * @param tagName HTMLElement tag name
25
- * @param options Construction options, instead of assigning values after construction
26
- */
27
- createProperElement<K extends keyof HTMLElementTagNameMap>(tagName: K, options?: ElementOptions<K>): HTMLElementTagNameMap[K];
28
- }
29
-
30
- class HTMLCollection {
31
- /**Converts HTMLCollection to Element[]*/
32
- array(): Element[];
33
- }
34
-
35
- class Array<T> {
36
- /**
37
- * Pushes items to array and returns self with new items
38
- * @param items Items to add to array
39
- */
40
- add(...items: Array<T>): this
41
- /**
42
- * Removes item from array and returns self without item
43
- * @param item Item to remove
44
- */
45
- remove(item: T): this
46
- }
47
-
48
- interface Map<K, V> {
49
- /**Converts map into Array<[Key, Value]>*/
50
- array(): [K, V][]
51
- /**
52
- * Maps values into new types of generics
53
- * @param callback Callbacking function to map values
54
- */
55
- map<EK, EV>(callback: (value: V, key?: K, index?: number, map?: this) => [EK, EV]): Map<EK, EV>
56
- /**
57
- * Returns array of "accepted" values. Criteria defined in callback param
58
- * @param callback Callbacking function to filter away unwanted values
59
- */
60
- filter(callback: (value: V, key?: K, index?: number, map?: Map<K, V>) => boolean): Map<K, V>
61
- /**Converts map into array of keys*/
62
- keyArr(): Array<K>
63
- /**Converts map into array of values*/
64
- valueArr(): Array<V>
65
- /**
66
- * Returns first [key, value] match to callback param
67
- * @param callback Callbacking function to find KeyValuePair
68
- */
69
- find(callback: (value: V, key?: K, index?: number, map?: Map<K, V>) => boolean): [K, V]
70
- /**
71
- * Whether or not map includes a value (value version of Map#has)
72
- * @param value Value that may be includded in map
73
- * @param fromIndex Start looking for value from specific index+. Default: 0
74
- */
75
- includes(value: V, fromIndex?: number): boolean;
76
- }
77
- interface String {
78
- /**Uppercases first letter of string*/
79
- toPascalCase(): string
80
- /**
81
- * Replaces "replacer" (default: ' ') with "replacement" (default: '_')
82
- * @param replaceOptions This is practically your stereotypical String.replace, if you really want it to be
83
- */
84
- toSnakeCase(replaceOptions?: IReplacement): string
85
- /**
86
- * Replaces "replacer" (default: ' ') with "replacement" (default: '-')
87
- * @param replaceOptions This is practically your stereotypical String.replace, if you really want it to be
88
- */
89
- toKebabCase(replaceOptions?: IReplacement): string
90
- }
91
- ```
92
-
93
- #### Functions
94
- ```ts
95
- /**
96
- * Copies value to clipboard and alerts a response, if response is defined
97
- * @param value Value to clipboard
98
- * @param response Alerts if response is given
99
- */
100
- async function CopyToClipboard(value: string, response?: string): Promise<void>;
101
-
102
- /**
103
- * Appends classes to header's "a" elements, when navigation to "a"'s page is selected
104
- * @param query The query selector for Document.querySelector
105
- * @param currentPageClasses Class(es) to append header's "a" elements
106
- *
107
- * @borrows Document.querySelector
108
- */
109
- function SetNavigationSelected(query: string, ...currentPageClasses: string[]): void;
110
- ```
111
-
112
- #### Classes
113
- ```ts
114
- /**Base event for @see EventEmitter, @borrows EventHandler*/
115
- class Event<ReturnType = any> {
116
- /**
117
- * Base event for @see EventEmitter, @borrows EventHandler
118
- * @param name Name of event
119
- * @param listeners Listeners/Handlers to execute when emitted
120
- */
121
- constructor(name: string, ...listeners: Array<EventHandler<ReturnType>>);
122
-
123
- /**Name of event*/
124
- public name: string;
125
- /**Listener limit - default: 0 */
126
- public limit = 0;
127
- /**Number of times event was emitted - default: 0*/
128
- public get runs: number;
129
- /**Timestamp of last emit - default: null*/
130
- public get lastEmitted: Date;
131
-
132
- /**
133
- * Emits event and returns array of responses
134
- * @param args Arguments required for event listeners
135
- * @returns Return values of listeners' returns
136
- */
137
- public emit(...args: any[]): any[];
138
- /**
139
- * Adds listener to listeners array and returns self with new listener added
140
- * @param listener Listener to add
141
- * @param prepend Add first (true) or last (false) - default: false
142
- * @returns this with listener added
143
- *
144
- * @throws Limit error, if limit was reached
145
- */
146
- public on(listener: EventHandler<ReturnType>, prepend = false): this
147
- /**
148
- * Like Event#on, adds listener to listeners array and returns self with new listener added, however removes listener once emitted
149
- * @param listener Listener to add
150
- * @param prepend Add first (true) or last (false) - default: false
151
- * @returns this with listener added
152
- *
153
- * @throws Limit error, if limit was reached
154
- */
155
- public once(listener: EventHandler<ReturnType>, prepend = false): this;
156
- /**
157
- * Returns true or false, depending if event includes listener
158
- * @param listener Listener to test
159
- * @returns True of false, depending if event includes listener
160
- */
161
- public includes(listener: EventHandler<ReturnType>): boolean;
162
- /**
163
- * Removes listener from internal listeners array
164
- * @param listener Listener to remove
165
- * @param throwNotFoundError Throw error if listener isn't in listeners array - default: false
166
- * @returns this, without listener
167
- *
168
- * @throws NotFound, if throwNotFoundError is true, and internal listeners array doesn't include listener provided
169
- */
170
- public off(listener: EventHandler<ReturnType>, throwNotFoundError = false): this;
171
- }
172
-
173
- class EventCollection {
174
- /**
175
- * Collection of Events from @see EventEmitter
176
- * @borrows EventHandler
177
- * @borrows Event
178
- */
179
- /**Events to add in construction - Map<eventName, eventHandlers>*/
180
- constructor(events?: Map<string, EventHandler[]>);
181
- /**Amount of events stored*/
182
- readonly size: number;
183
- /**
184
- * Returns true if event is in collection
185
- * @param event Event name
186
- * @returns true if event is in collection
187
- */
188
- has(event: string): boolean;
189
- /**
190
- * Returns all event handlers for event name. T is return type for event
191
- * @param event Event name
192
- * @returns Event object stored
193
- */
194
- get<T = any>(event: string): Event<T>
195
- /**
196
- * Adds handler to event collection with name as key
197
- * @param name Event name
198
- * @param handler Handler for event
199
- * @param once Whether or not handler only should run once or all times
200
- * @returns this
201
- */
202
- add(name: string, handler: EventHandler, once = false): this;
203
- /**
204
- * @summary clear(): Clears all events
205
- * @summary clear("all", myEventHandler): Removes myEventHandler from all events that have it
206
- * @summary clear("myEvent"): Clears all handlers tied to "myEvent"
207
- * @summary clear("myEvent", myEventHandler): Removes myEventHandler from "myEvent"
208
- *
209
- * @param name Event name | "all"
210
- * @param handler Specific handler to remove. If left blank, all handlers in name will be removed
211
- * @returns this
212
- */
213
- clear(name?: string | "all", handler?: EventHandler): this;
214
- /**
215
- * Emits event matching name, and provides args param to saved handers. Returns result from all handlers
216
- * @param name Event name
217
- * @param args Arguments for event handlers
218
- * @returns Result from all handlers
219
- */
220
- emit(name: string, ...args: any[]): any[];
221
- /**
222
- * Limits how many events to accept using EventEmitter#on or EventEmitter#once
223
- * @param limit Limit of events to keep
224
- * @returns this with the new limit
225
- *
226
- * @throws Unknown event, if event name isn't recognized
227
- */
228
- limit(event: 'all' | string, limit: number): this
229
- }
230
-
231
- /**Traditional Node.js EventEmitter in vanilla JavaScript*/
232
- class EventEmitter {
233
- /**@param events Map<name: string, handlers: EventHandler[]>*/
234
- constructor(events?: Map<string, EventHandler[]>);
235
-
236
- /**
237
- * Adds listener to event collection, and runs listener when event is emitted
238
- * @param event Event to handle
239
- * @param listener Callback function to run, when event occurs
240
- * @returns this
241
- */
242
- on<ReturnType = any>(event: string, listener: EventHandler<ReturnType>): this;
243
- /**
244
- * Adds listener to event collection, and runs listener once when event is emitted
245
- * @param event Event to handle
246
- * @param listener Callback function to run, when event occurs
247
- * @returns this
248
- */
249
- once(event: string, listener: EventHandler): this;
250
- /**
251
- * Removes listener(s) from event
252
- * @param event Event to get collection of listeners | "all"
253
- * @param listener If left null, removes all listeners tied to event, else only removes listener from event
254
- * @returns this
255
- */
256
- off(event: string = 'all', listener?: EventHandler): this;
257
- /**
258
- * Emits event and runs all listeners tied to event
259
- * @param event Event to emit
260
- * @param args Arguments for the event
261
- * @fires event
262
- * @returns Array of listeners' reponses
263
- */
264
- emit<ReturnType = any>(event: string, ...args: any[]): ReturnType[];
265
- /**
266
- * Limits how many events to accept using EventEmitter#on or EventEmitter#once
267
- * @param event: Specific event to limit, or by default, 'all'
268
- * @param limit Limit of events to keep. If you want to limit amount of events saved, use 'all'.
269
- * @returns this with the new limit
270
- */
271
- public limit(event: 'all' | string, limit: number): this;
272
- }
273
- ```
274
-
275
- #### Interfaces
276
- ```ts
277
- /**Options for creating a proper HTML element*/
278
- interface ElementOptions<K extends keyof HTMLElementTagNameMap> {
279
- /**css classes to give the element*/
280
- classes?: string[];
281
- /**attributes to give the element*/
282
- attributes?: [string, string][];
283
- /**Children of the element*/
284
- children?: HTMLElementTagNameMap[K][];
285
- /**Events for the element to listen to
286
- * @borrows EventHandler
287
- */
288
- events?: Array<{ name: string, handlers: EventHandler[] }>
289
- }
290
- /**
291
- * Replacement tool for
292
- * @see String.toSnakeCase
293
- * @see String.toKebabCase
294
- * @borrows StringRegex
295
- */
296
- interface IReplacement {
297
- replacer?: StringRegex,
298
- replacement?: string
299
- }
300
- ```
301
-
302
- #### Types
303
- ```ts
304
- /**
305
- * Eventhandler type for:
306
- * @see EventCollection
307
- */
308
- type EventHandler<ReturnType = any> = (...args: any[]) => ReturnType;
309
-
310
- /**
311
- * Used for HTMLElement.append in ElementOptions, Document.createProperElement.
312
- * IElement accepts HTML Elements or HTMl-like strings.
313
- *
314
- * @see HTMLElement.append
315
- * @see Document.createProperElement
316
- */
317
- type IElement = HTMLElement | string;
23
+ ## Documentation
318
24
 
319
- /**Used for @see IReplacement*/
320
- type StringRegex = string | RegExp;
321
- ```
25
+ * [Classes](/docs/Classes.md)
26
+ * [Extensions](/docs/Extensions.md)
27
+ * [Functions](/docs/Functions.md)
28
+ * [Interfaces](/docs/Interfaces.md)
29
+ * [Types](/docs/Types.md)
package/Time.xlsx ADDED
Binary file
@@ -1,14 +1,16 @@
1
- import EventHandler from "../Types/EventHandler";
2
- /**Base event for @see EventEmitter, @borrows EventHandler*/
3
- export default class Event<ReturnType = any> {
1
+ import { BaseEvent, EventHandler } from "../../Types/Events";
2
+ /**
3
+ * Base event for @see EventEmitter, @borrows EventHandler @borrows BaseEvent
4
+ */
5
+ export declare class Event<Events extends BaseEvent<string, Array<any>>, Name extends keyof Events = keyof Events> {
4
6
  /**
5
7
  * Base event for @see EventEmitter, @borrows EventHandler
6
8
  * @param name Name of event
7
9
  * @param listeners Listeners/Handlers to execute when emitted
8
10
  */
9
- constructor(name: string, ...listeners: Array<EventHandler<ReturnType>>);
11
+ constructor(name: Name, ...listeners: Array<EventHandler<Events, Name>>);
10
12
  /**Name of event*/
11
- name: string;
13
+ name: Name;
12
14
  /**Listener limit - default: 0 */
13
15
  limit: number;
14
16
  /**Number of times event was emitted - default: 0*/
@@ -26,7 +28,7 @@ export default class Event<ReturnType = any> {
26
28
  * @param args Arguments required for event listeners
27
29
  * @returns Return values of listeners' returns
28
30
  */
29
- emit(...args: any[]): ReturnType[];
31
+ emit(...args: Events[Name]): any[];
30
32
  /**
31
33
  * Adds listener to listeners array and returns self with new listener added
32
34
  * @param listener Listener to add
@@ -35,7 +37,7 @@ export default class Event<ReturnType = any> {
35
37
  *
36
38
  * @throws Limit error, if limit was reached
37
39
  */
38
- on(listener: EventHandler<ReturnType>, prepend?: boolean): this;
40
+ on(listener: EventHandler<Events, Name>, prepend?: boolean): this;
39
41
  /**
40
42
  * Like Event#on, adds listener to listeners array and returns self with new listener added, however removes listener once emitted
41
43
  * @param listener Listener to add
@@ -44,20 +46,21 @@ export default class Event<ReturnType = any> {
44
46
  *
45
47
  * @throws Limit error, if limit was reached
46
48
  */
47
- once(listener: EventHandler<ReturnType>, prepend?: boolean): this;
49
+ once(listener: EventHandler<Events, Name>, prepend?: boolean): this;
48
50
  /**
49
51
  * Returns true or false, depending if event includes listener
50
52
  * @param listener Listener to test
51
53
  * @returns True of false, depending if event includes listener
52
54
  */
53
- includes(listener: EventHandler<ReturnType>): boolean;
55
+ includes(listener: EventHandler<Events, Name>): boolean;
54
56
  /**
55
57
  * Removes listener from internal listeners array
56
- * @param listener Listener to remove
58
+ * @param listener Listener to remove. If none specified, all will be removed
57
59
  * @param throwNotFoundError Throw error if listener isn't in listeners array - default: false
58
60
  * @returns this, without listener
59
61
  *
60
62
  * @throws NotFound, if throwNotFoundError is true, and internal listeners array doesn't include listener provided
61
63
  */
62
- off(listener: EventHandler<ReturnType>, throwNotFoundError?: boolean): this;
64
+ off(listener?: EventHandler<Events, Name>, throwNotFoundError?: boolean): this;
63
65
  }
66
+ export default Event;
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- /**Base event for @see EventEmitter, @borrows EventHandler*/
3
+ exports.Event = void 0;
4
+ /**
5
+ * Base event for @see EventEmitter, @borrows EventHandler @borrows BaseEvent
6
+ */
4
7
  class Event {
5
8
  /**
6
9
  * Base event for @see EventEmitter, @borrows EventHandler
@@ -10,6 +13,7 @@ class Event {
10
13
  constructor(name, ...listeners) {
11
14
  this.name = name;
12
15
  this._listeners = listeners;
16
+ this._lastEmitted = new Date();
13
17
  }
14
18
  /**Name of event*/
15
19
  name;
@@ -28,7 +32,7 @@ class Event {
28
32
  /**@private Internal runs*/
29
33
  _runs = 0;
30
34
  /**@private Internal lastEmitted*/
31
- _lastEmitted = null;
35
+ _lastEmitted;
32
36
  /**
33
37
  * Emits event and returns array of responses
34
38
  * @param args Arguments required for event listeners
@@ -66,8 +70,8 @@ class Event {
66
70
  * @throws Limit error, if limit was reached
67
71
  */
68
72
  once(listener, prepend = false) {
69
- const handler = (...args) => {
70
- const result = listener(...args);
73
+ const handler = (...params) => {
74
+ const result = listener(...params);
71
75
  this.off(handler);
72
76
  return result;
73
77
  };
@@ -84,7 +88,7 @@ class Event {
84
88
  }
85
89
  /**
86
90
  * Removes listener from internal listeners array
87
- * @param listener Listener to remove
91
+ * @param listener Listener to remove. If none specified, all will be removed
88
92
  * @param throwNotFoundError Throw error if listener isn't in listeners array - default: false
89
93
  * @returns this, without listener
90
94
  *
@@ -92,7 +96,12 @@ class Event {
92
96
  */
93
97
  off(listener, throwNotFoundError = false) {
94
98
  try {
95
- this._listeners.remove(listener);
99
+ if (!listener)
100
+ this._listeners = new Array();
101
+ else if (!this._listeners.includes(listener))
102
+ return this;
103
+ else
104
+ this._listeners.remove(listener);
96
105
  }
97
106
  catch (err) {
98
107
  if (throwNotFoundError)
@@ -101,4 +110,5 @@ class Event {
101
110
  return this;
102
111
  }
103
112
  }
113
+ exports.Event = Event;
104
114
  exports.default = Event;
@@ -1,12 +1,13 @@
1
- import EventHandler from "../Types/EventHandler";
1
+ import { BaseEvent, EventHandler } from "../../Types/Events";
2
2
  import Event from './Event';
3
3
  /**
4
4
  * Collection of Events from @see EventEmitter
5
5
  * @borrows EventHandler
6
6
  * @borrows Event
7
+ * @borrows BaseEvent
7
8
  */
8
- export declare class EventCollection {
9
- constructor(events?: Map<string, EventHandler[]>);
9
+ export declare class EventCollection<Events extends BaseEvent<string, Array<any>>> {
10
+ constructor(events?: Map<keyof Events, EventHandler<Events>>);
10
11
  /**Amount of events stored*/
11
12
  get size(): number;
12
13
  /**@private Internal event collection*/
@@ -18,20 +19,20 @@ export declare class EventCollection {
18
19
  * @param event Event name
19
20
  * @returns true if event is in collection
20
21
  */
21
- has(event: string): boolean;
22
+ has<EventName extends keyof Events>(event: EventName): boolean;
22
23
  /**
23
24
  * Returns event matching event parameter
24
25
  * @param event Event name
25
26
  * @returns Event
26
27
  */
27
- get<T = any>(event: string): Event<T>;
28
+ get<EventName extends keyof Events>(event: EventName): Event<Events, EventName>;
28
29
  /**
29
30
  * Adds handler to event collection with name as key
30
31
  * @param name Event name
31
32
  * @param handler Handler for event
32
33
  * @returns this
33
34
  */
34
- add(name: string, handler: EventHandler, once?: boolean): this;
35
+ add<EventName extends keyof Events>(name: EventName, handler: EventHandler<Events, keyof Events>, once?: boolean): this;
35
36
  /**
36
37
  * @summary clear(): Clears all events
37
38
  * @summary clear("all", myEventHandler): Removes myEventHandler from all events that have it
@@ -42,8 +43,8 @@ export declare class EventCollection {
42
43
  * @param handler Specific handler to remove. If left blank, all handlers in name will be removed
43
44
  * @returns this
44
45
  */
45
- clear(name?: string | "all", handler?: EventHandler): this;
46
- emit(name: string, ...args: any[]): any[];
46
+ clear<EventName extends keyof Events>(name?: EventName | 'all', handler?: EventHandler): this;
47
+ emit<Event extends keyof Events>(name: Event, ...args: Events[Event]): any[];
47
48
  /**
48
49
  * Limits how many events to accept using EventEmitter#on or EventEmitter#once
49
50
  * @param limit Limit of events to keep
@@ -51,6 +52,6 @@ export declare class EventCollection {
51
52
  *
52
53
  * @throws Unknown event, if event name isn't recognized
53
54
  */
54
- limit(event: 'all' | string, limit: number): this;
55
+ limit<Event extends keyof Events>(eventName: 'all' | Event, limit: number): this | undefined;
55
56
  }
56
57
  export default EventCollection;
@@ -1,17 +1,21 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.EventCollection = void 0;
4
- const Event_1 = require("./Event");
7
+ const Event_1 = __importDefault(require("./Event"));
5
8
  /**
6
9
  * Collection of Events from @see EventEmitter
7
10
  * @borrows EventHandler
8
11
  * @borrows Event
12
+ * @borrows BaseEvent
9
13
  */
10
14
  class EventCollection {
11
15
  constructor(events) {
12
16
  this._events = !events ?
13
17
  new Map() :
14
- events.array().reduce((result, [event, handlers]) => result.set(event, new Event_1.default(event, ...handlers)), new Map());
18
+ events.array().reduce((result, [event, handlers]) => result.set(event, new Event_1.default(event, handlers)), new Map());
15
19
  }
16
20
  /**Amount of events stored*/
17
21
  get size() {
@@ -47,11 +51,8 @@ class EventCollection {
47
51
  if (this._limit > 0 && this._limit + 1 > this._events.size) {
48
52
  throw new Error(`Listener limit, ${this._limit}, reached!`);
49
53
  }
50
- const event = this.has(name) && this.get(name);
51
- if (once)
52
- this._events.set(name, event ? event.once(handler) : new Event_1.default(name).once(handler));
53
- else
54
- this._events.set(name, event ? event.on(handler) : new Event_1.default(name, handler));
54
+ const event = (this.has(name) && this.get(name)) || new Event_1.default(name);
55
+ this._events.set(name, event.on(handler, once));
55
56
  return this;
56
57
  }
57
58
  /**
@@ -65,27 +66,22 @@ class EventCollection {
65
66
  * @returns this
66
67
  */
67
68
  clear(name = 'all', handler) {
68
- //clear(): Clears all events
69
- if (name.toLowerCase() == 'all' && handler == null)
70
- this._events.clear();
71
- //clear("all", myEventHandler): Removes the "myEventHandler" handler from all events
72
- else if (name.toLowerCase() == 'all' && handler)
69
+ const _name = name;
70
+ if (_name.toLowerCase() == 'all' && handler == null)
71
+ this._events.clear(); //clear(): Clears all events
72
+ else if (_name.toLowerCase() == 'all' && handler)
73
73
  this._events = (() => {
74
- const eventNames = this._events.array().map(([name, event]) => event.includes(handler) && name);
75
- this._events.forEach((event, name) => eventNames.includes(name) &&
76
- this._events.set(name, event.off(handler)));
74
+ this._events.forEach(e => e.off(handler));
77
75
  return this._events;
78
76
  })();
79
- //clear("myEvent"): Deletes myEvent from this._events
80
- else if (name.toLowerCase() != "all" && handler == null)
81
- this._events.delete(name);
82
- //clear("myEvent", myEventHandler): Removes the "myEventsHandler" handler from "myEvent"
83
- else if (name.toLowerCase() != 'all' && handler)
84
- this._events.set(name, this.get(name).off(handler));
77
+ else if (_name.toLowerCase() != "all" && handler == null)
78
+ this._events.delete(name); //clear("myEvent"): Clears All handlers tied to "myEvent"
79
+ else if (_name.toLowerCase() != 'all' && handler)
80
+ this._events.set(name, this._events.get(name).off(handler)); //clear("myEvent", myEventHandler): Removes the "myEventsHandler" handler from "myEvent"
85
81
  return this;
86
82
  }
87
83
  emit(name, ...args) {
88
- return this.get(name).emit(...args);
84
+ return this.get(name)?.emit(...args);
89
85
  }
90
86
  /**
91
87
  * Limits how many events to accept using EventEmitter#on or EventEmitter#once
@@ -94,15 +90,18 @@ class EventCollection {
94
90
  *
95
91
  * @throws Unknown event, if event name isn't recognized
96
92
  */
97
- limit(event, limit) {
93
+ limit(eventName, limit) {
98
94
  if (limit <= 0)
99
95
  return;
100
- if (event == 'all')
96
+ if (eventName == 'all') {
101
97
  this._limit = limit;
102
- else if (this.has(event))
103
- this.get(event).limit = limit;
104
- else
105
- throw new Error(`Unknown event, ${event}!`);
98
+ return this;
99
+ }
100
+ const event = this.get(eventName);
101
+ if (!event)
102
+ throw new Error(`Unknown event, ${eventName}!`);
103
+ event.limit = limit;
104
+ this._events.set(eventName, event);
106
105
  return this;
107
106
  }
108
107
  }