11import type { ProfileCoreData } from ".." ;
2+ import { match } from "ts-pattern" ;
23
34interface BuildConditionOptions {
45 nativeResourceTypeBehavior : boolean ;
@@ -13,91 +14,57 @@ export function buildCondition(profile: ProfileCoreData, options: BuildCondition
1314 condition . resourceTypes = Object . values ( browser . declarativeNetRequest . ResourceType ) ;
1415 }
1516
16- if ( profile . filters . resourceTypes ) {
17- const enabledResourceTypes = profile . filters . resourceTypes ;
18- if ( enabledResourceTypes && enabledResourceTypes . length > 0 ) {
19- condition . resourceTypes = enabledResourceTypes ;
20- }
21- }
22-
23- if ( profile . filters . excludedResourceTypes ) {
24- const excludedResourceTypes = profile . filters . excludedResourceTypes ;
25- if ( excludedResourceTypes && excludedResourceTypes . length > 0 ) {
26- condition . excludedResourceTypes = excludedResourceTypes ;
27- }
28- }
29-
30- if ( profile . filters . requestMethods ) {
31- const enabledRequestMethods = profile . filters . requestMethods ;
32- if ( enabledRequestMethods && enabledRequestMethods . length > 0 ) {
33- condition . requestMethods = enabledRequestMethods ;
34- }
35- }
36-
37- if ( profile . filters . excludedRequestMethods ) {
38- const excludedRequestMethods = profile . filters . excludedRequestMethods ;
39- if ( excludedRequestMethods && excludedRequestMethods . length > 0 ) {
40- condition . excludedRequestMethods = excludedRequestMethods ;
41- }
42- }
43-
44- if ( profile . filters . urlFilter ?. length ) {
45- const enabledUrlFilter = profile . filters . urlFilter . find ( f => f . enabled ) ;
46- if ( enabledUrlFilter && enabledUrlFilter . value . trim ( ) ) {
47- condition . urlFilter = enabledUrlFilter . value . trim ( ) ;
48- }
49- }
50-
51- if ( profile . filters . regexFilter ?. length ) {
52- const enabledRegexFilter = profile . filters . regexFilter . find ( f => f . enabled ) ;
53- if ( enabledRegexFilter && enabledRegexFilter . value . trim ( ) ) {
54- condition . regexFilter = enabledRegexFilter . value . trim ( ) ;
55- }
56- }
57-
58- if ( profile . filters . requestDomains ?. items . length ) {
59- const enabledDomains = profile . filters . requestDomains . items
60- . filter ( item => item . enabled && item . value . trim ( ) )
61- . map ( item => item . value . trim ( ) ) ;
62- if ( enabledDomains . length > 0 ) {
63- condition . requestDomains = enabledDomains ;
64- }
65- }
66-
67- if ( profile . filters . excludedRequestDomains ?. items . length ) {
68- const excludedDomains = profile . filters . excludedRequestDomains . items
69- . filter ( item => item . enabled && item . value . trim ( ) )
70- . map ( item => item . value . trim ( ) ) ;
71- if ( excludedDomains . length > 0 ) {
72- condition . excludedRequestDomains = excludedDomains ;
73- }
74- }
75-
76- if ( profile . filters . initiatorDomains ?. items . length ) {
77- const initiatorDomains = profile . filters . initiatorDomains . items
78- . filter ( item => item . enabled && item . value . trim ( ) )
79- . map ( item => item . value . trim ( ) ) ;
80- if ( initiatorDomains . length > 0 ) {
81- condition . initiatorDomains = initiatorDomains ;
82- }
83- }
84-
85- if ( profile . filters . excludedInitiatorDomains ?. items . length ) {
86- const excludedInitiatorDomains = profile . filters . excludedInitiatorDomains . items
87- . filter ( item => item . enabled && item . value . trim ( ) )
88- . map ( item => item . value . trim ( ) ) ;
89- if ( excludedInitiatorDomains . length > 0 ) {
90- condition . excludedInitiatorDomains = excludedInitiatorDomains ;
91- }
92- }
93-
94- if ( profile . filters . domainType ?. enabled ) {
95- condition . domainType = profile . filters . domainType . value ;
96- }
97-
98- if ( profile . filters . isUrlFilterCaseSensitive ?. enabled ) {
99- condition . isUrlFilterCaseSensitive = profile . filters . isUrlFilterCaseSensitive . value ;
100- }
17+ ( Object . keys ( profile . filters ) as ( keyof typeof profile . filters ) [ ] ) . forEach ( ( key ) => {
18+ match ( key )
19+ . with ( "resourceTypes" , "excludedResourceTypes" , ( k ) => {
20+ const value = profile . filters [ k ] ;
21+ if ( value && value . length > 0 ) {
22+ condition [ k ] = value ;
23+ }
24+ } )
25+ . with ( "requestMethods" , "excludedRequestMethods" , ( k ) => {
26+ const value = profile . filters [ k ] ;
27+ if ( value && value . length > 0 ) {
28+ condition [ k ] = value ;
29+ }
30+ } )
31+ . with ( "urlFilter" , "regexFilter" , ( k ) => {
32+ const enabledFilter = profile . filters [ k ] ?. find ( f => f . enabled ) ;
33+ if ( enabledFilter && enabledFilter . value . trim ( ) ) {
34+ condition [ k ] = enabledFilter . value . trim ( ) ;
35+ }
36+ } )
37+ . with (
38+ "requestDomains" ,
39+ "excludedRequestDomains" ,
40+ "initiatorDomains" ,
41+ "excludedInitiatorDomains" ,
42+ ( k ) => {
43+ const enabledDomains = profile . filters [ k ] ?. items
44+ . filter ( item => item . enabled && item . value . trim ( ) )
45+ . map ( item => item . value . trim ( ) ) ;
46+ if ( enabledDomains && enabledDomains . length > 0 ) {
47+ condition [ k ] = enabledDomains ;
48+ }
49+ } ,
50+ )
51+ . with ( "domainType" , ( k ) => {
52+ const value = profile . filters [ k ] ;
53+ if ( value ?. enabled ) {
54+ condition [ k ] = value . value ;
55+ }
56+ } )
57+ . with ( "isUrlFilterCaseSensitive" , ( k ) => {
58+ const value = profile . filters [ k ] ;
59+ if ( value ?. enabled ) {
60+ condition [ k ] = value . value ;
61+ }
62+ } )
63+ . with ( "tabIds" , ( ) => {
64+ // Developing
65+ } )
66+ . exhaustive ( ) ;
67+ } ) ;
10168
10269 return condition ;
10370}
0 commit comments