diff --git a/lib/cli/chart.js b/bin/util/chart.js similarity index 100% rename from lib/cli/chart.js rename to bin/util/chart.js diff --git a/bin/util/helper.js b/bin/util/helper.js new file mode 100644 index 0000000..5a41e41 --- /dev/null +++ b/bin/util/helper.js @@ -0,0 +1,53 @@ +const ansi = require("ansi-styles"); + +const color = { + tblclr: (border) => ansi.cyan.open + border + ansi.cyan.close, + white: (txt) => ansi.white.open + txt + ansi.white.close, + black: (txt) => ansi.black.open + txt + ansi.black.close, + green: (txt) => ansi.green.open + txt + ansi.green.close, + cyan: (txt) => ansi.cyan.open + txt + ansi.cyan.close, + magenta: (txt) => ansi.magenta.open + txt + ansi.magenta.close, + yellow: (txt) => ansi.yellow.open + txt + ansi.yellow.close, + red: (txt) => ansi.red.open + txt + ansi.red.close, + cyanBright: (txt) => ansi.cyanBright.open + txt + ansi.cyanBright.close, + magentaBright: (txt) => + ansi.magentaBright.open + txt + ansi.magentaBright.close, + redBright: (txt) => ansi.redBright.open + txt + ansi.redBright.close, + greenBright: (txt) => ansi.greenBright.open + txt + ansi.greenBright.close, + cyanBG: (txt) => ansi.bgCyan.open + txt + ansi.bgCyan.close, +}; +exports.color = color; + +exports.txt = { + line: "-".repeat(60), + tab: " ", + space: " ", + br: "\n", +}; + +exports.formatNumber = (value) => + value.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,"); +exports.ucfirst = (string) => string.charAt(0).toUpperCase() + string.slice(1); + +exports.table = { + borders: { + top: color.tblclr("═"), + "top-mid": color.tblclr("╤"), + "top-left": color.tblclr("╔"), + "top-right": color.tblclr("╗"), + bottom: color.tblclr("═"), + "bottom-mid": color.tblclr("╧"), + "bottom-left": color.tblclr("╚"), + "bottom-right": color.tblclr("╝"), + left: color.tblclr("║"), + "left-mid": color.tblclr("╟"), + mid: color.tblclr("─"), + "mid-mid": color.tblclr("┼"), + right: color.tblclr("║"), + "right-mid": color.tblclr("╢"), + middle: color.tblclr("│"), + }, + col5: (txt) => { + return { colSpan: 5, content: txt }; + }, +}; diff --git a/bin/util/label.js b/bin/util/label.js new file mode 100644 index 0000000..776141a --- /dev/null +++ b/bin/util/label.js @@ -0,0 +1,230 @@ +const say = require("../../lib/sayings/threads.json"); // sayings +const { color, txt } = require("./helper"); +const pkg = require("../../package.json"); // package.json info +const { space, line, br, tab } = txt; + +const randomSay = () => say[Math.floor(Math.random() * say.length)]; + +exports.randomSay = randomSay; + +const source = "Source: https://www.worldometers.info/coronavirus/", + repo = "Code: https://github.com/warengonzaga/covid19-tracker-cli", + help = "Help: Try to append the URL with /help to learn more...", + bmcurl = "warengonza.ga/coffee4dev", + twitterhandle = "@warengonzaga", + twitterhashtag = "#covid19trackercli", + bmc = "(Buy Me A Coffee) ", + bmcline = "Love this project? Help us to help others by means of coffee!", + twitterline = "Follow me on twitter for more updates!", + gcashNum = "+639176462753", + ansiBMC = color.redBright("(Buy Me A Coffee) " + bmcurl), + ansiTwitter = + color.cyanBG(color.black(twitterhandle)) + + space + + color.cyanBG(color.black(twitterhashtag)), + gCash = "(GCash) ", + ansiGCash = color.cyan(gCash + gcashNum), + title = { + global: "COVID-19 Tracker CLI v" + pkg.version + " - Global Update", + country: (name) => + "COVID-19 Tracker CLI v" + pkg.version + " - " + name + " Update", + globalHistory: + "COVID-19 Tracker CLI v" + pkg.version + " - Global Historical Chart", + history: (name) => + `COVID-19 Tracker CLI v ${pkg.version} - ${name} Historical Chart`, + }, + asOfDate = (asof, currentdate) => + "As of " + asof.toLocaleString() + " [Date:" + currentdate + "]", + footerOne = br + br + " " + line + br + " " + bmcline + br + " ", + footerTwo = br + " " + line + br + " " + twitterline + br + " ", + defaultFooter = footerOne + ansiBMC + footerTwo + ansiTwitter + br + br, + specialFooter = + footerOne + + ansiGCash + + br + + " " + + ansiBMC + + footerTwo + + ansiTwitter + + br + + br, + plainDefaultFooter = + br + + tab + + line + + br + + tab + + bmcline + + br + + tab + + bmc + + bmcurl + + br + + tab + + line + + br + + tab + + twitterline + + br + + tab + + twitterhandle + + space + + twitterhashtag + + br + + br, + plainCountryDefaultFooter = + br + + tab + + line + + br + + tab + + bmcline + + br + + tab + + bmc + + bmcurl + + br + + tab + + line + + br + + tab + + twitterline + + br + + tab + + twitterhandle + + space + + twitterhashtag + + br + + br, + plainCountrySpecialFooter = + br + + tab + + line + + br + + tab + + bmcline + + br + + tab + + gCash + + gcashNum + + br + + tab + + bmc + + bmcurl + + br + + tab + + line + + br + + tab + + twitterline + + br + + tab + + twitterhandle + + space + + twitterhashtag + + br + + br, + manual = ` + ${line} + COVID-19 Tracker CLI v${pkg.version} by Waren Gonzaga + ${line} + + Basic Usage: + + / ................... by country stats + ex. /philippines /korea + / ................ by country stats shortcut + ex. /ph /kor + + /cmd .............................. if using CMD + /cmd/ ............... by country stats on CMD + /cmd/ ............ by country stats shortcut on CMD + + /plain or /basic .................. if your cli does not support ANSI encoding + similar to /cmd usage and layout + ex. /plain/philippines or /plain/ph + /basic/philippines or /basic/ph + + ${line} + + ANSI Supported Features + + /history/ or /history/all ......... historical chart globally + + /history/ ........... historical chart for cases of a country + ex. /history/philippines /history/korea + /history/ ........ shortcut historical chart for cases of a country + ex. /history/ph /history/kor + + Cases and Deaths is currently available for historical chart. + + /history/ph/cases or /history/ph/deaths + + ${line} + + To learn more about the usage... please visit + https://warengonza.ga/covid19-tracker-cli + + ISO 3166-1 Code List: + https://warengonza.ga/iso-3166-1-codes + + ${line} + ${repo} + ${line} + + ${randomSay()} + `, + helpMenu = + manual + + br + + tab + + line + + br + + tab + + bmcline + + br + + tab + + bmc + + bmcurl + + br + + tab + + txt.line + + br + + tab + + twitterline + + br + + tab + + twitterhandle + + space + + twitterhashtag + + br + + br; + +exports.labels = { + pkg, + source, + repo, + help, + bmcurl, + twitterhandle, + twitterhashtag, + bmc, + bmcline, + twitterline, + gCash, + gcashNum, + ansiBMC, + ansiTwitter, + ansiGCash, + title, + asOfDate, + footerOne, + footerTwo, + defaultFooter, + specialFooter, + plainDefaultFooter, + plainCountryDefaultFooter, + plainCountrySpecialFooter, + manual, + helpMenu, +}; diff --git a/lib/cli/index.js b/lib/cli/index.js index 43ec357..52d3c2d 100644 --- a/lib/cli/index.js +++ b/lib/cli/index.js @@ -1,203 +1,152 @@ -/* eslint-disable no-await-in-loop */ - -const color = require('ansi-styles'), - table3 = require('cli-table3'), - chart = require('./chart'), - pkg = require('../../package.json'), // package.json info - say = require('../sayings/threads.json'); // sayings - -// ansi colors -const - // table color - tblclr = (border) => cyan(border), - // normal ansi colors - white = (txt) => color.white.open + txt + color.white.close, - black = (txt) => color.black.open + txt + color.black.close, - green = (txt) => color.green.open + txt + color.green.close, - cyan = (txt) => color.cyan.open + txt + color.cyan.close, - magenta = (txt) => color.magenta.open + txt + color.magenta.close, - yellow = (txt) => color.yellow.open + txt + color.yellow.close, - red = (txt) => color.red.open + txt + color.red.close, - // bright ansi colors - cyanBright = (txt) => color.cyanBright.open + txt + color.cyanBright.close, - magentaBright = (txt) => color.magentaBright.open + txt + color.magentaBright.close, - redBright = (txt) => color.redBright.open + txt + color.redBright.close, - greenBright = (txt) => color.greenBright.open + txt + color.greenBright.close, - // background ansi color - cyanBG = (txt) => color.bgCyan.open + txt + color.bgCyan.close, - // horizontal line - line = '-'.repeat(60), - tab = ' ', - space = ' ', - br = '\n'; - -// random sayings -const randomSay = () => { - let random = Math.floor(Math.random() * say.length); - return say[random]; -}; - -// format data -const formatNumber = (value) => { - return value.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,'); -}; +const table3 = require("cli-table3"), + chart = require("../../bin/util/chart"), + { labels, randomSay } = require("../../bin/util/label"), + { color, txt, table, formatNumber, ucfirst } = require("../../bin/util/helper"), + { line, br, space } = txt, + { borders, col5 } = table, + { + source, + help, + repo, + title, + asOfDate, + helpMenu, + defaultFooter, + plainDefaultFooter, + specialFooter, + plainCountrySpecialFooter, + plainCountryDefaultFooter, + } = labels, + { + magenta, + magentaBright, + red, + redBright, + green, + greenBright, + white, + cyan, + cyanBright, + yellow, + } = color; // time data let ts = Date.now(), - date_ob = new Date(ts), - date = date_ob.getDate(), - month = date_ob.getMonth() + 1, - year = date_ob.getFullYear(), - currentdate = month + "/" + date + "/" + year; - -// table configuration -const borders = { 'top': tblclr('═'), - 'top-mid': tblclr('╤'), - 'top-left': tblclr('╔'), - 'top-right': tblclr('╗'), - 'bottom': tblclr('═'), - 'bottom-mid': tblclr('╧'), - 'bottom-left': tblclr('╚'), - 'bottom-right': tblclr('╝'), - 'left': tblclr('║'), - 'left-mid': tblclr('╟'), - 'mid': tblclr('─'), - 'mid-mid': tblclr('┼'), - 'right': tblclr('║'), - 'right-mid': tblclr('╢'), - 'middle': tblclr('│')}; - -// additional informaton -const source = 'Source: https://www.worldometers.info/coronavirus/', - repo = 'Code: https://github.com/warengonzaga/covid19-tracker-cli', - help = 'Help: Try to append the URL with /help to learn more...', - sourceInfo = {colSpan:5,content:source}, - repoInfo = {colSpan:5,content:repo}, - helpInfo = {colSpan:5,content:help}, - bmcurl = 'warengonza.ga/coffee4dev', - twitterhandle = '@warengonzaga', - twitterhashtag = '#covid19trackercli', - bmcline = 'Love this project? Help us to help others by means of coffee!', - twitterline = 'Follow me on twitter for more updates!', - gcashNum = '+639176462753', - ansiBMC = redBright('(Buy Me A Coffee) '+bmcurl), - ansiTwitter = cyanBG(black(twitterhandle))+space+cyanBG(black(twitterhashtag)), - ansiGCash = cyan('(GCash) '+gcashNum); + date_ob = new Date(ts), + date = date_ob.getDate(), + month = date_ob.getMonth() + 1, + year = date_ob.getFullYear(), + currentdate = month + "/" + date + "/" + year; // help menu -exports.help = () => { - const manual = ` - ${line} - COVID-19 Tracker CLI v${pkg.version} by Waren Gonzaga - ${line} - - Basic Usage: - - / ................... by country stats - ex. /philippines /korea - / ................ by country stats shortcut - ex. /ph /kor - - /cmd .............................. if using CMD - /cmd/ ............... by country stats on CMD - /cmd/ ............ by country stats shortcut on CMD - - /plain or /basic .................. if your cli does not support ANSI encoding - similar to /cmd usage and layout - ex. /plain/philippines or /plain/ph - /basic/philippines or /basic/ph - - ${line} - - ANSI Supported Features - - /history/ or /history/all ......... historical chart globally - - /history/ ........... historical chart for cases of a country - ex. /history/philippines /history/korea - /history/ ........ shortcut historical chart for cases of a country - ex. /history/ph /history/kor - - Cases and Deaths is currently available for historical chart. - - /history/ph/cases or /history/ph/deaths - - ${line} - - To learn more about the usage... please visit - https://warengonza.ga/covid19-tracker-cli - - ISO 3166-1 Code List: - https://warengonza.ga/iso-3166-1-codes - - ${line} - ${repo} - ${line} - - ${randomSay()} - `; - const defaultfooter = br+tab+line+br+tab+bmcline+ - br+tab+'(Buy Me A Coffee) '+bmcurl+ - br+tab+line+ - br+tab+twitterline+ - br+tab+twitterhandle+space+twitterhashtag+br+br; - - return manual+defaultfooter; -}; +exports.help = () => helpMenu; // covid19 global tracker -exports.covid19globaltracker = (c, d, r, u) => { - const cases = c, deaths = d, recovered = r, asof = new Date(u), - mortalityPercentage = (d/c)*100, recoveredPercentage = (r/c)*100, - table = new table3({ - head: [{colSpan:5,content:white('COVID-19 Tracker CLI v'+pkg.version+' - Global Update')}], - chars: borders - }); - table.push( - [{colSpan:5,content:yellow('As of '+asof.toLocaleString()+' [Date:'+currentdate+']')}], - [magenta('Cases'), red('Deaths'), green('Recovered'), red('Mortality %'), green('Recovered %')], - [formatNumber(cases), formatNumber(deaths), formatNumber(recovered), mortalityPercentage.toFixed(2), recoveredPercentage.toFixed(2)], - [helpInfo],[sourceInfo],[repoInfo] - ); - const defaultfooter = footerOne+ansiBMC+footerTwo+ansiTwitter+br+br; - return table.toString()+br+br+space+green(randomSay())+defaultfooter; +exports.covid19globaltracker = (cases, deaths, recovered, u) => { + const asof = new Date(u), + mortalityPercentage = (deaths / cases) * 100, + recoveredPercentage = (recovered / cases) * 100, + table = new table3({ + head: [col5(white(title.global))], + chars: borders, + }); + table.push( + [col5(yellow(asOfDate(asof, currentdate)))], + [ + magenta("Cases"), + red("Deaths"), + green("Recovered"), + red("Mortality %"), + green("Recovered %"), + ], + [ + formatNumber(cases), + formatNumber(deaths), + formatNumber(recovered), + mortalityPercentage.toFixed(2), + recoveredPercentage.toFixed(2), + ], + [col5(help)], + [col5(source)], + [col5(repo)] + ); + return ( + table.toString() + br + br + space + green(randomSay()) + defaultFooter + ); }; // covid19 country tracker -exports.covid19countrytracker = (n, c, tC, d, tD, r, a, cl, cPOM, u) => { - const name = n, cases = c, todayCases = tC, - deaths = d, todayDeaths = tD, recovered = r, - active = a, critical = cl, casesPerOneMillion = cPOM, - mortalityPercentage = (d/c)*100, recoveryPercentage = (r/c)*100, - asof = new Date(u); - table = new table3({ - head: [{colSpan:5,content:white('COVID-19 Tracker CLI v'+pkg.version+' - '+name+' Update')}], - chars: borders - }); - table.push( - [{colSpan:5,content:yellow('As of '+asof.toLocaleString()+' [Date:'+currentdate+']')}], - [magenta('Cases'), red('Deaths'), green('Recovered'), cyan('Active'), cyanBright('Cases/Million')], - [formatNumber(cases), formatNumber(deaths), formatNumber(recovered), formatNumber(active), formatNumber(casesPerOneMillion)], - [magentaBright('Today Cases'), redBright('Today Deaths'), redBright('Critical'), red('Mortality %'), greenBright('Recovery %')], - [formatNumber(todayCases), formatNumber(todayDeaths), formatNumber(critical), mortalityPercentage.toFixed(2), recoveryPercentage.toFixed(2)], - [sourceInfo],[repoInfo] - ); - const tableFooter = table.toString()+br+br+space+green(randomSay()), - defaultfooter = footerOne+ansiBMC+footerTwo+ansiTwitter+br+br, - specialfooter = footerOne+ansiGCash+br+' '+ansiBMC+footerTwo+ansiTwitter+br+br; - - return n=='Philippines' ? tableFooter+specialfooter : tableFooter+defaultfooter; +exports.covid19countrytracker = ( + name, + cases, + todayCases, + deaths, + todayDeaths, + recovered, + active, + critical, + casesPerOneMillion, + u +) => { + const mortalityPercentage = (deaths / cases) * 100, + recoveryPercentage = (recovered / cases) * 100, + asof = new Date(u), + table = new table3({ + head: [col5(color.white(title.country(name)))], + chars: borders, + }); + table.push( + [col5(yellow(asOfDate(asof, currentdate)))], + [ + magenta("Cases"), + red("Deaths"), + green("Recovered"), + cyan("Active"), + cyanBright("Cases/Million"), + ], + [ + formatNumber(cases), + formatNumber(deaths), + formatNumber(recovered), + formatNumber(active), + formatNumber(casesPerOneMillion), + ], + [ + magentaBright("Today Cases"), + redBright("Today Deaths"), + redBright("Critical"), + red("Mortality %"), + greenBright("Recovery %"), + ], + [ + formatNumber(todayCases), + formatNumber(todayDeaths), + formatNumber(critical), + mortalityPercentage.toFixed(2), + recoveryPercentage.toFixed(2), + ], + [col5(help)], + [col5(source)], + [col5(repo)] + ); + + const tableFooter = table.toString() + br + br + space + green(randomSay()); + + return name == "Philippines" + ? tableFooter + specialFooter + : tableFooter + defaultFooter; }; -exports.plainglobaltracker = (c, d, r, u) => { - const cases = c, deaths = d, recovered = r, asof = new Date(u), - mortalityPercentage = (d/c)*100, recoveredPercentage = (r/c)*100; +exports.plainglobaltracker = (cases, deaths, recovered, u) => { + const asof = new Date(u), + mortalityPercentage = (deaths / cases) * 100, + recoveredPercentage = (recovered / cases) * 100; - const visual = ` + const visual = ` ${line} - COVID-19 Tracker CLI v${pkg.version} - Global Update + ${title.global} ${line} - As of ${asof.toLocaleString()} [Date: ${currentdate}] + ${asOfDate(asof, currentdate)} ${line} Cases | ${formatNumber(cases)} Deaths | ${formatNumber(deaths)} @@ -214,27 +163,31 @@ exports.plainglobaltracker = (c, d, r, u) => { ${randomSay()} `; - const defaultfooter = br+tab+line+br+tab+bmcline+ - br+tab+'(Buy Me A Coffee) '+bmcurl+ - br+tab+line+ - br+tab+twitterline+ - br+tab+twitterhandle+space+twitterhashtag+br+br; - return visual+defaultfooter; + return visual + plainDefaultFooter; }; -exports.plaincountrytracker = (n, c, tC, d, tD, r, a, cl, cPOM, u) => { - const name = n, cases = c, todayCases = tC, - deaths = d, todayDeaths = tD, recovered = r, - active = a, critical = cl, casesPerOneMillion = cPOM, - mortalityPercentage = (d/c)*100, recoveredPercentage = (r/c)*100, - asof = new Date(u); - - const visual = ` +exports.plaincountrytracker = ( + name, + cases, + todayCases, + deaths, + todayDeaths, + recovered, + active, + critical, + casesPerOneMillion, + u +) => { + const mortalityPercentage = (deaths / cases) * 100, + recoveredPercentage = (recovered / cases) * 100, + asof = new Date(u); + + const visual = ` ${line} - COVID-19 Tracker CLI v${pkg.version} - ${name} Update + ${title.country(name)} ${line} - As of ${asof.toLocaleString()} [Date: ${currentdate}] + ${asOfDate(asof, currentdate)} ${line} Cases | ${formatNumber(cases)} Today Cases | ${formatNumber(todayCases)} @@ -254,79 +207,115 @@ exports.plaincountrytracker = (n, c, tC, d, tD, r, a, cl, cPOM, u) => { ${randomSay()} `; - const defaultfooter = br+tab+line+br+tab+bmcline+ - br+tab+'(Buy Me A Coffee) '+bmcurl+ - br+tab+line+ - br+tab+twitterline+ - br+tab+twitterhandle+space+twitterhashtag+br+br, - - specialfooter = br+tab+line+br+tab+bmcline+ - br+tab+'(GCash) '+gcashNum+ - br+tab+'(Buy Me A Coffee) '+bmcurl+ - br+tab+line+ - br+tab+twitterline+ - br+tab+twitterhandle+space+twitterhashtag+br+br; - - return n=='Philippines' ? visual+specialfooter : visual+defaultfooter; + return name == "Philippines" + ? visual + plainCountrySpecialFooter + : visual + plainCountryDefaultFooter; }; -exports.historyGlobalTracker = (c, d, r, u, h, chartType) => { - const cases = c, deaths = d, recovered = r, asof = new Date(u), - mortalityPercentage = (d/c)*100, recoveredPercentage = (r/c)*100, - table = new table3({ - head: [{colSpan:5,content:white('COVID-19 Tracker CLI v'+pkg.version+' - Global Historical Chart')}], - chars: borders - }), - dates = Object.keys(h[chartType]), - from = dates[0], - to = dates[dates.length - 1], - chartData = chart.generate(h, chartType); - table.push( - [{colSpan:5,content:yellow('As of '+asof.toLocaleString()+' [Date:'+currentdate+']')}], - [magenta('Cases'), red('Deaths'), green('Recovered'), red('Mortality %'), green('Recovered %')], - [formatNumber(cases), formatNumber(deaths), formatNumber(recovered), mortalityPercentage.toFixed(2), recoveredPercentage.toFixed(2)], - [{colSpan: 5, content: magenta(`${ucfirst(chartType)} from ${from} to ${to}`)}], - [{colSpan: 5, content: chartData}], - [helpInfo],[sourceInfo],[repoInfo] - ); - const defaultfooter = footerOne+ansiBMC+footerTwo+ansiTwitter+br+br; - return table.toString()+br+br+space+green(randomSay())+defaultfooter; -} - -exports.historyCountryTracker = (n, c, tC, d, tD, r, a, cl, cPOM, u, h, chartType) => { - const name = n, cases = c, todayCases = tC, - deaths = d, todayDeaths = tD, recovered = r, - active = a, critical = cl, casesPerOneMillion = cPOM, - mortalityPercentage = (d/c)*100, recoveredPercentage = (r/c)*100, - asof = new Date(u), - dates = Object.keys(h.timeline[chartType]), - from = dates[0], - to = dates[dates.length - 1], - table = new table3({ - head: [{colSpan: 5, content: white(`COVID-19 Tracker CLI v ${pkg.version} - ${name} Historical Chart`)}], - chars: borders, - }), - chartData = chart.generate(h, chartType); - table.push( - [{colSpan: 5, content: yellow(`As of ${asof.toLocaleString()} Date: [${currentdate}]`)}], - [magenta('Cases'), red('Deaths'), green('Recovered'), cyan('Active'), cyanBright('Cases/Million')], - [formatNumber(cases), formatNumber(deaths), formatNumber(recovered), formatNumber(active), formatNumber(casesPerOneMillion)], - [magentaBright('Today Cases'), redBright('Today Deaths'), redBright('Critical'), red('Mortality %'), greenBright('Recovery %')], - [formatNumber(todayCases), formatNumber(todayDeaths), formatNumber(critical), mortalityPercentage.toFixed(2), recoveredPercentage.toFixed(2)], - [{colSpan: 5, content: magenta(`${ucfirst(chartType)} from ${from} to ${to}`)}], - [{colSpan: 5, content: chartData}], - [helpInfo],[sourceInfo],[repoInfo] - ); - - const tableFooter = table.toString()+br+br+space+green(randomSay()), - defaultfooter = footerOne+ansiBMC+footerTwo+ansiTwitter+br+br, - specialfooter = footerOne+ansiGCash+br+' '+ansiBMC+footerTwo+ansiTwitter+br+br; - - return n == 'Philippines' ? tableFooter+specialfooter : tableFooter+defaultfooter; +exports.historyGlobalTracker = (cases, deaths, recovered, u, h, chartType) => { + const asof = new Date(u), + mortalityPercentage = (deaths / cases) * 100, + recoveredPercentage = (recovered / cases) * 100, + table = new table3({ + head: [col5(white(title.globalHistory))], + chars: borders, + }), + dates = Object.keys(h[chartType]), + from = dates[0], + to = dates[dates.length - 1], + chartData = chart.generate(h, chartType); + table.push( + [col5(yellow(asOfDate(asof, currentdate)))], + [ + magenta("Cases"), + red("Deaths"), + green("Recovered"), + red("Mortality %"), + green("Recovered %"), + ], + [ + formatNumber(cases), + formatNumber(deaths), + formatNumber(recovered), + mortalityPercentage.toFixed(2), + recoveredPercentage.toFixed(2), + ], + [col5(magenta(`${ucfirst(chartType)} from ${from} to ${to}`))], + [col5(chartData)], + [col5(help)], + [col5(source)], + [col5(repo)] + ); + return ( + table.toString() + br + br + space + green(randomSay()) + defaultfooter + ); }; -const footerOne = br+br+' '+line+br+' '+bmcline+br+' ', - footerTwo = br+' '+line+br+' '+twitterline+br+' '; - -// capitalize first letter -const ucfirst = (string) => string.charAt(0).toUpperCase() + string.slice(1); +exports.historyCountryTracker = ( + name, + cases, + todayCases, + deaths, + todayDeaths, + recovered, + active, + critical, + casesPerOneMillion, + u, + h, + chartType +) => { + const mortalityPercentage = (deaths / cases) * 100, + recoveredPercentage = (recovered / cases) * 100, + asof = new Date(u), + dates = Object.keys(h.timeline[chartType]), + from = dates[0], + to = dates[dates.length - 1], + table = new table3({ + head: [col5(white(title.history(name)))], + chars: borders, + }), + chartData = chart.generate(h, chartType); + table.push( + [col5(yellow(asOfDate(asof, currentdate)))], + [ + magenta("Cases"), + red("Deaths"), + green("Recovered"), + cyan("Active"), + cyanBright("Cases/Million"), + ], + [ + formatNumber(cases), + formatNumber(deaths), + formatNumber(recovered), + formatNumber(active), + formatNumber(casesPerOneMillion), + ], + [ + magentaBright("Today Cases"), + redBright("Today Deaths"), + redBright("Critical"), + red("Mortality %"), + greenBright("Recovery %"), + ], + [ + formatNumber(todayCases), + formatNumber(todayDeaths), + formatNumber(critical), + mortalityPercentage.toFixed(2), + recoveredPercentage.toFixed(2), + ], + [col5(magenta(`${ucfirst(chartType)} from ${from} to ${to}`))], + [col5(chartData)], + [col5(help)], + [col5(source)], + [col5(repo)] + ); + + const tableFooter = table.toString() + br + br + space + green(randomSay()); + + return name == "Philippines" + ? tableFooter + specialFooter + : tableFooter + defaultFooter; +}; diff --git a/package-lock.json b/package-lock.json index 3785d61..09691cd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "covid19-tracker-cli", - "version": "3.1.0", + "version": "3.2.0", "lockfileVersion": 1, "requires": true, "dependencies": {