deep-package-manager
Version:
DEEP Package Manager
87 lines (69 loc) • 1.79 kB
JavaScript
/**
* Created by CCristi on 3/21/17.
*/
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.CNAMEResolver = undefined;
var _Prompt = require('../../../Helpers/Terminal/Prompt');
var _MissingCNAMEException = require('../../Exception/MissingCNAMEException');
class CNAMEResolver {
/**
* @param {String[]} cNames
*/
constructor(cNames) {
if (!cNames || cNames.length === 0) {
throw new _MissingCNAMEException.MissingCNAMEException();
}
this._cNames = cNames;
this._resolvedHostname = null;
}
/**
* @returns {String}
*/
resolveHostname() {
if (!this._resolvedHostname) {
this._resolvedHostname = this._resolveLongest() || this._askForCName();
}
return this._resolvedHostname;
}
/**
* @returns {String}
*/
resolveDomain() {
let hostParts = this.resolveHostname().split('.');
return hostParts.slice(1).join('.');
}
/**
* @returns {String|null}
* @private
*/
_resolveLongest() {
let longestCName = this._cNames.reduce((lCname, cName) => {
return lCname.length > cName.length ? lCname : cName;
});
let cloneCNames = [].concat(this._cNames).filter(cName => cName !== longestCName);
let isSuitable = true;
cloneCNames.forEach(cName => {
if (longestCName.indexOf(cName) === -1) {
isSuitable = false;
}
});
return isSuitable ? longestCName : null;
}
/**
* @returns {String}
* @private
*/
_askForCName() {
let prompt = new _Prompt.Prompt('Choose the CNAME to be used');
let chosenCName = null;
prompt.syncMode = true;
prompt.readChoice(cName => {
chosenCName = cName;
}, this._cNames);
return chosenCName;
}
}
exports.CNAMEResolver = CNAMEResolver;