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 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 package
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 upcoming contests easily.
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 01:14:20 GMT*)
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
- 在 AtCoder,Codeforces,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,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
- 比赛平台: 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
63
+ 接下来的 3 天内在 LeetCode,Luogu,AtCoder 上有 3 场比赛
111
64
 
112
- 比赛平台: AtCoder
113
- 比赛名称: Panasonic Programming Contest 2022 (AtCoder Beginner Contest 251)
65
+ 比赛平台: LeetCode
66
+ 比赛名称: Weekly Contest 293
114
67
  赛制: AtCoder
115
- 开始时间: 5/14/2022, 12:00:00
116
- 结束时间: 5/14/2022, 13:40:00
117
- https://atcoder.jp/contests/abc251
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
- AtCoder,Codeforces 上没有正在进行的比赛捏
141
-
142
- 接下来的 7 天内在 AtCoder,Codeforces 上有 3 场比赛
93
+ No running contests
143
94
 
144
- 比赛平台: Codeforces
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
- 比赛平台: AtCoder
152
- 比赛名称:Panasonic Programming Contest 2022 (AtCoder Beginner Contest 251)
153
- 赛制: AtCoder
154
- 开始时间: 5/14/2022, 12:00:00
155
- 结束时间: 5/14/2022, 13:40:00
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 string
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 list
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 support
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
@@ -1,2 +1,8 @@
1
1
  #!/usr/bin/env node
2
+ /**
3
+ * CLI entrypoint
4
+ * @param arg Arguments
5
+ * @param name Program name
6
+ * @returns CLI output content
7
+ */
2
8
  export declare function cli(arg?: string, name?: string): Promise<string>;
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;AAED,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"}
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 ls(fn) {
35
- return __awaiter(this, void 0, void 0, function* () {
36
- return (yield Promise.all(cfg.abbrList.map((abbr) => __awaiter(this, void 0, void 0, function* () {
37
- try {
38
- return (yield oj_1.alloj[abbr].get()).filter(fn);
39
- }
40
- catch (e) {
41
- console.error(`Failed to get match information for ${oj_1.alloj[abbr].name}, details:`);
42
- console.error(e);
43
- return [];
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: yield ls(ct => ct.startTime <= new Date() && ct.endTime > new Date()),
50
- upcoming: yield ls(ct => ct.startTime > new Date() && ct.startTime <= new Date(Date.now() + cfg.days * 86400000))
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(lodash_1.default.template(lang.norunning)({ oj }));
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, oj }));
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":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -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,4CAA4C,CAAC,CAAC,IAAI,CAAC;YAEjD,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"}
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"}
@@ -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;
@@ -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
  }
@@ -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,2 @@
1
+ import { oj } from ".";
2
+ export declare const lc: oj;
@@ -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"}
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "runnning": "There are ${contestCount} contests is running on ${oj}",
3
- "norunning": "No upcomming contests on ${oj}",
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 on ${oj}",
5
+ "noupcoming": "No contests for the next ${days} days",
6
6
  "ojName": "OJ",
7
7
  "name": "Contest name",
8
8
  "rule": "Rule",
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "runnning": "在 ${oj} 上有 ${contestCount} 场正在进行的比赛",
3
- "norunning": "在 ${oj} 上没有正在进行的比赛捏",
3
+ "norunning": "没有正在进行的比赛捏",
4
4
  "upcoming": "接下来的 ${days} 天内在 ${oj} 上有 ${contestCount} 场比赛",
5
- "noupcoming": "接下来的 ${days} 天内在 ${oj} 上没有比赛捏",
5
+ "noupcoming": "接下来的 ${days} 天内没有比赛捏",
6
6
  "ojName": "比赛平台",
7
7
  "name": "比赛名称",
8
8
  "rule": "赛制",
@@ -1,11 +1,11 @@
1
1
  {
2
- "runnning": "搁 ${oj} 上有 ${contestCount} 场比赛正干着呢",
3
- "norunning": "这前搁 ${oj} 上没比赛打",
4
- "upcoming": "之后 ${days} 天搁在 ${oj} 上拢共 ${contestCount} 场比赛",
5
- "noupcoming": "没成想往后 ${days} 天搁 ${oj} 没比赛打啊",
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
  }
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "runnning": "在 ${oj} 上有 ${contestCount} 場正在進行的比賽",
3
- "norunning": "在 ${oj} 上沒有正在進行的比賽",
3
+ "norunning": "沒有正在進行的比賽",
4
4
  "upcoming": "接下来的 ${days} 天內在 ${oj} 上有 ${contestCount} 場比賽",
5
- "noupcoming": "接下來的 ${days} 天內在 ${oj} 上沒有比賽",
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.9.2",
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 --out docs ./src/index.ts",
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": {