Remove parse-domain dependency (#856)

* Remove parse-domain dependency

* Remove only, add commentary

* Update lockfile
This commit is contained in:
Tom Moor
2019-01-12 13:50:30 -08:00
committed by GitHub
parent 394adf97f8
commit ef583314e0
6 changed files with 193 additions and 239 deletions

View File

@ -1,5 +1,46 @@
// @flow
import parseDomain from 'parse-domain';
import { trim } from 'lodash';
type Domain = {
tld: string,
subdomain: string,
domain: string,
};
// we originally used the parse-domain npm module however this includes
// a large list of possible TLD's which increase the size of the bundle
// unneccessarily for our usecase of trusted input.
export function parseDomain(url: string): ?Domain {
if (typeof url !== 'string') return null;
// strip extermeties and whitespace from input
const normalizedDomain = trim(url.replace(/(https?:)?\/\//, ''));
const parts = normalizedDomain.split('.');
// ensure the last part only includes something that looks like a TLD
function cleanTLD(tld = '') {
return tld.split(/[/:?]/)[0];
}
// simplistic subdomain parse, we don't need to take into account subdomains
// with "." characters as these are not valid in Outline
if (parts.length >= 3) {
return {
subdomain: parts[0],
domain: parts[1],
tld: cleanTLD(parts.slice(2).join('.')),
};
}
if (parts.length === 2) {
return {
subdomain: '',
domain: parts[0],
tld: cleanTLD(parts.slice(1).join('.')),
};
}
return null;
}
export function stripSubdomain(hostname: string) {
const parsed = parseDomain(hostname);