Skip to content

Commit 7111897

Browse files
committed
feat: added type safety env resolver
1 parent 9535fbb commit 7111897

File tree

5 files changed

+53
-2
lines changed

5 files changed

+53
-2
lines changed

.env.sample

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
NODE_ENV=DEVELOPMENT
2+
PORT=5000

package.json

+3-1
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,10 @@
4343
"typescript-eslint": "^8.29.1"
4444
},
4545
"dependencies": {
46+
"dotenv": "^16.5.0",
4647
"module-alias": "^2.2.3",
47-
"winston": "^3.17.0"
48+
"winston": "^3.17.0",
49+
"zod": "^3.24.3"
4850
},
4951
"_moduleAliases": {
5052
"@": "./build"

pnpm-lock.yaml

+17
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/index.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import "module-alias/register"; // Register alias for @/ directory
22
import logger from "@/lib/logger";
33

4-
logger.info("Hello TypeScript!");
4+
import { env } from "./lib/env.config";
5+
6+
logger.info(`Hello TypeScript From Port ${env.PORT}!`);

src/lib/env.config.ts

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import path from "path";
2+
3+
import { config } from "dotenv";
4+
import { z } from "zod";
5+
6+
import logger from "./logger";
7+
8+
// Load environment variables from .env file
9+
config({ path: path.resolve(process.cwd(), ".env") });
10+
11+
// Define the environment schema
12+
const envSchema = z.object({
13+
// Required variables
14+
NODE_ENV: z.enum(["DEVELOPMENT", "PRODUCTION"]),
15+
PORT: z.string().transform((val) => parseInt(val, 10)),
16+
});
17+
18+
// Parse and validate environment variables
19+
const envParse = envSchema.safeParse(process.env);
20+
21+
if (!envParse.success) {
22+
logger.error("❌ Invalid environment variables:");
23+
logger.error(envParse.error.format());
24+
throw new Error("Invalid environment variables");
25+
}
26+
27+
// Export validated environment variables
28+
export const env = envParse.data;

0 commit comments

Comments
 (0)