browserslist 4.28.3 → 4.28.4
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 +29 -2
- package/node.js +6 -1
- package/package.json +1 -1
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
|
|
@@ -149,11 +150,14 @@ function compareSemver(a, b) {
|
|
|
149
150
|
)
|
|
150
151
|
}
|
|
151
152
|
|
|
153
|
+
// this follows the npm-like semver behavior
|
|
152
154
|
function semverFilterLoose(operator, range) {
|
|
153
155
|
range = range.split('.').map(parseSimpleInt)
|
|
154
156
|
if (typeof range[1] === 'undefined') {
|
|
155
157
|
range[1] = 'x'
|
|
156
158
|
}
|
|
159
|
+
// ignore any patch version because we only return minor versions
|
|
160
|
+
// range[2] = 'x'
|
|
157
161
|
switch (operator) {
|
|
158
162
|
case '<=':
|
|
159
163
|
return function (version) {
|
|
@@ -169,6 +173,7 @@ function semverFilterLoose(operator, range) {
|
|
|
169
173
|
}
|
|
170
174
|
}
|
|
171
175
|
|
|
176
|
+
// this follows the npm-like semver behavior
|
|
172
177
|
function compareSemverLoose(version, range) {
|
|
173
178
|
if (version[0] !== range[0]) {
|
|
174
179
|
return version[0] < range[0] ? -1 : +1
|
|
@@ -289,6 +294,8 @@ function unknownQuery(query) {
|
|
|
289
294
|
)
|
|
290
295
|
}
|
|
291
296
|
|
|
297
|
+
// Adjusts last X versions queries for some mobile browsers,
|
|
298
|
+
// where caniuse data jumps from a legacy version to the latest
|
|
292
299
|
function filterJumps(list, name, nVersions, context) {
|
|
293
300
|
var jump = 1
|
|
294
301
|
switch (name) {
|
|
@@ -411,6 +418,7 @@ function browserslist(queries, opts) {
|
|
|
411
418
|
mobileToDesktop: opts.mobileToDesktop,
|
|
412
419
|
env: opts.env
|
|
413
420
|
}
|
|
421
|
+
// Removing to avoid using context.path without marking query as needsPath
|
|
414
422
|
if (needsPath) {
|
|
415
423
|
context.path = opts.path
|
|
416
424
|
}
|
|
@@ -431,6 +439,9 @@ function browserslist(queries, opts) {
|
|
|
431
439
|
name1 = name1.split(' ')
|
|
432
440
|
name2 = name2.split(' ')
|
|
433
441
|
if (name1[0] === name2[0]) {
|
|
442
|
+
// assumptions on caniuse data
|
|
443
|
+
// 1) version ranges never overlaps
|
|
444
|
+
// 2) if version is not a range, it never contains `-`
|
|
434
445
|
var version1 = name1[1].split('-')[0]
|
|
435
446
|
var version2 = name2[1].split('-')[0]
|
|
436
447
|
return compareSemver(version2.split('.'), version1.split('.'))
|
|
@@ -475,6 +486,7 @@ browserslist.parse = function (queries, opts) {
|
|
|
475
486
|
return parseQueries(queries)
|
|
476
487
|
}
|
|
477
488
|
|
|
489
|
+
// Will be filled by Can I Use data below
|
|
478
490
|
browserslist.cache = {}
|
|
479
491
|
browserslist.data = {}
|
|
480
492
|
browserslist.usage = {
|
|
@@ -482,8 +494,10 @@ browserslist.usage = {
|
|
|
482
494
|
custom: null
|
|
483
495
|
}
|
|
484
496
|
|
|
497
|
+
// Default browsers query
|
|
485
498
|
browserslist.defaults = ['> 0.5%', 'last 2 versions', 'Firefox ESR', 'not dead']
|
|
486
499
|
|
|
500
|
+
// Browser names aliases
|
|
487
501
|
browserslist.aliases = {
|
|
488
502
|
fx: 'firefox',
|
|
489
503
|
ff: 'firefox',
|
|
@@ -499,13 +513,17 @@ browserslist.aliases = {
|
|
|
499
513
|
qqandroid: 'and_qq'
|
|
500
514
|
}
|
|
501
515
|
|
|
516
|
+
// Can I Use only provides a few versions for some browsers (e.g. and_chr).
|
|
517
|
+
// Fallback to a similar browser for unknown versions
|
|
518
|
+
// Note op_mob is not included as its chromium versions are not in sync with Opera desktop
|
|
502
519
|
browserslist.desktopNames = {
|
|
503
520
|
and_chr: 'chrome',
|
|
504
521
|
and_ff: 'firefox',
|
|
505
522
|
ie_mob: 'ie',
|
|
506
|
-
android: 'chrome'
|
|
523
|
+
android: 'chrome' // has extra processing logic
|
|
507
524
|
}
|
|
508
525
|
|
|
526
|
+
// Aliases to work with joined versions like `ios_saf 7.0-7.1`
|
|
509
527
|
browserslist.versionAliases = {}
|
|
510
528
|
|
|
511
529
|
browserslist.clearCaches = env.clearCaches
|
|
@@ -798,6 +816,13 @@ var QUERIES = {
|
|
|
798
816
|
},
|
|
799
817
|
baseline: {
|
|
800
818
|
matches: ['year', 'availability', 'date', 'downstream', 'kaios'],
|
|
819
|
+
// Matches:
|
|
820
|
+
// baseline 2024
|
|
821
|
+
// baseline newly available
|
|
822
|
+
// baseline widely available
|
|
823
|
+
// baseline widely available on 2024-06-01
|
|
824
|
+
// ...with downstream
|
|
825
|
+
// ...including kaios
|
|
801
826
|
regexp:
|
|
802
827
|
/^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
828
|
select: function (context, node) {
|
|
@@ -996,6 +1021,7 @@ var QUERIES = {
|
|
|
996
1021
|
var result = []
|
|
997
1022
|
for (var name in features) {
|
|
998
1023
|
var data = byName(name, context)
|
|
1024
|
+
// Only check desktop when latest released mobile has support
|
|
999
1025
|
var iMax = data.released.length - 1
|
|
1000
1026
|
while (iMax >= 0) {
|
|
1001
1027
|
if (data.released[iMax] in features[name]) break
|
|
@@ -1277,6 +1303,7 @@ var QUERIES = {
|
|
|
1277
1303
|
}
|
|
1278
1304
|
}
|
|
1279
1305
|
|
|
1306
|
+
// Get and convert Can I Use data
|
|
1280
1307
|
|
|
1281
1308
|
;(function () {
|
|
1282
1309
|
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
|
})
|