summaryrefslogtreecommitdiff
path: root/src/lib/env.ts
blob: 679c76f7f387728aa5230f23022bf29d795956a6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
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,
});