1.0.0 • Published 8 years ago

json-commander v1.0.0

Weekly downloads
1
License
MIT
Repository
github
Last release
8 years ago

NPM version Build Status Dependency Status

Commands generator for the update of json documents

This library provides some commands for manipulating a json configuration file. This configuration file must respect a json-schema.

Because json-commander is aware of the schema, it is able to provide a smart assistance which can be pretty handy if you are implementing a CLI.

You can find at the bottom of this documentation, an example using the commander package, but json-commander is not tied to any specific CLI library.

Install

$ npm install --save json-commander

Usage

var jsonCommander = require('json-commander');
var cmdr = jsonCommander({schema: __dirname + "myschema.json"});

var someJson = {
	title: "Some title",
	contributors: [
		{name: "Olivier"},
		{name: "Aradhna"},
		{name: "Roy"}
	]
	};

    cmdr.evaluate(someJson, ['get', 'contributors[1].name']);
    //will return Aradhna

Help

Display the help for the supported commands.

	cmdr.evaluate(someJson, ['help']);
	//Will return some help

All

Display the new configuration.

	cmdr.evaluate(someJson, ['all');
	//will return someJson

Check

Check whether the configuration is valid or not.

	cmdr.evaluate(someJson, ['check']);
	//will return valid or invalid

Copy

Copy a value between two paths.

	cmdr.evaluate(someJson, ['copy', 'contributors[1]', 'contributors[2]']);
	//will replace Roy by olivier

Del

Delete the value at the given path.

	cmdr.evaluate(someJson, ['del', 'contributors[2]']);
	//will delete Roy

Get

Get the value at the given path.

	cmdr.evaluate(someJson, ['get', 'title']);
	//will return "Some title"

Insert

Insert a blank row.

	cmdr.evaluate(someJson, ['insert', 'contributors','1']);
	//will insert an empty contributor after Aradhna

Set

Set the value at the given path.

	cmdr.evaluate(someJson, ['set', 'title','Much better title']);
	//Will replace 'Some title' by 'Much better title'

Schema

Display the schema with all the possible paths.

	cmdr.evaluate(someJson, ['schema']);
	//Will display the schema

Creating a CLI

Json-commander can easily used to create a CLI.

Requires: commander solace confiture

The setup program:

import solaceCreator from 'solace';
import confiture from 'confiture';

const solace = solaceCreator({});
const configurator = confiture({/*check doc*/});

const setupProgram = (cmd, other) => {
    const hasOther = !_.isEmpty(other);
    const cmdOptions = hasOther ? [cmd].concat(other) : [cmd];
    const isWriting = cmd === 'set' || cmd === 'copy' || cmd === 'del' || cmd === 'insert';
    if (isWriting) {
      cmdr.evaluate(unalteredConf, cmdOptions);
      configurator.saveSync(unalteredConf);
      solace.log(`${cmd} done.`);
    } else {
      const evaluation = cmdr.evaluate(unalteredConf, cmdOptions);
      solace.log(evaluation);
    }
  };

With commander to provide a CLI:

import program from 'commander';
program.command('setup <cmd> [other...]')
  .description('configure My CLI')
  .action(setupProgram);

License

MIT © Olivier Huin