You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tech-interview-handbook/apps/portal/src/env/server.mjs

31 lines
934 B

// @ts-check
/**
* This file is included in `/next.config.mjs` which ensures the app isn't built with invalid env vars.
* It has to be a `.mjs`-file to be imported there.
*/
import { serverSchema } from './schema.mjs';
import { env as clientEnv, formatErrors } from './client.mjs';
const _serverEnv = serverSchema.safeParse(process.env);
if (_serverEnv.success === false) {
console.error(
'❌ Invalid environment variables:\n',
...formatErrors(_serverEnv.error.format()),
);
throw new Error('Invalid environment variables');
}
/**
* Validate that server-side environment variables are not exposed to the client.
*/
for (let key of Object.keys(_serverEnv.data)) {
if (key.startsWith('NEXT_PUBLIC_')) {
console.warn('❌ You are exposing a server-side env-variable:', key);
throw new Error('You are exposing a server-side env-variable');
}
}
export const env = { ..._serverEnv.data, ...clientEnv };