import { createEnv } from "@t3-oss/env-core"; import { z } from "zod"; const redisConnectionRegex = /^((?.*?):(?.*?)@)?(?.*?):(?\d+)$/; export const env = createEnv({ server: { IS_PROD: z .boolean() .default(false) .transform( () => process.env.BUN_ENV === "production" || process.env.NODE_ENV === "production" ), IS_DEV: z .boolean() .default(false) .transform( () => process.env.BUN_ENV === "development" || process.env.NODE_ENV === "development" ), VERSION: z.string().min(1).default("development"), PORT: z.coerce.number().default(3001), REDIS_CONNECTION: z.string().regex(redisConnectionRegex), PRIMARY_API_KEY: process.env.NODE_ENV === "development" ? z.string().optional() : z.string().min(10), SECONDARY_API_KEY: process.env.NODE_ENV === "development" ? z.string().optional() : z.string().min(10), }, runtimeEnv: { ...process.env, }, }); const redisMatch = env.REDIS_CONNECTION.match(redisConnectionRegex); if (!redisMatch?.groups) { throw new Error("Invalid REDIS_CONNECTION format"); } export const redisConfig = { host: redisMatch.groups.host, port: Number(redisMatch.groups.port), username: redisMatch.groups.username, password: redisMatch.groups.password, }; console.log("env", env); console.log("redisConfig", redisConfig);