UNPKG

play-snake

Version:

CLI Snake in a functional style

52 lines (44 loc) 1.32 kB
#! /usr/bin/env node const game = require('./cli/game') const { minSize } = require('./config') const { and, pipe, gt } = require('./utils') const { help, options, isOption } = require('./cli/options') const exit = (status = 0, message = help) => { console.log(message) process.exit(status) } /** isValidInput :: a → Boolean */ const isValidInput = pipe(Number, and(Number.isInteger, gt(minSize-1))) /** onOne :: [String] → () */ const onOne = ([arg]) => isOption(arg) ? exit(0, options[arg]) : isValidInput(arg) ? game.start(arg, arg) : exit(1) /** onTwo :: [String] → () */ const onTwo = ([a, b]) => isValidInput(a) && isValidInput(b) ? game.start(a, b) : isValidInput(a) && b === '-b' ? game.start(a, a, false) : isValidInput(b) && a === '-b' ? game.start(b, b, false) : exit(1) /** onThree :: [String] → () */ const onThree = args => { const dimentions = args.filter(isValidInput) dimentions.length === 2 && args.includes('-b') ? game.start(...dimentions, false) : exit(1) } /** parseArguments :: [String] → () */ const parseArguments = args => { switch (args.length) { case 1: onOne(args); break; case 2: onTwo(args); break; case 3: onThree(args); break; default: exit(1) } } parseArguments(process.argv.slice(2))