let defaults, possibleConfigFiles, settingsExist; const fs = require("fs"); const path = require("path"); const env = (process.env.NODE_ENV || "development").toLowerCase(); const merge = function(settings, defaults) { for (const [key, value] of Object.entries(settings)) { if ((typeof(value) === "object") && !(value instanceof Array)) { defaults[key] = merge(value, defaults[key] || {}); } else { defaults[key] = value; } } return defaults; }; const defaultSettingsPath = path.normalize(__dirname + "/../../config/settings.defaults"); if (fs.existsSync(`${defaultSettingsPath}.js`)) { console.log(`Using default settings from ${defaultSettingsPath}.js`); defaults = require(`${defaultSettingsPath}.js`); settingsExist = true; } else if (fs.existsSync(`${defaultSettingsPath}.coffee`)) { // TODO: remove this in the next major version throw new Error(`CoffeeScript settings file ${defaultSettingsPath}.coffee is no longer supported, please convert to JavaScript`); } else { defaults = {}; settingsExist = false; } if (process.env.SHARELATEX_CONFIG) { possibleConfigFiles = [process.env.SHARELATEX_CONFIG]; } else { possibleConfigFiles = [ process.cwd() + `/config/settings.${env}.js`, path.normalize(__dirname + `/../../config/settings.${env}.js`), // TODO: remove these in the next major version process.cwd() + `/config/settings.${env}.coffee`, path.normalize(__dirname + `/../../config/settings.${env}.coffee`) ]; } for (let file of possibleConfigFiles) { if (fs.existsSync(file)) { // TODO: remove this in the next major version if (file.endsWith('.coffee')) { throw new Error(`CoffeeScript settings file ${file} is no longer supported, please convert to JavaScript`); } console.log("Using settings from " + file); module.exports = merge(require(file), defaults); settingsExist = true; break; } } if (!settingsExist) { console.warn("No settings or defaults found. I'm flying blind."); } module.exports = defaults;