lscontests 1.9.2 → 1.10.2
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 +26 -161
- package/dist/cli.d.ts +6 -0
- package/dist/cli.js +6 -0
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +11 -0
- package/dist/index.js +27 -21
- 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.d.ts +5 -0
- package/dist/lib/oj/index.js +7 -0
- package/dist/lib/oj/index.js.map +1 -1
- package/dist/lib/oj/leetcode.d.ts +2 -0
- package/dist/lib/oj/leetcode.js +66 -0
- package/dist/lib/oj/leetcode.js.map +1 -0
- package/dist/locale/en.json +2 -2
- package/dist/locale/zh-CN.json +2 -2
- package/dist/locale/zh-NE.json +5 -5
- package/dist/locale/zh-TW.json +2 -2
- package/package.json +3 -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
|
@@ -38,7 +40,7 @@ Options:
|
|
38
40
|
-V, --version output the version number
|
39
41
|
-d, --days, <day> number of days to display (default: "3")
|
40
42
|
-l, --list list all supported OJ and it's abbreviation
|
41
|
-
-o, --oj <ojs...> OJs to display (choices: "at", "cf", "lg", "nc")
|
43
|
+
-o, --oj <ojs...> OJs to display (choices: "at", "cf", "lc", "lg", "nc")
|
42
44
|
-r, --raw print raw contest list
|
43
45
|
-L, --language <lang> set output language (choices: "en", "zh-CN", "zh-NE",
|
44
46
|
"zh-TW", default: "zh-CN")
|
@@ -50,71 +52,22 @@ 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
|
55
|
+
(*The following content was automatically generated by [semantic-release](https://github.com/semantic-release/semantic-release) in Sat, 14 May 2022 16:26:45 GMT*)
|
54
56
|
|
55
57
|
<details>
|
56
58
|
<summary> <code>> lsct </code> </summary>
|
57
59
|
|
58
60
|
```text
|
59
|
-
|
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,Luogu,NowCoder 上有 8 场比赛
|
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
|
61
|
+
没有正在进行的比赛捏
|
97
62
|
|
98
|
-
|
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
|
63
|
+
接下来的 3 天内在 LeetCode,Luogu,AtCoder 上有 3 场比赛
|
111
64
|
|
112
|
-
比赛平台:
|
113
|
-
比赛名称:
|
65
|
+
比赛平台: LeetCode
|
66
|
+
比赛名称: Weekly Contest 293
|
114
67
|
赛制: AtCoder
|
115
|
-
开始时间: 5/
|
116
|
-
结束时间: 5/
|
117
|
-
https://
|
68
|
+
开始时间: 5/15/2022, 02:30:00
|
69
|
+
结束时间: 5/15/2022, 04:00:00
|
70
|
+
https://leetcode.com/contest/weekly-contest-293
|
118
71
|
|
119
72
|
比赛平台: Luogu
|
120
73
|
比赛名称: 「WHOI」Round 1
|
@@ -134,97 +87,23 @@ https://atcoder.jp/contests/arc140
|
|
134
87
|
</details>
|
135
88
|
|
136
89
|
<details>
|
137
|
-
<summary> <code>> lsct -o at cf -d 7</code> </summary>
|
90
|
+
<summary> <code>> lsct -o at cf -d 7 -L en</code> </summary>
|
138
91
|
|
139
92
|
```text
|
140
|
-
|
141
|
-
|
142
|
-
接下来的 7 天内在 AtCoder,Codeforces 上有 3 场比赛
|
93
|
+
No running contests
|
143
94
|
|
144
|
-
|
145
|
-
比赛名称: Codeforces Round #791 (Div. 2)
|
146
|
-
赛制: Codeforces
|
147
|
-
开始时间: 5/14/2022, 09:35:00
|
148
|
-
结束时间: 5/14/2022, 11:35:00
|
149
|
-
https://codeforces.com/contests/1679
|
95
|
+
There are 1 contests on AtCoder in the next 7 days
|
150
96
|
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
https://atcoder.jp/contests/abc251
|
157
|
-
|
158
|
-
比赛平台: AtCoder
|
159
|
-
比赛名称: Ⓐ AtCoder Regular Contest 140
|
160
|
-
赛制: AtCoder
|
161
|
-
开始时间: 5/15/2022, 12:00:00
|
162
|
-
结束时间: 5/15/2022, 14:00:00
|
97
|
+
OJ: AtCoder
|
98
|
+
Contest name: Ⓐ AtCoder Regular Contest 140
|
99
|
+
Rule: AtCoder
|
100
|
+
Start time: 5/15/2022, 12:00:00
|
101
|
+
End time: 5/15/2022, 14:00:00
|
163
102
|
https://atcoder.jp/contests/arc140
|
164
103
|
```
|
165
104
|
|
166
105
|
</details>
|
167
106
|
|
168
|
-
<details>
|
169
|
-
<summary> <code>> lsct -o lg nc -d 7 -L en</code> </summary>
|
170
|
-
|
171
|
-
```text
|
172
|
-
There are 2 contests is running on Luogu,NowCoder
|
173
|
-
|
174
|
-
OJ: NowCoder
|
175
|
-
Contest name: 牛客竞赛博弈专题班 Sprague-Grundy 函数(SG 函数、图游戏、Nim 和)
|
176
|
-
Rule: ICPC
|
177
|
-
Start time: 5/13/2022, 04:00:00
|
178
|
-
End time: 5/21/2022, 13:00:00
|
179
|
-
https://ac.nowcoder.com/acm/contest/34655
|
180
|
-
|
181
|
-
OJ: NowCoder
|
182
|
-
Contest name: 2022 图论班第一章图匹配例题与习题
|
183
|
-
Rule: ICPC
|
184
|
-
Start time: 5/13/2022, 06:00:00
|
185
|
-
End time: 5/30/2022, 08:00:00
|
186
|
-
https://ac.nowcoder.com/acm/contest/34649
|
187
|
-
|
188
|
-
There are 5 contests on Luogu,NowCoder in the next 7 days
|
189
|
-
|
190
|
-
OJ: NowCoder
|
191
|
-
Contest name: 第二届天元编程邀请赛(提高组)
|
192
|
-
Rule: IOI
|
193
|
-
Start time: 5/14/2022, 04:30:00
|
194
|
-
End time: 5/14/2022, 09:00:00
|
195
|
-
https://ac.nowcoder.com/acm/contest/33335
|
196
|
-
|
197
|
-
OJ: NowCoder
|
198
|
-
Contest name: 第二届天元编程邀请赛(普及组)
|
199
|
-
Rule: IOI
|
200
|
-
Start time: 5/14/2022, 04:30:00
|
201
|
-
End time: 5/14/2022, 08:00:00
|
202
|
-
https://ac.nowcoder.com/acm/contest/33341
|
203
|
-
|
204
|
-
OJ: NowCoder
|
205
|
-
Contest name: 第十八届西南科技大学 ACM 程序设计竞赛(同步赛)
|
206
|
-
Rule: ICPC
|
207
|
-
Start time: 5/14/2022, 05:00:00
|
208
|
-
End time: 5/14/2022, 10:00:00
|
209
|
-
https://ac.nowcoder.com/acm/contest/33540
|
210
|
-
|
211
|
-
OJ: Luogu
|
212
|
-
Contest name: 【LGR-109】洛谷 5 月月赛 II & Windy Round 6
|
213
|
-
Rule: IOI
|
214
|
-
Start time: 5/14/2022, 06:00:00
|
215
|
-
End time: 5/14/2022, 10:00:00
|
216
|
-
https://www.luogu.com.cn/contest/68326
|
217
|
-
|
218
|
-
OJ: Luogu
|
219
|
-
Contest name: 「WHOI」Round 1
|
220
|
-
Rule: IOI
|
221
|
-
Start time: 5/15/2022, 06:00:00
|
222
|
-
End time: 5/15/2022, 10:00:00
|
223
|
-
https://www.luogu.com.cn/contest/67377
|
224
|
-
```
|
225
|
-
|
226
|
-
</details>
|
227
|
-
|
228
107
|
<details>
|
229
108
|
<summary> <code>> lsct -o at cf -d 7 -r --no-sort</code> </summary>
|
230
109
|
|
@@ -232,14 +111,6 @@ https://www.luogu.com.cn/contest/67377
|
|
232
111
|
{
|
233
112
|
"running": [],
|
234
113
|
"upcoming": [
|
235
|
-
{
|
236
|
-
"ojName": "AtCoder",
|
237
|
-
"name": "Ⓐ Panasonic Programming Contest 2022(AtCoder Beginner Contest 251)",
|
238
|
-
"rule": "AtCoder",
|
239
|
-
"startTime": "2022-05-14T12:00:00.000Z",
|
240
|
-
"endTime": "2022-05-14T13:40:00.000Z",
|
241
|
-
"url": "https://atcoder.jp/contests/abc251"
|
242
|
-
},
|
243
114
|
{
|
244
115
|
"ojName": "AtCoder",
|
245
116
|
"name": "Ⓐ AtCoder Regular Contest 140",
|
@@ -247,14 +118,6 @@ https://www.luogu.com.cn/contest/67377
|
|
247
118
|
"startTime": "2022-05-15T12:00:00.000Z",
|
248
119
|
"endTime": "2022-05-15T14:00:00.000Z",
|
249
120
|
"url": "https://atcoder.jp/contests/arc140"
|
250
|
-
},
|
251
|
-
{
|
252
|
-
"ojName": "Codeforces",
|
253
|
-
"name": "Codeforces Round #791 (Div. 2)",
|
254
|
-
"rule": "Codeforces",
|
255
|
-
"startTime": "2022-05-14T09:35:00.000Z",
|
256
|
-
"endTime": "2022-05-14T11:35:00.000Z",
|
257
|
-
"url": "https://codeforces.com/contests/1679"
|
258
121
|
}
|
259
122
|
]
|
260
123
|
}
|
@@ -265,9 +128,11 @@ https://www.luogu.com.cn/contest/67377
|
|
265
128
|
|
266
129
|
### API
|
267
130
|
|
131
|
+
For more detailed API documentation, please visit <https://lsct.agoh.xyz>.
|
132
|
+
|
268
133
|
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:
|
269
134
|
|
270
|
-
#### Get contests information
|
135
|
+
#### Get text for contests information
|
271
136
|
|
272
137
|
```typescript
|
273
138
|
import { getContestInfo } from "lscontests";
|
@@ -277,7 +142,7 @@ getContestsInfoText({ abbrList: ["cf", "lg"] }).then(console.log);
|
|
277
142
|
|
278
143
|
This code gives the same result as `lsct -o cf lg`.
|
279
144
|
|
280
|
-
#### Get contests information
|
145
|
+
#### Get list for contests information
|
281
146
|
|
282
147
|
```typescript
|
283
148
|
import { getContestList } from "lscontests";
|
@@ -287,7 +152,7 @@ getContests({ sort: false }).then(console.log);
|
|
287
152
|
|
288
153
|
This code gives the same result as `lsct -r --no-sort`.
|
289
154
|
|
290
|
-
#### Add OJ
|
155
|
+
#### Add support for other OJ
|
291
156
|
|
292
157
|
```typescript
|
293
158
|
import { addOJ, getContestsInfoText, getContests } from "lscontests";
|
package/dist/cli.d.ts
CHANGED
package/dist/cli.js
CHANGED
@@ -31,6 +31,12 @@ function initCmd() {
|
|
31
31
|
.addOption(new commander_1.Option("-L, --language <lang>", "set output language").default("zh-CN").choices(locale_1.langList))
|
32
32
|
.option("--no-sort", "do not sort by contests start time, but by OJ order");
|
33
33
|
}
|
34
|
+
/**
|
35
|
+
* CLI entrypoint
|
36
|
+
* @param arg Arguments
|
37
|
+
* @param name Program name
|
38
|
+
* @returns CLI output content
|
39
|
+
*/
|
34
40
|
function cli(arg, name) {
|
35
41
|
return __awaiter(this, void 0, void 0, function* () {
|
36
42
|
const cmd = initCmd();
|
package/dist/cli.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AACA,kDAA+C;AAC/C,yCAA4C;AAC5C,iCAAiC;AACjC,wBAA6D;AAC7D,qCAAoC;AACpC,oDAAuB;AAEvB,SAAS,OAAO;IAEZ,OAAO,IAAI,mBAAO,EAAE;SACf,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SACzB,OAAO,CAAC,sBAAO,CAAC;SAChB,MAAM,CAAC,mBAAmB,EAAE,2BAA2B,EAAE,GAAG,CAAC;SAC7D,MAAM,CAAC,YAAY,EAAE,6CAA6C,CAAC;SACnE,SAAS,CAAC,IAAI,kBAAM,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,UAAK,CAAC,CAAC,CAAC;SACxF,SAAS,CAAC,IAAI,kBAAM,CAAC,WAAW,EAAE,wBAAwB,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;SAClF,SAAS,CAAC,IAAI,kBAAM,CAAC,uBAAuB,EAAE,qBAAqB,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,iBAAQ,CAAC,CAAC;SACxG,MAAM,CAAC,WAAW,EAAE,qDAAqD,CAAC,CAAC;AACpF,CAAC;
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AACA,kDAA+C;AAC/C,yCAA4C;AAC5C,iCAAiC;AACjC,wBAA6D;AAC7D,qCAAoC;AACpC,oDAAuB;AAEvB,SAAS,OAAO;IAEZ,OAAO,IAAI,mBAAO,EAAE;SACf,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SACzB,OAAO,CAAC,sBAAO,CAAC;SAChB,MAAM,CAAC,mBAAmB,EAAE,2BAA2B,EAAE,GAAG,CAAC;SAC7D,MAAM,CAAC,YAAY,EAAE,6CAA6C,CAAC;SACnE,SAAS,CAAC,IAAI,kBAAM,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,UAAK,CAAC,CAAC,CAAC;SACxF,SAAS,CAAC,IAAI,kBAAM,CAAC,WAAW,EAAE,wBAAwB,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;SAClF,SAAS,CAAC,IAAI,kBAAM,CAAC,uBAAuB,EAAE,qBAAqB,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,iBAAQ,CAAC,CAAC;SACxG,MAAM,CAAC,WAAW,EAAE,qDAAqD,CAAC,CAAC;AACpF,CAAC;AAGD;;;;;GAKG;AACH,SAAsB,GAAG,CAAC,GAAY,EAAE,IAAa;;QAEjD,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;QACtB,IAAG,GAAG,KAAK,SAAS;YAAE,GAAG,CAAC,KAAK,EAAE,CAAC;aAElC;YACI,IAAI,GAAG,GAAG,EAAE,CAAC;YACb,IACA;gBACI,IAAG,IAAI;oBAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACxB,GAAG;qBACE,eAAe,CAAC;oBACb,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG;oBAC1B,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG;oBAC1B,WAAW,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG;iBAChC,CAAC;qBACD,YAAY,EAAE;qBACd,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;aAChD;YACD,OAAM,CAAC,EAAE;gBAAE,OAAO,GAAG,CAAC;aAAE;SAC3B;QAED,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QACxB,IAAG,IAAI,CAAC,IAAI;YAAE,OAAO,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAC,CAAC,SAAS,CAAC,UAAK,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;aAEtG;YACI,MAAM,MAAM,GAAW;gBACnB,QAAQ,EAAE,gBAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzB,IAAI,EAAE,IAAI,CAAC,IAAc;gBACzB,IAAI,EAAE,IAAI,CAAC,IAAI;aAClB,CAAC;YACF,IAAG,IAAI,CAAC,GAAG;gBAAE,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,IAAA,cAAW,EAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;;gBAClE,OAAO,MAAM,IAAA,sBAAmB,EAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;SAChE;IACL,CAAC;CAAA;AAlCD,kBAkCC;AAED,IAAG,OAAO,CAAC,IAAI,KAAK,MAAM;IAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC"}
|
package/dist/index.d.ts
CHANGED
@@ -4,10 +4,21 @@ export declare type config = {
|
|
4
4
|
days?: number;
|
5
5
|
sort?: boolean;
|
6
6
|
};
|
7
|
+
/**
|
8
|
+
* Get the list of all contests matching the given config
|
9
|
+
* @param config The config of contests that want to get
|
10
|
+
* @returns A Promise that contains an array of all contests that match the given config
|
11
|
+
*/
|
7
12
|
export declare function getContests(config?: config): Promise<{
|
8
13
|
running: contest[];
|
9
14
|
upcoming: contest[];
|
10
15
|
}>;
|
16
|
+
/**
|
17
|
+
* Get the detailed text of all contests matching the given config
|
18
|
+
* @param config The config of contests that want to get
|
19
|
+
* @param language Language of the output text
|
20
|
+
* @returns A string containing detail text of contests that match the given config
|
21
|
+
*/
|
11
22
|
export declare function getContestsInfoText(config?: config, language?: string): Promise<string>;
|
12
23
|
export { cli } from "./cli";
|
13
24
|
export { addOJ } from "./lib/oj";
|
package/dist/index.js
CHANGED
@@ -28,26 +28,27 @@ function resolveConfig(config) {
|
|
28
28
|
cfg.abbrList = defaultConfig.abbrList;
|
29
29
|
return cfg;
|
30
30
|
}
|
31
|
+
/**
|
32
|
+
* Get the list of all contests matching the given config
|
33
|
+
* @param config The config of contests that want to get
|
34
|
+
* @returns A Promise that contains an array of all contests that match the given config
|
35
|
+
*/
|
31
36
|
function getContests(config) {
|
32
37
|
return __awaiter(this, void 0, void 0, function* () {
|
33
38
|
const cfg = resolveConfig(config);
|
34
|
-
function
|
35
|
-
|
36
|
-
return
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
}
|
45
|
-
})))).reduce((ls1, ls2) => ls1.concat(ls2));
|
46
|
-
});
|
47
|
-
}
|
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));
|
48
49
|
const ret = {
|
49
|
-
running:
|
50
|
-
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))
|
51
52
|
};
|
52
53
|
if (cfg.sort)
|
53
54
|
Object.values(ret).forEach(ct => ct.sort((a, b) => a.startTime.getTime() - b.startTime.getTime()));
|
@@ -55,13 +56,18 @@ function getContests(config) {
|
|
55
56
|
});
|
56
57
|
}
|
57
58
|
exports.getContests = getContests;
|
59
|
+
/**
|
60
|
+
* Get the detailed text of all contests matching the given config
|
61
|
+
* @param config The config of contests that want to get
|
62
|
+
* @param language Language of the output text
|
63
|
+
* @returns A string containing detail text of contests that match the given config
|
64
|
+
*/
|
58
65
|
function getContestsInfoText(config, language = "zh-CN") {
|
59
66
|
return __awaiter(this, void 0, void 0, function* () {
|
60
67
|
const cfg = resolveConfig(config);
|
61
68
|
const lang = yield (0, locale_1.getLangDict)(language);
|
62
69
|
const { running, upcoming } = yield getContests(cfg);
|
63
70
|
const info = [];
|
64
|
-
const oj = cfg.abbrList.map(abbr => oj_1.alloj[abbr].name).join(",");
|
65
71
|
function msg(contests) {
|
66
72
|
return contests.map(contest => {
|
67
73
|
const ls = [];
|
@@ -77,22 +83,22 @@ function getContestsInfoText(config, language = "zh-CN") {
|
|
77
83
|
if (running.length) {
|
78
84
|
info.push(lodash_1.default.template(lang.runnning)({
|
79
85
|
contestCount: running.length,
|
80
|
-
oj
|
86
|
+
oj: lodash_1.default.uniq(running.map(contest => contest.ojName))
|
81
87
|
}));
|
82
88
|
info.push(...msg(running));
|
83
89
|
}
|
84
90
|
else
|
85
|
-
info.push(
|
91
|
+
info.push(lang.norunning);
|
86
92
|
if (upcoming.length) {
|
87
93
|
info.push(lodash_1.default.template(lang.upcoming)({
|
88
94
|
contestCount: upcoming.length,
|
89
95
|
days: cfg.days,
|
90
|
-
oj
|
96
|
+
oj: lodash_1.default.uniq(upcoming.map(contest => contest.ojName))
|
91
97
|
}));
|
92
98
|
info.push(...msg(upcoming));
|
93
99
|
}
|
94
100
|
else
|
95
|
-
info.push(lodash_1.default.template(lang.noupcoming)({ days: cfg.days
|
101
|
+
info.push(lodash_1.default.template(lang.noupcoming)({ days: cfg.days }));
|
96
102
|
return pangu_1.default.spacing(info.join("\n\n"));
|
97
103
|
});
|
98
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,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.d.ts
CHANGED
@@ -6,4 +6,9 @@ export declare type oj = {
|
|
6
6
|
export declare const alloj: {
|
7
7
|
[abbr: string]: oj;
|
8
8
|
};
|
9
|
+
/**
|
10
|
+
* Add an OJ to get information about the contests held on it
|
11
|
+
* @param abbr Abbreviation of the OJ to be added
|
12
|
+
* @param oj OJ to be added
|
13
|
+
*/
|
9
14
|
export declare function addOJ(abbr: string, oj: oj): void;
|
package/dist/lib/oj/index.js
CHANGED
@@ -3,14 +3,21 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.addOJ = exports.alloj = void 0;
|
4
4
|
const atcoder_1 = require("./atcoder");
|
5
5
|
const codeforces_1 = require("./codeforces");
|
6
|
+
const leetcode_1 = require("./leetcode");
|
6
7
|
const luogu_1 = require("./luogu");
|
7
8
|
const nowcoder_1 = require("./nowcoder");
|
8
9
|
exports.alloj = {
|
9
10
|
at: atcoder_1.at,
|
10
11
|
cf: codeforces_1.cf,
|
12
|
+
lc: leetcode_1.lc,
|
11
13
|
lg: luogu_1.lg,
|
12
14
|
nc: nowcoder_1.nc,
|
13
15
|
};
|
16
|
+
/**
|
17
|
+
* Add an OJ to get information about the contests held on it
|
18
|
+
* @param abbr Abbreviation of the OJ to be added
|
19
|
+
* @param oj OJ to be added
|
20
|
+
*/
|
14
21
|
function addOJ(abbr, oj) {
|
15
22
|
exports.alloj[abbr] = oj;
|
16
23
|
}
|
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":";;;AACA,uCAA+B;AAC/B,6CAAkC;AAClC,mCAA6B;AAC7B,yCAAgC;AAOnB,QAAA,KAAK,GAA4B;IAC1C,EAAE,EAAF,YAAE;IACF,EAAE,EAAF,eAAE;IACF,EAAE,EAAF,UAAE;IACF,EAAE,EAAF,aAAE;CACL,CAAC;AAEF,SAAgB,KAAK,CAAC,IAAY,EAAE,EAAM;IAEtC,aAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;AACrB,CAAC;AAHD,sBAGC"}
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/oj/index.ts"],"names":[],"mappings":";;;AACA,uCAA+B;AAC/B,6CAAkC;AAClC,yCAAgC;AAChC,mCAA6B;AAC7B,yCAAgC;AAOnB,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"}
|
@@ -0,0 +1,66 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
3
|
+
if (k2 === undefined) k2 = k;
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
7
|
+
}
|
8
|
+
Object.defineProperty(o, k2, desc);
|
9
|
+
}) : (function(o, m, k, k2) {
|
10
|
+
if (k2 === undefined) k2 = k;
|
11
|
+
o[k2] = m[k];
|
12
|
+
}));
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
15
|
+
}) : function(o, v) {
|
16
|
+
o["default"] = v;
|
17
|
+
});
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
19
|
+
if (mod && mod.__esModule) return mod;
|
20
|
+
var result = {};
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
22
|
+
__setModuleDefault(result, mod);
|
23
|
+
return result;
|
24
|
+
};
|
25
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
26
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
27
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
28
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
29
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
30
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
31
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
32
|
+
});
|
33
|
+
};
|
34
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
35
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
36
|
+
};
|
37
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
38
|
+
exports.lc = void 0;
|
39
|
+
const axios_1 = __importDefault(require("axios"));
|
40
|
+
const cheerio = __importStar(require("cheerio"));
|
41
|
+
const headers = {
|
42
|
+
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36",
|
43
|
+
};
|
44
|
+
exports.lc = {
|
45
|
+
name: "LeetCode",
|
46
|
+
get: () => __awaiter(void 0, void 0, void 0, function* () {
|
47
|
+
var _a;
|
48
|
+
const response = yield axios_1.default.get("https://leetcode.com/contest", { headers });
|
49
|
+
const $ = cheerio.load(response.data);
|
50
|
+
const resList = JSON.parse((_a = $("#__NEXT_DATA__").html()) !== null && _a !== void 0 ? _a : "")
|
51
|
+
.props.pageProps.dehydratedState.queries
|
52
|
+
.find((v) => v.queryKey[0] == "topTwoContests")
|
53
|
+
.state.data.topTwoContests;
|
54
|
+
return resList.map((res) => {
|
55
|
+
return {
|
56
|
+
ojName: exports.lc.name,
|
57
|
+
name: res.title,
|
58
|
+
rule: "AtCoder",
|
59
|
+
startTime: new Date(res.startTime * 1000),
|
60
|
+
endTime: new Date((res.startTime + res.duration) * 1000),
|
61
|
+
url: `https://leetcode.com/contest/${res.titleSlug}`
|
62
|
+
};
|
63
|
+
});
|
64
|
+
})
|
65
|
+
};
|
66
|
+
//# sourceMappingURL=leetcode.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"leetcode.js","sourceRoot":"","sources":["../../../src/lib/oj/leetcode.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAA0B;AAC1B,iDAAmC;AAYnC,MAAM,OAAO,GAAG;IACZ,YAAY,EAAE,qHAAqH;CACtI,CAAC;AAEW,QAAA,EAAE,GAAO;IAClB,IAAI,EAAE,UAAU;IAChB,GAAG,EAAE,GAAS,EAAE;;QAEZ,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,GAAG,CAAC,8BAA8B,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QAC9E,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,OAAO,GAAa,IAAI,CAAC,KAAK,CAAC,MAAA,CAAC,CAAC,gBAAgB,CAAC,CAAC,IAAI,EAAE,mCAAI,EAAE,CAAC;aACjE,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC,OAAO;aACvC,IAAI,CAAC,CAAC,CAA2B,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,gBAAgB,CAAC;aACxE,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC;QAC/B,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAW,EAAE;YAEhC,OAAO;gBACH,MAAM,EAAE,UAAE,CAAC,IAAI;gBACf,IAAI,EAAE,GAAG,CAAC,KAAK;gBACf,IAAI,EAAE,SAAS;gBACf,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC;gBACzC,OAAO,EAAE,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;gBACxD,GAAG,EAAE,gCAAgC,GAAG,CAAC,SAAS,EAAE;aACvD,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC,CAAA;CACJ,CAAC"}
|
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,11 +1,11 @@
|
|
1
1
|
{
|
2
|
-
"runnning": "搁 ${oj} 上有 ${contestCount}
|
3
|
-
"norunning": "
|
4
|
-
"upcoming": "之后 ${days}
|
5
|
-
"noupcoming": "没成想往后 ${days}
|
2
|
+
"runnning": "搁 ${oj} 上有 ${contestCount} 场比赛正偷摸干着呢",
|
3
|
+
"norunning": "这前属实是没比赛打",
|
4
|
+
"upcoming": "之后 ${days} 天搁 ${oj} 上拢共 ${contestCount} 场比赛",
|
5
|
+
"noupcoming": "没成想往后 ${days} 天没比赛打啊",
|
6
6
|
"ojName": "搁哪",
|
7
7
|
"name": "叫啥",
|
8
|
-
"rule": "
|
8
|
+
"rule": "咋个整法",
|
9
9
|
"startTime": "啥前开始",
|
10
10
|
"endTime": "多前完事"
|
11
11
|
}
|
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.
|
3
|
+
"version": "1.10.2",
|
4
4
|
"description": "A tool to get information about the contests on each OJ",
|
5
5
|
"keywords": [
|
6
6
|
"cli",
|
@@ -26,7 +26,7 @@
|
|
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"
|
@@ -49,6 +49,7 @@
|
|
49
49
|
"markdownlint-cli": "^0.31.1",
|
50
50
|
"rimraf": "^3.0.2",
|
51
51
|
"typedoc": "^0.22.15",
|
52
|
+
"typedoc-plugin-extras": "^2.2.3",
|
52
53
|
"typescript": "^4.6.4"
|
53
54
|
},
|
54
55
|
"config": {
|