44 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
module.exports = (opts, envKey) => {
 | 
						|
	const
 | 
						|
		fs = require('fs'),
 | 
						|
		path = require('path'),
 | 
						|
 | 
						|
		json5 = require('json5'),
 | 
						|
 | 
						|
		{ convertCamelToUpperSnakeCase, readJsonIfExists } = require('./utils'),
 | 
						|
 | 
						|
		{ cwd, env } = process,
 | 
						|
 | 
						|
		def = readJsonIfExists(path.resolve(__dirname, 'defaults.json5')),
 | 
						|
 | 
						|
		// gets value from ENV || options || defaults (in that order)
 | 
						|
		getVal = (envName) => {
 | 
						|
			const snakeEnvName = `${envKey}_${convertCamelToUpperSnakeCase(envName)}`;
 | 
						|
			if (env[snakeEnvName]) return env[snakeEnvName];
 | 
						|
			if (opts[envName]) return opts[envName];
 | 
						|
			return def[envName];
 | 
						|
		},
 | 
						|
 | 
						|
		// gets array from ENV || options || defaults (in that order)
 | 
						|
		getArray = (envName, optName = '') => {
 | 
						|
			if (optName === '') {
 | 
						|
				optName = envName;
 | 
						|
				envName = convertCamelToUpperSnakeCase(envName);
 | 
						|
			}
 | 
						|
			envName = `${envKey}_${envName}`;
 | 
						|
			if (env[envName]) return env[envName].split(path.delimiter);
 | 
						|
			if (Array.isArray(opts[optName]) && opts[optName].length) return opts[optName];
 | 
						|
			return def[optName];
 | 
						|
		};
 | 
						|
 | 
						|
		
 | 
						|
	return {
 | 
						|
 | 
						|
		...Object.keys(def).reduce((acc, curr) => {
 | 
						|
			if (Array.isArray(def[curr])) acc[curr] = getArray(curr);
 | 
						|
			else acc[curr] = getVal(curr);
 | 
						|
			return acc;
 | 
						|
		}, {}),
 | 
						|
	};
 | 
						|
};
 |