Skip to content

Repository files navigation

NPM versionBuild StatusDependency 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

varjsonCommander=require('json-commander');varcmdr=jsonCommander({schema: __dirname+"myschema.json"});varsomeJson={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: commandersolaceconfiture

The setup program:

importsolaceCreatorfrom'solace';importconfiturefrom'confiture';constsolace=solaceCreator({});constconfigurator=confiture({/*check doc*/});constsetupProgram=(cmd,other)=>{consthasOther=!_.isEmpty(other);constcmdOptions=hasOther ? [cmd].concat(other) : [cmd];constisWriting=cmd==='set'||cmd==='copy'||cmd==='del'||cmd==='insert';if(isWriting){cmdr.evaluate(unalteredConf,cmdOptions);configurator.saveSync(unalteredConf);solace.log(`${cmd} done.`);}else{constevaluation=cmdr.evaluate(unalteredConf,cmdOptions);solace.log(evaluation);}};

With commander to provide a CLI:

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

License

MIT © Olivier Huin

About

Commands generator for the update of json documents

Topics

Resources

Stars

1 star

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages