monkeytype/frontend/vite-plugins/env-config.ts
Christian Fehmer 8cce5bfc7e
build: combine vite config into a single file (@fehmer) (#7190)
- **build: replace dotenv with vite env variables (@fehmer)**
- **build: combine vite config into a single file (@fehmer)**

---------

Co-authored-by: Miodec <jack@monkeytype.com>
2025-12-05 19:45:12 +01:00

57 lines
1.7 KiB
TypeScript

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<string, string>;
}): 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;
}