1+ type ListenerFunction = ( ...args : unknown [ ] ) => unknown ;
2+
13class Listener {
2- public fn : ( ... any ) => any ;
4+ public fn : ListenerFunction ;
35 public once : boolean ;
46
57 constructor ( fn , once = false ) {
@@ -8,6 +10,37 @@ class Listener {
810 }
911}
1012
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+
1144/**
1245 * @todo proper TS conversion
1346 */
@@ -18,23 +51,28 @@ export class KuzzleEventEmitter {
1851 this . _events = new Map ( ) ;
1952 }
2053
21- private _exists ( listeners , fn ) {
54+ private _exists ( listeners : Listener [ ] , fn : ListenerFunction ) {
2255 return Boolean ( listeners . find ( ( listener ) => listener . fn === fn ) ) ;
2356 }
2457
25- listeners ( eventName ) {
58+ listeners ( eventName : PrivateAndPublicSDKEvents ) {
2659 if ( ! this . _events . has ( eventName ) ) {
2760 return [ ] ;
2861 }
2962
3063 return this . _events . get ( eventName ) . map ( ( listener ) => listener . fn ) ;
3164 }
3265
33- addListener ( eventName , listener , once = false ) {
66+ addListener (
67+ eventName : PrivateAndPublicSDKEvents ,
68+ listener : ListenerFunction ,
69+ once = false
70+ ) {
3471 if ( ! eventName || ! listener ) {
3572 return this ;
3673 }
3774
75+ // TODO: this check could be safely, when TypeScript type will be completed.
3876 const listenerType = typeof listener ;
3977
4078 if ( listenerType !== "function" ) {
@@ -54,7 +92,10 @@ export class KuzzleEventEmitter {
5492 return this ;
5593 }
5694
57- on ( eventName , listener ) {
95+ on (
96+ eventName : PrivateAndPublicSDKEvents ,
97+ listener : ( args : any ) => void
98+ ) : this {
5899 return this . addListener ( eventName , listener ) ;
59100 }
60101
@@ -90,7 +131,12 @@ export class KuzzleEventEmitter {
90131 return this . prependListener ( eventName , listener , true ) ;
91132 }
92133
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 ) {
94140 const listeners = this . _events . get ( eventName ) ;
95141
96142 if ( ! listeners || ! listeners . length ) {
@@ -110,7 +156,9 @@ export class KuzzleEventEmitter {
110156 return this ;
111157 }
112158
113- removeAllListeners ( eventName ?: string ) {
159+ removeAllListeners ( eventName ?: PrivateAndPublicSDKEvents ) : this;
160+ removeAllListeners ( eventName ?: string ) : this;
161+ removeAllListeners ( eventName ?: string ) : this {
114162 if ( eventName ) {
115163 this . _events . delete ( eventName ) ;
116164 } else {
@@ -120,7 +168,10 @@ export class KuzzleEventEmitter {
120168 return this ;
121169 }
122170
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 {
124175 const listeners = this . _events . get ( eventName ) ;
125176
126177 if ( listeners === undefined ) {
@@ -148,7 +199,7 @@ export class KuzzleEventEmitter {
148199 return Array . from ( this . _events . keys ( ) ) ;
149200 }
150201
151- listenerCount ( eventName ) {
202+ listenerCount ( eventName : PrivateAndPublicSDKEvents ) {
152203 return (
153204 ( this . _events . has ( eventName ) && this . _events . get ( eventName ) . length ) || 0
154205 ) ;
0 commit comments