From 9d5fb821c75dd2f0c0d3da6fb427db966d3c7358 Mon Sep 17 00:00:00 2001 From: tranminhquang Date: Tue, 15 Jul 2025 13:29:16 +0700 Subject: [PATCH] feat: integrate @t3-oss/env for environment variable management across the application --- apps/web/drizzle.config.ts | 11 +++----- apps/web/package.json | 2 ++ apps/web/src/components/development-debug.tsx | 3 ++- apps/web/src/components/header.tsx | 3 ++- apps/web/src/env.ts | 27 +++++++++++++++++++ apps/web/src/lib/rate-limit.ts | 5 ++-- apps/web/src/middleware.ts | 3 ++- packages/auth/package.json | 9 ++++--- packages/auth/src/client.ts | 7 +++-- packages/auth/src/index.ts | 5 +++- packages/auth/src/keys.ts | 20 ++++++++++++++ packages/auth/src/server.ts | 11 +++++--- packages/db/drizzle.config.ts | 15 +++++------ packages/db/package.json | 7 +++-- packages/db/src/index.ts | 8 +++--- packages/db/src/keys.ts | 19 +++++++++++++ 16 files changed, 118 insertions(+), 37 deletions(-) create mode 100644 apps/web/src/env.ts create mode 100644 packages/auth/src/keys.ts create mode 100644 packages/db/src/keys.ts diff --git a/apps/web/drizzle.config.ts b/apps/web/drizzle.config.ts index 615eea57..87547bd0 100644 --- a/apps/web/drizzle.config.ts +++ b/apps/web/drizzle.config.ts @@ -1,23 +1,20 @@ import type { Config } from "drizzle-kit"; import * as dotenv from "dotenv"; +import { env } from "@/env"; // Load the right env file based on environment -if (process.env.NODE_ENV === "production") { +if (env.NODE_ENV === "production") { dotenv.config({ path: ".env.production" }); } else { dotenv.config({ path: ".env.local" }); } -if (!process.env.DATABASE_URL) { - throw new Error("DATABASE_URL is not set"); -} - export default { schema: "../../packages/db/src/schema.ts", dialect: "postgresql", dbCredentials: { - url: process.env.DATABASE_URL, + url: env.DATABASE_URL, }, out: "./migrations", - strict: process.env.NODE_ENV === "production", + strict: env.NODE_ENV === "production", } satisfies Config; diff --git a/apps/web/package.json b/apps/web/package.json index 9e1393b7..b7bbc499 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -21,6 +21,8 @@ "@hookform/resolvers": "^3.9.1", "@opencut/auth": "workspace:*", "@opencut/db": "workspace:*", + "@t3-oss/env-core": "^0.13.8", + "@t3-oss/env-nextjs": "^0.13.8", "@upstash/ratelimit": "^2.0.5", "@upstash/redis": "^1.35.0", "@vercel/analytics": "^1.4.1", diff --git a/apps/web/src/components/development-debug.tsx b/apps/web/src/components/development-debug.tsx index 3b891e38..62e606ff 100644 --- a/apps/web/src/components/development-debug.tsx +++ b/apps/web/src/components/development-debug.tsx @@ -7,9 +7,10 @@ import { usePlaybackStore } from "@/stores/playback-store"; import { Button } from "@/components/ui/button"; import { useState } from "react"; import type { TimelineElement } from "@/types/timeline"; +import { env } from "@/env"; // Only show in development -const SHOW_DEBUG_INFO = process.env.NODE_ENV === "development"; +const SHOW_DEBUG_INFO = env.NODE_ENV === "development"; interface ActiveElement { element: TimelineElement; diff --git a/apps/web/src/components/header.tsx b/apps/web/src/components/header.tsx index bfe314d6..455e0140 100644 --- a/apps/web/src/components/header.tsx +++ b/apps/web/src/components/header.tsx @@ -8,6 +8,7 @@ import { useSession } from "@opencut/auth/client"; import { getStars } from "@/lib/fetch-github-stars"; import { useEffect, useState } from "react"; import Image from "next/image"; +import { env } from "@/env"; export function Header() { const { data: session } = useSession(); @@ -40,7 +41,7 @@ export function Header() { Contributors - {process.env.NODE_ENV === "development" ? ( + {env.NODE_ENV === "development" ? (