@@ -7,51 +7,22 @@ import {
77 internal ,
88 LDClientImpl ,
99 LDPluginEnvironmentMetadata ,
10- Platform ,
1110 SafeLogger ,
1211 TypeValidators ,
1312} from '@launchdarkly/js-server-sdk-common' ;
14- import { LDClientCallbacks } from '@launchdarkly/js-server-sdk-common/dist/LDClientImpl' ;
15- import { ServerInternalOptions } from '@launchdarkly/js-server-sdk-common/dist/options/ServerInternalOptions' ;
1613
1714import { BigSegmentStoreStatusProvider , LDClient } from './api' ;
1815import { LDOptions } from './api/LDOptions' ;
1916import { LDPlugin } from './api/LDPlugin' ;
2017import BigSegmentStoreStatusProviderNode from './BigSegmentsStoreStatusProviderNode' ;
21- import { Emits } from './Emits' ;
2218import NodePlatform from './platform/NodePlatform' ;
2319
24- /**
25- * @internal
26- * Extend the base client implementation with an event emitter.
27- *
28- * The LDClientNode implementation must satisfy the LDClient interface,
29- * which is why we extend the base client implementation with an event emitter
30- * and then inherit from that. This adds everything we need to the implementation
31- * to comply with the interface.
32- *
33- * This allows re-use of the `Emits` mixin for this and big segments.
34- */
35- class ClientBaseWithEmitter extends LDClientImpl {
36- emitter : EventEmitter ;
37-
38- constructor (
39- sdkKey : string ,
40- platform : Platform ,
41- options : LDOptions ,
42- callbacks : LDClientCallbacks ,
43- internalOptions ?: ServerInternalOptions ,
44- ) {
45- super ( sdkKey , platform , options , callbacks , internalOptions ) ;
46- this . emitter = new EventEmitter ( ) ;
47- }
48- }
49-
5020/**
5121 * @ignore
5222 */
53- class LDClientNode extends Emits ( ClientBaseWithEmitter ) implements LDClient {
23+ class LDClientNode extends LDClientImpl implements LDClient {
5424 bigSegmentStoreStatusProvider : BigSegmentStoreStatusProvider ;
25+ emitter : EventEmitter ;
5526
5627 constructor ( sdkKey : string , options : LDOptions ) {
5728 const fallbackLogger = new BasicLogger ( {
@@ -109,16 +80,87 @@ class LDClientNode extends Emits(ClientBaseWithEmitter) implements LDClient {
10980 internal . safeGetHooks ( logger , environmentMetadata , plugins ) ,
11081 } ,
11182 ) ;
112- // TODO: It would be good if we could re-arrange this emitter situation so we don't have to
113- // create two emitters. It isn't harmful, but it isn't ideal.
114- this . emitter = emitter ;
11583
84+ this . emitter = emitter ;
11685 this . bigSegmentStoreStatusProvider = new BigSegmentStoreStatusProviderNode (
11786 this . bigSegmentStatusProviderInternal ,
11887 ) as BigSegmentStoreStatusProvider ;
11988
12089 internal . safeRegisterPlugins ( logger , this . environmentMetadata , this , plugins ) ;
12190 }
91+
92+ // #region: EventEmitter
93+
94+ on ( eventName : string | symbol , listener : ( ...args : any [ ] ) => void ) : this {
95+ this . emitter . on ( eventName , listener ) ;
96+ return this ;
97+ }
98+
99+ addListener ( eventName : string | symbol , listener : ( ...args : any [ ] ) => void ) : this {
100+ this . emitter . addListener ( eventName , listener ) ;
101+ return this ;
102+ }
103+
104+ once ( eventName : string | symbol , listener : ( ...args : any [ ] ) => void ) : this {
105+ this . emitter . once ( eventName , listener ) ;
106+ return this ;
107+ }
108+
109+ removeListener ( eventName : string | symbol , listener : ( ...args : any [ ] ) => void ) : this {
110+ this . emitter . removeListener ( eventName , listener ) ;
111+ return this ;
112+ }
113+
114+ off ( eventName : string | symbol , listener : ( ...args : any ) => void ) : this {
115+ this . emitter . off ( eventName , listener ) ;
116+ return this ;
117+ }
118+
119+ removeAllListeners ( event ?: string | symbol ) : this {
120+ this . emitter . removeAllListeners ( event ) ;
121+ return this ;
122+ }
123+
124+ setMaxListeners ( n : number ) : this {
125+ this . emitter . setMaxListeners ( n ) ;
126+ return this ;
127+ }
128+
129+ getMaxListeners ( ) : number {
130+ return this . emitter . getMaxListeners ( ) ;
131+ }
132+
133+ listeners ( eventName : string | symbol ) : Function [ ] {
134+ return this . emitter . listeners ( eventName ) ;
135+ }
136+
137+ rawListeners ( eventName : string | symbol ) : Function [ ] {
138+ return this . emitter . rawListeners ( eventName ) ;
139+ }
140+
141+ emit ( eventName : string | symbol , ...args : any [ ] ) : boolean {
142+ return this . emitter . emit ( eventName , args ) ;
143+ }
144+
145+ listenerCount ( eventName : string | symbol ) : number {
146+ return this . emitter . listenerCount ( eventName ) ;
147+ }
148+
149+ prependListener ( eventName : string | symbol , listener : ( ...args : any [ ] ) => void ) : this {
150+ this . emitter . prependListener ( eventName , listener ) ;
151+ return this ;
152+ }
153+
154+ prependOnceListener ( eventName : string | symbol , listener : ( ...args : any [ ] ) => void ) : this {
155+ this . emitter . prependOnceListener ( eventName , listener ) ;
156+ return this ;
157+ }
158+
159+ eventNames ( ) : ( string | symbol ) [ ] {
160+ return this . emitter . eventNames ( ) ;
161+ }
162+
163+ // #endregion
122164}
123165
124166export default LDClientNode ;
0 commit comments