@@ -14,6 +14,7 @@ import { isTargetedGroup, isTargetedPercentile, isTargetedUser } from "./common/
1414export class FeatureManager implements IFeatureManager {
1515 #provider: IFeatureFlagProvider ;
1616 #featureFilters: Map < string , IFeatureFilter > = new Map ( ) ;
17+ #onFeatureEvaluated?: ( event : EvaluationResult ) => void ;
1718
1819 constructor ( provider : IFeatureFlagProvider , options ?: FeatureManagerOptions ) {
1920 this . #provider = provider ;
@@ -24,6 +25,8 @@ export class FeatureManager implements IFeatureManager {
2425 for ( const filter of [ ...builtinFilters , ...( options ?. customFilters ?? [ ] ) ] ) {
2526 this . #featureFilters. set ( filter . name , filter ) ;
2627 }
28+
29+ this . #onFeatureEvaluated = options ?. onFeatureEvaluated ;
2730 }
2831
2932 async listFeatureNames ( ) : Promise < string [ ] > {
@@ -164,9 +167,6 @@ export class FeatureManager implements IFeatureManager {
164167 }
165168 }
166169
167- // TODO: send telemetry for variant assignment reason in the future.
168- console . log ( `Variant assignment for feature ${ featureName } : ${ variantDef ?. name ?? "default" } (${ reason } )` ) ;
169-
170170 if ( variantDef ?. configuration_reference !== undefined ) {
171171 console . warn ( "Configuration reference is not supported yet." ) ;
172172 }
@@ -183,12 +183,24 @@ export class FeatureManager implements IFeatureManager {
183183 }
184184 }
185185
186+ if ( this . #onFeatureEvaluated !== undefined ) {
187+ this . #onFeatureEvaluated( result ) ;
188+ }
189+
186190 return result ;
187191 }
188192}
189193
190194interface FeatureManagerOptions {
195+ /**
196+ * The custom filters to be used by the feature manager.
197+ */
191198 customFilters ?: IFeatureFilter [ ] ;
199+
200+ /**
201+ * The callback function that is called when a feature flag is evaluated.
202+ */
203+ onFeatureEvaluated ?: ( event : EvaluationResult ) => void ;
192204}
193205
194206/**
0 commit comments