UNPKG

@snow-tzu/type-config

Version:

Core configuration management system with Spring Boot-like features

63 lines (62 loc) 1.91 kB
"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;