lscontests 2.1.4 → 2.2.0

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
@@ -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": {