lscontests 1.7.0 → 1.7.3
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +95 -41
- package/dist/cli.js +2 -2
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.js +17 -15
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
@@ -14,7 +14,7 @@ A tool to get information about the contests on each OJ.
|
|
14
14
|
|
15
15
|
### CLI
|
16
16
|
|
17
|
-
You can use cli to get a list of contests
|
17
|
+
You can use cli to get a list of information about upcoming contests easily.
|
18
18
|
|
19
19
|
```text
|
20
20
|
lsct [options]
|
@@ -33,56 +33,71 @@ Options:
|
|
33
33
|
It performs as follows:
|
34
34
|
|
35
35
|
<details>
|
36
|
-
<summary>
|
36
|
+
<summary> <code>> lsct -o at cf</code> </summary>
|
37
37
|
|
38
38
|
```text
|
39
|
-
在最近的 3 天内有
|
40
|
-
|
39
|
+
在最近的 3 天内有 3 场比赛
|
41
40
|
|
42
41
|
比赛平台: Codeforces
|
42
|
+
比赛名称: Educational Codeforces Round 128 (Rated for Div. 2)
|
43
43
|
赛制: ICPC
|
44
44
|
开始时间: 2022/5/13 22:35:00
|
45
45
|
结束时间: 2022/5/14 00:35:00
|
46
46
|
https://codeforces.com/contests/1680
|
47
47
|
|
48
|
-
|
49
|
-
|
50
|
-
赛制:
|
51
|
-
开始时间: 2022/5/14
|
52
|
-
结束时间: 2022/5/14
|
53
|
-
https://
|
48
|
+
比赛平台: Codeforces
|
49
|
+
比赛名称: Codeforces Round #791 (Div. 2)
|
50
|
+
赛制: Codeforces
|
51
|
+
开始时间: 2022/5/14 17:35:00
|
52
|
+
结束时间: 2022/5/14 19:35:00
|
53
|
+
https://codeforces.com/contests/1679
|
54
|
+
|
55
|
+
比赛平台: AtCoder
|
56
|
+
比赛名称: Ⓐ Panasonic Programming Contest 2022(AtCoder Beginner Contest 251)
|
57
|
+
赛制: AtCoder
|
58
|
+
开始时间: 2022/5/14 20:00:00
|
59
|
+
结束时间: 2022/5/14 20:01:40
|
60
|
+
https://atcoder.jp/contests/abc251
|
54
61
|
```
|
55
62
|
|
56
63
|
</details>
|
57
64
|
|
58
65
|
<details>
|
59
|
-
<summary>
|
66
|
+
<summary> <code>> lsct -o lg -d 7 -L en</code> </summary>
|
60
67
|
|
61
68
|
```text
|
62
|
-
2 contests in the last
|
63
|
-
|
64
|
-
|
65
|
-
OJ: Codeforces
|
66
|
-
Rule: ICPC
|
67
|
-
Start time: 2022/5/13 22:35:00
|
68
|
-
End time: 2022/5/14 00:35:00
|
69
|
-
https://codeforces.com/contests/1680
|
70
|
-
|
69
|
+
2 contests in the last 7 days
|
71
70
|
|
72
71
|
OJ: Luogu
|
72
|
+
Contest name: 【LGR-109】洛谷 5 月月赛 II & Windy Round 6
|
73
73
|
Rule: IOI
|
74
74
|
Start time: 2022/5/14 14:00:00
|
75
75
|
End time: 2022/5/14 18:00:00
|
76
76
|
https://www.luogu.com.cn/contest/68326
|
77
|
+
|
78
|
+
OJ: Luogu
|
79
|
+
Contest name: 「WHOI」Round 1
|
80
|
+
Rule: IOI
|
81
|
+
Start time: 2022/5/15 14:00:00
|
82
|
+
End time: 2022/5/15 18:00:00
|
83
|
+
https://www.luogu.com.cn/contest/67377
|
77
84
|
```
|
78
85
|
|
79
86
|
</details>
|
80
87
|
|
81
88
|
<details>
|
82
|
-
<summary>
|
89
|
+
<summary> <code>> lsct -r -o cf nc --no-sort</code> </summary>
|
83
90
|
|
84
91
|
```bash
|
85
92
|
[
|
93
|
+
{
|
94
|
+
ojName: 'Codeforces',
|
95
|
+
name: 'Codeforces Round #791 (Div. 2)',
|
96
|
+
rule: 'Codeforces',
|
97
|
+
startTime: 2022-05-14T09:35:00.000Z,
|
98
|
+
endTime: 2022-05-14T11:35:00.000Z,
|
99
|
+
url: 'https://codeforces.com/contests/1679'
|
100
|
+
},
|
86
101
|
{
|
87
102
|
ojName: 'Codeforces',
|
88
103
|
name: 'Educational Codeforces Round 128 (Rated for Div. 2)',
|
@@ -92,12 +107,20 @@ https://www.luogu.com.cn/contest/68326
|
|
92
107
|
url: 'https://codeforces.com/contests/1680'
|
93
108
|
},
|
94
109
|
{
|
95
|
-
ojName: '
|
96
|
-
name: '
|
97
|
-
rule: '
|
98
|
-
startTime: 2022-05-
|
110
|
+
ojName: 'NowCoder',
|
111
|
+
name: '牛客挑战赛60',
|
112
|
+
rule: 'ICPC',
|
113
|
+
startTime: 2022-05-13T11:00:00.000Z,
|
114
|
+
endTime: 2022-05-13T14:00:00.000Z,
|
115
|
+
url: 'https://ac.nowcoder.com/acm/contest/11200'
|
116
|
+
},
|
117
|
+
{
|
118
|
+
ojName: 'NowCoder',
|
119
|
+
name: '第十八届西南科技大学ACM程序设计竞赛(同步赛)',
|
120
|
+
rule: 'ICPC',
|
121
|
+
startTime: 2022-05-14T05:00:00.000Z,
|
99
122
|
endTime: 2022-05-14T10:00:00.000Z,
|
100
|
-
url: 'https://
|
123
|
+
url: 'https://ac.nowcoder.com/acm/contest/33540'
|
101
124
|
}
|
102
125
|
]
|
103
126
|
```
|
@@ -106,58 +129,89 @@ https://www.luogu.com.cn/contest/68326
|
|
106
129
|
|
107
130
|
### API
|
108
131
|
|
109
|
-
If you want to
|
132
|
+
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:
|
110
133
|
|
111
134
|
#### Get contests information string
|
112
135
|
|
113
136
|
```typescript
|
114
|
-
import {
|
137
|
+
import { getContestInfo } from "lscontests";
|
115
138
|
|
116
|
-
|
139
|
+
getContestInfo({ abbrList: ["cf", "lg"] }).then(console.log);
|
117
140
|
```
|
118
141
|
|
119
|
-
|
142
|
+
This code gives the same result as `lsct -o cf lg`.
|
120
143
|
|
121
144
|
#### Get contests information list
|
122
145
|
|
123
146
|
```typescript
|
124
|
-
import {
|
147
|
+
import { getContestList } from "lscontests";
|
125
148
|
|
126
|
-
|
149
|
+
getContestList({ sort: false }).then(console.log);
|
127
150
|
```
|
128
151
|
|
129
|
-
|
152
|
+
This code gives the same result as `lsct -r --no-sort`.
|
130
153
|
|
131
154
|
#### Add OJ support
|
132
155
|
|
133
156
|
```typescript
|
134
|
-
import { addOJ,
|
157
|
+
import { addOJ, getContestInfo, getContestList } from "lscontests";
|
135
158
|
|
136
159
|
addOJ("ts", {
|
137
160
|
name: "testOJ", get: async () => [{
|
138
161
|
ojName: "testOJ",
|
139
162
|
name: "testContest",
|
140
163
|
rule: "ICPC",
|
141
|
-
startTime: new Date(Date.now() +
|
142
|
-
endTime: new Date(Date.now() +
|
164
|
+
startTime: new Date(Date.now() + 1 * 86400000),
|
165
|
+
endTime: new Date(Date.now() + 2 * 86400000),
|
143
166
|
url: "https://www.test.com"
|
144
167
|
}]
|
145
168
|
});
|
146
169
|
|
147
|
-
|
170
|
+
async function main() {
|
171
|
+
console.log(await getContestInfo({ abbrList: ["cf", "ts"], days: 1 }, "en"));
|
172
|
+
console.log();
|
173
|
+
console.log(await getContestList({ abbrList: ["cf", "ts"], days: 7 }));
|
174
|
+
}
|
175
|
+
|
176
|
+
main();
|
148
177
|
```
|
149
178
|
|
150
|
-
|
179
|
+
This code gives the following results:
|
180
|
+
|
181
|
+
```text
|
182
|
+
1 contests in the last 1 days
|
183
|
+
|
184
|
+
OJ: testOJ
|
185
|
+
Contest name: testContest
|
186
|
+
Rule: ICPC
|
187
|
+
Start time: 2022/5/12 22:54:43
|
188
|
+
End time: 2022/5/13 22:54:43
|
189
|
+
https://www.test.com
|
151
190
|
|
152
|
-
```bash
|
153
191
|
[
|
154
192
|
{
|
155
193
|
ojName: 'testOJ',
|
156
194
|
name: 'testContest',
|
157
195
|
rule: 'ICPC',
|
158
|
-
startTime: 2022-05-
|
159
|
-
endTime: 2022-05-
|
196
|
+
startTime: 2022-05-12T14:54:46.240Z,
|
197
|
+
endTime: 2022-05-13T14:54:46.240Z,
|
160
198
|
url: 'https://www.test.com'
|
199
|
+
},
|
200
|
+
{
|
201
|
+
ojName: 'Codeforces',
|
202
|
+
name: 'Educational Codeforces Round 128 (Rated for Div. 2)',
|
203
|
+
rule: 'ICPC',
|
204
|
+
startTime: 2022-05-13T14:35:00.000Z,
|
205
|
+
endTime: 2022-05-13T16:35:00.000Z,
|
206
|
+
url: 'https://codeforces.com/contests/1680'
|
207
|
+
},
|
208
|
+
{
|
209
|
+
ojName: 'Codeforces',
|
210
|
+
name: 'Codeforces Round #791 (Div. 2)',
|
211
|
+
rule: 'Codeforces',
|
212
|
+
startTime: 2022-05-14T09:35:00.000Z,
|
213
|
+
endTime: 2022-05-14T11:35:00.000Z,
|
214
|
+
url: 'https://codeforces.com/contests/1679'
|
161
215
|
}
|
162
216
|
]
|
163
217
|
```
|
package/dist/cli.js
CHANGED
@@ -36,9 +36,9 @@ function main() {
|
|
36
36
|
sort: opts.sort
|
37
37
|
};
|
38
38
|
if (opts.raw)
|
39
|
-
console.log(yield (0, _1.
|
39
|
+
console.log(yield (0, _1.getContestList)(config));
|
40
40
|
else
|
41
|
-
console.log(yield (0, _1.
|
41
|
+
console.log(yield (0, _1.getContestInfo)(config, opts.language));
|
42
42
|
}
|
43
43
|
});
|
44
44
|
}
|
package/dist/cli.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,kDAA0C;AAC1C,yCAA4C;AAC5C,iCAAiC;AACjC,
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,kDAA0C;AAC1C,yCAA4C;AAC5C,iCAAiC;AACjC,wBAAqE;AAErE,mBAAO;KACF,IAAI,CAAC,MAAM,CAAC;KACZ,OAAO,CAAC,sBAAO,CAAC;KAChB,MAAM,CAAC,mBAAmB,EAAE,4CAA4C,EAAE,GAAG,CAAC;KAC9E,MAAM,CAAC,YAAY,EAAE,uBAAuB,CAAC;KAC7C,SAAS,CAAC,IAAI,kBAAM,CAAC,mBAAmB,EAAE,iCAAiC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,UAAK,CAAC,CAAC,CAAC;KACzG,SAAS,CAAC,IAAI,kBAAM,CAAC,WAAW,EAAE,wBAAwB,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;KAClF,SAAS,CAAC,IAAI,kBAAM,CAAC,uBAAuB,EAAE,qBAAqB,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,WAAQ,CAAC,CAAC;KACxG,MAAM,CAAC,WAAW,EAAE,qDAAqD,CAAC;KAC1E,KAAK,EAAE,CAAC;AAEb,MAAM,IAAI,GAAG,mBAAO,CAAC,IAAI,EAAE,CAAC;AAE5B,SAAe,IAAI;;QACf,IAAI,IAAI,CAAC,IAAI;YAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,UAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;aACjE;YACD,MAAM,MAAM,GAAW;gBACnB,QAAQ,EAAE,IAAI,CAAC,EAAE;gBACjB,IAAI,EAAE,IAAI,CAAC,IAAc;gBACzB,IAAI,EAAE,IAAI,CAAC,IAAI;aAClB,CAAC;YACF,IAAI,IAAI,CAAC,GAAG;gBAAE,OAAO,CAAC,GAAG,CAAC,MAAM,IAAA,iBAAc,EAAC,MAAM,CAAC,CAAC,CAAC;;gBACnD,OAAO,CAAC,GAAG,CAAC,MAAM,IAAA,iBAAc,EAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;SACjE;IACL,CAAC;CAAA;AAED,IAAI,EAAE,CAAC"}
|
package/dist/index.d.ts
CHANGED
@@ -4,7 +4,7 @@ export declare type config = {
|
|
4
4
|
days?: number;
|
5
5
|
sort?: boolean;
|
6
6
|
};
|
7
|
-
declare function
|
7
|
+
declare function getContestList(config?: config): Promise<import("./lib/contest").contest[]>;
|
8
8
|
export declare const langList: string[];
|
9
|
-
declare function
|
10
|
-
export { addOJ,
|
9
|
+
declare function getContestInfo(config?: config, language?: string): Promise<string>;
|
10
|
+
export { addOJ, getContestList, getContestInfo };
|
package/dist/index.js
CHANGED
@@ -32,7 +32,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
32
32
|
});
|
33
33
|
};
|
34
34
|
Object.defineProperty(exports, "__esModule", { value: true });
|
35
|
-
exports.
|
35
|
+
exports.getContestInfo = exports.getContestList = exports.addOJ = exports.langList = void 0;
|
36
36
|
const fs_1 = require("fs");
|
37
37
|
const oj_1 = require("./lib/oj");
|
38
38
|
Object.defineProperty(exports, "addOJ", { enumerable: true, get: function () { return oj_1.addOJ; } });
|
@@ -41,7 +41,7 @@ const defaultConfig = {
|
|
41
41
|
days: 3,
|
42
42
|
sort: true
|
43
43
|
};
|
44
|
-
function
|
44
|
+
function getContestList(config) {
|
45
45
|
return __awaiter(this, void 0, void 0, function* () {
|
46
46
|
const cfg = Object.assign(Object.assign({}, defaultConfig), config);
|
47
47
|
if (!cfg.abbrList)
|
@@ -52,7 +52,7 @@ function getList(config) {
|
|
52
52
|
return cts.filter((c) => c.startTime <= new Date(Date.now() + cfg.days * 86400000));
|
53
53
|
}
|
54
54
|
catch (e) {
|
55
|
-
console.
|
55
|
+
console.error(`Failed to get match information for ${oj_1.alloj[abbr].name}, details:`);
|
56
56
|
console.error(e);
|
57
57
|
return [];
|
58
58
|
}
|
@@ -62,32 +62,34 @@ function getList(config) {
|
|
62
62
|
return contests;
|
63
63
|
});
|
64
64
|
}
|
65
|
-
exports.
|
65
|
+
exports.getContestList = getContestList;
|
66
66
|
exports.langList = (0, fs_1.readdirSync)(`${__dirname}/locale`).map((fileName) => fileName.replace(".json", ""));
|
67
67
|
function format(s, ...args) {
|
68
68
|
for (let i = 0; i < args.length; i++)
|
69
69
|
s = s.replace(`{${i}}`, args[i]);
|
70
70
|
return s;
|
71
71
|
}
|
72
|
-
function
|
72
|
+
function getContestInfo(config, language = "zh-CN") {
|
73
73
|
return __awaiter(this, void 0, void 0, function* () {
|
74
74
|
if (!exports.langList.includes(language))
|
75
75
|
throw new Error(`Illegal language ${language}, the allowed languages are ${exports.langList}`);
|
76
76
|
const cfg = Object.assign(Object.assign({}, defaultConfig), config);
|
77
|
-
const contests = yield
|
77
|
+
const contests = yield getContestList(cfg);
|
78
78
|
const info = [];
|
79
79
|
const lang = yield Promise.resolve().then(() => __importStar(require(`./locale/${language}.json`)));
|
80
80
|
info.push(format(lang.welcome, cfg.days.toString(), contests.length.toString()));
|
81
|
-
for (const
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
81
|
+
for (const contest of contests) {
|
82
|
+
const ct = [];
|
83
|
+
ct.push(`${lang.ojName}: ${contest.ojName}`);
|
84
|
+
ct.push(`${lang.name}: ${contest.name}`);
|
85
|
+
ct.push(`${lang.rule}: ${contest.rule}`);
|
86
|
+
ct.push(`${lang.startTime}: ${contest.startTime.toLocaleString()}`);
|
87
|
+
ct.push(`${lang.endTime}: ${contest.endTime.toLocaleString()}`);
|
88
|
+
ct.push(contest.url);
|
89
|
+
info.push(ct.join("\n"));
|
88
90
|
}
|
89
|
-
return info.join("\n");
|
91
|
+
return info.join("\n\n");
|
90
92
|
});
|
91
93
|
}
|
92
|
-
exports.
|
94
|
+
exports.getContestInfo = getContestInfo;
|
93
95
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2BAAiC;AACjC,iCAAwC;
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|