browserslist 4.28.3 → 4.28.5
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/cli.js +1 -0
- package/index.js +33 -7
- package/node.js +6 -1
- package/package.json +5 -5
package/cli.js
CHANGED
|
@@ -38,6 +38,7 @@ if (isArg('--help') || isArg('-h')) {
|
|
|
38
38
|
} else if (isArg('--version') || isArg('-v')) {
|
|
39
39
|
process.stdout.write('browserslist ' + pkg.version + '\n')
|
|
40
40
|
} else if (isArg('--update-db')) {
|
|
41
|
+
/* c8 ignore next 8 */
|
|
41
42
|
process.stdout.write(
|
|
42
43
|
'The --update-db command is deprecated.\n' +
|
|
43
44
|
'Please use npx update-browserslist-db@latest instead.\n'
|
package/index.js
CHANGED
|
@@ -7,13 +7,14 @@ var path = require('path')
|
|
|
7
7
|
|
|
8
8
|
var BrowserslistError = require('./error')
|
|
9
9
|
var env = require('./node')
|
|
10
|
-
var parseWithoutCache = require('./parse')
|
|
10
|
+
var parseWithoutCache = require('./parse') // Will load browser.js in webpack
|
|
11
11
|
|
|
12
12
|
var YEAR = 365.259641 * 24 * 60 * 60 * 1000
|
|
13
13
|
var ANDROID_EVERGREEN_FIRST = '37'
|
|
14
14
|
var OP_MOB_BLINK_FIRST = 14
|
|
15
15
|
var FIREFOX_ESR_VERSION = '140'
|
|
16
16
|
|
|
17
|
+
// Helpers
|
|
17
18
|
|
|
18
19
|
function isVersionsMatch(versionA, versionB) {
|
|
19
20
|
return (versionA + '.').indexOf(versionB + '.') === 0
|
|
@@ -80,22 +81,21 @@ function fillUsage(result, name, data) {
|
|
|
80
81
|
}
|
|
81
82
|
|
|
82
83
|
function generateFilter(sign, version) {
|
|
83
|
-
version = parseFloat(version)
|
|
84
84
|
if (sign === '>') {
|
|
85
85
|
return function (v) {
|
|
86
|
-
return parseLatestFloat(v) > version
|
|
86
|
+
return parseLatestFloat(v) > parseLatestFloat(version)
|
|
87
87
|
}
|
|
88
88
|
} else if (sign === '>=') {
|
|
89
89
|
return function (v) {
|
|
90
|
-
return parseLatestFloat(v) >= version
|
|
90
|
+
return parseLatestFloat(v) >= parseLatestFloat(version)
|
|
91
91
|
}
|
|
92
92
|
} else if (sign === '<') {
|
|
93
93
|
return function (v) {
|
|
94
|
-
return parseFloat(v) < version
|
|
94
|
+
return parseFloat(v) < parseFloat(version)
|
|
95
95
|
}
|
|
96
96
|
} else {
|
|
97
97
|
return function (v) {
|
|
98
|
-
return parseFloat(v) <= version
|
|
98
|
+
return parseFloat(v) <= parseFloat(version)
|
|
99
99
|
}
|
|
100
100
|
}
|
|
101
101
|
|
|
@@ -149,11 +149,14 @@ function compareSemver(a, b) {
|
|
|
149
149
|
)
|
|
150
150
|
}
|
|
151
151
|
|
|
152
|
+
// this follows the npm-like semver behavior
|
|
152
153
|
function semverFilterLoose(operator, range) {
|
|
153
154
|
range = range.split('.').map(parseSimpleInt)
|
|
154
155
|
if (typeof range[1] === 'undefined') {
|
|
155
156
|
range[1] = 'x'
|
|
156
157
|
}
|
|
158
|
+
// ignore any patch version because we only return minor versions
|
|
159
|
+
// range[2] = 'x'
|
|
157
160
|
switch (operator) {
|
|
158
161
|
case '<=':
|
|
159
162
|
return function (version) {
|
|
@@ -169,6 +172,7 @@ function semverFilterLoose(operator, range) {
|
|
|
169
172
|
}
|
|
170
173
|
}
|
|
171
174
|
|
|
175
|
+
// this follows the npm-like semver behavior
|
|
172
176
|
function compareSemverLoose(version, range) {
|
|
173
177
|
if (version[0] !== range[0]) {
|
|
174
178
|
return version[0] < range[0] ? -1 : +1
|
|
@@ -289,6 +293,8 @@ function unknownQuery(query) {
|
|
|
289
293
|
)
|
|
290
294
|
}
|
|
291
295
|
|
|
296
|
+
// Adjusts last X versions queries for some mobile browsers,
|
|
297
|
+
// where caniuse data jumps from a legacy version to the latest
|
|
292
298
|
function filterJumps(list, name, nVersions, context) {
|
|
293
299
|
var jump = 1
|
|
294
300
|
switch (name) {
|
|
@@ -411,6 +417,7 @@ function browserslist(queries, opts) {
|
|
|
411
417
|
mobileToDesktop: opts.mobileToDesktop,
|
|
412
418
|
env: opts.env
|
|
413
419
|
}
|
|
420
|
+
// Removing to avoid using context.path without marking query as needsPath
|
|
414
421
|
if (needsPath) {
|
|
415
422
|
context.path = opts.path
|
|
416
423
|
}
|
|
@@ -431,6 +438,9 @@ function browserslist(queries, opts) {
|
|
|
431
438
|
name1 = name1.split(' ')
|
|
432
439
|
name2 = name2.split(' ')
|
|
433
440
|
if (name1[0] === name2[0]) {
|
|
441
|
+
// assumptions on caniuse data
|
|
442
|
+
// 1) version ranges never overlaps
|
|
443
|
+
// 2) if version is not a range, it never contains `-`
|
|
434
444
|
var version1 = name1[1].split('-')[0]
|
|
435
445
|
var version2 = name2[1].split('-')[0]
|
|
436
446
|
return compareSemver(version2.split('.'), version1.split('.'))
|
|
@@ -475,6 +485,7 @@ browserslist.parse = function (queries, opts) {
|
|
|
475
485
|
return parseQueries(queries)
|
|
476
486
|
}
|
|
477
487
|
|
|
488
|
+
// Will be filled by Can I Use data below
|
|
478
489
|
browserslist.cache = {}
|
|
479
490
|
browserslist.data = {}
|
|
480
491
|
browserslist.usage = {
|
|
@@ -482,8 +493,10 @@ browserslist.usage = {
|
|
|
482
493
|
custom: null
|
|
483
494
|
}
|
|
484
495
|
|
|
496
|
+
// Default browsers query
|
|
485
497
|
browserslist.defaults = ['> 0.5%', 'last 2 versions', 'Firefox ESR', 'not dead']
|
|
486
498
|
|
|
499
|
+
// Browser names aliases
|
|
487
500
|
browserslist.aliases = {
|
|
488
501
|
fx: 'firefox',
|
|
489
502
|
ff: 'firefox',
|
|
@@ -499,13 +512,17 @@ browserslist.aliases = {
|
|
|
499
512
|
qqandroid: 'and_qq'
|
|
500
513
|
}
|
|
501
514
|
|
|
515
|
+
// Can I Use only provides a few versions for some browsers (e.g. and_chr).
|
|
516
|
+
// Fallback to a similar browser for unknown versions
|
|
517
|
+
// Note op_mob is not included as its chromium versions are not in sync with Opera desktop
|
|
502
518
|
browserslist.desktopNames = {
|
|
503
519
|
and_chr: 'chrome',
|
|
504
520
|
and_ff: 'firefox',
|
|
505
521
|
ie_mob: 'ie',
|
|
506
|
-
android: 'chrome'
|
|
522
|
+
android: 'chrome' // has extra processing logic
|
|
507
523
|
}
|
|
508
524
|
|
|
525
|
+
// Aliases to work with joined versions like `ios_saf 7.0-7.1`
|
|
509
526
|
browserslist.versionAliases = {}
|
|
510
527
|
|
|
511
528
|
browserslist.clearCaches = env.clearCaches
|
|
@@ -798,6 +815,13 @@ var QUERIES = {
|
|
|
798
815
|
},
|
|
799
816
|
baseline: {
|
|
800
817
|
matches: ['year', 'availability', 'date', 'downstream', 'kaios'],
|
|
818
|
+
// Matches:
|
|
819
|
+
// baseline 2024
|
|
820
|
+
// baseline newly available
|
|
821
|
+
// baseline widely available
|
|
822
|
+
// baseline widely available on 2024-06-01
|
|
823
|
+
// ...with downstream
|
|
824
|
+
// ...including kaios
|
|
801
825
|
regexp:
|
|
802
826
|
/^baseline\s+(?:(\d+)|(newly|widely)\s+available(?:\s+on\s+(\d{4}-\d{2}-\d{2}))?)?(\s+with\s+downstream)?(\s+including\s+kaios)?$/i,
|
|
803
827
|
select: function (context, node) {
|
|
@@ -996,6 +1020,7 @@ var QUERIES = {
|
|
|
996
1020
|
var result = []
|
|
997
1021
|
for (var name in features) {
|
|
998
1022
|
var data = byName(name, context)
|
|
1023
|
+
// Only check desktop when latest released mobile has support
|
|
999
1024
|
var iMax = data.released.length - 1
|
|
1000
1025
|
while (iMax >= 0) {
|
|
1001
1026
|
if (data.released[iMax] in features[name]) break
|
|
@@ -1277,6 +1302,7 @@ var QUERIES = {
|
|
|
1277
1302
|
}
|
|
1278
1303
|
}
|
|
1279
1304
|
|
|
1305
|
+
// Get and convert Can I Use data
|
|
1280
1306
|
|
|
1281
1307
|
;(function () {
|
|
1282
1308
|
for (var name in agents) {
|
package/node.js
CHANGED
|
@@ -27,7 +27,7 @@ function checkExtend(name) {
|
|
|
27
27
|
'Browserslist config needs `browserslist-config-` prefix. ' + use
|
|
28
28
|
)
|
|
29
29
|
}
|
|
30
|
-
if (name.replace(/^@[^/]
|
|
30
|
+
if (name.replace(/^@[^/]+\//, '').indexOf('.') !== -1) {
|
|
31
31
|
throw new BrowserslistError(
|
|
32
32
|
'`.` not allowed in Browserslist config name. ' + use
|
|
33
33
|
)
|
|
@@ -44,6 +44,7 @@ function getPathType(filepath) {
|
|
|
44
44
|
try {
|
|
45
45
|
stats = fs.existsSync(filepath) && fs.statSync(filepath)
|
|
46
46
|
} catch (err) {
|
|
47
|
+
/* c8 ignore start */
|
|
47
48
|
if (
|
|
48
49
|
err.code !== 'ENOENT' &&
|
|
49
50
|
err.code !== 'EACCES' &&
|
|
@@ -51,6 +52,7 @@ function getPathType(filepath) {
|
|
|
51
52
|
) {
|
|
52
53
|
throw err
|
|
53
54
|
}
|
|
55
|
+
/* c8 ignore end */
|
|
54
56
|
}
|
|
55
57
|
|
|
56
58
|
if (stats && stats.isDirectory()) return PATHTYPE_DIR
|
|
@@ -237,6 +239,8 @@ function normalizeStats(data, stats) {
|
|
|
237
239
|
function normalizeUsageData(usageData, data) {
|
|
238
240
|
for (var browser in usageData) {
|
|
239
241
|
var browserUsage = usageData[browser]
|
|
242
|
+
// https://github.com/browserslist/browserslist/issues/431#issuecomment-565230615
|
|
243
|
+
// caniuse-db returns { 0: "percentage" } for `and_*` regional stats
|
|
240
244
|
if ('0' in browserUsage) {
|
|
241
245
|
var versions = data[browser].versions
|
|
242
246
|
browserUsage[versions[versions.length - 1]] = browserUsage[0]
|
|
@@ -275,6 +279,7 @@ module.exports = {
|
|
|
275
279
|
checkExtend(name)
|
|
276
280
|
}
|
|
277
281
|
var stats = require(
|
|
282
|
+
// Use forward slashes for module paths, also on Windows.
|
|
278
283
|
require.resolve(path.posix.join(name, 'browserslist-stats.json'), {
|
|
279
284
|
paths: ['.']
|
|
280
285
|
})
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "browserslist",
|
|
3
|
-
"version": "4.28.
|
|
3
|
+
"version": "4.28.5",
|
|
4
4
|
"description": "Share target browsers between different front-end tools, like Autoprefixer, Stylelint and babel-env-preset",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"browsers",
|
|
@@ -33,10 +33,10 @@
|
|
|
33
33
|
},
|
|
34
34
|
"types": "./index.d.ts",
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"baseline-browser-mapping": "^2.10.
|
|
37
|
-
"caniuse-lite": "^1.0.
|
|
38
|
-
"electron-to-chromium": "^1.5.
|
|
39
|
-
"node-releases": "^2.0.
|
|
36
|
+
"baseline-browser-mapping": "^2.10.42",
|
|
37
|
+
"caniuse-lite": "^1.0.30001800",
|
|
38
|
+
"electron-to-chromium": "^1.5.387",
|
|
39
|
+
"node-releases": "^2.0.50",
|
|
40
40
|
"update-browserslist-db": "^1.2.3"
|
|
41
41
|
},
|
|
42
42
|
"engines": {
|