Files
gitlab-instance-0a899031_cn…/app/lib/media.ts
2026-06-07 23:18:53 +08:00

33 lines
966 B
TypeScript

const MEDIA_PROXY_PATH = "/api/media/proxy";
function configuredMinioPublicUrl(): string {
return (
process.env.NEXT_PUBLIC_MINIO_PUBLIC_URL ||
process.env.MINIO_PUBLIC_URL ||
""
).replace(/\/$/, "");
}
export function isExternalMediaUrl(value: string): boolean {
return /^https?:\/\//i.test(value);
}
export function isMinioUrl(value: string): boolean {
const publicUrl = configuredMinioPublicUrl();
return Boolean(publicUrl && value.startsWith(`${publicUrl}/`));
}
export function mediaUrl(value?: string | null): string {
const url = String(value || "").trim();
if (!url) return "";
if (/^(data:|blob:|#|mailto:|tel:)/i.test(url)) return url;
if (/^file:/i.test(url)) return "";
if (!isExternalMediaUrl(url)) return url;
if (isMinioUrl(url)) return url;
return `${MEDIA_PROXY_PATH}?src=${encodeURIComponent(url)}`;
}
export function mediaUrls(values: string[]): string[] {
return values.map(mediaUrl).filter(Boolean);
}