browserslist 4.16.2 → 4.16.6

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
@@ -263,7 +263,7 @@ You can specify the browser and Node.js versions by queries (case insensitive):
263
263
  * `Firefox > 20`: versions of Firefox newer than 20.
264
264
  `>=`, `<` and `<=` work too. It also works with Node.js.
265
265
  * `ie 6-8`: selects an inclusive range of versions.
266
- * `Firefox ESR`: the latest [Firefox ESR] version.
266
+ * `Firefox ESR`: the latest [Firefox Extended Support Release].
267
267
  * `PhantomJS 2.1` and `PhantomJS 1.9`: selects Safari versions similar
268
268
  to PhantomJS runtime.
269
269
  * `extends browserslist-config-mycompany`: take queries from
@@ -279,7 +279,7 @@ You can specify the browser and Node.js versions by queries (case insensitive):
279
279
  (also `since 2015-03` and `since 2015-03-10`).
280
280
  * `unreleased versions` or `unreleased Chrome versions`:
281
281
  alpha and beta versions.
282
- * `not ie <= 8`: exclude browsers selected by previous queries.
282
+ * `not ie <= 8`: exclude IE 8 and lower from previous queries.
283
283
 
284
284
  You can add `not ` to any query.
285
285
 
@@ -289,6 +289,7 @@ You can add `not ` to any query.
289
289
  [custom usage data]: #custom-usage-data
290
290
  [still maintained]: https://github.com/nodejs/Release
291
291
  [Can I Use]: https://caniuse.com/
292
+ [Firefox Extended Support Release]: https://support.mozilla.org/en-US/kb/choosing-firefox-update-channel
292
293
 
293
294
 
294
295
  ### Debug
@@ -560,9 +561,9 @@ Options:
560
561
  * `stats`: custom usage statistics data.
561
562
  * `config`: path to config if you want to set it manually.
562
563
  * `ignoreUnknownVersions`: do not throw on direct query (like `ie 12`).
563
- Default is `false.`
564
+ Default is `false`.
564
565
  * `dangerousExtend`: Disable security checks for `extend` query.
565
- Default is `false.`
566
+ Default is `false`.
566
567
  * `mobileToDesktop`: Use desktop browsers if Can I Use doesn’t have data
567
568
  about this mobile version. For instance, Browserslist will return
568
569
  `chrome 20` on `and_chr 20` query (Can I Use has only data only about
package/index.js CHANGED
@@ -614,6 +614,68 @@ browserslist.coverage = function (browsers, stats) {
614
614
  }, 0)
615
615
  }
616
616
 
