browserslist 4.8.5 → 4.9.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 +12 -0
- package/LICENSE +1 -1
- package/README.md +7 -5
- package/index.js +88 -4
- package/node.js +20 -5
- package/package.json +5 -9
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,18 @@
|
|
|
1
1
|
# Change Log
|
|
2
2
|
This project adheres to [Semantic Versioning](http://semver.org/).
|
|
3
3
|
|
|
4
|
+
## 4.9.1
|
|
5
|
+
* Normalize incorrect Can I Use regional data (by Huáng Jùnliàng).
|
|
6
|
+
|
|
7
|
+
## 4.9
|
|
8
|
+
* Add `node X-Y` query support (by Yuping Zuo).
|
|
9
|
+
|
|
10
|
+
## 4.8.7
|
|
11
|
+
* Fix `last N major versions` (by Valeriy Trubachev).
|
|
12
|
+
|
|
13
|
+
## 4.8.6
|
|
14
|
+
* Fix `Unknown version 10 of op_mob` error in `mobileToDesktop` option.
|
|
15
|
+
|
|
4
16
|
## 4.8.5
|
|
5
17
|
* Fix `last N browsers` again after new `caniuse-db` API changes.
|
|
6
18
|
|
package/LICENSE
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
The MIT License (MIT)
|
|
2
2
|
|
|
3
|
-
Copyright 2014 Andrey Sitnik <andrey@sitnik.ru>
|
|
3
|
+
Copyright 2014 Andrey Sitnik <andrey@sitnik.ru> and other contributors
|
|
4
4
|
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
6
6
|
this software and associated documentation files (the "Software"), to deal in
|
package/README.md
CHANGED
|
@@ -37,7 +37,7 @@ not IE_Mob 11
|
|
|
37
37
|
maintained node versions
|
|
38
38
|
```
|
|
39
39
|
|
|
40
|
-
Developers set
|
|
40
|
+
Developers set their version lists using queries like `last 2 version`
|
|
41
41
|
to be free from updating versions manually.
|
|
42
42
|
Browserslist will use [`caniuse-lite`] with [Can I Use] data for this queries.
|
|
43
43
|
|
|
@@ -91,12 +91,14 @@ Browserslist will take queries from tool option,
|
|
|
91
91
|
by user agent string to match Browserslist.
|
|
92
92
|
* [`browserslist-browserstack`] runs BrowserStack tests for all browsers
|
|
93
93
|
in Browserslist config.
|
|
94
|
+
* [`browserslist-adobe-analytics`] use Adobe Analytics data to target browsers.
|
|
94
95
|
* [`caniuse-api`] returns browsers which support some specific feature.
|
|
95
96
|
* Run `npx browserslist` in your project directory to see project’s
|
|
96
97
|
target browsers. This CLI tool is built-in and available in any project
|
|
97
98
|
with Autoprefixer.
|
|
98
99
|
|
|
99
100
|
[`browserslist-useragent-regexp`]: https://github.com/browserslist/browserslist-useragent-regexp
|
|
101
|
+
[`browserslist-adobe-analytics`]: https://github.com/xeroxinteractive/browserslist-adobe-analytics
|
|
100
102
|
[`browserslist-useragent-ruby`]: https://github.com/browserslist/browserslist-useragent-ruby
|
|
101
103
|
[`browserslist-browserstack`]: https://github.com/xeroxinteractive/browserslist-browserstack
|
|
102
104
|
[`browserslist-ga-export`]: https://github.com/browserslist/browserslist-ga-export
|
|
@@ -116,9 +118,9 @@ Browserslist will take queries from tool option,
|
|
|
116
118
|
]
|
|
117
119
|
```
|
|
118
120
|
|
|
119
|
-
* If you want to change the default set of browsers we recommend
|
|
121
|
+
* If you want to change the default set of browsers, we recommend combining
|
|
120
122
|
`last 2 versions`, `not dead` with a usage number like `> 0.2%`. This is
|
|
121
|
-
because `last n versions` on its own does not add popular old versions while
|
|
123
|
+
because `last n versions` on its own does not add popular old versions, while
|
|
122
124
|
only using a percentage above `0.2%` will in the long run make popular
|
|
123
125
|
browsers even more popular. We might run into a monopoly and stagnation
|
|
124
126
|
situation, as we had with Internet Explorer 6. Please use this setting
|
|
@@ -537,8 +539,8 @@ These browsers account for 83.1% of all users in custom statistics
|
|
|
537
539
|
|
|
538
540
|
## Environment Variables
|
|
539
541
|
|
|
540
|
-
If
|
|
541
|
-
|
|
542
|
+
If a tool uses Browserslist inside, you can change the Browserslist settings
|
|
543
|
+
with [environment variables]:
|
|
542
544
|
|
|
543
545
|
* `BROWSERSLIST` with browsers queries.
|
|
544
546
|
|
package/index.js
CHANGED
|
@@ -53,7 +53,11 @@ function getMajor (version) {
|
|
|
53
53
|
|
|
54
54
|
function getMajorVersions (released, number) {
|
|
55
55
|
if (released.length === 0) return []
|
|
56
|
-
var
|
|
56
|
+
var majorVersions = uniq(released.map(getMajor))
|
|
57
|
+
var minimum = majorVersions[majorVersions.length - number]
|
|
58
|
+
if (!minimum) {
|
|
59
|
+
return released
|
|
60
|
+
}
|
|
57
61
|
var selected = []
|
|
58
62
|
for (var i = released.length - 1; i >= 0; i--) {
|
|
59
63
|
if (minimum > getMajor(released[i])) break
|
|
@@ -144,6 +148,43 @@ function compareSemver (a, b) {
|
|
|
144
148
|
)
|
|
145
149
|
}
|
|
146
150
|
|
|
151
|
+
// this follows the npm-like semver behavior
|
|
152
|
+
function semverFilterLoose (operator, range) {
|
|
153
|
+
range = range.split('.').map(parseSimpleInt)
|
|
154
|
+
if (typeof range[1] === 'undefined') {
|
|
155
|
+
range[1] = 'x'
|
|
156
|
+
}
|
|
157
|
+
// ignore any patch version because we only return minor versions
|
|
158
|
+
// range[2] = 'x'
|
|
159
|
+
switch (operator) {
|
|
160
|
+
case '<=':
|
|
161
|
+
return function (version) {
|
|
162
|
+
version = version.split('.').map(parseSimpleInt)
|
|
163
|
+
return compareSemverLoose(version, range) <= 0
|
|
164
|
+
}
|
|
165
|
+
default:
|
|
166
|
+
case '>=':
|
|
167
|
+
return function (version) {
|
|
168
|
+
version = version.split('.').map(parseSimpleInt)
|
|
169
|
+
return compareSemverLoose(version, range) >= 0
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
// this follows the npm-like semver behavior
|
|
175
|
+
function compareSemverLoose (version, range) {
|
|
176
|
+
if (version[0] !== range[0]) {
|
|
177
|
+
return version[0] < range[0] ? -1 : +1
|
|
178
|
+
}
|
|
179
|
+
if (range[1] === 'x') {
|
|
180
|
+
return 0
|
|
181
|
+
}
|
|
182
|
+
if (version[1] !== range[1]) {
|
|
183
|
+
return version[1] < range[1] ? -1 : +1
|
|
184
|
+
}
|
|
185
|
+
return 0
|
|
186
|
+
}
|
|
187
|
+
|
|
147
188
|
function resolveVersion (data, version) {
|
|
148
189
|
if (data.versions.indexOf(version) !== -1) {
|
|
149
190
|
return version
|
|
@@ -186,6 +227,21 @@ function cloneData (data) {
|
|
|
186
227
|
}
|
|
187
228
|
}
|
|
188
229
|
|
|
230
|
+
function mapVersions (data, map) {
|
|
231
|
+
data.versions = data.versions.map(function (i) {
|
|
232
|
+
return map[i] || i
|
|
233
|
+
})
|
|
234
|
+
data.released = data.versions.map(function (i) {
|
|
235
|
+
return map[i] || i
|
|
236
|
+
})
|
|
237
|
+
var fixedDate = { }
|
|
238
|
+
for (var i in data.releaseDate) {
|
|
239
|
+
fixedDate[map[i] || i] = data.releaseDate[i]
|
|
240
|
+
}
|
|
241
|
+
data.releaseDate = fixedDate
|
|
242
|
+
return data
|
|
243
|
+
}
|
|
244
|
+
|
|
189
245
|
function byName (name, context) {
|
|
190
246
|
name = name.toLowerCase()
|
|
191
247
|
name = browserslist.aliases[name] || name
|
|
@@ -196,6 +252,9 @@ function byName (name, context) {
|
|
|
196
252
|
} else {
|
|
197
253
|
var cloned = cloneData(desktop)
|
|
198
254
|
cloned.name = name
|
|
255
|
+
if (name === 'op_mob') {
|
|
256
|
+
cloned = mapVersions(cloned, { '10.0-10.1': '10' })
|
|
257
|
+
}
|
|
199
258
|
return cloned
|
|
200
259
|
}
|
|
201
260
|
}
|
|
@@ -529,7 +588,7 @@ browserslist.coverage = function (browsers, stats) {
|
|
|
529
588
|
} else {
|
|
530
589
|
stats = stats.toUpperCase()
|
|
531
590
|
}
|
|
532
|
-
env.loadCountry(browserslist.usage, stats)
|
|
591
|
+
env.loadCountry(browserslist.usage, stats, browserslist.data)
|
|
533
592
|
data = browserslist.usage[stats]
|
|
534
593
|
} else {
|
|
535
594
|
if ('dataByBrowser' in stats) {
|
|
@@ -764,7 +823,7 @@ var QUERIES = [
|
|
|
764
823
|
} else {
|
|
765
824
|
place = place.toLowerCase()
|
|
766
825
|
}
|
|
767
|
-
env.loadCountry(browserslist.usage, place)
|
|
826
|
+
env.loadCountry(browserslist.usage, place, browserslist.data)
|
|
768
827
|
var usage = browserslist.usage[place]
|
|
769
828
|
return Object.keys(usage).reduce(function (result, version) {
|
|
770
829
|
if (sign === '>') {
|
|
@@ -807,7 +866,7 @@ var QUERIES = [
|
|
|
807
866
|
} else {
|
|
808
867
|
place = place.toLowerCase()
|
|
809
868
|
}
|
|
810
|
-
env.loadCountry(browserslist.usage, place)
|
|
869
|
+
env.loadCountry(browserslist.usage, place, browserslist.data)
|
|
811
870
|
usage = browserslist.usage[place]
|
|
812
871
|
}
|
|
813
872
|
}
|
|
@@ -848,6 +907,31 @@ var QUERIES = [
|
|
|
848
907
|
})
|
|
849
908
|
}
|
|
850
909
|
},
|
|
910
|
+
{
|
|
911
|
+
regexp: /^node\s+([\d.]+)\s*-\s*([\d.]+)$/i,
|
|
912
|
+
select: function (context, from, to) {
|
|
913
|
+
var nodeVersions = jsReleases.filter(function (i) {
|
|
914
|
+
return i.name === 'nodejs'
|
|
915
|
+
}).map(function (i) {
|
|
916
|
+
return i.version
|
|
917
|
+
})
|
|
918
|
+
var semverRegExp = /^(0|[1-9]\d*)(\.(0|[1-9]\d*)){0,2}$/
|
|
919
|
+
if (!semverRegExp.test(from)) {
|
|
920
|
+
throw new BrowserslistError(
|
|
921
|
+
'Unknown version ' + from + ' of Node.js')
|
|
922
|
+
}
|
|
923
|
+
if (!semverRegExp.test(to)) {
|
|
924
|
+
throw new BrowserslistError(
|
|
925
|
+
'Unknown version ' + to + ' of Node.js')
|
|
926
|
+
}
|
|
927
|
+
return nodeVersions
|
|
928
|
+
.filter(semverFilterLoose('>=', from))
|
|
929
|
+
.filter(semverFilterLoose('<=', to))
|
|
930
|
+
.map(function (v) {
|
|
931
|
+
return 'node ' + v
|
|
932
|
+
})
|
|
933
|
+
}
|
|
934
|
+
},
|
|
851
935
|
{
|
|
852
936
|
regexp: /^(\w+)\s+([\d.]+)\s*-\s*([\d.]+)$/i,
|
|
853
937
|
select: function (context, name, from, to) {
|
package/node.js
CHANGED
|
@@ -137,6 +137,20 @@ function normalizeStats (data, stats) {
|
|
|
137
137
|
return normalized
|
|
138
138
|
}
|
|
139
139
|
|
|
140
|
+
function normalizeUsageData (usageData, data) {
|
|
141
|
+
for (var browser in usageData) {
|
|
142
|
+
var browserUsage = usageData[browser]
|
|
143
|
+
// eslint-disable-next-line max-len
|
|
144
|
+
// https://github.com/browserslist/browserslist/issues/431#issuecomment-565230615
|
|
145
|
+
// caniuse-db returns { 0: "percentage" } for `and_*` regional stats
|
|
146
|
+
if ('0' in browserUsage) {
|
|
147
|
+
var versions = data[browser].versions
|
|
148
|
+
browserUsage[versions[versions.length - 1]] = browserUsage[0]
|
|
149
|
+
delete browserUsage[0]
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
|
|
140
154
|
module.exports = {
|
|
141
155
|
loadQueries: function loadQueries (context, name) {
|
|
142
156
|
if (!context.dangerousExtend) checkExtend(name)
|
|
@@ -201,16 +215,17 @@ module.exports = {
|
|
|
201
215
|
}
|
|
202
216
|
},
|
|
203
217
|
|
|
204
|
-
loadCountry: function loadCountry (usage, country) {
|
|
218
|
+
loadCountry: function loadCountry (usage, country, data) {
|
|
205
219
|
var code = country.replace(/[^\w-]/g, '')
|
|
206
220
|
if (!usage[code]) {
|
|
207
221
|
// eslint-disable-next-line security/detect-non-literal-require
|
|
208
222
|
var compressed = require('caniuse-lite/data/regions/' + code + '.js')
|
|
209
|
-
var
|
|
223
|
+
var usageData = region(compressed)
|
|
224
|
+
normalizeUsageData(usageData, data)
|
|
210
225
|
usage[country] = { }
|
|
211
|
-
for (var i in
|
|
212
|
-
for (var j in
|
|
213
|
-
usage[country][i + ' ' + j] =
|
|
226
|
+
for (var i in usageData) {
|
|
227
|
+
for (var j in usageData[i]) {
|
|
228
|
+
usage[country][i + ' ' + j] = usageData[i][j]
|
|
214
229
|
}
|
|
215
230
|
}
|
|
216
231
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "browserslist",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.9.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",
|
|
@@ -15,9 +15,9 @@
|
|
|
15
15
|
"license": "MIT",
|
|
16
16
|
"repository": "browserslist/browserslist",
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"caniuse-lite": "^1.0.
|
|
19
|
-
"electron-to-chromium": "^1.3.
|
|
20
|
-
"node-releases": "^1.1.
|
|
18
|
+
"caniuse-lite": "^1.0.30001030",
|
|
19
|
+
"electron-to-chromium": "^1.3.363",
|
|
20
|
+
"node-releases": "^1.1.50"
|
|
21
21
|
},
|
|
22
22
|
"bin": "./cli.js",
|
|
23
23
|
"browser": {
|
|
@@ -26,9 +26,5 @@
|
|
|
26
26
|
},
|
|
27
27
|
"eslintIgnore": [
|
|
28
28
|
"test/fixtures"
|
|
29
|
-
]
|
|
30
|
-
"sharec": {
|
|
31
|
-
"config": "@logux/sharec-config",
|
|
32
|
-
"version": "0.5.6"
|
|
33
|
-
}
|
|
29
|
+
]
|
|
34
30
|
}
|