83 lines
1.8 KiB
JavaScript
83 lines
1.8 KiB
JavaScript
import fs from "fs"
|
|
import YAML from "yaml"
|
|
import _ from "lodash"
|
|
import chokidar from "chokidar"
|
|
// import Constant from '../server/constant/Constant.js'
|
|
|
|
export default class YamlReader {
|
|
/**
|
|
* 读写yaml文件
|
|
* @param yamlPath yaml文件绝对路径
|
|
* @param isWatch 是否监听文件变化
|
|
*/
|
|
constructor (yamlPath, isWatch = false) {
|
|
this.yamlPath = yamlPath
|
|
this.isWatch = isWatch
|
|
this.initYaml()
|
|
}
|
|
|
|
initYaml () {
|
|
// parseDocument 将会保留注释
|
|
this.document = YAML.parseDocument(fs.readFileSync(this.yamlPath, "utf8"))
|
|
if (this.isWatch && !this.watcher) {
|
|
this.watcher = chokidar.watch(this.yamlPath).on("change", () => {
|
|
if (this.isSave) {
|
|
this.isSave = false
|
|
return
|
|
}
|
|
this.initYaml()
|
|
})
|
|
}
|
|
}
|
|
|
|
/** 返回读取的对象 */
|
|
get jsonData () {
|
|
if (!this.document) {
|
|
return null
|
|
}
|
|
return this.document.toJSON()
|
|
}
|
|
|
|
/* 检查集合是否包含key的值 */
|
|
has (keyPath) {
|
|
return this.document.hasIn(keyPath.split("."))
|
|
}
|
|
|
|
/* 返回key的值 */
|
|
get (keyPath) {
|
|
return _.get(this.jsonData, keyPath)
|
|
}
|
|
|
|
/* 修改某个key的值 */
|
|
set (keyPath, value) {
|
|
this.document.setIn([keyPath], value)
|
|
this.save()
|
|
}
|
|
|
|
/* 删除key */
|
|
delete (keyPath) {
|
|
this.document.deleteIn(keyPath.split("."))
|
|
this.save()
|
|
}
|
|
|
|
// 数组添加数据
|
|
addIn (keyPath, value) {
|
|
this.document.addIn(keyPath.split("."), value)
|
|
this.save()
|
|
}
|
|
|
|
// 彻底删除某个key
|
|
deleteKey (keyPath) {
|
|
let keys = keyPath.split(".")
|
|
keys = this.mapParentKeys(keys)
|
|
this.document.deleteIn(keys)
|
|
this.save()
|
|
}
|
|
|
|
save () {
|
|
this.isSave = true
|
|
let yaml = this.document.toString()
|
|
fs.writeFileSync(this.yamlPath, yaml, "utf8")
|
|
}
|
|
}
|