Openstatus
www.openstatus.dev
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}