diff --git a/docs/start/framework/react/guide/environment-variables.md b/docs/start/framework/react/guide/environment-variables.md index 108ec45f98..76d91d2142 100644 --- a/docs/start/framework/react/guide/environment-variables.md +++ b/docs/start/framework/react/guide/environment-variables.md @@ -278,26 +278,31 @@ Use Zod for runtime validation of environment variables: ```typescript // src/config/env.ts +import { createIsomorphicFn } from '@tanstack/react-start' import { z } from 'zod' -const envSchema = z.object({ - DATABASE_URL: z.string().url(), - JWT_SECRET: z.string().min(32), - NODE_ENV: z.enum(['development', 'production', 'test']), -}) - const clientEnvSchema = z.object({ VITE_APP_NAME: z.string(), - VITE_API_URL: z.string().url(), + VITE_API_URL: z.url(), VITE_AUTH0_DOMAIN: z.string(), VITE_AUTH0_CLIENT_ID: z.string(), }) -// Validate server environment -export const serverEnv = envSchema.parse(process.env) +const serverEnvSchema = z + .object({ + DATABASE_URL: z.url(), + JWT_SECRET: z.string().min(32), + NODE_ENV: z.enum(['development', 'production', 'test']), + }) + .and(clientEnvSchema) + +const getEnv = createIsomorphicFn() + .server(() => serverEnvSchema.parse(process.env)) + .client(() => clientEnvSchema.parse(import.meta.env)) + +type Env = z.infer -// Validate client environment -export const clientEnv = clientEnvSchema.parse(import.meta.env) +export const env = getEnv() as Env ``` ## Security Best Practices diff --git a/docs/start/framework/solid/guide/environment-variables.md b/docs/start/framework/solid/guide/environment-variables.md index 37ef1ed4af..f63c7e7264 100644 --- a/docs/start/framework/solid/guide/environment-variables.md +++ b/docs/start/framework/solid/guide/environment-variables.md @@ -278,26 +278,31 @@ Use Zod for runtime validation of environment variables: ```typescript // src/config/env.ts +import { createIsomorphicFn } from '@tanstack/solid-start' import { z } from 'zod' -const envSchema = z.object({ - DATABASE_URL: z.string().url(), - JWT_SECRET: z.string().min(32), - NODE_ENV: z.enum(['development', 'production', 'test']), -}) - const clientEnvSchema = z.object({ VITE_APP_NAME: z.string(), - VITE_API_URL: z.string().url(), + VITE_API_URL: z.url(), VITE_AUTH0_DOMAIN: z.string(), VITE_AUTH0_CLIENT_ID: z.string(), }) -// Validate server environment -export const serverEnv = envSchema.parse(process.env) +const serverEnvSchema = z + .object({ + DATABASE_URL: z.url(), + JWT_SECRET: z.string().min(32), + NODE_ENV: z.enum(['development', 'production', 'test']), + }) + .and(clientEnvSchema) + +const getEnv = createIsomorphicFn() + .server(() => serverEnvSchema.parse(process.env)) + .client(() => clientEnvSchema.parse(import.meta.env)) + +type Env = z.infer -// Validate client environment -export const clientEnv = clientEnvSchema.parse(import.meta.env) +export const env = getEnv() as Env ``` ## Security Best Practices