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 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 [Autoprefixer], [babel-env-preset], [eslint-plugin-compat]
5
- and [stylelint-no-unsupported-browser-features].
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
- function query(queries, opts) {
27
- try {
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 if ( isArg('--coverage') || isArg('-c') ) {
55
- var browsers = args.find(function (i) {
56
- return i[0] !== '-';
57
- });
58
- if ( !browsers ) error('Define a browsers query to get coverage');
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
- var country = getArgValue('--coverage') || getArgValue('-c');
61
- var result = browserslist.coverage(query(browsers), country);
62
- var round = Math.round(result * 100) / 100.0;
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
- var end = 'globally';
65
- if (country && country !== 'global') {
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
- process.stdout.write(
70
- 'These browsers account for ' + round + '% of all users ' + end + '\n');
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
- } else if (isArg('--config') || isArg('-b')) {
78
- var opts = {
79
- config: getArgValue('--config') || getArgValue('-b')
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
- if (isArg('--env') || isArg('-e')) {
83
- opts.env = getArgValue('--env') || getArgValue('-e');
84
- }
88
+ var end = 'globally';
89
+ if (country && country !== 'global') {
90
+ end = 'in the ' + country.toUpperCase();
91
+ }
85
92
 
86
- if (isArg('--stats') || isArg('-s')) {
87
- opts.stats = getArgValue('--stats') || getArgValue('-s');
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
- queries = pickEnv(browserslist.readConfig(file), opts);
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 ) selection = selection.slice(4);
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.0",
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.30000659",
14
- "electron-to-chromium": "^1.3.8"
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": "^19.0.2",
22
- "lint-staged": "^3.4.0",
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
  ]