/// declare global { interface Window { __ENV__?: Record; } } // eslint-disable-next-line @typescript-eslint/ban-types type EnvKey = keyof NodeJS.ProcessEnv | (string & {}); type EnvValue = K extends keyof NodeJS.ProcessEnv ? NodeJS.ProcessEnv[K] : string | undefined; export const env = (variable: K): EnvValue => { if (typeof window !== 'undefined' && typeof window.__ENV__ === 'object') { // eslint-disable-next-line @typescript-eslint/consistent-type-assertions return window.__ENV__[variable as string] as EnvValue; } // eslint-disable-next-line @typescript-eslint/consistent-type-assertions return (typeof process !== 'undefined' ? process?.env?.[variable] : undefined) as EnvValue; }; export const createPublicEnv = () => Object.fromEntries(Object.entries(process.env).filter(([key]) => key.startsWith('NEXT_PUBLIC_')));