gofigure
Version:
Configuration library for node
38 lines (33 loc) • 1.13 kB
JavaScript
const _ = require('lodash');
// eslint-disable-next-line consistent-return
const customizer = (objValue, sourceValue) => {
if (Array.isArray(objValue)) {
return sourceValue;
}
};
const selectConfig = (originalConfig, env, defaultEnv, nodeType) => {
if (!env) {
return originalConfig;
}
const config = {};
if (_.has(originalConfig, defaultEnv) || _.has(originalConfig, env)) {
if (defaultEnv && _.has(originalConfig, defaultEnv)) {
_.merge(config, originalConfig[defaultEnv]);
}
if (env && _.has(originalConfig, env)) {
_.merge(config, originalConfig[env], customizer);
}
if (_.has(originalConfig, `type.${env}.${nodeType}`)) {
_.merge(config, _.get(originalConfig, `type.${env}.${nodeType}`), customizer);
}
}
return config;
};
const selector = (config, opts) => {
const options = opts || {};
const defaultEnvironment = options.defaultEnvironment || null;
const environment = options.environment || null;
const nodeType = options.nodeType || null;
return selectConfig(config, environment, defaultEnvironment, nodeType);
};
module.exports = selector;