Skip to content
This repository was archived by the owner on Dec 23, 2018. It is now read-only.

Repository files navigation

This library is not actively maintained.

C-e-L-er-I

Alt command line

Features:

  • History (up/down arrows)
  • Progress Bar
  • Loading/busy spinner
  • Password input
  • Confirmation
  • Prompt
  • Parse command line args
  • help menu, and sub help menu
  • Multi-line tables
  • Build flexible commands via beanpole
    • OR statement
    • Middleware
    • Parameters
  • Trees
  • Exposing Javascript, and calling it from the command line - inspired by mongo's CLI utilitiy

To Do:

  • Help menu api
  • Title View
  • Custom colors for each view (input, loader, progress, table, etc.): exports.colors = {}
  • Error handling (display of command not found)
  • Add transports instead of depending on native stdin/stdout
    • Ability to use online

Usage:

.option(cmdOrOps, descOrCallback, callback)

Listens for a key (enter, up, left, backspace, etc.), or command. See beanpole for documentation.

Hello World:

varceleri=require('celeri');//an option with info for the help menuceleri.option({command: 'hello :person',description: 'Prints "hello [person]!"',optional: {'--age': 'The person\'s age','--gender': 'The person\'s gender'}},function(data){console.log("Hello %s!",data.person);if(data.age)console.log("%s is %d years old.",data.person,data.age);if(data.gender)console.log("%s is a %s.",data.person,data.gender);});//parse the command line argsceleri.parse(process.argv);

Interactive in terminal:

# node ./cmd ↩
> hello craig ↩
hello craig!

passed as arguments:

# node ./hello hello craig --age=21 --gender=cat ↩
hello craig!
craig is 21 years old.
craig is a cat.

Help menu:

# node ./cmd help ↩
Usage: [command] --arg=value --arg2
Help:
help Show help menu
[cmd] help Show command help menu
Commands:
hello Prints "hello [person]!""

Command Specific help menu:

# node ./cmd hello help ↩
Prints "hello [person]!""
Usage: hello [person]
Optional Flags: --age The person's age
--gender The person's gender

.usage(value)

Sets the help menu usage text

celeri.usage('[command] --arg=value');

"OR" statement:

celeri.option('hello :name OR hi :name','some description',function(data){console.log('Hello '+data.name+'!');}).option('set address :zip OR set address :city :state :zip',function(data){console.log("City: %s, State: %s, Zip: %s ",data.city||'None provided',data.state||'None provided',data.zip);});

.onJs(api)

You can easily expose javascript functions by providing an object:

varapi={sayHello: function(name){console.log("hello %s!",name||'craig');}}celeri.onJs({api: api});

In terminal:

node ./hello ↩
> api.sayHello("john"); ↩
hello john!

.progress(label, percent)

vari=0;varinterval=setInterval(function(){celeri.progress('Label: ',i++);if(i==100)clearInterval(interval);},10);

.loading(label)

varspinner=celeri.loading('Processing: ');setTimeout(function(){spinner.done(true);//undefined = done, true = success, false = fail},1000);

.prompt(label, callback)

celeri.prompt('Username: ',function(input){});

.confirm(message, callback)

celeri.confirm("Do you want to continue?",function(yes){if(yes){//continue}});

.password(label[, mask], callback)

//mask = *celeri.password('Password: ','*',function(input){//password});//no maskceleri.password('Password: ',function(input){//password});

.auth(callback)

celeri.auth(function(user,pass){//auth here});

.drawTable(objects, ops)

varobjects=[{name: 'Craig',age: 21,interests: 'Cooking, espresso, backpacking, coding'},{name: 'Tim',age: 21,interests: 'Design, Traveling, Photography'}];celeri.drawTable(objects,{columns: ['name','age','interests']});

Gives you something like:

Alt command line

Here's a multi-line table:

Alt command line

.drawTree(tree)

Draws a tree

//print out the contents of the celeri objectceleri.drawTree(celeri);

Here's another example:

Alt command line

Let's kick it up a notch

varceleri=require('../lib');varcredentials;celeri.option('login OR login :user :pass',function(data){//reference to the current requestvarself=this;//called after auth credentials have been entered infunctiononAuth(creds){//credits wrong? DO NOT CONTINUEif(creds.user!='user'||creds.pass!='pass'){returnconsole.log("Incorrect user / pass".red);}//otherwise, add the user to the CURRENT request so it can be passed//onto the next route listenerself.user=creds.user;//cache the credentials so the user doesn't have to login each timecredentials=creds;//not another listener? display a success responseif(!self.next())console.log("Logged in as %s",creds.user.green);}//user already logged in? pass!if(credentials){onAuth(credentials);}//otherwise check if the user is passed in the routeelseif(data.user&&data.pass){onAuth(data);}//or prompt for authenticationelse{celeri.auth(function(user,pass){onAuth({user: user,pass: pass});});}});/** * This stuff's private. The user has to be authenticated *before* this command is executed */celeri.option('login -> account',function(){console.log('Here\'s your account info %s!',this.user.green);});celeri.open();celeri.parse(process.argv);

Here's what you get:

Alt command line

About

CLI library for node.js

Resources

Stars

164 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages