-
Notifications
You must be signed in to change notification settings - Fork 0
/
cli.ts
70 lines (64 loc) · 1.58 KB
/
cli.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
63
64
65
66
67
68
69
70
import commandLineArgs from "command-line-args";
import "colors";
const optionDefinitions: Parameters<typeof commandLineArgs>[0] = [
{
name: "school_id",
type: String,
defaultValue: "mp2i-parc",
},
{
name: "input_dir",
type: String,
alias: "i",
},
{
name: "username",
type: String,
alias: "u",
defaultValue: "",
},
{
name: "password",
type: String,
alias: "p",
defaultValue: "",
},
{
name: "output",
type: String,
alias: "o",
},
{ name: "verbose", alias: "v", type: Boolean, defaultValue: false },
];
type ReturnType = {
school_id: string;
input_dir: string;
username: string;
password: string;
output: string;
};
/// might throw an error if args are not valid
export default function parseArgs(): ReturnType {
const args = commandLineArgs(optionDefinitions);
if (
!("school_id" in args) ||
!("input_dir" in args) ||
!("output" in args) ||
!("username" in args) ||
!("password" in args) ||
!("verbose" in args)
)
throw console.error("[FATAL] not enough option were provided".red.bold);
const { school_id, verbose, input_dir, output, username, password } = args;
if (
typeof school_id !== "string" ||
typeof input_dir !== "string" ||
typeof output !== "string" ||
typeof username !== "string" ||
typeof password !== "string" ||
typeof verbose !== "boolean"
)
throw console.error("[FATAL] options types are invalid".red.bold);
process.env.VERBOSE = `${verbose}`; // set verbose env
return { school_id, input_dir, output, username, password };
}