UNPKG

2.97 kBJavaScriptView Raw
1#!/usr/bin/env node
2
3var fs = require('fs')
4
5var browserslist = require('./')
6var pkg = require('./package.json')
7var args = process.argv.slice(2)
8
9var USAGE = 'Usage:\n' +
10 ' ' + pkg.name + '\n' +
11 ' ' + pkg.name + ' "QUERIES"\n' +
12 ' ' + pkg.name + ' --config="path/to/browserlist/file"\n' +
13 ' ' + pkg.name + ' --coverage "QUERIES"\n' +
14 ' ' + pkg.name + ' --coverage=US "QUERIES"\n' +
15 ' ' + pkg.name + ' --env="environment name defined in config"\n' +
16 ' ' + pkg.name + ' --stats="path/to/browserlist/stats/file"'
17
18function isArg (arg) {
19 return args.some(function (str) {
20 return str === arg || str.indexOf(arg + '=') === 0
21 })
22}
23
24function error (msg) {
25 process.stderr.write(pkg.name + ': ' + msg + '\n')
26 process.exit(1)
27}
28
29if (isArg('--help') || isArg('-h')) {
30 process.stdout.write(pkg.description + '.\n\n' + USAGE + '\n')
31} else if (isArg('--version') || isArg('-v')) {
32 process.stdout.write(pkg.name + ' ' + pkg.version + '\n')
33} else {
34 var mode = 'browsers'
35 var opts = { }
36 var queries
37 var country
38
39 for (var i = 0; i < args.length; i++) {
40 if (args[i][0] !== '-') {
41 queries = args[i].replace(/^['"]|['"]$/g, '')
42 continue
43 }
44
45 var arg = args[i].split('=')
46 var name = arg[0]
47 var value = arg[1]
48
49 if (value) value = value.replace(/^['"]|['"]$/g, '')
50
51 if (name === '--config' || name === '-b') {
52 opts.config = value
53 } else if (name === '--env' || name === '-e') {
54 opts.env = value
55 } else if (name === '--stats' || name === '-s') {
56 opts.stats = value
57 } else if (name === '--coverage' || name === '-c') {
58 mode = 'coverage'
59 if (value) country = value
60 } else {
61 error('Unknown arguments ' + args[i] + '.\n\n' + USAGE)
62 }
63 }
64
65 if (!queries && !opts.config) {
66 if (browserslist.findConfig(process.cwd())) {
67 opts.path = process.cwd()
68 } else {
69 error(
70 'Browserslist config did not found. ' +
71 'Define queries or config path.' +
72 '\n\n' + USAGE
73 )
74 }
75 }
76
77 var browsers
78 try {
79 browsers = browserslist(queries, opts)
80 } catch (e) {
81 if (e.name === 'BrowserslistError') {
82 error(e.message)
83 } else {
84 throw e
85 }
86 }
87
88 if (mode === 'browsers') {
89 browsers.forEach(function (browser) {
90 process.stdout.write(browser + '\n')
91 })
92 } else {
93 var stats
94 if (country) {
95 stats = country
96 } else if (opts.stats) {
97 stats = JSON.parse(fs.readFileSync(opts.stats))
98 }
99 var result = browserslist.coverage(browsers, stats)
100 var round = Math.round(result * 100) / 100.0
101
102 var end = 'globally'
103 if (country && country !== 'global') {
104 end = 'in the ' + country.toUpperCase()
105 } else if (opts.stats) {
106 end = 'in custom statistics'
107 }
108
109 process.stdout.write(
110 'These browsers account for ' + round + '% of all users ' +
111 end + '\n')
112 }
113}