3 var updateDb = require('update-browserslist-db')
6 var browserslist = require('./')
7 var pkg = require('./package.json')
9 var args = process.argv.slice(2)
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'
26 return args.some(function (str) {
27 return str === arg || str.indexOf(arg + '=') === 0
32 process.stderr.write('browserslist: ' + msg + '\n')
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)
51 for (var i = 0; i < args.length; i++) {
52 if (args[i][0] !== '-') {
53 queries = args[i].replace(/^["']|["']$/g, '')
57 var arg = args[i].split('=')
61 if (value) value = value.replace(/^["']|["']$/g, '')
63 if (name === '--config' || name === '-b') {
65 } else if (name === '--env' || name === '-e') {
67 } else if (name === '--stats' || name === '-s') {
69 } else if (name === '--coverage' || name === '-c') {
70 if (mode !== 'json') mode = 'coverage'
72 areas = value.split(',')
76 } else if (name === '--json') {
78 } else if (name === '--mobile-to-desktop') {
80 opts.mobileToDesktop = true
81 } else if (name === '--ignore-unknown-versions') {
83 opts.ignoreUnknownVersions = true
85 error('Unknown arguments ' + args[i] + '.\n\n' + USAGE)
91 browsers = browserslist(queries, opts)
93 if (e.name === 'BrowserslistError') {
95 } /* c8 ignore start */ else {
101 if (mode === 'browsers') {
102 browsers.forEach(function (browser) {
103 process.stdout.write(browser + '\n')
106 coverage = areas.map(function (area) {
108 if (area !== 'global') {
110 } else if (opts.stats) {
111 stats = JSON.parse(fs.readFileSync(opts.stats))
113 var result = browserslist.coverage(browsers, stats)
114 var round = Math.round(result * 100) / 100.0
119 if (mode === 'coverage') {
120 var prefix = 'These browsers account for '
121 process.stdout.write(prefix)
122 coverage.forEach(function (data, index) {
126 if (area && area !== 'global') {
127 end = 'in the ' + area.toUpperCase()
128 } else if (opts.stats) {
129 end = 'in custom statistics'
133 process.stdout.write(prefix.replace(/./g, ' '))
136 process.stdout.write(round + '% of all users ' + end + '\n')
141 if (mode === 'json') {
142 var data = { browsers: browsers }
144 data.coverage = coverage.reduce(function (object, j) {
149 process.stdout.write(JSON.stringify(data, null, ' ') + '\n')