|
| 1 | +import { createEnv, Env } from "@executor/env"; |
| 2 | + |
| 3 | +const sharedShape = { |
| 4 | + NODE_ENV: Env.literalOr( |
| 5 | + "NODE_ENV", |
| 6 | + "development", |
| 7 | + "development", |
| 8 | + "test", |
| 9 | + "production", |
| 10 | + ), |
| 11 | +}; |
| 12 | + |
| 13 | +const serverShape = { |
| 14 | + DATABASE_URL: Env.stringOr("DATABASE_URL", ""), |
| 15 | + PGLITE_DATA_DIR: Env.stringOr("PGLITE_DATA_DIR", ".pglite"), |
| 16 | + ENCRYPTION_KEY: Env.stringOr( |
| 17 | + "ENCRYPTION_KEY", |
| 18 | + "local-dev-encryption-key", |
| 19 | + ), |
| 20 | + WORKOS_API_KEY: Env.string("WORKOS_API_KEY"), |
| 21 | + WORKOS_CLIENT_ID: Env.string("WORKOS_CLIENT_ID"), |
| 22 | + WORKOS_COOKIE_PASSWORD: Env.string("WORKOS_COOKIE_PASSWORD"), |
| 23 | +}; |
| 24 | + |
| 25 | +type SharedEnv = Readonly<{ |
| 26 | + NODE_ENV: "development" | "test" | "production"; |
| 27 | +}>; |
| 28 | + |
| 29 | +type ServerEnv = SharedEnv & Readonly<{ |
| 30 | + DATABASE_URL: string; |
| 31 | + PGLITE_DATA_DIR: string; |
| 32 | + ENCRYPTION_KEY: string; |
| 33 | + WORKOS_API_KEY: string; |
| 34 | + WORKOS_CLIENT_ID: string; |
| 35 | + WORKOS_COOKIE_PASSWORD: string; |
| 36 | +}>; |
| 37 | + |
| 38 | +type WebEnv = Readonly<Record<string, never>>; |
| 39 | + |
| 40 | +export const shared = createEnv(sharedShape, { |
| 41 | + runtimeEnv: process.env, |
| 42 | + emptyStringAsUndefined: true, |
| 43 | +}) as SharedEnv; |
| 44 | + |
| 45 | +export const web = createEnv({}, { |
| 46 | + prefix: "PUBLIC_", |
| 47 | + runtimeEnv: process.env, |
| 48 | + emptyStringAsUndefined: true, |
| 49 | +}) as WebEnv; |
| 50 | + |
| 51 | +export const server = createEnv(serverShape, { |
| 52 | + extends: [shared], |
| 53 | + runtimeEnv: process.env, |
| 54 | + emptyStringAsUndefined: true, |
| 55 | +}) as ServerEnv; |
0 commit comments