hapiest-server
Version:
A wrapper around Hapi.js with a configuration-first approach
97 lines (86 loc) • 3.99 kB
JavaScript
'use strict';
const _ = require('lodash');
const Path = require('path');
const PluginsConfig = require('./pluginsConfig');
const BlippPluginConfig = require('./config/blippPluginConfig');
const GoodPluginConfig = require('./config/goodPluginConfig');
const VisionPluginConfig = require('./config/visionPluginConfig');
const InertPluginConfig = require('./config/inertPluginConfig');
const LoutPluginConfig = require('./config/loutPluginConfig');
const PoopPluginConfig = require('./config/poopPluginConfig');
const HapiRouterPluginConfig = require('./config/hapiRouterPluginConfig');
const HapiRouter_DefaultRoutes = 'app/server/routes/**/*Routes.js';
class PluginsConfigFactory {
/**
* @param {Config} nodeConfig
* @param {string} projectRootDir
* @returns {PluginsConfig}
*/
static createFromNodeConfig(nodeConfig, projectRootDir) {
const config = {};
if (nodeConfig.has('server.plugins.blipp')) {
config.blipp = new BlippPluginConfig(nodeConfig.get('server.plugins.blipp'));
}
if (nodeConfig.has('server.plugins.good')) {
config.good = new GoodPluginConfig(nodeConfig.get('server.plugins.good'));
}
if (nodeConfig.has('server.plugins.vision')) {
config.vision = new VisionPluginConfig(nodeConfig.get('server.plugins.vision'));
}
if (nodeConfig.has('server.plugins.inert')) {
config.inert = new InertPluginConfig(nodeConfig.get('server.plugins.inert'));
}
if (nodeConfig.has('server.plugins.lout')) {
config.lout = new LoutPluginConfig(nodeConfig.get('server.plugins.lout'));
}
if (nodeConfig.has('server.plugins.poop')) {
const poopConfig = nodeConfig.get('server.plugins.poop');
if (poopConfig.poopFile) {
poopConfig.poopFile = Path.join(projectRootDir, poopConfig.poopFile);
} else {
poopConfig.poopFile = Path.join(projectRootDir, 'poop.log');
}
config.poop = new PoopPluginConfig(poopConfig);
}
const hapiRouterConfigDefaults = {
enabled: true,
routes: 'app/server/routes/**/*Routes.js'
};
let hapiRouterConfig = hapiRouterConfigDefaults;
if (nodeConfig.has('server.plugins.hapiRouter')) {
hapiRouterConfig = _.merge(hapiRouterConfigDefaults, nodeConfig.get('server.plugins.hapiRouter'));
}
hapiRouterConfig.cwd = projectRootDir;
config.hapiRouter = new HapiRouterPluginConfig(hapiRouterConfig);
return PluginsConfigFactory.createFromJsObj(config);
}
/**
* @param {object} config
* @returns {PluginsConfig}
*/
static createFromJsObj(config) {
if (!(config.blipp instanceof BlippPluginConfig)) {
config.blipp = new BlippPluginConfig(config.blipp || {enabled: false});
}
if (!(config.good instanceof GoodPluginConfig)) {
config.good = new GoodPluginConfig(config.good || {enabled: false});
}
if (!(config.vision instanceof VisionPluginConfig)) {
config.vision = new VisionPluginConfig(config.vision || {enabled: false});
}
if (!(config.inert instanceof InertPluginConfig)) {
config.inert = new InertPluginConfig(config.inert || {enabled: false});
}
if (!(config.lout instanceof LoutPluginConfig)) {
config.lout = new LoutPluginConfig(config.lout || {enabled: false});
}
if (!(config.poop instanceof PoopPluginConfig)) {
config.poop = new PoopPluginConfig(config.poop || {enabled: false});
}
if (!(config.hapiRouter instanceof HapiRouterPluginConfig)) {
config.hapiRouter = new HapiRouterPluginConfig(config.hapiRouter || {enabled: true, routes: HapiRouter_DefaultRoutes});
}
return new PluginsConfig(config);
}
}
module.exports = PluginsConfigFactory;