64 lines
2.4 KiB
TypeScript
64 lines
2.4 KiB
TypeScript
import { clsx, type ClassValue } from "clsx";
|
|
import { twMerge } from "tailwind-merge";
|
|
|
|
export function cn(...inputs: ClassValue[]) {
|
|
return twMerge(clsx(inputs));
|
|
}
|
|
|
|
// This check can be removed, it is just for tutorial purposes
|
|
export const hasEnvVars =
|
|
(process.env.SUPABASE_URL || process.env.NEXT_PUBLIC_SUPABASE_URL) &&
|
|
(process.env.SUPABASE_ANON_KEY ||
|
|
process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY ||
|
|
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY);
|
|
|
|
export function resolveSupabaseUrl(url: string | undefined): string | undefined {
|
|
if (!url) return url;
|
|
if (typeof window !== 'undefined') {
|
|
try {
|
|
const parsed = new URL(url);
|
|
if (parsed.hostname === 'supabase-kong' || parsed.hostname === 'kong') {
|
|
parsed.hostname = window.location.hostname;
|
|
parsed.protocol = window.location.protocol;
|
|
parsed.port = ''; // Port entfernen, da der öffentliche Zugriff über Port 80/443 läuft
|
|
return parsed.toString().replace(/\/$/, '');
|
|
}
|
|
|
|
// Mitigate Mixed Content: if the site is HTTPS, force Supabase to HTTPS
|
|
if (window.location.protocol === 'https:' && parsed.protocol === 'http:') {
|
|
parsed.protocol = 'https:';
|
|
return parsed.toString().replace(/\/$/, '');
|
|
}
|
|
} catch {
|
|
let resolved = url
|
|
.replace('//supabase-kong:8000', `//${window.location.hostname}`)
|
|
.replace('//kong:8000', `//${window.location.hostname}`)
|
|
.replace('//supabase-kong', `//${window.location.hostname}`)
|
|
.replace('//kong', `//${window.location.hostname}`);
|
|
if (window.location.protocol === 'https:') {
|
|
resolved = resolved.replace('http://', 'https://');
|
|
}
|
|
return resolved;
|
|
}
|
|
} else {
|
|
// Server-Side fallback to localhost:8000 (for local development)
|
|
if (process.env.IS_DOCKER !== 'true') {
|
|
try {
|
|
const parsed = new URL(url);
|
|
if (parsed.hostname === 'supabase-kong' || parsed.hostname === 'kong') {
|
|
parsed.hostname = 'localhost';
|
|
parsed.port = '8000';
|
|
return parsed.toString().replace(/\/$/, '');
|
|
}
|
|
} catch {
|
|
return url
|
|
.replace('//supabase-kong:8000', '//localhost:8000')
|
|
.replace('//kong:8000', '//localhost:8000')
|
|
.replace('//supabase-kong', '//localhost:8000')
|
|
.replace('//kong', '//localhost:8000');
|
|
}
|
|
}
|
|
}
|
|
return url;
|
|
}
|