-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathConfig.ts
71 lines (59 loc) · 1.74 KB
/
Config.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import { readFileSync } from 'fs';
import { singleton } from 'tsyringe';
import * as JSONC from 'jsonc-parser';
@singleton<Config>()
export class Config {
/**
* Discordに関するコンフィグ
*/
public get Discord(): ConfigData['discord'] {
return this.getData().discord;
}
/**
* Rconに関するコンフィグ
*/
public get Rcon(): ConfigData['rcon'] {
return this.getData().rcon;
}
/**
* Minecraftに関するコンフィグ
*/
public get Minecraft(): ConfigData['minecraft'] {
return this.getData().minecraft;
}
/**
* コンフィグファイルのパス
*/
private readonly confPath = 'config.json';
/**
* コンフィグのキャッシュデータ
*/
private confCache: ConfigData | null = null;
/**
* コンフィグデータを取得\
* まだデータを読み込んでいない場合は読み込んで返す
*/
private getData(): ConfigData {
if (!this.confCache) {
this.confCache = this.readConf();
}
return this.confCache;
}
/**
* コンフィグファイルからデータを読み込む
*/
private readConf(): ConfigData {
try {
const file = readFileSync(this.confPath, 'utf-8');
const errors: JSONC.ParseError[] = [];
const obj: ConfigData = JSONC.parse(file, errors);
// パースに失敗してもエラー吐いてくれないらしいので
if (errors.length > 0) throw Error();
return obj;
}
catch (err) {
console.error('コンフィグファイルの読み込みに失敗しました');
throw err;
}
}
}