A command-line router
I made a router for a command-line app I was making, and this is it!
I wanted to build an app that worked less like a traditional *nix app, with its series of "-t 13" and "--other-option=yesplz" key-value arguments, and more like git, in those parts where you give word commands like "stash pop" and "branch".
To make a command-line app, preheat your oven to 176.7°C and type:
var router = require"./index.js"routerif typeof number === "undefined" || isNaNnumberconsole.log'wat'elseconsole.logparseFloatnumber * 2
Run your app with
example.js double 13 and it will spit
26 right back at you.
But who has time to type out whole words? Lieutenant lets you type in as few characters as you want, as long as it's enough to uniquely identify a command.
example.js d 13 will work just as well.
You don't have to specify the arguments, Lieutenant doesn't care, it will pass them all in so you can handle any number of values for a command:
routerconsole.logArrayprototypeslicecallargumentsreducereturn parseFloata + parseFloatb
example.js 3 4 5 =>
12 just like you'd hope.
But maybe that's not why you're here - maybe you're holding out for some real routing, some recursion!
routertest:var even = parseIntn % 2 === 0console.log"That's " + even ? "" : "not " + "even!"var even = parseIntn % 2 === 0console.log"That's " + even ? "not " : "" + "odd!"
But hey, what if you want people to just
example.js test without specifying anything else? Don't worry; there's a hack for that. Just add a default property:
routertest:var even = parseIntn % 2 === 0console.log"That's " + even ? "" : "not " + "even!"var even = parseIntn % 2 === 0console.log"That's " + even ? "not " : "" + "odd!"console.log"I just checked, and your computer is still on."
If the user passes in arguments that aren't valid, Lietenant doesn't give them any hints about which commands are valid. If you want your app to say something useful in those cases, you'll have to write it yourself.
You can supply your custom error-handling by passing a function as the second argument to the routing function:
routerconsole.logArrayprototypeslicecallargumentsreducereturn parseFloata + parseFloatbconsole.log"Type in double or add or test or something, not those dumb" argumentslength "words you did"
As Relient K said in that one song they wrote back when they were still styling a catchy bassline, the rest is up to you!