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.
$ npm install --save json-commandervarjsonCommander=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 AradhnaDisplay the help for the supported commands.
cmdr.evaluate(someJson,['help']);//Will return some helpDisplay the new configuration.
cmdr.evaluate(someJson,['all');//will return someJsonCheck whether the configuration is valid or not.
cmdr.evaluate(someJson,['check']);//will return valid or invalidCopy a value between two paths.
cmdr.evaluate(someJson,['copy','contributors[1]','contributors[2]']);//will replace Roy by olivierDelete the value at the given path.
cmdr.evaluate(someJson,['del','contributors[2]']);//will delete RoyGet the value at the given path.
cmdr.evaluate(someJson,['get','title']);//will return "Some title"Insert a blank row.
cmdr.evaluate(someJson,['insert','contributors','1']);//will insert an empty contributor after AradhnaSet the value at the given path.
cmdr.evaluate(someJson,['set','title','Much better title']);//Will replace 'Some title' by 'Much better title'Display the schema with all the possible paths.
cmdr.evaluate(someJson,['schema']);//Will display the schemaJson-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);MIT © Olivier Huin