Thomas G. Lopes
MCPs (#91)
52c6f5c unverified
raw
history blame
1.16 kB
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;
}
};