From 74a6ec5fe5d1d10c465c231e64c7b964476464f3 Mon Sep 17 00:00:00 2001 From: Marcin Chrzanowski Date: Sun, 16 Jul 2017 00:15:06 -0400 Subject: Implement CLI --- bin/dicebag.js | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100755 bin/dicebag.js (limited to 'bin') diff --git a/bin/dicebag.js b/bin/dicebag.js new file mode 100755 index 0000000..f7b0921 --- /dev/null +++ b/bin/dicebag.js @@ -0,0 +1,46 @@ +#!/usr/bin/env node +/* eslint no-console: 0 */ + +const { parse, roll, pool } = require('../index.js') + +const parseArgs = () => { + const args = process.argv.slice(2) + const parsedArgs = { + roller: roll, + expression: null + } + + while (args.length > 0) { + const arg = args.shift() + if (arg === '-p') { + parsedArgs.roller = pool + } else { + parsedArgs.expression = arg + } + } + + return parsedArgs +} + +const rollDie = (string, roller) => { + try { + const die = parse(string.trim()) + console.log(roller(die)) + } catch (error) { + console.log(error.message) + } +} + +const runIoLoop = (roller) => { + process.stdin.setEncoding('utf8') + process.stdin.on('data', (string) => { + rollDie(string, roller) + }) +} + +const parsedArgs = parseArgs() +if (parsedArgs.expression) { + rollDie(parsedArgs.expression, parsedArgs.roller) +} else { + runIoLoop(parsedArgs.roller) +} -- cgit v1.2.3