33 lines
966 B
TypeScript
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);
|
|
}
|