1 | "use strict";
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 | var _ = require("lodash")
|
8 | ;
|
9 |
|
10 | var util = {
|
11 |
|
12 | |
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 | parseArgs: function(value, env, file) {
|
24 | var reg = /[^\s'"]+|['"]([^'"]*)['"]/gi, str = value, arr = [], match;
|
25 | if (env) { arr.push(env); }
|
26 | if (file) { arr.push(file); }
|
27 | do {
|
28 | match = reg.exec(str);
|
29 | if (match !== null) {
|
30 | arr.push(match[1] ? match[1] : match[0]);
|
31 | }
|
32 | } while (match !== null);
|
33 | return arr;
|
34 | },
|
35 |
|
36 | |
37 |
|
38 |
|
39 |
|
40 |
|
41 |
|
42 |
|
43 |
|
44 | humanReadableArgName: function(arg) {
|
45 | var nameOutput = arg.name + (arg.variadic === true ? "..." : "");
|
46 | return arg.required
|
47 | ? "<" + nameOutput + ">"
|
48 | : "[" + nameOutput + "]";
|
49 | },
|
50 |
|
51 | |
52 |
|
53 |
|
54 |
|
55 |
|
56 |
|
57 |
|
58 |
|
59 |
|
60 | prettifyArray: function(arr) {
|
61 | arr = arr || [];
|
62 | var width = process.stdout.columns;
|
63 | var longest = (arr.sort(function(a, b) { return b.length - a.length; })[0] || "").length + 2;
|
64 | var fullWidth = String(arr.join("")).length;
|
65 | var fitsOneLine = ((fullWidth + (arr.length * 2)) <= width) ? true : false;
|
66 | var cols = Math.floor(width / longest);
|
67 | cols = (cols < 1) ? 1 : cols;
|
68 | if (fitsOneLine) {
|
69 | return arr.join(" ");
|
70 | } else {
|
71 | arr = arr.sort();
|
72 | var col = 1;
|
73 | var lines = [];
|
74 | var line = "";
|
75 | for (var i = 0; i < arr.length; ++i) {
|
76 | if (col < cols) {
|
77 | col++;
|
78 | } else {
|
79 | lines.push(line);
|
80 | line = "";
|
81 | col = 1;
|
82 | }
|
83 | line += this.pad(arr[i], longest, " ");
|
84 | }
|
85 | if (line != "") {
|
86 | lines.push(line);
|
87 | }
|
88 | return lines.join("\n");
|
89 | }
|
90 | },
|
91 |
|
92 | |
93 |
|
94 |
|
95 |
|
96 |
|
97 |
|
98 |
|
99 |
|
100 |
|
101 |
|
102 |
|
103 |
|
104 | pad: function(str, width, delimiter) {
|
105 | width = Math.floor(width);
|
106 | delimiter = delimiter || " ";
|
107 | var len = Math.max(0, width - str.length);
|
108 | return str + Array(len + 1).join(delimiter);
|
109 | },
|
110 |
|
111 |
|
112 |
|
113 |
|
114 | fixArgsForApply: function(obj) {
|
115 | if (!_.isObject(obj)) {
|
116 | if (!_.isArray(obj)) {
|
117 | return [obj];
|
118 | } else {
|
119 | return obj;
|
120 | }
|
121 | }
|
122 | var argArray = [];
|
123 | _.each(obj, function(aarg) {
|
124 | argArray.push(aarg);
|
125 | });
|
126 | return argArray;
|
127 | }
|
128 | };
|
129 |
|
130 |
|
131 |
|
132 |
|
133 |
|
134 | module.exports = exports = util;
|
135 |
|
136 |
|