ts-appconfig
Version:
Strongly Typed DotENV - Environment Variables
62 lines • 2.35 kB
JavaScript
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
;