-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathmain.ts
executable file
·131 lines (114 loc) · 2.75 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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
// Copyright 2020-2022 Yoshiya Hinosawa. All rights reserved. MIT license.
/**
* This module is the main entry point for the license checker tool.
*
* Create `.licenserc.json` like the following:
*
* ```json
* {
* "*.ts": "// Copyright 2019 My Name. All rights reserved. MIT license."
* }
* ```
*
* Then, run the command
*
* ```
* deno run --allow-read jsr:@kt3k/license-checker
* ```
*
* @module
*/
import { parse } from "./deps.ts";
import { checkLicense, type Config } from "./lib.ts";
/** Reads Config */
async function readConfig(
config = ".licenserc.json",
): Promise<Array<Config>> {
let text: string;
let configObj;
try {
if (
config.startsWith("http://") || config.startsWith("https://") ||
config.startsWith("file://")
) {
const resp = await fetch(config);
text = await resp.text();
} else {
text = await Deno.readTextFile(config);
}
console.log(`Using config file "${config}"`);
} catch (_e) {
console.log(_e);
console.log(`Error: config file "${config}" not found.`);
Deno.exit(1);
}
try {
configObj = JSON.parse(text);
} catch (e) {
console.log(`Error: Failed to parse "${config}" as JSON.`);
console.log(e);
Deno.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;
config?: string;
};
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'.
`);
Deno.exit(0);
}
if (opts.version) {
console.log("3.3.1");
Deno.exit(0);
}
const configList = await readConfig(opts.config);
if (
await checkLicense(configList, {
inject: opts.inject,
quiet: opts.quiet,
})
) {
Deno.exit(0);
} else {
Deno.exit(1);
}
};
main(
parse(Deno.args, {
string: ["config"],
boolean: ["quiet", "help", "version", "inject"],
alias: {
q: "quiet",
i: "inject",
h: "help",
v: "version",
c: "config",
},
}),
);