feat: implement unified configuration as single source of truth

- Make unified config lazy-loaded to avoid initialization issues
- Replace direct config exports with getter functions
- Rewrite utils/env.ts to use unified config instead of scattered access
- Add show-config.js helper script for configuration management
- Type-safe configuration access throughout the app
- Smart defaults for all environments with environment overrides
- Eliminates scattered process.env and import.meta.env access
This commit is contained in:
William Valentin
2025-09-08 21:23:44 -07:00
parent 8830842ba2
commit b59160eb10
3 changed files with 330 additions and 89 deletions

View File

@@ -809,24 +809,33 @@ export function createUnifiedConfigForEnvironment(
}
/**
* Singleton configuration instance
* Lazy-loaded singleton configuration instance
*/
export const unifiedConfig = createUnifiedConfig();
let _unifiedConfig: UnifiedConfig | null = null;
export const unifiedConfig: UnifiedConfig = new Proxy({} as UnifiedConfig, {
get(target, prop) {
if (!_unifiedConfig) {
_unifiedConfig = createUnifiedConfig();
}
return _unifiedConfig[prop as keyof UnifiedConfig];
},
});
/**
* Export specific configuration sections for convenience
*/
export const appConfig = unifiedConfig.app;
export const databaseConfig = unifiedConfig.database;
export const containerConfig = unifiedConfig.container;
export const kubernetesConfig = unifiedConfig.kubernetes;
export const authConfig = unifiedConfig.auth;
export const emailConfig = unifiedConfig.email;
export const oauthConfig = unifiedConfig.oauth;
export const featureFlags = unifiedConfig.features;
export const performanceConfig = unifiedConfig.performance;
export const loggingConfig = unifiedConfig.logging;
export const securityConfig = unifiedConfig.security;
export const getAppConfig = () => unifiedConfig.app;
export const getDatabaseConfig = () => unifiedConfig.database;
export const getContainerConfig = () => unifiedConfig.container;
export const getKubernetesConfig = () => unifiedConfig.kubernetes;
export const getAuthConfig = () => unifiedConfig.auth;
export const getEmailConfig = () => unifiedConfig.email;
export const getOAuthConfig = () => unifiedConfig.oauth;
export const getFeatureFlags = () => unifiedConfig.features;
export const getPerformanceConfig = () => unifiedConfig.performance;
export const getLoggingConfig = () => unifiedConfig.logging;
export const getSecurityConfig = () => unifiedConfig.security;
/**
* Utility functions