Botanica/apps/server/src/config.ts

29 lines
824 B
TypeScript

import { z } from "zod";
export function readConfig(env: NodeJS.ProcessEnv) {
const c = z
.object({
DATABASE_URL: z.string().min(1),
PORT: z.coerce.number().int().min(1).max(65535).default(3000),
HOST_PORT: z.coerce.number().int().min(1).max(65535).default(8155),
PUBLIC_DOMAIN: z.string().url().default("http://localhost"),
})
.parse(env);
const origin = new URL(c.PUBLIC_DOMAIN);
if (
origin.port ||
origin.pathname !== "/" ||
origin.search ||
origin.hash ||
origin.username ||
origin.password
)
throw new Error("PUBLIC_DOMAIN must be an origin without port");
return {
...c,
PUBLIC_BASE_URL: ["localhost", "127.0.0.1", "[::1]"].includes(
origin.hostname,
)
? origin.origin + ":" + c.HOST_PORT
: origin.origin,
};
}