movie-web/src/setup/config.ts

67 lines
1.8 KiB
TypeScript
Raw Normal View History

import { APP_VERSION, DISCORD_LINK, GITHUB_LINK } from "./constants";
2022-12-27 16:44:36 +01:00
2022-12-29 18:25:57 +01:00
interface Config {
2022-12-27 16:44:36 +01:00
APP_VERSION: string;
GITHUB_LINK: string;
DISCORD_LINK: string;
OMDB_API_KEY: string;
TMDB_API_KEY: string;
CORS_PROXY_URL: string;
NORMAL_ROUTER: boolean;
2022-12-27 16:44:36 +01:00
}
2023-02-22 21:41:13 +01:00
export interface RuntimeConfig {
APP_VERSION: string;
GITHUB_LINK: string;
DISCORD_LINK: string;
OMDB_API_KEY: string;
TMDB_API_KEY: string;
NORMAL_ROUTER: boolean;
PROXY_URLS: string[];
2022-12-29 18:25:57 +01:00
}
2022-12-27 16:44:36 +01:00
const env: Record<keyof Config, undefined | string> = {
OMDB_API_KEY: import.meta.env.VITE_OMDB_API_KEY,
TMDB_API_KEY: import.meta.env.VITE_TMDB_API_KEY,
APP_VERSION: undefined,
GITHUB_LINK: undefined,
DISCORD_LINK: undefined,
CORS_PROXY_URL: import.meta.env.VITE_CORS_PROXY_URL,
NORMAL_ROUTER: import.meta.env.VITE_NORMAL_ROUTER,
2022-12-27 16:44:36 +01:00
};
const alerts = [] as string[];
// loads from different locations, in order: environment (VITE_{KEY}), window (public/config.js)
2023-02-22 21:54:02 +01:00
function getKey(key: keyof Config, defaultString?: string): string {
2022-12-27 16:44:36 +01:00
let windowValue = (window as any)?.__CONFIG__?.[`VITE_${key}`];
if (windowValue !== undefined && windowValue.length === 0)
windowValue = undefined;
const value = env[key] ?? windowValue ?? undefined;
if (value === undefined) {
2023-02-22 21:54:02 +01:00
if (defaultString) return defaultString;
2022-12-27 16:44:36 +01:00
if (!alerts.includes(key)) {
// eslint-disable-next-line no-alert
window.alert(`Misconfigured instance, missing key: ${key}`);
alerts.push(key);
}
return "";
}
return value;
}
2022-12-29 18:25:57 +01:00
export function conf(): RuntimeConfig {
2022-12-27 16:44:36 +01:00
return {
APP_VERSION,
GITHUB_LINK,
DISCORD_LINK,
OMDB_API_KEY: getKey("OMDB_API_KEY"),
TMDB_API_KEY: getKey("TMDB_API_KEY"),
2023-02-22 21:41:13 +01:00
PROXY_URLS: getKey("CORS_PROXY_URL")
.split(",")
.map((v) => v.trim()),
2023-02-22 21:54:02 +01:00
NORMAL_ROUTER: getKey("NORMAL_ROUTER", "false") === "true",
2022-12-27 16:44:36 +01:00
};
}