UNPKG

@strattadb/environment

Version:

Environment variable configuration for Node.js made easy.

61 lines (47 loc) 1.66 kB
"use strict"; 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