import { existsSync } from "node:fs"; import { z } from "zod"; if (existsSync(".env")) process.loadEnvFile(".env"); const bool = (fallback) => z .enum(["true", "false", "1", "0"]) .optional() .transform((v) => (v === undefined ? fallback : v === "true" || v === "1")); const schema = z.object({ NODE_ENV: z.enum(["development", "production", "test"]).default("development"), PORT: z.coerce.number().int().default(4000), CORS_ORIGINS: z.string().default(""), TRUST_PROXY: z.coerce.number().int().min(0).default(1), DATABASE_URL: z.string().min(1), JWT_SECRET: z.string().min(32, "JWT_SECRET must be at least 32 characters"), JWT_ACCESS_TTL: z.string().default("15m"), REFRESH_TTL_DAYS: z.coerce.number().int().positive().default(30), COOKIE_SECURE: bool(true), S3_ENDPOINT: z.string().optional(), S3_REGION: z.string().default("us-east-1"), S3_BUCKET: z.string().default("imen-media"), S3_ACCESS_KEY: z.string().default(""), S3_SECRET_KEY: z.string().default(""), S3_FORCE_PATH_STYLE: bool(true), S3_ENSURE_BUCKET: bool(false), MEDIA_PUBLIC_URL: z .string() .default("/media") .transform((v) => v.replace(/\/+$/, "")), WEB_REVALIDATE_URL: z.string().optional(), REVALIDATE_SECRET: z.string().optional(), ADMIN_PHONE: z.string().optional(), ADMIN_PASSWORD: z.string().optional(), ADMIN_NAME: z.string().default("مدیر سایت"), }); const parsed = schema.safeParse(process.env); if (!parsed.success) { console.error("Invalid environment variables:\n" + z.prettifyError(parsed.error)); process.exit(1); } export const env = parsed.data; export const isProd = env.NODE_ENV === "production"; //# sourceMappingURL=env.js.map