UNPKG

vroom-cli-test

Version:

It is a test of vroom cli that is steps installation of vroom.

203 lines (158 loc) 5.85 kB
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;