@@ -119,10 +119,13 @@ export function fixBrowserFamily(family: string, regExp: RegExp): IFixedFamily[]
119
119
case / b i n g b o t | ^ \\ b \( / . test ( regExpString ) :
120
120
return [ ] ;
121
121
122
+ /**
123
+ * Chrome browsers
124
+ * `'HeadlessChrome'` was removed, works with regular Chrome RegExp
125
+ */
122
126
case familyMatched ( false , familyOrRegExp , [
123
127
'Chrome Mobile' , // CrMo
124
- 'Chromium' ,
125
- 'HeadlessChrome'
128
+ 'Chromium'
126
129
] ) :
127
130
return [ { family : 'chrome' } ] ;
128
131
@@ -151,19 +154,35 @@ export function fixBrowserFamily(family: string, regExp: RegExp): IFixedFamily[]
151
154
152
155
const matches = regExpString . match ( / \( ( [ \s \w \d _ \- / ! | ] + ) \) / i) ;
153
156
157
+ /**
158
+ * Extract family from RegExp
159
+ */
154
160
if ( Array . isArray ( matches ) ) {
155
161
156
162
const match = matches [ 1 ] ;
157
163
const familiesFromRegExp = match . split ( '|' ) ;
158
- const families = uniq ( [
159
- ...familiesFromRegExp ,
160
- ...familiesFromRegExp . map ( _ => _ . replace ( / / g, '' ) ) ,
161
- ...familiesFromRegExp . map ( _ => _ . replace ( / [ _ \- / \s ] / g, '' ) )
162
- ] ) ;
164
+ const familyToRegExpMap = new Map < string , string [ ] > ( ) ;
165
+ const families = uniq (
166
+ familiesFromRegExp . map ( ( familyFromRegExp ) => {
167
+
168
+ const family = familyFromRegExp . replace ( / [ ^ \d \w ] / g, '' ) . toLowerCase ( ) ;
169
+
170
+ if ( familyToRegExpMap . has ( family ) ) {
171
+ familyToRegExpMap . get ( family ) . push ( familyFromRegExp ) ;
172
+ } else {
173
+ familyToRegExpMap . set ( family , [ familyFromRegExp ] ) ;
174
+ }
175
+
176
+ return family ;
177
+ } )
178
+ ) ;
163
179
164
180
return families . map ( family => ( {
165
- family : family . toLowerCase ( ) ,
166
- regExp : new RegExp ( regExpString . replace ( match , family ) )
181
+ family,
182
+ regExp : new RegExp ( regExpString . replace (
183
+ match ,
184
+ familyToRegExpMap . get ( family ) . join ( '|' )
185
+ ) )
167
186
} ) ) ;
168
187
}
169
188
0 commit comments