browserslist 4.6.1 → 4.6.2

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.2
5
+ * Fix `last x version` and similar queries for Android (by Tony Ross).
6
+
4
7
  ## 4.6.1
5
8
  * Fix patch version support for Electron (by Kilian Valkhof).
6
9
 
package/README.md CHANGED
@@ -18,15 +18,13 @@ front-end tools. It is used in:
18
18
  All tools will find target browsers automatically,
19
19
  when you add the following to `package.json`:
20
20
 
21
- ```json
22
- {
21
+ ```js
23
22
  "browserslist": [
24
23
  "last 1 version",
25
24
  "> 1%",
26
25
  "maintained node versions",
27
26
  "not dead"
28
27
  ]
29
- }
30
28
  ```
31
29
 
32
30
  Or in `.browserslistrc` config:
@@ -127,11 +125,10 @@ from one of this sources:
127
125
 
128
126
  1. `browserslist` key in `package.json` file in current or parent directories.
129
127
  **We recommend this way.**
130
- 2. Tool options. For example `browsers` option in Autoprefixer.
131
- 3. `BROWSERSLIST` environment variable.
132
- 4. `browserslist` config file in current or parent directories.
133
- 5. `.browserslistrc` config file in current or parent directories.
134
- 6. If the above methods did not produce a valid result
128
+ 2. `.browserslistrc` config file in current or parent directories.
129
+ 3. `browserslist` config file in current or parent directories.
130
+ 4. `BROWSERSLIST` environment variable.
131
+ 5. If the above methods did not produce a valid result
135
132
  Browserslist will use defaults:
136
133
  `> 0.5%, last 2 versions, Firefox ESR, not dead`.
137
134
 
@@ -469,16 +466,16 @@ For example, the query `> 1% in my stats, > 5% in US, 10%` is permitted.
469
466
  ## JS API
470
467
 
471
468
  ```js
472
- var browserslist = require('browserslist');
469
+ const browserslist = require('browserslist')
473
470
 
474
471
  // Your CSS/JS build tool code
