@strattadb/environment
Version:
Environment variable configuration for Node.js made easy.
61 lines (47 loc) • 1.66 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.makeEnv = makeEnv;
var _EnvironmentVariableError = _interopRequireDefault(require("./EnvironmentVariableError"));
var _debug = require("./debug");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* Returns an env object based on a schema.
*/
function makeEnv(schema, processEnv = process.env) {
(0, _debug.logDebug)('making env object...');
const env = Object.entries(schema).reduce((acc, [key, schemaEntry]) => {
const value = getValue(key, schemaEntry, processEnv);
return { ...acc,
[key]: value
};
}, {});
(0, _debug.logDebug)('env object ready: %o', env);
return env;
}
function getValue(key, schemaEntry, processEnv) {
const envVarValue = processEnv[schemaEntry.envVarName];
if (envVarValue === undefined) {
if (schemaEntry.required) {
let message = `${schemaEntry.envVarName} is required but is not set`;
if (schemaEntry.description) {
message += `. Variable description: ${schemaEntry.description}`;
}
throw new _EnvironmentVariableError.default(message);
}
return schemaEntry.defaultValue;
}
const value = parseEnvVarValue(key, envVarValue, schemaEntry);
return value;
}
function parseEnvVarValue(key, serializedValue, schemaEntry) {
let value;
try {
value = schemaEntry.parser(serializedValue);
} catch (error) {
throw new _EnvironmentVariableError.default(`${key} has invalid format. Reason: ${error.message}. Got: '${serializedValue}'`);
}
return value;
}
//# sourceMappingURL=environment.js.map