pxnpm 6.0.9 → 6.0.11
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/bin/pxnpm.cjs +2 -2
- package/dist/node_modules/minimist/.eslintrc +29 -0
- package/dist/node_modules/minimist/.github/FUNDING.yml +12 -0
- package/dist/node_modules/minimist/.nycrc +14 -0
- package/dist/node_modules/minimist/CHANGELOG.md +298 -0
- package/dist/node_modules/minimist/LICENSE +18 -0
- package/dist/node_modules/minimist/README.md +121 -0
- package/dist/node_modules/minimist/example/parse.js +4 -0
- package/dist/node_modules/minimist/index.js +263 -0
- package/dist/node_modules/minimist/package.json +75 -0
- package/dist/node_modules/minimist/test/all_bool.js +34 -0
- package/dist/node_modules/minimist/test/bool.js +177 -0
- package/dist/node_modules/minimist/test/dash.js +43 -0
- package/dist/node_modules/minimist/test/default_bool.js +37 -0
- package/dist/node_modules/minimist/test/dotted.js +24 -0
- package/dist/node_modules/minimist/test/kv_short.js +32 -0
- package/dist/node_modules/minimist/test/long.js +33 -0
- package/dist/node_modules/minimist/test/num.js +38 -0
- package/dist/node_modules/minimist/test/parse.js +209 -0
- package/dist/node_modules/minimist/test/parse_modified.js +11 -0
- package/dist/node_modules/minimist/test/proto.js +64 -0
- package/dist/node_modules/minimist/test/short.js +69 -0
- package/dist/node_modules/minimist/test/stop_early.js +17 -0
- package/dist/node_modules/minimist/test/unknown.js +104 -0
- package/dist/node_modules/minimist/test/whitespace.js +10 -0
- package/package.json +2 -1
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
function hasKey(obj, keys) {
|
|
4
|
+
var o = obj;
|
|
5
|
+
keys.slice(0, -1).forEach(function (key) {
|
|
6
|
+
o = o[key] || {};
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
var key = keys[keys.length - 1];
|
|
10
|
+
return key in o;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
function isNumber(x) {
|
|
14
|
+
if (typeof x === 'number') { return true; }
|
|
15
|
+
if ((/^0x[0-9a-f]+$/i).test(x)) { return true; }
|
|
16
|
+
return (/^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/).test(x);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function isConstructorOrProto(obj, key) {
|
|
20
|
+
return (key === 'constructor' && typeof obj[key] === 'function') || key === '__proto__';
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
module.exports = function (args, opts) {
|
|
24
|
+
if (!opts) { opts = {}; }
|
|
25
|
+
|
|
26
|
+
var flags = {
|
|
27
|
+
bools: {},
|
|
28
|
+
strings: {},
|
|
29
|
+
unknownFn: null,
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
if (typeof opts.unknown === 'function') {
|
|
33
|
+
flags.unknownFn = opts.unknown;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
if (typeof opts.boolean === 'boolean' && opts.boolean) {
|
|
37
|
+
flags.allBools = true;
|
|
38
|
+
} else {
|
|
39
|
+
[].concat(opts.boolean).filter(Boolean).forEach(function (key) {
|
|
40
|
+
flags.bools[key] = true;
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
var aliases = {};
|
|
45
|
+
|
|
46
|
+
function aliasIsBoolean(key) {
|
|
47
|
+
return aliases[key].some(function (x) {
|
|
48
|
+
return flags.bools[x];
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
Object.keys(opts.alias || {}).forEach(function (key) {
|
|
53
|
+
aliases[key] = [].concat(opts.alias[key]);
|
|
54
|
+
aliases[key].forEach(function (x) {
|
|
55
|
+
aliases[x] = [key].concat(aliases[key].filter(function (y) {
|
|
56
|
+
return x !== y;
|
|
57
|
+
}));
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
[].concat(opts.string).filter(Boolean).forEach(function (key) {
|
|
62
|
+
flags.strings[key] = true;
|
|
63
|
+
if (aliases[key]) {
|
|
64
|
+
[].concat(aliases[key]).forEach(function (k) {
|
|
65
|
+
flags.strings[k] = true;
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
var defaults = opts.default || {};
|
|
71
|
+
|
|
72
|
+
var argv = { _: [] };
|
|
73
|
+
|
|
74
|
+
function argDefined(key, arg) {
|
|
75
|
+
return (flags.allBools && (/^--[^=]+$/).test(arg))
|
|
76
|
+
|| flags.strings[key]
|
|
77
|
+
|| flags.bools[key]
|
|
78
|
+
|| aliases[key];
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
function setKey(obj, keys, value) {
|
|
82
|
+
var o = obj;
|
|
83
|
+
for (var i = 0; i < keys.length - 1; i++) {
|
|
84
|
+
var key = keys[i];
|
|
85
|
+
if (isConstructorOrProto(o, key)) { return; }
|
|
86
|
+
if (o[key] === undefined) { o[key] = {}; }
|
|
87
|
+
if (
|
|
88
|
+
o[key] === Object.prototype
|
|
89
|
+
|| o[key] === Number.prototype
|
|
90
|
+
|| o[key] === String.prototype
|
|
91
|
+
) {
|
|
92
|
+
o[key] = {};
|
|
93
|
+
}
|
|
94
|
+
if (o[key] === Array.prototype) { o[key] = []; }
|
|
95
|
+
o = o[key];
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
var lastKey = keys[keys.length - 1];
|
|
99
|
+
if (isConstructorOrProto(o, lastKey)) { return; }
|
|
100
|
+
if (
|
|
101
|
+
o === Object.prototype
|
|
102
|
+
|| o === Number.prototype
|
|
103
|
+
|| o === String.prototype
|
|
104
|
+
) {
|
|
105
|
+
o = {};
|
|
106
|
+
}
|
|
107
|
+
if (o === Array.prototype) { o = []; }
|
|
108
|
+
if (o[lastKey] === undefined || flags.bools[lastKey] || typeof o[lastKey] === 'boolean') {
|
|
109
|
+
o[lastKey] = value;
|
|
110
|
+
} else if (Array.isArray(o[lastKey])) {
|
|
111
|
+
o[lastKey].push(value);
|
|
112
|
+
} else {
|
|
113
|
+
o[lastKey] = [o[lastKey], value];
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
function setArg(key, val, arg) {
|
|
118
|
+
if (arg && flags.unknownFn && !argDefined(key, arg)) {
|
|
119
|
+
if (flags.unknownFn(arg) === false) { return; }
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
var value = !flags.strings[key] && isNumber(val)
|
|
123
|
+
? Number(val)
|
|
124
|
+
: val;
|
|
125
|
+
setKey(argv, key.split('.'), value);
|
|
126
|
+
|
|
127
|
+
(aliases[key] || []).forEach(function (x) {
|
|
128
|
+
setKey(argv, x.split('.'), value);
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
Object.keys(flags.bools).forEach(function (key) {
|
|
133
|
+
setArg(key, defaults[key] === undefined ? false : defaults[key]);
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
var notFlags = [];
|
|
137
|
+
|
|
138
|
+
if (args.indexOf('--') !== -1) {
|
|
139
|
+
notFlags = args.slice(args.indexOf('--') + 1);
|
|
140
|
+
args = args.slice(0, args.indexOf('--'));
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
for (var i = 0; i < args.length; i++) {
|
|
144
|
+
var arg = args[i];
|
|
145
|
+
var key;
|
|
146
|
+
var next;
|
|
147
|
+
|
|
148
|
+
if ((/^--.+=/).test(arg)) {
|
|
149
|
+
// Using [\s\S] instead of . because js doesn't support the
|
|
150
|
+
// 'dotall' regex modifier. See:
|
|
151
|
+
// http://stackoverflow.com/a/1068308/13216
|
|
152
|
+
var m = arg.match(/^--([^=]+)=([\s\S]*)$/);
|
|
153
|
+
key = m[1];
|
|
154
|
+
var value = m[2];
|
|
155
|
+
if (flags.bools[key]) {
|
|
156
|
+
value = value !== 'false';
|
|
157
|
+
}
|
|
158
|
+
setArg(key, value, arg);
|
|
159
|
+
} else if ((/^--no-.+/).test(arg)) {
|
|
160
|
+
key = arg.match(/^--no-(.+)/)[1];
|
|
161
|
+
setArg(key, false, arg);
|
|
162
|
+
} else if ((/^--.+/).test(arg)) {
|
|
163
|
+
key = arg.match(/^--(.+)/)[1];
|
|
164
|
+
next = args[i + 1];
|
|
165
|
+
if (
|
|
166
|
+
next !== undefined
|
|
167
|
+
&& !(/^(-|--)[^-]/).test(next)
|
|
168
|
+
&& !flags.bools[key]
|
|
169
|
+
&& !flags.allBools
|
|
170
|
+
&& (aliases[key] ? !aliasIsBoolean(key) : true)
|
|
171
|
+
) {
|
|
172
|
+
setArg(key, next, arg);
|
|
173
|
+
i += 1;
|
|
174
|
+
} else if ((/^(true|false)$/).test(next)) {
|
|
175
|
+
setArg(key, next === 'true', arg);
|
|
176
|
+
i += 1;
|
|
177
|
+
} else {
|
|
178
|
+
setArg(key, flags.strings[key] ? '' : true, arg);
|
|
179
|
+
}
|
|
180
|
+
} else if ((/^-[^-]+/).test(arg)) {
|
|
181
|
+
var letters = arg.slice(1, -1).split('');
|
|
182
|
+
|
|
183
|
+
var broken = false;
|
|
184
|
+
for (var j = 0; j < letters.length; j++) {
|
|
185
|
+
next = arg.slice(j + 2);
|
|
186
|
+
|
|
187
|
+
if (next === '-') {
|
|
188
|
+
setArg(letters[j], next, arg);
|
|
189
|
+
continue;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
if ((/[A-Za-z]/).test(letters[j]) && next[0] === '=') {
|
|
193
|
+
setArg(letters[j], next.slice(1), arg);
|
|
194
|
+
broken = true;
|
|
195
|
+
break;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
if (
|
|
199
|
+
(/[A-Za-z]/).test(letters[j])
|
|
200
|
+
&& (/-?\d+(\.\d*)?(e-?\d+)?$/).test(next)
|
|
201
|
+
) {
|
|
202
|
+
setArg(letters[j], next, arg);
|
|
203
|
+
broken = true;
|
|
204
|
+
break;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
if (letters[j + 1] && letters[j + 1].match(/\W/)) {
|
|
208
|
+
setArg(letters[j], arg.slice(j + 2), arg);
|
|
209
|
+
broken = true;
|
|
210
|
+
break;
|
|
211
|
+
} else {
|
|
212
|
+
setArg(letters[j], flags.strings[letters[j]] ? '' : true, arg);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
key = arg.slice(-1)[0];
|
|
217
|
+
if (!broken && key !== '-') {
|
|
218
|
+
if (
|
|
219
|
+
args[i + 1]
|
|
220
|
+
&& !(/^(-|--)[^-]/).test(args[i + 1])
|
|
221
|
+
&& !flags.bools[key]
|
|
222
|
+
&& (aliases[key] ? !aliasIsBoolean(key) : true)
|
|
223
|
+
) {
|
|
224
|
+
setArg(key, args[i + 1], arg);
|
|
225
|
+
i += 1;
|
|
226
|
+
} else if (args[i + 1] && (/^(true|false)$/).test(args[i + 1])) {
|
|
227
|
+
setArg(key, args[i + 1] === 'true', arg);
|
|
228
|
+
i += 1;
|
|
229
|
+
} else {
|
|
230
|
+
setArg(key, flags.strings[key] ? '' : true, arg);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
} else {
|
|
234
|
+
if (!flags.unknownFn || flags.unknownFn(arg) !== false) {
|
|
235
|
+
argv._.push(flags.strings._ || !isNumber(arg) ? arg : Number(arg));
|
|
236
|
+
}
|
|
237
|
+
if (opts.stopEarly) {
|
|
238
|
+
argv._.push.apply(argv._, args.slice(i + 1));
|
|
239
|
+
break;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
Object.keys(defaults).forEach(function (k) {
|
|
245
|
+
if (!hasKey(argv, k.split('.'))) {
|
|
246
|
+
setKey(argv, k.split('.'), defaults[k]);
|
|
247
|
+
|
|
248
|
+
(aliases[k] || []).forEach(function (x) {
|
|
249
|
+
setKey(argv, x.split('.'), defaults[k]);
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
});
|
|
253
|
+
|
|
254
|
+
if (opts['--']) {
|
|
255
|
+
argv['--'] = notFlags.slice();
|
|
256
|
+
} else {
|
|
257
|
+
notFlags.forEach(function (k) {
|
|
258
|
+
argv._.push(k);
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
return argv;
|
|
263
|
+
};
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "minimist",
|
|
3
|
+
"version": "1.2.8",
|
|
4
|
+
"description": "parse argument options",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"devDependencies": {
|
|
7
|
+
"@ljharb/eslint-config": "^21.0.1",
|
|
8
|
+
"aud": "^2.0.2",
|
|
9
|
+
"auto-changelog": "^2.4.0",
|
|
10
|
+
"eslint": "=8.8.0",
|
|
11
|
+
"in-publish": "^2.0.1",
|
|
12
|
+
"npmignore": "^0.3.0",
|
|
13
|
+
"nyc": "^10.3.2",
|
|
14
|
+
"safe-publish-latest": "^2.0.0",
|
|
15
|
+
"tape": "^5.6.3"
|
|
16
|
+
},
|
|
17
|
+
"scripts": {
|
|
18
|
+
"prepack": "npmignore --auto --commentLines=auto",
|
|
19
|
+
"prepublishOnly": "safe-publish-latest",
|
|
20
|
+
"prepublish": "not-in-publish || npm run prepublishOnly",
|
|
21
|
+
"lint": "eslint --ext=js,mjs .",
|
|
22
|
+
"pretest": "npm run lint",
|
|
23
|
+
"tests-only": "nyc tape 'test/**/*.js'",
|
|
24
|
+
"test": "npm run tests-only",
|
|
25
|
+
"posttest": "aud --production",
|
|
26
|
+
"version": "auto-changelog && git add CHANGELOG.md",
|
|
27
|
+
"postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\""
|
|
28
|
+
},
|
|
29
|
+
"testling": {
|
|
30
|
+
"files": "test/*.js",
|
|
31
|
+
"browsers": [
|
|
32
|
+
"ie/6..latest",
|
|
33
|
+
"ff/5",
|
|
34
|
+
"firefox/latest",
|
|
35
|
+
"chrome/10",
|
|
36
|
+
"chrome/latest",
|
|
37
|
+
"safari/5.1",
|
|
38
|
+
"safari/latest",
|
|
39
|
+
"opera/12"
|
|
40
|
+
]
|
|
41
|
+
},
|
|
42
|
+
"repository": {
|
|
43
|
+
"type": "git",
|
|
44
|
+
"url": "git://github.com/minimistjs/minimist.git"
|
|
45
|
+
},
|
|
46
|
+
"homepage": "https://github.com/minimistjs/minimist",
|
|
47
|
+
"keywords": [
|
|
48
|
+
"argv",
|
|
49
|
+
"getopt",
|
|
50
|
+
"parser",
|
|
51
|
+
"optimist"
|
|
52
|
+
],
|
|
53
|
+
"author": {
|
|
54
|
+
"name": "James Halliday",
|
|
55
|
+
"email": "mail@substack.net",
|
|
56
|
+
"url": "http://substack.net"
|
|
57
|
+
},
|
|
58
|
+
"funding": {
|
|
59
|
+
"url": "https://github.com/sponsors/ljharb"
|
|
60
|
+
},
|
|
61
|
+
"license": "MIT",
|
|
62
|
+
"auto-changelog": {
|
|
63
|
+
"output": "CHANGELOG.md",
|
|
64
|
+
"template": "keepachangelog",
|
|
65
|
+
"unreleased": false,
|
|
66
|
+
"commitLimit": false,
|
|
67
|
+
"backfillLimit": false,
|
|
68
|
+
"hideCredit": true
|
|
69
|
+
},
|
|
70
|
+
"publishConfig": {
|
|
71
|
+
"ignore": [
|
|
72
|
+
".github/workflows"
|
|
73
|
+
]
|
|
74
|
+
}
|
|
75
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var parse = require('../');
|
|
4
|
+
var test = require('tape');
|
|
5
|
+
|
|
6
|
+
test('flag boolean true (default all --args to boolean)', function (t) {
|
|
7
|
+
var argv = parse(['moo', '--honk', 'cow'], {
|
|
8
|
+
boolean: true,
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
t.deepEqual(argv, {
|
|
12
|
+
honk: true,
|
|
13
|
+
_: ['moo', 'cow'],
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
t.deepEqual(typeof argv.honk, 'boolean');
|
|
17
|
+
t.end();
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
test('flag boolean true only affects double hyphen arguments without equals signs', function (t) {
|
|
21
|
+
var argv = parse(['moo', '--honk', 'cow', '-p', '55', '--tacos=good'], {
|
|
22
|
+
boolean: true,
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
t.deepEqual(argv, {
|
|
26
|
+
honk: true,
|
|
27
|
+
tacos: 'good',
|
|
28
|
+
p: 55,
|
|
29
|
+
_: ['moo', 'cow'],
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
t.deepEqual(typeof argv.honk, 'boolean');
|
|
33
|
+
t.end();
|
|
34
|
+
});
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var parse = require('../');
|
|
4
|
+
var test = require('tape');
|
|
5
|
+
|
|
6
|
+
test('flag boolean default false', function (t) {
|
|
7
|
+
var argv = parse(['moo'], {
|
|
8
|
+
boolean: ['t', 'verbose'],
|
|
9
|
+
default: { verbose: false, t: false },
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
t.deepEqual(argv, {
|
|
13
|
+
verbose: false,
|
|
14
|
+
t: false,
|
|
15
|
+
_: ['moo'],
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
t.deepEqual(typeof argv.verbose, 'boolean');
|
|
19
|
+
t.deepEqual(typeof argv.t, 'boolean');
|
|
20
|
+
t.end();
|
|
21
|
+
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
test('boolean groups', function (t) {
|
|
25
|
+
var argv = parse(['-x', '-z', 'one', 'two', 'three'], {
|
|
26
|
+
boolean: ['x', 'y', 'z'],
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
t.deepEqual(argv, {
|
|
30
|
+
x: true,
|
|
31
|
+
y: false,
|
|
32
|
+
z: true,
|
|
33
|
+
_: ['one', 'two', 'three'],
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
t.deepEqual(typeof argv.x, 'boolean');
|
|
37
|
+
t.deepEqual(typeof argv.y, 'boolean');
|
|
38
|
+
t.deepEqual(typeof argv.z, 'boolean');
|
|
39
|
+
t.end();
|
|
40
|
+
});
|
|
41
|
+
test('boolean and alias with chainable api', function (t) {
|
|
42
|
+
var aliased = ['-h', 'derp'];
|
|
43
|
+
var regular = ['--herp', 'derp'];
|
|
44
|
+
var aliasedArgv = parse(aliased, {
|
|
45
|
+
boolean: 'herp',
|
|
46
|
+
alias: { h: 'herp' },
|
|
47
|
+
});
|
|
48
|
+
var propertyArgv = parse(regular, {
|
|
49
|
+
boolean: 'herp',
|
|
50
|
+
alias: { h: 'herp' },
|
|
51
|
+
});
|
|
52
|
+
var expected = {
|
|
53
|
+
herp: true,
|
|
54
|
+
h: true,
|
|
55
|
+
_: ['derp'],
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
t.same(aliasedArgv, expected);
|
|
59
|
+
t.same(propertyArgv, expected);
|
|
60
|
+
t.end();
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
test('boolean and alias with options hash', function (t) {
|
|
64
|
+
var aliased = ['-h', 'derp'];
|
|
65
|
+
var regular = ['--herp', 'derp'];
|
|
66
|
+
var opts = {
|
|
67
|
+
alias: { h: 'herp' },
|
|
68
|
+
boolean: 'herp',
|
|
69
|
+
};
|
|
70
|
+
var aliasedArgv = parse(aliased, opts);
|
|
71
|
+
var propertyArgv = parse(regular, opts);
|
|
72
|
+
var expected = {
|
|
73
|
+
herp: true,
|
|
74
|
+
h: true,
|
|
75
|
+
_: ['derp'],
|
|
76
|
+
};
|
|
77
|
+
t.same(aliasedArgv, expected);
|
|
78
|
+
t.same(propertyArgv, expected);
|
|
79
|
+
t.end();
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
test('boolean and alias array with options hash', function (t) {
|
|
83
|
+
var aliased = ['-h', 'derp'];
|
|
84
|
+
var regular = ['--herp', 'derp'];
|
|
85
|
+
var alt = ['--harp', 'derp'];
|
|
86
|
+
var opts = {
|
|
87
|
+
alias: { h: ['herp', 'harp'] },
|
|
88
|
+
boolean: 'h',
|
|
89
|
+
};
|
|
90
|
+
var aliasedArgv = parse(aliased, opts);
|
|
91
|
+
var propertyArgv = parse(regular, opts);
|
|
92
|
+
var altPropertyArgv = parse(alt, opts);
|
|
93
|
+
var expected = {
|
|
94
|
+
harp: true,
|
|
95
|
+
herp: true,
|
|
96
|
+
h: true,
|
|
97
|
+
_: ['derp'],
|
|
98
|
+
};
|
|
99
|
+
t.same(aliasedArgv, expected);
|
|
100
|
+
t.same(propertyArgv, expected);
|
|
101
|
+
t.same(altPropertyArgv, expected);
|
|
102
|
+
t.end();
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
test('boolean and alias using explicit true', function (t) {
|
|
106
|
+
var aliased = ['-h', 'true'];
|
|
107
|
+
var regular = ['--herp', 'true'];
|
|
108
|
+
var opts = {
|
|
109
|
+
alias: { h: 'herp' },
|
|
110
|
+
boolean: 'h',
|
|
111
|
+
};
|
|
112
|
+
var aliasedArgv = parse(aliased, opts);
|
|
113
|
+
var propertyArgv = parse(regular, opts);
|
|
114
|
+
var expected = {
|
|
115
|
+
herp: true,
|
|
116
|
+
h: true,
|
|
117
|
+
_: [],
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
t.same(aliasedArgv, expected);
|
|
121
|
+
t.same(propertyArgv, expected);
|
|
122
|
+
t.end();
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
// regression, see https://github.com/substack/node-optimist/issues/71
|
|
126
|
+
test('boolean and --x=true', function (t) {
|
|
127
|
+
var parsed = parse(['--boool', '--other=true'], {
|
|
128
|
+
boolean: 'boool',
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
t.same(parsed.boool, true);
|
|
132
|
+
t.same(parsed.other, 'true');
|
|
133
|
+
|
|
134
|
+
parsed = parse(['--boool', '--other=false'], {
|
|
135
|
+
boolean: 'boool',
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
t.same(parsed.boool, true);
|
|
139
|
+
t.same(parsed.other, 'false');
|
|
140
|
+
t.end();
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
test('boolean --boool=true', function (t) {
|
|
144
|
+
var parsed = parse(['--boool=true'], {
|
|
145
|
+
default: {
|
|
146
|
+
boool: false,
|
|
147
|
+
},
|
|
148
|
+
boolean: ['boool'],
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
t.same(parsed.boool, true);
|
|
152
|
+
t.end();
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
test('boolean --boool=false', function (t) {
|
|
156
|
+
var parsed = parse(['--boool=false'], {
|
|
157
|
+
default: {
|
|
158
|
+
boool: true,
|
|
159
|
+
},
|
|
160
|
+
boolean: ['boool'],
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
t.same(parsed.boool, false);
|
|
164
|
+
t.end();
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
test('boolean using something similar to true', function (t) {
|
|
168
|
+
var opts = { boolean: 'h' };
|
|
169
|
+
var result = parse(['-h', 'true.txt'], opts);
|
|
170
|
+
var expected = {
|
|
171
|
+
h: true,
|
|
172
|
+
_: ['true.txt'],
|
|
173
|
+
};
|
|
174
|
+
|
|
175
|
+
t.same(result, expected);
|
|
176
|
+
t.end();
|
|
177
|
+
});
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var parse = require('../');
|
|
4
|
+
var test = require('tape');
|
|
5
|
+
|
|
6
|
+
test('-', function (t) {
|
|
7
|
+
t.plan(6);
|
|
8
|
+
t.deepEqual(parse(['-n', '-']), { n: '-', _: [] });
|
|
9
|
+
t.deepEqual(parse(['--nnn', '-']), { nnn: '-', _: [] });
|
|
10
|
+
t.deepEqual(parse(['-']), { _: ['-'] });
|
|
11
|
+
t.deepEqual(parse(['-f-']), { f: '-', _: [] });
|
|
12
|
+
t.deepEqual(
|
|
13
|
+
parse(['-b', '-'], { boolean: 'b' }),
|
|
14
|
+
{ b: true, _: ['-'] }
|
|
15
|
+
);
|
|
16
|
+
t.deepEqual(
|
|
17
|
+
parse(['-s', '-'], { string: 's' }),
|
|
18
|
+
{ s: '-', _: [] }
|
|
19
|
+
);
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
test('-a -- b', function (t) {
|
|
23
|
+
t.plan(2);
|
|
24
|
+
t.deepEqual(parse(['-a', '--', 'b']), { a: true, _: ['b'] });
|
|
25
|
+
t.deepEqual(parse(['--a', '--', 'b']), { a: true, _: ['b'] });
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
test('move arguments after the -- into their own `--` array', function (t) {
|
|
29
|
+
t.plan(1);
|
|
30
|
+
t.deepEqual(
|
|
31
|
+
parse(['--name', 'John', 'before', '--', 'after'], { '--': true }),
|
|
32
|
+
{ name: 'John', _: ['before'], '--': ['after'] }
|
|
33
|
+
);
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
test('--- option value', function (t) {
|
|
37
|
+
// A multi-dash value is largely an edge case, but check the behaviour is as expected,
|
|
38
|
+
// and in particular the same for short option and long option (as made consistent in Jan 2023).
|
|
39
|
+
t.plan(2);
|
|
40
|
+
t.deepEqual(parse(['-n', '---']), { n: '---', _: [] });
|
|
41
|
+
t.deepEqual(parse(['--nnn', '---']), { nnn: '---', _: [] });
|
|
42
|
+
});
|
|
43
|
+
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var test = require('tape');
|
|
4
|
+
var parse = require('../');
|
|
5
|
+
|
|
6
|
+
test('boolean default true', function (t) {
|
|
7
|
+
var argv = parse([], {
|
|
8
|
+
boolean: 'sometrue',
|
|
9
|
+
default: { sometrue: true },
|
|
10
|
+
});
|
|
11
|
+
t.equal(argv.sometrue, true);
|
|
12
|
+
t.end();
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
test('boolean default false', function (t) {
|
|
16
|
+
var argv = parse([], {
|
|
17
|
+
boolean: 'somefalse',
|
|
18
|
+
default: { somefalse: false },
|
|
19
|
+
});
|
|
20
|
+
t.equal(argv.somefalse, false);
|
|
21
|
+
t.end();
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
test('boolean default to null', function (t) {
|
|
25
|
+
var argv = parse([], {
|
|
26
|
+
boolean: 'maybe',
|
|
27
|
+
default: { maybe: null },
|
|
28
|
+
});
|
|
29
|
+
t.equal(argv.maybe, null);
|
|
30
|
+
|
|
31
|
+
var argvLong = parse(['--maybe'], {
|
|
32
|
+
boolean: 'maybe',
|
|
33
|
+
default: { maybe: null },
|
|
34
|
+
});
|
|
35
|
+
t.equal(argvLong.maybe, true);
|
|
36
|
+
t.end();
|
|
37
|
+
});
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var parse = require('../');
|
|
4
|
+
var test = require('tape');
|
|
5
|
+
|
|
6
|
+
test('dotted alias', function (t) {
|
|
7
|
+
var argv = parse(['--a.b', '22'], { default: { 'a.b': 11 }, alias: { 'a.b': 'aa.bb' } });
|
|
8
|
+
t.equal(argv.a.b, 22);
|
|
9
|
+
t.equal(argv.aa.bb, 22);
|
|
10
|
+
t.end();
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
test('dotted default', function (t) {
|
|
14
|
+
var argv = parse('', { default: { 'a.b': 11 }, alias: { 'a.b': 'aa.bb' } });
|
|
15
|
+
t.equal(argv.a.b, 11);
|
|
16
|
+
t.equal(argv.aa.bb, 11);
|
|
17
|
+
t.end();
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
test('dotted default with no alias', function (t) {
|
|
21
|
+
var argv = parse('', { default: { 'a.b': 11 } });
|
|
22
|
+
t.equal(argv.a.b, 11);
|
|
23
|
+
t.end();
|
|
24
|
+
});
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var parse = require('../');
|
|
4
|
+
var test = require('tape');
|
|
5
|
+
|
|
6
|
+
test('short -k=v', function (t) {
|
|
7
|
+
t.plan(1);
|
|
8
|
+
|
|
9
|
+
var argv = parse(['-b=123']);
|
|
10
|
+
t.deepEqual(argv, { b: 123, _: [] });
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
test('multi short -k=v', function (t) {
|
|
14
|
+
t.plan(1);
|
|
15
|
+
|
|
16
|
+
var argv = parse(['-a=whatever', '-b=robots']);
|
|
17
|
+
t.deepEqual(argv, { a: 'whatever', b: 'robots', _: [] });
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
test('short with embedded equals -k=a=b', function (t) {
|
|
21
|
+
t.plan(1);
|
|
22
|
+
|
|
23
|
+
var argv = parse(['-k=a=b']);
|
|
24
|
+
t.deepEqual(argv, { k: 'a=b', _: [] });
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
test('short with later equals like -ab=c', function (t) {
|
|
28
|
+
t.plan(1);
|
|
29
|
+
|
|
30
|
+
var argv = parse(['-ab=c']);
|
|
31
|
+
t.deepEqual(argv, { a: true, b: 'c', _: [] });
|
|
32
|
+
});
|