617
+ function nodeQuery (context, version) {
618
+ var nodeReleases = jsReleases.filter(function (i) {
619
+ return i.name === 'nodejs'
620
+ })
621
+ var matched = nodeReleases.filter(function (i) {
622
+ return isVersionsMatch(i.version, version)
623
+ })
624
+ if (matched.length === 0) {
625
+ if (context.ignoreUnknownVersions) {
626
+ return []
627
+ } else {
628
+ throw new BrowserslistError('Unknown version ' + version + ' of Node.js')
629
+ }
630
+ }
631
+ return ['node ' + matched[matched.length - 1].version]
632
+ }
633
+
634
+ function sinceQuery (context, year, month, date) {
635
+ year = parseInt(year)
636
+ month = parseInt(month || '01') - 1
637
+ date = parseInt(date || '01')
638
+ return filterByYear(Date.UTC(year, month, date, 0, 0, 0), context)
639
+ }
640
+
641
+ function coverQuery (context, coverage, statMode) {
642
+ coverage = parseFloat(coverage)
643
+ var usage = browserslist.usage.global
644
+ if (statMode) {
645
+ if (statMode.match(/^my\s+stats$/)) {
646
+ if (!context.customUsage) {
647
+ throw new BrowserslistError(
648
+ 'Custom usage statistics was not provided'
649
+ )
650
+ }
651
+ usage = context.customUsage
652
+ } else {
653
+ var place
654
+ if (statMode.length === 2) {
655
+ place = statMode.toUpperCase()
656
+ } else {
657
+ place = statMode.toLowerCase()
658
+ }
659
+ env.loadCountry(browserslist.usage, place, browserslist.data)
660
+ usage = browserslist.usage[place]
661
+ }
662
+ }
663
+ var versions = Object.keys(usage).sort(function (a, b) {
664
+ return usage[b] - usage[a]
665
+ })
666
+ var coveraged = 0
667
+ var result = []
668
+ var version
669
+ for (var i = 0; i <= versions.length; i++) {
670
+ version = versions[i]
671
+ if (usage[version] === 0) break
672
+ coveraged += usage[version]
673
+ result.push(version)
674
+ if (coveraged >= coverage) break
675
+ }
676
+ return result
677
+ }
678
+
617
679
  var QUERIES = [
618
680
  {
619
681
  regexp: /^last\s+(\d+)\s+major\s+versions?$/i,
@@ -669,9 +731,11 @@ var QUERIES = [
669
731
  {
670
732
  regexp: /^last\s+(\d+)\s+electron\s+versions?$/i,
671
733
  select: function (context, versions) {
672
- return Object.keys(e2c).slice(-versions).map(function (i) {
673
- return 'chrome ' + e2c[i]
674
- })
734
+ return Object.keys(e2c)
735
+ .slice(-versions)
736
+ .map(function (i) {
737
+ return 'chrome ' + e2c[i]
738
+ })
675
739
  }
676
740
  },
677
741
  {
@@ -709,9 +773,11 @@ var QUERIES = [
709
773
  regexp: /^unreleased\s+(\w+)\s+versions?$/i,
710
774
  select: function (context, name) {
711
775
  var data = checkName(name, context)
712
- return data.versions.filter(function (v) {
713
- return data.released.indexOf(v) === -1
714
- }).map(nameMapper(data.name))
776
+ return data.versions
777
+ .filter(function (v) {
778
+ return data.released.indexOf(v) === -1
779
+ })
780
+ .map(nameMapper(data.name))
715
781
  }
716
782
  },
717
783
  {
@@ -721,16 +787,19 @@ var QUERIES = [
721
787
  }
722
788
  },
723
789
  {
724
- regexp: /^since (\d+)(?:-(\d+))?(?:-(\d+))?$/i,
725
- select: function (context, year, month, date) {
726
- year = parseInt(year)
727
- month = parseInt(month || '01') - 1
728
- date = parseInt(date || '01')
729
- return filterByYear(Date.UTC(year, month, date, 0, 0, 0), context)
730
- }
790
+ regexp: /^since (\d+)$/i,
791
+ select: sinceQuery
792
+ },
793
+ {
794
+ regexp: /^since (\d+)-(\d+)$/i,
795
+ select: sinceQuery
796
+ },
797
+ {
798
+ regexp: /^since (\d+)-(\d+)-(\d+)$/i,
799
+ select: sinceQuery
731
800
  },
732
801
  {
733
- regexp: /^(>=?|<=?)\s*(\d*\.?\d+)%$/,
802
+ regexp: /^(>=?|<=?)\s*(\d+|\d+\.\d+|\.\d+)%$/,
734
803
  select: function (context, sign, popularity) {
735
804
  popularity = parseFloat(popularity)
736
805
  var usage = browserslist.usage.global
@@ -755,7 +824,7 @@ var QUERIES = [
755
824
  }
756
825
  },
757
826
  {
758
- regexp: /^(>=?|<=?)\s*(\d*\.?\d+)%\s+in\s+my\s+stats$/,
827
+ regexp: /^(>=?|<=?)\s*(\d+|\d+\.\d+|\.\d+)%\s+in\s+my\s+stats$/,
759
828
  select: function (context, sign, popularity) {
760
829
  popularity = parseFloat(popularity)
761
830
  if (!context.customUsage) {
@@ -783,12 +852,12 @@ var QUERIES = [
783
852
  }
784
853
  },
785
854
  {
786
- regexp: /^(>=?|<=?)\s*(\d*\.?\d+)%\s+in\s+(\S+)\s+stats$/,
855
+ regexp: /^(>=?|<=?)\s*(\d+|\d+\.\d+|\.\d+)%\s+in\s+(\S+)\s+stats$/,
787
856
  select: function (context, sign, popularity, name) {
788
857
  popularity = parseFloat(popularity)
789
858
  var stats = env.loadStat(context, name, browserslist.data)
790
859
  if (stats) {
791
- context.customUsage = { }
860
+ context.customUsage = {}
792
861
  for (var browser in stats) {
793
862
  fillUsage(context.customUsage, browser, stats[browser])
794
863
  }
@@ -818,7 +887,7 @@ var QUERIES = [
818
887
  }
819
888
  },
820
889
  {
821
- regexp: /^(>=?|<=?)\s*(\d*\.?\d+)%\s+in\s+((alt-)?\w\w)$/,
890
+ regexp: /^(>=?|<=?)\s*(\d+|\d+\.\d+|\.\d+)%\s+in\s+((alt-)?\w\w)$/,
822
891
  select: function (context, sign, popularity, place) {
823
892
  popularity = parseFloat(popularity)
824
893
  if (place.length === 2) {
@@ -849,45 +918,12 @@ var QUERIES = [
849
918
  }
850
919
  },
851
920
  {
852
- regexp: /^cover\s+(\d*\.?\d+)%(\s+in\s+(my\s+stats|(alt-)?\w\w))?$/,
853
- select: function (context, coverage, statMode) {
854
- coverage = parseFloat(coverage)
855
- var usage = browserslist.usage.global
856
- if (statMode) {
857
- if (statMode.match(/^\s+in\s+my\s+stats$/)) {
858
- if (!context.customUsage) {
859
- throw new BrowserslistError(
860
- 'Custom usage statistics was not provided'
861
- )
862
- }
863
- usage = context.customUsage
864
- } else {
865
- var match = statMode.match(/\s+in\s+((alt-)?\w\w)/)
866
- var place = match[1]
867
- if (place.length === 2) {
868
- place = place.toUpperCase()
869
- } else {
870
- place = place.toLowerCase()
871
- }
872
- env.loadCountry(browserslist.usage, place, browserslist.data)
873
- usage = browserslist.usage[place]
874
- }
875
- }
876
- var versions = Object.keys(usage).sort(function (a, b) {
877
- return usage[b] - usage[a]
878
- })
879
- var coveraged = 0
880
- var result = []
881
- var version
882
- for (var i = 0; i <= versions.length; i++) {
883
- version = versions[i]
884
- if (usage[version] === 0) break
885
- coveraged += usage[version]
886
- result.push(version)
887
- if (coveraged >= coverage) break
888
- }
889
- return result
890
- }
921
+ regexp: /^cover\s+(\d+|\d+\.\d+|\.\d+)%$/,
922
+ select: coverQuery
923
+ },
924
+ {
925
+ regexp: /^cover\s+(\d+|\d+\.\d+|\.\d+)%\s+in\s+(my\s+stats|(alt-)?\w\w)$/,
926
+ select: coverQuery
891
927
  },
892
928
  {
893
929
  regexp: /^supports\s+([\w-]+)$/,
@@ -916,31 +952,26 @@ var QUERIES = [
916
952
  }
917
953
  from = parseFloat(from)
918
954
  to = parseFloat(to)
919
- return Object.keys(e2c).filter(function (i) {
920
- var parsed = parseFloat(i)
921
- return parsed >= from && parsed <= to
922
- }).map(function (i) {
923
- return 'chrome ' + e2c[i]
924
- })
955
+ return Object.keys(e2c)
956
+ .filter(function (i) {
957
+ var parsed = parseFloat(i)
958
+ return parsed >= from && parsed <= to
959
+ })
960
+ .map(function (i) {
961
+ return 'chrome ' + e2c[i]
962
+ })
925
963
  }
926
964
  },
927
965
  {
928
966
  regexp: /^node\s+([\d.]+)\s*-\s*([\d.]+)$/i,
929
967
  select: function (context, from, to) {
930
- var nodeVersions = jsReleases.filter(function (i) {
931
- return i.name === 'nodejs'
932
- }).map(function (i) {
933
- return i.version
934
- })
935
- var semverRegExp = /^(0|[1-9]\d*)(\.(0|[1-9]\d*)){0,2}$/
936
- if (!semverRegExp.test(from)) {
937
- throw new BrowserslistError(
938
- 'Unknown version ' + from + ' of Node.js')
939
- }
940
- if (!semverRegExp.test(to)) {
941
- throw new BrowserslistError(
942
- 'Unknown version ' + to + ' of Node.js')
943
- }
968
+ var nodeVersions = jsReleases
969
+ .filter(function (i) {
970
+ return i.name === 'nodejs'
971
+ })
972
+ .map(function (i) {
973
+ return i.version
974
+ })
944
975
  return nodeVersions
945
976
  .filter(semverFilterLoose('>=', from))
946
977
  .filter(semverFilterLoose('<=', to))
@@ -976,11 +1007,13 @@ var QUERIES = [
976
1007
  {
977
1008
  regexp: /^node\s*(>=?|<=?)\s*([\d.]+)$/i,
978
1009
  select: function (context, sign, version) {
979
- var nodeVersions = jsReleases.filter(function (i) {
980
- return i.name === 'nodejs'
981
- }).map(function (i) {
982
- return i.version
983
- })
1010
+ var nodeVersions = jsReleases
1011
+ .filter(function (i) {
1012
+ return i.name === 'nodejs'
1013
+ })
1014
+ .map(function (i) {
1015
+ return i.version
1016
+ })
984
1017
  return nodeVersions
985
1018
  .filter(generateSemverFilter(sign, version))
986
1019
  .map(function (v) {
@@ -1022,30 +1055,23 @@ var QUERIES = [
1022
1055
  var chrome = e2c[versionToUse]
1023
1056
  if (!chrome) {
1024
1057
  throw new BrowserslistError(
1025
- 'Unknown version ' + version + ' of electron')
1058
+ 'Unknown version ' + version + ' of electron'
1059
+ )
1026
1060
  }
1027
1061
  return ['chrome ' + chrome]
1028
1062
  }
1029
1063
  },
1030
1064
  {
1031
- regexp: /^node\s+(\d+(\.\d+)?(\.\d+)?)$/i,
1032
- select: function (context, version) {
1033
- var nodeReleases = jsReleases.filter(function (i) {
1034
- return i.name === 'nodejs'
1035
- })
1036
- var matched = nodeReleases.filter(function (i) {
1037
- return isVersionsMatch(i.version, version)
1038
- })
1039
- if (matched.length === 0) {
1040
- if (context.ignoreUnknownVersions) {
1041
- return []
1042
- } else {
1043
- throw new BrowserslistError(
1044
- 'Unknown version ' + version + ' of Node.js')
1045
- }
1046
- }
1047
- return ['node ' + matched[matched.length - 1].version]
1048
- }
1065
+ regexp: /^node\s+(\d+)$/i,
1066
+ select: nodeQuery
1067
+ },
1068
+ {
1069
+ regexp: /^node\s+(\d+\.\d+)$/i,
1070
+ select: nodeQuery
1071
+ },
1072
+ {
1073
+ regexp: /^node\s+(\d+\.\d+\.\d+)$/i,
1074
+ select: nodeQuery
1049
1075
  },
1050
1076
  {
1051
1077
  regexp: /^current\s+node$/i,
@@ -1057,13 +1083,17 @@ var QUERIES = [
1057
1083
  regexp: /^maintained\s+node\s+versions$/i,
1058
1084
  select: function (context) {
1059
1085
  var now = Date.now()
1060
- var queries = Object.keys(jsEOL).filter(function (key) {
1061
- return now < Date.parse(jsEOL[key].end) &&
1062
- now > Date.parse(jsEOL[key].start) &&
1063
- isEolReleased(key)
1064
- }).map(function (key) {
1065
- return 'node ' + key.slice(1)
1066
- })
1086
+ var queries = Object.keys(jsEOL)
1087
+ .filter(function (key) {
1088
+ return (
1089
+ now < Date.parse(jsEOL[key].end) &&
1090
+ now > Date.parse(jsEOL[key].start) &&
1091
+ isEolReleased(key)
1092
+ )
1093
+ })
1094
+ .map(function (key) {
1095
+ return 'node ' + key.slice(1)
1096
+ })
1067
1097
  return resolve(queries, context)
1068
1098
  }
1069
1099
  },
@@ -1100,7 +1130,8 @@ var QUERIES = [
1100
1130
  return []
1101
1131
  } else {
1102
1132
  throw new BrowserslistError(
1103
- 'Unknown version ' + version + ' of ' + name)
1133
+ 'Unknown version ' + version + ' of ' + name
1134
+ )
1104
1135
  }
1105
1136
  }
1106
1137
  return [data.name + ' ' + version]
@@ -1142,7 +1173,8 @@ var QUERIES = [
1142
1173
  select: function (context, name) {
1143
1174
  if (byName(name, context)) {
1144
1175
  throw new BrowserslistError(
1145
- 'Specify versions in Browserslist query for browser ' + name)
1176
+ 'Specify versions in Browserslist query for browser ' + name
1177
+ )
1146
1178
  } else {
1147
1179
  throw unknownQuery(name)
1148
1180
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "browserslist",
3
- "version": "4.16.2",
3
+ "version": "4.16.6",
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.30001181",
19
- "colorette": "^1.2.1",
20
- "electron-to-chromium": "^1.3.649",
18
+ "caniuse-lite": "^1.0.30001219",
19
+ "colorette": "^1.2.2",
20
+ "electron-to-chromium": "^1.3.723",
21
21
  "escalade": "^3.1.1",
22
- "node-releases": "^1.1.70"
22
+ "node-releases": "^1.1.71"
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
 
@@ -33,6 +34,8 @@ function detectLockfile () {
33
34
  return { mode: 'npm', file: lockfileNpm }
34
35
  } else if (fs.existsSync(lockfileYarn)) {
35
36
  return { mode: 'yarn', file: lockfileYarn }
37
+ } else if (fs.existsSync(lockfileShrinkwrap)) {
38
+ return { mode: 'npm', file: lockfileShrinkwrap }
36
39
  }
37
40
  throw new BrowserslistError(
38
41
  'No lockfile found. Run "npm install", "yarn install" or "pnpm install"'
@@ -135,9 +138,9 @@ function updateYarnLockfile (lock, latest) {
135
138
  lines[2] = lines[2].replace(
136
139
  /resolved "[^"]+"/, 'resolved "' + latest.dist.tarball + '"'
137
140
  )
138
- lines[3] = lines[3].replace(
141
+ lines[3] = latest.dist.integrity ? lines[3].replace(
139
142
  /integrity .+/, 'integrity ' + latest.dist.integrity
140
- )
143
+ ) : ''
141
144
  }
142
145
  }
143
146
  })
@@ -232,7 +235,7 @@ module.exports = function updateDB (print) {
232
235
  )
233
236
  fs.writeFileSync(lock.file, lockfileData.content)
234
237
 
235
- var install = (lock.mode === 'yarn' ? 'yarn add -W' : lock.mode) + ' install'
238
+ var install = lock.mode === 'yarn' ? 'yarn add -W' : lock.mode + ' install'
236
239
  print(
237
240
  'Installing new caniuse-lite version\n' +
238
241
  yellow('$ ' + install + ' caniuse-lite') + '\n'
@@ -251,7 +254,7 @@ module.exports = function updateDB (print) {
251
254
  process.exit(1)
252
255
  }
253
256
 
254
- var del = (lock.mode === 'yarn' ? 'yarn remove -W' : lock.mode) + ' uninstall'
257
+ var del = lock.mode === 'yarn' ? 'yarn remove -W' : lock.mode + ' uninstall'
255
258
  print(
256
259
  'Cleaning package.json dependencies from caniuse-lite\n' +
257
260
  yellow('$ ' + del + ' caniuse-lite') + '\n'
package/CHANGELOG.md DELETED
@@ -1,511 +0,0 @@
1
- # Change Log
2
- This project adheres to [Semantic Versioning](http://semver.org/).
3
-
4
- ## 4.16.2
5
- * Fixed `--update-db` (by @ialarmedalien).
6
-
7
- ## 4.16.1
8
- * Fixed Chrome 4 with `mobileToDesktop` (by Aron Woost).
9
-
10
- ## 4.16
11
- * Add `browserslist config` query.
12
-
13
- ## 4.15
14
- * Add TypeScript types (by Dmitry Semigradsky).
15
-
16
- ## 4.14.7
17
- * Fixed Yarn Workspaces support to `--update-db` (by Fausto Núñez Alberro).
18
- * Added browser changes to `--update-db` (by @AleksandrSl).
19
- * Added color output to `--update-db`.
20
- * Updated `package.funding` to have link to our Open Collective.
21
-
22
- ## 4.14.6
23
- * Fixed Yarn support in `--update-db` (by Ivan Storck).
24
- * Fixed npm 7 support in `--update-db`.
25
-
26
- ## 4.14.5
27
- * Fixed `last 2 electron versions` query (by Sergey Melyukov).
28
-
29
- ## 4.14.4
30
- * Fixed `Unknown version 59 of op_mob` error.
31
-
32
- ## 4.14.3
33
- * Update Firefox ESR.
34
-
35
- ## 4.14.2
36
- * Fixed `--update-db` on Windows (by James Ross).
37
- * Improved `--update-db` output.
38
-
39
- ## 4.14.1
40
- * Added `--update-db` explanation (by Justin Zelinsky).
41
-
42
- ## 4.14
43
- * Add `BROWSERSLIST_DANGEROUS_EXTEND` support (by Timo Mayer).
44
-
45
- ## 4.13
46
- * Added `supports` query to select browsers (by Jesús Leganés-Combarro).
47
-
48
- ## 4.12.2
49
- * Update Firefox ESR.
50
-
51
- ## 4.12.1
52
- * Update `package.json` scanning tool for `--update-db` (by Luke Edwards).
53
- * Improve docs (by Mukundan Senthil).
54
- * Drop Node.js 13.0-13.6 support because of ES modules bug in that versions.
55
-
56
- ## 4.12
57
- * Add environments to shared configs (by Yevgeny Petukhov).
58
- * Fix docs (by Dmitry Statsenko and Thomas Pozzo di Borgo).
59
-
60
- ## 4.11.1
61
- * Fix Node.js 6 support.
62
-
63
- ## 4.11
64
- * Add `npx browserslist --mobile-to-desktop` (by James Ross).
65
-
66
- ## 4.10
67
- * Add `npx browserslist --update-db` (by Ivan Solovev).
68
-
69
- ## 4.9.1
70
- * Normalize incorrect Can I Use regional data (by Huáng Jùnliàng).
71
-
72
- ## 4.9
73
- * Add `node X-Y` query support (by Yuping Zuo).
74
-
75
- ## 4.8.7
76
- * Fix `last N major versions` (by Valeriy Trubachev).
77
-
78
- ## 4.8.6
79
- * Fix `Unknown version 10 of op_mob` error in `mobileToDesktop` option.
80
-
81
- ## 4.8.5
82
- * Fix `last N browsers` again after new `caniuse-db` API changes.
83
-
84
- ## 4.8.4
85
- * Fix released versions detection for queries like `last N browsers`.
86
- * Add IE 11 Mobile to `dead` browsers.
87
-
88
- ## 4.8.3
89
- * Fix warning message (by Anton Ivanov).
90
-
91
- ## 4.8.2
92
- * Fix `Cannot convert undefined or null to object` (by Antoine Clausse).
93
- * Fix `mobileToDesktop` in `defaults` (by Huáng Jùnliàng).
94
-
95
- ## 4.8.1
96
- * Fix Chrome and `mobileToDesktop` (by Huáng Jùnliàng).
97
-
98
- ## 4.8
99
- * Add `> 5% in browserslist-config-my stats` query (by Andrew Leedham).
100
- * Improve docs (by Danny van Kooten).
101
-
102
- ## 4.7.3
103
- * Add funding link for `npm fund`.
104
-
105
- ## 4.7.2
106
- * Add cache for query parsing.
107
- * Improve config caching (by Kārlis Gaņģis).
108
- * Update Firefox ESR.
109
-
110
- ## 4.7.1
111
- * Improve caching.
112
-
113
- ## 4.7
114
- * Add PhantomJS queries.
115
- * Improve docs (by Dorian Koehring).
116
-
117
- ## 4.6.6
118
- * Remove Safari from `dead` query.
119
-
120
- ## 4.6.5
121
- * Add Samsung 4 browser to `dead` query.
122
- * Remove dirty fix for `android all` error.
123
-
124
- ## 4.6.4
125
- * Add Firefox 68 to `Firefox ESR` query.
126
-
127
- ## 4.6.3
128
- * Dirty fix for `android all` error.
129
-
130
- ## 4.6.2
131
- * Fix `last x version` and similar queries for Android (by Tony Ross).
132
-
133
- ## 4.6.1
134
- * Fix patch version support for Electron (by Kilian Valkhof).
135
-
136
- ## 4.6
137
- * Add `mobileToDesktop` option (by Nicolò Ribaudo).
138
-
139
- ## 4.5.6
140
- * Make `Node > 5` and `node > 5` queries case insensitive.
141
-
142
- ## 4.5.5
143
- * Fix CLI help (by Marcel Gerber).
144
- * Add KaiOS browser to docs.
145
-
146
- ## 4.5.4
147
- * Update docs (by Andrew Leedham and Dan Onoshko).
148
-
149
- ## 4.5.3
150
- * Fix splitting string to queries.
151
-
152
- ## 4.5.2
153
- * Show default browsers in CLI on project without config.
154
-
155
- ## 4.5.1
156
- * Improve text for the warning about outdated `caniuse-lite`.
157
-
158
- ## 4.5
159
- * Add `>=`, `>`, and `<=` support for Node.js version (by Mathspy Terabithian).
160
-
161
- ## 4.4.2
162
- * Allow to have string in `package.json` (by @dmarkhas).
163
-
164
- ## 4.4.1
165
- * Allow to use `.` in scope name of shareable config (by Gustav Nikolaj).
166
-
167
- ## 4.4
168
- * Added `and` and `or` keywords to combine queries (by Jon Ege Ronnenberg).
169
-
170
- ## 4.3.7
171
- * Fix fraction years support in `last 1.5 years` (by Clément P).
172
- * Fix version-less browser support.
173
-
174
- ## 4.3.6
175
- * Fix version-less browser support in custom statistics (by Alex Walter).
176
-
177
- ## 4.3.5
178
- * Fix `not` query for wrong Can I Use data.
179
-
180
- ## 4.3.4
181
- * Allow to update `node-releases` without new Browserslist releases.
182
-
183
- ## 4.3.3
184
- * Fix Node.js 11 support.
185
-
186
- ## 4.3.2
187
- * Fix `Unknown version 11 of Node.js` error (by Dan Onoshko).
188
-
189
- ## 4.3.1
190
- * Fix conflict between `caniuse-lite` and custom browsers statistics.
191
-
192
- ## 4.3
193
- * Allow to use `extends browserslist-config-a/file` (by @Schweinepriester).
194
-
195
- ## 4.2.1
196
- * Use new `node-releases` support (by Sergey Rubanov).
197
-
198
- ## 4.2
199
- * Add `--json` argument for CLI.
200
- * Allow to pass multiple areas in CLI by `--coverage=US,alt-AS,global`.
201
-
202
- ## 4.1.2
203
- * Better `unknow query` error message.
204
- * Use latest `node-releases`.
205
-
206
- ## 4.1.1
207
- * Update Firefox ESR versions.
208
-
209
- ## 4.1
210
- * Add `current node` query.
211
- * Add contributors widget to docs (by Sergey Surkov).
212
-
213
- ## 4.0.2
214
- * Fix new `node-releases` support (by Sergey Rubanov).
215
- * Fix error text (by Josh Smith).
216
-
217
- ## 4.0.1
218
- * Reduce npm package size.
219
- * Fix docs.
220
-
221
- ## 4.0.0 “Erinaceus amurensis”
222
- * Add `node X` and `maintained node versions` queries (by Pavel Vostrikov).
223
- * Remove Node.js 4 support.
224
- * Show warning if `caniuse-lite` is old (by Anton Tuzhik).
225
- * Add comma support in config file.
226
-
227
- ## 3.2.8
228
- * Add IE 9-5.5 to dead browsers.
229
- * Remove development configs from npm package.
230
-
231
- ## 3.2.7
232
- * Add Firefox 60 as Firefox ESR.
233
-
234
- ## 3.2.6
235
- * Add Opera Mini 12 to dead browsers.
236
- * Update docs (by Jamie Kyle).
237
-
238
- ## 3.2.5
239
- * Fix excluding Opera Mini and other browsers with `all` version.
240
-
241
- ## 3.2.4
242
- * Resolve shareable config from current working directory.
243
-
244
- ## 3.2.3
245
- * Fix `package.json` config validation for single string case.
246
- * Fix CLI error reporting.
247
-
248
- ## 3.2.2
249
- * Add `package.json` config validation.
250
- * Move project to `browserlist` GitHub organization.
251
-
252
- ## 3.2.1
253
- * Fix error text (by Steve Schrab).
254
-
255
- ## 3.2
256
- * Add `cover 99%` query (by Vasily Fedoseyev).
257
- * Add `cover 99% in US` query (by Vasily Fedoseyev).
258
- * Add `cover 99% in my stats` query (by Vasily Fedoseyev).
259
- * Add `"my stats"` support to `browserlist.coverage()` (by Vasily Fedoseyev).
260
-
261
- ## 3.1.2
262
- * Add more clear error on missed browser version.
263
-
264
- ## 3.1.1
265
- * Fix JSDoc (by Sylvain Pollet-Villard).
266
-
267
- ## 3.1
268
- * Add `ignoreUnknownVersions` option.
269
- * Fix docs (by Pascal Duez).
270
-
271
- ## 3.0 “Atelerix sclateri”
272
- * Remove country statistics from client-side build of Browserslist.
273
- * Change `> 1%` to `> 0.5%` in default query.
274
- * Add `not dead` to default query.
275
- * Change default environment to `production` (by Marco Fugaro).
276
- * Add `dead` query support with IE 10 and BlackBerry browser.
277
- * Add multiple environments in one section support (by Evilebot Tnawi).
278
- * Add custom statistics support to `browserlist.coverage()`.
279
- * Fix `path` option check.
280
-
281
- ## 2.11.3
282
- * Fix for `path: undefined` option.
283
-
284
- ## 2.11.2
285
- * Remove Node.js specific code from webpack build.
286
-
287
- ## 2.11.1
288
- * Fix using Browserslist in browser with `path` but without `fs`.
289
-
290
- ## 2.11
291
- * Add `last 2 years` query support (by James Harris).
292
-
293
- ## 2.10.2
294
- * Fix Browserify support.
295
-
296
- ## 2.10.1
297
- * Fix using Browserslist without `process` (by Andrew Patton).
298
-
299
- ## 2.10
300
- * Add `< 1%` and `<= 1%` queries support (by August Kaiser).
301
-
302
- ## 2.9.1
303
- * Fix unknown query on trailing spaces in query.
304
-
305
- ## 2.9
306
- * Add `last Electron versions` and `last Electron major versions` queries
307
- (by Louis Mouhat).
308
-
309
- ## 2.8
310
- * Add `since 2016-03` and `since 2016-03-20` queries support (by Andrew Blick).
311
-
312
- ## 2.7
313
- * Add `since 2016` queries support (by Igor Deryabin).
314
-
315
- ## 2.6.1
316
- * Fix `Path must be a string` error.
317
-
318
- ## 2.6
319
- * By default load config from current directory in CLI tool.
320
-
321
- ## 2.5.1
322
- * Allow `@scope/browserlist-config` config name (by Jamie Connolly).
323
-
324
- ## 2.5
325
- * Add `extends` query (by YellowKirby).
326
-
327
- ## 2.4.1
328
- * Throw error if `package.json` contain `browserlist` instead of `browserslist`.
329
-
330
- ## 2.4
331
- * Add `last n major versions` query (by John Sanders).
332
-
333
- ## 2.3.3
334
- * Fix browsers support.
335
-
336
- ## 2.3.2
337
- * Fix `> 0` query for browsers with one version (by Nikolay Solovyov).
338
-
339
- ## 2.3.1
340
- * Reduce library size.
341
-
342
- ## 2.3
343
- * Add `unreleased versions` and `unreleased Chrome versions` queries.
344
-
345
- ## 2.2.2
346
- * Fix `Path must be a string` error (by Pieter Beulque).
347
-
348
- ## 2.2.1
349
- * Fix security issue with regions dynamic `require`.
350
-
351
- ## 2.2
352
- * Add region usage statistics support (by Clément P).
353
-
354
- ## 2.1.5
355
- * Remove Firefox 45 from Firefox ESR.
356
-
357
- ## 2.1.4
358
- * Use both ESR versions when they actual.
359
-
360
- ## 2.1.3
361
- * Add warning on first exclude query.
362
-
363
- ## 2.1.2
364
- * Fix non-Node.js environments support.
365
-
366
- ## 2.1.1
367
- * Fix CLI arguments parsing.
368
-
369
- ## 2.1
370
- * Add `>= 5%`, `>= 5% in US` and `>= 5% in my stats` queries.
371
-
372
- ## 2.0 “Atelerix frontalis”
373
- * `last n versions` returns versions for all browsers, not only main browsers.
374
- * Cache file system operations (by Aarni Koskela).
375
- * Use `caniuse-lite` 1 MB instead of `caniuse-db` 7 MB (by Ben Briggs).
376
- * Add `.browserslistrc` config support.
377
- * Add QQ Browser for Android support.
378
- * Add tests for CLI (by Zhulduz Zhankenova).
379
-
380
- ## 1.7.7
381
- * Update Firefox ESR.
382
-
383
- ## 1.7.6
384
- * Fix Android Chrome selection.
385
-
386
- ## 1.7.5
387
- * Fix combining `not` query with country based statistics.
388
- * Fix `--env` argument in CLI (by Tuure Savuoja).
389
-
390
- ## 1.7.4
391
- * Speed up browser sorting (by Aarni Koskela).
392
-
393
- ## 1.7.3
394
- * Fix config finding when directory was passed to `path` (by Aarni Koskela).
395
-
396
- ## 1.7.2
397
- * Fix config finding algorithm (by Aarni Koskela).
398
-
399
- ## 1.7.1
400
- * Fix unreleased browsers version detection.
401
-
402
- ## 1.7
403
- * Add `--config` and `--env` arguments to CLI (by Jarek Rencz).
404
-
405
- ## 1.6
406
- * Convert Electron version to Chrome (by Kilian Valkhof).
407
- * Fix `0` version mistake in Can I Use data.
408
-
409
- ## 1.5.2
410
- * Fix browser versions ordering (by Marco Massarotto).
411
-
412
- ## 1.5.1
413
- * Fix error on `package.json` and `browserslist` in same directory.
414
-
415
- ## 1.5
416
- * Add `package.json` support (by Stepan Kuzmin).
417
- * Add environments support (by Maksim Semenov and openlibser).
418
- * Add `browserslist-stats.json` file support (by Oleh Aloshkin).
419
- * Add `config` option to CLI (by Evilebot Tnawi).
420
- * Add JSDoc.
421
- * Fix tests on Windows (by Anna Stoliar).
422
- * Don’t set custom usage statistics globally.
423
-
424
- ## 1.4
425
- * Add `defaults` keyword.
426
-
427
- ## 1.3.6
428
- * Add `UCAndroid` alias to `and_uc` (by Evilebot Tnawi).
429
-
430
- ## 1.3.5
431
- * Fix Opera Mini support. Use `op_mini all`.
432
-
433
- ## 1.3.4
434
- * Add space-less `>1%` and `>.5%` syntax support (by Andreas Lind).
435
-
436
- ## 1.3.3
437
- * Clean `0` versions in some country-based requests.
438
-
439
- ## 1.3.2
440
- * Update Firefox ESR.
441
-
442
- ## 1.3.1
443
- * Add Safari TP support.
444
-
445
- ## 1.3
446
- * Add coverage for specific country (by Joshua Wise).
447
-
448
- ## 1.2
449
- * Add `browserslist.coverage()` method.
450
- * Add `--coverage` and `-c` argument to CLI.
451
- * Add `-v` argument support to CLI.
452
- * Better error handling in CLI.
453
-
454
- ## 1.1.3
455
- * Fix jspm support (by Sean Anderson).
456
-
457
- ## 1.1.2
458
- * Fix jspm support (by Sean Anderson).
459
-
460
- ## 1.1.1
461
- * Fix space-less `>10%` and `>10% in my stats` queries.
462
- * Normalize error messages.
463
- * Remove development files from npm package.
464
-
465
- ## 1.1
466
- * Added query against custom browser usage data (by Daniel Rey).
467
-
468
- ## 1.0.1
469
- * Update Firefox ESR (by Rouven Weßling).
470
-
471
- ## 1.0 “Atelerix algirus”
472
- * Remove Opera 12.1 from default query.
473
- * Add `not` keyword and exclude browsers by query.
474
- * Add Microsoft Edge support (by Andrey Polischuk).
475
- * Add CLI for debug and non-JS usage (by Luke Horvat).
476
- * Use own class in Browserslist errors.
477
-
478
- ## 0.5
479
- * Add version ranges `IE 6-9` (by Ben Briggs).
480
-
481
- ## 0.4
482
- * Add `config` option and `BROWSERSLIST_CONFIG` environment variable support.
483
- * Add symlink config support.
484
-
485
- ## 0.3.3
486
- * Fix DynJS compatibility (by Nick Howes).
487
-
488
- ## 0.3.2
489
- * Fix joined versions on versions query (by Vincent De Oliveira).
490
-
491
- ## 0.3.1
492
- * Fix global variable leak (by Peter Müller).
493
-
494
- ## 0.3
495
- * Takes queries from `BROWSERSLIST` environment variable.
496
-
497
- ## 0.2
498
- * Return Can I Use joined versions as `ios_saf 7.0-7.1`.
499
-
500
- ## 0.1.3
501
- * Better work with Can I Use joined versions like `ios_saf 7.0-7.1`.
502
- * Browserslist now understands `ios_saf 7.0` or `ios_saf 7`.
503
-
504
- ## 0.1.2
505
- * Do not create global `browserslist` var (by Maxime Thirouin).
506
-
507
- ## 0.1.1
508
- * Sort browsers by name and version.
509
-
510
- ## 0.1 “Atelerix albiventris”
511
- * Initial release.