browserslist 4.5.4 → 4.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -0
- package/README.md +38 -25
- package/cli.js +1 -1
- package/index.js +56 -11
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,19 @@
|
|
|
1
1
|
# Change Log
|
|
2
2
|
This project adheres to [Semantic Versioning](http://semver.org/).
|
|
3
3
|
|
|
4
|
+
## 4.6.1
|
|
5
|
+
* Fix patch version support for Electron (by Kilian Valkhof).
|
|
6
|
+
|
|
7
|
+
## 4.6
|
|
8
|
+
* Add `mobileToDesktop` option (by Nicolò Ribaudo).
|
|
9
|
+
|
|
10
|
+
## 4.5.6
|
|
11
|
+
* Make `Node > 5` and `node > 5` queries case insensitive.
|
|
12
|
+
|
|
13
|
+
## 4.5.5
|
|
14
|
+
* Fix CLI help (by Marcel Gerber).
|
|
15
|
+
* Add KaiOS browser to docs.
|
|
16
|
+
|
|
4
17
|
## 4.5.4
|
|
5
18
|
* Update docs (by Andrew Leedham and Dan Onoshko).
|
|
6
19
|
|
package/README.md
CHANGED
|
@@ -73,13 +73,12 @@ You can test Browserslist queries in [online demo].
|
|
|
73
73
|
|
|
74
74
|
* [`browserslist-ga`] downloads your website browsers statistics
|
|
75
75
|
to use it in `> 0.5% in my stats` query.
|
|
76
|
-
* [`browserslist-useragent`] checks browser by user agent string
|
|
77
|
-
to match Browserslist target browsers query.
|
|
78
|
-
* [`browserslist-useragent-ruby`] is a Ruby library to checks browser
|
|
79
|
-
by user agent string to match Browserslist.
|
|
80
76
|
* [`browserslist-useragent-regexp`] compiles Browserslist query to a RegExp
|
|
81
77
|
to test browser useragent.
|
|
82
|
-
* [`browserslist-
|
|
78
|
+
* [`browserslist-useragent-ruby`] is a Ruby library to checks browser
|
|
79
|
+
by user agent string to match Browserslist.
|
|
80
|
+
* [`browserslist-browserstack`] runs BrowserStack tests for all browsers
|
|
81
|
+
in Browserslist config.
|
|
83
82
|
* [`caniuse-api`] returns browsers which support some specific feature.
|
|
84
83
|
* Run `npx browserslist` in your project directory to see project’s
|
|
85
84
|
target browsers. This CLI tool is built-in and available in any project
|
|
@@ -93,6 +92,34 @@ You can test Browserslist queries in [online demo].
|
|
|
93
92
|
[`browserslist-browserstack`]: https://github.com/xeroxinteractive/browserslist-browserstack
|
|
94
93
|
|
|
95
94
|
|
|
95
|
+
## Best Practices
|
|
96
|
+
|
|
97
|
+
* Select browsers directly (`last 2 Chrome versions`) only if you are making
|
|
98
|
+
a web app for a kiosk with one browser. There are a lot of browsers
|
|
99
|
+
on the market. If you are making general web app you should respect
|
|
100
|
+
browsers diversity.
|
|
101
|
+
* There is a `defaults` query, which gives a reasonable configuration
|
|
102
|
+
for most users:
|
|
103
|
+
|
|
104
|
+
```json
|
|
105
|
+
"browserslist": [
|
|
106
|
+
"defaults"
|
|
107
|
+
]
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
* If you want to change the default set of browsers we recommend to combine
|
|
111
|
+
`last 1 version`, `not dead` with `> 0.2%` (or `> 1% in US`,
|
|
112
|
+
`> 1% in my stats`). `last n versions` adds too many dead browsers
|
|
113
|
+
and does not add popular old versions. Choosing a percentage above `0.2%`
|
|
114
|
+
will in the long run make popular browsers even more popular. We might run
|
|
115
|
+
into a monopoly and stagnation situation, as we had with Internet Explorer 6.
|
|
116
|
+
Please use this setting with caution.
|
|
117
|
+
* Don’t remove browsers just because you don’t know them. Opera Mini has
|
|
118
|
+
100 million users in Africa and it is more popular in the global market
|
|
119
|
+
than Microsoft Edge. Chinese QQ Browsers has more market share than Firefox
|
|
120
|
+
and desktop Safari altogether.
|
|
121
|
+
|
|
122
|
+
|
|
96
123
|
## Queries
|
|
97
124
|
|
|
98
125
|
Browserslist will use browsers and Node.js versions query
|
|
@@ -133,25 +160,6 @@ _A quick way to test your query is to do `npx browserslist '> 0.5%, not IE 11'`
|
|
|
133
160
|
in your terminal._
|
|
134
161
|
|
|
135
162
|
|
|
136
|
-
### Best Practices
|
|
137
|
-
|
|
138
|
-
* Select browsers directly (`last 2 Chrome versions`) only if you are making
|
|
139
|
-
a web app for a kiosk with one browser. There are a lot of browsers
|
|
140
|
-
on the market. If you are making general web app you should respect
|
|
141
|
-
browsers diversity.
|
|
142
|
-
* If you want to change the default set of browsers we recommend to combine
|
|
143
|
-
`last 1 version`, `not dead` with `> 0.2%` (or `> 1% in US`,
|
|
144
|
-
`> 1% in my stats`). `last n versions` adds too many dead browsers
|
|
145
|
-
and does not add popular old versions. Choosing a percentage above `0.2%`
|
|
146
|
-
will in the long run make popular browsers even more popular. We might run
|
|
147
|
-
into a monopoly and stagnation situation, as we had with Internet Explorer 6.
|
|
148
|
-
Please use this setting with caution.
|
|
149
|
-
* Don’t remove browsers just because you don’t know them. Opera Mini has
|
|
150
|
-
100 million users in Africa and it is more popular in the global market
|
|
151
|
-
than Microsoft Edge. Chinese QQ Browsers has more market share than Firefox
|
|
152
|
-
and desktop Safari altogether.
|
|
153
|
-
|
|
154
|
-
|
|
155
163
|
### Full List
|
|
156
164
|
|
|
157
165
|
You can specify the browser and Node.js versions by queries (case insensitive):
|
|
@@ -261,6 +269,7 @@ Names are case insensitive:
|
|
|
261
269
|
* `Safari` for desktop Safari.
|
|
262
270
|
* `Samsung` for Samsung Internet.
|
|
263
271
|
* `UCAndroid` or `and_uc` for UC Browser for Android.
|
|
272
|
+
* `kaios` for KaiOS Browser.
|
|
264
273
|
|
|
265
274
|
|
|
266
275
|
## `package.json`
|
|
@@ -464,7 +473,7 @@ var browserslist = require('browserslist');
|
|
|
464
473
|
|
|
465
474
|
// Your CSS/JS build tool code
|
|
466
475
|
var process = function (source, opts) {
|
|
467
|
-
var browsers = browserslist(opts.
|
|
476
|
+
var browsers = browserslist(opts.overrideBrowserslist, {
|
|
468
477
|
stats: opts.stats,
|
|
469
478
|
path: opts.file,
|
|
470
479
|
env: opts.env
|
|
@@ -490,6 +499,10 @@ Options:
|
|
|
490
499
|
Default is `false.`
|
|
491
500
|
* `dangerousExtend`: Disable security checks for `extend` query.
|
|
492
501
|
Default is `false.`
|
|
502
|
+
* `mobileToDesktop`: Use desktop browsers if Can I Use doesn’t have data
|
|
503
|
+
about this mobile version. For instance, Browserslist will return
|
|
504
|
+
`chrome 20` on `and_chr 20` query (Can I Use has only data only about
|
|
505
|
+
latest versions of mobile browsers). Default is `false`.
|
|
493
506
|
|
|
494
507
|
For non-JS environment and debug purpose you can use CLI tool:
|
|
495
508
|
|
package/cli.js
CHANGED
|
@@ -13,7 +13,7 @@ var USAGE = 'Usage:\n' +
|
|
|
13
13
|
' ' + pkg.name + ' --config="path/to/browserlist/file"\n' +
|
|
14
14
|
' ' + pkg.name + ' --coverage "QUERIES"\n' +
|
|
15
15
|
' ' + pkg.name + ' --coverage=US "QUERIES"\n' +
|
|
16
|
-
' ' + pkg.name + ' --coverage=US,RU,
|
|
16
|
+
' ' + pkg.name + ' --coverage=US,RU,global "QUERIES"\n' +
|
|
17
17
|
' ' + pkg.name + ' --env="environment name defined in config"\n' +
|
|
18
18
|
' ' + pkg.name + ' --stats="path/to/browserlist/stats/file"'
|
|
19
19
|
|
package/index.js
CHANGED
|
@@ -33,6 +33,17 @@ function normalize (versions) {
|
|
|
33
33
|
})
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
+
function normalizeElectron (version) {
|
|
37
|
+
var versionToUse = version
|
|
38
|
+
if (version.split('.').length === 3) {
|
|
39
|
+
versionToUse = version
|
|
40
|
+
.split('.')
|
|
41
|
+
.slice(0, -1)
|
|
42
|
+
.join('.')
|
|
43
|
+
}
|
|
44
|
+
return versionToUse
|
|
45
|
+
}
|
|
46
|
+
|
|
36
47
|
function nameMapper (name) {
|
|
37
48
|
return function mapName (version) {
|
|
38
49
|
return name + ' ' + version
|
|
@@ -136,11 +147,28 @@ function compareSemver (a, b) {
|
|
|
136
147
|
)
|
|
137
148
|
}
|
|
138
149
|
|
|
139
|
-
function
|
|
150
|
+
function resolveVersion (data, version) {
|
|
140
151
|
if (data.versions.indexOf(version) !== -1) {
|
|
141
152
|
return version
|
|
142
153
|
} else if (browserslist.versionAliases[data.name][version]) {
|
|
143
154
|
return browserslist.versionAliases[data.name][version]
|
|
155
|
+
} else {
|
|
156
|
+
return false
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
function normalizeVersion (data, version, context) {
|
|
161
|
+
var resolved = resolveVersion(data, version)
|
|
162
|
+
if (
|
|
163
|
+
!resolved &&
|
|
164
|
+
context.mobileToDesktop &&
|
|
165
|
+
browserslist.desktopNames[data.name]
|
|
166
|
+
) {
|
|
167
|
+
var alias = checkName(browserslist.desktopNames[data.name])
|
|
168
|
+
resolved = resolveVersion(alias, version)
|
|
169
|
+
}
|
|
170
|
+
if (resolved) {
|
|
171
|
+
return resolved
|
|
144
172
|
} else if (data.versions.length === 1) {
|
|
145
173
|
return data.versions[0]
|
|
146
174
|
} else {
|
|
@@ -274,6 +302,9 @@ function resolve (queries, context) {
|
|
|
274
302
|
* version in direct query.
|
|
275
303
|
* @param {boolean} [opts.dangerousExtend] Disable security checks
|
|
276
304
|
* for extend query.
|
|
305
|
+
* @param {boolean} [opts.mobileToDesktop] Alias mobile browsers to the desktop
|
|
306
|
+
* version when Can I Use doesn't have
|
|
307
|
+
* data about the specified version.
|
|
277
308
|
* @returns {string[]} Array with browser names in Can I Use.
|
|
278
309
|
*
|
|
279
310
|
* @example
|
|
@@ -302,7 +333,8 @@ function browserslist (queries, opts) {
|
|
|
302
333
|
|
|
303
334
|
var context = {
|
|
304
335
|
ignoreUnknownVersions: opts.ignoreUnknownVersions,
|
|
305
|
-
dangerousExtend: opts.dangerousExtend
|
|
336
|
+
dangerousExtend: opts.dangerousExtend,
|
|
337
|
+
mobileToDesktop: opts.mobileToDesktop
|
|
306
338
|
}
|
|
307
339
|
|
|
308
340
|
env.oldDataWarning(browserslist.data)
|
|
@@ -427,6 +459,15 @@ browserslist.aliases = {
|
|
|
427
459
|
qqandroid: 'and_qq'
|
|
428
460
|
}
|
|
429
461
|
|
|
462
|
+
// Can I Use only provides a few versions for some browsers (e.g. and_chr).
|
|
463
|
+
// Fallback to a similar browser for unknown versions
|
|
464
|
+
browserslist.desktopNames = {
|
|
465
|
+
and_chr: 'chrome',
|
|
466
|
+
and_ff: 'firefox',
|
|
467
|
+
ie_mob: 'ie',
|
|
468
|
+
op_mob: 'opera'
|
|
469
|
+
}
|
|
470
|
+
|
|
430
471
|
// Aliases to work with joined versions like `ios_saf 7.0-7.1`
|
|
431
472
|
browserslist.versionAliases = { }
|
|
432
473
|
|
|
@@ -738,10 +779,12 @@ var QUERIES = [
|
|
|
738
779
|
{
|
|
739
780
|
regexp: /^electron\s+([\d.]+)\s*-\s*([\d.]+)$/i,
|
|
740
781
|
select: function (context, from, to) {
|
|
741
|
-
|
|
782
|
+
var fromToUse = normalizeElectron(from)
|
|
783
|
+
var toToUse = normalizeElectron(to)
|
|
784
|
+
if (!e2c[fromToUse]) {
|
|
742
785
|
throw new BrowserslistError('Unknown version ' + from + ' of electron')
|
|
743
786
|
}
|
|
744
|
-
if (!e2c[
|
|
787
|
+
if (!e2c[toToUse]) {
|
|
745
788
|
throw new BrowserslistError('Unknown version ' + to + ' of electron')
|
|
746
789
|
}
|
|
747
790
|
|
|
@@ -760,8 +803,8 @@ var QUERIES = [
|
|
|
760
803
|
regexp: /^(\w+)\s+([\d.]+)\s*-\s*([\d.]+)$/i,
|
|
761
804
|
select: function (context, name, from, to) {
|
|
762
805
|
var data = checkName(name)
|
|
763
|
-
from = parseFloat(normalizeVersion(data, from) || from)
|
|
764
|
-
to = parseFloat(normalizeVersion(data, to) || to)
|
|
806
|
+
from = parseFloat(normalizeVersion(data, from, context) || from)
|
|
807
|
+
to = parseFloat(normalizeVersion(data, to, context) || to)
|
|
765
808
|
|
|
766
809
|
function filter (v) {
|
|
767
810
|
var parsed = parseFloat(v)
|
|
@@ -774,15 +817,16 @@ var QUERIES = [
|
|
|
774
817
|
{
|
|
775
818
|
regexp: /^electron\s*(>=?|<=?)\s*([\d.]+)$/i,
|
|
776
819
|
select: function (context, sign, version) {
|
|
820
|
+
var versionToUse = normalizeElectron(version)
|
|
777
821
|
return Object.keys(e2c)
|
|
778
|
-
.filter(generateFilter(sign,
|
|
822
|
+
.filter(generateFilter(sign, versionToUse))
|
|
779
823
|
.map(function (i) {
|
|
780
824
|
return 'chrome ' + e2c[i]
|
|
781
825
|
})
|
|
782
826
|
}
|
|
783
827
|
},
|
|
784
828
|
{
|
|
785
|
-
regexp: /^node\s*(>=?|<=?)\s*([\d.]+)
|
|
829
|
+
regexp: /^node\s*(>=?|<=?)\s*([\d.]+)$/i,
|
|
786
830
|
select: function (context, sign, version) {
|
|
787
831
|
var nodeVersions = jsReleases.filter(function (i) {
|
|
788
832
|
return i.name === 'nodejs'
|
|
@@ -826,7 +870,8 @@ var QUERIES = [
|
|
|
826
870
|
{
|
|
827
871
|
regexp: /^electron\s+([\d.]+)$/i,
|
|
828
872
|
select: function (context, version) {
|
|
829
|
-
var
|
|
873
|
+
var versionToUse = normalizeElectron(version)
|
|
874
|
+
var chrome = e2c[versionToUse]
|
|
830
875
|
if (!chrome) {
|
|
831
876
|
throw new BrowserslistError(
|
|
832
877
|
'Unknown version ' + version + ' of electron')
|
|
@@ -879,7 +924,7 @@ var QUERIES = [
|
|
|
879
924
|
select: function (context, name, version) {
|
|
880
925
|
if (/^tp$/i.test(version)) version = 'TP'
|
|
881
926
|
var data = checkName(name)
|
|
882
|
-
var alias = normalizeVersion(data, version)
|
|
927
|
+
var alias = normalizeVersion(data, version, context)
|
|
883
928
|
if (alias) {
|
|
884
929
|
version = alias
|
|
885
930
|
} else {
|
|
@@ -888,7 +933,7 @@ var QUERIES = [
|
|
|
888
933
|
} else {
|
|
889
934
|
alias = version.replace(/\.0$/, '')
|
|
890
935
|
}
|
|
891
|
-
alias = normalizeVersion(data, alias)
|
|
936
|
+
alias = normalizeVersion(data, alias, context)
|
|
892
937
|
if (alias) {
|
|
893
938
|
version = alias
|
|
894
939
|
} else if (context.ignoreUnknownVersions) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "browserslist",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.6.1",
|
|
4
4
|
"description": "Share target browsers between different front-end tools, like Autoprefixer, Stylelint and babel-env-preset",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"caniuse",
|
|
@@ -11,9 +11,9 @@
|
|
|
11
11
|
"license": "MIT",
|
|
12
12
|
"repository": "browserslist/browserslist",
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"caniuse-lite": "^1.0.
|
|
15
|
-
"electron-to-chromium": "^1.3.
|
|
16
|
-
"node-releases": "^1.1.
|
|
14
|
+
"caniuse-lite": "^1.0.30000971",
|
|
15
|
+
"electron-to-chromium": "^1.3.137",
|
|
16
|
+
"node-releases": "^1.1.21"
|
|
17
17
|
},
|
|
18
18
|
"bin": "./cli.js",
|
|
19
19
|
"browser": {
|