browserslist 4.5.3 → 4.6.0

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,19 @@
1
1
  # Change Log
2
2
  This project adheres to [Semantic Versioning](http://semver.org/).
3
3
 
4
+ ## 4.6
5
+ * Add `mobileToDesktop` option (by Nicolò Ribaudo).
6
+
7
+ ## 4.5.6
8
+ * Make `Node > 5` and `node > 5` queries case insensitive.
9
+
10
+ ## 4.5.5
11
+ * Fix CLI help (by Marcel Gerber).
12
+ * Add KaiOS browser to docs.
13
+
14
+ ## 4.5.4
15
+ * Update docs (by Andrew Leedham and Dan Onoshko).
16
+
4
17
  ## 4.5.3
5
18
  * Fix splitting string to queries.
6
19
 
package/README.md CHANGED
@@ -73,19 +73,51 @@ 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.
76
+ * [`browserslist-useragent-regexp`] compiles Browserslist query to a RegExp
77
+ to test browser useragent.
78
78
  * [`browserslist-useragent-ruby`] is a Ruby library to checks browser
79
79
  by user agent string to match Browserslist.
80
+ * [`browserslist-browserstack`] runs BrowserStack tests for all browsers
81
+ in Browserslist config.
80
82
  * [`caniuse-api`] returns browsers which support some specific feature.
81
83
  * Run `npx browserslist` in your project directory to see project’s
82
84
  target browsers. This CLI tool is built-in and available in any project
83
85
  with Autoprefixer.
84
86
 
85
- [`browserslist-useragent-ruby`]: https://github.com/browserslist/browserslist-useragent-ruby
86
- [`browserslist-useragent`]: https://github.com/pastelsky/browserslist-useragent
87
- [`browserslist-ga`]: https://github.com/browserslist/browserslist-ga
88
- [`caniuse-api`]: https://github.com/Nyalab/caniuse-api
87
+ [`browserslist-useragent-ruby`]: https://github.com/browserslist/browserslist-useragent-ruby
88
+ [`browserslist-useragent`]: https://github.com/pastelsky/browserslist-useragent
89
+ [`browserslist-useragent-regexp`]: https://github.com/browserslist/browserslist-useragent-regexp
90
+ [`browserslist-ga`]: https://github.com/browserslist/browserslist-ga
91
+ [`caniuse-api`]: https://github.com/Nyalab/caniuse-api
92
+ [`browserslist-browserstack`]: https://github.com/xeroxinteractive/browserslist-browserstack
93
+
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.
89
121
 
90
122
 
91
123
  ## Queries
@@ -128,25 +160,6 @@ _A quick way to test your query is to do `npx browserslist '> 0.5%, not IE 11'`
128
160
  in your terminal._
129
161
 
130
162
 
131
- ### Best Practices
132
-
133
- * Select browsers directly (`last 2 Chrome versions`) only if you are making
134
- a web app for a kiosk with one browser. There are a lot of browsers
135
- on the market. If you are making general web app you should respect
136
- browsers diversity.
137
- * If you want to change the default set of browsers we recommend to combine
138
- `last 1 version`, `not dead` with `> 0.2%` (or `> 1% in US`,
139
- `> 1% in my stats`). `last n versions` adds too many dead browsers
140
- and does not add popular old versions. Choosing a percentage above `0.2%`
141
- will in the long run make popular browsers even more popular. We might run
142
- into a monopoly and stagnation situation, as we had with Internet Explorer 6.
143
- Please use this setting with caution.
144
- * Don’t remove browsers just because you don’t know them. Opera Mini has
145
- 100 million users in Africa and it is more popular in the global market
146
- than Microsoft Edge. Chinese QQ Browsers has more market share than Firefox
147
- and desktop Safari altogether.
148
-
149
-
150
163
  ### Full List
151
164
 
152
165
  You can specify the browser and Node.js versions by queries (case insensitive):
@@ -256,6 +269,7 @@ Names are case insensitive:
256
269
  * `Safari` for desktop Safari.
257
270
  * `Samsung` for Samsung Internet.
258
271
  * `UCAndroid` or `and_uc` for UC Browser for Android.
272
+ * `kaios` for KaiOS Browser.
259
273
 
260
274
 
261
275
  ## `package.json`
@@ -485,6 +499,10 @@ Options:
485
499
  Default is `false.`
486
500
  * `dangerousExtend`: Disable security checks for `extend` query.
487
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`.
488
506
 
489
507
  For non-JS environment and debug purpose you can use CLI tool:
490
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,world "QUERIES"\n' +
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
@@ -136,11 +136,28 @@ function compareSemver (a, b) {
136
136
  )
137
137
  }
138
138
 
139
- function normalizeVersion (data, version) {
139
+ function resolveVersion (data, version) {
140
140
  if (data.versions.indexOf(version) !== -1) {
141
141
  return version
142
142
  } else if (browserslist.versionAliases[data.name][version]) {
143
143
  return browserslist.versionAliases[data.name][version]
144
+ } else {
145
+ return false
146
+ }
147
+ }
148
+
149
+ function normalizeVersion (data, version, context) {
150
+ var resolved = resolveVersion(data, version)
151
+ if (
152
+ !resolved &&
153
+ context.mobileToDesktop &&
154
+ browserslist.desktopNames[data.name]
155
+ ) {
156
+ var alias = checkName(browserslist.desktopNames[data.name])
157
+ resolved = resolveVersion(alias, version)
158
+ }
159
+ if (resolved) {
160
+ return resolved
144
161
  } else if (data.versions.length === 1) {
145
162
  return data.versions[0]
146
163
  } else {
@@ -274,6 +291,9 @@ function resolve (queries, context) {
274
291
  * version in direct query.
275
292
  * @param {boolean} [opts.dangerousExtend] Disable security checks
276
293
  * for extend query.
294
+ * @param {boolean} [opts.mobileToDesktop] Alias mobile browsers to the desktop
295
+ * version when Can I Use doesn't have
296
+ * data about the specified version.
277
297
  * @returns {string[]} Array with browser names in Can I Use.
278
298
  *
279
299
  * @example
@@ -302,7 +322,8 @@ function browserslist (queries, opts) {
302
322
 
303
323
  var context = {
304
324
  ignoreUnknownVersions: opts.ignoreUnknownVersions,
305
- dangerousExtend: opts.dangerousExtend
325
+ dangerousExtend: opts.dangerousExtend,
326
+ mobileToDesktop: opts.mobileToDesktop
306
327
  }
307
328
 
308
329
  env.oldDataWarning(browserslist.data)
@@ -427,6 +448,15 @@ browserslist.aliases = {
427
448
  qqandroid: 'and_qq'
428
449
  }
429
450
 
451
+ // Can I Use only provides a few versions for some browsers (e.g. and_chr).
452
+ // Fallback to a similar browser for unknown versions
453
+ browserslist.desktopNames = {
454
+ and_chr: 'chrome',
455
+ and_ff: 'firefox',
456
+ ie_mob: 'ie',
457
+ op_mob: 'opera'
458
+ }
459
+
430
460
  // Aliases to work with joined versions like `ios_saf 7.0-7.1`
431
461
  browserslist.versionAliases = { }
432
462
 
@@ -760,8 +790,8 @@ var QUERIES = [
760
790
  regexp: /^(\w+)\s+([\d.]+)\s*-\s*([\d.]+)$/i,
761
791
  select: function (context, name, from, to) {
762
792
  var data = checkName(name)
763
- from = parseFloat(normalizeVersion(data, from) || from)
764
- to = parseFloat(normalizeVersion(data, to) || to)
793
+ from = parseFloat(normalizeVersion(data, from, context) || from)
794
+ to = parseFloat(normalizeVersion(data, to, context) || to)
765
795
 
766
796
  function filter (v) {
767
797
  var parsed = parseFloat(v)
@@ -782,7 +812,7 @@ var QUERIES = [
782
812
  }
783
813
  },
784
814
  {
785
- regexp: /^node\s*(>=?|<=?)\s*([\d.]+)$/,
815
+ regexp: /^node\s*(>=?|<=?)\s*([\d.]+)$/i,
786
816
  select: function (context, sign, version) {
787
817
  var nodeVersions = jsReleases.filter(function (i) {
788
818
  return i.name === 'nodejs'
@@ -879,7 +909,7 @@ var QUERIES = [
879
909
  select: function (context, name, version) {
880
910
  if (/^tp$/i.test(version)) version = 'TP'
881
911
  var data = checkName(name)
882
- var alias = normalizeVersion(data, version)
912
+ var alias = normalizeVersion(data, version, context)
883
913
  if (alias) {
884
914
  version = alias
885
915
  } else {
@@ -888,7 +918,7 @@ var QUERIES = [
888
918
  } else {
889
919
  alias = version.replace(/\.0$/, '')
890
920
  }
891
- alias = normalizeVersion(data, alias)
921
+ alias = normalizeVersion(data, alias, context)
892
922
  if (alias) {
893
923
  version = alias
894
924
  } else if (context.ignoreUnknownVersions) {
package/node.js CHANGED
@@ -291,6 +291,7 @@ module.exports = {
291
291
  oldDataWarning: function oldDataWarning (agentsObj) {
292
292
  if (dataTimeChecked) return
293
293
  dataTimeChecked = true
294
+ if (process.env.BROWSERSLIST_IGNORE_OLD_DATA) return
294
295
 
295
296
  var latest = latestReleaseTime(agentsObj)
296
297
  var halfYearAgo = Date.now() - TIME_TO_UPDATE_CANIUSE
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "browserslist",
3
- "version": "4.5.3",
3
+ "version": "4.6.0",
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,18 +11,13 @@
11
11
  "license": "MIT",
12
12
  "repository": "browserslist/browserslist",
13
13
  "dependencies": {
14
- "caniuse-lite": "^1.0.30000955",
15
- "electron-to-chromium": "^1.3.122",
16
- "node-releases": "^1.1.12"
14
+ "caniuse-lite": "^1.0.30000967",
15
+ "electron-to-chromium": "^1.3.133",
16
+ "node-releases": "^1.1.19"
17
17
  },
18
18
  "bin": "./cli.js",
19
19
  "browser": {
20
20
  "./node.js": "./browser.js",
21
21
  "path": false
22
- },
23
- "husky": {
24
- "hooks": {
25
- "pre-commit": "lint-staged"
26
- }
27
22
  }
28
23
  }