'use strict'; const fs = require('fs'); const deepmerge = require('deepmerge').default; const settingsVersion = 1; const baseConfig = require('./config/base.json'); const overrideConfig = require('./config/override.json'); function merge(base, target) { return Object.assign({}, base, target); } function deepMergeArray(dest) { return dest; } function loadDefault(version, spellCheckerLocale) { var ver = version; if (version == null) { ver = settingsVersion; } const base = baseConfig[ver] || baseConfig.default; const override = overrideConfig[ver] || {}; const defaults = deepmerge(base, override, {clone: true, arrayMerge: deepMergeArray}); return Object.assign(defaults, { spellCheckerLocale: spellCheckerLocale || defaults.spellCheckerLocale || 'en-US' }); } function upgradeV0toV1(configV0) { var config = loadDefault('1'); config.teams.push({ name: 'Primary team', url: configV0.url }); return config; } function upgrade(config, newAppVersion) { var configVersion = config.version ? config.version : '1'; if (newAppVersion) { config.lastMattermostVersion = newAppVersion; } switch (configVersion) { case 0: return upgrade(upgradeV0toV1(config)); default: return config; } } module.exports = { version: settingsVersion, upgrade, readFileSync(configFile) { var config = JSON.parse(fs.readFileSync(configFile, 'utf8')); // need to be able to compare 1 to '1' if (config.version == settingsVersion) { // eslint-disable-line var defaultConfig = this.loadDefault(); config = merge(defaultConfig, config); } return config; }, writeFile(configFile, config, callback) { // need to be able to compare 1 to '1' if (config.version != settingsVersion) { // eslint-disable-line throw new Error('version ' + config.version + ' is not equal to ' + settingsVersion); } var data = JSON.stringify(config, null, ' '); fs.writeFile(configFile, data, 'utf8', callback); }, writeFileSync(configFile, config) { // need to be able to compare 1 to '1' if (config.version != settingsVersion) { // eslint-disable-line throw new Error('version ' + config.version + ' is not equal to ' + settingsVersion); } var data = JSON.stringify(config, null, ' '); fs.writeFileSync(configFile, data, 'utf8'); }, loadDefault };