UNPKG

1.17 kBJavaScriptView Raw
1"use strict";
2
3const startsWith = require('mout/string/startsWith');
4const isArray = require('mout/lang/isArray');
5
6const JSON_ARGS = new RegExp("::json$");
7
8module.exports = function(argv) {
9
10 /* istanbul ignore if */
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)) //mout isFinite force parseFloat
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};