lscontests 1.6.1 → 1.7.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 +87 -25
- package/dist/cli.js +14 -3
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +9 -2
- package/dist/index.js +73 -8
- package/dist/index.js.map +1 -1
- package/dist/lib/oj/codeforces.js +30 -1
- package/dist/lib/oj/codeforces.js.map +1 -1
- package/dist/locale/en.json +8 -0
- package/dist/locale/zh-CN.json +8 -0
- package/dist/locale/zh-TW.json +8 -0
- package/dist/tsconfig.json +23 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -16,60 +16,122 @@ A tool to get information about the contests on each OJ.
|
|
|
16
16
|
|
|
17
17
|
You can use cli to get a list of contests information easily.
|
|
18
18
|
|
|
19
|
-
```
|
|
19
|
+
```text
|
|
20
20
|
lsct [options]
|
|
21
21
|
|
|
22
22
|
Options:
|
|
23
|
-
-V, --version
|
|
24
|
-
-d, --days, <day>
|
|
25
|
-
-l, --list
|
|
26
|
-
|
|
27
|
-
-
|
|
28
|
-
-
|
|
23
|
+
-V, --version output the version number
|
|
24
|
+
-d, --days, <day> Number of days to get contests information (default: "3")
|
|
25
|
+
-l, --list List all supported OJ
|
|
26
|
+
-o, --oj <ojs...> OJs to get contests information (choices: "at", "cf", "lg", "nc")
|
|
27
|
+
-r, --raw Print raw contest list
|
|
28
|
+
-L, --language <lang> Set output language (choices: "en", "zh-CN", "zh-TW", default: "zh-CN")
|
|
29
|
+
--no-sort Do not sort by contests start time, but by OJ order
|
|
30
|
+
-h, --help display help for command
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
It performs as follows:
|
|
34
|
+
|
|
35
|
+
<details>
|
|
36
|
+
<summary> > lsct -o cf lg </summary>
|
|
37
|
+
|
|
38
|
+
```text
|
|
39
|
+
在最近的 3 天内有 2 场比赛
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
比赛平台: Codeforces
|
|
43
|
+
赛制: ICPC
|
|
44
|
+
开始时间: 2022/5/13 22:35:00
|
|
45
|
+
结束时间: 2022/5/14 00:35:00
|
|
46
|
+
https://codeforces.com/contests/1680
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
比赛平台: Luogu
|
|
50
|
+
赛制: IOI
|
|
51
|
+
开始时间: 2022/5/14 14:00:00
|
|
52
|
+
结束时间: 2022/5/14 18:00:00
|
|
53
|
+
https://www.luogu.com.cn/contest/68326
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
</details>
|
|
57
|
+
|
|
58
|
+
<details>
|
|
59
|
+
<summary> > lsct -o cf lg -L en </summary>
|
|
60
|
+
|
|
61
|
+
```text
|
|
62
|
+
2 contests in the last 3 days
|
|
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
|
+
|
|
71
|
+
|
|
72
|
+
OJ: Luogu
|
|
73
|
+
Rule: IOI
|
|
74
|
+
Start time: 2022/5/14 14:00:00
|
|
75
|
+
End time: 2022/5/14 18:00:00
|
|
76
|
+
https://www.luogu.com.cn/contest/68326
|
|
29
77
|
```
|
|
30
78
|
|
|
31
|
-
|
|
79
|
+
</details>
|
|
80
|
+
|
|
81
|
+
<details>
|
|
82
|
+
<summary> > lsct -r -o cf lg </summary>
|
|
32
83
|
|
|
33
84
|
```bash
|
|
34
|
-
> lsct
|
|
35
85
|
[
|
|
36
86
|
{
|
|
37
87
|
ojName: 'Codeforces',
|
|
38
|
-
name: 'Codeforces Round
|
|
88
|
+
name: 'Educational Codeforces Round 128 (Rated for Div. 2)',
|
|
39
89
|
rule: 'ICPC',
|
|
40
|
-
startTime: 2022-05-
|
|
41
|
-
endTime: 2022-05-
|
|
42
|
-
url: 'https://codeforces.com/contests/
|
|
90
|
+
startTime: 2022-05-13T14:35:00.000Z,
|
|
91
|
+
endTime: 2022-05-13T16:35:00.000Z,
|
|
92
|
+
url: 'https://codeforces.com/contests/1680'
|
|
43
93
|
},
|
|
44
94
|
{
|
|
45
|
-
ojName: '
|
|
46
|
-
name: '
|
|
47
|
-
rule: '
|
|
48
|
-
startTime: 2022-05-
|
|
49
|
-
endTime: 2022-05-
|
|
50
|
-
url: 'https://
|
|
95
|
+
ojName: 'Luogu',
|
|
96
|
+
name: '【LGR-109】洛谷 5 月月赛 II & Windy Round 6',
|
|
97
|
+
rule: 'IOI',
|
|
98
|
+
startTime: 2022-05-14T06:00:00.000Z,
|
|
99
|
+
endTime: 2022-05-14T10:00:00.000Z,
|
|
100
|
+
url: 'https://www.luogu.com.cn/contest/68326'
|
|
51
101
|
}
|
|
52
102
|
]
|
|
53
103
|
```
|
|
54
104
|
|
|
105
|
+
</details>
|
|
106
|
+
|
|
55
107
|
### API
|
|
56
108
|
|
|
57
109
|
If you want to call lscontests in your project to get a list of contests information, or if you need to add OJ support, then you can call the lscontests API like the following:
|
|
58
110
|
|
|
59
|
-
#### Get
|
|
111
|
+
#### Get contests information string
|
|
112
|
+
|
|
113
|
+
```typescript
|
|
114
|
+
import { getContestInfo } from "lscontests";
|
|
115
|
+
|
|
116
|
+
getContestInfo({ abbrList: ["cf", "lg"] }).then(console.log);
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
The result of this code is the same as `lsct -o cf lg`.
|
|
120
|
+
|
|
121
|
+
#### Get contests information list
|
|
60
122
|
|
|
61
123
|
```typescript
|
|
62
|
-
import {
|
|
124
|
+
import { getContestList } from "lscontests";
|
|
63
125
|
|
|
64
|
-
|
|
126
|
+
getContestList({ sort: false }).then(console.log);
|
|
65
127
|
```
|
|
66
128
|
|
|
67
|
-
The result of this code is the same as
|
|
129
|
+
The result of this code is the same as `lsct -r --no-sort`.
|
|
68
130
|
|
|
69
131
|
#### Add OJ support
|
|
70
132
|
|
|
71
133
|
```typescript
|
|
72
|
-
import { addOJ,
|
|
134
|
+
import { addOJ, getContestList } from "lscontests";
|
|
73
135
|
|
|
74
136
|
addOJ("ts", {
|
|
75
137
|
name: "testOJ", get: async () => [{
|
|
@@ -82,7 +144,7 @@ addOJ("ts", {
|
|
|
82
144
|
}]
|
|
83
145
|
});
|
|
84
146
|
|
|
85
|
-
|
|
147
|
+
getContestList({ abbrList: ["ts"], days: 7 }).then(console.log);
|
|
86
148
|
```
|
|
87
149
|
|
|
88
150
|
The result of this code is as follows:
|
package/dist/cli.js
CHANGED
|
@@ -19,16 +19,27 @@ commander_1.program
|
|
|
19
19
|
.version(package_json_1.version)
|
|
20
20
|
.option("-d, --days, <day>", "Number of days to get contests information", "3")
|
|
21
21
|
.option("-l, --list", "List all supported OJ")
|
|
22
|
-
.option("--no-sort", "Do not sort by contests start time (default sort by OJ)")
|
|
23
22
|
.addOption(new commander_1.Option("-o, --oj <ojs...>", "OJs to get contests information").choices(Object.keys(oj_1.alloj)))
|
|
23
|
+
.addOption(new commander_1.Option("-r, --raw", "Print raw contest list").conflicts("language"))
|
|
24
|
+
.addOption(new commander_1.Option("-L, --language <lang>", "Set output language").default("zh-CN").choices(_1.langList))
|
|
25
|
+
.option("--no-sort", "Do not sort by contests start time, but by OJ order")
|
|
24
26
|
.parse();
|
|
25
27
|
const opts = commander_1.program.opts();
|
|
26
28
|
function main() {
|
|
27
29
|
return __awaiter(this, void 0, void 0, function* () {
|
|
28
30
|
if (opts.list)
|
|
29
31
|
console.log(Object.values(oj_1.alloj).map((oj) => oj.name));
|
|
30
|
-
else
|
|
31
|
-
|
|
32
|
+
else {
|
|
33
|
+
const config = {
|
|
34
|
+
abbrList: opts.oj,
|
|
35
|
+
days: opts.days,
|
|
36
|
+
sort: opts.sort
|
|
37
|
+
};
|
|
38
|
+
if (opts.raw)
|
|
39
|
+
console.log(yield (0, _1.getContestList)(config));
|
|
40
|
+
else
|
|
41
|
+
console.log(yield (0, _1.getContestInfo)(config, opts.language));
|
|
42
|
+
}
|
|
32
43
|
});
|
|
33
44
|
}
|
|
34
45
|
main();
|
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
|
@@ -1,3 +1,10 @@
|
|
|
1
1
|
import { addOJ } from "./lib/oj";
|
|
2
|
-
declare
|
|
3
|
-
|
|
2
|
+
export declare type config = {
|
|
3
|
+
abbrList?: string[];
|
|
4
|
+
days?: number;
|
|
5
|
+
sort?: boolean;
|
|
6
|
+
};
|
|
7
|
+
declare function getContestList(config?: config): Promise<import("./lib/contest").contest[]>;
|
|
8
|
+
export declare const langList: string[];
|
|
9
|
+
declare function getContestInfo(config?: config, language?: string): Promise<string>;
|
|
10
|
+
export { addOJ, getContestList, getContestInfo };
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,27 @@
|
|
|
1
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
|
+
};
|
|
2
25
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
26
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
27
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -9,20 +32,62 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
32
|
});
|
|
10
33
|
};
|
|
11
34
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.
|
|
35
|
+
exports.getContestInfo = exports.getContestList = exports.addOJ = exports.langList = void 0;
|
|
36
|
+
const fs_1 = require("fs");
|
|
13
37
|
const oj_1 = require("./lib/oj");
|
|
14
38
|
Object.defineProperty(exports, "addOJ", { enumerable: true, get: function () { return oj_1.addOJ; } });
|
|
15
|
-
|
|
39
|
+
const defaultConfig = {
|
|
40
|
+
abbrList: Object.keys(oj_1.alloj),
|
|
41
|
+
days: 3,
|
|
42
|
+
sort: true
|
|
43
|
+
};
|
|
44
|
+
function getContestList(config) {
|
|
16
45
|
return __awaiter(this, void 0, void 0, function* () {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
46
|
+
const cfg = Object.assign(Object.assign({}, defaultConfig), config);
|
|
47
|
+
if (!cfg.abbrList)
|
|
48
|
+
cfg.abbrList = Object.keys(oj_1.alloj);
|
|
49
|
+
const contests = (yield Promise.all(cfg.abbrList.map((abbr) => __awaiter(this, void 0, void 0, function* () {
|
|
50
|
+
try {
|
|
51
|
+
const cts = yield oj_1.alloj[abbr].get();
|
|
52
|
+
return cts.filter((c) => c.startTime <= new Date(Date.now() + cfg.days * 86400000));
|
|
53
|
+
}
|
|
54
|
+
catch (e) {
|
|
55
|
+
console.error(`Failed to get match information for ${oj_1.alloj[abbr].name}, details:`);
|
|
56
|
+
console.error(e);
|
|
57
|
+
return [];
|
|
58
|
+
}
|
|
21
59
|
})))).reduce((ls1, ls2) => ls1.concat(ls2));
|
|
22
|
-
if (sort)
|
|
60
|
+
if (cfg.sort)
|
|
23
61
|
contests.sort((a, b) => a.startTime.getTime() - b.startTime.getTime());
|
|
24
62
|
return contests;
|
|
25
63
|
});
|
|
26
64
|
}
|
|
27
|
-
exports.
|
|
65
|
+
exports.getContestList = getContestList;
|
|
66
|
+
exports.langList = (0, fs_1.readdirSync)(`${__dirname}/locale`).map((fileName) => fileName.replace(".json", ""));
|
|
67
|
+
function format(s, ...args) {
|
|
68
|
+
for (let i = 0; i < args.length; i++)
|
|
69
|
+
s = s.replace(`{${i}}`, args[i]);
|
|
70
|
+
return s;
|
|
71
|
+
}
|
|
72
|
+
function getContestInfo(config, language = "zh-CN") {
|
|
73
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
74
|
+
if (!exports.langList.includes(language))
|
|
75
|
+
throw new Error(`Illegal language ${language}, the allowed languages are ${exports.langList}`);
|
|
76
|
+
const cfg = Object.assign(Object.assign({}, defaultConfig), config);
|
|
77
|
+
const contests = yield getContestList(cfg);
|
|
78
|
+
const info = [];
|
|
79
|
+
const lang = yield Promise.resolve().then(() => __importStar(require(`./locale/${language}.json`)));
|
|
80
|
+
info.push(format(lang.welcome, cfg.days.toString(), contests.length.toString()));
|
|
81
|
+
for (const ct of contests) {
|
|
82
|
+
info.push("\n");
|
|
83
|
+
info.push(`${lang.ojName}: ${ct.ojName}`);
|
|
84
|
+
info.push(`${lang.rule}: ${ct.rule}`);
|
|
85
|
+
info.push(`${lang.startTime}: ${ct.startTime.toLocaleString()}`);
|
|
86
|
+
info.push(`${lang.endTime}: ${ct.endTime.toLocaleString()}`);
|
|
87
|
+
info.push(ct.url);
|
|
88
|
+
}
|
|
89
|
+
return info.join("\n");
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
exports.getContestInfo = getContestInfo;
|
|
28
93
|
//# 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":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,27 @@
|
|
|
1
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
|
+
};
|
|
2
25
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
26
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
27
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -14,6 +37,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
14
37
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
38
|
exports.cf = void 0;
|
|
16
39
|
const axios_1 = __importDefault(require("axios"));
|
|
40
|
+
const cheerio = __importStar(require("cheerio"));
|
|
17
41
|
const ruleRecord = {
|
|
18
42
|
CF: "Codeforces",
|
|
19
43
|
ICPC: "ICPC"
|
|
@@ -21,7 +45,12 @@ const ruleRecord = {
|
|
|
21
45
|
exports.cf = {
|
|
22
46
|
name: "Codeforces",
|
|
23
47
|
get: () => __awaiter(void 0, void 0, void 0, function* () {
|
|
24
|
-
const
|
|
48
|
+
const response = yield axios_1.default.get("https://codeforces.com/api/contest.list");
|
|
49
|
+
if (!(response.data instanceof Object)) {
|
|
50
|
+
const $ = cheerio.load(response.data);
|
|
51
|
+
throw new Error($.text());
|
|
52
|
+
}
|
|
53
|
+
const resList = response.data.result;
|
|
25
54
|
return resList.map((res) => {
|
|
26
55
|
return {
|
|
27
56
|
ojName: exports.cf.name,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codeforces.js","sourceRoot":"","sources":["../../../src/lib/oj/codeforces.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"codeforces.js","sourceRoot":"","sources":["../../../src/lib/oj/codeforces.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAA0B;AAC1B,iDAAmC;AAenC,MAAM,UAAU,GAAyB;IACrC,EAAE,EAAE,YAAY;IAChB,IAAI,EAAE,MAAM;CACf,CAAC;AAEW,QAAA,EAAE,GAAO;IAClB,IAAI,EAAE,YAAY;IAClB,GAAG,EAAE,GAAS,EAAE;QACZ,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;QAC5E,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,YAAY,MAAM,CAAC,EAAE;YACpC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;SAC7B;QACD,MAAM,OAAO,GAAa,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;QAC/C,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAW,EAAE;YAChC,OAAO;gBACH,MAAM,EAAE,UAAE,CAAC,IAAI;gBACf,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;gBAC1B,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,gBAAgB,GAAG,IAAI,CAAC;gBAChD,OAAO,EAAE,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,gBAAgB,GAAG,GAAG,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC;gBACtE,GAAG,EAAE,mCAAmC,GAAG,CAAC,EAAE,EAAE;aACnD,CAAC;QACN,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC,CAAA;CACJ,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "es6",
|
|
4
|
+
"module": "commonjs",
|
|
5
|
+
"esModuleInterop": true,
|
|
6
|
+
"forceConsistentCasingInFileNames": true,
|
|
7
|
+
"strict": true,
|
|
8
|
+
"skipLibCheck": true,
|
|
9
|
+
"sourceMap": true,
|
|
10
|
+
"declaration": true,
|
|
11
|
+
"outDir": "../dist/",
|
|
12
|
+
"resolveJsonModule": true
|
|
13
|
+
},
|
|
14
|
+
"include": [
|
|
15
|
+
"**/*.ts",
|
|
16
|
+
"**/*.json"
|
|
17
|
+
],
|
|
18
|
+
"references": [
|
|
19
|
+
{
|
|
20
|
+
"path": "../"
|
|
21
|
+
}
|
|
22
|
+
]
|
|
23
|
+
}
|