import { Plugin } from "vite"; import { EnvConfig } from "virtual:env-config"; const virtualModuleId = "virtual:env-config"; const resolvedVirtualModuleId = "\0" + virtualModuleId; export function envConfig(options: { isDevelopment: boolean; clientVersion: string; env: Record; }): Plugin { return { name: "virtual-env-config", resolveId(id) { if (id === virtualModuleId) return resolvedVirtualModuleId; return; }, load(id) { if (id === resolvedVirtualModuleId) { const devConfig: EnvConfig = { isDevelopment: true, backendUrl: fallback( options.env["BACKEND_URL"], "http://localhost:5005", ), clientVersion: options.clientVersion, recaptchaSiteKey: "6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI", quickLoginEmail: options.env["QUICK_LOGIN_EMAIL"], quickLoginPassword: options.env["QUICK_LOGIN_PASSWORD"], }; const prodConfig: EnvConfig = { isDevelopment: false, backendUrl: fallback( options.env["BACKEND_URL"], "https://api.monkeytype.com", ), recaptchaSiteKey: options.env["RECAPTCHA_SITE_KEY"] ?? "", quickLoginEmail: undefined, quickLoginPassword: undefined, clientVersion: options.clientVersion, }; const envConfig = options.isDevelopment ? devConfig : prodConfig; return ` export const envConfig = ${JSON.stringify(envConfig)}; `; } return; }, }; } function fallback(value: string | undefined | null, fallback: string): string { if (value === null || value === undefined || value === "") return fallback; return value; }