Configuration object wrapper for nested configs with yargs integration.
Extends nested-config with runCmd
function.
JSDoc
API docs are available on the wiki.
Usage
yargs-config
is itself a configuration object. All your current settings are stored in it.
It keeps track of default options for you as well.
Initialize with your default settings
Create new config object using create(overrides [object], defaults [object]).
const yc = require('yargs-config');
let defaults = {
yourOption: 1,
nested: {
option: "two"
},
meta: {
yourOption: 'This is my option',
nested: {
option: 'This is my nested option'
}
}
};
let config = yc.create({}, defaults);
Notice the structure of meta
object. It is used to populate yargs
configuration.
You can use either short form and provide just the description as shown above, or you can provide full meta object.
meta: {
yourOption: {
desc: 'This is my option',
alias: 'y'
}
}
default
and type
will be determined automatically, so no need to fill them out explicitly.
Note that if config property is not inside meta
object, it will not be exposed through yargs.
Update current settings
let overrides = {
yourOption: 2,
nested: {
option: "three",
},
};
config.add(overrides, {});
Access settings
config.yourOption;
config.getDefault('yourOption');
config.nested.option;
config.getDefault('nested.option');
Run yargs
runFromCmd(propStr [string], callback)
Starts command-line application with yargs, supporting piped inputs.
propStr
- where to look for settings in case of nested config (e.g. consider propStr as the root). Leave empty for using whole object.callback
- calls when done with (err, data, argv), where data
is stdin and argv
is parsed yargs argv object.
if (!module.parent) {
config.runFromCmd('', (err, data, argv) => {
console.log(`This is input: ${data}`);
console.log(`These are passed settings: ${argv}`);
});
} else {
module.exports = ...;
}
Now your application app.js
can be launched from CLI as follows:
$ echo "your input" | app.js --yourOption 5 --nested.option "five"
$ app.js "your input" --yourOption 5 --nested.option "five"