123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- const _ = require('lodash');
- const fs = require('fs-extra');
- const branchFilename = __dirname + '/application_env';
- const propsToSave = [
- 'loggingEnabled',
- 'maxFilesDirSize',
- 'cacheCleanInterval',
- 'server',
- ];
- let instance = null;
- //singleton
- class ConfigManager {
- constructor() {
- if (!instance) {
- this.inited = false;
- instance = this;
- }
- return instance;
- }
- async init() {
- if (this.inited)
- throw new Error('already inited');
- this.branch = 'production';
- try {
- await fs.access(branchFilename);
- this.branch = (await fs.readFile(branchFilename, 'utf8')).trim();
- } catch (err) {
- //
- }
- process.env.NODE_ENV = this.branch;
- this.branchConfigFile = __dirname + `/${this.branch}.js`;
- this._config = require(this.branchConfigFile);
- await fs.ensureDir(this._config.dataDir);
- this._userConfigFile = `${this._config.dataDir}/config.json`;
- this.inited = true;
- }
- get config() {
- if (!this.inited)
- throw new Error('not inited');
- return _.cloneDeep(this._config);
- }
- set config(value) {
- Object.assign(this._config, value);
- }
- get userConfigFile() {
- return this._userConfigFile;
- }
- set userConfigFile(value) {
- if (value)
- this._userConfigFile = value;
- }
- async load() {
- if (!this.inited)
- throw new Error('not inited');
- if (!await fs.pathExists(this.userConfigFile)) {
- await this.save();
- return;
- }
- const data = await fs.readFile(this.userConfigFile, 'utf8');
- this.config = JSON.parse(data);
- }
- async save() {
- if (!this.inited)
- throw new Error('not inited');
- const dataToSave = _.pick(this._config, propsToSave);
- await fs.writeFile(this.userConfigFile, JSON.stringify(dataToSave, null, 4));
- }
- }
- module.exports = ConfigManager;
|