Skip to content

Commit 4aa9657

Browse files
committed
fix domain context pre set provider issue
Signed-off-by: Michael Beemer <[email protected]>
1 parent 1cb75f5 commit 4aa9657

File tree

3 files changed

+36
-12
lines changed

3 files changed

+36
-12
lines changed

Diff for: packages/client/src/open-feature.ts

-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ export class OpenFeatureAPI extends OpenFeatureCommonAPI<Provider, Hook> impleme
2828
protected _events: GenericEventEmitter<ProviderEvents> = new OpenFeatureEventEmitter();
2929
protected _defaultProvider: Provider = NOOP_PROVIDER;
3030
protected _createEventEmitter = () => new OpenFeatureEventEmitter();
31-
protected _domainScopedContext: Map<string, EvaluationContext> = new Map();
3231

3332
private constructor() {
3433
super('client');

Diff for: packages/client/test/open-feature.spec.ts

+25
Original file line numberDiff line numberDiff line change
@@ -235,5 +235,30 @@ describe('OpenFeature', () => {
235235
await OpenFeature.close();
236236
expect(provider3.onClose).toHaveBeenCalled();
237237
});
238+
239+
describe('context during initialization', () => {
240+
it('should use the context set in the domain', async () => {
241+
const domain = 'test';
242+
await OpenFeature.setContext(domain, { user: 'mike' });
243+
244+
const provider = mockProvider();
245+
const spy = jest.spyOn(provider, 'initialize');
246+
OpenFeature.setProvider(domain, provider);
247+
248+
expect(spy).toHaveBeenCalledWith({ user: 'mike' });
249+
});
250+
251+
it('should use the default context', async () => {
252+
const domain = 'test';
253+
await OpenFeature.setContext(domain, { user: 'mike' });
254+
await OpenFeature.setContext({ name: 'todd' });
255+
256+
const provider = mockProvider();
257+
const spy = jest.spyOn(provider, 'initialize');
258+
OpenFeature.setProvider(provider);
259+
260+
expect(spy).toHaveBeenCalledWith({ name: 'todd' });
261+
});
262+
});
238263
});
239264
});

Diff for: packages/shared/src/open-feature.ts

+11-11
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ export abstract class OpenFeatureCommonAPI<P extends CommonProvider = CommonProv
2929

3030
private readonly _clientEventHandlers: Map<string | undefined, [AnyProviderEvent, EventHandler][]> = new Map();
3131
protected _domainScopedProviders: Map<string, P> = new Map();
32+
protected _domainScopedContext: Map<string, EvaluationContext> = new Map();
3233
protected _clientEvents: Map<string | undefined, GenericEventEmitter<AnyProviderEvent>> = new Map();
3334
protected _runsOn: Paradigm;
3435

@@ -215,7 +216,7 @@ export abstract class OpenFeatureCommonAPI<P extends CommonProvider = CommonProv
215216

216217
if (provider?.status === ProviderStatus.NOT_READY && typeof provider.initialize === 'function') {
217218
initializationPromise = provider
218-
.initialize?.(this._context)
219+
.initialize?.(domain ? this._domainScopedContext.get(domain) ?? this._context : this._context)
219220
?.then(() => {
220221
// fetch the most recent event emitters, some may have been added during init
221222
this.getAssociatedEventEmitters(domain).forEach((emitter) => {
@@ -284,16 +285,15 @@ export abstract class OpenFeatureCommonAPI<P extends CommonProvider = CommonProv
284285
this._clientEvents.set(domain, newEmitter);
285286

286287
const clientProvider = this.getProviderForClient(domain);
287-
Object.values<AllProviderEvents>(AllProviderEvents).forEach(
288-
(eventType) =>
289-
clientProvider.events?.addHandler(eventType, async (details) => {
290-
newEmitter.emit(eventType, {
291-
...details,
292-
clientName: domain,
293-
domain,
294-
providerName: clientProvider.metadata.name,
295-
});
296-
}),
288+
Object.values<AllProviderEvents>(AllProviderEvents).forEach((eventType) =>
289+
clientProvider.events?.addHandler(eventType, async (details) => {
290+
newEmitter.emit(eventType, {
291+
...details,
292+
clientName: domain,
293+
domain,
294+
providerName: clientProvider.metadata.name,
295+
});
296+
}),
297297
);
298298

299299
return newEmitter;

0 commit comments

Comments
 (0)