parser 1.74 KB
#!/usr/bin/env node
(function() {

  var fs = require('fs');
  var path = require('path');
  var parse = require('../parser').parse;
  var jsesc = require('jsesc');
  var regexes = process.argv.splice(2);
  var first = regexes[0];
  var data;
  var log = console.log;
  var flags = '';
  var main = function() {
    if (/^(?:-h|--help|undefined)$/.test(first)) {
      log([
        '\nUsage:\n',
        '\tregjsparser [regex ...]',
        '\tregjsparser [-f | --flags] u [regex ...]',
        '\tregjsparser [-v | --version]',
        '\tregjsparser [-h | --help]',
        '\nExamples:\n',
        '\tregjsparser \'^foo.bar$\'',
        '\tregjsparser \'[a-zA-Z0-9]\''
      ].join('\n'));
      return process.exit(1);
    }

    if (/^(?:-v|--version)$/.test(first)) {
      log('v%s', require(path.resolve(__dirname, '../package.json')).version);
      return process.exit(1);
    }

    if (/^(?:-f|--flags)$/.test(first)) {
      flags = regexes[1];
      regexes = regexes.slice(2);
    }

    regexes.forEach(function(snippet) {
      try {
        result = parse(snippet, flags);
        log(jsesc(result, {
          'json': true,
          'compact': false,
          'indent': '\t'
        }));
      } catch(error) {
        log(error.message + '\n');
        log('Error: failed to parse. Make sure the regular expression is valid.');
        log('If you think this is a bug in regjsparser, please report it:');
        log('\thttps://github.com/jviereck/regjsparser/issues/new');
        log('\nStack trace:\n');
        log(error.stack);
        return process.exit(1);
      }
    });
    // Return with exit status 0 outside of the `forEach` loop, in case
    // multiple regular expressions were passed in.
    return process.exit(0);
  };

  main();

}());