i-do-config
Version:
Provide app configuration as key-value pairs from multiple providers. Inspired by ASP.net Core
62 lines • 2.3 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
class Configuration {
constructor(configValueProviders = []) {
this.configValueProviders = configValueProviders;
}
//#region Public methods
/**
* Get a section from configured value providers. Later providers overwrite
* values with the same key.
*
* @param key The key for wich to get the section
*/
getSection(key) {
let section = {};
for (const provider of this.configValueProviders) {
// Merge provider section with existing values
section = Object.assign({}, section, provider.getSection(key));
}
return section;
}
/**
* Get a value from configuration
*
* @param key The key for which to get value
* @param defaultValue A default value that will be returned when no provider yields a result
* @param preferredProvider Optional. When specified return a value only from this provider
* @return The configuration value for key
*/
getValue(key, defaultValue, preferredProvider) {
let value = defaultValue;
for (const provider of this.configValueProviders) {
const providerValue = provider.getValue(key);
if (provider.name === preferredProvider) {
value = providerValue;
break;
}
if (providerValue != null) {
value = providerValue;
}
}
return value;
}
getValueAsString(key, defaultValue, preferredProvider) {
return `${this.getValue(key, defaultValue, preferredProvider)}`;
}
getValueAsNumber(key, defaultValue, preferredProvider) {
return parseInt(`${this.getValue(key, defaultValue, preferredProvider)}`, 10);
}
getValueAsBoolean(key, defaultValue, preferredProvider) {
const val = this.getValue(key, defaultValue, preferredProvider);
if (val === undefined) {
return;
}
if (`${val}` === "false" || this.getValueAsNumber(key) === 0) {
return false;
}
return !!val;
}
}
exports.Configuration = Configuration;
//# sourceMappingURL=configuration.js.map
;