detect-environment
Version:
Detect environments in JavaScript similar to the way Laravel does
115 lines (85 loc) • 2.55 kB
JavaScript
var
//
findAliasName = require('./findAliasName'),
getArgv = require('./getArgv'),
getNodeEnv = require('./getNodeEnv'),
/**
*
*/
getEnvObj = function getEnvObj (options) {
//
if (!options.fallback || typeof options.fallback !== 'string') {
throw new TypeError('getEnvObj:');
}
//
if (options.shell !== true && options.shell !== false) {
throw new TypeError('getEnvObj:');
}
var
//
argv = getArgv(),
//
envData = {},
//
envName = options.fallback,
//
nodeEnv = getNodeEnv(),
//
callbackResult;
//
if (options.shell && nodeEnv && typeof nodeEnv === 'string') {
envName = nodeEnv;
}
//
if (argv.env && typeof argv.env === 'string') {
envName = argv.env;
}
//
if (typeof options.callback === 'function') {
//
callbackResult = options.callback(envName, envData);
//
switch (typeof callbackResult) {
//
case 'undefined':
// noop
//
break;
case 'string':
//
if (!callbackResult) {
throw new TypeError('getEnvObj:');
}
//
envName = callbackResult;
//
break;
case 'object':
//
if (!callbackResult.name || typeof callbackResult.name !== 'string') {
throw new TypeError('getEnvObj:');
}
//
if (Object.prototype.toString.call(callbackResult.data) !== '[object Object]') {
throw new TypeError('getEnvObj:');
}
//
envData = callbackResult.data;
envName = callbackResult.name;
//
break;
default:
throw new TypeError('getEnvObj:');
}
}
//
envName = findAliasName(options, envName);
//
return {
'data' : envData,
'name' : envName
};
};
// Expose to node.js
module.exports = getEnvObj;
;