lscontests 1.6.1 → 1.7.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
}
|