browserslist 4.4.0 → 4.5.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/README.md +4 -1
- package/index.js +57 -3
- package/node.js +5 -6
- package/package.json +4 -4
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.5.1
|
|
5
|
+
* Improve text for the warning about outdated `caniuse-lite`.
|
|
6
|
+
|
|
7
|
+
## 4.5
|
|
8
|
+
* Add `>=`, `>`, and `<=` support for Node.js version (by Mathspy Terabithian).
|
|
9
|
+
|
|
10
|
+
## 4.4.2
|
|
11
|
+
* Allow to have string in `package.json` (by @dmarkhas).
|
|
12
|
+
|
|
13
|
+
## 4.4.1
|
|
14
|
+
* Allow to use `.` in scope name of shareable config (by Gustav Nikolaj).
|
|
15
|
+
|
|
4
16
|
## 4.4
|
|
5
17
|
* Added `and` and `or` keywords to combine queries (by Jon Ege Ronnenberg).
|
|
6
18
|
|
package/README.md
CHANGED
|
@@ -12,6 +12,7 @@ front-end tools. It is used in:
|
|
|
12
12
|
* [eslint-plugin-compat]
|
|
13
13
|
* [stylelint-no-unsupported-browser-features]
|
|
14
14
|
* [postcss-normalize]
|
|
15
|
+
* [obsolete-webpack-plugin]
|
|
15
16
|
|
|
16
17
|
[Browserslist Example] shows how every tool uses Browserslist.
|
|
17
18
|
All tools will find target browsers automatically,
|
|
@@ -66,6 +67,7 @@ You can test Browserslist queries in [online demo].
|
|
|
66
67
|
[online demo]: https://browserl.ist/
|
|
67
68
|
[Can I Use]: https://caniuse.com/
|
|
68
69
|
[Babel]: https://github.com/babel/babel/tree/master/packages/babel-preset-env
|
|
70
|
+
[obsolete-webpack-plugin]: https://github.com/ElemeFE/obsolete-webpack-plugin
|
|
69
71
|
|
|
70
72
|
## Tools
|
|
71
73
|
|
|
@@ -167,7 +169,7 @@ You can specify the browser and Node.js versions by queries (case insensitive):
|
|
|
167
169
|
`browserslist-config-mycompany` npm package.
|
|
168
170
|
* `ie 6-8`: selects an inclusive range of versions.
|
|
169
171
|
* `Firefox > 20`: versions of Firefox newer than 20.
|
|
170
|
-
`>=`, `<` and `<=` work too.
|
|
172
|
+
`>=`, `<` and `<=` work too. It also works with Node.js.
|
|
171
173
|
* `iOS 7`: the iOS browser version 7 directly.
|
|
172
174
|
* `Firefox ESR`: the latest [Firefox ESR] version.
|
|
173
175
|
* `unreleased versions` or `unreleased Chrome versions`:
|
|
@@ -217,6 +219,7 @@ samsung 5
|
|
|
217
219
|
|
|
218
220
|
Browserslist works with separated versions of browsers.
|
|
219
221
|
You should avoid queries like `Firefox > 0`.
|
|
222
|
+
The list of the specified browsers acts as a white list which means other browsers are ignored.
|
|
220
223
|
|
|
221
224
|
All queries are based on the [Can I Use] support table,
|
|
222
225
|
e.g. `last 3 iOS versions` might select `8.4, 9.2, 9.3` (mixed major and minor),
|
package/index.js
CHANGED
|
@@ -91,12 +91,51 @@ function generateFilter (sign, version) {
|
|
|
91
91
|
}
|
|
92
92
|
}
|
|
93
93
|
|
|
94
|
-
function
|
|
94
|
+
function generateSemverFilter (sign, version) {
|
|
95
|
+
version = version.split('.').map(parseSimpleInt)
|
|
96
|
+
version[1] = version[1] || 0
|
|
97
|
+
version[2] = version[2] || 0
|
|
98
|
+
if (sign === '>') {
|
|
99
|
+
return function (v) {
|
|
100
|
+
v = v.split('.').map(parseSimpleInt)
|
|
101
|
+
return compareSemver(v, version) > 0
|
|
102
|
+
}
|
|
103
|
+
} else if (sign === '>=') {
|
|
104
|
+
return function (v) {
|
|
105
|
+
v = v.split('.').map(parseSimpleInt)
|
|
106
|
+
return compareSemver(v, version) >= 0
|
|
107
|
+
}
|
|
108
|
+
} else if (sign === '<') {
|
|
109
|
+
return function (v) {
|
|
110
|
+
v = v.split('.').map(parseSimpleInt)
|
|
111
|
+
return compareSemver(version, v) > 0
|
|
112
|
+
}
|
|
113
|
+
} else {
|
|
114
|
+
return function (v) {
|
|
115
|
+
v = v.split('.').map(parseSimpleInt)
|
|
116
|
+
return compareSemver(version, v) >= 0
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
function parseSimpleInt (x) {
|
|
122
|
+
return parseInt(x)
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
function compare (a, b) {
|
|
95
126
|
if (a < b) return -1
|
|
96
127
|
if (a > b) return +1
|
|
97
128
|
return 0
|
|
98
129
|
}
|
|
99
130
|
|
|
131
|
+
function compareSemver (a, b) {
|
|
132
|
+
return (
|
|
133
|
+
compare(a[0], b[0]) ||
|
|
134
|
+
compare(a[1], b[1]) ||
|
|
135
|
+
compare(a[2], b[2])
|
|
136
|
+
)
|
|
137
|
+
}
|
|
138
|
+
|
|
100
139
|
function normalizeVersion (data, version) {
|
|
101
140
|
if (data.versions.indexOf(version) !== -1) {
|
|
102
141
|
return version
|
|
@@ -282,10 +321,10 @@ function browserslist (queries, opts) {
|
|
|
282
321
|
if (FLOAT_RANGE.test(name1[1]) && FLOAT_RANGE.test(name2[1])) {
|
|
283
322
|
return parseFloat(name2[1]) - parseFloat(name1[1])
|
|
284
323
|
} else {
|
|
285
|
-
return
|
|
324
|
+
return compare(name2[1], name1[1])
|
|
286
325
|
}
|
|
287
326
|
} else {
|
|
288
|
-
return
|
|
327
|
+
return compare(name1[0], name2[0])
|
|
289
328
|
}
|
|
290
329
|
})
|
|
291
330
|
|
|
@@ -745,6 +784,21 @@ var QUERIES = [
|
|
|
745
784
|
})
|
|
746
785
|
}
|
|
747
786
|
},
|
|
787
|
+
{
|
|
788
|
+
regexp: /^node\s*(>=?|<=?)\s*([\d.]+)$/,
|
|
789
|
+
select: function (context, sign, version) {
|
|
790
|
+
var nodeVersions = jsReleases.filter(function (i) {
|
|
791
|
+
return i.name === 'nodejs'
|
|
792
|
+
}).map(function (i) {
|
|
793
|
+
return i.version
|
|
794
|
+
})
|
|
795
|
+
return nodeVersions
|
|
796
|
+
.filter(generateSemverFilter(sign, version))
|
|
797
|
+
.map(function (v) {
|
|
798
|
+
return 'node ' + v
|
|
799
|
+
})
|
|
800
|
+
}
|
|
801
|
+
},
|
|
748
802
|
{
|
|
749
803
|
regexp: /^(\w+)\s*(>=?|<=?)\s*([\d.]+)$/,
|
|
750
804
|
select: function (context, name, sign, version) {
|
package/node.js
CHANGED
|
@@ -6,7 +6,7 @@ var BrowserslistError = require('./error')
|
|
|
6
6
|
|
|
7
7
|
var IS_SECTION = /^\s*\[(.+)\]\s*$/
|
|
8
8
|
var CONFIG_PATTERN = /^browserslist-config-/
|
|
9
|
-
var SCOPED_CONFIG__PATTERN = /@[
|
|
9
|
+
var SCOPED_CONFIG__PATTERN = /@[^/]+\/browserslist-config(-|$|\/)/
|
|
10
10
|
var TIME_TO_UPDATE_CANIUSE = 6 * 30 * 24 * 60 * 60 * 1000
|
|
11
11
|
var FORMAT = 'Browserslist config should be a string or an array ' +
|
|
12
12
|
'of strings with browser queries'
|
|
@@ -14,14 +14,13 @@ var FORMAT = 'Browserslist config should be a string or an array ' +
|
|
|
14
14
|
var dataTimeChecked = false
|
|
15
15
|
var filenessCache = { }
|
|
16
16
|
var configCache = { }
|
|
17
|
-
|
|
18
17
|
function checkExtend (name) {
|
|
19
18
|
var use = ' Use `dangerousExtend` option to disable.'
|
|
20
19
|
if (!CONFIG_PATTERN.test(name) && !SCOPED_CONFIG__PATTERN.test(name)) {
|
|
21
20
|
throw new BrowserslistError(
|
|
22
21
|
'Browserslist config needs `browserslist-config-` prefix. ' + use)
|
|
23
22
|
}
|
|
24
|
-
if (name.indexOf('.') !== -1) {
|
|
23
|
+
if (name.replace(/^@[^/]+\//, '').indexOf('.') !== -1) {
|
|
25
24
|
throw new BrowserslistError(
|
|
26
25
|
'`.` not allowed in Browserslist config name. ' + use)
|
|
27
26
|
}
|
|
@@ -87,10 +86,9 @@ function parsePackage (file) {
|
|
|
87
86
|
'`browserlist` key instead of `browserslist` in ' + file)
|
|
88
87
|
}
|
|
89
88
|
var list = config.browserslist
|
|
90
|
-
if (Array.isArray(list)) {
|
|
89
|
+
if (Array.isArray(list) || typeof list === 'string') {
|
|
91
90
|
list = { defaults: list }
|
|
92
91
|
}
|
|
93
|
-
|
|
94
92
|
for (var i in list) {
|
|
95
93
|
check(list[i])
|
|
96
94
|
}
|
|
@@ -308,7 +306,8 @@ module.exports = {
|
|
|
308
306
|
})
|
|
309
307
|
console.warn(
|
|
310
308
|
'Browserslist: caniuse-lite is outdated. ' +
|
|
311
|
-
'Please run next command `' + command + '
|
|
309
|
+
'Please run next command `' + command + '`'
|
|
310
|
+
)
|
|
312
311
|
}
|
|
313
312
|
},
|
|
314
313
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "browserslist",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.5.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.30000949",
|
|
15
|
+
"electron-to-chromium": "^1.3.116",
|
|
16
|
+
"node-releases": "^1.1.11"
|
|
17
17
|
},
|
|
18
18
|
"bin": "./cli.js",
|
|
19
19
|
"browser": {
|