-
Notifications
You must be signed in to change notification settings - Fork 6
/
main.ts
executable file
·102 lines (85 loc) · 2.16 KB
/
main.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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
// Copyright 2020 Yoshiya Hinosawa. All rights reserved. MIT license.
const { exit, args, readFile } = Deno;
import { parse } from "./deps.ts";
import { decode } from "./util.ts";
import type { Config } from "./lib.ts";
import { checkLicense } from "./lib.ts";
async function readConfig(
config = ".licenserc.json",
): Promise<Array<Config>> {
let data: Uint8Array;
let configObj;
try {
data = await readFile(config);
} catch (_e) {
console.log(`Error: config file "${config}" not found.`);
exit(1);
}
try {
configObj = JSON.parse(decode(data!));
} catch (e) {
console.log(`Error: Failed to parse "${config}" as JSON.`);
console.log(e);
exit(1);
}
let configObjArray: Array<Config>;
if (Array.isArray(configObj)) {
configObjArray = configObj;
} else {
configObjArray = [configObj];
}
return configObjArray.map(configObjToConfig);
}
function configObjToConfig(configObj: Config): Config {
const ignore = configObj.ignore || [];
delete configObj.ignore;
const entries: Array<[string, string | string[]]> = Object.entries(configObj);
return { ignore, config: entries };
}
type Opts = {
help?: boolean;
version?: boolean;
quiet?: boolean;
inject?: boolean;
};
const main = async (opts: Opts) => {
if (opts.help) {
console.log(`
Usage: license_checker.ts [options]
Options:
-H, --help Show this help message and exit.
-V, --version Show the version number and exit.
-q, --quiet Don't print messages except errors.
-i, --inject Inject license into head if missing.
-c, --config <filename> Specify config filename. Default is '.licenserc.json'.
`);
exit(0);
}
if (opts.version) {
console.log("3.1.6");
exit(0);
}
const configList = await readConfig();
if (
await checkLicense(configList, {
inject: opts.inject,
quiet: opts.quiet,
})
) {
exit(0);
} else {
exit(1);
}
};
main(
parse(args, {
boolean: ["quiet", "help", "version", "inject"],
alias: {
q: "quiet",
i: "inject",
h: "help",
v: "version",
},
// deno-lint-ignore no-explicit-any
}) as any,
);