browserslist 4.5.6 → 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,9 @@
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
+
4
7
  ## 4.5.6
5
8
  * Make `Node > 5` and `node > 5` queries case insensitive.
6
9
 
package/README.md CHANGED
@@ -499,6 +499,10 @@ Options:
499
499
  Default is `false.`
500
500
  * `dangerousExtend`: Disable security checks for `extend` query.
501
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`.
502
506
 
503
507
  For non-JS environment and debug purpose you can use CLI tool:
504
508
 
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)
@@ -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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "browserslist",
3
- "version": "4.5.6",
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,9 +11,9 @@
11
11
  "license": "MIT",
12
12
  "repository": "browserslist/browserslist",
13
13
  "dependencies": {
14
- "caniuse-lite": "^1.0.30000963",
15
- "electron-to-chromium": "^1.3.127",
16
- "node-releases": "^1.1.17"
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": {