aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/env.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/env.ts')
-rw-r--r--src/lib/env.ts47
1 files changed, 34 insertions, 13 deletions
diff --git a/src/lib/env.ts b/src/lib/env.ts
index 3db102e..9912945 100644
--- a/src/lib/env.ts
+++ b/src/lib/env.ts
@@ -1,16 +1,37 @@
-import { z } from 'zod'
+import { ZodIssueCode, z } from 'zod'
-const envSchema = z.object({
- POSTGRES_URL_NON_POOLING: z.string().url(),
- POSTGRES_PRISMA_URL: z.string().url(),
- NEXT_PUBLIC_BASE_URL: z
- .string()
- .optional()
- .default(
- process.env.VERCEL_URL
- ? `https://${process.env.VERCEL_URL}`
- : 'http://localhost:3000',
- ),
-})
+const envSchema = z
+ .object({
+ POSTGRES_URL_NON_POOLING: z.string().url(),
+ POSTGRES_PRISMA_URL: z.string().url(),
+ NEXT_PUBLIC_BASE_URL: z
+ .string()
+ .optional()
+ .default(
+ process.env.VERCEL_URL
+ ? `https://${process.env.VERCEL_URL}`
+ : 'http://localhost:3000',
+ ),
+ NEXT_PUBLIC_ENABLE_EXPENSE_DOCUMENTS: z.coerce.boolean().default(false),
+ S3_UPLOAD_KEY: z.string().optional(),
+ S3_UPLOAD_SECRET: z.string().optional(),
+ S3_UPLOAD_BUCKET: z.string().optional(),
+ S3_UPLOAD_REGION: z.string().optional(),
+ })
+ .superRefine((env, ctx) => {
+ if (
+ env.NEXT_PUBLIC_ENABLE_EXPENSE_DOCUMENTS &&
+ (!env.S3_UPLOAD_BUCKET ||
+ !env.S3_UPLOAD_KEY ||
+ !env.S3_UPLOAD_REGION ||
+ !env.S3_UPLOAD_SECRET)
+ ) {
+ ctx.addIssue({
+ code: ZodIssueCode.custom,
+ message:
+ 'If NEXT_PUBLIC_ENABLE_EXPENSE_DOCUMENTS is specified, then S3_* must be specified too',
+ })
+ }
+ })
export const env = envSchema.parse(process.env)