vroom-cli-test
Version:
It is a test of vroom cli that is steps installation of vroom.
203 lines (158 loc) • 5.85 kB
JavaScript
import inquirer from 'inquirer';
const errorMessage = () => {
console.log("Parse error. Contact with us...")
}
const getIdByName = (jsonContent, name) => {
for (let region in jsonContent['features']) {
if (jsonContent['features'][region]['properties']['name'] === name) {
return jsonContent['features'][region]['properties']['id'];
}
}
}
const getUrlByParentAndName = (jsonContent, parent, name) => {
for (let region in jsonContent['features']) {
let properties = jsonContent['features'][region]['properties'];
if (properties['name'] === name && properties['parent'] === parent) {
return properties['urls']['pbf'];
}
}
}
const getUrlOfContinent = (jsonContent, name) => {
for (let region in jsonContent['features']) {
let properties = jsonContent['features'][region]['properties'];
if (properties['name'] === name) {
return properties['urls']['pbf'];
}
}
}
const getContinents = (jsonContent) => {
let continents = [];
try {
for (let region in jsonContent['features']) {
if (!jsonContent['features'][region]['properties']['parent']) {
continents.push(jsonContent['features'][region]['properties']['name']);
}
}
} catch (err) {
errorMessage();
continents = []
}
return continents;
}
const getSubRegions = (jsonContent, continent) => {
let sub_regions = [];
try {
for (let region in jsonContent['features']) {
if (jsonContent['features'][region]['properties']['parent'] === continent.toLowerCase()) {
sub_regions.push(jsonContent['features'][region]['properties']['name']);
}
}
} catch (err) {
errorMessage();
sub_regions = []
}
return sub_regions;
}
const build_questions = (name, message, choices) => {
return [
{
type: 'list',
name: name,
message: message,
choices: choices
}
];
}
const confirmSelection = async (jsonContent, continent, country, city) => {
let message = 'Your choices: ' + continent;
message = message + (country ? ' : ' + country : '') + (city ? ' : ' + city : '');
message = message + '.\nConfirm this or press n for reselect the region-> ';
let question = [{
type: 'confirm',
name: 'confirm',
message: message,
default: true
}];
const answer = await inquirer.prompt(question)
const confirm = answer['confirm']
if (confirm) {
let url;
if (country && city) {
url = getUrlByParentAndName(jsonContent, getIdByName(jsonContent, country), city);
} else if (country && !city) {
url = getUrlByParentAndName(jsonContent, getIdByName(jsonContent, continent), country);
} else {
url = getUrlOfContinent(jsonContent, continent);
}
return url;
} else {
return await findURL(jsonContent);
}
}
const selectCity = async (cities, entireCityMessage) => {
cities.unshift(entireCityMessage);
let questions = build_questions('city', 'Choose a city:', cities);
const answer = await inquirer.prompt(questions)
const city = answer['city'];
return city;
}
const selectCountry = async (countries, entireMapMessage) => {
countries.unshift(entireMapMessage);
const questions = build_questions('country', 'Choose a country:', countries);
const answer = await inquirer.prompt(questions)
const country = answer['country'];
return country;
}
const selectContinent = async (continents) => {
try {
let questions = build_questions('continent', 'Choose a continent:', continents);
const answer = await inquirer.prompt(questions);
let continent = answer['continent'];
console.log('Continent: ', continent);
return continent;
} catch (err) {
console.error(err)
}
}
const checkSubRegion = async (jsonContent, region) => {
let regions = getSubRegions(jsonContent, getIdByName(jsonContent, region));
if (regions.length) {
return regions;
} else {
return 0;
}
}
const findURL = async (jsonContent) => {
let url;
const continents = await getContinents(jsonContent);
const continent = await selectContinent(continents);
const countries = await checkSubRegion(jsonContent, continent);
if (!countries) {
console.log("No country-specific maps were found.");
url = await confirmSelection(jsonContent, continent, '', '');
return url;
}
const entireContinentMessage = "Download Entire Continent";
const country = await selectCountry(countries, entireContinentMessage);
if (country === entireContinentMessage) {
url = await confirmSelection(jsonContent, continent, '', '');
return url;
}
console.log('Continent: ', country);
const cities = await checkSubRegion(jsonContent, country);
if (!cities) {
console.log("No city-specific maps were found.");
url = await confirmSelection(jsonContent, continent, country, '');
return url;
}
let entireCityMessage = "Download Entire City";
const city = await selectCity(cities, entireCityMessage);
if (city === entireCityMessage) {
url = await confirmSelection(jsonContent, continent, country, '');
return url;
}
console.log('City: ', city);
url = await confirmSelection(jsonContent, continent, country, city);
return url;
};
export default findURL;