Ghost/core/shared/config/index.js
Vikas Potluri 15d9a77092
Moved config from server to shared (#11850)
* moved `server/config` to `shared/config`
* updated config import paths in server to use shared
* updated config import paths in frontend to use shared
* updated config import paths in test to use shared
* updated config import paths in root to use shared
* trigger regression tests
* of course the rebase broke tests
2020-05-27 18:47:53 +01:00

85 lines
2.6 KiB
JavaScript

const Nconf = require('nconf');
const path = require('path');
const _debug = require('ghost-ignition').debug._base;
const debug = _debug('ghost:config');
const localUtils = require('./utils');
const env = process.env.NODE_ENV || 'development';
const _private = {};
_private.loadNconf = function loadNconf(options) {
debug('config start');
options = options || {};
const baseConfigPath = options.baseConfigPath || __dirname;
const customConfigPath = options.customConfigPath || process.cwd();
const nconf = new Nconf.Provider();
/**
* no channel can override the overrides
*/
nconf.file('overrides', path.join(baseConfigPath, 'overrides.json'));
/**
* command line arguments
*/
nconf.argv();
/**
* env arguments
*/
nconf.env({
separator: '__',
parseValues: true
});
nconf.file('custom-env', path.join(customConfigPath, 'config.' + env + '.json'));
if (env !== 'testing') {
nconf.file('local-env', path.join(customConfigPath, 'config.local.json'));
}
nconf.file('default-env', path.join(baseConfigPath, 'env', 'config.' + env + '.json'));
nconf.file('defaults', path.join(baseConfigPath, 'defaults.json'));
/**
* transform all relative paths to absolute paths
* transform sqlite filename path for Ghost-CLI
*/
nconf.makePathsAbsolute = localUtils.makePathsAbsolute.bind(nconf);
nconf.isPrivacyDisabled = localUtils.isPrivacyDisabled.bind(nconf);
nconf.getContentPath = localUtils.getContentPath.bind(nconf);
nconf.sanitizeDatabaseProperties = localUtils.sanitizeDatabaseProperties.bind(nconf);
nconf.doesContentPathExist = localUtils.doesContentPathExist.bind(nconf);
nconf.sanitizeDatabaseProperties();
nconf.makePathsAbsolute(nconf.get('paths'), 'paths');
if (nconf.get('database:client') === 'sqlite3') {
nconf.makePathsAbsolute(nconf.get('database:connection'), 'database:connection');
}
/**
* Check if the URL in config has a protocol
*/
nconf.checkUrlProtocol = localUtils.checkUrlProtocol.bind(nconf);
nconf.checkUrlProtocol();
/**
* Ensure that the content path exists
*/
nconf.doesContentPathExist();
/**
* values we have to set manual
*/
nconf.set('env', env);
// Wrap this in a check, because else nconf.get() is executed unnecessarily
// To output this, use DEBUG=ghost:*,ghost-config
if (_debug.enabled('ghost-config')) {
debug(nconf.get());
}
debug('config end');
return nconf;
};
module.exports = _private.loadNconf();
module.exports.loadNconf = _private.loadNconf;