calculate-margin.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. /**
  2. * @param {object} tasksObj - gulp.tasks
  3. *
  4. * returns:
  5. * margin - length of longest task / options name
  6. * hasOptions - true if any task has option(s)
  7. *
  8. * @returns {{margin: number, hasOptions: boolean}}
  9. */
  10. module.exports = function (tasksObj) {
  11. var hasOptions = false;
  12. var margin = Object.keys(tasksObj).reduce(function (m, taskName) {
  13. var optionsMargin = 0, opts;
  14. // if exists, iterate options list to calculate margin for options
  15. var includeAll = process.argv.indexOf('--all') !== -1;
  16. if (includeAll || (tasksObj[taskName].help && tasksObj[taskName].help.options)) {
  17. var help = tasksObj[taskName].help || {options: {}};
  18. opts = Object.keys(help.options).sort();
  19. optionsMargin = opts.reduce(function (m, opt) {
  20. // if, at any time while iterating the tasks array, we also iterate an opts array, set hasOptions flag
  21. hasOptions = true;
  22. return m > opt.length ? m : opt.length;
  23. }, 0);
  24. }
  25. if (!(tasksObj[taskName].help || includeAll) || (m > taskName.length && m > optionsMargin)) {
  26. return m;
  27. } else if (optionsMargin > taskName.length) {
  28. return optionsMargin;
  29. } else {
  30. return taskName.length;
  31. }
  32. }, 0);
  33. return {
  34. margin: margin,
  35. hasOptions: hasOptions
  36. };
  37. };