UNPKG

dotenv-extended

Version:

A module for loading .env files and optionally loading defaults and a schema for validating all values are present.

106 lines (88 loc) 3.48 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = exports.load = exports.config = exports.parse = void 0; var _dotenv = _interopRequireDefault(require("dotenv")); var _configFromEnv = _interopRequireDefault(require("./utils/config-from-env")); var _loadEnvironmentFile = _interopRequireDefault(require("./utils/load-environment-file")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } /** * Created by Keith Morris on 2/9/16. */ var parse = _dotenv["default"].parse.bind(_dotenv["default"]); exports.parse = parse; var config = function config(options) { var defaultsData, environmentData, defaultOptions = { encoding: 'utf8', silent: true, path: '.env', defaults: '.env.defaults', schema: '.env.schema', errorOnMissing: false, errorOnExtra: false, errorOnRegex: false, includeProcessEnv: false, assignToProcessEnv: true, overrideProcessEnv: false }, processEnvOptions = (0, _configFromEnv["default"])(process.env); options = Object.assign({}, defaultOptions, processEnvOptions, options); defaultsData = (0, _loadEnvironmentFile["default"])(options.defaults, options.encoding, options.silent); environmentData = (0, _loadEnvironmentFile["default"])(options.path, options.encoding, options.silent); var configData = Object.assign({}, defaultsData, environmentData); var config = options.includeProcessEnv ? Object.assign({}, configData, process.env) : configData; var configOnlyKeys = Object.keys(configData); var configKeys = Object.keys(config); if (options.errorOnMissing || options.errorOnExtra || options.errorOnRegex) { var schema = (0, _loadEnvironmentFile["default"])(options.schema, options.encoding, options.silent); var schemaKeys = Object.keys(schema); var missingKeys = schemaKeys.filter(function (key) { return configKeys.indexOf(key) < 0; }); var extraKeys = configOnlyKeys.filter(function (key) { return schemaKeys.indexOf(key) < 0; }); if (options.errorOnMissing && missingKeys.length) { throw new Error('MISSING CONFIG VALUES: ' + missingKeys.join(', ')); } if (options.errorOnExtra && extraKeys.length) { throw new Error('EXTRA CONFIG VALUES: ' + extraKeys.join(', ')); } if (options.errorOnRegex) { var regexMismatchKeys = schemaKeys.filter(function (key) { if (schema[key]) { return !new RegExp(schema[key]).test(typeof config[key] === 'string' ? config[key] : ''); } }); if (regexMismatchKeys.length) { throw new Error('REGEX MISMATCH: ' + regexMismatchKeys.join(', ')); } } } // the returned configData object should include process.env that override if (options.includeProcessEnv && !options.overrideProcessEnv) { for (var i = 0; i < configKeys.length; i++) { if (typeof process.env[configKeys[i]] !== 'undefined') configData[configKeys[i]] = process.env[configKeys[i]]; } } if (options.assignToProcessEnv) { if (options.overrideProcessEnv) { Object.assign(process.env, configData); } else { var tmp = Object.assign({}, configData, process.env); Object.assign(process.env, tmp); } } return configData; }; exports.config = config; var load = config; exports.load = load; var _default = { parse: parse, config: config, load: load }; exports["default"] = _default;