63 lines
1.8 KiB
TypeScript
63 lines
1.8 KiB
TypeScript
import * as plugins from './smartstring.plugins';
|
|
|
|
export class Domain {
|
|
fullName: string
|
|
level1: string
|
|
level2: string
|
|
level3: string
|
|
level4: string
|
|
level5: string
|
|
protocol: string
|
|
zoneName: string
|
|
// aliases
|
|
topLevel: string
|
|
domainName
|
|
subDomain
|
|
constructor(domainStringArg: string) {
|
|
let regexMatches = domainRegex(domainStringArg);
|
|
this.fullName = ''
|
|
for (let i = 1; i <= 5; i++) {
|
|
if (regexMatches[ i - 1 ]) {
|
|
let localMatch = regexMatches[ i - 1 ]
|
|
this[ 'level' + i.toString() ] = localMatch
|
|
if (this.fullName === '') {
|
|
this.fullName = localMatch
|
|
} else {
|
|
this.fullName = localMatch + '.' + this.fullName
|
|
}
|
|
} else {
|
|
this[ 'level' + i.toString() ] = undefined
|
|
};
|
|
};
|
|
this.protocol = protocolRegex(domainStringArg)
|
|
this.zoneName = this.level2 + '.' + this.level1
|
|
|
|
// aliases
|
|
this.topLevel = this.level1
|
|
this.domainName = this.level2
|
|
this.subDomain = this.level3
|
|
}
|
|
}
|
|
|
|
|
|
let domainRegex = function (stringArg: string) {
|
|
let 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}$/
|
|
let 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
|
|
let regexMatchesFiltered = regexMatches.filter(function (stringArg: string) {
|
|
return (stringArg !== '')
|
|
});
|
|
return regexMatchesFiltered
|
|
};
|
|
|
|
let protocolRegex = function (stringArg: string) {
|
|
let regexString = /^([a-zA-Z0-9]*):\/\//
|
|
let regexMatches = regexString.exec(stringArg)
|
|
if (regexMatches) {
|
|
return regexMatches[ 1 ]
|
|
} else {
|
|
return undefined
|
|
}
|
|
}
|