UNPKG

typing-game-cli

Version:

Command line game to practice your typing speed by competing against typer-robot or against your best result

151 lines (145 loc) 4.24 kB
#!/usr/bin/env node import React from 'react'; import { render } from 'ink'; import meow from 'meow'; import pick from 'just-pick'; import compose from 'just-compose'; import filter from 'just-filter-object'; import App from './app.js'; import { config } from './config.js'; const cli = meow(` Usage $ typing-game-cli Shorthand command aliases: $ typing-game $ tpngm $ tgc Options --against-my-best Play against your best result (available after you have competed against a robot at least once) --fast Start a round with a robot having high typing speed. --extra-fast Start a round with a robot having extra high typing speed. --medium Start a round with a robot having medium typing speed. --low Start a round with a robot having low typing speed. --display-results Show cpm and wpm results --sort-by Sort results by specified value (-cpm, cpm, -wpm, wpm, -date, date), Starting "-" indicates descending order, default is "-date" --all-history Show all history when displaying results (otherwise (default) display last 10 results respecting sorting parameter) --topic Use sentences from works written by specified author --top-n Display top n results in displaying results mode Short flags and aliases for options: --against-my-best: -b, --best, --my-best, --myself, --against-my-best-result --fast: -f --extra-fast: -e --medium: -m --low: -l --display-results: -r --sort-by -s --show-all-history: -a, --all, --all-history --clear-results: -c, --clear --topic: --author --top-n: --top Examples $ typing-game-cli $ typing-game-cli --fast $ typing-game-cli -f $ typing-game-cli --extra-fast $ typing-game-cli --medium $ typing-game-cli -m $ typing-game-cli --low $ typing-game-cli --display-results $ typing-game-cli --display-results --top 5 $ typing-game-cli -r $ typing-game-cli -r --sort-by="-wpm" $ typing-game-cli -r -s="wpm" $ typing-game-cli -r -s="-wpm" --all-history $ typing-game-cli -r -s="-wpm" -a $ typing-game-cli --topic mark-twain $ typing-game-cli --author ambrose-bierce `, { importMeta: import.meta, flags: { fast: { type: 'boolean', shortFlag: 'f' }, extraFast: { type: 'boolean', aliases: ['superFast'], shortFlag: 'e' }, medium: { type: 'boolean', shortFlag: 'm' }, low: { type: 'boolean', shortFlag: 'l' }, displayResults: { type: 'boolean', shortFlag: 'r', default: false }, sortBy: { type: 'string', shortFlag: 's', default: '-date' }, showAllHistory: { type: 'boolean', shortFlag: 'a', aliases: ['allHistory', 'all'], default: false }, clearResults: { type: 'boolean', shortFlag: 'c', aliases: ['clear'], default: false }, againstMyBest: { type: 'boolean', shortFlag: 'b', aliases: ['best', 'myBest', 'myself', 'againstMyBestResult'], default: false }, compactResult: { type: 'boolean', aliases: ['cmpc'], default: false }, topN: { type: 'number', aliases: ['top'] }, topic: { type: 'string', aliases: ['author'] } } }); const exitNow = () => process.exit(); // eslint-disable-line n/prefer-global/process if (cli.flags.clearResults) { config.clearAll(); exitNow(); } const robotLevel = compose(flags => pick(flags, ['extraFast', 'fast', 'medium', 'low']), flags => filter(flags, (_, value) => value), flags => Object.keys(flags)[0] || 'medium')(cli.flags); const { displayResults, sortBy, showAllHistory, againstMyBest, compactResult, topN, topic } = cli.flags; render(/*#__PURE__*/React.createElement(App, { robotLevel: robotLevel, displayResults: displayResults, sortBy: sortBy, isShowAllHistory: showAllHistory, isCompetingAgainstBestResult: againstMyBest, isCompactFormat: compactResult, topN: topN, topic: topic })); export { exitNow };