Skip to content
Permalink
Newer
Older
100755 151 lines (133 sloc) 4.04 KB
Ignoring revisions in .git-blame-ignore-revs.
January 18, 2023 20:50
1
#!/usr/bin/env node
2
3
var updateDb = require('update-browserslist-db')
4
var fs = require('fs')
5
6
var browserslist = require('./')
7
var pkg = require('./package.json')
8
9
var args = process.argv.slice(2)
10
11
var USAGE =
12
'Usage:\n' +
13
' npx browserslist\n' +
14
' npx browserslist "QUERIES"\n' +
15
' npx browserslist --json "QUERIES"\n' +
16
' npx browserslist --config="path/to/browserlist/file"\n' +
17
' npx browserslist --coverage "QUERIES"\n' +
18
' npx browserslist --coverage=US "QUERIES"\n' +
19
' npx browserslist --coverage=US,RU,global "QUERIES"\n' +
20
' npx browserslist --env="environment name defined in config"\n' +
21
' npx browserslist --stats="path/to/browserlist/stats/file"\n' +
22
' npx browserslist --mobile-to-desktop\n' +
23
' npx browserslist --ignore-unknown-versions\n'
24
25
function isArg(arg) {
26
return args.some(function (str) {
27
return str === arg || str.indexOf(arg + '=') === 0
28
})
29
}
30
31
function error(msg) {
32
process.stderr.write('browserslist: ' + msg + '\n')
33
process.exit(1)
34
}
35
36
if (isArg('--help') || isArg('-h')) {
37
process.stdout.write(pkg.description + '.\n\n' + USAGE + '\n')
38
} else if (isArg('--version') || isArg('-v')) {
39
process.stdout.write('browserslist ' + pkg.version + '\n')
40
} else if (isArg('--update-db')) {
41
/* c8 ignore next 3 */
42
updateDb(function (str) {
43
process.stdout.write(str)
44
})
45
} else {
46
var mode = 'browsers'
47
var opts = {}
48
var queries
49
var areas
50
51
for (var i = 0; i < args.length; i++) {
52
if (args[i][0] !== '-') {
53
queries = args[i].replace(/^["']|["']$/g, '')
54
continue
55
}
56
57
var arg = args[i].split('=')
58
var name = arg[0]
59
var value = arg[1]
60
61
if (value) value = value.replace(/^["']|["']$/g, '')
62
63
if (name === '--config' || name === '-b') {
64
opts.config = value
65
} else if (name === '--env' || name === '-e') {
66
opts.env = value
67
} else if (name === '--stats' || name === '-s') {
68
opts.stats = value
69
} else if (name === '--coverage' || name === '-c') {
70
if (mode !== 'json') mode = 'coverage'
71
if (value) {
72
areas = value.split(',')
73
} else {
74
areas = ['global']
75
}
76
} else if (name === '--json') {
77
mode = 'json'
78
} else if (name === '--mobile-to-desktop') {
79
/* c8 ignore next */
80
opts.mobileToDesktop = true
81
} else if (name === '--ignore-unknown-versions') {
82
/* c8 ignore next */
83
opts.ignoreUnknownVersions = true
84
} else {
85
error('Unknown arguments ' + args[i] + '.\n\n' + USAGE)
86
}
87
}
88
89
var browsers
90
try {
91
browsers = browserslist(queries, opts)
92
} catch (e) {
93
if (e.name === 'BrowserslistError') {
94
error(e.message)
95
} /* c8 ignore start */ else {
96
throw e
97
} /* c8 ignore end */
98
}
99
100
var coverage
101
if (mode === 'browsers') {
102
browsers.forEach(function (browser) {
103
process.stdout.write(browser + '\n')
104
})
105
} else if (areas) {
106
coverage = areas.map(function (area) {
107
var stats
108
if (area !== 'global') {
109
stats = area
110
} else if (opts.stats) {
111
stats = JSON.parse(fs.readFileSync(opts.stats))
112
}
113
var result = browserslist.coverage(browsers, stats)
114
var round = Math.round(result * 100) / 100.0
115
116
return [area, round]
117
})
118
119
if (mode === 'coverage') {
120
var prefix = 'These browsers account for '
121
process.stdout.write(prefix)
122
coverage.forEach(function (data, index) {
123
var area = data[0]
124
var round = data[1]
125
var end = 'globally'
126
if (area && area !== 'global') {
127
end = 'in the ' + area.toUpperCase()
128
} else if (opts.stats) {
129
end = 'in custom statistics'
130
}
131
132
if (index !== 0) {
133
process.stdout.write(prefix.replace(/./g, ' '))
134
}
135
136
process.stdout.write(round + '% of all users ' + end + '\n')
137
})
138
}
139
}
140
141
if (mode === 'json') {
142
var data = { browsers: browsers }
143
if (coverage) {
144
data.coverage = coverage.reduce(function (object, j) {
145
object[j[0]] = j[1]
146
return object
147
}, {})
148
}
149
process.stdout.write(JSON.stringify(data, null, ' ') + '\n')
150
}
151
}