export const PROJECT_FAVICON_FALLBACK_MARKER = "project-favicon-missing"; export function getProjectFaviconResourceKey( environmentId: string, workspaceRoot: string, faviconPath?: string | null,) { return JSON.stringify([environmentId, workspaceRoot, faviconPath || null]);} export function getProjectFaviconCacheKey( environmentId: string, workspaceRoot: string, url: string,) { let revision = url; try { const pathname = new URL(url, "https://t3.invalid").pathname; revision = pathname.slice(pathname.lastIndexOf("/") + 1); } catch { // Keep the full value as a safe fallback for malformed URLs. } return JSON.stringify([environmentId, workspaceRoot, revision]);} export function isProjectFaviconFallbackUrl(url: string | null | undefined): boolean { if (!url) return false; try { const pathname = new URL(url, "https://t3.invalid").pathname; return pathname.slice(pathname.lastIndexOf("/") + 1) === PROJECT_FAVICON_FALLBACK_MARKER; } catch { return false; }}
export const PROJECT_FAVICON_FALLBACK_MARKER = "project-favicon-missing";
export function getProjectFaviconResourceKey(
environmentId: string,
workspaceRoot: string,
faviconPath?: string | null,
) {
return JSON.stringify([environmentId, workspaceRoot, faviconPath || null]);
}
export function getProjectFaviconCacheKey(
environmentId: string,
workspaceRoot: string,
url: string,
) {
let revision = url;
try {
const pathname = new URL(url, "https://t3.invalid").pathname;
revision = pathname.slice(pathname.lastIndexOf("/") + 1);
} catch {
// Keep the full value as a safe fallback for malformed URLs.
}
return JSON.stringify([environmentId, workspaceRoot, revision]);
}
export function isProjectFaviconFallbackUrl(url: string | null | undefined): boolean {
if (!url) return false;
try {
const pathname = new URL(url, "https://t3.invalid").pathname;
return pathname.slice(pathname.lastIndexOf("/") + 1) === PROJECT_FAVICON_FALLBACK_MARKER;
} catch {
return false;
}
}