Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
export function isValidURL(url: string): boolean { | |
try { | |
new URL(url); | |
return true; | |
} catch { | |
return false; | |
} | |
} | |
export const extractDomain = (value: unknown) => { | |
const url = toURL(value); | |
if (!url) { | |
return null; | |
} | |
const hostnameParts = url.hostname.split("."); | |
// Determine typical hostnames like "domain.com" or "domain.org" | |
if (hostnameParts.length <= 2) { | |
return url.hostname; | |
} | |
// Determine two-part TLD if second last part of the hostname matches one of the prefixes | |
const prefixes = ["com", "co", "org", "net", "gov", "edu"]; | |
const potentialTwoPartTLD = `${hostnameParts[hostnameParts.length - 2]}.${hostnameParts[hostnameParts.length - 1]}`; | |
return prefixes.includes(hostnameParts[hostnameParts.length - 2]!) | |
? `${hostnameParts[hostnameParts.length - 3]}.${potentialTwoPartTLD}` | |
: hostnameParts.slice(-2).join("."); // Fallback to last two parts of hostname | |
}; | |
const toURL = (value: unknown) => { | |
if (value instanceof URL) { | |
return value; | |
} | |
if (typeof value !== "string" || !value) { | |
return null; | |
} | |
try { | |
const url = new URL(value); | |
return url.hostname ? url : null; | |
} catch { | |
return null; | |
} | |
}; | |