mirror of
https://github.com/CharaChorder/DeviceManager.git
synced 2026-01-18 07:52:50 +00:00
84 lines
1.5 KiB
TypeScript
84 lines
1.5 KiB
TypeScript
import path from 'path'
|
|
|
|
import { debug } from '../lib/logger'
|
|
import { readFile, writeFile, prettyLog, deepMerge } from '../lib/util'
|
|
|
|
export type RecordMate = {
|
|
/**
|
|
* The hosts that have generated certificate
|
|
*/
|
|
hosts: string[]
|
|
|
|
/**
|
|
* file hash
|
|
*/
|
|
hash?: RecordHash
|
|
}
|
|
|
|
export type RecordHash = {
|
|
key?: string
|
|
cert?: string
|
|
}
|
|
|
|
export type ConfigOptions = {
|
|
savePath: string
|
|
}
|
|
|
|
const CONFIG_FILE_NAME = 'config.json'
|
|
|
|
class Config {
|
|
/**
|
|
* The mkcert version
|
|
*/
|
|
private version: string | undefined
|
|
|
|
private record: RecordMate | undefined
|
|
|
|
private configFilePath: string
|
|
|
|
constructor({ savePath }: ConfigOptions) {
|
|
this.configFilePath = path.resolve(savePath, CONFIG_FILE_NAME)
|
|
}
|
|
|
|
public async init() {
|
|
const str = await readFile(this.configFilePath)
|
|
const options = str ? JSON.parse(str) : undefined
|
|
|
|
if (options) {
|
|
this.version = options.version
|
|
this.record = options.record
|
|
}
|
|
}
|
|
|
|
private async serialize() {
|
|
await writeFile(this.configFilePath, prettyLog(this))
|
|
}
|
|
|
|
// deep merge
|
|
public async merge(obj: Record<string, any>) {
|
|
const currentStr = prettyLog(this)
|
|
|
|
deepMerge(this, obj)
|
|
|
|
const nextStr = prettyLog(this)
|
|
|
|
debug(
|
|
`Receive parameter\n ${prettyLog(
|
|
obj
|
|
)}\nUpdate config from\n ${currentStr} \nto\n ${nextStr}`
|
|
)
|
|
|
|
await this.serialize()
|
|
}
|
|
|
|
public getRecord() {
|
|
return this.record
|
|
}
|
|
|
|
public getVersion() {
|
|
return this.version
|
|
}
|
|
}
|
|
|
|
export default Config
|