import type { InferOutput } from 'valibot' import { env, exit } from 'node:process' import { useLogger } from '@guiiai/logg' import { injeca } from 'injeca' import { nonEmpty, object, parse, pipe, string } from 'valibot' const EnvSchema = object({ DATABASE_URL: pipe(string(), nonEmpty('DATABASE_URL is required')), AUTH_GOOGLE_CLIENT_ID: pipe(string(), nonEmpty('AUTH_GOOGLE_CLIENT_ID is required')), AUTH_GOOGLE_CLIENT_SECRET: pipe(string(), nonEmpty('AUTH_GOOGLE_CLIENT_SECRET is required')), AUTH_GITHUB_CLIENT_ID: pipe(string(), nonEmpty('AUTH_GITHUB_CLIENT_ID is required')), AUTH_GITHUB_CLIENT_SECRET: pipe(string(), nonEmpty('AUTH_GITHUB_CLIENT_SECRET is required')), }) export type Env = InferOutput export function parseEnv(inputEnv: Record | typeof env): Env { try { return parse(EnvSchema, inputEnv) } catch (err) { useLogger().withError(err).error('Invalid environment variables') exit(1) } } export const parsedEnv = injeca.provide('env', () => parseEnv(env))