Skip to content

Commit 583df1d

Browse files
Massage environment variables from strings to numbers (#234)
1 parent e8667da commit 583df1d

File tree

2 files changed

+18
-8
lines changed

2 files changed

+18
-8
lines changed

packages/backend/src/env.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@ import dotenv from 'dotenv';
55
// Booleans are specified as 'true' or 'false' strings.
66
const booleanSchema = z.enum(["true", "false"]);
77

8+
// Numbers are treated as strings in .env files.
9+
// coerce helps us convert them to numbers.
10+
// @see: https://zod.dev/?id=coercion-for-primitives
11+
const numberSchema = z.coerce.number();
12+
813
dotenv.config({
914
path: './.env',
1015
});
@@ -28,16 +33,16 @@ export const env = createEnv({
2833
FALLBACK_GITLAB_TOKEN: z.string().optional(),
2934
FALLBACK_GITEA_TOKEN: z.string().optional(),
3035

31-
REDIS_URL: z.string().url(),
36+
REDIS_URL: z.string().url().default("redis://localhost:6379"),
3237

3338
SENTRY_BACKEND_DSN: z.string().optional(),
3439
SENTRY_ENVIRONMENT: z.string().optional(),
3540

3641
LOGTAIL_TOKEN: z.string().optional(),
3742
LOGTAIL_HOST: z.string().url().optional(),
3843

39-
INDEX_CONCURRENCY_MULTIPLE: z.number().optional(),
40-
DATABASE_URL: z.string().url(),
44+
INDEX_CONCURRENCY_MULTIPLE: numberSchema.optional(),
45+
DATABASE_URL: z.string().url().default("postgresql://postgres:postgres@localhost:5432/postgres")
4146
},
4247
runtimeEnv: process.env,
4348
emptyStringAsUndefined: true,

packages/web/src/env.mjs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,17 @@ import { z } from "zod";
44
// Booleans are specified as 'true' or 'false' strings.
55
const booleanSchema = z.enum(["true", "false"]);
66

7+
// Numbers are treated as strings in .env files.
8+
// coerce helps us convert them to numbers.
9+
// @see: https://zod.dev/?id=coercion-for-primitives
10+
const numberSchema = z.coerce.number();
11+
712
export const env = createEnv({
813
server: {
914
// Zoekt
10-
ZOEKT_WEBSERVER_URL: z.string().url(),
11-
SHARD_MAX_MATCH_COUNT: z.number().default(10000),
12-
TOTAL_MAX_MATCH_COUNT: z.number().default(100000),
15+
ZOEKT_WEBSERVER_URL: z.string().url().default("http://localhost:6070"),
16+
SHARD_MAX_MATCH_COUNT: numberSchema.default(10000),
17+
TOTAL_MAX_MATCH_COUNT: numberSchema.default(100000),
1318

1419
// Auth
1520
AUTH_SECRET: z.string(),
@@ -31,7 +36,7 @@ export const env = createEnv({
3136
STRIPE_ENABLE_TEST_CLOCKS: booleanSchema.default('false'),
3237

3338
// Misc
34-
CONFIG_MAX_REPOS_NO_TOKEN: z.number().default(500),
39+
CONFIG_MAX_REPOS_NO_TOKEN: numberSchema.default(500),
3540
SOURCEBOT_ROOT_DOMAIN: z.string().default("localhost:3000"),
3641
NODE_ENV: z.enum(["development", "test", "production"]),
3742
SOURCEBOT_TELEMETRY_DISABLED: booleanSchema.default('false'),
@@ -45,7 +50,7 @@ export const env = createEnv({
4550

4651
// Misc
4752
NEXT_PUBLIC_SOURCEBOT_VERSION: z.string().default('unknown'),
48-
NEXT_PUBLIC_POLLING_INTERVAL_MS: z.number().default(5000),
53+
NEXT_PUBLIC_POLLING_INTERVAL_MS: numberSchema.default(5000),
4954
},
5055
// For Next.js >= 13.4.4, you only need to destructure client variables:
5156
experimental__runtimeEnv: {

0 commit comments

Comments
 (0)