dev-sidecar/packages/core/src/config.js

88 lines
2.2 KiB
JavaScript

const Shell = require('./shell')
const lodash = require('lodash')
const defConfig = require('./config/index.js')
let configTarget = lodash.cloneDeep(defConfig)
function _deleteDisabledItem (target) {
lodash.forEach(target, (item, key) => {
if (item == null) {
delete target[key]
}
if (lodash.isObject(item)) {
_deleteDisabledItem(item)
}
})
}
const configApi = {
get () {
return configTarget
},
set (newConfig) {
if (newConfig == null) {
return
}
const merged = lodash.cloneDeep(newConfig)
const clone = lodash.cloneDeep(defConfig)
lodash.merge(merged, clone)
lodash.merge(merged, newConfig)
_deleteDisabledItem(merged)
configTarget = merged
return configTarget
},
getDefault () {
return lodash.cloneDeep(defConfig)
},
addDefault (key, defValue) {
lodash.set(defConfig, key, defValue)
},
resetDefault (key) {
if (key) {
let value = lodash.get(defConfig, key)
value = lodash.cloneDeep(value)
lodash.set(configTarget, key, value)
} else {
configTarget = lodash.cloneDeep(defConfig)
}
return configTarget
},
async getVariables (type) {
const method = type === 'npm' ? Shell.getNpmEnv : Shell.getSystemEnv
const currentMap = await method()
const list = []
const map = configTarget.variables[type]
for (const key in map) {
const exists = currentMap[key] != null
list.push({
key,
value: map[key],
exists
})
}
return list
},
async setVariables (type) {
const list = await configApi.getVariables(type)
const noSetList = list.filter(item => {
return !item.exists
})
if (list.length > 0) {
const context = {
root_ca_cert_path: configApi.get().server.setting.rootCaFile.certPath
}
for (const item of noSetList) {
if (item.value.indexOf('${') >= 0) {
for (const key in context) {
item.value = item.value.replcace(new RegExp('${' + key + '}', 'g'), context[key])
}
}
}
const method = type === 'npm' ? Shell.setNpmEnv : Shell.setSystemEnv
return method({ list: noSetList })
}
}
}
module.exports = configApi