import { createEnv } from "@t3-oss/env-core"; import { z } from "astro:content"; export const env = createEnv({ server: { TRUSTED_KEYS_DIR: z.string().superRefine((val, ctx) => { let url: URL; const cwd = new URL(`file://${Deno.cwd()}/`); try { url = new URL(val, cwd); } catch { ctx.addIssue({ code: "custom", message: `${cwd}${val} doesn't exist`, fatal: true, }); return; } const { isDirectory } = Deno.statSync(url); if (isDirectory) return; ctx.addIssue({ code: "custom", message: `${url} it's not a directory`, fatal: true, }); }).transform((val) => new URL(val, new URL(`file://${Deno.cwd()}/`))), }, /** * The prefix that client-side variables must have. This is enforced both at * a type-level and at runtime. */ clientPrefix: "PUBLIC_", client: { PUBLIC_SITE_URL: z.string().url(), PUBLIC_SITE_TITLE: z.string().trim().min(1), PUBLIC_SITE_DESCRIPTION: z.string().trim().min(1), PUBLIC_SITE_AUTHOR: z.string().trim().min(1), PUBLIC_GIT_URL: z.string().url(), PUBLIC_TOR_URL: z.string().url().optional(), PUBLIC_GIT_TOR_URL: z.string().url().optional(), PUBLIC_SIMPLE_X_ADDRESS: z.string().url().optional(), }, /** * What object holds the environment variables at runtime. This is usually * `process.env` or `import.meta.env`. */ runtimeEnv: import.meta.env ?? Deno.env.toObject(), /** * By default, this library will feed the environment variables directly to * the Zod validator. * * This means that if you have an empty string for a value that is supposed * to be a number (e.g. `PORT=` in a ".env" file), Zod will incorrectly flag * it as a type mismatch violation. Additionally, if you have an empty string * for a value that is supposed to be a string with a default value (e.g. * `DOMAIN=` in an ".env" file), the default value will never be applied. * * In order to solve these issues, we recommend that all new projects * explicitly specify this option as true. */ emptyStringAsUndefined: true, });