48 lines
1.2 KiB
TypeScript
Vendored
48 lines
1.2 KiB
TypeScript
Vendored
import url from 'url';
|
|
import isurl from 'is-url';
|
|
import tlds from './tlds.js';
|
|
|
|
export function getDomain(inputUrl: string) {
|
|
const parsed = url.parse(inputUrl).host;
|
|
var parts = parsed.split('.');
|
|
if (parts[0] === 'www' && parts[1] !== 'com') {
|
|
parts.shift();
|
|
}
|
|
var ln = parts.length,
|
|
i = ln,
|
|
minLength = parts[parts.length - 1].length,
|
|
part;
|
|
|
|
// iterate backwards
|
|
while ((part = parts[--i])) {
|
|
// stop when we find a non-TLD part
|
|
if (
|
|
i === 0 || // 'asia.com' (last remaining must be the SLD)
|
|
i < ln - 2 || // TLDs only span 2 levels
|
|
part.length < minLength || // 'www.cn.com' (valid TLD as second-level domain)
|
|
tlds.indexOf(part) < 0 // officially not a TLD
|
|
) {
|
|
return part;
|
|
}
|
|
}
|
|
}
|
|
|
|
function appendProtocol(inputUrl: string): string {
|
|
const parsed = url.parse(inputUrl);
|
|
if (!parsed.protocol) {
|
|
const urlWithProtocol = `https://${inputUrl}`;
|
|
return urlWithProtocol;
|
|
}
|
|
return inputUrl;
|
|
}
|
|
|
|
export function normalizeUrl(urlToNormalize: string): string {
|
|
const urlWithProtocol = appendProtocol(urlToNormalize);
|
|
|
|
if (isurl(urlWithProtocol)) {
|
|
return urlWithProtocol;
|
|
} else {
|
|
throw new Error(`The URL "${urlWithProtocol}" you provided is invalid.`);
|
|
}
|
|
}
|