31 lines
830 B
TypeScript
31 lines
830 B
TypeScript
import path from "node:path";
|
|
|
|
export type Env = {
|
|
port: number;
|
|
apiPort: number;
|
|
publicBaseUrl: string;
|
|
storageDir: string;
|
|
databasePath: string;
|
|
isProduction: boolean;
|
|
};
|
|
|
|
export function loadEnv(overrides: Partial<NodeJS.ProcessEnv> = {}): Env {
|
|
const read = (key: string, fallback: string) =>
|
|
overrides[key] ?? process.env[key] ?? fallback;
|
|
|
|
const isProduction =
|
|
(overrides.NODE_ENV ?? process.env.NODE_ENV) === "production";
|
|
|
|
return {
|
|
port: Number(read("PORT", "3000")),
|
|
apiPort: Number(read("API_PORT", "3010")),
|
|
publicBaseUrl: read("PUBLIC_BASE_URL", "http://localhost:3000").replace(
|
|
/\/$/,
|
|
"",
|
|
),
|
|
storageDir: path.resolve(read("STORAGE_DIR", "./storage")),
|
|
databasePath: path.resolve(read("DATABASE_PATH", "./data/catalogs.sqlite")),
|
|
isProduction,
|
|
};
|
|
}
|