browserslist 2.1.0 → 2.1.4
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 +12 -2
- package/cli.js +66 -64
- package/index.js +17 -4
- package/package.json +8 -5
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
|
+
## 2.1.4
|
|
5
|
+
* Use both ESR versions when they actual.
|
|
6
|
+
|
|
7
|
+
## 2.1.3
|
|
8
|
+
* Add warning on first exclude query.
|
|
9
|
+
|
|
10
|
+
## 2.1.2
|
|
11
|
+
* Fix non-Node.js environments support.
|
|
12
|
+
|
|
13
|
+
## 2.1.1
|
|
14
|
+
* Fix CLI arguments parsing.
|
|
15
|
+
|
|
4
16
|
## 2.1
|
|
5
17
|
* Add `>= 5%`, `>= 5% in US` and `>= 5% in my stats` queries.
|
|
6
18
|
|
package/README.md
CHANGED
|
@@ -1,8 +1,17 @@
|
|
|
1
1
|
# Browserslist
|
|
2
2
|
|
|
3
|
+
<img align="right" width="100" height="100"
|
|
4
|
+
src="http://ai.github.io/browserslist/logo.svg"
|
|
5
|
+
title="Browserslist logo by Anton Lovchikov">
|
|
6
|
+
|
|
3
7
|
Library to share supported browsers list between different front-end tools.
|
|
4
|
-
It is used in
|
|
5
|
-
|
|
8
|
+
It is used in:
|
|
9
|
+
|
|
10
|
+
* [Autoprefixer]
|
|
11
|
+
* [babel-env-preset] (no config support, only tool option)
|
|
12
|
+
* [eslint-plugin-compat]
|
|
13
|
+
* [stylelint-no-unsupported-browser-features]
|
|
14
|
+
* [postcss-normalize]
|
|
6
15
|
|
|
7
16
|
All tools that rely on Browserslist will find its config automatically,
|
|
8
17
|
when you add the following to `package.json`:
|
|
@@ -47,6 +56,7 @@ You can test Browserslist queries in [online demo].
|
|
|
47
56
|
[stylelint-no-unsupported-browser-features]: https://github.com/ismay/stylelint-no-unsupported-browser-features
|
|
48
57
|
[eslint-plugin-compat]: https://github.com/amilajack/eslint-plugin-compat
|
|
49
58
|
[babel-env-preset]: https://github.com/babel/babel-preset-env
|
|
59
|
+
[postcss-normalize]: https://github.com/jonathantneal/postcss-normalize
|
|
50
60
|
[Autoprefixer]: https://github.com/postcss/autoprefixer
|
|
51
61
|
[online demo]: http://browserl.ist/
|
|
52
62
|
[Can I Use]: http://caniuse.com/
|
package/cli.js
CHANGED
|
@@ -4,92 +4,94 @@ var browserslist = require('./');
|
|
|
4
4
|
var pkg = require('./package.json');
|
|
5
5
|
var args = process.argv.slice(2);
|
|
6
6
|
|
|
7
|
+
var USAGE = 'Usage:\n' +
|
|
8
|
+
' ' + pkg.name + ' "QUERIES"\n' +
|
|
9
|
+
' ' + pkg.name + ' --coverage "QUERIES"\n' +
|
|
10
|
+
' ' + pkg.name + ' --coverage=US "QUERIES"\n' +
|
|
11
|
+
' ' + pkg.name + ' --config="path/to/browserlist/file"\n' +
|
|
12
|
+
' ' + pkg.name + ' --env="environment name defined in config"\n' +
|
|
13
|
+
' ' + pkg.name + ' --stats="path/to/browserlist/stats/file"';
|
|
14
|
+
|
|
7
15
|
function isArg(arg) {
|
|
8
16
|
return args.some(function (str) {
|
|
9
17
|
return str === arg || str.indexOf(arg + '=') === 0;
|
|
10
18
|
});
|
|
11
19
|
}
|
|
12
20
|
|
|
13
|
-
function getArgValue(arg) {
|
|
14
|
-
var found = args.filter(function (str) {
|
|
15
|
-
return str.indexOf(arg + '=') === 0;
|
|
16
|
-
})[0];
|
|
17
|
-
var value = found && found.split('=')[1];
|
|
18
|
-
return value && value.replace(/^['"]|['"]$/g, '');
|
|
19
|
-
}
|
|
20
|
-
|
|
21
21
|
function error(msg) {
|
|
22
22
|
process.stderr.write(pkg.name + ': ' + msg + '\n');
|
|
23
23
|
process.exit(1);
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
return browserslist(queries, opts);
|
|
29
|
-
} catch (e) {
|
|
30
|
-
if ( e.name === 'BrowserslistError' ) {
|
|
31
|
-
return error(e.message);
|
|
32
|
-
} else {
|
|
33
|
-
throw e;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
if ( args.length === 0 || isArg('--help') || isArg('-h') ) {
|
|
39
|
-
process.stdout.write([
|
|
40
|
-
pkg.description,
|
|
41
|
-
'',
|
|
42
|
-
'Usage:',
|
|
43
|
-
' ' + pkg.name + ' "QUERIES"',
|
|
44
|
-
' ' + pkg.name + ' --coverage "QUERIES"',
|
|
45
|
-
' ' + pkg.name + ' --coverage=US "QUERIES"',
|
|
46
|
-
' ' + pkg.name + ' --config=browserslist "path/to/browserlist/file"',
|
|
47
|
-
' ' + pkg.name + ' --env="environment name defined in config"',
|
|
48
|
-
' ' + pkg.name + ' --stats="path/to/browserlist/stats/file"'
|
|
49
|
-
].join('\n') + '\n');
|
|
26
|
+
if ( isArg('--help') || isArg('-h') ) {
|
|
27
|
+
process.stdout.write(pkg.description + '.\n\n' + USAGE + '\n');
|
|
50
28
|
|
|
51
29
|
} else if ( isArg('--version') || isArg('-v') ) {
|
|
52
30
|
process.stdout.write(pkg.name + ' ' + pkg.version + '\n');
|
|
53
31
|
|
|
54
|
-
} else
|
|
55
|
-
var
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
32
|
+
} else {
|
|
33
|
+
var mode = 'browsers';
|
|
34
|
+
var opts = { };
|
|
35
|
+
var queries;
|
|
36
|
+
var country;
|
|
37
|
+
|
|
38
|
+
for ( var i = 0; i < args.length; i++ ) {
|
|
39
|
+
if ( args[i][0] !== '-' ) {
|
|
40
|
+
queries = args[i].replace(/^['"]|['"]$/g, '');
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
59
43
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
44
|
+
var arg = args[i].split('=');
|
|
45
|
+
var name = arg[0];
|
|
46
|
+
var value = arg[1];
|
|
47
|
+
|
|
48
|
+
if ( value ) value = value.replace(/^['"]|['"]$/g, '');
|
|
49
|
+
|
|
50
|
+
if ( name === '--config' || name === '-b' ) {
|
|
51
|
+
opts.config = value;
|
|
52
|
+
} else if ( name === '--env' || name === '-e' ) {
|
|
53
|
+
opts.env = value;
|
|
54
|
+
} else if ( name === '--stats' || name === '-s' ) {
|
|
55
|
+
opts.stats = value;
|
|
56
|
+
} else if ( name === '--coverage' || name === '-c' ) {
|
|
57
|
+
mode = 'coverage';
|
|
58
|
+
if ( value ) country = value;
|
|
59
|
+
} else {
|
|
60
|
+
error('Unknown arguments ' + args[i] + '.\n\n' + USAGE);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
63
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
end = 'in the ' + country.toUpperCase();
|
|
64
|
+
if ( !queries && !opts.config ) {
|
|
65
|
+
error('Define queries or browserslist config path.\n\n' + USAGE);
|
|
67
66
|
}
|
|
68
67
|
|
|
69
|
-
|
|
70
|
-
|
|
68
|
+
var browsers;
|
|
69
|
+
try {
|
|
70
|
+
browsers = browserslist(queries, opts);
|
|
71
|
+
} catch (e) {
|
|
72
|
+
if ( e.name === 'BrowserslistError' ) {
|
|
73
|
+
error(e.message);
|
|
74
|
+
} else {
|
|
75
|
+
throw e;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
71
78
|
|
|
72
|
-
} else if ( args.length === 1 && args[0][0] !== '-' ) {
|
|
73
|
-
query(args[0]).forEach(function (browser) {
|
|
74
|
-
process.stdout.write(browser + '\n');
|
|
75
|
-
});
|
|
76
79
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
80
|
+
if ( mode === 'browsers' ) {
|
|
81
|
+
browsers.forEach(function (browser) {
|
|
82
|
+
process.stdout.write(browser + '\n');
|
|
83
|
+
});
|
|
84
|
+
} else {
|
|
85
|
+
var result = browserslist.coverage(browsers, country);
|
|
86
|
+
var round = Math.round(result * 100) / 100.0;
|
|
81
87
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
88
|
+
var end = 'globally';
|
|
89
|
+
if (country && country !== 'global') {
|
|
90
|
+
end = 'in the ' + country.toUpperCase();
|
|
91
|
+
}
|
|
85
92
|
|
|
86
|
-
|
|
87
|
-
|
|
93
|
+
process.stdout.write(
|
|
94
|
+
'These browsers account for ' + round + '% of all users ' +
|
|
95
|
+
end + '\n');
|
|
88
96
|
}
|
|
89
|
-
|
|
90
|
-
query(null, opts).forEach(function (browser) {
|
|
91
|
-
process.stdout.write(browser + '\n');
|
|
92
|
-
});
|
|
93
|
-
} else {
|
|
94
|
-
error('Unknown arguments. Use --help to pick right one.');
|
|
95
97
|
}
|
package/index.js
CHANGED
|
@@ -51,6 +51,9 @@ var filenessCache = {};
|
|
|
51
51
|
var configCache = {};
|
|
52
52
|
|
|
53
53
|
function isFile(file) {
|
|
54
|
+
if ( !fs.existsSync ) {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
54
57
|
if ( file in filenessCache ) {
|
|
55
58
|
return filenessCache[file];
|
|
56
59
|
}
|
|
@@ -167,7 +170,11 @@ var browserslist = function (queries, opts) {
|
|
|
167
170
|
queries = process.env.BROWSERSLIST;
|
|
168
171
|
} else if ( opts.config || process.env.BROWSERSLIST_CONFIG ) {
|
|
169
172
|
var file = opts.config || process.env.BROWSERSLIST_CONFIG;
|
|
170
|
-
|
|
173
|
+
if ( path.basename(file) === 'package.json' ) {
|
|
174
|
+
queries = pickEnv(parsePackage(file), opts);
|
|
175
|
+
} else {
|
|
176
|
+
queries = pickEnv(browserslist.readConfig(file), opts);
|
|
177
|
+
}
|
|
171
178
|
} else if ( opts.path ) {
|
|
172
179
|
queries = pickEnv(browserslist.findConfig(opts.path), opts);
|
|
173
180
|
}
|
|
@@ -204,11 +211,17 @@ var browserslist = function (queries, opts) {
|
|
|
204
211
|
|
|
205
212
|
var result = [];
|
|
206
213
|
|
|
207
|
-
queries.forEach(function (selection) {
|
|
214
|
+
queries.forEach(function (selection, index) {
|
|
208
215
|
if ( selection.trim() === '' ) return;
|
|
209
216
|
|
|
210
217
|
var exclude = selection.indexOf('not ') === 0;
|
|
211
|
-
if ( exclude )
|
|
218
|
+
if ( exclude ) {
|
|
219
|
+
if ( index === 0 ) {
|
|
220
|
+
error('Write any browsers query (for instance, `defaults`) ' +
|
|
221
|
+
'before `' + selection + '`');
|
|
222
|
+
}
|
|
223
|
+
selection = selection.slice(4);
|
|
224
|
+
}
|
|
212
225
|
|
|
213
226
|
for ( var i in browserslist.queries ) {
|
|
214
227
|
var type = browserslist.queries[i];
|
|
@@ -609,7 +622,7 @@ browserslist.queries = {
|
|
|
609
622
|
esr: {
|
|
610
623
|
regexp: /^(firefox|ff|fx)\s+esr$/i,
|
|
611
624
|
select: function () {
|
|
612
|
-
return ['firefox 52'];
|
|
625
|
+
return ['firefox 52', 'firefox 45'];
|
|
613
626
|
}
|
|
614
627
|
},
|
|
615
628
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "browserslist",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.4",
|
|
4
4
|
"description": "Share browsers list between different front-end tools, like Autoprefixer, Stylelint and babel-env-preset",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"caniuse",
|
|
@@ -10,16 +10,16 @@
|
|
|
10
10
|
"license": "MIT",
|
|
11
11
|
"repository": "ai/browserslist",
|
|
12
12
|
"dependencies": {
|
|
13
|
-
"caniuse-lite": "^1.0.
|
|
14
|
-
"electron-to-chromium": "^1.3.
|
|
13
|
+
"caniuse-lite": "^1.0.30000670",
|
|
14
|
+
"electron-to-chromium": "^1.3.11"
|
|
15
15
|
},
|
|
16
16
|
"bin": "./cli.js",
|
|
17
17
|
"devDependencies": {
|
|
18
18
|
"cross-spawn": "^5.1.0",
|
|
19
19
|
"eslint": "^3.19.0",
|
|
20
20
|
"eslint-config-postcss": "^2.0.2",
|
|
21
|
-
"jest": "^
|
|
22
|
-
"lint-staged": "^3.4.
|
|
21
|
+
"jest": "^20.0.3",
|
|
22
|
+
"lint-staged": "^3.4.2",
|
|
23
23
|
"pre-commit": "^1.1.3",
|
|
24
24
|
"yaspeller-ci": "^0.4.0"
|
|
25
25
|
},
|
|
@@ -50,6 +50,9 @@
|
|
|
50
50
|
"*.md": "yaspeller-ci",
|
|
51
51
|
"*.js": "eslint"
|
|
52
52
|
},
|
|
53
|
+
"browser": {
|
|
54
|
+
"fs": false
|
|
55
|
+
},
|
|
53
56
|
"pre-commit": [
|
|
54
57
|
"lint-staged"
|
|
55
58
|
]
|