UNPKG

2.99 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 var browsers
66 try {
67 if (!queries && !opts.config) {
68 if (browserslist.findConfig(process.cwd())) {
69 opts.path = process.cwd()
70 } else {
71 error(
72 'Browserslist config was not found. ' +
73 'Define queries or config path.' +
74 '\n\n' + USAGE
75 )
76 }
77 }
78 browsers = browserslist(queries, opts)
79 } catch (e) {
80 if (e.name === 'BrowserslistError') {
81 error(e.message)
82 } else {
83 throw e
84 }
85 }
86
87 if (mode === 'browsers') {
88 browsers.forEach(function (browser) {
89 process.stdout.write(browser + '\n')
90 })
91 } else {
92 var stats
93 if (country) {
94 stats = country
95 } else if (opts.stats) {
96 stats = JSON.parse(fs.readFileSync(opts.stats))
97 }
98 var result = browserslist.coverage(browsers, stats)
99 var round = Math.round(result * 100) / 100.0
100
101 var end = 'globally'
102 if (country && country !== 'global') {
103 end = 'in the ' + country.toUpperCase()
104 } else if (opts.stats) {
105 end = 'in custom statistics'
106 }
107
108 process.stdout.write(
109 'These browsers account for ' + round + '% of all users ' +
110 end + '\n')
111 }
112}