UNPKG

@dbs-portal/core-config

Version:

Advanced configuration management for DBS Portal with convict schema validation and deepmerge support

248 lines (180 loc) โ€ข 6.69 kB
# @dbs-portal/core-config Advanced configuration management for DBS Portal with convict schema validation and deepmerge support. ## Features - ๐Ÿ”’ **Type-safe configuration** with TypeScript support - โœ… **Schema validation** using convict for robust configuration validation - ๐Ÿ”„ **Intelligent merging** with deepmerge for complex configuration scenarios - ๐ŸŒ **Multiple providers** for loading configuration from various sources - ๐Ÿ”ง **Environment-specific** configurations with validation - ๐Ÿ“ฆ **Modular architecture** with clean separation of concerns - ๐Ÿงช **Comprehensive testing** with full test coverage ## Installation ```bash yarn add @dbs-portal/core-config ``` ## Quick Start ```typescript import { ConfigManager, EnhancedObjectProvider, ConvictValidator } from '@dbs-portal/core-config' // Create configuration providers const defaultProvider = EnhancedObjectProvider.development() const envProvider = EnhancedEnvironmentProvider.withValidation() // Create configuration manager const configManager = new ConfigManager({ providers: [defaultProvider, envProvider], validators: [new ConvictValidator()], validateOnLoad: true, mergeStrategy: 'deep' }) // Load and validate configuration const config = await configManager.load() console.log('Configuration loaded:', config) ``` ## Core Components ### Convict Schema Validation The package uses convict for robust schema validation with custom formats: ```typescript import { loadAndValidateConfig, getValidatedConfig } from '@dbs-portal/core-config/schemas' // Load and validate configuration const config = loadAndValidateConfig({ env: 'production', port: 8080, database: { host: 'prod-db.example.com', port: 5432 } }) // Get default validated configuration const defaults = getValidatedConfig() ``` ### Enhanced Providers #### EnhancedEnvironmentProvider Comprehensive environment variable mapping with type coercion: ```typescript import { EnhancedEnvironmentProvider } from '@dbs-portal/core-config/providers' // With validation enabled const envProvider = EnhancedEnvironmentProvider.withValidation({ prefix: 'APP', typeCoercion: true }) // For Docker environments const dockerProvider = EnhancedEnvironmentProvider.forDocker() // For Kubernetes environments const k8sProvider = EnhancedEnvironmentProvider.forKubernetes() ``` #### EnhancedObjectProvider Object-based provider with deep cloning and validation: ```typescript import { EnhancedObjectProvider } from '@dbs-portal/core-config/providers' // Environment-specific providers const devProvider = EnhancedObjectProvider.development() const prodProvider = EnhancedObjectProvider.production() const testProvider = EnhancedObjectProvider.testing() // Custom configuration with validation const customProvider = EnhancedObjectProvider.from({ name: 'Custom App', port: 4000 }, { validateWithConvict: true, mergeWithDefaults: true }) ``` ### ConvictValidator Dedicated validator using convict schema: ```typescript import { ConvictValidator } from '@dbs-portal/core-config/validators' const validator = new ConvictValidator() // Validate configuration const result = validator.validate(config) if (!result.isValid) { console.error('Validation errors:', result.errors) } // Validate specific path const pathResult = validator.validatePath(config, 'database.host') // Get schema defaults const defaults = validator.getDefaults() ``` ### Configuration Manager with Deepmerge The ConfigManager uses deepmerge for intelligent configuration merging: ```typescript import { ConfigManager } from '@dbs-portal/core-config/managers' const manager = new ConfigManager({ providers: [baseProvider, overrideProvider], mergeStrategy: 'deep', // or 'shallow' validateOnLoad: true, validateOnChange: true }) // Arrays are replaced, not concatenated // Objects are deeply merged const config = await manager.load() ``` ## Environment-Specific Configurations ```typescript import { createDevelopmentConfig, createProductionConfig, createStagingConfig, createTestConfig, getConfigForEnvironment } from '@dbs-portal/core-config/defaults' // Get configuration for specific environment const devConfig = createDevelopmentConfig() const prodConfig = createProductionConfig() // Get configuration based on NODE_ENV const config = getConfigForEnvironment(process.env.NODE_ENV as Environment) ``` ## Configuration Schema The package includes a comprehensive convict schema covering: - **Application settings** (name, version, port, host) - **Logging configuration** (level, format, file rotation) - **Database settings** (connection, pooling, timeouts) - **Authentication** (JWT, sessions, bcrypt) - **API configuration** (timeouts, retries, CORS) - **Storage providers** (local, S3, Azure, GCP) - **Email providers** (SMTP, SendGrid, Mailgun) - **Monitoring** (Sentry, Prometheus, health checks) - **Feature flags** (LaunchDarkly, local flags) ## Validation Features - **Type validation** with custom formats - **Environment validation** (development, staging, production, test) - **Port validation** with proper ranges - **URL validation** for API endpoints - **Email validation** for email addresses - **Positive integer validation** for counts and timeouts - **Required string validation** for critical fields ## Testing The package includes comprehensive tests covering: ```bash # Run tests yarn test # Run tests with coverage yarn test:coverage # Run tests in watch mode yarn test:watch ``` ## TypeScript Support Full TypeScript support with proper type definitions: ```typescript import type { AppConfig, Environment, ConfigProvider } from '@dbs-portal/core-config/types' // Type-safe configuration access const config: Partial<AppConfig> = await configManager.load() const dbHost: string = config.database?.host ?? 'localhost' ``` ## Package Exports The package provides multiple entry points: - `@dbs-portal/core-config` - Main entry point - `@dbs-portal/core-config/types` - Type definitions - `@dbs-portal/core-config/schemas` - Convict schemas - `@dbs-portal/core-config/providers` - Configuration providers - `@dbs-portal/core-config/validators` - Validation utilities - `@dbs-portal/core-config/managers` - Configuration managers - `@dbs-portal/core-config/defaults` - Default configurations ## Migration from Previous Version The package maintains backward compatibility while adding new features: ```typescript // Old usage still works import { ConfigManager, ObjectProvider } from '@dbs-portal/core-config' // New enhanced usage import { ConfigManager, EnhancedObjectProvider, ConvictValidator } from '@dbs-portal/core-config' ``` ## License MIT