browserslist 4.16.6 → 4.17.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/README.md CHANGED
@@ -98,6 +98,8 @@ Browserslist will take queries from tool option,
98
98
  * [`browserslist-browserstack`] runs BrowserStack tests for all browsers
99
99
  in Browserslist config.
100
100
  * [`browserslist-adobe-analytics`] use Adobe Analytics data to target browsers.
101
+ * [`browserslist-new-relic`] generate a custom usage data file for Browserslist
102
+ from your New Relic Browser data.
101
103
  * [`caniuse-api`] returns browsers which support some specific feature.
102
104
  * Run `npx browserslist` in your project directory to see project’s
103
105
  target browsers. This CLI tool is built-in and available in any project
@@ -110,6 +112,7 @@ Browserslist will take queries from tool option,
110
112
  [`browserslist-ga-export`]: https://github.com/browserslist/browserslist-ga-export
111
113
  [`browserslist-useragent`]: https://github.com/pastelsky/browserslist-useragent
112
114
  [`browserslist-ga`]: https://github.com/browserslist/browserslist-ga
115
+ [`browserslist-new-relic`]: https://github.com/syntactic-salt/browserslist-new-relic
113
116
  [`caniuse-api`]: https://github.com/Nyalab/caniuse-api
114
117
 
115
118
 
@@ -213,7 +216,7 @@ intersection of all the previous queries:
213
216
  `last 1 version or chrome > 75 and > 1%` will select
214
217
  (`browser last version` or `Chrome since 76`) and `more than 1% marketshare`.
215
218
 
216
- There is 3 different ways to combine queries as depicted below. First you start
219
+ There are 3 different ways to combine queries as depicted below. First you start
217
220
  with a single query and then we combine the queries to get our final list.
218
221
 
219
222
  Obviously you can *not* start with a `not` combiner, since there is no left-hand
@@ -235,7 +238,8 @@ You can specify the browser and Node.js versions by queries (case insensitive):
235
238
 
236
239
  * `defaults`: Browserslist’s default browsers
237
240
  (`> 0.5%, last 2 versions, Firefox ESR, not dead`).
238
- * `> 5%`: browsers versions selected by global usage statistics.
241
+ * By usage statistics:
242
+ * `> 5%`: browsers versions selected by global usage statistics.
239
243
  `>=`, `<` and `<=` work too.
240
244
  * `> 5% in US`: uses USA usage statistics.
241
245
  It accepts [two-letter country code].
@@ -247,19 +251,22 @@ You can specify the browser and Node.js versions by queries (case insensitive):
247
251
  * `cover 99.5%`: most popular browsers that provide coverage.
248
252
  * `cover 99.5% in US`: same as above, with [two-letter country code].
249
253
  * `cover 99.5% in my stats`: uses [custom usage data].
250
- * `dead`: browsers without official support or updates for 24 months.
251
- Right now it is `IE 10`, `IE_Mob 11`, `BlackBerry 10`, `BlackBerry 7`,
252
- `Samsung 4` and `OperaMobile 12.1`.
253
- * `last 2 versions`: the last 2 versions for *each* browser.
254
+ * Last versions:
255
+ * `last 2 versions`: the last 2 versions for *each* browser.
254
256
  * `last 2 Chrome versions`: the last 2 versions of Chrome browser.
255
257
  * `last 2 major versions` or `last 2 iOS major versions`:
256
258
  all minor/patch releases of last 2 major versions.
257
- * `node 10` and `node 10.4`: selects latest Node.js `10.x.x`
259
+ * `dead`: browsers without official support or updates for 24 months.
260
+ Right now it is `IE 10`, `IE_Mob 11`, `BlackBerry 10`, `BlackBerry 7`,
261
+ `Samsung 4` and `OperaMobile 12.1`.
262
+ * Node.js versions:
263
+ * `node 10` and `node 10.4`: selects latest Node.js `10.x.x`
258
264
  or `10.4.x` release.
259
265
  * `current node`: Node.js version used by Browserslist right now.
260
266
  * `maintained node versions`: all Node.js versions, which are [still maintained]
261
267
  by Node.js Foundation.
262
- * `iOS 7`: the iOS browser version 7 directly.
268
+ * Browsers versions:
269
+ * `iOS 7`: the iOS browser version 7 directly.
263
270
  * `Firefox > 20`: versions of Firefox newer than 20.
