lscontests 1.7.2 → 1.8.1
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +101 -37
- package/dist/cli.d.ts +1 -1
- package/dist/cli.js +19 -16
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.js +15 -10
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
@@ -14,7 +14,7 @@ A tool to get information about the contests on each OJ.
|
|
14
14
|
|
15
15
|
### CLI
|
16
16
|
|
17
|
-
You can use cli to get a list of contests
|
17
|
+
You can use cli to get a list of information about upcoming contests easily.
|
18
18
|
|
19
19
|
```text
|
20
20
|
lsct [options]
|
@@ -33,56 +33,71 @@ Options:
|
|
33
33
|
It performs as follows:
|
34
34
|
|
35
35
|
<details>
|
36
|
-
<summary>
|
36
|
+
<summary> <code>> lsct -o at cf</code> </summary>
|
37
37
|
|
38
38
|
```text
|
39
|
-
在最近的 3 天内有
|
40
|
-
|
39
|
+
在最近的 3 天内有 3 场比赛
|
41
40
|
|
42
41
|
比赛平台: Codeforces
|
42
|
+
比赛名称: Educational Codeforces Round 128 (Rated for Div. 2)
|
43
43
|
赛制: ICPC
|
44
44
|
开始时间: 2022/5/13 22:35:00
|
45
45
|
结束时间: 2022/5/14 00:35:00
|
46
46
|
https://codeforces.com/contests/1680
|
47
47
|
|
48
|
-
|
49
|
-
|
50
|
-
赛制:
|
51
|
-
开始时间: 2022/5/14
|
52
|
-
结束时间: 2022/5/14
|
53
|
-
https://
|
48
|
+
比赛平台: Codeforces
|
49
|
+
比赛名称: Codeforces Round #791 (Div. 2)
|
50
|
+
赛制: Codeforces
|
51
|
+
开始时间: 2022/5/14 17:35:00
|
52
|
+
结束时间: 2022/5/14 19:35:00
|
53
|
+
https://codeforces.com/contests/1679
|
54
|
+
|
55
|
+
比赛平台: AtCoder
|
56
|
+
比赛名称: Ⓐ Panasonic Programming Contest 2022(AtCoder Beginner Contest 251)
|
57
|
+
赛制: AtCoder
|
58
|
+
开始时间: 2022/5/14 20:00:00
|
59
|
+
结束时间: 2022/5/14 20:01:40
|
60
|
+
https://atcoder.jp/contests/abc251
|
54
61
|
```
|
55
62
|
|
56
63
|
</details>
|
57
64
|
|
58
65
|
<details>
|
59
|
-
<summary>
|
66
|
+
<summary> <code>> lsct -o lg -d 7 -L en</code> </summary>
|
60
67
|
|
61
68
|
```text
|
62
|
-
2 contests in the last
|
63
|
-
|
64
|
-
|
65
|
-
OJ: Codeforces
|
66
|
-
Rule: ICPC
|
67
|
-
Start time: 2022/5/13 22:35:00
|
68
|
-
End time: 2022/5/14 00:35:00
|
69
|
-
https://codeforces.com/contests/1680
|
70
|
-
|
69
|
+
2 contests in the last 7 days
|
71
70
|
|
72
71
|
OJ: Luogu
|
72
|
+
Contest name: 【LGR-109】洛谷 5 月月赛 II & Windy Round 6
|
73
73
|
Rule: IOI
|
74
74
|
Start time: 2022/5/14 14:00:00
|
75
75
|
End time: 2022/5/14 18:00:00
|
76
76
|
https://www.luogu.com.cn/contest/68326
|
77
|
+
|
78
|
+
OJ: Luogu
|
79
|
+
Contest name: 「WHOI」Round 1
|
80
|
+
Rule: IOI
|
81
|
+
Start time: 2022/5/15 14:00:00
|
82
|
+
End time: 2022/5/15 18:00:00
|
83
|
+
https://www.luogu.com.cn/contest/67377
|
77
84
|
```
|
78
85
|
|
79
86
|
</details>
|
80
87
|
|
81
88
|
<details>
|
82
|
-
<summary>
|
89
|
+
<summary> <code>> lsct -r -o cf nc --no-sort</code> </summary>
|
83
90
|
|
84
91
|
```bash
|
85
92
|
[
|
93
|
+
{
|
94
|
+
ojName: 'Codeforces',
|
95
|
+
name: 'Codeforces Round #791 (Div. 2)',
|
96
|
+
rule: 'Codeforces',
|
97
|
+
startTime: 2022-05-14T09:35:00.000Z,
|
98
|
+
endTime: 2022-05-14T11:35:00.000Z,
|
99
|
+
url: 'https://codeforces.com/contests/1679'
|
100
|
+
},
|
86
101
|
{
|
87
102
|
ojName: 'Codeforces',
|
88
103
|
name: 'Educational Codeforces Round 128 (Rated for Div. 2)',
|
@@ -92,12 +107,20 @@ https://www.luogu.com.cn/contest/68326
|
|
92
107
|
url: 'https://codeforces.com/contests/1680'
|
93
108
|
},
|
94
109
|
{
|
95
|
-
ojName: '
|
96
|
-
name: '
|
97
|
-
rule: '
|
98
|
-
startTime: 2022-05-
|
110
|
+
ojName: 'NowCoder',
|
111
|
+
name: '牛客挑战赛60',
|
112
|
+
rule: 'ICPC',
|
113
|
+
startTime: 2022-05-13T11:00:00.000Z,
|
114
|
+
endTime: 2022-05-13T14:00:00.000Z,
|
115
|
+
url: 'https://ac.nowcoder.com/acm/contest/11200'
|
116
|
+
},
|
117
|
+
{
|
118
|
+
ojName: 'NowCoder',
|
119
|
+
name: '第十八届西南科技大学ACM程序设计竞赛(同步赛)',
|
120
|
+
rule: 'ICPC',
|
121
|
+
startTime: 2022-05-14T05:00:00.000Z,
|
99
122
|
endTime: 2022-05-14T10:00:00.000Z,
|
100
|
-
url: 'https://
|
123
|
+
url: 'https://ac.nowcoder.com/acm/contest/33540'
|
101
124
|
}
|
102
125
|
]
|
103
126
|
```
|
@@ -106,7 +129,7 @@ https://www.luogu.com.cn/contest/68326
|
|
106
129
|
|
107
130
|
### API
|
108
131
|
|
109
|
-
If you want to
|
132
|
+
If you want to get a list of contest information in your project by calling *lscontests*, or if you need to add support for other OJs, then you can call the *lscontests* API as follows:
|
110
133
|
|
111
134
|
#### Get contests information string
|
112
135
|
|
@@ -116,7 +139,7 @@ import { getContestInfo } from "lscontests";
|
|
116
139
|
getContestInfo({ abbrList: ["cf", "lg"] }).then(console.log);
|
117
140
|
```
|
118
141
|
|
119
|
-
|
142
|
+
This code gives the same result as `lsct -o cf lg`.
|
120
143
|
|
121
144
|
#### Get contests information list
|
122
145
|
|
@@ -126,42 +149,83 @@ import { getContestList } from "lscontests";
|
|
126
149
|
getContestList({ sort: false }).then(console.log);
|
127
150
|
```
|
128
151
|
|
129
|
-
|
152
|
+
This code gives the same result as `lsct -r --no-sort`.
|
130
153
|
|
131
154
|
#### Add OJ support
|
132
155
|
|
133
156
|
```typescript
|
134
|
-
import { addOJ, getContestList } from "lscontests";
|
157
|
+
import { addOJ, getContestInfo, getContestList } from "lscontests";
|
135
158
|
|
136
159
|
addOJ("ts", {
|
137
160
|
name: "testOJ", get: async () => [{
|
138
161
|
ojName: "testOJ",
|
139
162
|
name: "testContest",
|
140
163
|
rule: "ICPC",
|
141
|
-
startTime: new Date(Date.now() +
|
142
|
-
endTime: new Date(Date.now() +
|
164
|
+
startTime: new Date(Date.now() + 1 * 86400000),
|
165
|
+
endTime: new Date(Date.now() + 2 * 86400000),
|
143
166
|
url: "https://www.test.com"
|
144
167
|
}]
|
145
168
|
});
|
146
169
|
|
147
|
-
|
170
|
+
async function main() {
|
171
|
+
console.log(await getContestInfo({ abbrList: ["cf", "ts"], days: 1 }, "en"));
|
172
|
+
console.log();
|
173
|
+
console.log(await getContestList({ abbrList: ["cf", "ts"], days: 7 }));
|
174
|
+
}
|
175
|
+
|
176
|
+
main();
|
148
177
|
```
|
149
178
|
|
150
|
-
|
179
|
+
This code gives the following results:
|
180
|
+
|
181
|
+
```text
|
182
|
+
1 contests in the last 1 days
|
183
|
+
|
184
|
+
OJ: testOJ
|
185
|
+
Contest name: testContest
|
186
|
+
Rule: ICPC
|
187
|
+
Start time: 2022/5/12 22:54:43
|
188
|
+
End time: 2022/5/13 22:54:43
|
189
|
+
https://www.test.com
|
151
190
|
|
152
|
-
```bash
|
153
191
|
[
|
154
192
|
{
|
155
193
|
ojName: 'testOJ',
|
156
194
|
name: 'testContest',
|
157
195
|
rule: 'ICPC',
|
158
|
-
startTime: 2022-05-
|
159
|
-
endTime: 2022-05-
|
196
|
+
startTime: 2022-05-12T14:54:46.240Z,
|
197
|
+
endTime: 2022-05-13T14:54:46.240Z,
|
160
198
|
url: 'https://www.test.com'
|
199
|
+
},
|
200
|
+
{
|
201
|
+
ojName: 'Codeforces',
|
202
|
+
name: 'Educational Codeforces Round 128 (Rated for Div. 2)',
|
203
|
+
rule: 'ICPC',
|
204
|
+
startTime: 2022-05-13T14:35:00.000Z,
|
205
|
+
endTime: 2022-05-13T16:35:00.000Z,
|
206
|
+
url: 'https://codeforces.com/contests/1680'
|
207
|
+
},
|
208
|
+
{
|
209
|
+
ojName: 'Codeforces',
|
210
|
+
name: 'Codeforces Round #791 (Div. 2)',
|
211
|
+
rule: 'Codeforces',
|
212
|
+
startTime: 2022-05-14T09:35:00.000Z,
|
213
|
+
endTime: 2022-05-14T11:35:00.000Z,
|
214
|
+
url: 'https://codeforces.com/contests/1679'
|
161
215
|
}
|
162
216
|
]
|
163
217
|
```
|
164
218
|
|
219
|
+
#### Use link CLI
|
220
|
+
|
221
|
+
```typescript
|
222
|
+
import { cli } from "lscontests";
|
223
|
+
|
224
|
+
cli("-o cf -L en").then(console.log);
|
225
|
+
```
|
226
|
+
|
227
|
+
This code gives the same result as `lsct -o cf -L en`.
|
228
|
+
|
165
229
|
## License
|
166
230
|
|
167
231
|
[GPL-3.0](https://www.gnu.org/licenses/gpl-3.0.html)
|
package/dist/cli.d.ts
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
#!/usr/bin/env node
|
2
|
-
export
|
2
|
+
export declare function cli(arg?: string, name?: string): Promise<string>;
|
package/dist/cli.js
CHANGED
@@ -10,25 +10,26 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
10
10
|
});
|
11
11
|
};
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
13
|
+
exports.cli = void 0;
|
13
14
|
const package_json_1 = require("../package.json");
|
14
15
|
const commander_1 = require("commander");
|
15
16
|
const oj_1 = require("./lib/oj");
|
16
17
|
const _1 = require(".");
|
17
|
-
|
18
|
-
.name("lsct")
|
19
|
-
.version(package_json_1.version)
|
20
|
-
.option("-d, --days, <day>", "Number of days to get contests information", "3")
|
21
|
-
.option("-l, --list", "List all supported OJ")
|
22
|
-
.addOption(new commander_1.Option("-o, --oj <ojs...>", "OJs to get contests information").choices(Object.keys(oj_1.alloj)))
|
23
|
-
.addOption(new commander_1.Option("-r, --raw", "Print raw contest list").conflicts("language"))
|
24
|
-
.addOption(new commander_1.Option("-L, --language <lang>", "Set output language").default("zh-CN").choices(_1.langList))
|
25
|
-
.option("--no-sort", "Do not sort by contests start time, but by OJ order")
|
26
|
-
.parse();
|
27
|
-
const opts = commander_1.program.opts();
|
28
|
-
function main() {
|
18
|
+
function cli(arg, name) {
|
29
19
|
return __awaiter(this, void 0, void 0, function* () {
|
20
|
+
commander_1.program
|
21
|
+
.name(name ? name : "lsct")
|
22
|
+
.version(package_json_1.version)
|
23
|
+
.option("-d, --days, <day>", "Number of days to get contests information", "3")
|
24
|
+
.option("-l, --list", "List all supported OJ")
|
25
|
+
.addOption(new commander_1.Option("-o, --oj <ojs...>", "OJs to get contests information").choices(Object.keys(oj_1.alloj)))
|
26
|
+
.addOption(new commander_1.Option("-r, --raw", "Print raw contest list").conflicts("language"))
|
27
|
+
.addOption(new commander_1.Option("-L, --language <lang>", "Set output language").default("zh-CN").choices(_1.langList))
|
28
|
+
.option("--no-sort", "Do not sort by contests start time, but by OJ order")
|
29
|
+
.parse(arg ? [...process.argv.slice(0, 2), ...arg.split(" ")] : process.argv);
|
30
|
+
const opts = commander_1.program.opts();
|
30
31
|
if (opts.list)
|
31
|
-
|
32
|
+
return Object.values(oj_1.alloj).map((oj) => oj.name).join("\n");
|
32
33
|
else {
|
33
34
|
const config = {
|
34
35
|
abbrList: opts.oj,
|
@@ -36,11 +37,13 @@ function main() {
|
|
36
37
|
sort: opts.sort
|
37
38
|
};
|
38
39
|
if (opts.raw)
|
39
|
-
|
40
|
+
return (yield (0, _1.getContestList)(config)).join("\n");
|
40
41
|
else
|
41
|
-
|
42
|
+
return yield (0, _1.getContestInfo)(config, opts.language);
|
42
43
|
}
|
43
44
|
});
|
44
45
|
}
|
45
|
-
|
46
|
+
exports.cli = cli;
|
47
|
+
if (require.main === module)
|
48
|
+
cli().then(console.log);
|
46
49
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;;;;;;;;AACA,kDAA0C;AAC1C,yCAA4C;AAC5C,iCAAiC;AACjC,wBAAqE;AAErE,SAAsB,GAAG,CAAC,GAAY,EAAE,IAAa;;QACjD,mBAAO;aACF,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;aAC1B,OAAO,CAAC,sBAAO,CAAC;aAChB,MAAM,CAAC,mBAAmB,EAAE,4CAA4C,EAAE,GAAG,CAAC;aAC9E,MAAM,CAAC,YAAY,EAAE,uBAAuB,CAAC;aAC7C,SAAS,CAAC,IAAI,kBAAM,CAAC,mBAAmB,EAAE,iCAAiC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,UAAK,CAAC,CAAC,CAAC;aACzG,SAAS,CAAC,IAAI,kBAAM,CAAC,WAAW,EAAE,wBAAwB,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;aAClF,SAAS,CAAC,IAAI,kBAAM,CAAC,uBAAuB,EAAE,qBAAqB,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,WAAQ,CAAC,CAAC;aACxG,MAAM,CAAC,WAAW,EAAE,qDAAqD,CAAC;aAC1E,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAElF,MAAM,IAAI,GAAG,mBAAO,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,IAAI;YAAE,OAAO,MAAM,CAAC,MAAM,CAAC,UAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACtE;YACD,MAAM,MAAM,GAAW;gBACnB,QAAQ,EAAE,IAAI,CAAC,EAAE;gBACjB,IAAI,EAAE,IAAI,CAAC,IAAc;gBACzB,IAAI,EAAE,IAAI,CAAC,IAAI;aAClB,CAAC;YACF,IAAI,IAAI,CAAC,GAAG;gBAAE,OAAO,CAAC,MAAM,IAAA,iBAAc,EAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;gBAC1D,OAAO,MAAM,IAAA,iBAAc,EAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;SAC3D;IACL,CAAC;CAAA;AAvBD,kBAuBC;AAED,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM;IAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC"}
|
package/dist/index.d.ts
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
import { addOJ } from "./lib/oj";
|
2
1
|
export declare type config = {
|
3
2
|
abbrList?: string[];
|
4
3
|
days?: number;
|
5
4
|
sort?: boolean;
|
6
5
|
};
|
7
|
-
declare function getContestList(config?: config): Promise<import("./lib/contest").contest[]>;
|
6
|
+
export declare function getContestList(config?: config): Promise<import("./lib/contest").contest[]>;
|
8
7
|
export declare const langList: string[];
|
9
|
-
declare function getContestInfo(config?: config, language?: string): Promise<string>;
|
10
|
-
export {
|
8
|
+
export declare function getContestInfo(config?: config, language?: string): Promise<string>;
|
9
|
+
export { cli } from "./cli";
|
10
|
+
export { addOJ } from "./lib/oj";
|
package/dist/index.js
CHANGED
@@ -32,10 +32,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
32
32
|
});
|
33
33
|
};
|
34
34
|
Object.defineProperty(exports, "__esModule", { value: true });
|
35
|
-
exports.
|
35
|
+
exports.addOJ = exports.cli = exports.getContestInfo = exports.langList = exports.getContestList = void 0;
|
36
36
|
const fs_1 = require("fs");
|
37
37
|
const oj_1 = require("./lib/oj");
|
38
|
-
Object.defineProperty(exports, "addOJ", { enumerable: true, get: function () { return oj_1.addOJ; } });
|
39
38
|
const defaultConfig = {
|
40
39
|
abbrList: Object.keys(oj_1.alloj),
|
41
40
|
days: 3,
|
@@ -78,16 +77,22 @@ function getContestInfo(config, language = "zh-CN") {
|
|
78
77
|
const info = [];
|
79
78
|
const lang = yield Promise.resolve().then(() => __importStar(require(`./locale/${language}.json`)));
|
80
79
|
info.push(format(lang.welcome, cfg.days.toString(), contests.length.toString()));
|
81
|
-
for (const
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
80
|
+
for (const contest of contests) {
|
81
|
+
const ct = [];
|
82
|
+
ct.push(`${lang.ojName}: ${contest.ojName}`);
|
83
|
+
ct.push(`${lang.name}: ${contest.name}`);
|
84
|
+
ct.push(`${lang.rule}: ${contest.rule}`);
|
85
|
+
ct.push(`${lang.startTime}: ${contest.startTime.toLocaleString()}`);
|
86
|
+
ct.push(`${lang.endTime}: ${contest.endTime.toLocaleString()}`);
|
87
|
+
ct.push(contest.url);
|
88
|
+
info.push(ct.join("\n"));
|
88
89
|
}
|
89
|
-
return info.join("\n");
|
90
|
+
return info.join("\n\n");
|
90
91
|
});
|
91
92
|
}
|
92
93
|
exports.getContestInfo = getContestInfo;
|
94
|
+
var cli_1 = require("./cli");
|
95
|
+
Object.defineProperty(exports, "cli", { enumerable: true, get: function () { return cli_1.cli; } });
|
96
|
+
var oj_2 = require("./lib/oj");
|
97
|
+
Object.defineProperty(exports, "addOJ", { enumerable: true, get: function () { return oj_2.addOJ; } });
|
93
98
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2BAAiC;AACjC,
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|