@@ -128,7 +128,7 @@ export abstract class OpenFeatureCommonAPI<P extends CommonProvider = CommonProv
128
128
this . _defaultProvider = provider ;
129
129
}
130
130
131
- this . transferListeners ( oldProvider , provider , clientName , clientEmitter ) ;
131
+ this . transferListeners ( oldProvider , provider , clientName ) ;
132
132
133
133
// Do not close a provider that is bound to any client
134
134
if ( ! [ ...this . _clientProviders . values ( ) , this . _defaultProvider ] . includes ( oldProvider ) ) {
@@ -167,22 +167,32 @@ export abstract class OpenFeatureCommonAPI<P extends CommonProvider = CommonProv
167
167
return newEmitter ;
168
168
}
169
169
170
+ private getUnboundEmitters ( ) : OpenFeatureEventEmitter [ ] {
171
+ const namedProviders = [ ...this . _clientProviders . keys ( ) ] ;
172
+ const eventEmitterNames = [ ...this . _clientEvents . keys ( ) ] . filter ( k => ! ! k ) as string [ ] ;
173
+ const unboundEmitterNames = eventEmitterNames . filter ( name => ! namedProviders . includes ( name ) ) ;
174
+ return unboundEmitterNames . map ( name => this . _clientEvents . get ( name ) ! ) ;
175
+ }
176
+
170
177
private transferListeners (
171
178
oldProvider : P ,
172
179
newProvider : P ,
173
- clientName : string | undefined ,
174
- clientEmitter : OpenFeatureEventEmitter
180
+ clientName : string | undefined
175
181
) {
176
182
this . _clientEventHandlers
177
183
. get ( clientName )
178
184
?. forEach ( ( eventHandler ) => oldProvider . events ?. removeHandler ( ...eventHandler ) ) ;
179
185
186
+ const emittersToTransfer = ! ! clientName ? [ this . _clientEvents . get ( clientName ) ! ] : this . getUnboundEmitters ( ) ;
187
+
180
188
// iterate over the event types
181
189
const newClientHandlers = Object . values < ProviderEvents > ( ProviderEvents ) . map < [ ProviderEvents , EventHandler ] > (
182
190
( eventType ) => {
183
191
const handler = async ( details ?: EventDetails ) => {
184
192
// on each event type, fire the associated handlers
185
- clientEmitter . emit ( eventType , { ...details , clientName } ) ;
193
+ emittersToTransfer . forEach ( emitter => {
194
+ emitter . emit ( eventType , { ...details , clientName } ) ;
195
+ } ) ;
186
196
this . _events . emit ( eventType , { ...details , clientName } ) ;
187
197
} ;
188
198
0 commit comments