-
-
Notifications
You must be signed in to change notification settings - Fork 85
Expand file tree
/
Copy pathget-unsupported-browsers-by-feature.mjs
More file actions
70 lines (60 loc) · 1.64 KB
/
get-unsupported-browsers-by-feature.mjs
File metadata and controls
70 lines (60 loc) · 1.64 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import { browsersWithSupportStats } from './browsers-with-supports-stats.mjs';
// return a list of browsers that do not support the feature
export function getUnsupportedBrowsersByFeature(feature) {
if (!feature) {
return [];
}
if (feature.id === 'position-area-property') {
// https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/position-area#browser_compatibility
// this can't be expressed in CSSDB
return [
'chrome 125',
'chrome 126',
'chrome 127',
'chrome 128',
'edge 125',
'edge 126',
'edge 127',
'edge 128',
'and_chr 125',
'and_chr 126',
'and_chr 127',
'and_chr 128',
'android 125',
'android 126',
'android 127',
'android 128',
'samsung 27',
'opera 111',
'opera 112',
'opera 113',
'opera 114',
'op_mob 83',
'op_mob 84',
'op_mob 85',
];
}
if (!('browser_support' in feature)) {
// the feature does not work in any browser (yet)
return [ '> 0%' ];
}
const query = [];
browsersWithSupportStats.forEach(browser => {
if (browser === 'op_mini' && (typeof feature.browser_support[browser] === 'undefined')) {
// Opera Mini is always "op_mini all"
query.push('op_mini all');
return;
}
const browserSupport = feature.browser_support[browser];
// Browser support info must be a valid version.
// TP or Beta versions are considered unsupported.
const isValid = (typeof browserSupport === 'string') && (DIGITS_OR_DOTS_REGEX.test(browserSupport));
if (isValid) {
query.push(`${browser} < ${feature.browser_support[browser]}`);
} else {
query.push(`${browser} >= 1`);
}
});
return query;
}
const DIGITS_OR_DOTS_REGEX = /^[0-9|.]+$/;