@@ -21,6 +21,7 @@ import { isSemver } from './util.js';
2121import { EvaluationResultSegments } from '../evaluationResult/models.js' ;
2222import { EvaluationContext } from '../evaluationContext/evaluationContext.types.js' ;
2323import { CONSTANTS } from '../features/constants.js' ;
24+ import { SegmentContext } from '../evaluationResult/evaluationResult.types.js' ;
2425
2526export const all = ( iterable : Array < any > ) => iterable . filter ( e => ! ! e ) . length === iterable . length ;
2627export const any = ( iterable : Array < any > ) => iterable . filter ( e => ! ! e ) . length > 0 ;
@@ -167,49 +168,57 @@ export class SegmentModel {
167168 if ( segmentContext ) {
168169 const segment = new SegmentModel ( parseInt ( segmentContext . key ) , segmentContext . name ) ;
169170 segment . rules = segmentContext . rules . map ( rule => new SegmentRuleModel ( rule . type ) ) ;
170- segment . featureStates =
171- segmentContext . overrides ?. map ( override => {
172- const feature = new FeatureModel (
173- parseInt ( override . feature_key ) ,
174- override . name ,
175- override ?. variants ?. length && override ?. variants ?. length > 1
176- ? CONSTANTS . MULTIVARIATE
177- : CONSTANTS . STANDARD
178- ) ;
179-
180- const featureState = new FeatureStateModel (
181- feature ,
182- override . enabled ,
183- override . priority || 0
184- ) ;
185-
186- if ( override . value !== undefined ) {
187- featureState . setValue ( override . value ) ;
188- }
189-
190- if (
191- override . variants &&
192- override ?. variants ?. length > 1 &&
193- override . variants . length > 0
194- ) {
195- featureState . multivariateFeatureStateValues = override . variants . map (
196- variant =>
197- new MultivariateFeatureStateValueModel (
198- new MultivariateFeatureOptionModel (
199- variant . value ,
200- variant ?. id as number
201- ) ,
202- variant . weight as number ,
203- variant . id as number
204- )
205- ) ;
206- }
207-
208- return featureState ;
209- } ) || [ ] ;
171+ segment . featureStates = SegmentModel . createFeatureStatesFromOverrides (
172+ segmentContext . overrides || [ ]
173+ ) ;
210174 segmentModels . push ( segment ) ;
211175 }
212176 }
177+
213178 return segmentModels ;
214179 }
180+
181+ private static createFeatureStatesFromOverrides (
182+ overrides : SegmentContext [ 'overrides' ]
183+ ) : FeatureStateModel [ ] {
184+ if ( ! overrides ) return [ ] ;
185+ return overrides . map ( override => {
186+ const feature = new FeatureModel (
187+ parseInt ( override . feature_key ) ,
188+ override . name ,
189+ override . variants ?. length && override . variants . length > 0
190+ ? CONSTANTS . MULTIVARIATE
191+ : CONSTANTS . STANDARD
192+ ) ;
193+
194+ const featureState = new FeatureStateModel (
195+ feature ,
196+ override . enabled ,
197+ override . priority || 0
198+ ) ;
199+
200+ if ( override . value !== undefined ) {
201+ featureState . setValue ( override . value ) ;
202+ }
203+
204+ if ( override . variants && override . variants . length > 0 ) {
205+ featureState . multivariateFeatureStateValues = this . createMultivariateValues (
206+ override . variants
207+ ) ;
208+ }
209+
210+ return featureState ;
211+ } ) ;
212+ }
213+
214+ private static createMultivariateValues ( variants : any [ ] ) : MultivariateFeatureStateValueModel [ ] {
215+ return variants . map (
216+ variant =>
217+ new MultivariateFeatureStateValueModel (
218+ new MultivariateFeatureOptionModel ( variant . value , variant . id as number ) ,
219+ variant . weight as number ,
220+ variant . id as number
221+ )
222+ ) ;
223+ }
215224}
0 commit comments