UNPKG

weather-cli-starter

Version:

Console interface for getting weather condition

78 lines (71 loc) 1.89 kB
#!/usr/bin/env node import dedent from 'dedent-js'; import { getArgs } from './helpers/args.js' import { getWeather } from './services/api.service.js'; import { printError, printHelp, printSuccess, printForecast } from './services/log.service.js'; import { getKeyValue, saveKeyValue, TOKEN_DICTIONARY } from './services/storage.service.js'; import chalk from 'chalk'; const saveToken = async (token) => { if(!token.length) { printError('Токен не указан') return; } try { await saveKeyValue(TOKEN_DICTIONARY.token, token); printSuccess('Токен сохранен'); } catch(err) { printError(err.message); } } const getCity = async () => { try { const city = await getKeyValue(TOKEN_DICTIONARY.city); return city; } catch(err) { printError(err.message); } } const getForecast = async (city) => { try { city ||= await getCity(); const weather = await getWeather(city); return weather; } catch(err) { if(err?.response?.status === 404) { printError('Неверно указан город'); } else if(err?.response?.status === 401) { printError('Неверно указан токен'); } else { printError(err.message); } } } const saveCity = async (city) => { if(!city.length) { printError('Город не указан'); return; } const validCity = !!(await getForecast(city)); if(!validCity) return; try { await saveKeyValue(TOKEN_DICTIONARY.city, city); printSuccess('Город сохранен'); } catch(err) { printError(err.message); } } const initCLI = async () => { const args = getArgs(process.argv); if(args.h) { return printHelp(); } if(args.s) { return saveCity(args.s); } if(args.t) { return saveToken(args.t); } const weather = await getForecast(); printForecast(weather) } initCLI();