@@ -10,6 +10,7 @@ import { IStorageAsync, IStorageSync } from '../storages/types';
1010import { IEvaluation , IEvaluationResult , ISplitEvaluator } from './types' ;
1111import { ILogger } from '../logger/types' ;
1212import { ENGINE_DEFAULT } from '../logger/constants' ;
13+ import { prerequisitesMatcherContext } from './matchers/prerequisites' ;
1314
1415function evaluationResult ( result : IEvaluation | undefined , defaultTreatment : string ) : IEvaluationResult {
1516 return {
@@ -24,15 +25,16 @@ export function engineParser(log: ILogger, split: ISplit, storage: IStorageSync
2425 const defaultTreatment = isString ( split . defaultTreatment ) ? split . defaultTreatment : CONTROL ;
2526
2627 const evaluator = parser ( log , conditions , storage ) ;
28+ const prerequisiteMatcher = prerequisitesMatcherContext ( prerequisites , storage , log ) ;
2729
2830 return {
2931
3032 getTreatment ( key : SplitIO . SplitKey , attributes : SplitIO . Attributes | undefined , splitEvaluator : ISplitEvaluator ) : MaybeThenable < IEvaluationResult > {
3133
3234 const parsedKey = keyParser ( key ) ;
3335
34- function evaluate ( matchPrerequisites : boolean ) {
35- if ( ! matchPrerequisites ) {
36+ function evaluate ( prerequisitesMet : boolean ) {
37+ if ( ! prerequisitesMet ) {
3638 log . debug ( ENGINE_DEFAULT , [ 'Prerequisite not met' ] ) ;
3739 return {
3840 treatment : defaultTreatment ,
@@ -60,18 +62,11 @@ export function engineParser(log: ILogger, split: ISplit, storage: IStorageSync
6062 } ;
6163 }
6264
63- const matchPrerequisites = prerequisites && prerequisites . length ?
64- prerequisites . map ( prerequisite => {
65- const evaluation = splitEvaluator ( log , key , prerequisite . n , attributes , storage ) ;
66- return thenable ( evaluation ) ?
67- evaluation . then ( evaluation => prerequisite . ts . indexOf ( evaluation . treatment ! ) === - 1 ) :
68- prerequisite . ts . indexOf ( evaluation . treatment ! ) === - 1 ;
69- } ) :
70- true ;
65+ const prerequisitesMet = prerequisiteMatcher ( key , attributes , splitEvaluator ) ;
7166
72- return thenable ( matchPrerequisites ) ?
73- matchPrerequisites . then ( evaluate ) :
74- evaluate ( matchPrerequisites as boolean ) ;
67+ return thenable ( prerequisitesMet ) ?
68+ prerequisitesMet . then ( evaluate ) :
69+ evaluate ( prerequisitesMet ) ;
7570 }
7671 } ;
7772
0 commit comments