Added env check on compile time

This commit is contained in:
sianida26 2024-05-29 16:50:46 +07:00
parent 7c03370f53
commit f038485cb7
9 changed files with 41 additions and 17 deletions

View File

@ -1,11 +1,8 @@
import "dotenv/config";
import type { Config } from "drizzle-kit";
import appEnv from "./src/appEnv";
const databaseUrl = process.env.DATABASE_URL;
if (!databaseUrl) {
throw new Error("DATABASE_URL is not set");
}
const databaseUrl = appEnv.DATABASE_URL;
export default {
schema: "./src/drizzle/schema/*",

View File

@ -6,7 +6,8 @@
"db:push": "drizzle-kit push",
"db:seed": "tsx src/drizzle/seed.ts",
"db:migrate": "tsx src/drizzle/migration.ts",
"db:studio": "drizzle-kit studio"
"db:studio": "drizzle-kit studio",
"start": "tsc -p tsconfig.json && tsx src/index.ts"
},
"dependencies": {
"@hono/node-server": "^1.11.1",

View File

@ -0,0 +1,20 @@
import dotenv from "dotenv";
import { z } from "zod";
dotenv.config();
const envSchema = z.object({
APP_PORT: z.coerce.number().int(),
DATABASE_URL: z.string(),
ACCESS_TOKEN_SECRET: z.string(),
REFRESH_TOKEN_SECRET: z.string(),
COOKIE_SECRET: z.string(),
});
const parsedEnv = envSchema.safeParse(process.env);
if (!parsedEnv.success) {
throw new Error(parsedEnv.error.toString());
}
export default parsedEnv.data;

View File

@ -7,10 +7,11 @@ import * as rolesSchema from "./schema/roles";
import * as permissionsToRolesSchema from "./schema/permissionsToRoles";
import * as permissionsToUsersSchema from "./schema/permissionsToUsers";
import * as rolesToUsersSchema from "./schema/rolesToUsers";
import appEnv from "../appEnv";
configDotenv();
const dbUrl = process.env.DATABASE_URL;
const dbUrl = appEnv.DATABASE_URL;
if (!dbUrl) throw new Error("DATABASE_URL is not set");

View File

@ -2,10 +2,11 @@ import { configDotenv } from "dotenv";
import { drizzle } from "drizzle-orm/postgres-js";
import { migrate } from "drizzle-orm/postgres-js/migrator";
import postgres from "postgres";
import appEnv from "../appEnv";
configDotenv();
const dbUrl = process.env.DATABASE_URL;
const dbUrl = appEnv.DATABASE_URL;
if (!dbUrl) throw new Error("DATABASE_URL is not set");

View File

@ -14,6 +14,7 @@ import { logger } from "hono/logger";
import DashboardError from "./errors/DashboardError";
import HonoEnv from "./types/HonoEnv";
import devRoutes from "./routes/dev/route";
import appEnv from "./appEnv";
configDotenv();
@ -27,7 +28,7 @@ const routes = app
})
)
.use(async (c, next) => {
const cookieSecret = process.env.COOKIE_SECRET;
const cookieSecret = appEnv.COOKIE_SECRET;
if (!cookieSecret)
throw new HTTPException(500, {
@ -108,7 +109,7 @@ const routes = app
}
});
const port = +(process.env.APP_PORT ?? 3000);
const port = appEnv.APP_PORT;
console.log(`Server is running on port ${port}`);
serve({

View File

@ -21,6 +21,7 @@ import { permissionsSchema } from "../../drizzle/schema/permissions";
import { SpecificPermissionCode } from "../../data/permissions";
import authInfo from "../../middlewares/authInfo";
import { unauthorized } from "../../errors/DashboardError";
import appEnv from "../../appEnv";
const authRoutes = new Hono<HonoEnv>()
.post(
@ -98,7 +99,7 @@ const authRoutes = new Hono<HonoEnv>()
uid: user[0].users.id,
});
const cookieSecret = process.env.COOKIE_SECRET;
const cookieSecret = appEnv.COOKIE_SECRET;
if (!cookieSecret)
throw new HTTPException(500, {

View File

@ -1,10 +1,9 @@
import jwt from "jsonwebtoken";
import appEnv from "../appEnv";
// Environment variables for secrets, defaulting to a random secret if not set.
const accessTokenSecret =
process.env.ACCESS_TOKEN_SECRET ?? "some-random-secret";
const refreshTokenSecret =
process.env.REFRESH_TOKEN_SECRET ?? "some-very-random-secret";
const accessTokenSecret = appEnv.ACCESS_TOKEN_SECRET;
const refreshTokenSecret = appEnv.REFRESH_TOKEN_SECRET;
// Algorithm to be used for JWT encoding.
const algorithm: jwt.Algorithm = "HS256";

View File

@ -6,6 +6,9 @@
"strict": true,
"types": ["node"],
"jsx": "react-jsx",
"jsxImportSource": "hono/jsx"
}
"jsxImportSource": "hono/jsx",
"noEmit": true,
"skipLibCheck": true
},
"include": ["src/**/*"]
}