(sidebar)forget redis, better parallization

This commit is contained in:
2026-04-06 13:32:46 -04:00
parent 67bf77815e
commit 4dbd0ac965
7 changed files with 274 additions and 435 deletions

103
src/env/client.ts vendored
View File

@@ -1,80 +1,46 @@
import { z } from "zod";
export interface ClientEnv {
VITE_DOMAIN: string;
VITE_AWS_BUCKET_STRING: string;
VITE_DOWNLOAD_BUCKET_STRING: string;
VITE_GOOGLE_CLIENT_ID: string;
VITE_GOOGLE_CLIENT_ID_MAGIC_DELVE: string;
VITE_GITHUB_CLIENT_ID: string;
VITE_WEBSOCKET: string;
VITE_INFILL_ENDPOINT: string;
}
const clientEnvSchema = z.object({
VITE_DOMAIN: z.string().min(1),
VITE_AWS_BUCKET_STRING: z.string().min(1),
VITE_DOWNLOAD_BUCKET_STRING: z.string().min(1),
VITE_GOOGLE_CLIENT_ID: z.string().min(1),
VITE_GOOGLE_CLIENT_ID_MAGIC_DELVE: z.string().min(1),
VITE_GITHUB_CLIENT_ID: z.string().min(1),
VITE_WEBSOCKET: z.string().min(1),
VITE_INFILL_ENDPOINT: z.string().min(1)
});
export type ClientEnv = z.infer<typeof clientEnvSchema>;
const requiredKeys: (keyof ClientEnv)[] = [
"VITE_DOMAIN",
"VITE_AWS_BUCKET_STRING",
"VITE_DOWNLOAD_BUCKET_STRING",
"VITE_GOOGLE_CLIENT_ID",
"VITE_GOOGLE_CLIENT_ID_MAGIC_DELVE",
"VITE_GITHUB_CLIENT_ID",
"VITE_WEBSOCKET",
"VITE_INFILL_ENDPOINT"
];
export const validateClientEnv = (
envVars: Record<string, string | undefined>
): ClientEnv => {
try {
return clientEnvSchema.parse(envVars);
} catch (error) {
if (error instanceof z.ZodError) {
const formattedErrors = error.format();
const missingVars = Object.entries(formattedErrors)
.filter(
([key, value]) =>
key !== "_errors" &&
typeof value === "object" &&
value._errors?.length > 0 &&
value._errors[0] === "Required"
)
.map(([key, _]) => key);
const missing = requiredKeys.filter(
(key) => !envVars[key] || envVars[key]!.trim() === ""
);
const invalidVars = Object.entries(formattedErrors)
.filter(
([key, value]) =>
key !== "_errors" &&
typeof value === "object" &&
value._errors?.length > 0 &&
value._errors[0] !== "Required"
)
.map(([key, value]) => ({
key,
error: value._errors[0]
}));
let errorMessage = "Client environment validation failed:\n";
if (missingVars.length > 0) {
errorMessage += `Missing required variables: ${missingVars.join(", ")}\n`;
}
if (invalidVars.length > 0) {
errorMessage += "Invalid values:\n";
invalidVars.forEach(({ key, error }) => {
errorMessage += ` ${key}: ${error}\n`;
});
}
console.error(errorMessage);
throw new Error(errorMessage);
}
console.error(
"Client environment validation failed with unknown error:",
error
);
throw new Error("Client environment validation failed with unknown error");
if (missing.length > 0) {
const message = `Client environment validation failed:\nMissing required variables: ${missing.join(", ")}`;
console.error(message);
throw new Error(message);
}
return envVars as unknown as ClientEnv;
};
const validateAndExportEnv = (): ClientEnv => {
try {
const validated = validateClientEnv(import.meta.env);
console.log("✅ Client environment validation successful");
return validated;
} catch (error) {
console.error("❌ Client environment validation failed:", error);
throw error;
}
};
@@ -86,14 +52,5 @@ export const isMissingEnvVar = (varName: string): boolean => {
};
export const getMissingEnvVars = (): string[] => {
const requiredClientVars = [
"VITE_DOMAIN",
"VITE_AWS_BUCKET_STRING",
"VITE_GOOGLE_CLIENT_ID",
"VITE_GOOGLE_CLIENT_ID_MAGIC_DELVE",
"VITE_GITHUB_CLIENT_ID",
"VITE_WEBSOCKET"
];
return requiredClientVars.filter((varName) => isMissingEnvVar(varName));
return requiredKeys.filter((varName) => isMissingEnvVar(varName));
};