import { writeFileSyncIfChanged } from "@hexclave/shared/dist/utils/fs"; import { deindent } from "@hexclave/shared/dist/utils/strings"; const envVarsConfig: Record = { HEXCLAVE_PORT_PREFIX: { allowPublic: true, }, HEXCLAVE_PROJECT_ID: { allowPublic: true, }, HEXCLAVE_PUBLISHABLE_CLIENT_KEY: { allowPublic: true, }, HEXCLAVE_SECRET_SERVER_KEY: {}, HEXCLAVE_SUPER_SECRET_ADMIN_KEY: {}, HEXCLAVE_EXTRA_REQUEST_HEADERS: { allowPublic: true, }, HEXCLAVE_API_URL_BROWSER: { allowPublic: true, deprecatedLegacyNames: ["BROWSER_STACK_API_URL", "BROWSER_HEXCLAVE_API_URL"], }, HEXCLAVE_API_URL_SERVER: { allowPublic: true, deprecatedLegacyNames: ["SERVER_STACK_API_URL", "SERVER_HEXCLAVE_API_URL"], }, HEXCLAVE_API_URL: { allowPublic: true, deprecatedLegacyNames: ["HEXCLAVE_URL", "STACK_URL"], }, HEXCLAVE_HOSTED_HANDLER_DOMAIN_SUFFIX: { allowPublic: true, }, HEXCLAVE_HOSTED_HANDLER_URL_TEMPLATE: { allowPublic: true, }, HEXCLAVE_STRIPE_PUBLISHABLE_KEY: { allowPublic: true, }, HEXCLAVE_BOT_CHALLENGE_SITE_KEY: { allowPublic: true, }, HEXCLAVE_BOT_CHALLENGE_INVISIBLE_SITE_KEY: { allowPublic: true, }, HEXCLAVE_IS_LOCAL_EMULATOR: { allowPublic: true, }, HEXCLAVE_POSTHOG_KEY: { allowPublic: true, }, HEXCLAVE_SVIX_SERVER_URL: { allowPublic: true, }, HEXCLAVE_SENTRY_DSN: { allowPublic: true, }, HEXCLAVE_VERSION_ALERTER_SEVERE_ONLY: { allowPublic: true, }, NODE_ENV: { allowPublic: false, }, }; function generateEnvVarsConstSnippet() { const getters: string[] = []; for (const [key, config] of Object.entries(envVarsConfig)) { const allVariables = [key, ...(config.deprecatedLegacyNames ?? [])] .flatMap(k => k.startsWith("HEXCLAVE_") ? [k, k.replace("HEXCLAVE_", "STACK_")] : [k]) .flatMap(k => config.allowPublic ? [k, `NEXT_PUBLIC_${k}`, `VITE_${k}`] : [k]); getters.push(deindent` get ${key}() { return ${allVariables.map(variableName => deindent` ((typeof process !== "undefined" ? process.env.${variableName} : undefined) ?? import.meta.env?.${variableName}) `).join("\n ?? ")} ?? undefined; }, `); } return deindent` // THIS FILE IS AUTO-GENERATED BY THE \`generate-env.ts\` SCRIPT. // DO NOT EDIT IT BY HAND. /* eslint-disable no-restricted-properties */ export const envVars = { ${getters.join("\n")} }; ` + "\n"; } writeFileSyncIfChanged("src/generated/env.ts", generateEnvVarsConstSnippet());