@@ -154,8 +154,6 @@ function evaluateRuleConditions(
154
154
function evaluateCondition ( subjectAttributes : Record < string , any > , condition : Condition ) : boolean {
155
155
const value = subjectAttributes [ condition . attribute ] ;
156
156
157
- const conditionValueType = targetingRuleConditionValuesTypesFromValues ( condition . value ) ;
158
-
159
157
if ( condition . operator === OperatorType . IS_NULL ) {
160
158
if ( condition . value ) {
161
159
return value === null || value === undefined ;
@@ -166,25 +164,25 @@ function evaluateCondition(subjectAttributes: Record<string, any>, condition: Co
166
164
if ( value != null ) {
167
165
switch ( condition . operator ) {
168
166
case OperatorType . GTE :
169
- if ( conditionValueType === OperatorValueType . SEM_VER ) {
170
- return compareSemVer ( value , condition . value , semverGte ) ;
171
- }
172
- return compareNumber ( value , condition . value , ( a , b ) => a >= b ) ;
173
167
case OperatorType . GT :
174
- if ( conditionValueType === OperatorValueType . SEM_VER ) {
175
- return compareSemVer ( value , condition . value , semverGt ) ;
176
- }
177
- return compareNumber ( value , condition . value , ( a , b ) => a > b ) ;
178
168
case OperatorType . LTE :
179
- if ( conditionValueType === OperatorValueType . SEM_VER ) {
180
- return compareSemVer ( value , condition . value , semverLte ) ;
181
- }
182
- return compareNumber ( value , condition . value , ( a , b ) => a <= b ) ;
183
169
case OperatorType . LT :
170
+ const conditionValueType = targetingRuleConditionValuesTypesFromValues ( condition . value ) ;
184
171
if ( conditionValueType === OperatorValueType . SEM_VER ) {
185
- return compareSemVer ( value , condition . value , semverLt ) ;
172
+ const comparator =
173
+ condition . operator === OperatorType . GTE ? semverGte :
174
+ condition . operator === OperatorType . GT ? semverGt :
175
+ condition . operator === OperatorType . LTE ? semverLte :
176
+ semverLt ;
177
+ return compareSemVer ( value , condition . value , comparator ) ;
186
178
}
187
- return compareNumber ( value , condition . value , ( a , b ) => a < b ) ;
179
+
180
+ const comparator = ( a : number , b : number ) =>
181
+ condition . operator === OperatorType . GTE ? a >= b :
182
+ condition . operator === OperatorType . GT ? a > b :
183
+ condition . operator === OperatorType . LTE ? a <= b :
184
+ a < b ;
185
+ return compareNumber ( value , condition . value , comparator ) ;
188
186
case OperatorType . MATCHES :
189
187
return new RegExp ( condition . value as string ) . test ( value as string ) ;
190
188
case OperatorType . NOT_MATCHES :
@@ -203,7 +201,6 @@ function evaluateObfuscatedCondition(
203
201
condition : Condition ,
204
202
) : boolean {
205
203
const value = hashedSubjectAttributes [ condition . attribute ] ;
206
- const conditionValueType = targetingRuleConditionValuesTypesFromValues ( value ) ;
207
204
208
205
if ( condition . operator === ObfuscatedOperatorType . IS_NULL ) {
209
206
if ( condition . value === getMD5Hash ( 'true' ) ) {
@@ -215,40 +212,29 @@ function evaluateObfuscatedCondition(
215
212
if ( value != null ) {
216
213
switch ( condition . operator ) {
217
214
case ObfuscatedOperatorType . GTE :
218
- if ( conditionValueType === OperatorValueType . SEM_VER ) {
219
- return compareSemVer ( value , decodeBase64 ( condition . value as string ) , semverGte ) ;
220
- }
221
- return compareNumber (
222
- value ,
223
- Number ( decodeBase64 ( condition . value as string ) ) ,
224
- ( a , b ) => a >= b ,
225
- ) ;
226
215
case ObfuscatedOperatorType . GT :
227
- if ( conditionValueType === OperatorValueType . SEM_VER ) {
228
- return compareSemVer ( value , decodeBase64 ( condition . value as string ) , semverGt ) ;
229
- }
230
- return compareNumber (
231
- value ,
232
- Number ( decodeBase64 ( condition . value as string ) ) ,
233
- ( a , b ) => a > b ,
234
- ) ;
235
216
case ObfuscatedOperatorType . LTE :
236
- if ( conditionValueType === OperatorValueType . SEM_VER ) {
237
- return compareSemVer ( value , decodeBase64 ( condition . value as string ) , semverLte ) ;
238
- }
239
- return compareNumber (
240
- value ,
241
- Number ( decodeBase64 ( condition . value as string ) ) ,
242
- ( a , b ) => a <= b ,
243
- ) ;
244
217
case ObfuscatedOperatorType . LT :
218
+ const conditionValue = decodeBase64 ( condition . value ) ;
219
+ const conditionValueType = targetingRuleConditionValuesTypesFromValues ( conditionValue ) ;
245
220
if ( conditionValueType === OperatorValueType . SEM_VER ) {
246
- return compareSemVer ( value , decodeBase64 ( condition . value as string ) , semverLt ) ;
221
+ const comparator =
222
+ condition . operator === ObfuscatedOperatorType . GTE ? semverGte :
223
+ condition . operator === ObfuscatedOperatorType . GT ? semverGt :
224
+ condition . operator === ObfuscatedOperatorType . LTE ? semverLte :
225
+ semverLt ;
226
+ return compareSemVer ( value , conditionValue , comparator ) ;
247
227
}
228
+
229
+ const comparator = ( a : number , b : number ) =>
230
+ condition . operator === ObfuscatedOperatorType . GTE ? a >= b :
231
+ condition . operator === ObfuscatedOperatorType . GT ? a > b :
232
+ condition . operator === ObfuscatedOperatorType . LTE ? a <= b :
233
+ a < b ;
248
234
return compareNumber (
249
235
value ,
250
- Number ( decodeBase64 ( condition . value as string ) ) ,
251
- ( a , b ) => a < b ,
236
+ Number ( conditionValue ) ,
237
+ comparator ,
252
238
) ;
253
239
case ObfuscatedOperatorType . MATCHES :
254
240
return new RegExp ( decodeBase64 ( condition . value as string ) ) . test ( value as string ) ;
0 commit comments