3.0.0 • Published 7 months ago

sushi v3.0.0

Weekly downloads
3
License
MIT
Repository
github
Last release
7 months ago

sushi

Build Status Coverage Status

Express-like framework for CLI apps.

Installation

$ npm install sushi --save

Usage

myapp.js:

const sushi = require('sushi');

const app = sushi();

app.command('start', function () {
  console.log('start command');
});

app.command('stop', function () {
  console.log('stop command');
});

app.command('index', function () {
  console.log('index command');
});

app.run();

Output:

$ node myapp.js start
start command

$ node myapp.js stop
stop command

$ node myapp.js
index command

Getting Started

Arguments

Program arguments are parsed using minimist. Command can access arguments via req.args:

app.command('start', function (req) {
  var name = req.args._[0];
  var delay = req.args.delay;

  console.log('start', name, 'with', delay, 'delay');
});
$ node myapp.js start my-process --delay 500ms
start my-process with 500ms delay

You can also customize the way minimist parses arguments by passing args options (see minimist):

const app = sushi({
	args: {
		boolean: ['verbose']
	}
});

Index command

Index command is executed when other commands don't match the arguments:

app.command('index', function () {
  console.log('index command');
});
$ node myapp.js
index command

$ node myapp.js hello

Middleware

Middleware is a function, that modifies the context or arguments before target command is executed.

app.use(function (req, next) {
  req.context.ok = true;

  // call `next()` when done
  next();
});

app.command('start', function (req) {
  req.context.ok === true; // true

  console.log('start command');
});

Middleware can also abort execution:

app.use(function (req, next) {
  var err = new Error('Fatal error');
  next(err);
});

app.command('start', function (req) {
  // won't be executed
});

app.on('error', function (err) {
  // err is the Error instance from middleware
  err.message === 'Fatal error'; // true
});

Error handling

When one of the middleware or command itself throws an error, error event is emitted:

app.on('error', function (err) {
	// err is the Error instance
});

You can use it to display a friendly error message, report it, etc.

List of middleware

Here's the list of middleware you can use with Sushi:

  • help - help messages

Tests

$ npm test

License

MIT © Vadym Demedes