cli.js 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #!/usr/bin/env node
  2. var browserslist = require('./');
  3. var pkg = require('./package.json');
  4. var args = process.argv.slice(2);
  5. function isArg(arg) {
  6. return args.some(function (str) {
  7. return str === arg || str.indexOf(arg + '=') === 0;
  8. });
  9. }
  10. function getArgValue(arg) {
  11. var found = args.filter(function (str) {
  12. return str.indexOf(arg + '=') === 0;
  13. })[0];
  14. var value = found && found.split('=')[1];
  15. return value && value.replace(/^['"]|['"]$/g, '');
  16. }
  17. function error(msg) {
  18. process.stderr.write(pkg.name + ': ' + msg + '\n');
  19. process.exit(1);
  20. }
  21. function query(queries, opts) {
  22. try {
  23. return browserslist(queries, opts);
  24. } catch (e) {
  25. if ( e.name === 'BrowserslistError' ) {
  26. return error(e.message);
  27. } else {
  28. throw e;
  29. }
  30. }
  31. }
  32. if ( args.length === 0 || isArg('--help') || isArg('-h') ) {
  33. process.stdout.write([
  34. pkg.description,
  35. '',
  36. 'Usage:',
  37. ' ' + pkg.name + ' "QUERIES"',
  38. ' ' + pkg.name + ' --coverage "QUERIES"',
  39. ' ' + pkg.name + ' --coverage=US "QUERIES"',
  40. ' ' + pkg.name + ' --config=browserslist "path/to/browserlist/file"',
  41. ' ' + pkg.name + ' --env="environment name defined in config"',
  42. ' ' + pkg.name + ' --stats="path/to/browserlist/stats/file"'
  43. ].join('\n') + '\n');
  44. } else if ( isArg('--version') || isArg('-v') ) {
  45. process.stdout.write(pkg.name + ' ' + pkg.version + '\n');
  46. } else if ( isArg('--coverage') || isArg('-c') ) {
  47. var browsers = args.find(function (i) {
  48. return i[0] !== '-';
  49. });
  50. if ( !browsers ) error('Define a browsers query to get coverage');
  51. var country = getArgValue('--coverage') || getArgValue('-c');
  52. var result = browserslist.coverage(query(browsers), country);
  53. var round = Math.round(result * 100) / 100.0;
  54. var end = 'globally';
  55. if (country && country !== 'global') {
  56. end = 'in the ' + country.toUpperCase();
  57. }
  58. process.stdout.write(
  59. 'These browsers account for ' + round + '% of all users ' + end + '\n');
  60. } else if ( args.length === 1 && args[0][0] !== '-' ) {
  61. query(args[0]).forEach(function (browser) {
  62. process.stdout.write(browser + '\n');
  63. });
  64. } else if (isArg('--config') || isArg('-b')) {
  65. var opts = {
  66. config: getArgValue('--config') || getArgValue('-b')
  67. };
  68. if (isArg('--env') || isArg('-e')) {
  69. opts.env = getArgValue('--env') || getArgValue('-e');
  70. }
  71. if (isArg('--stats') || isArg('-s')) {
  72. opts.stats = getArgValue('--stats') || getArgValue('-s');
  73. }
  74. query(null, opts).forEach(function (browser) {
  75. process.stdout.write(browser + '\n');
  76. });
  77. } else {
  78. error('Unknown arguments. Use --help to pick right one.');
  79. }