json-commander

1.0.0 • Public • Published

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

Package Sidebar

Install

npm i json-commander

Weekly Downloads

4

Version

1.0.0

License

MIT

Last publish

Collaborators

  • olih