Configuration management and environment handling for the ziegel platform. Provides type-safe configuration, environment variables, secrets management, and dynamic configuration updates for enterprise applications.
Configuration: Enterprise configuration management with type safety, environment handling, and secrets management.
🚀 Overview
@breadstone/ziegel-platform-configuration provides:
- Type-Safe Configuration: Strongly typed configuration schemas
- Environment Management: Multi-environment configuration handling
- Secrets Management: Secure handling of sensitive configuration
- Dynamic Updates: Runtime configuration updates and hot reloading
- Validation: Configuration validation and schema enforcement
- Providers: Multiple configuration sources (files, environment, remote)
- Hierarchical Config: Configuration inheritance and overrides
📦 Installation
bash
npm install @breadstone/ziegel-platform-configuration
# or
yarn add @breadstone/ziegel-platform-configuration🧩 Features & Usage Examples
Type-Safe Configuration
typescript
import { ConfigurationManager, ConfigSchema } from '@breadstone/ziegel-platform-configuration';
interface AppConfig {
database: {
host: string;
port: number;
name: string;
};
api: {
baseUrl: string;
timeout: number;
};
features: {
enableLogging: boolean;
maxRetries: number;
};
}
const schema = new ConfigSchema<AppConfig>();
const config = new ConfigurationManager(schema);
// Get typed configuration
const dbHost = config.get('database.host'); // string
const apiTimeout = config.get('api.timeout'); // numberEnvironment-Based Configuration
typescript
import { EnvironmentProvider, ConfigurationBuilder } from '@breadstone/ziegel-platform-configuration';
const config = new ConfigurationBuilder()
.addJsonFile('appsettings.json')
.addJsonFile(`appsettings.${process.env.NODE_ENV}.json`, { optional: true })
.addEnvironmentVariables()
.build();
// Environment-specific values
const connectionString = config.get('database.connectionString');Configuration Providers
typescript
import {
JsonFileProvider,
EnvironmentProvider,
RemoteConfigProvider,
CompositeProvider,
} from '@breadstone/ziegel-platform-configuration';
// Multiple configuration sources
const providers = new CompositeProvider([
new JsonFileProvider('config/default.json'),
new EnvironmentProvider({ prefix: 'APP_' }),
new RemoteConfigProvider('https://config-service.com/api/config'),
]);
const config = new ConfigurationManager(providers);Secrets Management
typescript
import { SecretsManager, VaultProvider } from '@breadstone/ziegel-platform-configuration';
const vaultProvider = new VaultProvider({
endpoint: 'https://vault.company.com',
token: process.env.VAULT_TOKEN,
});
const secrets = new SecretsManager(vaultProvider);
// Get secrets securely
const dbPassword = await secrets.get('database/password');
const apiKey = await secrets.get('external-services/api-key');Dynamic Configuration
typescript
import { DynamicConfigManager, ConfigWatcher } from '@breadstone/ziegel-platform-configuration';
const dynamicConfig = new DynamicConfigManager();
// Watch for configuration changes
dynamicConfig.watch('feature-flags', (newValue) => {
console.log('Feature flags updated:', newValue);
});
// Hot reload configuration
const watcher = new ConfigWatcher('config/');
watcher.onChange(() => {
dynamicConfig.reload();
});Configuration Validation
typescript
import { ConfigValidator, ValidationRule } from '@breadstone/ziegel-platform-configuration';
const validator = new ConfigValidator();
// Add validation rules
validator.addRule('database.port', ValidationRule.range(1, 65535));
validator.addRule('api.baseUrl', ValidationRule.url());
validator.addRule('features.maxRetries', ValidationRule.min(0));
// Validate configuration
const errors = validator.validate(config);
if (errors.length > 0) {
throw new Error(`Configuration validation failed: ${errors.join(', ')}`);
}Configuration Binding
typescript
import { ConfigurationBinder, bindConfiguration } from '@breadstone/ziegel-platform-configuration';
class DatabaseSettings {
host!: string;
port!: number;
database!: string;
username!: string;
password!: string;
}
// Bind configuration to class
const dbSettings = new DatabaseSettings();
bindConfiguration('database', dbSettings, config);
// Or use decorator
class ApiSettings {
@bindConfiguration('api.baseUrl')
baseUrl!: string;
@bindConfiguration('api.timeout')
timeout!: number;
}📚 Package import points
typescript
import {
// Core Configuration
ConfigurationManager,
ConfigurationBuilder,
ConfigSchema,
// Providers
JsonFileProvider,
EnvironmentProvider,
RemoteConfigProvider,
CompositeProvider,
// Secrets Management
SecretsManager,
VaultProvider,
// Dynamic Configuration
DynamicConfigManager,
ConfigWatcher,
// Validation
ConfigValidator,
ValidationRule,
// Binding
ConfigurationBinder,
bindConfiguration,
} from '@breadstone/ziegel-platform-configuration';📚 API Documentation
Related Packages
- @breadstone/ziegel-platform: Core platform services
- @breadstone/ziegel-core: Foundation utilities
- @breadstone/ziegel-platform-logging: Logging configuration
License
MIT
Issues
Please report bugs and feature requests in the Issue Tracker
Part of the ziegel Enterprise TypeScript Framework