argsparser.js 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. /**
  2. * Parser arguments array
  3. * @param {Array} args optional arguments arrray.
  4. * @return {Object} opts key value hash.
  5. * @export
  6. */
  7. exports.parse = function(args) {
  8. // args is optional, default is process.argv
  9. args = args || process.argv;
  10. var opts = {}, curSwitch;
  11. args.forEach(function(arg) {
  12. // its a switch
  13. if (/^(-|--)/.test(arg) || !curSwitch) {
  14. opts[arg] = true;
  15. curSwitch = arg;
  16. // this arg is a data
  17. } else {
  18. if (arg === 'false') {
  19. arg = false;
  20. } else if (arg === 'true') {
  21. arg = true;
  22. } else if (!isNaN(arg)) {
  23. arg = Number(arg);
  24. }
  25. // it was a boolean switch per default,
  26. // now it has got a val
  27. if (typeof opts[curSwitch] === 'boolean') {
  28. opts[curSwitch] = arg;
  29. } else if (Array.isArray(opts[curSwitch])) {
  30. opts[curSwitch].push(arg);
  31. } else {
  32. opts[curSwitch] = [opts[curSwitch], arg];
  33. }
  34. }
  35. });
  36. return opts;
  37. };