475
- var process = function (source, opts) {
476
- var browsers = browserslist(opts.overrideBrowserslist, {
477
- stats: opts.stats,
478
- path: opts.file,
479
- env: opts.env
480
- });
481
- // Your code to add features for selected browsers
472
+ function process (source, opts) {
473
+ const browsers = browserslist(opts.overrideBrowserslist, {
474
+ stats: opts.stats,
475
+ path: opts.file,
476
+ env: opts.env
477
+ })
478
+ // Your code to add features for selected browsers
482
479
  }
483
480
  ```
484
481
 
@@ -567,7 +564,7 @@ for the duration of the hosting process.
567
564
  To clear these caches, use:
568
565
 
569
566
  ```js
570
- browserslist.clearCaches();
567
+ browserslist.clearCaches()
571
568
  ```
572
569
 
573
570
  To disable the caching altogether, set the `BROWSERSLIST_DISABLE_CACHE`
package/index.js CHANGED
@@ -207,6 +207,18 @@ function unknownQuery (query) {
207
207
  )
208
208
  }
209
209
 
210
+ function filterAndroid (list, versions) {
211
+ var released = browserslist.data.android.released
212
+ var firstEvergreen = 37
213
+ var last = released[released.length - 1]
214
+ var diff = last - firstEvergreen - versions // First Android Evergreen
215
+ if (diff > 0) {
216
+ return list.slice(-1)
217
+ } else {
218
+ return list.slice(diff - 1)
219
+ }
220
+ }
221
+
210
222
  /**
211
223
  * Resolves queries into a browser list.
212
224
  * @param {string|string[]} queries Queries to combine.
@@ -537,15 +549,15 @@ browserslist.coverage = function (browsers, stats) {
537
549
 
538
550
  var QUERIES = [
539
551
  {
540
- regexp: /^last\s+(\d+)\s+major versions?$/i,
552
+ regexp: /^last\s+(\d+)\s+major\s+versions?$/i,
541
553
  select: function (context, versions) {
542
554
  return Object.keys(agents).reduce(function (selected, name) {
543
555
  var data = byName(name)
544
556
  if (!data) return selected
545
- var array = getMajorVersions(data.released, versions)
546
-
547
- array = array.map(nameMapper(data.name))
548
- return selected.concat(array)
557
+ var list = getMajorVersions(data.released, versions)
558
+ list = list.map(nameMapper(data.name))
559
+ if (data.name === 'android') list = filterAndroid(list, versions)
560
+ return selected.concat(list)
549
561
  }, [])
550
562
  }
551
563
  },
@@ -555,15 +567,15 @@ var QUERIES = [
555
567
  return Object.keys(agents).reduce(function (selected, name) {
556
568
  var data = byName(name)
557
569
  if (!data) return selected
558
- var array = data.released.slice(-versions)
559
-
560
- array = array.map(nameMapper(data.name))
561
- return selected.concat(array)
570
+ var list = data.released.slice(-versions)
571
+ list = list.map(nameMapper(data.name))
572
+ if (data.name === 'android') list = filterAndroid(list, versions)
573
+ return selected.concat(list)
562
574
  }, [])
563
575
  }
564
576
  },
565
577
  {
566
- regexp: /^last\s+(\d+)\s+electron\s+major versions?$/i,
578
+ regexp: /^last\s+(\d+)\s+electron\s+major\s+versions?$/i,
567
579
  select: function (context, versions) {
568
580
  var validVersions = getMajorVersions(Object.keys(e2c).reverse(), versions)
569
581
  return validVersions.map(function (i) {
@@ -572,11 +584,13 @@ var QUERIES = [
572
584
  }
573
585
  },
574
586
  {
575
- regexp: /^last\s+(\d+)\s+(\w+)\s+major versions?$/i,
587
+ regexp: /^last\s+(\d+)\s+(\w+)\s+major\s+versions?$/i,
576
588
  select: function (context, versions, name) {
577
589
  var data = checkName(name)
578
590
  var validVersions = getMajorVersions(data.released, versions)
579
- return validVersions.map(nameMapper(data.name))
591
+ var list = validVersions.map(nameMapper(data.name))
592
+ if (data.name === 'android') list = filterAndroid(list, versions)
593
+ return list
580
594
  }
581
595
  },
582
596
  {
@@ -591,7 +605,9 @@ var QUERIES = [
591
605
  regexp: /^last\s+(\d+)\s+(\w+)\s+versions?$/i,
592
606
  select: function (context, versions, name) {
593
607
  var data = checkName(name)
594
- return data.released.slice(-versions).map(nameMapper(data.name))
608
+ var list = data.released.slice(-versions).map(nameMapper(data.name))
609
+ if (data.name === 'android') list = filterAndroid(list, versions)
610
+ return list
595
611
  }
596
612
  },
597
613
  {
@@ -600,12 +616,11 @@ var QUERIES = [
600
616
  return Object.keys(agents).reduce(function (selected, name) {
601
617
  var data = byName(name)
602
618
  if (!data) return selected
603
- var array = data.versions.filter(function (v) {
619
+ var list = data.versions.filter(function (v) {
604
620
  return data.released.indexOf(v) === -1
605
621
  })
606
-
607
- array = array.map(nameMapper(data.name))
608
- return selected.concat(array)
622
+ list = list.map(nameMapper(data.name))
623
+ return selected.concat(list)
609
624
  }, [])
610
625
  }
611
626
  },
@@ -644,7 +659,6 @@ var QUERIES = [
644
659
  select: function (context, sign, popularity) {
645
660
  popularity = parseFloat(popularity)
646
661
  var usage = browserslist.usage.global
647
-
648
662
  return Object.keys(usage).reduce(function (result, version) {
649
663
  if (sign === '>') {
650
664
  if (usage[version] > popularity) {
@@ -669,13 +683,10 @@ var QUERIES = [
669
683
  regexp: /^(>=?|<=?)\s*(\d*\.?\d+)%\s+in\s+my\s+stats$/,
670
684
  select: function (context, sign, popularity) {
671
685
  popularity = parseFloat(popularity)
672
-
673
686
  if (!context.customUsage) {
674
687
  throw new BrowserslistError('Custom usage statistics was not provided')
675
688
  }
676
-
677
689
  var usage = context.customUsage
678
-
679
690
  return Object.keys(usage).reduce(function (result, version) {
680
691
  if (sign === '>') {
681
692
  if (usage[version] > popularity) {
@@ -700,16 +711,13 @@ var QUERIES = [
700
711
  regexp: /^(>=?|<=?)\s*(\d*\.?\d+)%\s+in\s+((alt-)?\w\w)$/,
701
712
  select: function (context, sign, popularity, place) {
702
713
  popularity = parseFloat(popularity)
703
-
704
714
  if (place.length === 2) {
705
715
  place = place.toUpperCase()
706
716
  } else {
707
717
  place = place.toLowerCase()
708
718
  }
709
-
710
719
  env.loadCountry(browserslist.usage, place)
711
720
  var usage = browserslist.usage[place]
712
-
713
721
  return Object.keys(usage).reduce(function (result, version) {
714
722
  if (sign === '>') {
715
723
  if (usage[version] > popularity) {
@@ -734,7 +742,6 @@ var QUERIES = [
734
742
  regexp: /^cover\s+(\d*\.?\d+)%(\s+in\s+(my\s+stats|(alt-)?\w\w))?$/,
735
743
  select: function (context, coverage, statMode) {
736
744
  coverage = parseFloat(coverage)
737
-
738
745
  var usage = browserslist.usage.global
739
746
  if (statMode) {
740
747
  if (statMode.match(/^\s+in\s+my\s+stats$/)) {
@@ -756,23 +763,19 @@ var QUERIES = [
756
763
  usage = browserslist.usage[place]
757
764
  }
758
765
  }
759
-
760
766
  var versions = Object.keys(usage).sort(function (a, b) {
761
767
  return usage[b] - usage[a]
762
768
  })
763
-
764
769
  var coveraged = 0
765
770
  var result = []
766
771
  var version
767
772
  for (var i = 0; i <= versions.length; i++) {
768
773
  version = versions[i]
769
774
  if (usage[version] === 0) break
770
-
771
775
  coveraged += usage[version]
772
776
  result.push(version)
773
777
  if (coveraged >= coverage) break
774
778
  }
775
-
776
779
  return result
777
780
  }
778
781
  },
@@ -787,10 +790,8 @@ var QUERIES = [
787
790
  if (!e2c[toToUse]) {
788
791
  throw new BrowserslistError('Unknown version ' + to + ' of electron')
789
792
  }
790
-
791
793
  from = parseFloat(from)
792
794
  to = parseFloat(to)
793
-
794
795
  return Object.keys(e2c).filter(function (i) {
795
796
  var parsed = parseFloat(i)
796
797
  return parsed >= from && parsed <= to
@@ -805,12 +806,10 @@ var QUERIES = [
805
806
  var data = checkName(name)
806
807
  from = parseFloat(normalizeVersion(data, from, context) || from)
807
808
  to = parseFloat(normalizeVersion(data, to, context) || to)
808
-
809
809
  function filter (v) {
810
810
  var parsed = parseFloat(v)
811
811
  return parsed >= from && parsed <= to
812
812
  }
813
-
814
813
  return data.released.filter(filter).map(nameMapper(data.name))
815
814
  }
816
815
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "browserslist",
3
- "version": "4.6.1",
3
+ "version": "4.6.2",
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.30000971",
15
- "electron-to-chromium": "^1.3.137",
16
- "node-releases": "^1.1.21"
14
+ "caniuse-lite": "^1.0.30000974",
15
+ "electron-to-chromium": "^1.3.150",
16
+ "node-releases": "^1.1.23"
17
17
  },
18
18
  "bin": "./cli.js",
19
19
  "browser": {