coa 1.0.3 → 1.0.4
Sign up to get free protection for your applications and to get access to all the features.
- package/.npmignore +6 -0
- package/.nyc_output/1f2a0db5a6d6559149db56d397f47cfc.json +1 -0
- package/.nyc_output/75b82d38f2186df930141082076e11c6.json +1 -0
- package/.travis.yml +9 -0
- package/GNUmakefile +34 -0
- package/README.md +1 -19
- package/coverage/base.css +212 -0
- package/coverage/coa/index.html +93 -0
- package/coverage/coa/index.js.html +68 -0
- package/coverage/coa/lib/arg.js.html +239 -0
- package/coverage/coa/lib/cmd.js.html +1556 -0
- package/coverage/coa/lib/coaobject.js.html +365 -0
- package/coverage/coa/lib/coaparam.js.html +440 -0
- package/coverage/coa/lib/color.js.html +131 -0
- package/coverage/coa/lib/completion.js.html +593 -0
- package/coverage/coa/lib/index.html +197 -0
- package/coverage/coa/lib/index.js.html +107 -0
- package/coverage/coa/lib/opt.js.html +524 -0
- package/coverage/coa/lib/shell.js.html +107 -0
- package/coverage/index.html +106 -0
- package/coverage/prettify.css +1 -0
- package/coverage/prettify.js +1 -0
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +158 -0
- package/index.js +1 -1
- package/lib/arg.js +161 -44
- package/lib/cmd.js +547 -434
- package/lib/color.js +22 -19
- package/lib/completion.js +119 -161
- package/lib/index.js +10 -14
- package/lib/opt.js +313 -130
- package/lib/shell.js +13 -13
- package/package.json +14 -19
- package/qq.js +17 -0
- package/src/arg.coffee +130 -0
- package/src/cmd.coffee +456 -0
- package/src/color.coffee +25 -0
- package/src/completion.coffee +156 -0
- package/src/index.coffee +5 -0
- package/src/opt.coffee +243 -0
- package/src/shell.coffee +10 -0
- package/test/coa.js +496 -0
- package/test/mocha.opts +2 -0
- package/test/shell-test.js +60 -0
- package/tests/api-h.js +9 -0
- package/tests/h.js +6 -0
- package/LICENSE +0 -21
- package/lib/coaobject.js +0 -100
- package/lib/coaparam.js +0 -125
package/lib/opt.js
CHANGED
@@ -1,155 +1,338 @@
|
|
1
|
-
|
1
|
+
// Generated by CoffeeScript 1.6.3
|
2
|
+
var Cmd, Color, Opt, Q, fs;
|
2
3
|
|
3
|
-
|
4
|
-
Q = require('q'),
|
4
|
+
fs = require('fs');
|
5
5
|
|
6
|
-
|
7
|
-
|
6
|
+
Q = require('q');
|
7
|
+
|
8
|
+
Color = require('./color').Color;
|
9
|
+
|
10
|
+
Cmd = require('./cmd').Cmd;
|
8
11
|
|
9
12
|
/**
|
10
|
-
|
11
|
-
*
|
12
|
-
* Named entity. Options may have short and long keys for use from command line.
|
13
|
-
*
|
14
|
-
* @namespace
|
15
|
-
* @class Opt
|
16
|
-
* @extends CoaParam
|
17
|
-
*/
|
18
|
-
module.exports = class Opt extends CoaParam {
|
19
|
-
/**
|
20
|
-
* @constructs
|
21
|
-
* @param {COA.Cmd} cmd - parent command
|
22
|
-
*/
|
23
|
-
constructor(cmd) {
|
24
|
-
super(cmd);
|
25
|
-
|
26
|
-
this._short = null;
|
27
|
-
this._long = null;
|
28
|
-
this._flag = false;
|
29
|
-
this._only = false;
|
30
|
-
this._cmd._opts.push(this);
|
31
|
-
}
|
13
|
+
Option
|
32
14
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
* @returns {COA.Opt} - this instance (for chainability)
|
38
|
-
*/
|
39
|
-
short(short) {
|
40
|
-
this._short = short;
|
41
|
-
this._cmd._optsByKey[`-${short}`] = this;
|
42
|
-
return this;
|
43
|
-
}
|
15
|
+
Named entity. Options may have short and long keys for use from command line.
|
16
|
+
@namespace
|
17
|
+
@class Presents option
|
18
|
+
*/
|
44
19
|
|
45
|
-
/**
|
46
|
-
* Set a short key for option to be used with double hyphens from command line.
|
47
|
-
*
|
48
|
-
* @param {String} long - long name
|
49
|
-
* @returns {COA.Opt} - this instance (for chainability)
|
50
|
-
*/
|
51
|
-
long(long) {
|
52
|
-
this._long = long;
|
53
|
-
this._cmd._optsByKey[`--${long}`] = this;
|
54
|
-
return this;
|
55
|
-
}
|
56
20
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
flag() {
|
63
|
-
this._flag = true;
|
64
|
-
return this;
|
65
|
-
}
|
21
|
+
exports.Opt = Opt = (function() {
|
22
|
+
/**
|
23
|
+
@constructs
|
24
|
+
@param {COA.Cmd} cmd parent command
|
25
|
+
*/
|
66
26
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
* @returns {COA.Opt} - this instance (for chainability)
|
72
|
-
*/
|
73
|
-
only() {
|
74
|
-
this._only = true;
|
75
|
-
return this;
|
76
|
-
}
|
27
|
+
function Opt(_cmd) {
|
28
|
+
this._cmd = _cmd;
|
29
|
+
this._cmd._opts.push(this);
|
30
|
+
}
|
77
31
|
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
* @param {Function} act - action function,
|
84
|
-
* invoked in the context of command instance
|
85
|
-
* and has the parameters:
|
86
|
-
* - {Object} opts - parsed options
|
87
|
-
* - {Array} args - parsed arguments
|
88
|
-
* - {Object} res - actions result accumulator
|
89
|
-
* It can return rejected promise by Cmd.reject (in case of error)
|
90
|
-
* or any other value treated as result.
|
91
|
-
* @returns {COA.Opt} - this instance (for chainability)
|
92
|
-
*/
|
93
|
-
act(act) {
|
94
|
-
// Need function here for arguments
|
95
|
-
const opt = this;
|
96
|
-
this._cmd.act(function(opts) {
|
97
|
-
if(!opts.hasOwnProperty(opt._name)) return;
|
98
|
-
|
99
|
-
const res = act.apply(this, arguments);
|
100
|
-
if(!opt._only) return res;
|
101
|
-
|
102
|
-
return Q.when(res, out => this.reject({
|
103
|
-
toString : () => out.toString(),
|
104
|
-
exitCode : 0
|
105
|
-
}));
|
106
|
-
});
|
107
|
-
|
108
|
-
return this;
|
109
|
-
}
|
32
|
+
/**
|
33
|
+
Set a canonical option identifier to be used anywhere in the API.
|
34
|
+
@param {String} _name option name
|
35
|
+
@returns {COA.Opt} this instance (for chainability)
|
36
|
+
*/
|
110
37
|
|
111
|
-
_saveVal(opts, val) {
|
112
|
-
this._val && (val = this._val(val));
|
113
38
|
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
39
|
+
Opt.prototype.name = function(_name) {
|
40
|
+
this._name = _name;
|
41
|
+
return this;
|
42
|
+
};
|
118
43
|
|
119
|
-
|
120
|
-
|
44
|
+
/**
|
45
|
+
Set a long description for option to be used anywhere in text messages.
|
46
|
+
@param {String} _title option title
|
47
|
+
@returns {COA.Opt} this instance (for chainability)
|
48
|
+
*/
|
121
49
|
|
122
|
-
_parse(argv, opts) {
|
123
|
-
return this._saveVal(opts, this._flag ? true : argv.shift());
|
124
|
-
}
|
125
50
|
|
126
|
-
|
127
|
-
|
128
|
-
|
51
|
+
Opt.prototype.title = Cmd.prototype.title;
|
52
|
+
|
53
|
+
/**
|
54
|
+
Set a short key for option to be used with one hyphen from command line.
|
55
|
+
@param {String} _short
|
56
|
+
@returns {COA.Opt} this instance (for chainability)
|
57
|
+
*/
|
58
|
+
|
59
|
+
|
60
|
+
Opt.prototype.short = function(_short) {
|
61
|
+
this._short = _short;
|
62
|
+
return this._cmd._optsByKey['-' + _short] = this;
|
63
|
+
};
|
64
|
+
|
65
|
+
/**
|
66
|
+
Set a short key for option to be used with double hyphens from command line.
|
67
|
+
@param {String} _long
|
68
|
+
@returns {COA.Opt} this instance (for chainability)
|
69
|
+
*/
|
70
|
+
|
71
|
+
|
72
|
+
Opt.prototype.long = function(_long) {
|
73
|
+
this._long = _long;
|
74
|
+
return this._cmd._optsByKey['--' + _long] = this;
|
75
|
+
};
|
76
|
+
|
77
|
+
/**
|
78
|
+
Make an option boolean, i.e. option without value.
|
79
|
+
@returns {COA.Opt} this instance (for chainability)
|
80
|
+
*/
|
81
|
+
|
82
|
+
|
83
|
+
Opt.prototype.flag = function() {
|
84
|
+
this._flag = true;
|
85
|
+
return this;
|
86
|
+
};
|
87
|
+
|
88
|
+
/**
|
89
|
+
Makes an option accepts multiple values.
|
90
|
+
Otherwise, the value will be used by the latter passed.
|
91
|
+
@returns {COA.Opt} this instance (for chainability)
|
92
|
+
*/
|
93
|
+
|
94
|
+
|
95
|
+
Opt.prototype.arr = function() {
|
96
|
+
this._arr = true;
|
97
|
+
return this;
|
98
|
+
};
|
99
|
+
|
100
|
+
/**
|
101
|
+
Makes an option required.
|
102
|
+
@returns {COA.Opt} this instance (for chainability)
|
103
|
+
*/
|
104
|
+
|
105
|
+
|
106
|
+
Opt.prototype.req = function() {
|
107
|
+
this._req = true;
|
108
|
+
return this;
|
109
|
+
};
|
110
|
+
|
111
|
+
/**
|
112
|
+
Makes an option to act as a command,
|
113
|
+
i.e. program will exit just after option action.
|
114
|
+
@returns {COA.Opt} this instance (for chainability)
|
115
|
+
*/
|
116
|
+
|
117
|
+
|
118
|
+
Opt.prototype.only = function() {
|
119
|
+
this._only = true;
|
120
|
+
return this;
|
121
|
+
};
|
122
|
+
|
123
|
+
/**
|
124
|
+
Set a validation (or value) function for option.
|
125
|
+
Value from command line passes through before becoming available from API.
|
126
|
+
Using for validation and convertion simple types to any values.
|
127
|
+
@param {Function} _val validating function,
|
128
|
+
invoked in the context of option instance
|
129
|
+
and has one parameter with value from command line
|
130
|
+
@returns {COA.Opt} this instance (for chainability)
|
131
|
+
*/
|
129
132
|
|
130
|
-
_usage() {
|
131
|
-
const res = [],
|
132
|
-
nameStr = this._name.toUpperCase();
|
133
133
|
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
134
|
+
Opt.prototype.val = function(_val) {
|
135
|
+
this._val = _val;
|
136
|
+
return this;
|
137
|
+
};
|
138
|
+
|
139
|
+
/**
|
140
|
+
Set a default value for option.
|
141
|
+
Default value passed through validation function as ordinary value.
|
142
|
+
@param {Object} _def
|
143
|
+
@returns {COA.Opt} this instance (for chainability)
|
144
|
+
*/
|
145
|
+
|
146
|
+
|
147
|
+
Opt.prototype.def = function(_def) {
|
148
|
+
this._def = _def;
|
149
|
+
return this;
|
150
|
+
};
|
151
|
+
|
152
|
+
/**
|
153
|
+
Make option value inputting stream.
|
154
|
+
It's add useful validation and shortcut for STDIN.
|
155
|
+
@returns {COA.Opt} this instance (for chainability)
|
156
|
+
*/
|
157
|
+
|
158
|
+
|
159
|
+
Opt.prototype.input = function() {
|
160
|
+
process.stdin.pause();
|
161
|
+
return this.def(process.stdin).val(function(v) {
|
162
|
+
var s;
|
163
|
+
if (typeof v === 'string') {
|
164
|
+
if (v === '-') {
|
165
|
+
return process.stdin;
|
166
|
+
} else {
|
167
|
+
s = fs.createReadStream(v, {
|
168
|
+
encoding: 'utf8'
|
169
|
+
});
|
170
|
+
s.pause();
|
171
|
+
return s;
|
138
172
|
}
|
173
|
+
} else {
|
174
|
+
return v;
|
175
|
+
}
|
176
|
+
});
|
177
|
+
};
|
178
|
+
|
179
|
+
/**
|
180
|
+
Make option value outputing stream.
|
181
|
+
It's add useful validation and shortcut for STDOUT.
|
182
|
+
@returns {COA.Opt} this instance (for chainability)
|
183
|
+
*/
|
184
|
+
|
139
185
|
|
140
|
-
|
141
|
-
|
142
|
-
|
186
|
+
Opt.prototype.output = function() {
|
187
|
+
return this.def(process.stdout).val(function(v) {
|
188
|
+
if (typeof v === 'string') {
|
189
|
+
if (v === '-') {
|
190
|
+
return process.stdout;
|
191
|
+
} else {
|
192
|
+
return fs.createWriteStream(v, {
|
193
|
+
encoding: 'utf8'
|
194
|
+
});
|
143
195
|
}
|
196
|
+
} else {
|
197
|
+
return v;
|
198
|
+
}
|
199
|
+
});
|
200
|
+
};
|
144
201
|
|
145
|
-
|
202
|
+
/**
|
203
|
+
Add action for current option command.
|
204
|
+
This action is performed if the current option
|
205
|
+
is present in parsed options (with any value).
|
206
|
+
@param {Function} act action function,
|
207
|
+
invoked in the context of command instance
|
208
|
+
and has the parameters:
|
209
|
+
- {Object} opts parsed options
|
210
|
+
- {Array} args parsed arguments
|
211
|
+
- {Object} res actions result accumulator
|
212
|
+
It can return rejected promise by Cmd.reject (in case of error)
|
213
|
+
or any other value treated as result.
|
214
|
+
@returns {COA.Opt} this instance (for chainability)
|
215
|
+
*/
|
146
216
|
|
147
|
-
this._req && res.push(' ', Color('lred', '(required)'));
|
148
217
|
|
149
|
-
|
218
|
+
Opt.prototype.act = function(act) {
|
219
|
+
var name, opt;
|
220
|
+
opt = this;
|
221
|
+
name = this._name;
|
222
|
+
this._cmd.act(function(opts) {
|
223
|
+
var res,
|
224
|
+
_this = this;
|
225
|
+
if (name in opts) {
|
226
|
+
res = act.apply(this, arguments);
|
227
|
+
if (opt._only) {
|
228
|
+
return Q.when(res, function(res) {
|
229
|
+
return _this.reject({
|
230
|
+
toString: function() {
|
231
|
+
return res.toString();
|
232
|
+
},
|
233
|
+
exitCode: 0
|
234
|
+
});
|
235
|
+
});
|
236
|
+
} else {
|
237
|
+
return res;
|
238
|
+
}
|
239
|
+
}
|
240
|
+
});
|
241
|
+
return this;
|
242
|
+
};
|
243
|
+
|
244
|
+
/**
|
245
|
+
Set custom additional completion for current option.
|
246
|
+
@param {Function} completion generation function,
|
247
|
+
invoked in the context of option instance.
|
248
|
+
Accepts parameters:
|
249
|
+
- {Object} opts completion options
|
250
|
+
It can return promise or any other value treated as result.
|
251
|
+
@returns {COA.Opt} this instance (for chainability)
|
252
|
+
*/
|
253
|
+
|
254
|
+
|
255
|
+
Opt.prototype.comp = Cmd.prototype.comp;
|
256
|
+
|
257
|
+
Opt.prototype._saveVal = function(opts, val) {
|
258
|
+
var _name;
|
259
|
+
if (this._val) {
|
260
|
+
val = this._val(val);
|
261
|
+
}
|
262
|
+
if (this._arr) {
|
263
|
+
(opts[_name = this._name] || (opts[_name] = [])).push(val);
|
264
|
+
} else {
|
265
|
+
opts[this._name] = val;
|
150
266
|
}
|
267
|
+
return val;
|
268
|
+
};
|
269
|
+
|
270
|
+
Opt.prototype._parse = function(argv, opts) {
|
271
|
+
return this._saveVal(opts, this._flag ? true : argv.shift());
|
272
|
+
};
|
151
273
|
|
152
|
-
|
153
|
-
|
274
|
+
Opt.prototype._checkParsed = function(opts, args) {
|
275
|
+
return !opts.hasOwnProperty(this._name);
|
276
|
+
};
|
277
|
+
|
278
|
+
Opt.prototype._usage = function() {
|
279
|
+
var nameStr, res;
|
280
|
+
res = [];
|
281
|
+
nameStr = this._name.toUpperCase();
|
282
|
+
if (this._short) {
|
283
|
+
res.push('-', Color('lgreen', this._short));
|
284
|
+
if (!this._flag) {
|
285
|
+
res.push(' ' + nameStr);
|
286
|
+
}
|
287
|
+
res.push(', ');
|
288
|
+
}
|
289
|
+
if (this._long) {
|
290
|
+
res.push('--', Color('green', this._long));
|
291
|
+
if (!this._flag) {
|
292
|
+
res.push('=' + nameStr);
|
293
|
+
}
|
154
294
|
}
|
155
|
-
|
295
|
+
res.push(' : ', this._title);
|
296
|
+
if (this._req) {
|
297
|
+
res.push(' ', Color('lred', '(required)'));
|
298
|
+
}
|
299
|
+
return res.join('');
|
300
|
+
};
|
301
|
+
|
302
|
+
Opt.prototype._requiredText = function() {
|
303
|
+
return 'Missing required option:\n ' + this._usage();
|
304
|
+
};
|
305
|
+
|
306
|
+
/**
|
307
|
+
Return rejected promise with error code.
|
308
|
+
Use in .val() for return with error.
|
309
|
+
@param {Object} reject reason
|
310
|
+
You can customize toString() method and exitCode property
|
311
|
+
of reason object.
|
312
|
+
@returns {Q.promise} rejected promise
|
313
|
+
*/
|
314
|
+
|
315
|
+
|
316
|
+
Opt.prototype.reject = Cmd.prototype.reject;
|
317
|
+
|
318
|
+
/**
|
319
|
+
Finish chain for current option and return parent command instance.
|
320
|
+
@returns {COA.Cmd} parent command
|
321
|
+
*/
|
322
|
+
|
323
|
+
|
324
|
+
Opt.prototype.end = Cmd.prototype.end;
|
325
|
+
|
326
|
+
/**
|
327
|
+
Apply function with arguments in context of option instance.
|
328
|
+
@param {Function} fn
|
329
|
+
@param {Array} args
|
330
|
+
@returns {COA.Opt} this instance (for chainability)
|
331
|
+
*/
|
332
|
+
|
333
|
+
|
334
|
+
Opt.prototype.apply = Cmd.prototype.apply;
|
335
|
+
|
336
|
+
return Opt;
|
337
|
+
|
338
|
+
})();
|
package/lib/shell.js
CHANGED
@@ -1,14 +1,14 @@
|
|
1
|
-
|
1
|
+
// Generated by CoffeeScript 1.6.3
|
2
|
+
exports.unescape = function(w) {
|
3
|
+
w = w.charAt(0) === '"' ? w.replace(/^"|([^\\])"$/g, '$1') : w.replace(/\\ /g, ' ');
|
4
|
+
return w.replace(/\\("|'|\$|`|\\)/g, '$1');
|
5
|
+
};
|
2
6
|
|
3
|
-
function
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
return w
|
9
|
-
}
|
10
|
-
|
11
|
-
function escape(w) {
|
12
|
-
w = w.replace(/(["'$`\\])/g,'\\$1');
|
13
|
-
return w.match(/\s+/) ? `"${w}"` : w;
|
14
|
-
}
|
7
|
+
exports.escape = function(w) {
|
8
|
+
w = w.replace(/(["'$`\\])/g, '\\$1');
|
9
|
+
if (w.match(/\s+/)) {
|
10
|
+
return '"' + w + '"';
|
11
|
+
} else {
|
12
|
+
return w;
|
13
|
+
}
|
14
|
+
};
|
package/package.json
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"name": "coa",
|
3
3
|
"description": "Command-Option-Argument: Yet another parser for command line options.",
|
4
|
-
"version": "1.0.
|
4
|
+
"version": "1.0.4",
|
5
5
|
"homepage": "http://github.com/veged/coa",
|
6
6
|
"author": "Sergey Berezhnoy <veged@ya.ru> (http://github.com/veged)",
|
7
7
|
"maintainers": [
|
@@ -11,11 +11,6 @@
|
|
11
11
|
"contributors": [
|
12
12
|
"Sergey Belov <peimei@ya.ru> (http://github.com/arikon)"
|
13
13
|
],
|
14
|
-
"files": [
|
15
|
-
"lib/",
|
16
|
-
"index.js",
|
17
|
-
"README.ru.md"
|
18
|
-
],
|
19
14
|
"repository": {
|
20
15
|
"type": "git",
|
21
16
|
"url": "git://github.com/veged/coa.git"
|
@@ -27,23 +22,23 @@
|
|
27
22
|
"q": "^1.1.2"
|
28
23
|
},
|
29
24
|
"devDependencies": {
|
30
|
-
"
|
31
|
-
"
|
32
|
-
"
|
33
|
-
"eslint-config-pedant": "^0.8.0",
|
25
|
+
"coffee-script": "~1.6.3",
|
26
|
+
"istanbul": "~0.1.40",
|
27
|
+
"mocha-istanbul": "*",
|
34
28
|
"mocha": "~1.21.4",
|
35
|
-
"
|
29
|
+
"chai": "~1.7.2"
|
36
30
|
},
|
37
31
|
"scripts": {
|
38
|
-
"
|
39
|
-
"coverage": "
|
40
|
-
"coveralls": "nyc report --reporter=text-lcov | coveralls",
|
41
|
-
"lint": "eslint .",
|
42
|
-
"pretest": "npm run lint",
|
43
|
-
"test": "nyc mocha"
|
32
|
+
"test": "make test",
|
33
|
+
"coverage": "make coverage"
|
44
34
|
},
|
45
35
|
"engines": {
|
46
|
-
"node": ">=
|
36
|
+
"node": ">= 0.8.0"
|
47
37
|
},
|
48
|
-
"
|
38
|
+
"licenses": [
|
39
|
+
{
|
40
|
+
"type": "MIT"
|
41
|
+
}
|
42
|
+
],
|
43
|
+
"optionalDependencies": {}
|
49
44
|
}
|
package/qq.js
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
const run = require('./test/util').run;
|
2
|
+
|
3
|
+
// run(cmd => cmd.arg().name('qwe').end().arg().name('zxc').end().act(function(opts, args) { console.log({opts, args}); }), ['qwe', 'zxc']) // cmd and args
|
4
|
+
// .then(res => {
|
5
|
+
// // code
|
6
|
+
// // stdout
|
7
|
+
// // stderr
|
8
|
+
// console.log(res);
|
9
|
+
// });
|
10
|
+
|
11
|
+
run(cmd => cmd.opt().name('version').short('v').only().flag().act((opts) => { return 'aasd'; }), ['-v']) // cmd and args
|
12
|
+
.then(res => {
|
13
|
+
// code
|
14
|
+
// stdout
|
15
|
+
// stderr
|
16
|
+
console.log(res);
|
17
|
+
});
|
package/src/arg.coffee
ADDED
@@ -0,0 +1,130 @@
|
|
1
|
+
Color = require('./color').Color
|
2
|
+
Cmd = require('./cmd').Cmd
|
3
|
+
Opt = require('./opt').Opt
|
4
|
+
|
5
|
+
###*
|
6
|
+
Argument
|
7
|
+
|
8
|
+
Unnamed entity. From command line arguments passed as list of unnamed values.
|
9
|
+
@namespace
|
10
|
+
@class Presents argument
|
11
|
+
###
|
12
|
+
exports.Arg = class Arg
|
13
|
+
|
14
|
+
###*
|
15
|
+
@constructs
|
16
|
+
@param {COA.Cmd} cmd parent command
|
17
|
+
###
|
18
|
+
constructor: (@_cmd) -> @_cmd._args.push @
|
19
|
+
|
20
|
+
###*
|
21
|
+
Set a canonical argument identifier to be used anywhere in text messages.
|
22
|
+
@param {String} _name argument name
|
23
|
+
@returns {COA.Arg} this instance (for chainability)
|
24
|
+
###
|
25
|
+
name: Opt::name
|
26
|
+
|
27
|
+
###*
|
28
|
+
Set a long description for argument to be used anywhere in text messages.
|
29
|
+
@param {String} _title argument title
|
30
|
+
@returns {COA.Arg} this instance (for chainability)
|
31
|
+
###
|
32
|
+
title: Cmd::title
|
33
|
+
|
34
|
+
###*
|
35
|
+
Makes an argument accepts multiple values.
|
36
|
+
Otherwise, the value will be used by the latter passed.
|
37
|
+
@returns {COA.Arg} this instance (for chainability)
|
38
|
+
###
|
39
|
+
arr: Opt::arr
|
40
|
+
|
41
|
+
###*
|
42
|
+
Makes an argument required.
|
43
|
+
@returns {COA.Arg} this instance (for chainability)
|
44
|
+
###
|
45
|
+
req: Opt::req
|
46
|
+
|
47
|
+
###*
|
48
|
+
Set a validation (or value) function for argument.
|
49
|
+
Value from command line passes through before becoming available from API.
|
50
|
+
Using for validation and convertion simple types to any values.
|
51
|
+
@param {Function} _val validating function,
|
52
|
+
invoked in the context of argument instance
|
53
|
+
and has one parameter with value from command line
|
54
|
+
@returns {COA.Arg} this instance (for chainability)
|
55
|
+
###
|
56
|
+
val: Opt::val
|
57
|
+
|
58
|
+
###*
|
59
|
+
Set a default value for argument.
|
60
|
+
Default value passed through validation function as ordinary value.
|
61
|
+
@param {Object} _def
|
62
|
+
@returns {COA.Arg} this instance (for chainability)
|
63
|
+
###
|
64
|
+
def: Opt::def
|
65
|
+
|
66
|
+
###*
|
67
|
+
Set custom additional completion for current argument.
|
68
|
+
@param {Function} completion generation function,
|
69
|
+
invoked in the context of argument instance.
|
70
|
+
Accepts parameters:
|
71
|
+
- {Object} opts completion options
|
72
|
+
It can return promise or any other value treated as result.
|
73
|
+
@returns {COA.Arg} this instance (for chainability)
|
74
|
+
###
|
75
|
+
comp: Cmd::comp
|
76
|
+
|
77
|
+
###*
|
78
|
+
Make argument value inputting stream.
|
79
|
+
It's add useful validation and shortcut for STDIN.
|
80
|
+
@returns {COA.Arg} this instance (for chainability)
|
81
|
+
###
|
82
|
+
input: Opt::input
|
83
|
+
|
84
|
+
###*
|
85
|
+
Make argument value outputing stream.
|
86
|
+
It's add useful validation and shortcut for STDOUT.
|
87
|
+
@returns {COA.Arg} this instance (for chainability)
|
88
|
+
###
|
89
|
+
output: Opt::output
|
90
|
+
|
91
|
+
_parse: (arg, args) ->
|
92
|
+
@_saveVal(args, arg)
|
93
|
+
|
94
|
+
_saveVal: Opt::_saveVal
|
95
|
+
|
96
|
+
_checkParsed: (opts, args) -> not args.hasOwnProperty(@_name)
|
97
|
+
|
98
|
+
_usage: ->
|
99
|
+
res = []
|
100
|
+
|
101
|
+
res.push Color('lpurple', @_name.toUpperCase()), ' : ', @_title
|
102
|
+
if @_req then res.push ' ', Color('lred', '(required)')
|
103
|
+
|
104
|
+
res.join ''
|
105
|
+
|
106
|
+
_requiredText: -> 'Missing required argument:\n ' + @_usage()
|
107
|
+
|
108
|
+
###*
|
109
|
+
Return rejected promise with error code.
|
110
|
+
Use in .val() for return with error.
|
111
|
+
@param {Object} reject reason
|
112
|
+
You can customize toString() method and exitCode property
|
113
|
+
of reason object.
|
114
|
+
@returns {Q.promise} rejected promise
|
115
|
+
###
|
116
|
+
reject: Cmd::reject
|
117
|
+
|
118
|
+
###*
|
119
|
+
Finish chain for current option and return parent command instance.
|
120
|
+
@returns {COA.Cmd} parent command
|
121
|
+
###
|
122
|
+
end: Cmd::end
|
123
|
+
|
124
|
+
###*
|
125
|
+
Apply function with arguments in context of arg instance.
|
126
|
+
@param {Function} fn
|
127
|
+
@param {Array} args
|
128
|
+
@returns {COA.Arg} this instance (for chainability)
|
129
|
+
###
|
130
|
+
apply: Cmd::apply
|