browserslist 4.21.7 → 4.21.9

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/index.d.ts CHANGED
@@ -124,7 +124,9 @@ declare namespace browserslist {
124
124
 
125
125
  let cache: {
126
126
  [feature: string]: {
127
- [name: string]: 'y' | 'n'
127
+ [name: string]: {
128
+ [version: string]: string
129
+ }
128
130
  }
129
131
  }
130
132
 
package/index.js CHANGED
@@ -10,6 +10,7 @@ var env = require('./node') // Will load browser.js in webpack
10
10
 
11
11
  var YEAR = 365.259641 * 24 * 60 * 60 * 1000
12
12
  var ANDROID_EVERGREEN_FIRST = '37'
13
+ var OP_MOB_BLINK_FIRST = 14
13
14
 
14
15
  // Helpers
15
16
 
@@ -223,21 +224,6 @@ function cloneData(data) {
223
224
  }
224
225
  }
225
226
 
226
- function mapVersions(data, map) {
227
- data.versions = data.versions.map(function (i) {
228
- return map[i] || i
229
- })
230
- data.released = data.released.map(function (i) {
231
- return map[i] || i
232
- })
233
- var fixedDate = {}
234
- for (var i in data.releaseDate) {
235
- fixedDate[map[i] || i] = data.releaseDate[i]
236
- }
237
- data.releaseDate = fixedDate
238
- return data
239
- }
240
-
241
227
  function byName(name, context) {
242
228
  name = name.toLowerCase()
243
229
  name = browserslist.aliases[name] || name
@@ -248,9 +234,6 @@ function byName(name, context) {
248
234
  } else {
249
235
  var cloned = cloneData(desktop)
250
236
  cloned.name = name
251
- if (name === 'op_mob') {
252
- cloned = mapVersions(cloned, { '10.0-10.1': '10' })
253
- }
254
237
  return cloned
255
238
  }
256
239
  }
@@ -292,14 +275,34 @@ function unknownQuery(query) {
292
275
  )
293
276
  }
294
277
 
295
- function filterAndroid(list, versions, context) {
296
- if (context.mobileToDesktop) return list
297
- var released = browserslist.data.chrome.released
298
- var nEvergreen = released.length - released.indexOf(ANDROID_EVERGREEN_FIRST)
299
- if (versions <= nEvergreen) {
278
+ // Adjusts last X versions queries for some mobile browsers,
279
+ // where caniuse data jumps from a legacy version to the latest
280
+ function filterJumps(list, name, nVersions, context) {
281
+ var jump = 1
282
+ switch (name) {
283
+ case 'android':
284
+ if (context.mobileToDesktop) return list
285
+ var released = browserslist.data.chrome.released
286
+ jump = released.length - released.indexOf(ANDROID_EVERGREEN_FIRST)
287
+ break
288
+ case 'op_mob':
289
+ var latest = browserslist.data.op_mob.released.slice(-1)[0]
290
+ jump = getMajor(latest) - OP_MOB_BLINK_FIRST + 1
291
+ break
292
+ default:
293
+ return list
294
+ }
295
+ if (nVersions <= jump) {
300
296
  return list.slice(-1)
301
297
  }
302
- return list.slice(nEvergreen - 1 - versions)
298
+ return list.slice(jump - 1 - nVersions)
299
+ }
300
+
301
+ function isSupported(flags) {
302
+ return (
303
+ typeof flags === 'string' &&
304
+ (flags.indexOf('y') >= 0 || flags.indexOf('a') >= 0)
305
+ )
303
306
  }
304
307
 
305
308
  function resolve(queries, context) {
@@ -461,11 +464,11 @@ browserslist.aliases = {
461
464
 
462
465
  // Can I Use only provides a few versions for some browsers (e.g. and_chr).
463
466
  // Fallback to a similar browser for unknown versions
467
+ // Note op_mob is not included as its chromium versions are not in sync with Opera desktop
464
468
  browserslist.desktopNames = {
465
469
  and_chr: 'chrome',
466
470
  and_ff: 'firefox',
467
471
  ie_mob: 'ie',
468
- op_mob: 'opera',
469
472
  android: 'chrome' // has extra processing logic
470
473
  }
471
474
 
@@ -591,9 +594,7 @@ var QUERIES = {
591
594
  if (!data) return selected
592
595
  var list = getMajorVersions(data.released, node.versions)
593
596
  list = list.map(nameMapper(data.name))
594
- if (data.name === 'android') {
595
- list = filterAndroid(list, node.versions, context)
596
- }
597
+ list = filterJumps(list, data.name, node.versions, context)
597
598
  return selected.concat(list)
598
599
  }, [])
599
600
  }
@@ -607,9 +608,7 @@ var QUERIES = {
607
608
  if (!data) return selected
608
609
  var list = data.released.slice(-node.versions)
609
610
  list = list.map(nameMapper(data.name))
610
- if (data.name === 'android') {
611
- list = filterAndroid(list, node.versions, context)
612
- }
611
+ list = filterJumps(list, data.name, node.versions, context)
613
612
  return selected.concat(list)
614
613
  }, [])
615
614
  }
