browserslist 4.16.5 → 4.17.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/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.
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.5",
3
+ "version": "4.17.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",
@@ -15,11 +15,11 @@
15
15
  "license": "MIT",
16
16
  "repository": "browserslist/browserslist",
17
17
  "dependencies": {
18
- "caniuse-lite": "^1.0.30001214",
19
- "colorette": "^1.2.2",
20
- "electron-to-chromium": "^1.3.719",
18
+ "caniuse-lite": "^1.0.30001254",
19
+ "colorette": "^1.3.0",
20
+ "electron-to-chromium": "^1.3.830",
21
21
  "escalade": "^3.1.1",
22
- "node-releases": "^1.1.71"
22
+ "node-releases": "^1.1.75"
23
23
  },
24
24
  "engines": {
25
25
  "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
package/update-db.js CHANGED
@@ -24,6 +24,7 @@ function detectLockfile () {
24
24
  }
25
25
 
26
26
  var lockfileNpm = path.join(packageDir, 'package-lock.json')
27
+ var lockfileShrinkwrap = path.join(packageDir, 'npm-shrinkwrap.json')
27
28
  var lockfileYarn = path.join(packageDir, 'yarn.lock')
28
29
  var lockfilePnpm = path.join(packageDir, 'pnpm-lock.yaml')
29
30
 
@@ -32,7 +33,12 @@ function detectLockfile () {
32
33
  } else if (fs.existsSync(lockfileNpm)) {
33
34
  return { mode: 'npm', file: lockfileNpm }
34
35
  } else if (fs.existsSync(lockfileYarn)) {
35
- 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
40
+ } else if (fs.existsSync(lockfileShrinkwrap)) {
41
+ return { mode: 'npm', file: lockfileShrinkwrap }
36
42
  }
37
43
  throw new BrowserslistError(
38
44
  'No lockfile found. Run "npm install", "yarn install" or "pnpm install"'
@@ -41,9 +47,15 @@ function detectLockfile () {
41
47
 
42
48
  function getLatestInfo (lock) {
43
49
  if (lock.mode === 'yarn') {
44
- return JSON.parse(
45
- childProcess.execSync('yarn info caniuse-lite --json').toString()
46
- ).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
+ }
47
59
  }
48
60
  return JSON.parse(
49
61
  childProcess.execSync('npm show caniuse-lite --json').toString()
@@ -184,7 +196,7 @@ function updatePnpmLockfile (lock, latest) {
184
196
  }
185
197
 
186
198
  function updateLockfile (lock, latest) {
187
- lock.content = fs.readFileSync(lock.file).toString()
199
+ if (!lock.content) lock.content = fs.readFileSync(lock.file).toString()
188
200
 
189
201
  if (lock.mode === 'npm') {
190
202
  return updateNpmLockfile(lock, latest)
@@ -194,21 +206,7 @@ function updateLockfile (lock, latest) {
194
206
  return updatePnpmLockfile(lock, latest)
195
207
  }
196
208
 
197
- module.exports = function updateDB (print) {
198
- var lock = detectLockfile()
199
- var latest = getLatestInfo(lock)
200
- var browsersListRetrievalError
201
- var oldBrowsersList
202
- try {
203
- oldBrowsersList = getBrowsersList()
204
- } catch (e) {
205
- browsersListRetrievalError = e
206
- }
207
-
208
- print(
209
- 'Latest version: ' + bold(green(latest.version)) + '\n'
210
- )
211
-
209
+ function updatePackageManually (print, lock, latest) {
212
210
  var lockfileData = updateLockfile(lock, latest)
213
211
  var caniuseVersions = Object.keys(lockfileData.versions).sort()
214
212
  if (caniuseVersions.length === 1 &&
@@ -257,6 +255,46 @@ module.exports = function updateDB (print) {
257
255
  yellow('$ ' + del + ' caniuse-lite') + '\n'
258
256
  )
259
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
+ }
260
298
 
261
299
  print('caniuse-lite has been successfully updated\n')
262
300