UNPKG

ts-appconfig

Version:

Strongly Typed DotENV - Environment Variables

62 lines 2.35 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.configure = void 0; const undeclared_key_1 = require("./errors/undeclared-key"); const defaults_1 = require("./options/defaults"); const parse_1 = require("./parser/parse"); const read_file_1 = require("./parser/read-file"); const cast_value_1 = require("./parser/cast-value"); const variable_expansion_1 = require("./parser/variable-expansion"); const resolve_options_filepath_1 = require("./options/resolve-options-filepath"); /** * Create and hydrate a Configuration instance * * @param configClass * @param options * @returns Returns the configuration instance */ function configure(configClass, options = null) { // Apply options if (options) { options = Object.assign({}, defaults_1.defaultConfigurationOptions, options); } else { options = Object.assign({}, defaults_1.defaultConfigurationOptions); } // Read vars const file = (0, resolve_options_filepath_1.resolveOptionsFilepath)(options); const lines = (0, read_file_1.readFileLines)(file); const envFileVars = (0, parse_1.parseLines)(lines, options); // Create instance const configInstance = new configClass(); // Check for undeclared variables if (options.allowUndeclared === false) { for (const key of Object.keys(envFileVars)) { if (!(key in configInstance)) { throw new undeclared_key_1.UndeclaredKeyError(`Key "${key}" not specified in config class`); } } } // Hydrate from .env for (const key in envFileVars) { configInstance[key] = (0, cast_value_1.castValue)(envFileVars[key]); } // Hydrate from process.env if (options.fromProcessEnv) { for (const key in process.env) { configInstance[key] = (0, cast_value_1.castValue)(process.env[key]); } } // Variable expansion const expanded = (0, variable_expansion_1.variableExpansion)(configInstance); // Hydrate back to process.env if (options.overwriteProcessEnv) { for (const key in expanded) { process.env[key] = `${expanded[key]}`; } } // Return return expanded; } exports.configure = configure; //# sourceMappingURL=configure.js.map