Setting the file. One moment.
Argument · Wix Replatform · wix/skills · Skills Docs
ContentsBack to the top of the page vendor/commander/lib/argument.js
vendor/commander/lib/ argument.js
JavaScript · 147 lines · 3 KB
12
13 constructor ( name , description ) {
14 this .description = description || '' ;
15 this .variadic = false ;
16 this .parseArg = undefined ;
17 this .defaultValue = undefined ;
18 this .defaultValueDescription = undefined ;
19 this .argChoices = undefined ;
20
21 switch (name[ 0 ]) {
22 case '<' : // e.g. <required>
23 this .required = true ;
24 this ._name = name. slice ( 1 , - 1 );
25 break ;
26 case '[' : // e.g. [optional]
27 this .required = false ;
28 this ._name = name. slice ( 1 , - 1 );
29 break ;
30 default :
31 this .required = true ;
32 this ._name = name;
33 break ;
34 }
35
36 if ( this ._name. endsWith ( '...' )) {
37 this .variadic = true ;
38 this ._name = this ._name. slice ( 0 , - 3 );
39 }
40 }
41
42 /**
43 * Return argument name.
44 *
45 * @return {string}
46 */
47
48 name () {
49 return this ._name;
50 }
51
52 /**
53 * @package
54 */
55
56 _collectValue ( value , previous ) {
57 if (previous === this .defaultValue || ! Array. isArray (previous)) {
58 return [value];
59 }
60
61 previous. push (value);
62 return previous;
63 }
64
65 /**
66 * Set the default value, and optionally supply the description to be displayed in the help.
67 *
68 * @param {*} value
69 * @param {string} [description]
70 * @return {Argument}
71 */
72
73 default ( value , description ) {
74 this .defaultValue = value;
75 this .defaultValueDescription = description;
76 return this ;
77 }
78
79 /**
80 * Set the custom handler for processing CLI command arguments into argument values.
81 *
82 * @param {Function} [fn]
83 * @return {Argument}
84 */
85
86 argParser ( fn ) {
87 this .parseArg = fn;
88 return this ;
89 }
90
91 /**
92 * Only allow argument value to be one of choices.
93 *
94 * @param {string[]} values
95 * @return {Argument}
96 */
97
98 choices ( values ) {
99 this .argChoices = values. slice ();
100 this . parseArg = ( arg , previous ) => {
101 if ( ! this .argChoices. includes (arg)) {
102 throw new InvalidArgumentError (
103 `Allowed choices are ${ this . argChoices . join ( ', ' ) }.` ,
104 );
105 }
106 if ( this .variadic) {
107 return this . _collectValue (arg, previous);
108 }
109 return arg;
110 };
111 return this ;
112 }
113
114 /**
115 * Make argument required.
116 *
117 * @returns {Argument}
118 */
119 argRequired () {
120 this .required = true ;
121 return this ;
122 }
123
124 /**
125 * Make argument optional.
126 *
127 * @returns {Argument}
128 */
129 argOptional () {
130 this .required = false ;
131 return this ;
132 }
133 }
134
135 /**
136 * Takes an argument and returns its human readable equivalent for help usage.
137 *
138 * @param {Argument} arg
139 * @return {string}
140 * @private
141 */
142
143 export function humanReadableArgName ( arg ) {
144 const nameOutput = arg. name () + (arg.variadic === true ? '...' : '' );
145
146 return arg.required ? '<' + nameOutput + '>' : '[' + nameOutput + ']' ;
147 }