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.
- package/.gitattributes +2 -2
- package/README.md +12 -304
- package/Time.xlsx +0 -0
- package/dist/Classes/{Event.d.ts → Events/Event.d.ts} +14 -11
- package/dist/Classes/{Event.js → Events/Event.js} +16 -6
- package/dist/Classes/{EventCollection.d.ts → Events/EventCollection.d.ts} +10 -9
- package/dist/Classes/{EventCollection.js → Events/EventCollection.js} +27 -28
- package/dist/Classes/{EventEmitter.d.ts → Events/EventEmitter.d.ts} +11 -8
- package/dist/Classes/{EventEmitter.js → Events/EventEmitter.js} +7 -1
- package/dist/Classes/Events/index.d.ts +3 -0
- package/dist/Classes/Events/index.js +19 -0
- package/dist/Classes/Time/Date.d.ts +147 -0
- package/dist/Classes/Time/Date.js +238 -0
- package/dist/Classes/Time/Time.d.ts +65 -0
- package/dist/Classes/Time/Time.js +117 -0
- package/dist/Classes/Time/TimeProperties.d.ts +3 -0
- package/dist/{Types/EventHandler.js → Classes/Time/TimeProperties.js} +0 -0
- package/dist/Classes/Time/TimeSpan.d.ts +123 -0
- package/dist/Classes/Time/TimeSpan.js +179 -0
- package/dist/Classes/Time/index.d.ts +4 -0
- package/dist/Classes/Time/index.js +20 -0
- package/dist/Classes/index.d.ts +2 -2
- package/dist/Classes/index.js +7 -3
- package/dist/Extensions/Array.d.ts +31 -0
- package/dist/Extensions/Array.js +26 -0
- package/dist/Extensions/Map.d.ts +38 -0
- package/dist/Extensions/Map.js +31 -0
- package/dist/Extensions/Object.d.ts +16 -0
- package/dist/Extensions/Object.js +8 -0
- package/dist/Extensions/String.d.ts +26 -0
- package/dist/Extensions/String.js +17 -0
- package/dist/Extensions/index.d.ts +29 -0
- package/dist/Extensions/index.js +71 -0
- package/dist/Functions/GetCSSProperty.d.ts +15 -0
- package/dist/Functions/GetCSSProperty.js +26 -0
- package/dist/Functions/HTMLEvent.d.ts +11 -0
- package/dist/Functions/HTMLEvent.js +14 -0
- package/dist/Functions/SetNavigationSelected.js +2 -0
- package/dist/Functions/index.d.ts +2 -0
- package/dist/Functions/index.js +7 -1
- package/dist/Interfaces/ElementOptions.d.ts +12 -18
- package/dist/Interfaces/IReplacement.d.ts +3 -2
- package/dist/Interfaces/index.js +5 -1
- package/dist/Types/BetterTypes.d.ts +9 -0
- package/dist/Types/{IElement.js → BetterTypes.js} +0 -0
- package/dist/Types/Date.d.ts +6 -0
- package/dist/Types/{StringRegex.js → Date.js} +0 -0
- package/dist/Types/Events.d.ts +10 -0
- package/dist/Types/Events.js +2 -0
- package/dist/Types/PropertiesWith.d.ts +13 -0
- package/dist/Types/PropertiesWith.js +2 -0
- package/dist/Types/TransformTypes.d.ts +13 -0
- package/dist/Types/TransformTypes.js +2 -0
- package/dist/Types/index.d.ts +31 -3
- package/dist/Types/index.js +10 -4
- package/dist/index.d.ts +5 -9
- package/dist/index.js +19 -8
- package/docs/Classes.md +455 -0
- package/docs/Extensions.md +146 -0
- package/docs/Functions.md +53 -0
- package/docs/Interfaces.md +34 -0
- package/docs/Types.md +129 -0
- package/docs/index.md +29 -0
- package/package.json +22 -21
- package/src/Classes/{Event.ts → Events/Event.ts} +31 -20
- package/src/Classes/Events/EventCollection.ts +109 -0
- package/src/Classes/{EventEmitter.ts → Events/EventEmitter.ts} +16 -13
- package/src/Classes/Events/index.ts +3 -0
- package/src/Classes/Time/Date.ts +264 -0
- package/src/Classes/Time/Time.ts +134 -0
- package/src/Classes/Time/TimeProperties.ts +3 -0
- package/src/Classes/Time/TimeSpan.ts +195 -0
- package/src/Classes/Time/index.ts +4 -0
- package/src/Classes/index.ts +2 -2
- package/src/Extensions/Array.ts +57 -0
- package/src/Extensions/Map.ts +73 -0
- package/src/Extensions/Object.ts +25 -0
- package/src/Extensions/String.ts +43 -0
- package/src/Extensions/index.ts +83 -0
- package/src/Functions/GetCSSProperty.ts +27 -0
- package/src/Functions/HTMLEvent.ts +13 -0
- package/src/Functions/SetNavigationSelected.ts +1 -0
- package/src/Functions/index.ts +3 -1
- package/src/Interfaces/ElementOptions.ts +18 -16
- package/src/Interfaces/IReplacement.ts +4 -3
- package/src/Types/BetterTypes.ts +10 -0
- package/src/Types/Date.ts +7 -0
- package/src/Types/Events.ts +15 -0
- package/src/Types/PropertiesWith.ts +14 -0
- package/src/Types/TransformTypes.ts +18 -0
- package/src/Types/index.ts +36 -3
- package/src/index.ts +5 -13
- package/tsconfig.json +99 -7
- package/dist/Extensions.d.ts +0 -81
- package/dist/Extensions.js +0 -80
- package/dist/Types/EventHandler.d.ts +0 -6
- package/dist/Types/IElement.d.ts +0 -9
- package/dist/Types/StringRegex.d.ts +0 -2
- package/src/Classes/EventCollection.ts +0 -115
- package/src/Extensions.ts +0 -179
- package/src/Types/EventHandler.ts +0 -6
- package/src/Types/IElement.ts +0 -9
- 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
|
-
|
|
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
|
-
|
|
320
|
-
|
|
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 "
|
|
2
|
-
/**
|
|
3
|
-
|
|
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:
|
|
11
|
+
constructor(name: Name, ...listeners: Array<EventHandler<Events, Name>>);
|
|
10
12
|
/**Name of event*/
|
|
11
|
-
name:
|
|
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:
|
|
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<
|
|
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<
|
|
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<
|
|
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
|
|
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
|
-
|
|
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
|
|
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 = (...
|
|
70
|
-
const result = listener(...
|
|
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
|
-
|
|
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 "
|
|
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<
|
|
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:
|
|
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<
|
|
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:
|
|
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?:
|
|
46
|
-
emit(name:
|
|
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(
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
69
|
-
if (
|
|
70
|
-
this._events.clear();
|
|
71
|
-
|
|
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
|
-
|
|
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
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
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)
|
|
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(
|
|
93
|
+
limit(eventName, limit) {
|
|
98
94
|
if (limit <= 0)
|
|
99
95
|
return;
|
|
100
|
-
if (
|
|
96
|
+
if (eventName == 'all') {
|
|
101
97
|
this._limit = limit;
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
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
|
}
|