Co-authored-by: Neko Ayaka <neko@ayaka.moe> Co-authored-by: Lovehsigure_520 <1260907335@qq.com>
30 lines
1.0 KiB
TypeScript
30 lines
1.0 KiB
TypeScript
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<typeof EnvSchema>
|
|
|
|
export function parseEnv(inputEnv: Record<string, string> | 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))
|