lscontests 1.10.0 → 1.10.3
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +44 -179
- package/dist/index.d.ts +2 -2
- package/dist/index.js +18 -23
- package/dist/index.js.map +1 -1
- package/dist/lib/oj/atcoder.js +1 -1
- package/dist/lib/oj/atcoder.js.map +1 -1
- package/dist/lib/oj/index.js +6 -0
- package/dist/lib/oj/index.js.map +1 -1
- package/dist/locale/en.json +2 -2
- package/dist/locale/zh-CN.json +2 -2
- package/dist/locale/zh-NE.json +3 -3
- package/dist/locale/zh-TW.json +2 -2
- package/package.json +4 -2
package/README.md
CHANGED
@@ -10,6 +10,8 @@
|
|
10
10
|
|
11
11
|
A tool to get information about the contests on each OJ.
|
12
12
|
|
13
|
+
[中文文档](./README-zh-CN.md)
|
14
|
+
|
13
15
|
## Installation
|
14
16
|
|
15
17
|
### Only use CLI
|
@@ -18,7 +20,7 @@ For npm: `npm install -g lscontests`
|
|
18
20
|
|
19
21
|
For yarn: `yarn global add lscontests`
|
20
22
|
|
21
|
-
### Add to your
|
23
|
+
### Add *lscontests* to your project
|
22
24
|
|
23
25
|
For npm: `npm install lscontests --save`
|
24
26
|
|
@@ -28,7 +30,7 @@ For yarn: `yarn add lscontests`
|
|
28
30
|
|
29
31
|
### CLI
|
30
32
|
|
31
|
-
You can use cli to get a list of information about
|
33
|
+
You can use cli to get a list of information about contests easily.
|
32
34
|
|
33
35
|
<!-- block_help begin -->
|
34
36
|
```text
|
@@ -50,140 +52,13 @@ Options:
|
|
50
52
|
It performs as follows:
|
51
53
|
|
52
54
|
<!-- block_cli begin -->
|
53
|
-
(*The following content was automatically generated in Sat, 14 May 2022
|
54
|
-
|
55
|
-
<details>
|
56
|
-
<summary> <code>> lsct </code> </summary>
|
57
|
-
|
58
|
-
```text
|
59
|
-
在 AtCoder,Codeforces,LeetCode,Luogu,NowCoder 上有 2 场正在进行的比赛
|
60
|
-
|
61
|
-
比赛平台: NowCoder
|
62
|
-
比赛名称:牛客竞赛博弈专题班 Sprague-Grundy 函数(SG 函数、图游戏、Nim 和)
|
63
|
-
赛制: ICPC
|
64
|
-
开始时间: 5/13/2022, 04:00:00
|
65
|
-
结束时间: 5/21/2022, 13:00:00
|
66
|
-
https://ac.nowcoder.com/acm/contest/34655
|
67
|
-
|
68
|
-
比赛平台: NowCoder
|
69
|
-
比赛名称: 2022 图论班第一章图匹配例题与习题
|
70
|
-
赛制: ICPC
|
71
|
-
开始时间: 5/13/2022, 06:00:00
|
72
|
-
结束时间: 5/30/2022, 08:00:00
|
73
|
-
https://ac.nowcoder.com/acm/contest/34649
|
74
|
-
|
75
|
-
接下来的 3 天内在 AtCoder,Codeforces,LeetCode,Luogu,NowCoder 上有 10 场比赛
|
76
|
-
|
77
|
-
比赛平台: NowCoder
|
78
|
-
比赛名称:第二届天元编程邀请赛(提高组)
|
79
|
-
赛制: IOI
|
80
|
-
开始时间: 5/14/2022, 04:30:00
|
81
|
-
结束时间: 5/14/2022, 09:00:00
|
82
|
-
https://ac.nowcoder.com/acm/contest/33335
|
83
|
-
|
84
|
-
比赛平台: NowCoder
|
85
|
-
比赛名称:第二届天元编程邀请赛(普及组)
|
86
|
-
赛制: IOI
|
87
|
-
开始时间: 5/14/2022, 04:30:00
|
88
|
-
结束时间: 5/14/2022, 08:00:00
|
89
|
-
https://ac.nowcoder.com/acm/contest/33341
|
90
|
-
|
91
|
-
比赛平台: NowCoder
|
92
|
-
比赛名称:第十八届西南科技大学 ACM 程序设计竞赛(同步赛)
|
93
|
-
赛制: ICPC
|
94
|
-
开始时间: 5/14/2022, 05:00:00
|
95
|
-
结束时间: 5/14/2022, 10:00:00
|
96
|
-
https://ac.nowcoder.com/acm/contest/33540
|
97
|
-
|
98
|
-
比赛平台: Luogu
|
99
|
-
比赛名称: 【LGR-109】洛谷 5 月月赛 II & Windy Round 6
|
100
|
-
赛制: IOI
|
101
|
-
开始时间: 5/14/2022, 06:00:00
|
102
|
-
结束时间: 5/14/2022, 10:00:00
|
103
|
-
https://www.luogu.com.cn/contest/68326
|
104
|
-
|
105
|
-
比赛平台: Codeforces
|
106
|
-
比赛名称: Codeforces Round #791 (Div. 2)
|
107
|
-
赛制: Codeforces
|
108
|
-
开始时间: 5/14/2022, 09:35:00
|
109
|
-
结束时间: 5/14/2022, 11:35:00
|
110
|
-
https://codeforces.com/contests/1679
|
111
|
-
|
112
|
-
比赛平台: AtCoder
|
113
|
-
比赛名称: Ⓐ Panasonic Programming Contest 2022 (AtCoder Beginner Contest 251)
|
114
|
-
赛制: AtCoder
|
115
|
-
开始时间: 5/14/2022, 12:00:00
|
116
|
-
结束时间: 5/14/2022, 13:40:00
|
117
|
-
https://atcoder.jp/contests/abc251
|
118
|
-
|
119
|
-
比赛平台: LeetCode
|
120
|
-
比赛名称: Biweekly Contest 78
|
121
|
-
赛制: AtCoder
|
122
|
-
开始时间: 5/14/2022, 14:30:00
|
123
|
-
结束时间: 5/14/2022, 16:00:00
|
124
|
-
https://leetcode.com/contest/biweekly-contest-78
|
125
|
-
|
126
|
-
比赛平台: LeetCode
|
127
|
-
比赛名称: Weekly Contest 293
|
128
|
-
赛制: AtCoder
|
129
|
-
开始时间: 5/15/2022, 02:30:00
|
130
|
-
结束时间: 5/15/2022, 04:00:00
|
131
|
-
https://leetcode.com/contest/weekly-contest-293
|
132
|
-
|
133
|
-
比赛平台: Luogu
|
134
|
-
比赛名称: 「WHOI」Round 1
|
135
|
-
赛制: IOI
|
136
|
-
开始时间: 5/15/2022, 06:00:00
|
137
|
-
结束时间: 5/15/2022, 10:00:00
|
138
|
-
https://www.luogu.com.cn/contest/67377
|
139
|
-
|
140
|
-
比赛平台: AtCoder
|
141
|
-
比赛名称: Ⓐ AtCoder Regular Contest 140
|
142
|
-
赛制: AtCoder
|
143
|
-
开始时间: 5/15/2022, 12:00:00
|
144
|
-
结束时间: 5/15/2022, 14:00:00
|
145
|
-
https://atcoder.jp/contests/arc140
|
146
|
-
```
|
147
|
-
|
148
|
-
</details>
|
149
|
-
|
150
|
-
<details>
|
151
|
-
<summary> <code>> lsct -o at cf -d 7</code> </summary>
|
152
|
-
|
153
|
-
```text
|
154
|
-
在 AtCoder,Codeforces 上没有正在进行的比赛捏
|
155
|
-
|
156
|
-
接下来的 7 天内在 AtCoder,Codeforces 上有 3 场比赛
|
157
|
-
|
158
|
-
比赛平台: Codeforces
|
159
|
-
比赛名称: Codeforces Round #791 (Div. 2)
|
160
|
-
赛制: Codeforces
|
161
|
-
开始时间: 5/14/2022, 09:35:00
|
162
|
-
结束时间: 5/14/2022, 11:35:00
|
163
|
-
https://codeforces.com/contests/1679
|
164
|
-
|
165
|
-
比赛平台: AtCoder
|
166
|
-
比赛名称: Ⓐ Panasonic Programming Contest 2022 (AtCoder Beginner Contest 251)
|
167
|
-
赛制: AtCoder
|
168
|
-
开始时间: 5/14/2022, 12:00:00
|
169
|
-
结束时间: 5/14/2022, 13:40:00
|
170
|
-
https://atcoder.jp/contests/abc251
|
171
|
-
|
172
|
-
比赛平台: AtCoder
|
173
|
-
比赛名称: Ⓐ AtCoder Regular Contest 140
|
174
|
-
赛制: AtCoder
|
175
|
-
开始时间: 5/15/2022, 12:00:00
|
176
|
-
结束时间: 5/15/2022, 14:00:00
|
177
|
-
https://atcoder.jp/contests/arc140
|
178
|
-
```
|
179
|
-
|
180
|
-
</details>
|
55
|
+
(*The following content was automatically generated by [semantic-release](https://github.com/semantic-release/semantic-release) in Sat, 14 May 2022 16:37:24 GMT*)
|
181
56
|
|
182
57
|
<details>
|
183
|
-
<summary> <code>> lsct -
|
58
|
+
<summary> <code>> lsct -L en</code> </summary>
|
184
59
|
|
185
60
|
```text
|
186
|
-
There are 2 contests is running on
|
61
|
+
There are 2 contests is running on NowCoder
|
187
62
|
|
188
63
|
OJ: NowCoder
|
189
64
|
Contest name: 牛客竞赛博弈专题班 Sprague-Grundy 函数(SG 函数、图游戏、Nim 和)
|
@@ -199,35 +74,14 @@ Start time: 5/13/2022, 06:00:00
|
|
199
74
|
End time: 5/30/2022, 08:00:00
|
200
75
|
https://ac.nowcoder.com/acm/contest/34649
|
201
76
|
|
202
|
-
There are
|
77
|
+
There are 3 contests on LeetCode,Luogu,AtCoder in the next 3 days
|
203
78
|
|
204
|
-
OJ:
|
205
|
-
Contest name:
|
206
|
-
Rule:
|
207
|
-
Start time: 5/
|
208
|
-
End time: 5/
|
209
|
-
https://
|
210
|
-
|
211
|
-
OJ: NowCoder
|
212
|
-
Contest name: 第二届天元编程邀请赛(普及组)
|
213
|
-
Rule: IOI
|
214
|
-
Start time: 5/14/2022, 04:30:00
|
215
|
-
End time: 5/14/2022, 08:00:00
|
216
|
-
https://ac.nowcoder.com/acm/contest/33341
|
217
|
-
|
218
|
-
OJ: NowCoder
|
219
|
-
Contest name: 第十八届西南科技大学 ACM 程序设计竞赛(同步赛)
|
220
|
-
Rule: ICPC
|
221
|
-
Start time: 5/14/2022, 05:00:00
|
222
|
-
End time: 5/14/2022, 10:00:00
|
223
|
-
https://ac.nowcoder.com/acm/contest/33540
|
224
|
-
|
225
|
-
OJ: Luogu
|
226
|
-
Contest name: 【LGR-109】洛谷 5 月月赛 II & Windy Round 6
|
227
|
-
Rule: IOI
|
228
|
-
Start time: 5/14/2022, 06:00:00
|
229
|
-
End time: 5/14/2022, 10:00:00
|
230
|
-
https://www.luogu.com.cn/contest/68326
|
79
|
+
OJ: LeetCode
|
80
|
+
Contest name: Weekly Contest 293
|
81
|
+
Rule: AtCoder
|
82
|
+
Start time: 5/15/2022, 02:30:00
|
83
|
+
End time: 5/15/2022, 04:00:00
|
84
|
+
https://leetcode.com/contest/weekly-contest-293
|
231
85
|
|
232
86
|
OJ: Luogu
|
233
87
|
Contest name: 「WHOI」Round 1
|
@@ -235,6 +89,31 @@ Rule: IOI
|
|
235
89
|
Start time: 5/15/2022, 06:00:00
|
236
90
|
End time: 5/15/2022, 10:00:00
|
237
91
|
https://www.luogu.com.cn/contest/67377
|
92
|
+
|
93
|
+
OJ: AtCoder
|
94
|
+
Contest name: Ⓐ AtCoder Regular Contest 140
|
95
|
+
Rule: AtCoder
|
96
|
+
Start time: 5/15/2022, 12:00:00
|
97
|
+
End time: 5/15/2022, 14:00:00
|
98
|
+
https://atcoder.jp/contests/arc140
|
99
|
+
```
|
100
|
+
|
101
|
+
</details>
|
102
|
+
|
103
|
+
<details>
|
104
|
+
<summary> <code>> lsct -o at cf -d 7 -L en</code> </summary>
|
105
|
+
|
106
|
+
```text
|
107
|
+
No running contests
|
108
|
+
|
109
|
+
There are 1 contests on AtCoder in the next 7 days
|
110
|
+
|
111
|
+
OJ: AtCoder
|
112
|
+
Contest name: Ⓐ AtCoder Regular Contest 140
|
113
|
+
Rule: AtCoder
|
114
|
+
Start time: 5/15/2022, 12:00:00
|
115
|
+
End time: 5/15/2022, 14:00:00
|
116
|
+
https://atcoder.jp/contests/arc140
|
238
117
|
```
|
239
118
|
|
240
119
|
</details>
|
@@ -246,14 +125,6 @@ https://www.luogu.com.cn/contest/67377
|
|
246
125
|
{
|
247
126
|
"running": [],
|
248
127
|
"upcoming": [
|
249
|
-
{
|
250
|
-
"ojName": "AtCoder",
|
251
|
-
"name": "Ⓐ Panasonic Programming Contest 2022(AtCoder Beginner Contest 251)",
|
252
|
-
"rule": "AtCoder",
|
253
|
-
"startTime": "2022-05-14T12:00:00.000Z",
|
254
|
-
"endTime": "2022-05-14T13:40:00.000Z",
|
255
|
-
"url": "https://atcoder.jp/contests/abc251"
|
256
|
-
},
|
257
128
|
{
|
258
129
|
"ojName": "AtCoder",
|
259
130
|
"name": "Ⓐ AtCoder Regular Contest 140",
|
@@ -261,14 +132,6 @@ https://www.luogu.com.cn/contest/67377
|
|
261
132
|
"startTime": "2022-05-15T12:00:00.000Z",
|
262
133
|
"endTime": "2022-05-15T14:00:00.000Z",
|
263
134
|
"url": "https://atcoder.jp/contests/arc140"
|
264
|
-
},
|
265
|
-
{
|
266
|
-
"ojName": "Codeforces",
|
267
|
-
"name": "Codeforces Round #791 (Div. 2)",
|
268
|
-
"rule": "Codeforces",
|
269
|
-
"startTime": "2022-05-14T09:35:00.000Z",
|
270
|
-
"endTime": "2022-05-14T11:35:00.000Z",
|
271
|
-
"url": "https://codeforces.com/contests/1679"
|
272
135
|
}
|
273
136
|
]
|
274
137
|
}
|
@@ -279,9 +142,11 @@ https://www.luogu.com.cn/contest/67377
|
|
279
142
|
|
280
143
|
### API
|
281
144
|
|
145
|
+
For more detailed API documentation, please visit <https://lsct.agoh.xyz>.
|
146
|
+
|
282
147
|
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:
|
283
148
|
|
284
|
-
#### Get contests information
|
149
|
+
#### Get text for contests information
|
285
150
|
|
286
151
|
```typescript
|
287
152
|
import { getContestInfo } from "lscontests";
|
@@ -291,7 +156,7 @@ getContestsInfoText({ abbrList: ["cf", "lg"] }).then(console.log);
|
|
291
156
|
|
292
157
|
This code gives the same result as `lsct -o cf lg`.
|
293
158
|
|
294
|
-
#### Get contests information
|
159
|
+
#### Get list for contests information
|
295
160
|
|
296
161
|
```typescript
|
297
162
|
import { getContestList } from "lscontests";
|
@@ -301,7 +166,7 @@ getContests({ sort: false }).then(console.log);
|
|
301
166
|
|
302
167
|
This code gives the same result as `lsct -r --no-sort`.
|
303
168
|
|
304
|
-
#### Add OJ
|
169
|
+
#### Add support for other OJ
|
305
170
|
|
306
171
|
```typescript
|
307
172
|
import { addOJ, getContestsInfoText, getContests } from "lscontests";
|
package/dist/index.d.ts
CHANGED
@@ -6,7 +6,7 @@ export declare type config = {
|
|
6
6
|
};
|
7
7
|
/**
|
8
8
|
* Get the list of all contests matching the given config
|
9
|
-
* @param config The config of contests that want to get
|
9
|
+
* @param config The config of contests that want to get
|
10
10
|
* @returns A Promise that contains an array of all contests that match the given config
|
11
11
|
*/
|
12
12
|
export declare function getContests(config?: config): Promise<{
|
@@ -15,7 +15,7 @@ export declare function getContests(config?: config): Promise<{
|
|
15
15
|
}>;
|
16
16
|
/**
|
17
17
|
* Get the detailed text of all contests matching the given config
|
18
|
-
* @param config The config of contests that want to get
|
18
|
+
* @param config The config of contests that want to get
|
19
19
|
* @param language Language of the output text
|
20
20
|
* @returns A string containing detail text of contests that match the given config
|
21
21
|
*/
|
package/dist/index.js
CHANGED
@@ -30,29 +30,25 @@ function resolveConfig(config) {
|
|
30
30
|
}
|
31
31
|
/**
|
32
32
|
* Get the list of all contests matching the given config
|
33
|
-
* @param config The config of contests that want to get
|
33
|
+
* @param config The config of contests that want to get
|
34
34
|
* @returns A Promise that contains an array of all contests that match the given config
|
35
35
|
*/
|
36
36
|
function getContests(config) {
|
37
37
|
return __awaiter(this, void 0, void 0, function* () {
|
38
38
|
const cfg = resolveConfig(config);
|
39
|
-
function
|
40
|
-
|
41
|
-
return
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
}
|
50
|
-
})))).reduce((ls1, ls2) => ls1.concat(ls2));
|
51
|
-
});
|
52
|
-
}
|
39
|
+
const contests = (yield Promise.all(cfg.abbrList.map((abbr) => __awaiter(this, void 0, void 0, function* () {
|
40
|
+
try {
|
41
|
+
return yield oj_1.alloj[abbr].get();
|
42
|
+
}
|
43
|
+
catch (e) {
|
44
|
+
console.error(`Failed to get contest information for ${oj_1.alloj[abbr].name}, details:`);
|
45
|
+
console.error(e);
|
46
|
+
return [];
|
47
|
+
}
|
48
|
+
})))).reduce((ls1, ls2) => ls1.concat(ls2));
|
53
49
|
const ret = {
|
54
|
-
running:
|
55
|
-
upcoming:
|
50
|
+
running: contests.filter(ct => ct.startTime <= new Date() && ct.endTime > new Date()),
|
51
|
+
upcoming: contests.filter(ct => ct.startTime > new Date() && ct.startTime <= new Date(Date.now() + cfg.days * 86400000))
|
56
52
|
};
|
57
53
|
if (cfg.sort)
|
58
54
|
Object.values(ret).forEach(ct => ct.sort((a, b) => a.startTime.getTime() - b.startTime.getTime()));
|
@@ -62,7 +58,7 @@ function getContests(config) {
|
|
62
58
|
exports.getContests = getContests;
|
63
59
|
/**
|
64
60
|
* Get the detailed text of all contests matching the given config
|
65
|
-
* @param config The config of contests that want to get
|
61
|
+
* @param config The config of contests that want to get
|
66
62
|
* @param language Language of the output text
|
67
63
|
* @returns A string containing detail text of contests that match the given config
|
68
64
|
*/
|
@@ -72,7 +68,6 @@ function getContestsInfoText(config, language = "zh-CN") {
|
|
72
68
|
const lang = yield (0, locale_1.getLangDict)(language);
|
73
69
|
const { running, upcoming } = yield getContests(cfg);
|
74
70
|
const info = [];
|
75
|
-
const oj = cfg.abbrList.map(abbr => oj_1.alloj[abbr].name).join(",");
|
76
71
|
function msg(contests) {
|
77
72
|
return contests.map(contest => {
|
78
73
|
const ls = [];
|
@@ -88,22 +83,22 @@ function getContestsInfoText(config, language = "zh-CN") {
|
|
88
83
|
if (running.length) {
|
89
84
|
info.push(lodash_1.default.template(lang.runnning)({
|
90
85
|
contestCount: running.length,
|
91
|
-
oj
|
86
|
+
oj: lodash_1.default.uniq(running.map(contest => contest.ojName))
|
92
87
|
}));
|
93
88
|
info.push(...msg(running));
|
94
89
|
}
|
95
90
|
else
|
96
|
-
info.push(
|
91
|
+
info.push(lang.norunning);
|
97
92
|
if (upcoming.length) {
|
98
93
|
info.push(lodash_1.default.template(lang.upcoming)({
|
99
94
|
contestCount: upcoming.length,
|
100
95
|
days: cfg.days,
|
101
|
-
oj
|
96
|
+
oj: lodash_1.default.uniq(upcoming.map(contest => contest.ojName))
|
102
97
|
}));
|
103
98
|
info.push(...msg(upcoming));
|
104
99
|
}
|
105
100
|
else
|
106
|
-
info.push(lodash_1.default.template(lang.noupcoming)({ days: cfg.days
|
101
|
+
info.push(lodash_1.default.template(lang.noupcoming)({ days: cfg.days }));
|
107
102
|
return pangu_1.default.spacing(info.join("\n\n"));
|
108
103
|
});
|
109
104
|
}
|
package/dist/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,iCAAiC;AACjC,qCAAuC;AAEvC,oDAAuB;AACvB,kDAA0B;AAQ1B,MAAM,aAAa,GAAG;IAClB,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,UAAK,CAAC;IAC5B,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,IAAI;CACb,CAAC;AAEF,SAAS,aAAa,CAAC,MAAe;IAElC,MAAM,GAAG,mCAAQ,aAAa,GAAK,MAAM,CAAE,CAAC;IAC5C,IAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC;QAAE,GAAG,CAAC,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC;IACnE,OAAO,GAAG,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,SAAsB,WAAW,CAAC,MAAe;;QAE7C,MAAM,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;QAClC,
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/oj/atcoder.js
CHANGED
@@ -44,7 +44,7 @@ exports.at = {
|
|
44
44
|
const response = yield axios_1.default.get("https://atcoder.jp/contests");
|
45
45
|
const $ = cheerio.load(response.data);
|
46
46
|
const contests = [];
|
47
|
-
$("#contest-table-upcoming table > tbody > tr").each(function () {
|
47
|
+
$("#contest-table-upcoming,#contest-table-action table > tbody > tr").each(function () {
|
48
48
|
const ct = {
|
49
49
|
ojName: exports.at.name,
|
50
50
|
name: "",
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"atcoder.js","sourceRoot":"","sources":["../../../src/lib/oj/atcoder.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAA0B;AAC1B,iDAAmC;AAItB,QAAA,EAAE,GAAO;IAClB,IAAI,EAAE,SAAS;IACf,GAAG,EAAE,GAAS,EAAE;QAEZ,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QAChE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,QAAQ,GAAc,EAAE,CAAC;QAC/B,CAAC,CAAC,
|
1
|
+
{"version":3,"file":"atcoder.js","sourceRoot":"","sources":["../../../src/lib/oj/atcoder.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAA0B;AAC1B,iDAAmC;AAItB,QAAA,EAAE,GAAO;IAClB,IAAI,EAAE,SAAS;IACf,GAAG,EAAE,GAAS,EAAE;QAEZ,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QAChE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,QAAQ,GAAc,EAAE,CAAC;QAC/B,CAAC,CAAC,kEAAkE,CAAC,CAAC,IAAI,CAAC;YAEvE,MAAM,EAAE,GAAY;gBAChB,MAAM,EAAE,UAAE,CAAC,IAAI;gBACf,IAAI,EAAE,EAAE;gBACR,IAAI,EAAE,SAAS;gBACf,SAAS,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC;gBACtB,OAAO,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC;gBACpB,GAAG,EAAE,EAAE;aACV,CAAC;YACF,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,GAAG;gBAE5B,IAAG,GAAG,IAAI,CAAC;oBAAE,EAAE,CAAC,SAAS,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;qBAChD,IAAG,GAAG,IAAI,CAAC,EAChB;oBACI,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;oBACzB,EAAE,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;oBAC1D,EAAE,CAAC,GAAG,GAAG,qBAAqB,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;iBACnD;qBACI,IAAG,GAAG,IAAI,CAAC,EAChB;oBACI,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBACzC,EAAE,CAAC,OAAO,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;iBAChG;YACL,CAAC,CAAC,CAAC;YACH,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC;IACpB,CAAC,CAAA;CACJ,CAAC"}
|
package/dist/lib/oj/index.js
CHANGED
@@ -1,11 +1,17 @@
|
|
1
1
|
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
6
|
exports.addOJ = exports.alloj = void 0;
|
7
|
+
const axios_1 = __importDefault(require("axios"));
|
8
|
+
const axios_retry_1 = __importDefault(require("axios-retry"));
|
4
9
|
const atcoder_1 = require("./atcoder");
|
5
10
|
const codeforces_1 = require("./codeforces");
|
6
11
|
const leetcode_1 = require("./leetcode");
|
7
12
|
const luogu_1 = require("./luogu");
|
8
13
|
const nowcoder_1 = require("./nowcoder");
|
14
|
+
(0, axios_retry_1.default)(axios_1.default, { retries: 3, retryDelay: (retryCount) => retryCount * 1000 });
|
9
15
|
exports.alloj = {
|
10
16
|
at: atcoder_1.at,
|
11
17
|
cf: codeforces_1.cf,
|
package/dist/lib/oj/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/oj/index.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/oj/index.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,8DAAqC;AAErC,uCAA+B;AAC/B,6CAAkC;AAClC,yCAAgC;AAChC,mCAA6B;AAC7B,yCAAgC;AAEhC,IAAA,qBAAU,EAAC,eAAK,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,IAAI,EAAE,CAAC,CAAC;AAOpE,QAAA,KAAK,GAA4B;IAC1C,EAAE,EAAF,YAAE;IACF,EAAE,EAAF,eAAE;IACF,EAAE,EAAF,aAAE;IACF,EAAE,EAAF,UAAE;IACF,EAAE,EAAF,aAAE;CACL,CAAC;AAEF;;;;GAIG;AACH,SAAgB,KAAK,CAAC,IAAY,EAAE,EAAM;IAEtC,aAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;AACrB,CAAC;AAHD,sBAGC"}
|
package/dist/locale/en.json
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
{
|
2
2
|
"runnning": "There are ${contestCount} contests is running on ${oj}",
|
3
|
-
"norunning": "No
|
3
|
+
"norunning": "No running contests",
|
4
4
|
"upcoming": "There are ${contestCount} contests on ${oj} in the next ${days} days",
|
5
|
-
"noupcoming": "No contests for the next ${days} days
|
5
|
+
"noupcoming": "No contests for the next ${days} days",
|
6
6
|
"ojName": "OJ",
|
7
7
|
"name": "Contest name",
|
8
8
|
"rule": "Rule",
|
package/dist/locale/zh-CN.json
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
{
|
2
2
|
"runnning": "在 ${oj} 上有 ${contestCount} 场正在进行的比赛",
|
3
|
-
"norunning": "
|
3
|
+
"norunning": "没有正在进行的比赛捏",
|
4
4
|
"upcoming": "接下来的 ${days} 天内在 ${oj} 上有 ${contestCount} 场比赛",
|
5
|
-
"noupcoming": "接下来的 ${days}
|
5
|
+
"noupcoming": "接下来的 ${days} 天内没有比赛捏",
|
6
6
|
"ojName": "比赛平台",
|
7
7
|
"name": "比赛名称",
|
8
8
|
"rule": "赛制",
|
package/dist/locale/zh-NE.json
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
{
|
2
|
-
"runnning": "搁 ${oj} 上有 ${contestCount}
|
3
|
-
"norunning": "
|
2
|
+
"runnning": "搁 ${oj} 上有 ${contestCount} 场比赛正偷摸干着呢",
|
3
|
+
"norunning": "这前属实是没比赛打",
|
4
4
|
"upcoming": "之后 ${days} 天搁 ${oj} 上拢共 ${contestCount} 场比赛",
|
5
|
-
"noupcoming": "没成想往后 ${days}
|
5
|
+
"noupcoming": "没成想往后 ${days} 天没比赛打啊",
|
6
6
|
"ojName": "搁哪",
|
7
7
|
"name": "叫啥",
|
8
8
|
"rule": "咋个整法",
|
package/dist/locale/zh-TW.json
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
{
|
2
2
|
"runnning": "在 ${oj} 上有 ${contestCount} 場正在進行的比賽",
|
3
|
-
"norunning": "
|
3
|
+
"norunning": "沒有正在進行的比賽",
|
4
4
|
"upcoming": "接下来的 ${days} 天內在 ${oj} 上有 ${contestCount} 場比賽",
|
5
|
-
"noupcoming": "接下來的 ${days}
|
5
|
+
"noupcoming": "接下來的 ${days} 天內沒有比賽",
|
6
6
|
"ojName": "比賽平台",
|
7
7
|
"name": "比賽名稱",
|
8
8
|
"rule": "賽制",
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "lscontests",
|
3
|
-
"version": "1.10.
|
3
|
+
"version": "1.10.3",
|
4
4
|
"description": "A tool to get information about the contests on each OJ",
|
5
5
|
"keywords": [
|
6
6
|
"cli",
|
@@ -26,13 +26,14 @@
|
|
26
26
|
"scripts": {
|
27
27
|
"build": "rimraf ./dist/* && tsc -p src",
|
28
28
|
"clean": "rimraf ./dist",
|
29
|
-
"docs": "typedoc --
|
29
|
+
"docs": "typedoc --footerTypedocVersion --footerDate --footerTime",
|
30
30
|
"lint": "eslint && markdownlint README.md",
|
31
31
|
"prestart": "yarn build",
|
32
32
|
"start": "node ./dist/cli.js"
|
33
33
|
},
|
34
34
|
"dependencies": {
|
35
35
|
"axios": "^0.27.2",
|
36
|
+
"axios-retry": "^3.2.5",
|
36
37
|
"cheerio": "^1.0.0-rc.10",
|
37
38
|
"commander": "^9.2.0",
|
38
39
|
"lodash": "^4.17.21",
|
@@ -49,6 +50,7 @@
|
|
49
50
|
"markdownlint-cli": "^0.31.1",
|
50
51
|
"rimraf": "^3.0.2",
|
51
52
|
"typedoc": "^0.22.15",
|
53
|
+
"typedoc-plugin-extras": "^2.2.3",
|
52
54
|
"typescript": "^4.6.4"
|
53
55
|
},
|
54
56
|
"config": {
|