37 lines
938 B
JavaScript
37 lines
938 B
JavaScript
// @ts-check
|
|
import { clientEnv, clientSchema } from './schema.mjs'
|
|
|
|
const _clientEnv = clientSchema.safeParse(clientEnv)
|
|
|
|
export const formatErrors = (
|
|
/** @type {import('zod').ZodFormattedError<Map<string,string>,string>} */
|
|
errors
|
|
) =>
|
|
Object.entries(errors)
|
|
.map(([name, value]) => {
|
|
if (value && '_errors' in value) {
|
|
return `${name}: ${value._errors.join(', ')}\n`
|
|
}
|
|
return null
|
|
})
|
|
.filter(Boolean)
|
|
|
|
if (!_clientEnv.success) {
|
|
const msg = [
|
|
'❌ Invalid environment variables [Client]:\n',
|
|
...formatErrors(_clientEnv.error.format()),
|
|
].join('')
|
|
console.error(msg)
|
|
throw new Error(msg)
|
|
}
|
|
|
|
for (let key of Object.keys(_clientEnv.data)) {
|
|
if (!key.startsWith('NEXT_PUBLIC_')) {
|
|
const msg = `❌ Invalid public environment variable name: ${key}. It must begin with 'NEXT_PUBLIC_'`
|
|
console.warn(msg)
|
|
throw new Error(msg)
|
|
}
|
|
}
|
|
|
|
export const env = _clientEnv.data
|