This repository was archived by the owner on Dec 10, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathparser.ts
62 lines (46 loc) · 1.56 KB
/
parser.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
/**
* Parses commands, options, and unknown arguments from the ARGV array.
* @param argv ARGV to be used
*/
export type ARGVArray = string[];
export default function parseArgv (argv: ARGVArray) {
if (argv.length === 0)
return { command: '', options: {}, unknown: [] };
const parsed = {
command: undefined,
options: {},
unknown: []
};
for (let i = 0; i < argv.length; i++) {
const current: string = argv[i];
if (!detectHyphenArgs(current)) {
if (i === 0)
parsed.command = current;
if (i !== 0 && detectHyphenArgs(argv[i-1])) {
const prevArg = parseHypenArgs(argv[i-1]);
parsed.options[prevArg[0]] = detectArrayOfValues(current) ? current.split(",") : current;
}
}
if (i !== 0 && (!detectHyphenArgs(argv[i-1]) && !detectHyphenArgs(current))) {
parsed.unknown.push(current);
}
if (detectHyphenArgs(current)) {
const arg = parseHypenArgs(current);
const value = (() => {
const val = arg[1] || ""
return detectArrayOfValues(val) ? val.split(",") : val;
})()
parsed.options[arg[0]] = value;
}
}
return parsed;
}
function parseHypenArgs(val) {
return val.replace(val.startsWith("--") ? "--" : "-", "").split("=");
}
function detectArrayOfValues(val) {
return val.split(",").length > 1 ? true : false;
}
function detectHyphenArgs(arg: string) {
return arg.startsWith("-");
}