Skip to content

craigmulligan/js-fire

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
bin
 
 
 
 
lib
 
 
 
 
 
 
 
 
 
 
 
 

js-fire Node.js CI

A javascript implementation of google/python-fire

js-fire is a library for automatically generating command line interfaces (CLIs) from most js objects.

  • js Fire is a simple way to create a CLI in js.
  • js Fire helps with exploring existing code or turning other people's code into a CLI.
  • js Fire makes transitioning between Bash and js easier.

Installation

yarn add js-fire
npm install js-fire

js-fire is exposed as both an API and a CLI.

API Usage

You can call Fire on any functions and objects:

Here's an example of calling Fire on a object, you can infinitely nest objects to create subcommands.

const fire = require("js-fire");

const calculator = {
  __description__: "I am a math machine",
  double: (number) => {
    // I double things
    return 2 * number;
  },
  add: (n1 = Math.PI, n2) => {
    return n1 + n2;
  },
  misc: {
    year: () => "1999",
    brand: () => "casio",
    hello: (name) => `hello ${name}`,
  },
};

fire(calculator);

Then, from the command line, you can run:

node calculator.js double --number=15  # 30
node calculator.js misc hello hobochild  # 'hello hobochild'

Automactic --help command.

node calculator.js --help

USAGE:
	node calculator.js

DESCRIPTION:
	I am a math machine

COMMANDS:

	half  --number=<number>
	double  --number=<number>
	add  --n1=3.141592653589793  --n2=<n2>

	misc
		year
		brand
		hello  --name=<name>

Automatic --interactive mode:

asciicast

For additional examples, see /examples.

CLI Usage

js-fire exposes a CLI that takes modulePath and passes it to js-fire.

USAGE:
	js-fire  --modulePath=<modulePath>

Example

So you can js-fire on most js modules.

js-fire fs -- writeFileSync --path=hello.txt --data="hiii"

You can also use interactive and help mode to explore a modules api:

js-fire fs -- -h

USAGE:
	js-fire

COMMANDS:

	appendFile <flags> --path=<path>  --data=<data>  --options=<options>  --callback=<callback>
	appendFileSync <flags> --path=<path>  --data=<data>  --options=<options>
	access <flags> --path=<path>  --mode=<mode>  --callback=<callback>
	accessSync <flags> --path=<path>  --mode=<mode>
	chown <flags> --path=<path>  --uid=<uid>  --gid=<gid>  --callback=<callback>
	chownSync <flags> --path=<path>  --uid=<uid>  --gid=<gid>
	chmod <flags> --path=<path>  --mode=<mode>  --callback=<callback>
	chmodSync <flags> --path=<path>  --mode=<mode>
	close <flags> --fd=<fd>  --callback=<callback>
	closeSync <flags> --fd=<fd>
	copyFile <flags> --src=<src>  --dest=<dest>  --flags=<flags>  --callback=<callback>
	copyFileSync <flags> --src=<src>  --dest=<dest>  --flags=<flags>
	createReadStream <flags> --path=<path>  --options=<options>
	createWriteStream <flags> --path=<path>  --options=<options>
	exists <flags> --path=<path>  --callback=<callback>
	existsSync <flags> --path=<path>
  ...