@snow-tzu/type-config
Version:
Core configuration management system with Spring Boot-like features
63 lines (62 loc) • 1.91 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ConfigurationBuilder = void 0;
const config_manager_1 = require("./config-manager");
const container_1 = require("./container");
class ConfigurationBuilder {
constructor() {
this.options = {};
this.configClasses = [];
}
withProfile(profile) {
this.options.profile = profile;
return this;
}
withConfigDir(dir) {
this.options.configDir = dir;
return this;
}
withEnvPrefix(prefix) {
this.options.envPrefix = prefix;
return this;
}
withEncryption(key) {
this.options.encryptionKey = key;
return this;
}
withValidation(enabled = true) {
this.options.validateOnBind = enabled;
return this;
}
addSource(source) {
if (!this.options.additionalSources) {
this.options.additionalSources = [];
}
this.options.additionalSources.push(source);
return this;
}
registerConfig(ConfigClass) {
this.configClasses.push(ConfigClass);
return this;
}
registerConfigs(configClasses) {
this.configClasses.push(...configClasses);
return this;
}
async build() {
const configManager = new config_manager_1.ConfigManager(this.options);
await configManager.initialize();
const container = new container_1.Container();
container.setConfigManager(configManager);
for (const ConfigClass of this.configClasses) {
container.registerConfig(ConfigClass);
}
return { configManager, container };
}
async buildConfigOnly() {
const configManager = new config_manager_1.ConfigManager(this.options);
await configManager.initialize();
return configManager;
}
}
exports.ConfigurationBuilder = ConfigurationBuilder;