1+ import { satisfies as versionSatisfiesRange } from 'semver' ;
2+
13import { objectStorageMethodsFactory , redisClient } from '../redis' ;
24
35/** Style properties names that are likely to be unnecessary for banners are skipped */
@@ -77,12 +79,16 @@ export const stylePropsNames = [
7779] ;
7880export type StylePropName = ( typeof stylePropsNames ) [ number ] ;
7981
80- interface SliseAdStylesOverrides {
82+ interface AdStylesOverrides {
8183 parentDepth : number ;
8284 style : Record < StylePropName , string > ;
8385}
8486
85- export interface SliseAdPlacesRule {
87+ interface ExtVersionConstraints {
88+ extVersion : string ;
89+ }
90+
91+ export interface AdPlacesRule extends ExtVersionConstraints {
8692 urlRegexes : string [ ] ;
8793 selector : {
8894 isMultiple : boolean ;
@@ -91,11 +97,11 @@ export interface SliseAdPlacesRule {
9197 shouldUseDivWrapper : boolean ;
9298 divWrapperStyle ?: Record < StylePropName , string > ;
9399 } ;
94- stylesOverrides ?: SliseAdStylesOverrides [ ] ;
100+ stylesOverrides ?: AdStylesOverrides [ ] ;
95101 shouldHideOriginal ?: boolean ;
96102}
97103
98- export interface PermanentSliseAdPlacesRule {
104+ export interface PermanentAdPlacesRule extends ExtVersionConstraints {
99105 urlRegexes : string [ ] ;
100106 adSelector : {
101107 isMultiple : boolean ;
@@ -115,48 +121,58 @@ export interface PermanentSliseAdPlacesRule {
115121 elementStyle ?: Record < StylePropName , string > ;
116122 divWrapperStyle ?: Record < StylePropName , string > ;
117123 elementToMeasureSelector ?: string ;
118- stylesOverrides ?: SliseAdStylesOverrides [ ] ;
124+ stylesOverrides ?: AdStylesOverrides [ ] ;
119125 shouldHideOriginal ?: boolean ;
120126}
121127
122- export interface SliseAdProvidersByDomainRule {
128+ export interface AdProvidersByDomainRule extends ExtVersionConstraints {
123129 urlRegexes : string [ ] ;
124130 providers : string [ ] ;
125131}
126132
127- const SLISE_AD_PLACES_RULES_KEY = 'slise_ad_places_rules' ;
128- const SLISE_AD_PROVIDERS_BY_SITES_KEY = 'slise_ad_providers_by_sites' ;
129- const SLISE_AD_PROVIDERS_ALL_SITES_KEY = 'slise_ad_providers_all_sites' ;
130- const SLISE_AD_PROVIDERS_LIST_KEY = 'slise_ad_providers_list' ;
131- const PERMANENT_SLISE_AD_PLACES_RULES_KEY = 'permanent_slise_ad_places_rules' ;
133+ export interface AdProviderSelectorsRule extends ExtVersionConstraints {
134+ selectors : string [ ] ;
135+ }
136+
137+ export interface AdProviderForAllSitesRule extends ExtVersionConstraints {
138+ providers : string [ ] ;
139+ }
140+
141+ const AD_PLACES_RULES_KEY = 'ad_places_rules' ;
142+ const AD_PROVIDERS_BY_SITES_KEY = 'ad_providers_by_sites' ;
143+ const AD_PROVIDERS_ALL_SITES_KEY = 'ad_providers_all_sites' ;
144+ const AD_PROVIDERS_LIST_KEY = 'ad_providers_list' ;
145+ const PERMANENT_AD_PLACES_RULES_KEY = 'permanent_ad_places_rules' ;
132146const PERMANENT_NATIVE_AD_PLACES_RULES_KEY = 'permanent_native_ad_places_rules' ;
133147
134- export const sliseAdPlacesRulesMethods = objectStorageMethodsFactory < SliseAdPlacesRule [ ] > (
135- SLISE_AD_PLACES_RULES_KEY ,
136- [ ]
137- ) ;
148+ export const adPlacesRulesMethods = objectStorageMethodsFactory < AdPlacesRule [ ] > ( AD_PLACES_RULES_KEY , [ ] ) ;
138149
139- export const sliseAdProvidersByDomainRulesMethods = objectStorageMethodsFactory < SliseAdProvidersByDomainRule [ ] > (
140- SLISE_AD_PROVIDERS_BY_SITES_KEY ,
150+ export const adProvidersByDomainRulesMethods = objectStorageMethodsFactory < AdProvidersByDomainRule [ ] > (
151+ AD_PROVIDERS_BY_SITES_KEY ,
141152 [ ]
142153) ;
143154
144- export const sliseAdProvidersMethods = objectStorageMethodsFactory < string [ ] > ( SLISE_AD_PROVIDERS_LIST_KEY , [ ] ) ;
155+ export const adProvidersMethods = objectStorageMethodsFactory < AdProviderSelectorsRule [ ] > ( AD_PROVIDERS_LIST_KEY , [ ] ) ;
145156
146- export const permanentSliseAdPlacesMethods = objectStorageMethodsFactory < PermanentSliseAdPlacesRule [ ] > (
147- PERMANENT_SLISE_AD_PLACES_RULES_KEY ,
157+ export const permanentAdPlacesMethods = objectStorageMethodsFactory < PermanentAdPlacesRule [ ] > (
158+ PERMANENT_AD_PLACES_RULES_KEY ,
148159 [ ]
149160) ;
150161
151- export const permanentNativeAdPlacesMethods = objectStorageMethodsFactory < PermanentSliseAdPlacesRule [ ] > (
162+ export const permanentNativeAdPlacesMethods = objectStorageMethodsFactory < PermanentAdPlacesRule [ ] > (
152163 PERMANENT_NATIVE_AD_PLACES_RULES_KEY ,
153164 [ ]
154165) ;
155166
156- export const getSliseAdProvidersForAllSites = async ( ) => redisClient . smembers ( SLISE_AD_PROVIDERS_ALL_SITES_KEY ) ;
167+ export const getAdProvidersForAllSites = async ( ) => redisClient . smembers ( AD_PROVIDERS_ALL_SITES_KEY ) ;
168+
169+ export const addAdProvidersForAllSites = async ( providers : string [ ] ) =>
170+ redisClient . sadd ( AD_PROVIDERS_ALL_SITES_KEY , ...providers ) ;
171+
172+ export const removeAdProvidersForAllSites = async ( providers : string [ ] ) =>
173+ redisClient . srem ( AD_PROVIDERS_ALL_SITES_KEY , ...providers ) ;
157174
158- export const addSliseAdProvidersForAllSites = async ( providers : string [ ] ) =>
159- redisClient . sadd ( SLISE_AD_PROVIDERS_ALL_SITES_KEY , ...providers ) ;
175+ const FALLBACK_VERSION = '0.0.0' ;
160176
161- export const removeSliseAdProvidersForAllSites = async ( providers : string [ ] ) =>
162- redisClient . srem ( SLISE_AD_PROVIDERS_ALL_SITES_KEY , ... providers ) ;
177+ export const filterByVersion = < T extends ExtVersionConstraints > ( rules : T [ ] , version ?: string ) =>
178+ rules . filter ( ( { extVersion } ) => versionSatisfiesRange ( version ?? FALLBACK_VERSION , extVersion ) ) ;
0 commit comments