103 lines
2.4 KiB
TypeScript
103 lines
2.4 KiB
TypeScript
// Environment configuration for React frontend
|
|
export type Environment = 'development' | 'staging' | 'production';
|
|
|
|
export interface AppConfig {
|
|
environment: Environment;
|
|
apiUrl: string;
|
|
debug: boolean;
|
|
logLevel: string;
|
|
}
|
|
|
|
// Get environment from process.env
|
|
export const getEnvironment = (): Environment => {
|
|
const env = process.env.REACT_APP_ENVIRONMENT as Environment;
|
|
|
|
// Fallback to NODE_ENV if REACT_APP_ENVIRONMENT is not set
|
|
if (!env) {
|
|
const nodeEnv = process.env.NODE_ENV;
|
|
switch (nodeEnv) {
|
|
case 'production':
|
|
return 'production';
|
|
case 'development':
|
|
return 'development';
|
|
default:
|
|
return 'development';
|
|
}
|
|
}
|
|
|
|
return env;
|
|
};
|
|
|
|
// Get API URL based on environment
|
|
export const getApiUrl = (): string => {
|
|
const apiUrl = process.env.REACT_APP_API_URL;
|
|
|
|
if (apiUrl) {
|
|
return apiUrl;
|
|
}
|
|
|
|
// Fallback based on environment
|
|
const env = getEnvironment();
|
|
switch (env) {
|
|
case 'production':
|
|
return '/api/v1'; // Relative URL for production
|
|
case 'staging':
|
|
return 'https://staging-api.yourdomain.com/api/v1';
|
|
case 'development':
|
|
default:
|
|
return 'http://localhost:8080/api/v1';
|
|
}
|
|
};
|
|
|
|
// Get debug flag
|
|
export const isDebugMode = (): boolean => {
|
|
const debug = process.env.REACT_APP_DEBUG;
|
|
if (debug !== undefined) {
|
|
return debug === 'true';
|
|
}
|
|
|
|
// Fallback based on environment
|
|
return getEnvironment() === 'development';
|
|
};
|
|
|
|
// Get log level
|
|
export const getLogLevel = (): string => {
|
|
return process.env.REACT_APP_LOG_LEVEL || 'info';
|
|
};
|
|
|
|
// Get complete app configuration
|
|
export const getAppConfig = (): AppConfig => {
|
|
return {
|
|
environment: getEnvironment(),
|
|
apiUrl: getApiUrl(),
|
|
debug: isDebugMode(),
|
|
logLevel: getLogLevel(),
|
|
};
|
|
};
|
|
|
|
// Environment checks
|
|
export const isDevelopment = (): boolean => {
|
|
return getEnvironment() === 'development';
|
|
};
|
|
|
|
export const isStaging = (): boolean => {
|
|
return getEnvironment() === 'staging';
|
|
};
|
|
|
|
export const isProduction = (): boolean => {
|
|
return getEnvironment() === 'production';
|
|
};
|
|
|
|
// Log configuration (only in development)
|
|
export const logConfig = (): void => {
|
|
if (isDevelopment()) {
|
|
const config = getAppConfig();
|
|
console.log('🚀 Frontend Configuration:', {
|
|
environment: config.environment,
|
|
apiUrl: config.apiUrl,
|
|
debug: config.debug,
|
|
logLevel: config.logLevel,
|
|
});
|
|
}
|
|
};
|