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