1- import { Treatment , TreatmentWithConfig } from '../../../../types/splitio' ;
1+ import { FallbackTreatmentConfiguration , Treatment , TreatmentWithConfig } from '../../../../types/splitio' ;
22import { ILogger } from '../../../logger/types' ;
33import { isObject , isString } from '../../../utils/lang' ;
44
@@ -7,59 +7,62 @@ enum FallbackDiscardReason {
77 Treatment = 'Invalid treatment (max 100 chars and must match pattern)' ,
88}
99
10- export class FallbacksSanitizer {
10+ const TREATMENT_PATTERN = / ^ [ 0 - 9 ] + [ . a - z A - Z 0 - 9 _ - ] * $ | ^ [ a - z A - Z ] + [ a - z A - Z 0 - 9 _ - ] * $ / ;
1111
12- private static readonly pattern = / ^ [ 0 - 9 ] + [ . a - z A - Z 0 - 9 _ - ] * $ | ^ [ a - z A - Z ] + [ a - z A - Z 0 - 9 _ - ] * $ / ;
13-
14- private static isValidFlagName ( name : string ) : boolean {
15- return name . length <= 100 && ! name . includes ( ' ' ) ;
16- }
12+ function isValidFlagName ( name : string ) : boolean {
13+ return name . length <= 100 && ! name . includes ( ' ' ) ;
14+ }
1715
18- private static isValidTreatment ( t ?: Treatment | TreatmentWithConfig ) : boolean {
19- const treatment = isObject ( t ) ? ( t as TreatmentWithConfig ) . treatment : t ;
16+ function isValidTreatment ( t ?: Treatment | TreatmentWithConfig ) : boolean {
17+ const treatment = isObject ( t ) ? ( t as TreatmentWithConfig ) . treatment : t ;
2018
21- if ( ! isString ( treatment ) || treatment . length > 100 ) {
22- return false ;
23- }
24- return FallbacksSanitizer . pattern . test ( treatment ) ;
19+ if ( ! isString ( treatment ) || treatment . length > 100 ) {
20+ return false ;
2521 }
22+ return TREATMENT_PATTERN . test ( treatment ) ;
23+ }
2624
27- static sanitizeGlobal ( logger : ILogger , treatment ?: Treatment | TreatmentWithConfig ) : Treatment | TreatmentWithConfig | undefined {
28- if ( ! this . isValidTreatment ( treatment ) ) {
29- logger . error (
30- `Fallback treatments - Discarded fallback: ${ FallbackDiscardReason . Treatment } `
31- ) ;
32- return undefined ;
33- }
34- return treatment ;
25+ function sanitizeGlobal ( logger : ILogger , treatment ?: Treatment | TreatmentWithConfig ) : Treatment | TreatmentWithConfig | undefined {
26+ if ( ! isValidTreatment ( treatment ) ) {
27+ logger . error ( `Fallback treatments - Discarded fallback: ${ FallbackDiscardReason . Treatment } ` ) ;
28+ return undefined ;
3529 }
30+ return treatment ;
31+ }
32+
33+ function sanitizeByFlag (
34+ logger : ILogger ,
35+ byFlagFallbacks : Record < string , Treatment | TreatmentWithConfig > = { }
36+ ) : Record < string , Treatment | TreatmentWithConfig > {
37+ const sanitizedByFlag : Record < string , Treatment | TreatmentWithConfig > = { } ;
3638
37- static sanitizeByFlag (
38- logger : ILogger ,
39- byFlagFallbacks : Record < string , Treatment | TreatmentWithConfig >
40- ) : Record < string , Treatment | TreatmentWithConfig > {
41- const sanitizedByFlag : Record < string , Treatment | TreatmentWithConfig > = { } ;
39+ const entries = Object . keys ( byFlagFallbacks ) ;
40+ entries . forEach ( ( flag ) => {
41+ const t = byFlagFallbacks [ flag ] ;
42+ if ( ! isValidFlagName ( flag ) ) {
43+ logger . error ( `Fallback treatments - Discarded flag '${ flag } ': ${ FallbackDiscardReason . FlagName } ` ) ;
44+ return ;
45+ }
4246
43- const entries = Object . keys ( byFlagFallbacks ) ;
44- entries . forEach ( ( flag ) => {
45- const t = byFlagFallbacks [ flag ] ;
46- if ( ! this . isValidFlagName ( flag ) ) {
47- logger . error (
48- `Fallback treatments - Discarded flag '${ flag } ': ${ FallbackDiscardReason . FlagName } `
49- ) ;
50- return ;
51- }
47+ if ( ! isValidTreatment ( t ) ) {
48+ logger . error ( `Fallback treatments - Discarded treatment for flag '${ flag } ': ${ FallbackDiscardReason . Treatment } ` ) ;
49+ return ;
50+ }
5251
53- if ( ! this . isValidTreatment ( t ) ) {
54- logger . error (
55- `Fallback treatments - Discarded treatment for flag '${ flag } ': ${ FallbackDiscardReason . Treatment } `
56- ) ;
57- return ;
58- }
52+ sanitizedByFlag [ flag ] = t ;
53+ } ) ;
5954
60- sanitizedByFlag [ flag ] = t ;
61- } ) ;
55+ return sanitizedByFlag ;
56+ }
6257
63- return sanitizedByFlag ;
58+ export function sanitizeFallbacks ( logger : ILogger , fallbacks : unknown ) : FallbackTreatmentConfiguration | undefined {
59+ if ( ! isObject ( fallbacks ) ) {
60+ logger . error ( 'Fallback treatments - Discarded fallback: Invalid fallback configuration' ) ;
61+ return ;
6462 }
63+
64+ return {
65+ global : sanitizeGlobal ( logger , ( fallbacks as FallbackTreatmentConfiguration ) . global ) ,
66+ byFlag : sanitizeByFlag ( logger , ( fallbacks as FallbackTreatmentConfiguration ) . byFlag )
67+ } ;
6568}
0 commit comments