@@ -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,32 @@ 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 :
169
+ case OperatorType . LT : {
170
+ const conditionValueType = targetingRuleConditionValuesTypesFromValues ( condition . value ) ;
179
171
if ( conditionValueType === OperatorValueType . SEM_VER ) {
180
- return compareSemVer ( value , condition . value , semverLte ) ;
181
- }
182
- return compareNumber ( value , condition . value , ( a , b ) => a <= b ) ;
183
- case OperatorType . LT :
184
- if ( conditionValueType === OperatorValueType . SEM_VER ) {
185
- return compareSemVer ( value , condition . value , semverLt ) ;
172
+ const comparator =
173
+ condition . operator === OperatorType . GTE
174
+ ? semverGte
175
+ : condition . operator === OperatorType . GT
176
+ ? semverGt
177
+ : condition . operator === OperatorType . LTE
178
+ ? semverLte
179
+ : semverLt ;
180
+ return compareSemVer ( value , condition . value , comparator ) ;
186
181
}
187
- return compareNumber ( value , condition . value , ( a , b ) => a < b ) ;
182
+
183
+ const comparator = ( a : number , b : number ) =>
184
+ condition . operator === OperatorType . GTE
185
+ ? a >= b
186
+ : condition . operator === OperatorType . GT
187
+ ? a > b
188
+ : condition . operator === OperatorType . LTE
189
+ ? a <= b
190
+ : a < b ;
191
+ return compareNumber ( value , condition . value , comparator ) ;
192
+ }
188
193
case OperatorType . MATCHES :
189
194
return new RegExp ( condition . value as string ) . test ( value as string ) ;
190
195
case OperatorType . NOT_MATCHES :
@@ -203,7 +208,6 @@ function evaluateObfuscatedCondition(
203
208
condition : Condition ,
204
209
) : boolean {
205
210
const value = hashedSubjectAttributes [ condition . attribute ] ;
206
- const conditionValueType = targetingRuleConditionValuesTypesFromValues ( value ) ;
207
211
208
212
if ( condition . operator === ObfuscatedOperatorType . IS_NULL ) {
209
213
if ( condition . value === getMD5Hash ( 'true' ) ) {
@@ -215,41 +219,33 @@ function evaluateObfuscatedCondition(
215
219
if ( value != null ) {
216
220
switch ( condition . operator ) {
217
221
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
222
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
223
case ObfuscatedOperatorType . LTE :
224
+ case ObfuscatedOperatorType . LT : {
225
+ const conditionValue = decodeBase64 ( condition . value ) ;
226
+ const conditionValueType = targetingRuleConditionValuesTypesFromValues ( conditionValue ) ;
236
227
if ( conditionValueType === OperatorValueType . SEM_VER ) {
237
- return compareSemVer ( value , decodeBase64 ( condition . value as string ) , semverLte ) ;
228
+ const comparator =
229
+ condition . operator === ObfuscatedOperatorType . GTE
230
+ ? semverGte
231
+ : condition . operator === ObfuscatedOperatorType . GT
232
+ ? semverGt
233
+ : condition . operator === ObfuscatedOperatorType . LTE
234
+ ? semverLte
235
+ : semverLt ;
236
+ return compareSemVer ( value , conditionValue , comparator ) ;
238
237
}
239
- return compareNumber (
240
- value ,
241
- Number ( decodeBase64 ( condition . value as string ) ) ,
242
- ( a , b ) => a <= b ,
243
- ) ;
244
- case ObfuscatedOperatorType . LT :
245
- if ( conditionValueType === OperatorValueType . SEM_VER ) {
246
- return compareSemVer ( value , decodeBase64 ( condition . value as string ) , semverLt ) ;
247
- }
248
- return compareNumber (
249
- value ,
250
- Number ( decodeBase64 ( condition . value as string ) ) ,
251
- ( a , b ) => a < b ,
252
- ) ;
238
+
239
+ const comparator = ( a : number , b : number ) =>
240
+ condition . operator === ObfuscatedOperatorType . GTE
241
+ ? a >= b
242
+ : condition . operator === ObfuscatedOperatorType . GT
243
+ ? a > b
244
+ : condition . operator === ObfuscatedOperatorType . LTE
245
+ ? a <= b
246
+ : a < b ;
247
+ return compareNumber ( value , Number ( conditionValue ) , comparator ) ;
248
+ }
253
249
case ObfuscatedOperatorType . MATCHES :
254
250
return new RegExp ( decodeBase64 ( condition . value as string ) ) . test ( value as string ) ;
255
251
case ObfuscatedOperatorType . NOT_MATCHES :
0 commit comments