browserslist 4.28.3 → 4.28.5

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.
Files changed (4) hide show
  1. package/cli.js +1 -0
  2. package/index.js +33 -7
  3. package/node.js +6 -1
  4. package/package.json +5 -5
package/cli.js CHANGED
@@ -38,6 +38,7 @@ if (isArg('--help') || isArg('-h')) {
38
38
  } else if (isArg('--version') || isArg('-v')) {
39
39
  process.stdout.write('browserslist ' + pkg.version + '\n')
40
40
  } else if (isArg('--update-db')) {
41
+ /* c8 ignore next 8 */
41
42
  process.stdout.write(
42
43
  'The --update-db command is deprecated.\n' +
43
44
  'Please use npx update-browserslist-db@latest instead.\n'
package/index.js CHANGED
@@ -7,13 +7,14 @@ var path = require('path')
7
7
 
8
8
  var BrowserslistError = require('./error')
9
9
  var env = require('./node')
10
- var parseWithoutCache = require('./parse')
10
+ var parseWithoutCache = require('./parse') // Will load browser.js in webpack
11
11
 
12
12
  var YEAR = 365.259641 * 24 * 60 * 60 * 1000
13
13
  var ANDROID_EVERGREEN_FIRST = '37'
14
14
  var OP_MOB_BLINK_FIRST = 14
15
15
  var FIREFOX_ESR_VERSION = '140'
16
16
 
17
+ // Helpers
17
18
 
18
19
  function isVersionsMatch(versionA, versionB) {
19
20
  return (versionA + '.').indexOf(versionB + '.') === 0
@@ -80,22 +81,21 @@ function fillUsage(result, name, data) {
80
81
  }
81
82
 
82
83
  function generateFilter(sign, version) {
83
- version = parseFloat(version)
84
84
  if (sign === '>') {
85
85
  return function (v) {
86
- return parseLatestFloat(v) > version
86
+ return parseLatestFloat(v) > parseLatestFloat(version)
87
87
  }
88
88
  } else if (sign === '>=') {
89
89
  return function (v) {
90
- return parseLatestFloat(v) >= version
90
+ return parseLatestFloat(v) >= parseLatestFloat(version)
91
91
  }
92
92
  } else if (sign === '<') {
93
93
  return function (v) {
94
- return parseFloat(v) < version
94
+ return parseFloat(v) < parseFloat(version)
95
95
  }
96
96
  } else {
97
97
  return function (v) {
98
- return parseFloat(v) <= version
98
+ return parseFloat(v) <= parseFloat(version)
99
99
  }
100
100
  }
101
101
 
@@ -149,11 +149,14 @@ function compareSemver(a, b) {
149
149
  )
150
150
  }
151
151
 
152
+ // this follows the npm-like semver behavior
152
153
  function semverFilterLoose(operator, range) {
153
154
  range = range.split('.').map(parseSimpleInt)
154
155
  if (typeof range[1] === 'undefined') {
155
156
  range[1] = 'x'
156
157
  }
158
+ // ignore any patch version because we only return minor versions
159
+ // range[2] = 'x'
157
160
  switch (operator) {
158
161
  case '<=':
159
162
  return function (version) {
@@ -169,6 +172,7 @@ function semverFilterLoose(operator, range) {
169
172
  }
170
173
  }
171
174
 
175
+ // this follows the npm-like semver behavior
172
176
  function compareSemverLoose(version, range) {
173
177
  if (version[0] !== range[0]) {
174
178
  return version[0] < range[0] ? -1 : +1
@@ -289,6 +293,8 @@ function unknownQuery(query) {
289
293
  )
290
294
  }
291
295
 
296
+ // Adjusts last X versions queries for some mobile browsers,
297
+ // where caniuse data jumps from a legacy version to the latest
292
298
  function filterJumps(list, name, nVersions, context) {
293
299
  var jump = 1
294
300
  switch (name) {
@@ -411,6 +417,7 @@ function browserslist(queries, opts) {
411
417
  mobileToDesktop: opts.mobileToDesktop,
412
418
  env: opts.env
413
419
  }
420
+ // Removing to avoid using context.path without marking query as needsPath
414
421
  if (needsPath) {
415
422
  context.path = opts.path
416
423
  }
@@ -431,6 +438,9 @@ function browserslist(queries, opts) {
431
438
  name1 = name1.split(' ')
432
439
  name2 = name2.split(' ')
433
440
  if (name1[0] === name2[0]) {
441
+ // assumptions on caniuse data
442
+ // 1) version ranges never overlaps
443
+ // 2) if version is not a range, it never contains `-`
434
444
  var version1 = name1[1].split('-')[0]
435
445
  var version2 = name2[1].split('-')[0]
436
446
  return compareSemver(version2.split('.'), version1.split('.'))
@@ -475,6 +485,7 @@ browserslist.parse = function (queries, opts) {
475
485
  return parseQueries(queries)
476
486
  }
477
487
 
488
+ // Will be filled by Can I Use data below
478
489
  browserslist.cache = {}
479
490
  browserslist.data = {}
480
491
  browserslist.usage = {
@@ -482,8 +493,10 @@ browserslist.usage = {
482
493
  custom: null
483
494
  }
484
495
 
496
+ // Default browsers query
485
497
  browserslist.defaults = ['> 0.5%', 'last 2 versions', 'Firefox ESR', 'not dead']
486
498
 
499
+ // Browser names aliases
487
500
  browserslist.aliases = {
488
501
  fx: 'firefox',
489
502
  ff: 'firefox',
@@ -499,13 +512,17 @@ browserslist.aliases = {
499
512
  qqandroid: 'and_qq'
500
513
  }
501
514
 
515
+ // Can I Use only provides a few versions for some browsers (e.g. and_chr).
516
+ // Fallback to a similar browser for unknown versions
517
+ // Note op_mob is not included as its chromium versions are not in sync with Opera desktop
502
518
  browserslist.desktopNames = {
503
519
  and_chr: 'chrome',
504
520
  and_ff: 'firefox',
505
521
  ie_mob: 'ie',
506
- android: 'chrome'
522
+ android: 'chrome' // has extra processing logic
507
523
  }
508
524
 
525
+ // Aliases to work with joined versions like `ios_saf 7.0-7.1`
509
526
  browserslist.versionAliases = {}
510
527
 
511
528
  browserslist.clearCaches = env.clearCaches
@@ -798,6 +815,13 @@ var QUERIES = {
798
815
  },
799
816
  baseline: {
800
817
  matches: ['year', 'availability', 'date', 'downstream', 'kaios'],
818
+ // Matches:
819
+ // baseline 2024
820
+ // baseline newly available
821
+ // baseline widely available
822
+ // baseline widely available on 2024-06-01
823
+ // ...with downstream
824
+ // ...including kaios
801
825
  regexp:
802
826
  /^baseline\s+(?:(\d+)|(newly|widely)\s+available(?:\s+on\s+(\d{4}-\d{2}-\d{2}))?)?(\s+with\s+downstream)?(\s+including\s+kaios)?$/i,
803
827
  select: function (context, node) {
@@ -996,6 +1020,7 @@ var QUERIES = {
996
1020
  var result = []
997
1021
  for (var name in features) {
998
1022
  var data = byName(name, context)
1023
+ // Only check desktop when latest released mobile has support
999
1024
  var iMax = data.released.length - 1
1000
1025
  while (iMax >= 0) {
1001
1026
  if (data.released[iMax] in features[name]) break
@@ -1277,6 +1302,7 @@ var QUERIES = {
1277
1302
  }
1278
1303
  }
1279
1304
 
1305
+ // Get and convert Can I Use data
1280
1306
 
1281
1307
  ;(function () {
1282
1308
  for (var name in agents) {
package/node.js CHANGED
@@ -27,7 +27,7 @@ function checkExtend(name) {
27
27
  'Browserslist config needs `browserslist-config-` prefix. ' + use
28
28
  )
29
29
  }
30
- if (name.replace(/^@[^/]+\
30
+ if (name.replace(/^@[^/]+\//, '').indexOf('.') !== -1) {
31
31
  throw new BrowserslistError(
32
32
  '`.` not allowed in Browserslist config name. ' + use
33
33
  )
@@ -44,6 +44,7 @@ function getPathType(filepath) {
44
44
  try {
45
45
  stats = fs.existsSync(filepath) && fs.statSync(filepath)
46
46
  } catch (err) {
47
+ /* c8 ignore start */
47
48
  if (
48
49
  err.code !== 'ENOENT' &&
49
50
  err.code !== 'EACCES' &&
@@ -51,6 +52,7 @@ function getPathType(filepath) {
51
52
  ) {
52
53
  throw err
53
54
  }
55
+ /* c8 ignore end */
54
56
  }
55
57
 
56
58
  if (stats && stats.isDirectory()) return PATHTYPE_DIR
@@ -237,6 +239,8 @@ function normalizeStats(data, stats) {
237
239
  function normalizeUsageData(usageData, data) {
238
240
  for (var browser in usageData) {
239
241
  var browserUsage = usageData[browser]
242
+ // https://github.com/browserslist/browserslist/issues/431#issuecomment-565230615
243
+ // caniuse-db returns { 0: "percentage" } for `and_*` regional stats
240
244
  if ('0' in browserUsage) {
241
245
  var versions = data[browser].versions
242
246
  browserUsage[versions[versions.length - 1]] = browserUsage[0]
@@ -275,6 +279,7 @@ module.exports = {
275
279
  checkExtend(name)
276
280
  }
277
281
  var stats = require(
282
+ // Use forward slashes for module paths, also on Windows.
278
283
  require.resolve(path.posix.join(name, 'browserslist-stats.json'), {
279
284
  paths: ['.']
280
285
  })
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "browserslist",
3
- "version": "4.28.3",
3
+ "version": "4.28.5",
4
4
  "description": "Share target browsers between different front-end tools, like Autoprefixer, Stylelint and babel-env-preset",
5
5
  "keywords": [
6
6
  "browsers",
@@ -33,10 +33,10 @@
33
33
  },
34
34
  "types": "./index.d.ts",
35
35
  "dependencies": {
36
- "baseline-browser-mapping": "^2.10.38",
37
- "caniuse-lite": "^1.0.30001799",
38
- "electron-to-chromium": "^1.5.376",
39
- "node-releases": "^2.0.48",
36
+ "baseline-browser-mapping": "^2.10.42",
37
+ "caniuse-lite": "^1.0.30001800",
38
+ "electron-to-chromium": "^1.5.387",
39
+ "node-releases": "^2.0.50",
40
40
  "update-browserslist-db": "^1.2.3"
41
41
  },
42
42
  "engines": {