1 | "use strict";
|
2 |
|
3 | const startsWith = require('mout/string/startsWith');
|
4 | const isArray = require('mout/lang/isArray');
|
5 |
|
6 | const JSON_ARGS = new RegExp("::json$");
|
7 |
|
8 | module.exports = function(argv) {
|
9 |
|
10 |
|
11 | if(arguments.length == 0)
|
12 | argv = process.argv.slice(2);
|
13 |
|
14 | var args = [];
|
15 | var dict = {};
|
16 | var rest;
|
17 | var r;
|
18 | var e = new RegExp("^--?([a-z_0-9/:-]+)(?:=(.*))?", "i");
|
19 |
|
20 | argv.forEach(function(arg, i) {
|
21 | var k;
|
22 | var v;
|
23 | if(rest !== undefined)
|
24 | return;
|
25 | if(arg == "--") {
|
26 | rest = argv.slice(i + 1).join(' ');
|
27 | } else if(!startsWith(arg, '-')) {
|
28 | args.push(arg);
|
29 | } else if(e.test(arg)) {
|
30 | r = e.exec(arg);
|
31 | k = r[1], v = r[2] === undefined ? true : r[2];
|
32 |
|
33 | if(JSON_ARGS.test(k)) {
|
34 | k = k.substr(0, k.length - 6);
|
35 | v = JSON.parse(v);
|
36 | }
|
37 |
|
38 | if(typeof v === 'string' && v !== '' && isFinite(v))
|
39 | v = parseFloat(v);
|
40 |
|
41 | if(dict[k] !== undefined) {
|
42 | if(!isArray(dict[k]))
|
43 | dict[k] = [dict[k]];
|
44 |
|
45 | dict[k].push(v);
|
46 | } else {
|
47 | dict[k] = v;
|
48 | }
|
49 | }
|
50 | });
|
51 |
|
52 | return {args, dict, rest};
|
53 | };
|