json-commander
v1.0.0
Published
Commands generator for the update of json documents
Downloads
8
Maintainers
Readme
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