function getEnvironmentVariable( key: string, defaultValue: T, formatter?: (data: string) => T, ): T { const value = process.env[key]; if (value === undefined) return defaultValue; if (formatter) return formatter(value); return value as T; } function getEnvironmentVariableOrThrow( key: string, formatter?: (data: string) => T, ): T { const value = process.env[key]; if (value === undefined) throw new Error(`Missing environment variable: ${key}`); if (formatter) return formatter(value); return value as T; } const PORT = getEnvironmentVariableOrThrow("PORT", (data) => Number.parseInt(data, 10), ); const HMR_PORT = getEnvironmentVariableOrThrow("HMR_PORT", (data) => Number.parseInt(data, 10), ); const BASE_URL = getEnvironmentVariable( "BASE_URL", `http://localhost:${PORT}`, ); const NODE_ENV = getEnvironmentVariable("NODE_ENV", "development"); export const config = { PORT, HMR_PORT, BASE_URL, NODE_ENV, };