mirror of
https://github.com/strapi/strapi.git
synced 2025-07-13 03:51:54 +00:00
161 lines
4.6 KiB
JavaScript
161 lines
4.6 KiB
JavaScript
'use strict';
|
|
|
|
/**
|
|
* Module dependencies
|
|
*/
|
|
|
|
// Node.js core.
|
|
const path = require('path');
|
|
|
|
// Public node modules.
|
|
const _ = require('lodash');
|
|
const async = require('async');
|
|
|
|
// Local utilities.
|
|
const dictionary = require('../../../../util/dictionary');
|
|
|
|
/**
|
|
* Async module loader to create a
|
|
* dictionary of the user config
|
|
*/
|
|
|
|
module.exports = function (strapi) {
|
|
const hook = {
|
|
|
|
/**
|
|
* Initialize the hook
|
|
*/
|
|
|
|
initialize: function (cb) {
|
|
async.auto({
|
|
|
|
// Load common settings from `./config/*.js|json`.
|
|
'config/*': function (cb) {
|
|
dictionary.aggregate({
|
|
dirname: path.resolve(strapi.config.appPath, strapi.config.paths.config),
|
|
excludeDirs: /(locales|environments)$/,
|
|
filter: /(.+)\.(js|json)$/,
|
|
depth: 2
|
|
}, cb);
|
|
},
|
|
|
|
// Load locales from `./config/locales/*.json`.
|
|
'config/locales/*': function (cb) {
|
|
dictionary.optional({
|
|
dirname: path.resolve(strapi.config.appPath, strapi.config.paths.config, 'locales'),
|
|
filter: /(.+)\.(json)$/,
|
|
identity: false,
|
|
depth: 1
|
|
}, cb);
|
|
},
|
|
|
|
// Load functions config from `./config/functions/*.js`.
|
|
'config/functions/*': function (cb) {
|
|
dictionary.aggregate({
|
|
dirname: path.resolve(strapi.config.appPath, strapi.config.paths.config, 'functions'),
|
|
filter: /(.+)\.(js)$/,
|
|
depth: 1
|
|
}, cb);
|
|
},
|
|
|
|
// Load all environments config from `./config/environments/*/*.js|json`.
|
|
// Not really used inside the framework but useful for the Studio.
|
|
'config/environments/**': function (cb) {
|
|
dictionary.optional({
|
|
dirname: path.resolve(strapi.config.appPath, strapi.config.paths.config, 'environments'),
|
|
filter: /(.+)\.(js|json)$/,
|
|
identity: false,
|
|
depth: 4
|
|
}, cb);
|
|
},
|
|
|
|
// Load environment-specific config from `./config/environments/**/*.js|json`.
|
|
'config/environments/*': function (cb) {
|
|
dictionary.aggregate({
|
|
dirname: path.resolve(strapi.config.appPath, strapi.config.paths.config, 'environments', strapi.config.environment),
|
|
filter: /(.+)\.(js|json)$/,
|
|
depth: 1
|
|
}, cb);
|
|
},
|
|
|
|
// Load APIs from `./api/**/*.js|json`.
|
|
'api/**': function (cb) {
|
|
dictionary.optional({
|
|
dirname: path.resolve(strapi.config.appPath, strapi.config.paths.api),
|
|
excludeDirs: /(public)$/,
|
|
filter: /(.+)\.(js|json)$/,
|
|
depth: 4
|
|
}, cb);
|
|
}
|
|
},
|
|
|
|
// Callback.
|
|
function (err, config) {
|
|
|
|
// Just in case there is an error.
|
|
if (err) {
|
|
return cb(err);
|
|
}
|
|
|
|
// Merge every user config together.
|
|
const mergedConfig = _.merge(
|
|
config['config/*'],
|
|
config['config/environments/*'],
|
|
config['config/functions/*']
|
|
);
|
|
|
|
// Remove cache.
|
|
delete require.cache[path.resolve(strapi.config.appPath, 'package.json')];
|
|
|
|
// Local `package.json`.
|
|
const packageJSON = require(path.resolve(strapi.config.appPath, 'package.json'));
|
|
|
|
// Merge default config and user loaded config together inside `strapi.config`.
|
|
strapi.config = _.merge(strapi.config, mergedConfig, packageJSON);
|
|
|
|
// Expose user APIs.
|
|
strapi.api = config['api/**'];
|
|
|
|
// Add user locales for the settings of the `i18n` hook
|
|
// aiming to load locales automatically.
|
|
if (_.isPlainObject(strapi.config.i18n) && !_.isEmpty(strapi.config.i18n)) {
|
|
strapi.config.i18n.locales = [];
|
|
_.forEach(config['config/locales/*'], function (strings, lang) {
|
|
strapi.config.i18n.locales.push(lang);
|
|
});
|
|
}
|
|
|
|
// Save different environments because we need it in the Strapi Studio.
|
|
strapi.config.environments = config['config/environments/**'] || {};
|
|
|
|
// Make the application name in config match the server one.
|
|
strapi.app.name = strapi.config.name;
|
|
|
|
// Initialize empty API objects.
|
|
strapi.controllers = {};
|
|
strapi.models = {};
|
|
strapi.policies = {};
|
|
|
|
cb();
|
|
});
|
|
},
|
|
|
|
/**
|
|
* Reload the hook
|
|
*/
|
|
|
|
reload: function () {
|
|
hook.initialize(function (err) {
|
|
if (err) {
|
|
strapi.log.error('Failed to reinitialize the config hook.');
|
|
strapi.stop();
|
|
} else {
|
|
strapi.emit('hook:_config:reloaded');
|
|
}
|
|
});
|
|
}
|
|
};
|
|
|
|
return hook;
|
|
};
|