yargs 3.7.1 → 3.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/validation.js CHANGED
@@ -1,197 +1,196 @@
1
1
  // validation-type-stuff, missing params,
2
2
  // bad implications, custom checks.
3
3
  module.exports = function (yargs, usage) {
4
- var self = {};
5
-
6
- // validate appropriate # of non-option
7
- // arguments were provided, i.e., '_'.
8
- self.nonOptionCount = function(argv) {
9
- var demanded = yargs.getDemanded();
10
-
11
- if (demanded._ && argv._.length < demanded._.count) {
12
- if (demanded._.msg !== undefined) {
13
- usage.fail(demanded._.msg);
14
- } else {
15
- usage.fail('Not enough non-option arguments: got '
16
- + argv._.length + ', need at least ' + demanded._.count
17
- );
18
- }
19
- }
20
- };
21
-
22
- // make sure that any args that require an
23
- // value (--foo=bar), have a value.
24
- self.missingArgumentValue = function(argv) {
25
- var options = yargs.getOptions(),
26
- defaultValues = [true, false, ''];
27
-
28
- if (options.requiresArg.length > 0) {
29
- var missingRequiredArgs = [];
30
-
31
- options.requiresArg.forEach(function(key) {
32
- var value = argv[key];
33
-
34
- // if a value is explicitly requested,
35
- // flag argument as missing if it does not
36
- // look like foo=bar was entered.
37
- if (~defaultValues.indexOf(value)
38
- || (Array.isArray(value) && !value.length)) {
39
- missingRequiredArgs.push(key);
40
- }
41
- });
42
-
43
- if (missingRequiredArgs.length == 1) {
44
- usage.fail("Missing argument value: " + missingRequiredArgs[0]);
45
- }
46
- else if (missingRequiredArgs.length > 1) {
47
- var message = "Missing argument values: " + missingRequiredArgs.join(", ");
48
- usage.fail(message);
49
- }
50
- }
51
- };
52
-
53
- // make sure all the required arguments are present.
54
- self.requiredArguments = function(argv) {
55
- var demanded = yargs.getDemanded(),
56
- missing = null;
57
-
58
- Object.keys(demanded).forEach(function (key) {
59
- if (!argv.hasOwnProperty(key)) {
60
- missing = missing || {};
61
- missing[key] = demanded[key];
62
- }
63
- });
64
-
65
- if (missing) {
66
- var customMsgs = [];
67
- Object.keys(missing).forEach(function(key) {
68
- var msg = missing[key].msg;
69
- if (msg && customMsgs.indexOf(msg) < 0) {
70
- customMsgs.push(msg);
71
- }
72
- });
73
- var customMsg = customMsgs.length ? '\n' + customMsgs.join('\n') : '';
74
-
75
- usage.fail('Missing required arguments: ' + Object.keys(missing).join(', ') + customMsg);
76
- }
77
- };
78
-
79
- // check for unknown arguments (strict-mode).
80
- self.unknownArguments = function(argv, aliases) {
81
- var descriptions = usage.getDescriptions(),
82
- demanded = yargs.getDemanded(),
83
- unknown = [],
84
- aliasLookup = {};
85
-
86
- Object.keys(aliases).forEach(function (key) {
87
- aliases[key].forEach(function (alias) {
88
- aliasLookup[alias] = key;
89
- });
90
- });
91
-
92
- Object.keys(argv).forEach(function (key) {
93
- if (key !== "$0" && key !== "_" &&
94
- !descriptions.hasOwnProperty(key) &&
95
- !demanded.hasOwnProperty(key) &&
96
- !aliasLookup.hasOwnProperty(key)) {
97
- unknown.push(key);
98
- }
99
- });
100
-
101
- if (unknown.length == 1) {
102
- usage.fail("Unknown argument: " + unknown[0]);
103
- }
104
- else if (unknown.length > 1) {
105
- usage.fail("Unknown arguments: " + unknown.join(", "));
106
- }
107
- };
108
-
109
- // custom checks, added using the `check` option on yargs.
110
- var checks = [];
111
- self.check = function (f) {
112
- checks.push(f);
113
- };
114
-
115
- self.customChecks = function(argv, aliases) {
116
- checks.forEach(function (f) {
117
- try {
118
- var result = f(argv, aliases);
119
- if (!result) {
120
- usage.fail('Argument check failed: ' + f.toString());
121
- } else if (typeof result === 'string') {
122
- usage.fail(result);
123
- }
124
- }
125
- catch (err) {
126
- usage.fail(err)
127
- }
128
- });
129
- };
130
-
131
- // check implications, argument foo implies => argument bar.
132
- var implied = {};
133
- self.implies = function (key, value) {
134
- if (typeof key === 'object') {
135
- Object.keys(key).forEach(function (k) {
136
- self.implies(k, key[k]);
137
- });
138
- } else {
139
- implied[key] = value;
4
+ var self = {}
5
+
6
+ // validate appropriate # of non-option
7
+ // arguments were provided, i.e., '_'.
8
+ self.nonOptionCount = function (argv) {
9
+ var demanded = yargs.getDemanded()
10
+
11
+ if (demanded._ && argv._.length < demanded._.count) {
12
+ if (demanded._.msg !== undefined) {
13
+ usage.fail(demanded._.msg)
14
+ } else {
15
+ usage.fail('Not enough non-option arguments: got '
16
+ + argv._.length + ', need at least ' + demanded._.count
17
+ )
18
+ }
19
+ }
20
+ }
21
+
22
+ // make sure that any args that require an
23
+ // value (--foo=bar), have a value.
24
+ self.missingArgumentValue = function (argv) {
25
+ var options = yargs.getOptions(),
26
+ defaultValues = [true, false, '']
27
+
28
+ if (options.requiresArg.length > 0) {
29
+ var missingRequiredArgs = []
30
+
31
+ options.requiresArg.forEach(function (key) {
32
+ var value = argv[key]
33
+
34
+ // if a value is explicitly requested,
35
+ // flag argument as missing if it does not
36
+ // look like foo=bar was entered.
37
+ if (~defaultValues.indexOf(value)
38
+ || (Array.isArray(value) && !value.length)) {
39
+ missingRequiredArgs.push(key)
140
40
  }
141
- };
142
- self.getImplied = function() {
143
- return implied;
41
+ })
42
+
43
+ if (missingRequiredArgs.length === 1) {
44
+ usage.fail('Missing argument value: ' + missingRequiredArgs[0])
45
+ } else if (missingRequiredArgs.length > 1) {
46
+ var message = 'Missing argument values: ' + missingRequiredArgs.join(', ')
47
+ usage.fail(message)
48
+ }
144
49
  }
50
+ }
51
+
52
+ // make sure all the required arguments are present.
53
+ self.requiredArguments = function (argv) {
54
+ var demanded = yargs.getDemanded(),
55
+ missing = null
56
+
57
+ Object.keys(demanded).forEach(function (key) {
58
+ if (!argv.hasOwnProperty(key)) {
59
+ missing = missing || {}
60
+ missing[key] = demanded[key]
61
+ }
62
+ })
63
+
64
+ if (missing) {
65
+ var customMsgs = []
66
+ Object.keys(missing).forEach(function (key) {
67
+ var msg = missing[key].msg
68
+ if (msg && customMsgs.indexOf(msg) < 0) {
69
+ customMsgs.push(msg)
70
+ }
71
+ })
145
72
 
146
- self.implications = function(argv) {
147
- var implyFail = [];
148
-
149
- Object.keys(implied).forEach(function (key) {
150
- var num, origKey = key, value = implied[key];
151
-
152
- // convert string '1' to number 1
153
- var num = Number(key);
154
- key = isNaN(num) ? key : num;
155
-
156
- if (typeof key === 'number') {
157
- // check length of argv._
158
- key = argv._.length >= key;
159
- } else if (key.match(/^--no-.+/)) {
160
- // check if key doesn't exist
161
- key = key.match(/^--no-(.+)/)[1];
162
- key = !argv[key];
163
- } else {
164
- // check if key exists
165
- key = argv[key];
166
- }
167
-
168
- num = Number(value);
169
- value = isNaN(num) ? value : num;
170
-
171
- if (typeof value === 'number') {
172
- value = argv._.length >= value;
173
- } else if (value.match(/^--no-.+/)) {
174
- value = value.match(/^--no-(.+)/)[1];
175
- value = !argv[value];
176
- } else {
177
- value = argv[value];
178
- }
179
-
180
- if (key && !value) {
181
- implyFail.push(origKey);
182
- }
183
- });
184
-
185
- if (implyFail.length) {
186
- var msg = 'Implications failed:\n';
187
-
188
- implyFail.forEach(function (key) {
189
- msg += (' ' + key + ' -> ' + implied[key]);
190
- });
191
-
192
- usage.fail(msg);
73
+ var customMsg = customMsgs.length ? '\n' + customMsgs.join('\n') : ''
74
+ usage.fail('Missing required arguments: ' + Object.keys(missing).join(', ') + customMsg)
75
+ }
76
+ }
77
+
78
+ // check for unknown arguments (strict-mode).
79
+ self.unknownArguments = function (argv, aliases) {
80
+ var descriptions = usage.getDescriptions(),
81
+ demanded = yargs.getDemanded(),
82
+ unknown = [],
83
+ aliasLookup = {}
84
+
85
+ Object.keys(aliases).forEach(function (key) {
86
+ aliases[key].forEach(function (alias) {
87
+ aliasLookup[alias] = key
88
+ })
89
+ })
90
+
91
+ Object.keys(argv).forEach(function (key) {
92
+ if (key !== '$0' && key !== '_' &&
93
+ !descriptions.hasOwnProperty(key) &&
94
+ !demanded.hasOwnProperty(key) &&
95
+ !aliasLookup.hasOwnProperty(key)) {
96
+ unknown.push(key)
97
+ }
98
+ })
99
+
100
+ if (unknown.length === 1) {
101
+ usage.fail('Unknown argument: ' + unknown[0])
102
+ } else if (unknown.length > 1) {
103
+ usage.fail('Unknown arguments: ' + unknown.join(', '))
104
+ }
105
+ }
106
+
107
+ // custom checks, added using the `check` option on yargs.
108
+ var checks = []
109
+ self.check = function (f) {
110
+ checks.push(f)
111
+ }
112
+
113
+ self.customChecks = function (argv, aliases) {
114
+ checks.forEach(function (f) {
115
+ try {
116
+ var result = f(argv, aliases)
117
+ if (!result) {
118
+ usage.fail('Argument check failed: ' + f.toString())
119
+ } else if (typeof result === 'string') {
120
+ usage.fail(result)
193
121
  }
122
+ } catch (err) {
123
+ usage.fail(err.message ? err.message : err)
124
+ }
125
+ })
126
+ }
127
+
128
+ // check implications, argument foo implies => argument bar.
129
+ var implied = {}
130
+ self.implies = function (key, value) {
131
+ if (typeof key === 'object') {
132
+ Object.keys(key).forEach(function (k) {
133
+ self.implies(k, key[k])
134
+ })
135
+ } else {
136
+ implied[key] = value
137
+ }
138
+ }
139
+ self.getImplied = function () {
140
+ return implied
141
+ }
142
+
143
+ self.implications = function (argv) {
144
+ var implyFail = []
145
+
146
+ Object.keys(implied).forEach(function (key) {
147
+ var num,
148
+ origKey = key,
149
+ value = implied[key]
150
+
151
+ // convert string '1' to number 1
152
+ num = Number(key)
153
+ key = isNaN(num) ? key : num
154
+
155
+ if (typeof key === 'number') {
156
+ // check length of argv._
157
+ key = argv._.length >= key
158
+ } else if (key.match(/^--no-.+/)) {
159
+ // check if key doesn't exist
160
+ key = key.match(/^--no-(.+)/)[1]
161
+ key = !argv[key]
162
+ } else {
163
+ // check if key exists
164
+ key = argv[key]
165
+ }
166
+
167
+ num = Number(value)
168
+ value = isNaN(num) ? value : num
169
+
170
+ if (typeof value === 'number') {
171
+ value = argv._.length >= value
172
+ } else if (value.match(/^--no-.+/)) {
173
+ value = value.match(/^--no-(.+)/)[1]
174
+ value = !argv[value]
175
+ } else {
176
+ value = argv[value]
177
+ }
178
+
179
+ if (key && !value) {
180
+ implyFail.push(origKey)
181
+ }
182
+ })
183
+
184
+ if (implyFail.length) {
185
+ var msg = 'Implications failed:\n'
186
+
187
+ implyFail.forEach(function (key) {
188
+ msg += (' ' + key + ' -> ' + implied[key])
189
+ })
190
+
191
+ usage.fail(msg)
194
192
  }
193
+ }
195
194
 
196
- return self;
195
+ return self
197
196
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "yargs",
3
- "version": "3.7.1",
3
+ "version": "3.9.1",
4
4
  "description": "Light-weight option parsing with an argv hash. No optstrings attached.",
5
5
  "main": "./index.js",
6
6
  "files": [
@@ -11,38 +11,33 @@
11
11
  ],
12
12
  "dependencies": {
13
13
  "camelcase": "^1.0.2",
14
+ "cliui": "^2.1.0",
14
15
  "decamelize": "^1.0.0",
15
- "window-size": "0.1.0",
16
- "wordwrap": "0.0.2"
16
+ "window-size": "0.1.0"
17
17
  },
18
18
  "devDependencies": {
19
19
  "chai": "^2.2.0",
20
20
  "coveralls": "^2.11.2",
21
21
  "hashish": "0.0.4",
22
22
  "mocha": "^2.2.1",
23
- "mocha-lcov-reporter": "0.0.2",
24
- "mocoverage": "^1.0.0",
25
- "patched-blanket": "^1.0.1"
23
+ "nyc": "^2.0.0",
24
+ "standard": "^3.9.0"
26
25
  },
27
26
  "scripts": {
28
- "test": "mocha --check-leaks --ui exports --require patched-blanket -R mocoverage"
27
+ "test": "standard && nyc mocha --check-leaks && nyc report",
28
+ "coverage": "nyc report --reporter=text-lcov | coveralls"
29
29
  },
30
30
  "repository": {
31
31
  "type": "git",
32
32
  "url": "http://github.com/bcoe/yargs.git"
33
33
  },
34
- "config": {
35
- "blanket": {
36
- "pattern": [
37
- "lib",
38
- "index.js"
39
- ],
40
- "data-cover-never": [
41
- "node_modules",
42
- "test"
43
- ],
44
- "output-reporter": "spec"
45
- }
34
+ "standard": {
35
+ "ignore": [
36
+ "**/example/**"
37
+ ],
38
+ "globals": [
39
+ "it"
40
+ ]
46
41
  },
47
42
  "keywords": [
48
43
  "argument",
@@ -77,9 +72,13 @@
77
72
  {
78
73
  "name": "Benjamin Horsleben",
79
74
  "url": "https://github.com/fizker"
75
+ },
76
+ {
77
+ "name": "Lin Clark",
78
+ "url": "https://github.com/linclark"
80
79
  }
81
80
  ],
82
- "license": "MIT/X11",
81
+ "license": "MIT",
83
82
  "engine": {
84
83
  "node": ">=0.4"
85
84
  }