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 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
@@ -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 02:35:31 GMT*)
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 -o lg nc -d 7 -L en</code> </summary>
58
+ <summary> <code>> lsct -L en</code> </summary>
184
59
 
185
60
  ```text
186
- There are 2 contests is running on Luogu,NowCoder
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 5 contests on Luogu,NowCoder in the next 7 days
77
+ There are 3 contests on LeetCode,Luogu,AtCoder in the next 3 days
203
78
 
204
- OJ: NowCoder
205
- Contest name: 第二届天元编程邀请赛(提高组)
206
- Rule: IOI
207
- Start time: 5/14/2022, 04:30:00
208
- End time: 5/14/2022, 09:00:00
209
- https://ac.nowcoder.com/acm/contest/33335
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 string
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 list
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 support
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. @see config
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 @see config
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. @see config
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 ls(fn) {
40
- return __awaiter(this, void 0, void 0, function* () {
41
- return (yield Promise.all(cfg.abbrList.map((abbr) => __awaiter(this, void 0, void 0, function* () {
42
- try {
43
- return (yield oj_1.alloj[abbr].get()).filter(fn);
44
- }
45
- catch (e) {
46
- console.error(`Failed to get contest information for ${oj_1.alloj[abbr].name}, details:`);
47
- console.error(e);
48
- return [];
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: yield ls(ct => ct.startTime <= new Date() && ct.endTime > new Date()),
55
- 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))
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 @see config
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(lodash_1.default.template(lang.norunning)({ oj }));
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, oj }));
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":"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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"}
@@ -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,
@@ -1 +1 @@
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"}
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"}
@@ -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,8 +1,8 @@
1
1
  {
2
- "runnning": "搁 ${oj} 上有 ${contestCount} 场比赛正干着呢",
3
- "norunning": "这前搁 ${oj} 上没比赛打",
2
+ "runnning": "搁 ${oj} 上有 ${contestCount} 场比赛正偷摸干着呢",
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,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.10.0",
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 --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"
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": {