@@ -642,9 +641,7 @@ var QUERIES = {
642
641
  var data = checkName(node.browser, context)
643
642
  var validVersions = getMajorVersions(data.released, node.versions)
644
643
  var list = validVersions.map(nameMapper(data.name))
645
- if (data.name === 'android') {
646
- list = filterAndroid(list, node.versions, context)
647
- }
644
+ list = filterJumps(list, data.name, node.versions, context)
648
645
  return list
649
646
  }
650
647
  },
@@ -676,9 +673,7 @@ var QUERIES = {
676
673
  select: function (context, node) {
677
674
  var data = checkName(node.browser, context)
678
675
  var list = data.released.slice(-node.versions).map(nameMapper(data.name))
679
- if (data.name === 'android') {
680
- list = filterAndroid(list, node.versions, context)
681
- }
676
+ list = filterJumps(list, data.name, node.versions, context)
682
677
  return list
683
678
  }
684
679
  },
@@ -893,13 +888,25 @@ var QUERIES = {
893
888
  select: function (context, node) {
894
889
  env.loadFeature(browserslist.cache, node.feature)
895
890
  var features = browserslist.cache[node.feature]
896
- return Object.keys(features).reduce(function (result, version) {
897
- var flags = features[version]
898
- if (flags.indexOf('y') >= 0 || flags.indexOf('a') >= 0) {
899
- result.push(version)
900
- }
901
- return result
902
- }, [])
891
+ var result = []
892
+ for (var name in features) {
893
+ var data = byName(name, context)
894
+ // Only check desktop when latest released mobile has support
895
+ var checkDesktop =
896
+ context.mobileToDesktop &&
897
+ name in browserslist.desktopNames &&
898
+ isSupported(features[name][data.released.slice(-1)[0]])
899
+ data.versions.forEach(function (version) {
900
+ var flags = features[name][version]
901
+ if (flags === undefined && checkDesktop) {
902
+ flags = features[browserslist.desktopNames[name]][version]
903
+ }
904
+ if (isSupported(flags)) {
905
+ result.push(name + ' ' + version)
906
+ }
907
+ })
908
+ }
909
+ return result
903
910
  }
904
911
  },
905
912
  electron_range: {
@@ -1181,8 +1188,6 @@ var QUERIES = {
1181
1188
  }
1182
1189
  }
1183
1190
 
1184
- browserslist.versionAliases.op_mob['59'] = '58'
1185
-
1186
1191
  browserslist.nodeVersions = jsReleases.map(function (release) {
1187
1192
  return release.version
1188
1193
  })
package/node.js CHANGED
@@ -272,8 +272,9 @@ module.exports = {
272
272
  var stats = feature(compressed).stats
273
273
  features[name] = {}
274
274
  for (var i in stats) {
275
+ features[name][i] = {}
275
276
  for (var j in stats[i]) {
276
- features[name][i + ' ' + j] = stats[i][j]
277
+ features[name][i][j] = stats[i][j]
277
278
  }
278
279
  }
279
280
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "browserslist",
3
- "version": "4.21.7",
3
+ "version": "4.21.9",
4
4
  "description": "Share target browsers between different front-end tools, like Autoprefixer, Stylelint and babel-env-preset",
5
5
  "keywords": [
6
6
  "caniuse",
@@ -25,8 +25,8 @@
25
25
  "license": "MIT",
26
26
  "repository": "browserslist/browserslist",
27
27
  "dependencies": {
28
- "caniuse-lite": "^1.0.30001489",
29
- "electron-to-chromium": "^1.4.411",
28
+ "caniuse-lite": "^1.0.30001503",
29
+ "electron-to-chromium": "^1.4.431",
30
30
  "node-releases": "^2.0.12",
31
31
  "update-browserslist-db": "^1.0.11"
32
32
  },