lscontests 2.1.4 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
package/README.md CHANGED
@@ -55,29 +55,29 @@ Options:
55
55
  It performs as follows:
56
56
 
57
57
  <!-- block_cli begin -->
58
- (*The following content was automatically generated using [semantic-release](https://github.com/semantic-release/semantic-release) on Wed, 25 May 2022 05:14:19 GMT*)
58
+ (*The following content was automatically generated using [semantic-release](https://github.com/semantic-release/semantic-release) on Thu, 26 May 2022 07:08:14 GMT*)
59
59
 
60
60
  <details>
61
61
  <summary> <code>> lsct -L en</code> </summary>
62
62
 
63
63
  ```text
64
- No running contests
64
+ There are 1 contests is running on NowCoder
65
65
 
66
- There are 3 contests on Codeforces,AtCoder in the next 3 days
66
+ OJ: NowCoder
67
+ Contest name: 2022 图论班第一章图匹配例题与习题
68
+ Rule: ICPC
69
+ Start time: 5/13/2022, 06:00:00
70
+ End time: 5/30/2022, 08:00:00
71
+ https://ac.nowcoder.com/acm/contest/34649
67
72
 
68
- OJ: Codeforces
69
- Contest name: Codeforces Round #794 (Div. 1)
70
- Rule: Codeforces
71
- Start time: 5/25/2022, 17:35:00
72
- End time: 5/25/2022, 19:50:00
73
- https://codeforces.com/contests/1685
73
+ There are 7 contests on NowCoder,AtCoder,LeetCode in the next 3 days
74
74
 
75
- OJ: Codeforces
76
- Contest name: Codeforces Round #794 (Div. 2)
77
- Rule: Codeforces
78
- Start time: 5/25/2022, 17:35:00
79
- End time: 5/25/2022, 19:50:00
80
- https://codeforces.com/contests/1686
75
+ OJ: NowCoder
76
+ Contest name: 牛客练习赛 99
77
+ Rule: ICPC
78
+ Start time: 5/27/2022, 11:00:00
79
+ End time: 5/27/2022, 13:30:00
80
+ https://ac.nowcoder.com/acm/contest/34330
81
81
 
82
82
  OJ: AtCoder
83
83
  Contest name: Ⓗ AtCoder Heuristic Contest 011
@@ -85,6 +85,41 @@ Rule: AtCoder
85
85
  Start time: 5/28/2022, 03:00:00
86
86
  End time: 6/5/2022, 10:00:00
87
87
  https://atcoder.jp/contests/ahc011
88
+
89
+ OJ: NowCoder
90
+ Contest name: MINIEYE 杯第十六届华中科技大学程序设计邀请赛
91
+ Rule: ICPC
92
+ Start time: 5/28/2022, 04:30:00
93
+ End time: 5/28/2022, 09:30:00
94
+ https://ac.nowcoder.com/acm/contest/34866
95
+
96
+ OJ: NowCoder
97
+ Contest name: 福建农林大学校赛(同步赛)
98
+ Rule: ICPC
99
+ Start time: 5/28/2022, 05:30:00
100
+ End time: 5/28/2022, 09:30:00
101
+ https://ac.nowcoder.com/acm/contest/33869
102
+
103
+ OJ: AtCoder
104
+ Contest name: Ⓐ NOMURA Programming Contest 2022(AtCoder Beginner Contest 253)
105
+ Rule: AtCoder
106
+ Start time: 5/28/2022, 12:00:00
107
+ End time: 5/28/2022, 13:40:00
108
+ https://atcoder.jp/contests/abc253
109
+
110
+ OJ: LeetCode
111
+ Contest name: Biweekly Contest 79
112
+ Rule: AtCoder
113
+ Start time: 5/28/2022, 14:30:00
114
+ End time: 5/28/2022, 16:00:00
115
+ https://leetcode.com/contest/biweekly-contest-79
116
+
117
+ OJ: LeetCode
118
+ Contest name: Weekly Contest 295
119
+ Rule: AtCoder
120
+ Start time: 5/29/2022, 02:30:00
121
+ End time: 5/29/2022, 04:00:00
122
+ https://leetcode.com/contest/weekly-contest-295
88
123
  ```
89
124
 
90
125
  </details>
@@ -95,21 +130,7 @@ https://atcoder.jp/contests/ahc011
95
130
  ```text
96
131
  No running contests
97
132
 
98
- There are 6 contests on Codeforces,AtCoder in the next 7 days
99
-
100
- OJ: Codeforces
101
- Contest name: Codeforces Round #794 (Div. 1)
102
- Rule: Codeforces
103
- Start time: 5/25/2022, 17:35:00
104
- End time: 5/25/2022, 19:50:00
105
- https://codeforces.com/contests/1685
106
-
107
- OJ: Codeforces
108
- Contest name: Codeforces Round #794 (Div. 2)
109
- Rule: Codeforces
110
- Start time: 5/25/2022, 17:35:00
111
- End time: 5/25/2022, 19:50:00
112
- https://codeforces.com/contests/1686
133
+ There are 4 contests on AtCoder,Codeforces in the next 7 days
113
134
 
114
135
  OJ: AtCoder
115
136
  Contest name: Ⓗ AtCoder Heuristic Contest 011
@@ -133,7 +154,7 @@ End time: 5/29/2022, 14:00:00
133
154
  https://atcoder.jp/contests/arc141
134
155
 
135
156
  OJ: Codeforces
136
- Contest name: Codeforces Round #795 (Div. 2)
157
+ Contest name: CodeCraft-22 and Codeforces Round #795 (Div. 2)
137
158
  Rule: Codeforces
138
159
  Start time: 5/31/2022, 14:35:00
139
160
  End time: 5/31/2022, 16:35:00
@@ -143,7 +164,7 @@ https://codeforces.com/contests/1691
143
164
  </details>
144
165
 
145
166
  <details>
146
- <summary> <code>> lsct -o at cf -d 7 -r --no-sort</code> </summary>
167
+ <summary> <code>> lsct -o at cf -d -1 -r --no-sort</code> </summary>
147
168
 
148
169
  ```json
149
170
  {
@@ -173,29 +194,77 @@ https://codeforces.com/contests/1691
173
194
  "endTime": "2022-05-29T14:00:00.000Z",
174
195
  "url": "https://atcoder.jp/contests/arc141"
175
196
  },
197
+ {
198
+ "ojName": "AtCoder",
199
+ "name": "Ⓐ AtCoder Beginner Contest 254",
200
+ "rule": "AtCoder",
201
+ "startTime": "2022-06-04T12:00:00.000Z",
202
+ "endTime": "2022-06-04T13:40:00.000Z",
203
+ "url": "https://atcoder.jp/contests/abc254"
204
+ },
205
+ {
206
+ "ojName": "AtCoder",
207
+ "name": "Ⓐ Aising Programming Contest 2022(AtCoder Beginner Contest 255)",
208
+ "rule": "AtCoder",
209
+ "startTime": "2022-06-11T12:00:00.000Z",
210
+ "endTime": "2022-06-11T13:40:00.000Z",
211
+ "url": "https://atcoder.jp/contests/abc255"
212
+ },
213
+ {
214
+ "ojName": "AtCoder",
215
+ "name": "Ⓐ AtCoder Regular Contest 142",
216
+ "rule": "AtCoder",
217
+ "startTime": "2022-06-19T12:00:00.000Z",
218
+ "endTime": "2022-06-19T14:00:00.000Z",
219
+ "url": "https://atcoder.jp/contests/arc142"
220
+ },
221
+ {
222
+ "ojName": "AtCoder",
223
+ "name": "Ⓐ AtCoder Regular Contest 143",
224
+ "rule": "AtCoder",
225
+ "startTime": "2022-06-26T12:00:00.000Z",
226
+ "endTime": "2022-06-26T14:00:00.000Z",
227
+ "url": "https://atcoder.jp/contests/arc143"
228
+ },
176
229
  {
177
230
  "ojName": "Codeforces",
178
- "name": "Codeforces Round #794 (Div. 1)",
231
+ "name": "CodeCraft-22 and Codeforces Round #795 (Div. 2)",
179
232
  "rule": "Codeforces",
180
- "startTime": "2022-05-25T17:35:00.000Z",
181
- "endTime": "2022-05-25T19:50:00.000Z",
182
- "url": "https://codeforces.com/contests/1685"
233
+ "startTime": "2022-05-31T14:35:00.000Z",
234
+ "endTime": "2022-05-31T16:35:00.000Z",
235
+ "url": "https://codeforces.com/contests/1691"
183
236
  },
184
237
  {
185
238
  "ojName": "Codeforces",
186
- "name": "Codeforces Round #794 (Div. 2)",
239
+ "name": "Codeforces Round #796 (Div. 1)",
187
240
  "rule": "Codeforces",
188
- "startTime": "2022-05-25T17:35:00.000Z",
189
- "endTime": "2022-05-25T19:50:00.000Z",
190
- "url": "https://codeforces.com/contests/1686"
241
+ "startTime": "2022-06-03T14:35:00.000Z",
242
+ "endTime": "2022-06-03T16:35:00.000Z",
243
+ "url": "https://codeforces.com/contests/1687"
191
244
  },
192
245
  {
193
246
  "ojName": "Codeforces",
194
- "name": "Codeforces Round #795 (Div. 2)",
247
+ "name": "Codeforces Round #796 (Div. 2)",
195
248
  "rule": "Codeforces",
196
- "startTime": "2022-05-31T14:35:00.000Z",
197
- "endTime": "2022-05-31T16:35:00.000Z",
198
- "url": "https://codeforces.com/contests/1691"
249
+ "startTime": "2022-06-03T14:35:00.000Z",
250
+ "endTime": "2022-06-03T16:35:00.000Z",
251
+ "url": "https://codeforces.com/contests/1688"
252
+ },
253
+ {
254
+ "ojName": "Codeforces",
255
+ "name": "Codeforces Round #797 (Div. 3)",
256
+ "rule": "ICPC",
257
+ "startTime": "2022-06-07T14:35:00.000Z",
258
+ "endTime": "2022-06-07T16:50:00.000Z",
259
+ "url": "https://codeforces.com/contests/1690"
260
+ },
261
+ {
262
+ "ojName": "Codeforces",
263
+ "name": "Codeforces Round #798 (Div. 2)",
264
+ "rule": "Codeforces",
265
+ "startTime": "2022-06-10T16:35:00.000Z",
266
+ "endTime": "2022-06-10T18:35:00.000Z",
267
+ "url": "https://codeforces.com/contests/1689"
199
268
  }
200
269
  ]
201
270
  }
package/dist/server.d.ts CHANGED
@@ -1 +1,2 @@
1
+ #!/usr/bin/env node
1
2
  export {};
@@ -0,0 +1,175 @@
1
+ <!DOCTYPE html>
2
+ <html lang="zh">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <link
7
+ href="https://fonts.loli.net/css?family=Roboto:300,400,500,700&display=swap"
8
+ rel="stylesheet"
9
+ />
10
+ <link
11
+ href="https://cdnjs.loli.net/ajax/libs/mdb-ui-kit/4.1.0/mdb.min.css"
12
+ rel="stylesheet"
13
+ />
14
+ <title>LSCT</title>
15
+ <style>
16
+ html, body {
17
+ height: 100%;
18
+ }
19
+
20
+ #content {
21
+ height: 100%;
22
+ display: flex;
23
+ flex-direction: column;
24
+ justify-content: center;
25
+ align-items: center;
26
+ }
27
+
28
+ .container {
29
+ width: 100%;
30
+ height: 100%;
31
+ }
32
+
33
+ main {
34
+ height: 100%;
35
+ }
36
+ </style>
37
+ </head>
38
+ <body>
39
+ <main>
40
+ <div class="container">
41
+ <div id="content" class="row">
42
+ <div id="selects" class="col-md-8 gx-5 d-inline-flex">
43
+ <div class="flex-fill">
44
+ <h2>目标 OJ</h2>
45
+ <div class="form-check">
46
+ <input class="form-check-input" type="checkbox" value="" id="cf" checked/>
47
+ <label class="form-check-label" for="cf">Codeforces</label>
48
+ </div>
49
+ <div class="form-check">
50
+ <input class="form-check-input" type="checkbox" value="" id="at" checked/>
51
+ <label class="form-check-label" for="at">AtCoder</label>
52
+ </div>
53
+ <div class="form-check">
54
+ <input class="form-check-input" type="checkbox" value="" id="lc" checked/>
55
+ <label class="form-check-label" for="lc">Leetcode</label>
56
+ </div>
57
+ <div class="form-check">
58
+ <input class="form-check-input" type="checkbox" value="" id="lg" checked/>
59
+ <label class="form-check-label" for="lg">洛谷</label>
60
+ </div>
61
+ <div class="form-check">
62
+ <input class="form-check-input" type="checkbox" value="" id="nc" checked/>
63
+ <label class="form-check-label" for="nc">牛客</label>
64
+ </div>
65
+ </div>
66
+ <div class="flex-fill">
67
+ <h2>语言</h2>
68
+ <div class="form-check">
69
+ <input class="form-check-input" type="radio" name="lang" id="zhCN"
70
+ checked/>
71
+ <label class="form-check-label" for="zhCN">zh-CN</label>
72
+ </div>
73
+ <div class="form-check">
74
+ <input class="form-check-input" type="radio" name="lang"
75
+ id="zhNE"/>
76
+ <label class="form-check-label" for="zhNE">zh-NE</label>
77
+ </div>
78
+ <div class="form-check">
79
+ <input class="form-check-input" type="radio" name="lang"
80
+ id="zhTW"/>
81
+ <label class="form-check-label" for="zhTW">zh-TW</label>
82
+ </div>
83
+ <div class="form-check">
84
+ <input class="form-check-input" type="radio" name="lang"
85
+ id="en"/>
86
+ <label class="form-check-label" for="en">en</label>
87
+ </div>
88
+ </div>
89
+ </div>
90
+ <div class="col-md-8 gx-5 my-4 d-inline-flex">
91
+ <div class="form-outline me-2 flex-fill">
92
+ <!--suppress HtmlFormInputWithoutLabel -->
93
+ <input type="text" id="url" readonly class="form-control"/>
94
+ </div>
95
+ <button class="btn btn-primary" id="copy">Copy</button>
96
+ </div>
97
+ </div>
98
+ </div>
99
+ </main>
100
+ <script src="https://cdnjs.loli.net/ajax/libs/mdb-ui-kit/4.1.0/mdb.min.js" crossorigin="anonymous"
101
+ referrerpolicy="no-referrer"
102
+ ></script>
103
+ <script src="https://cdnjs.loli.net/ajax/libs/jquery/3.6.0/jquery.min.js" crossorigin="anonymous"
104
+ referrerpolicy="no-referrer"></script>
105
+ <script src="https://cdnjs.loli.net/ajax/libs/clipboard.js/2.0.10/clipboard.min.js"
106
+ crossorigin="anonymous"
107
+ referrerpolicy="no-referrer"></script>
108
+ <script>
109
+ function updateURL()
110
+ {
111
+ const curr = window.location.href.split("?")[0].trimEnd() + "/ics";
112
+ const args = new URLSearchParams();
113
+
114
+ //process ojs
115
+ const cf = $("#cf").prop("checked");
116
+ const at = $("#at").prop("checked");
117
+ const lc = $("#lc").prop("checked");
118
+ const lg = $("#lg").prop("checked");
119
+ const nc = $("#nc").prop("checked");
120
+ if(!(cf && at && lc && lg && nc))
121
+ {
122
+ const ojs = [];
123
+ if(cf) ojs.push("cf");
124
+ if(at) ojs.push("at");
125
+ if(lc) ojs.push("lc");
126
+ if(lg) ojs.push("lg");
127
+ if(nc) ojs.push("nc");
128
+ args.append("o", ojs.join(","));
129
+ }
130
+
131
+ //process lang
132
+ const lang = $("input[name='lang']:checked").next().text();
133
+ if(lang !== "zh-CN") args.append("l", lang);
134
+ const query = args.toString();
135
+ let url = curr;
136
+ if(query.length > 0) url += "?" + query;
137
+ $("#url").val(url);
138
+ }
139
+
140
+ document.addEventListener("DOMContentLoaded", function ()
141
+ {
142
+ updateURL();
143
+ $("#cf,#at,#lc,#lg,#nc,input[name='lang']").change(updateURL);
144
+
145
+ const copy = $("#copy");
146
+
147
+ copy.tooltip({
148
+ trigger: "click",
149
+ placement: "bottom",
150
+ title: "Copied!"
151
+ });
152
+
153
+ copy.click(function ()
154
+ {
155
+ const url = $("#url").val();
156
+ if(url.length > 0)
157
+ {
158
+ new ClipboardJS("#copy", {
159
+ text: function ()
160
+ {
161
+ return url;
162
+ }
163
+ });
164
+ copy.tooltip("show");
165
+ setTimeout(function ()
166
+ {
167
+ copy.tooltip("hide");
168
+ }, 1000);
169
+ }
170
+ });
171
+ }
172
+ );
173
+ </script>
174
+ </body>
175
+ </html>
package/dist/server.js CHANGED
@@ -1,3 +1,4 @@
1
+ #!/usr/bin/env node
1
2
  "use strict";
2
3
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
4
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
@@ -22,11 +23,33 @@ const crypto_1 = require("crypto");
22
23
  const commander_1 = require("commander");
23
24
  const package_json_1 = require("../package.json");
24
25
  const lodash_1 = __importDefault(require("lodash"));
26
+ const fs_1 = require("fs");
25
27
  const app = (0, express_1.default)();
26
28
  function assertType(obj) {
27
29
  }
30
+ const logger = () => {
31
+ return (req, res, next) => {
32
+ const start = process.hrtime();
33
+ res.on("finish", () => {
34
+ const diff = process.hrtime(start);
35
+ const ms = diff[0] * 1e3 + diff[1] * 1e-6;
36
+ const divider = " | ";
37
+ const log = ` ${res.statusCode}` + divider +
38
+ `${(ms.toFixed(3) + "ms").padStart(13)}` + divider +
39
+ `${req.ip.padStart(15)}` + divider +
40
+ `${req.method.padEnd(7)}` +
41
+ `"${req.originalUrl}"`;
42
+ console.log(log);
43
+ });
44
+ next();
45
+ };
46
+ };
47
+ const web = (0, fs_1.readFileSync)(`${__dirname}/server.html`).toString();
48
+ app.set("trust proxy", true);
49
+ app.use(logger());
28
50
  app.get("/", (req, res) => {
29
- res.redirect("https://github.com/StableAgOH/lscontests");
51
+ res.set("Content-Type", "text/html");
52
+ res.send(web);
30
53
  });
31
54
  app.get("/ics", (req, res) => __awaiter(void 0, void 0, void 0, function* () {
32
55
  const { language, l, ojs, o } = req.query;
@@ -99,8 +122,9 @@ const command = new commander_1.Command()
99
122
  .option("-h, --host, <host>", "Host to listen on", "0.0.0.0")
100
123
  .option("-p, --port, <port>", "Port to listen on", "8080");
101
124
  command.parse();
102
- const { host, ports } = command.opts();
103
- const port = parseInt(ports, 10);
125
+ const host = command.opts().host;
126
+ let port = command.opts().port;
127
+ port = parseInt(port, 10);
104
128
  app.listen(port, host, () => {
105
129
  const logURL = `http://${host === "0.0.0.0" ? "127.0.0.1" : host}:${port}/`;
106
130
  console.log(`LSCT server v${package_json_1.version} listening on ${logURL}`);
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,11 +1,10 @@
1
1
  {
2
2
  "name": "lscontests",
3
- "version": "2.1.4",
3
+ "version": "2.2.0",
4
4
  "description": "A tool to get information about the contests on each OJ",
5
5
  "keywords": [
6
6
  "cli",
7
7
  "crawler",
8
- "oj",
9
8
  "atcoder",
10
9
  "codeforces",
11
10
  "luogu",
@@ -25,10 +24,13 @@
25
24
  "dist"
26
25
  ],
27
26
  "scripts": {
28
- "build": "rimraf ./dist/* && tsc -p src",
29
- "clean": "rimraf ./dist",
27
+ "prebuild": "rimraf ./dist/*",
28
+ "postbuild": "cpy --flat src/server.html dist",
29
+ "build": "tsc -p src",
30
+ "clean": "rimraf ./dist ./docs ./node_modules",
30
31
  "docs": "typedoc",
31
32
  "lint": "eslint . && markdownlint .",
33
+ "lint:fix": "eslint . --fix && markdownlint . --fix",
32
34
  "release": "mkdirp docs && yarn semantic-release",
33
35
  "start": "tsx src/cli.ts",
34
36
  "start-s": "tsx src/server.ts"
@@ -36,7 +38,7 @@
36
38
  "dependencies": {
37
39
  "axios": "^0.27.2",
38
40
  "axios-retry": "^3.2.5",
39
- "cheerio": "^1.0.0-rc.10",
41
+ "cheerio": "^1.0.0-rc.11",
40
42
  "commander": "^9.2.0",
41
43
  "express": "^4.18.1",
42
44
  "ics": "^2.35.0",
@@ -50,20 +52,21 @@
50
52
  "@semantic-release/git": "^10.0.1",
51
53
  "@types/express": "^4.17.13",
52
54
  "@types/lodash": "^4.14.182",
53
- "@types/node": "^17.0.34",
55
+ "@types/node": "^17.0.35",
54
56
  "@types/pangu": "^3.3.0",
55
- "@typescript-eslint/eslint-plugin": "^5.24.0",
56
- "@typescript-eslint/parser": "^5.24.0",
57
+ "@typescript-eslint/eslint-plugin": "^5.26.0",
58
+ "@typescript-eslint/parser": "^5.26.0",
57
59
  "cz-conventional-changelog": "3.3.0",
58
- "eslint": "^8.15.0",
60
+ "eslint": "^8.16.0",
59
61
  "markdownlint-cli": "^0.31.1",
60
62
  "mkdirp": "^1.0.4",
61
63
  "rimraf": "^3.0.2",
62
64
  "semantic-release": "^19.0.2",
63
- "tsx": "*",
65
+ "tsx": "^3.4.1",
64
66
  "typedoc": "^0.22.15",
65
67
  "typedoc-plugin-extras": "^2.2.3",
66
- "typescript": "^4.6.4"
68
+ "typescript": "^4.7.2",
69
+ "cpy-cli": "^4.1.0"
67
70
  },
68
71
  "config": {
69
72
  "commitizen": {