Openstatus www.openstatus.dev
at main 46 lines 1.2 kB view raw
1export const getSubdomain = (name: string, apexName: string) => { 2 if (name === apexName) return null; 3 return name.slice(0, name.length - apexName.length - 1); 4}; 5 6export const getApexDomain = (url: string) => { 7 let domain: string; 8 try { 9 domain = new URL(url).hostname; 10 } catch (e) { 11 console.error(e); 12 return ""; 13 } 14 const parts = domain.split("."); 15 if (parts.length > 2) { 16 // if it's a subdomain (e.g. dub.vercel.app), return the last 2 parts 17 return parts.slice(-2).join("."); 18 } 19 // if it's a normal domain (e.g. dub.sh), we return the domain 20 return domain; 21}; 22 23export function extractDomain(url: string) { 24 // Use URL constructor to parse 25 try { 26 if (url.trim() === "") return ""; 27 28 const hostname = new URL(url).hostname; // e.g. "craft.mxkaske.dev" 29 30 const parts = hostname.split("."); // ["craft", "mxkaske", "dev"] 31 32 if (parts.length === 2) { 33 // no subdomain 34 return parts[0]; // "mxkaske" 35 } 36 if (parts.length > 2) { 37 // has subdomain(s) 38 return `${parts.slice(0, -2).join("-")}-${parts[parts.length - 2]}`; 39 // "craft-mxkaske" 40 } 41 return ""; 42 } catch (e) { 43 console.error(e); 44 return ""; 45 } 46}