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 +3 -0
- package/README.md +14 -17
- package/index.js +32 -33
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
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
|
-
```
|
|
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.
|
|
131
|
-
3. `
|
|
132
|
-
4. `
|
|
133
|
-
5.
|
|
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
|
-
|
|
469
|
+
const browserslist = require('browserslist')
|
|
473
470
|
|
|
474
471
|
// Your CSS/JS build tool code
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
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
|
|
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
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
return selected.concat(
|
|
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
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
return selected.concat(
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
619
|
+
var list = data.versions.filter(function (v) {
|
|
604
620
|
return data.released.indexOf(v) === -1
|
|
605
621
|
})
|
|
606
|
-
|
|
607
|
-
|
|
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.
|
|
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.
|
|
15
|
-
"electron-to-chromium": "^1.3.
|
|
16
|
-
"node-releases": "^1.1.
|
|
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": {
|