cvx

1.0.0 • Public • Published

cvx

a distributed command framework

About

cvx is a small library to help you create your own distributed command-line interfaces! Distributed means that none of the commands are in a central place, instead they are executed directly from the npm registry, using a little tool called npx. This means that your commands are always extendable, and Very Fast.

For example, it is extremely easy to build a tool similar to Yeoman. You'd use it like this:

yo my-template

Using cvx, you would just need to publish a npm package called generator-my-template that exposes a binary of the same name, and that would be it! No more setup would be required.

Installation

You need Node.js 7.6 or higher.

npm install cvx

Example

Let's quickly implement the Yeoman example from above:

const cvx = require('cvx')
 
// this is our main function!
// it's an async function because it implicitly returns a promise. don't
// think too much about it, it's not important right now
cvx(async cmd => {
  // cmd is our 'command object'. it's basically a way to keep state,
  // such as config and hooks
  // let's give it a prefix and our command-line arguments:
  cmd.config({
    prefix: 'generator-',
    args: process.argv
  })
  // that's it! now we return the cmd object
  return cmd
})
 

Now, if you run:

node example.js my-template
# or, had we set it up as an executable: 
./example.js my-template

This will automatically download and execute generator-my-template from npm.

API

cvx(function (cmd))

Constructs a command. This function takes another function that basically 'describes' how the whole thing behaves when it's executed. It looks a bit like this:

cvx(async cmd => {
  // your definition here
  return cmd
})

The inner function takes a cmd parameter. This object basically keeps all of the state. The function needs to return cmd, wrapped in a promise. Thankfully, this is made easy by just prefixing the function with async, which automatically makes it return a promise.

cmd.config(conf)

Configures the command. If conf is blank, uses the default config:

  • prefix: What the npm package lookup is prefixed by. Default: ''
  • args: The command line arguments. Required.

cmd.pre(fn)

Registers a hook to run before the main command is run. The inner function takes the current cmd state as a parameter, and can modify it. Needs to return cmd.

cmd.post(fn)

Like cmd.pre, but runs after command execution.

Maintainers

Code of Conduct

This repository operates under the weallbehave Code of Conduct. Its contents can be found in CODE_OF_CONDUCT.md.

License

MIT (see LICENSE document)

Readme

Keywords

none

Package Sidebar

Install

npm i cvx

Weekly Downloads

0

Version

1.0.0

License

MIT

Last publish

Collaborators

  • oceanseraph