lscontests 1.10.0 → 1.10.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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": {
|