Settings.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. let defaults, possibleConfigFiles, settingsExist;
  2. const fs = require("fs");
  3. const path = require("path");
  4. const env = (process.env.NODE_ENV || "development").toLowerCase();
  5. const merge = function(settings, defaults) {
  6. for (const [key, value] of Object.entries(settings)) {
  7. if ((typeof(value) === "object") && !(value instanceof Array)) {
  8. defaults[key] = merge(value, defaults[key] || {});
  9. } else {
  10. defaults[key] = value;
  11. }
  12. }
  13. return defaults;
  14. };
  15. const defaultSettingsPath = path.normalize(__dirname + "/../../config/settings.defaults");
  16. if (fs.existsSync(`${defaultSettingsPath}.js`)) {
  17. console.log(`Using default settings from ${defaultSettingsPath}.js`);
  18. defaults = require(`${defaultSettingsPath}.js`);
  19. settingsExist = true;
  20. } else if (fs.existsSync(`${defaultSettingsPath}.coffee`)) {
  21. // TODO: remove this in the next major version
  22. throw new Error(`CoffeeScript settings file ${defaultSettingsPath}.coffee is no longer supported, please convert to JavaScript`);
  23. } else {
  24. defaults = {};
  25. settingsExist = false;
  26. }
  27. if (process.env.SHARELATEX_CONFIG) {
  28. possibleConfigFiles = [process.env.SHARELATEX_CONFIG];
  29. } else {
  30. possibleConfigFiles = [
  31. process.cwd() + `/config/settings.${env}.js`,
  32. path.normalize(__dirname + `/../../config/settings.${env}.js`),
  33. // TODO: remove these in the next major version
  34. process.cwd() + `/config/settings.${env}.coffee`,
  35. path.normalize(__dirname + `/../../config/settings.${env}.coffee`)
  36. ];
  37. }
  38. for (let file of possibleConfigFiles) {
  39. if (fs.existsSync(file)) {
  40. // TODO: remove this in the next major version
  41. if (file.endsWith('.coffee')) {
  42. throw new Error(`CoffeeScript settings file ${file} is no longer supported, please convert to JavaScript`);
  43. }
  44. console.log("Using settings from " + file);
  45. module.exports = merge(require(file), defaults);
  46. settingsExist = true;
  47. break;
  48. }
  49. }
  50. if (!settingsExist) {
  51. console.warn("No settings or defaults found. I'm flying blind.");
  52. }
  53. module.exports = defaults;