2016-10-31 23:22:38 +00:00
|
|
|
import * as plugins from './smartstring.plugins';
|
2016-05-25 03:06:19 +00:00
|
|
|
|
|
|
|
export class Domain {
|
2019-04-16 06:54:27 +00:00
|
|
|
public fullName: string;
|
|
|
|
public level1: string;
|
|
|
|
public level2: string;
|
|
|
|
public level3: string;
|
|
|
|
public level4: string;
|
|
|
|
public level5: string;
|
|
|
|
public protocol: string;
|
|
|
|
public zoneName: string;
|
2017-10-05 13:55:59 +00:00
|
|
|
// aliases
|
2019-04-16 06:54:27 +00:00
|
|
|
public topLevel: string;
|
|
|
|
public domainName;
|
|
|
|
public subDomain;
|
|
|
|
public port;
|
|
|
|
public nodeParsedUrl: plugins.url.UrlWithStringQuery;
|
2018-07-21 12:37:39 +00:00
|
|
|
constructor(domainStringArg: string) {
|
2019-04-16 06:54:27 +00:00
|
|
|
const regexMatches = this._domainRegex(domainStringArg);
|
2018-07-21 12:37:39 +00:00
|
|
|
this.fullName = '';
|
2017-10-05 13:55:59 +00:00
|
|
|
for (let i = 1; i <= 5; i++) {
|
2018-07-21 12:37:39 +00:00
|
|
|
if (regexMatches[i - 1]) {
|
2019-04-16 06:54:27 +00:00
|
|
|
const localMatch = regexMatches[i - 1];
|
2018-07-21 12:37:39 +00:00
|
|
|
this['level' + i.toString()] = localMatch;
|
2017-10-05 13:55:59 +00:00
|
|
|
if (this.fullName === '') {
|
2018-07-21 12:37:39 +00:00
|
|
|
this.fullName = localMatch;
|
2017-10-05 13:55:59 +00:00
|
|
|
} else {
|
2018-07-21 12:37:39 +00:00
|
|
|
this.fullName = localMatch + '.' + this.fullName;
|
2017-10-05 13:55:59 +00:00
|
|
|
}
|
|
|
|
} else {
|
2018-07-21 12:37:39 +00:00
|
|
|
this['level' + i.toString()] = undefined;
|
|
|
|
}
|
|
|
|
}
|
2019-04-16 06:54:27 +00:00
|
|
|
this.protocol = this._protocolRegex(domainStringArg);
|
2018-07-21 12:37:39 +00:00
|
|
|
this.zoneName = this.level2 + '.' + this.level1;
|
2016-10-31 23:22:38 +00:00
|
|
|
|
2017-10-05 13:55:59 +00:00
|
|
|
// aliases
|
2018-07-21 12:37:39 +00:00
|
|
|
this.topLevel = this.level1;
|
|
|
|
this.domainName = this.level2;
|
|
|
|
this.subDomain = this.level3;
|
2019-04-16 06:54:27 +00:00
|
|
|
|
|
|
|
this.nodeParsedUrl = plugins.url.parse(domainStringArg);
|
|
|
|
this.port = this.nodeParsedUrl.port;
|
2017-10-05 13:55:59 +00:00
|
|
|
}
|
2016-05-25 03:06:19 +00:00
|
|
|
|
2019-04-16 06:54:27 +00:00
|
|
|
// helper functions
|
|
|
|
|
|
|
|
/** */
|
|
|
|
private _domainRegex (stringArg: string) {
|
|
|
|
const regexString = /([a-zA-Z0-9\-\_]*)\.{0,1}([a-zA-Z0-9\-\_]*)\.{0,1}([a-zA-Z0-9\-\_]*)\.{0,1}([a-zA-Z0-9\-\_]*)\.{0,1}([a-zA-Z0-9\-\_]*)\.{0,1}$/;
|
|
|
|
const regexMatches = regexString.exec(stringArg);
|
|
|
|
regexMatches.reverse(); //make sure we build the domain from toplevel to subdomain (reversed order)
|
|
|
|
regexMatches.pop(); // pop the last element, which is, since we reversed the Array, the full String of matched elements
|
|
|
|
const regexMatchesFiltered = regexMatches.filter(function(stringArg: string) {
|
|
|
|
return stringArg !== '';
|
|
|
|
});
|
|
|
|
return regexMatchesFiltered;
|
|
|
|
}
|
|
|
|
|
|
|
|
private _protocolRegex (stringArg: string) {
|
|
|
|
const regexString = /^([a-zA-Z0-9]*):\/\//;
|
|
|
|
const regexMatches = regexString.exec(stringArg);
|
|
|
|
if (regexMatches) {
|
|
|
|
return regexMatches[1];
|
|
|
|
} else {
|
|
|
|
return undefined;
|
|
|
|
}
|
2017-10-05 13:55:59 +00:00
|
|
|
}
|
2019-04-16 06:54:27 +00:00
|
|
|
|
|
|
|
private _portRegex (stringArg: string) {
|
|
|
|
const regexString = /^([a-zA-Z0-9]*):\/\//;
|
|
|
|
const regexMatches = regexString.exec(stringArg);
|
|
|
|
if (regexMatches) {
|
|
|
|
return regexMatches[1];
|
|
|
|
} else {
|
|
|
|
return undefined;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|