264
271
  `>=`, `<` and `<=` work too. It also works with Node.js.
265
272
  * `ie 6-8`: selects an inclusive range of versions.
@@ -565,9 +572,11 @@ Options:
565
572
  * `dangerousExtend`: Disable security checks for `extend` query.
566
573
  Default is `false`.
567
574
  * `mobileToDesktop`: Use desktop browsers if Can I Use doesn’t have data
568
- about this mobile version. For instance, Browserslist will return
569
- `chrome 20` on `and_chr 20` query (Can I Use has only data only about
570
- latest versions of mobile browsers). Default is `false`.
575
+ about this mobile version. Can I Use has only data only about
576
+ latest versions of mobile browsers. By default, `last 2 and_ff versions`
577
+ returns `and_ff 90` and with this option it returns `and_ff 91, and_ff 90`.
578
+ This option may lead to unknown browser version error (in example Can I Use
579
+ doesn’t have data for `and_ff 91` yet). Default is `false`.
571
580
 
572
581
  For non-JS environment and debug purpose you can use CLI tool:
573
582
 
package/index.js CHANGED
@@ -1039,7 +1039,7 @@ var QUERIES = [
1039
1039
  {
1040
1040
  regexp: /^(firefox|ff|fx)\s+esr$/i,
1041
1041
  select: function () {
1042
- return ['firefox 78']
1042
+ return ['firefox 78', 'firefox 91']
1043
1043
  }
1044
1044
  },
1045
1045
  {
package/node.js CHANGED
@@ -113,6 +113,9 @@ function latestReleaseTime (agents) {
113
113
  }
114
114
 
115
115
  function normalizeStats (data, stats) {
116
+ if (!data) {
117
+ data = {}
118
+ }
116
119
  if (stats && 'dataByBrowser' in stats) {
117
120
  stats = stats.dataByBrowser
118
121
  }
@@ -372,9 +375,8 @@ module.exports = {
372
375
  if (latest !== 0 && latest < halfYearAgo) {
373
376
  console.warn(
374
377
  'Browserslist: caniuse-lite is outdated. Please run:\n' +
375
- 'npx browserslist@latest --update-db\n' +
376
- '\n' +
377
- 'Why you should do it regularly:\n' +
378
+ ' npx browserslist@latest --update-db\n' +
379
+ ' Why you should do it regularly: ' +
378
380
  'https://github.com/browserslist/browserslist#browsers-data-updating'
379
381
  )
380
382
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "browserslist",
3
- "version": "4.16.6",
3
+ "version": "4.17.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,11 +15,11 @@
15
15
  "license": "MIT",
16
16
  "repository": "browserslist/browserslist",
17
17
  "dependencies": {
18
- "caniuse-lite": "^1.0.30001219",
19
- "colorette": "^1.2.2",
20
- "electron-to-chromium": "^1.3.723",
18
+ "caniuse-lite": "^1.0.30001259",
19
+ "electron-to-chromium": "^1.3.846",
21
20
  "escalade": "^3.1.1",
22
- "node-releases": "^1.1.71"
21
+ "nanocolors": "^0.1.5",
22
+ "node-releases": "^1.1.76"
23
23
  },
24
24
  "engines": {
25
25
  "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
package/update-db.js CHANGED
@@ -1,15 +1,15 @@
1
1
  var childProcess = require('child_process')
2
- var colorette = require('colorette')
2
+ var nanocolors = require('nanocolors')
3
3
  var escalade = require('escalade/sync')
4
4
  var path = require('path')
5
5
  var fs = require('fs')
6
6
 
7
7
  var BrowserslistError = require('./error')
8
8
 
9
- var red = colorette.red
10
- var bold = colorette.bold
11
- var green = colorette.green
12
- var yellow = colorette.yellow
9
+ var red = nanocolors.red
10
+ var bold = nanocolors.bold
11
+ var green = nanocolors.green
12
+ var yellow = nanocolors.yellow
13
13
 
14
14
  function detectLockfile () {
15
15
  var packageDir = escalade('.', function (dir, names) {
@@ -33,7 +33,10 @@ function detectLockfile () {
33
33
  } else if (fs.existsSync(lockfileNpm)) {
34
34
  return { mode: 'npm', file: lockfileNpm }
35
35
  } else if (fs.existsSync(lockfileYarn)) {
36
- return { mode: 'yarn', file: lockfileYarn }
36
+ var lock = { mode: 'yarn', file: lockfileYarn }
37
+ lock.content = fs.readFileSync(lock.file).toString()
38
+ lock.version = /# yarn lockfile v1/.test(lock.content) ? 1 : 2
39
+ return lock
37
40
  } else if (fs.existsSync(lockfileShrinkwrap)) {
38
41
  return { mode: 'npm', file: lockfileShrinkwrap }
39
42
  }
@@ -44,9 +47,15 @@ function detectLockfile () {
44
47
 
45
48
  function getLatestInfo (lock) {
46
49
  if (lock.mode === 'yarn') {
47
- return JSON.parse(
48
- childProcess.execSync('yarn info caniuse-lite --json').toString()
49
- ).data
50
+ if (lock.version === 1) {
51
+ return JSON.parse(
52
+ childProcess.execSync('yarn info caniuse-lite --json').toString()
53
+ ).data
54
+ } else {
55
+ return JSON.parse(
56
+ childProcess.execSync('yarn npm info caniuse-lite --json').toString()
57
+ )
58
+ }
50
59
  }
51
60
  return JSON.parse(
52
61
  childProcess.execSync('npm show caniuse-lite --json').toString()
@@ -187,7 +196,7 @@ function updatePnpmLockfile (lock, latest) {
187
196
  }
188
197
 
189
198
  function updateLockfile (lock, latest) {
190
- lock.content = fs.readFileSync(lock.file).toString()
199
+ if (!lock.content) lock.content = fs.readFileSync(lock.file).toString()
191
200
 
192
201
  if (lock.mode === 'npm') {
193
202
  return updateNpmLockfile(lock, latest)
@@ -197,21 +206,7 @@ function updateLockfile (lock, latest) {
197
206
  return updatePnpmLockfile(lock, latest)
198
207
  }
199
208
 
200
- module.exports = function updateDB (print) {
201
- var lock = detectLockfile()
202
- var latest = getLatestInfo(lock)
203
- var browsersListRetrievalError
204
- var oldBrowsersList
205
- try {
206
- oldBrowsersList = getBrowsersList()
207
- } catch (e) {
208
- browsersListRetrievalError = e
209
- }
210
-
211
- print(
212
- 'Latest version: ' + bold(green(latest.version)) + '\n'
213
- )
214
-
209
+ function updatePackageManually (print, lock, latest) {
215
210
  var lockfileData = updateLockfile(lock, latest)
216
211
  var caniuseVersions = Object.keys(lockfileData.versions).sort()
217
212
  if (caniuseVersions.length === 1 &&
@@ -260,6 +255,46 @@ module.exports = function updateDB (print) {
260
255
  yellow('$ ' + del + ' caniuse-lite') + '\n'
261
256
  )
262
257
  childProcess.execSync(del + ' caniuse-lite')
258
+ }
259
+
260
+ module.exports = function updateDB (print) {
261
+ var lock = detectLockfile()
262
+ var latest = getLatestInfo(lock)
263
+
264
+ var browsersListRetrievalError
265
+ var oldBrowsersList
266
+ try {
267
+ oldBrowsersList = getBrowsersList()
268
+ } catch (e) {
269
+ browsersListRetrievalError = e
270
+ }
271
+
272
+ print(
273
+ 'Latest version: ' + bold(green(latest.version)) + '\n'
274
+ )
275
+
276
+ if (lock.mode === 'yarn' && lock.version !== 1) {
277
+ var update = 'yarn up -R'
278
+ print(
279
+ 'Updating caniuse-lite version\n' +
280
+ yellow('$ ' + update + ' caniuse-lite') + '\n'
281
+ )
282
+ try {
283
+ childProcess.execSync(update + ' caniuse-lite')
284
+ } catch (e) /* istanbul ignore next */ {
285
+ print(
286
+ red(
287
+ '\n' +
288
+ e.stack + '\n\n' +
289
+ 'Problem with `' + update + ' caniuse-lite` call. ' +
290
+ 'Run it manually.\n'
291
+ )
292
+ )
293
+ process.exit(1)
294
+ }
295
+ } else {
296
+ updatePackageManually(print, lock, latest)
297
+ }
263
298
 
264
299
  print('caniuse-lite has been successfully updated\n')
265
300