1
+ type ListenerFunction = ( ...args : unknown [ ] ) => unknown ;
2
+
1
3
class Listener {
2
- public fn : ( ... any ) => any ;
4
+ public fn : ListenerFunction ;
3
5
public once : boolean ;
4
6
5
7
constructor ( fn , once = false ) {
@@ -8,6 +10,37 @@ class Listener {
8
10
}
9
11
}
10
12
13
+ export type PublicKuzzleEvents =
14
+ | "callbackError"
15
+ | "connected"
16
+ | "discarded"
17
+ | "disconnected"
18
+ | "loginAttempt"
19
+ | "logoutAttempt"
20
+ | "networkError"
21
+ | "offlineQueuePush"
22
+ | "offlineQueuePop"
23
+ | "queryError"
24
+ | "reAuthenticated"
25
+ | "reconnected"
26
+ | "reconnectionError"
27
+ | "tokenExpired" ;
28
+
29
+ type PrivateKuzzleEvents =
30
+ | "connect"
31
+ | "reconnect"
32
+ | "disconnect"
33
+ | "offlineQueuePush"
34
+ | "websocketRenewalStart"
35
+ | "websocketRenewalDone" ;
36
+
37
+ /**
38
+ * For internal use only
39
+ */
40
+ export type PrivateAndPublicSDKEvents =
41
+ | PublicKuzzleEvents
42
+ | PrivateKuzzleEvents ;
43
+
11
44
/**
12
45
* @todo proper TS conversion
13
46
*/
@@ -18,23 +51,28 @@ export class KuzzleEventEmitter {
18
51
this . _events = new Map ( ) ;
19
52
}
20
53
21
- private _exists ( listeners , fn ) {
54
+ private _exists ( listeners : Listener [ ] , fn : ListenerFunction ) {
22
55
return Boolean ( listeners . find ( ( listener ) => listener . fn === fn ) ) ;
23
56
}
24
57
25
- listeners ( eventName ) {
58
+ listeners ( eventName : PrivateAndPublicSDKEvents ) {
26
59
if ( ! this . _events . has ( eventName ) ) {
27
60
return [ ] ;
28
61
}
29
62
30
63
return this . _events . get ( eventName ) . map ( ( listener ) => listener . fn ) ;
31
64
}
32
65
33
- addListener ( eventName , listener , once = false ) {
66
+ addListener (
67
+ eventName : PrivateAndPublicSDKEvents ,
68
+ listener : ListenerFunction ,
69
+ once = false
70
+ ) {
34
71
if ( ! eventName || ! listener ) {
35
72
return this ;
36
73
}
37
74
75
+ // TODO: this check could be safely, when TypeScript type will be completed.
38
76
const listenerType = typeof listener ;
39
77
40
78
if ( listenerType !== "function" ) {
@@ -54,7 +92,10 @@ export class KuzzleEventEmitter {
54
92
return this ;
55
93
}
56
94
57
- on ( eventName , listener ) {
95
+ on (
96
+ eventName : PrivateAndPublicSDKEvents ,
97
+ listener : ( args : any ) => void
98
+ ) : this {
58
99
return this . addListener ( eventName , listener ) ;
59
100
}
60
101
@@ -90,7 +131,12 @@ export class KuzzleEventEmitter {
90
131
return this . prependListener ( eventName , listener , true ) ;
91
132
}
92
133
93
- removeListener ( eventName , listener ) {
134
+ removeListener (
135
+ eventName : PrivateAndPublicSDKEvents ,
136
+ listener : ( ) => void
137
+ ) : this;
138
+ removeListener ( eventName : string , listener : ( ) => void ) : this;
139
+ removeListener ( eventName : string , listener : ( ...args : unknown [ ] ) => void ) {
94
140
const listeners = this . _events . get ( eventName ) ;
95
141
96
142
if ( ! listeners || ! listeners . length ) {
@@ -110,7 +156,9 @@ export class KuzzleEventEmitter {
110
156
return this ;
111
157
}
112
158
113
- removeAllListeners ( eventName ?: string ) {
159
+ removeAllListeners ( eventName ?: PrivateAndPublicSDKEvents ) : this;
160
+ removeAllListeners ( eventName ?: string ) : this;
161
+ removeAllListeners ( eventName ?: string ) : this {
114
162
if ( eventName ) {
115
163
this . _events . delete ( eventName ) ;
116
164
} else {
@@ -120,7 +168,10 @@ export class KuzzleEventEmitter {
120
168
return this ;
121
169
}
122
170
123
- emit ( eventName , ...payload ) {
171
+ // TODO: Improve these unknown type someday, to secure all emit events and be sure they match {@link KuzzleEventEmitter.on}.
172
+ emit ( eventName : PrivateAndPublicSDKEvents , ...payload : unknown [ ] ) : boolean ;
173
+ emit ( eventName : string , ...payload : unknown [ ] ) : boolean ;
174
+ emit ( eventName : string , ...payload : unknown [ ] ) : boolean {
124
175
const listeners = this . _events . get ( eventName ) ;
125
176
126
177
if ( listeners === undefined ) {
@@ -148,7 +199,7 @@ export class KuzzleEventEmitter {
148
199
return Array . from ( this . _events . keys ( ) ) ;
149
200
}
150
201
151
- listenerCount ( eventName ) {
202
+ listenerCount ( eventName : PrivateAndPublicSDKEvents ) {
152
203
return (
153
204
( this . _events . has ( eventName ) && this . _events . get ( eventName ) . length ) || 0
154
205
) ;
0 commit comments