index.js 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. 'use strict';
  2. var path = require('path');
  3. var minimist = require('minimist');
  4. var indentString = require('indent-string');
  5. var objectAssign = require('object-assign');
  6. var camelcaseKeys = require('camelcase-keys');
  7. // needed to get the uncached parent
  8. delete require.cache[__filename];
  9. var parentDir = path.dirname(module.parent.filename);
  10. module.exports = function (opts, minimistOpts) {
  11. opts = objectAssign({
  12. pkg: './package.json',
  13. argv: process.argv.slice(2)
  14. }, opts);
  15. if (Array.isArray(opts.help)) {
  16. opts.help = opts.help.join('\n');
  17. }
  18. var pkg = typeof opts.pkg === 'string' ? require(path.join(parentDir, opts.pkg)) : opts.pkg;
  19. var argv = minimist(opts.argv, minimistOpts);
  20. var help = '\n' + indentString(pkg.description + (opts.help ? '\n\n' + opts.help : '\n'), ' ');
  21. var showHelp = function () {
  22. console.log(help);
  23. process.exit();
  24. };
  25. if (argv.version && opts.version !== false) {
  26. console.log(typeof opts.version === 'string' ? opts.version : pkg.version);
  27. process.exit();
  28. }
  29. if (argv.help && opts.help !== false) {
  30. showHelp();
  31. }
  32. var _ = argv._;
  33. delete argv._;
  34. return {
  35. input: _,
  36. flags: camelcaseKeys(argv),
  37. pkg: pkg,
  38. help: help,
  39. showHelp: showHelp
  40. };
  41. };