15
15
*/
16
16
17
17
import { RdsUrlType } from "./rds_url_type" ;
18
+ import { equalsIgnoreCase } from "./utils" ;
18
19
19
20
export class RdsUtils {
20
21
// Aurora DB clusters support different endpoints. More details about Aurora RDS endpoints
@@ -53,27 +54,49 @@ export class RdsUtils {
53
54
//
54
55
// Instance Endpoint: <instance-name>.<xyz>.rds.<aws-region>.amazonaws.com.cn
55
56
// Example: test-postgres-instance-1.123456789012.rds.cn-northwest-1.amazonaws.com.cn
57
+ //
58
+ //
59
+ // Governmental endpoints
60
+ // https://aws.amazon.com/compliance/fips/#FIPS_Endpoints_by_Service
61
+ // https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/model/Region.html
56
62
57
63
private static readonly AURORA_DNS_PATTERN =
58
- / (?< instance > .+ ) \. (?< dns > p r o x y - | c l u s t e r - | c l u s t e r - r o - | c l u s t e r - c u s t o m - ) ? (?< domain > [ a - z A - Z 0 - 9 ] + \. (?< region > [ a - z A - Z 0 - 9 - ] + ) \. r d s \. a m a z o n a w s \. c o m ) / i;
59
- private static readonly AURORA_INSTANCE_PATTERN = / (?< instance > .+ ) \. (?< domain > [ a - z A - Z 0 - 9 ] + \. (?< region > [ a - z A - Z 0 - 9 - ] + ) \. r d s \. a m a z o n a w s \. c o m ) / i;
64
+ / ^ (?< instance > .+ ) \. (?< dns > p r o x y - | c l u s t e r - | c l u s t e r - r o - | c l u s t e r - c u s t o m - ) ? (?< domain > [ a - z A - Z 0 - 9 ] + \. (?< region > [ a - z A - Z 0 - 9 - ] + ) \. r d s \. a m a z o n a w s \. c o m ) $ / i;
65
+ private static readonly AURORA_INSTANCE_PATTERN = / ^ (?< instance > .+ ) \. (?< domain > [ a - z A - Z 0 - 9 ] + \. (?< region > [ a - z A - Z 0 - 9 - ] + ) \. r d s \. a m a z o n a w s \. c o m ) $ / i;
60
66
private static readonly AURORA_CLUSTER_PATTERN =
61
- / (?< instance > .+ ) \. (?< dns > c l u s t e r - | c l u s t e r - r o - ) + (?< domain > [ a - z A - Z 0 - 9 ] + \. (?< region > [ a - z A - Z 0 - 9 - ] + ) \. r d s \. a m a z o n a w s \. c o m ) / i;
67
+ / ^ (?< instance > .+ ) \. (?< dns > c l u s t e r - | c l u s t e r - r o - ) + (?< domain > [ a - z A - Z 0 - 9 ] + \. (?< region > [ a - z A - Z 0 - 9 - ] + ) \. r d s \. a m a z o n a w s \. c o m ) $ / i;
62
68
private static readonly AURORA_CUSTOM_CLUSTER_PATTERN =
63
- / (?< instance > .+ ) \. (?< dns > c l u s t e r - c u s t o m - ) + (?< domain > [ a - z A - Z 0 - 9 ] + \. (?< region > [ a - z A - Z 0 - 9 - ] + ) \. r d s \. a m a z o n a w s \. c o m ) / i;
69
+ / ^ (?< instance > .+ ) \. (?< dns > c l u s t e r - c u s t o m - ) + (?< domain > [ a - z A - Z 0 - 9 ] + \. (?< region > [ a - z A - Z 0 - 9 - ] + ) \. r d s \. a m a z o n a w s \. c o m ) $ / i;
64
70
private static readonly AURORA_PROXY_DNS_PATTERN =
65
- / (?< instance > .+ ) \. (?< dns > p r o x y - ) + (?< domain > [ a - z A - Z 0 - 9 ] + \. (?< region > [ a - z A - Z 0 - 9 - ] + ) \. r d s \. a m a z o n a w s \. c o m ) / i;
71
+ / ^ (?< instance > .+ ) \. (?< dns > p r o x y - ) + (?< domain > [ a - z A - Z 0 - 9 ] + \. (?< region > [ a - z A - Z 0 - 9 - ] + ) \. r d s \. a m a z o n a w s \. c o m ) $ / i;
66
72
private static readonly AURORA_CHINA_DNS_PATTERN =
67
- / (?< instance > .+ ) \. (?< dns > p r o x y - | c l u s t e r - | c l u s t e r - r o - | c l u s t e r - c u s t o m - ) ? (?< domain > [ a - z A - Z 0 - 9 ] + \. r d s \. (?< region > [ a - z A - Z 0 - 9 - ] + ) \. a m a z o n a w s \. c o m \. c n ) / i;
73
+ / ^ (?< instance > .+ ) \. (?< dns > p r o x y - | c l u s t e r - | c l u s t e r - r o - | c l u s t e r - c u s t o m - ) ? (?< domain > [ a - z A - Z 0 - 9 ] + \. r d s \. (?< region > [ a - z A - Z 0 - 9 - ] + ) \. a m a z o n a w s \. c o m \. c n ) $ / i;
74
+ private static readonly AURORA_OLD_CHINA_DNS_PATTERN =
75
+ / ^ (?< instance > .+ ) \. (?< dns > p r o x y - | c l u s t e r - | c l u s t e r - r o - | c l u s t e r - c u s t o m - ) ? (?< domain > [ a - z A - Z 0 - 9 ] + \. (?< region > [ a - z A - Z 0 - 9 - ] + ) \. r d s \. a m a z o n a w s \. c o m \. c n ) $ / i;
68
76
private static readonly AURORA_CHINA_INSTANCE_PATTERN =
69
- / (?< instance > .+ ) \. (?< domain > [ a - z A - Z 0 - 9 ] + \. (?< region > [ a - z A - Z 0 - 9 - ] + ) \. r d s \. a m a z o n a w s \. c o m \. c n ) / i;
77
+ / ^ (?< instance > .+ ) \. (?< domain > [ a - z A - Z 0 - 9 ] + \. r d s \. (?< region > [ a - z A - Z 0 - 9 - ] + ) \. a m a z o n a w s \. c o m \. c n ) $ / i;
78
+ private static readonly AURORA_OLD_CHINA_INSTANCE_PATTERN =
79
+ / ^ (?< instance > .+ ) \. (?< domain > [ a - z A - Z 0 - 9 ] + \. (?< region > [ a - z A - Z 0 - 9 - ] + ) \. r d s \. a m a z o n a w s \. c o m \. c n ) $ / i;
70
80
private static readonly AURORA_CHINA_CLUSTER_PATTERN =
71
- / (?< instance > .+ ) \. (?< dns > c l u s t e r - | c l u s t e r - r o - ) + (?< domain > [ a - z A - Z 0 - 9 ] + \. r d s \. (?< region > [ a - z A - Z 0 - 9 - ] + ) \. a m a z o n a w s \. c o m \. c n ) / i;
81
+ / ^ (?< instance > .+ ) \. (?< dns > c l u s t e r - | c l u s t e r - r o - ) + (?< domain > [ a - z A - Z 0 - 9 ] + \. r d s \. (?< region > [ a - z A - Z 0 - 9 - ] + ) \. a m a z o n a w s \. c o m \. c n ) $ / i;
82
+ private static readonly AURORA_OLD_CHINA_CLUSTER_PATTERN =
83
+ / ^ (?< instance > .+ ) \. (?< dns > c l u s t e r - | c l u s t e r - r o - ) + (?< domain > [ a - z A - Z 0 - 9 ] + \. (?< region > [ a - z A - Z 0 - 9 - ] + ) \. r d s \. a m a z o n a w s \. c o m \. c n ) $ / i;
72
84
private static readonly AURORA_CHINA_CUSTOM_CLUSTER_PATTERN =
73
- / (?< instance > .+ ) \. (?< dns > c l u s t e r - c u s t o m - ) + (?< domain > [ a - z A - Z 0 - 9 ] + \. r d s \. (?< region > [ a - z A - Z 0 - 9 - ] + ) \. a m a z o n a w s \. c o m \. c n ) / i;
85
+ / ^ (?< instance > .+ ) \. (?< dns > c l u s t e r - c u s t o m - ) + (?< domain > [ a - z A - Z 0 - 9 ] + \. r d s \. (?< region > [ a - z A - Z 0 - 9 - ] + ) \. a m a z o n a w s \. c o m \. c n ) $ / i;
86
+ private static readonly AURORA_OLD_CHINA_CUSTOM_CLUSTER_PATTERN =
87
+ / ^ (?< instance > .+ ) \. (?< dns > c l u s t e r - c u s t o m - ) + (?< domain > [ a - z A - Z 0 - 9 ] + \. (?< region > [ a - z A - Z 0 - 9 - ] + ) \. r d s \. a m a z o n a w s \. c o m \. c n ) $ / i;
74
88
private static readonly AURORA_CHINA_PROXY_DNS_PATTERN =
75
- / (?< instance > .+ ) \. (?< dns > p r o x y - ) + (?< domain > [ a - z A - Z 0 - 9 ] + \. r d s \. (?< region > [ a - z A - Z 0 - 9 - ] ) + \. a m a z o n a w s \. c o m \. c n ) / i;
76
- private static readonly ELB_PATTERN = / (?< instance > .+ ) \. e l b \. ( (?< region > [ a - z A - Z 0 - 9 - ] + ) \. a m a z o n a w s \. c o m ) / i;
89
+ / ^ (?< instance > .+ ) \. (?< dns > p r o x y - ) + (?< domain > [ a - z A - Z 0 - 9 ] + \. r d s \. (?< region > [ a - z A - Z 0 - 9 - ] ) + \. a m a z o n a w s \. c o m \. c n ) $ / i;
90
+ private static readonly AURORA_OLD_CHINA_PROXY_DNS_PATTERN =
91
+ / ^ (?< instance > .+ ) \. (?< dns > p r o x y - ) + (?< domain > [ a - z A - Z 0 - 9 ] + \. (?< region > [ a - z A - Z 0 - 9 - ] ) + \. r d s \. a m a z o n a w s \. c o m \. c n ) $ / i;
92
+
93
+ private static readonly AURORA_GOV_DNS_PATTERN =
94
+ / ^ (?< instance > .+ ) \. (?< dns > p r o x y - | c l u s t e r - | c l u s t e r - r o - | c l u s t e r - c u s t o m - | s h a r d g r p - ) ? (?< domain > [ a - z A - Z 0 - 9 ] + \. r d s \. (?< region > [ a - z A - Z 0 - 9 - ] + ) \. ( a m a z o n a w s \. c o m | c 2 s \. i c \. g o v | s c 2 s \. s g o v \. g o v ) ) $ / i;
95
+
96
+ private static readonly AURORA_GOV_CLUSTER_PATTERN =
97
+ / ^ (?< instance > .+ ) \. (?< dns > c l u s t e r - | c l u s t e r - r o - ) + (?< domain > [ a - z A - Z 0 - 9 ] + \. r d s \. (?< region > [ a - z A - Z 0 - 9 - ] + ) \. ( a m a z o n a w s \. c o m | c 2 s \. i c \. g o v | s c 2 s \. s g o v \. g o v ) ) $ / i;
98
+
99
+ private static readonly ELB_PATTERN = / ^ (?< instance > .+ ) \. e l b \. ( (?< region > [ a - z A - Z 0 - 9 - ] + ) \. a m a z o n a w s \. c o m ) $ / i;
77
100
private static readonly IP_V4 =
78
101
/ ^ ( ( [ 1 - 9 ] | [ 1 - 9 ] [ 0 - 9 ] | 1 [ 0 - 9 ] { 2 } | 2 [ 0 - 4 ] [ 0 - 9 ] | 2 5 [ 0 - 5 ] ) \. ) { 1 } ( ( [ 0 - 9 ] | [ 1 - 9 ] [ 0 - 9 ] | 1 [ 0 - 9 ] { 2 } | 2 [ 0 - 4 ] [ 0 - 9 ] | 2 5 [ 0 - 5 ] ) \. ) { 2 } ( [ 0 - 9 ] | [ 1 - 9 ] [ 0 - 9 ] | 1 [ 0 - 9 ] { 2 } | 2 [ 0 - 4 ] [ 0 - 9 ] | 2 5 [ 0 - 5 ] ) $ / i;
79
102
private static readonly IP_V6 = / ^ [ 0 - 9 a - f A - F ] { 1 , 4 } ( : [ 0 - 9 a - f A - F ] { 1 , 4 } ) { 7 } $ / i;
@@ -85,109 +108,136 @@ export class RdsUtils {
85
108
static readonly DOMAIN_GROUP = "domain" ;
86
109
static readonly REGION_GROUP = "region" ;
87
110
88
- public isRdsClusterDns ( host : string ) : boolean | null {
89
- return host . match ( RdsUtils . AURORA_CLUSTER_PATTERN ) != null || host . match ( RdsUtils . AURORA_CHINA_CLUSTER_PATTERN ) != null ;
111
+ private static readonly cachedPatterns = new Map ( ) ;
112
+ private static readonly cachedDnsPatterns = new Map ( ) ;
113
+
114
+ public isRdsClusterDns ( host : string ) : boolean {
115
+ const dnsGroup = this . getDnsGroup ( host ) ;
116
+ return equalsIgnoreCase ( dnsGroup , "cluster-" ) || equalsIgnoreCase ( dnsGroup , "cluster-ro-" ) ;
90
117
}
91
118
92
119
public isRdsCustomClusterDns ( host : string ) : boolean {
93
- return host . match ( RdsUtils . AURORA_CUSTOM_CLUSTER_PATTERN ) != null || host . match ( RdsUtils . AURORA_CHINA_CUSTOM_CLUSTER_PATTERN ) != null ;
120
+ const dnsGroup = this . getDnsGroup ( host ) ;
121
+ return equalsIgnoreCase ( dnsGroup , "cluster-custom-" ) ;
94
122
}
95
123
96
124
public isRdsDns ( host : string ) {
97
- return host . match ( RdsUtils . AURORA_DNS_PATTERN ) || host . match ( RdsUtils . AURORA_CHINA_DNS_PATTERN ) ;
125
+ const matcher = this . cacheMatcher (
126
+ host ,
127
+ RdsUtils . AURORA_DNS_PATTERN ,
128
+ RdsUtils . AURORA_CHINA_DNS_PATTERN ,
129
+ RdsUtils . AURORA_OLD_CHINA_DNS_PATTERN ,
130
+ RdsUtils . AURORA_GOV_DNS_PATTERN
131
+ ) ;
132
+ const group = this . getRegexGroup ( matcher , RdsUtils . DNS_GROUP ) ;
133
+
134
+ if ( group ) {
135
+ RdsUtils . cachedDnsPatterns . set ( host , group ) ;
136
+ }
137
+
138
+ return matcher != null ;
98
139
}
99
140
100
141
public isRdsInstance ( host : string ) : boolean {
101
- return host . match ( RdsUtils . AURORA_INSTANCE_PATTERN ) !== null || host . match ( RdsUtils . AURORA_CHINA_INSTANCE_PATTERN ) !== null ;
142
+ return ! this . getDnsGroup ( host ) && this . isRdsDns ( host ) ;
102
143
}
103
144
104
145
isRdsProxyDns ( host : string ) {
105
- return host . match ( RdsUtils . AURORA_PROXY_DNS_PATTERN ) || host . match ( RdsUtils . AURORA_CHINA_PROXY_DNS_PATTERN ) ;
106
- }
107
-
108
- public isElbUrl ( host : string ) {
109
- return host . match ( RdsUtils . ELB_PATTERN ) ;
146
+ const dnsGroup = this . getDnsGroup ( host ) ;
147
+ return dnsGroup && dnsGroup . startsWith ( "proxy-" ) ;
110
148
}
111
149
112
150
public getRdsInstanceId ( host : string ) {
113
151
if ( ! host ) {
114
152
return null ;
115
153
}
116
154
117
- const instanceId = ( host . match ( RdsUtils . AURORA_INSTANCE_PATTERN ) || host . match ( RdsUtils . AURORA_CHINA_INSTANCE_PATTERN ) ) ?. groups ?. [
118
- RdsUtils . INSTANCE_GROUP
119
- ] ;
120
- return instanceId ? instanceId : null ;
155
+ const matcher = this . cacheMatcher (
156
+ host ,
157
+ RdsUtils . AURORA_DNS_PATTERN ,
158
+ RdsUtils . AURORA_CHINA_DNS_PATTERN ,
159
+ RdsUtils . AURORA_OLD_CHINA_DNS_PATTERN ,
160
+ RdsUtils . AURORA_GOV_DNS_PATTERN
161
+ ) ;
162
+ if ( this . getRegexGroup ( matcher , RdsUtils . DNS_GROUP ) ) {
163
+ return this . getRegexGroup ( matcher , RdsUtils . INSTANCE_GROUP ) ;
164
+ }
165
+
166
+ return null ;
121
167
}
122
168
123
169
public getRdsInstanceHostPattern ( host : string ) : string {
124
- if ( host == null ) {
170
+ if ( ! host ) {
125
171
return "?" ;
126
172
}
127
173
128
- const matcher = host . match ( RdsUtils . AURORA_DNS_PATTERN ) ;
129
- if ( matcher !== null && matcher . groups !== undefined ) {
130
- return "?." + matcher . groups [ RdsUtils . DOMAIN_GROUP ] ;
131
- }
132
- const chinaMatcher = host . match ( RdsUtils . AURORA_CHINA_DNS_PATTERN ) ;
133
- if ( chinaMatcher !== null && chinaMatcher . groups !== undefined ) {
134
- return "?." + chinaMatcher . groups [ RdsUtils . DOMAIN_GROUP ] ;
135
- }
136
- return "?" ;
174
+ const matcher = this . cacheMatcher (
175
+ host ,
176
+ RdsUtils . AURORA_DNS_PATTERN ,
177
+ RdsUtils . AURORA_CHINA_DNS_PATTERN ,
178
+ RdsUtils . AURORA_OLD_CHINA_DNS_PATTERN ,
179
+ RdsUtils . AURORA_GOV_DNS_PATTERN
180
+ ) ;
181
+ const group = this . getRegexGroup ( matcher , RdsUtils . DOMAIN_GROUP ) ;
182
+ return group ? `?. ${ group } ` : "?" ;
137
183
}
138
184
139
185
public getRdsRegion ( host : string ) : string | null {
140
- const matcher = host . match ( RdsUtils . AURORA_DNS_PATTERN ) ;
141
- if ( matcher !== null && matcher . groups !== undefined ) {
142
- return matcher . groups [ RdsUtils . REGION_GROUP ] ;
186
+ if ( ! host ) {
187
+ return null ;
143
188
}
144
- const chinaMatcher = host . match ( RdsUtils . AURORA_CHINA_DNS_PATTERN ) ;
145
- if ( chinaMatcher !== null && chinaMatcher . groups !== undefined ) {
146
- return chinaMatcher . groups [ RdsUtils . REGION_GROUP ] ;
189
+
190
+ const matcher = this . cacheMatcher (
191
+ host ,
192
+ RdsUtils . AURORA_DNS_PATTERN ,
193
+ RdsUtils . AURORA_CHINA_DNS_PATTERN ,
194
+ RdsUtils . AURORA_OLD_CHINA_DNS_PATTERN ,
195
+ RdsUtils . AURORA_GOV_DNS_PATTERN
196
+ ) ;
197
+
198
+ const group = this . getRegexGroup ( matcher , RdsUtils . REGION_GROUP ) ;
199
+ if ( group ) {
200
+ return group ;
147
201
}
202
+
148
203
const elbMatcher = host . match ( RdsUtils . ELB_PATTERN ) ;
149
- if ( elbMatcher !== null && elbMatcher . groups !== undefined ) {
150
- return elbMatcher . groups [ RdsUtils . REGION_GROUP ] ;
204
+ if ( elbMatcher && elbMatcher . length > 0 ) {
205
+ return this . getRegexGroup ( elbMatcher , RdsUtils . REGION_GROUP ) ;
151
206
}
207
+
152
208
return null ;
153
209
}
154
210
155
- public isWriterClusterDns ( host : string ) {
156
- if ( host === undefined ) {
157
- return false ;
158
- }
159
-
160
- const matcher = host . match ( RdsUtils . AURORA_CLUSTER_PATTERN ) ;
161
- if ( matcher !== null && matcher . groups !== undefined ) {
162
- return "cluster-" === matcher . groups [ RdsUtils . DNS_GROUP ] ;
163
- }
164
- const chinaMatcher = host . match ( RdsUtils . AURORA_CHINA_CLUSTER_PATTERN ) ;
165
- if ( chinaMatcher !== null && chinaMatcher . groups !== undefined ) {
166
- return "cluster-" == chinaMatcher . groups [ RdsUtils . DNS_GROUP ] ;
167
- }
168
- return false ;
211
+ public isWriterClusterDns ( host : string ) : boolean {
212
+ const dnsGroup = this . getDnsGroup ( host ) ;
213
+ return equalsIgnoreCase ( dnsGroup , "cluster-" ) ;
169
214
}
170
215
171
216
public isReaderClusterDns ( host : string ) : boolean {
172
- const matcher = host . match ( RdsUtils . AURORA_CLUSTER_PATTERN ) ;
173
- if ( matcher !== null && matcher . groups !== undefined ) {
174
- return "cluster-ro-" == matcher . groups [ RdsUtils . DNS_GROUP ] ;
175
- }
176
- const chinaMatcher = host . match ( RdsUtils . AURORA_CHINA_CLUSTER_PATTERN ) ;
177
- if ( chinaMatcher !== null && chinaMatcher . groups !== undefined ) {
178
- return "cluster-ro-" == chinaMatcher . groups [ RdsUtils . DNS_GROUP ] ;
179
- }
180
- return false ;
217
+ const dnsGroup = this . getDnsGroup ( host ) ;
218
+ return equalsIgnoreCase ( dnsGroup , "cluster-ro-" ) ;
181
219
}
182
220
183
221
public getRdsClusterHostUrl ( host : string ) : string | null {
222
+ if ( ! host ) {
223
+ return null ;
224
+ }
225
+
184
226
const matcher = host . match ( RdsUtils . AURORA_CLUSTER_PATTERN ) ;
185
227
if ( matcher ) {
186
228
return host . replace ( RdsUtils . AURORA_CLUSTER_PATTERN , "$<instance>.cluster-$<domain>" ) ;
187
229
}
188
230
const chinaMatcher = host . match ( RdsUtils . AURORA_CHINA_CLUSTER_PATTERN ) ;
189
231
if ( chinaMatcher ) {
190
- return host . replace ( RdsUtils . AURORA_CHINA_CLUSTER_PATTERN , "${<instance>.cluster-$<domain>" ) ;
232
+ return host . replace ( RdsUtils . AURORA_CHINA_CLUSTER_PATTERN , "$<instance>.cluster-$<domain>" ) ;
233
+ }
234
+ const oldChinaMatcher = host . match ( RdsUtils . AURORA_OLD_CHINA_CLUSTER_PATTERN ) ;
235
+ if ( oldChinaMatcher ) {
236
+ return host . replace ( RdsUtils . AURORA_OLD_CHINA_CLUSTER_PATTERN , "$<instance>.cluster-$<domain>" ) ;
237
+ }
238
+ const govMatcher = host . match ( RdsUtils . AURORA_GOV_CLUSTER_PATTERN ) ;
239
+ if ( govMatcher ) {
240
+ return host . replace ( RdsUtils . AURORA_GOV_CLUSTER_PATTERN , "$<instance>.cluster-$<domain>" ) ;
191
241
}
192
242
return null ;
193
243
}
@@ -259,4 +309,53 @@ export class RdsUtils {
259
309
}
260
310
return hostAndPort . substring ( 0 , index ) ;
261
311
}
312
+
313
+ private getDnsGroup ( host : string ) : string | null {
314
+ if ( ! host ) {
315
+ return null ;
316
+ }
317
+
318
+ const group = RdsUtils . cachedDnsPatterns . get ( host ) ;
319
+ if ( group ) {
320
+ return group ;
321
+ }
322
+
323
+ const matcher = this . cacheMatcher (
324
+ host ,
325
+ RdsUtils . AURORA_DNS_PATTERN ,
326
+ RdsUtils . AURORA_CHINA_DNS_PATTERN ,
327
+ RdsUtils . AURORA_OLD_CHINA_DNS_PATTERN ,
328
+ RdsUtils . AURORA_GOV_DNS_PATTERN
329
+ ) ;
330
+ return this . getRegexGroup ( matcher , RdsUtils . DNS_GROUP ) ;
331
+ }
332
+
333
+ private getRegexGroup ( matcher : RegExpMatchArray , groupName : string ) : string | null {
334
+ if ( ! matcher ) {
335
+ return null ;
336
+ }
337
+
338
+ return matcher . groups ?. [ groupName ] ?? null ;
339
+ }
340
+
341
+ private cacheMatcher ( host : string , ...patterns : RegExp [ ] ) {
342
+ let matcher = null ;
343
+ for ( const pattern of patterns ) {
344
+ matcher = RdsUtils . cachedPatterns . get ( host ) ;
345
+ if ( matcher ) {
346
+ return matcher ;
347
+ }
348
+ matcher = host . match ( pattern ) ;
349
+ if ( matcher && matcher . length > 0 ) {
350
+ RdsUtils . cachedPatterns . set ( host , matcher ) ;
351
+ return matcher ;
352
+ }
353
+ }
354
+ return null ;
355
+ }
356
+
357
+ static clearCache ( ) {
358
+ RdsUtils . cachedPatterns . clear ( ) ;
359
+ RdsUtils . cachedDnsPatterns . clear ( ) ;
360
+ }
262
361
}
0 commit comments