yargs-config
v1.1.2
Published
Configuration object wrapper for nested configs with yargs integration
Downloads
8
Maintainers
Readme
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: 1, // will be filled automatically anyway
// type: 'number' // will be filled automatically anyway
}
// ...
}
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, {}); // performs deep merge into current config state
Access settings
config.yourOption; // 2
config.getDefault('yourOption'); // 1
config.nested.option; // "three"
config.getDefault('nested.option'); // "two"
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), wheredata
is stdin andargv
is parsed yargs argv object.
if (!module.parent) {
// Running from CLI
config.runFromCmd('', (err, data, argv) => {
// err is null if ok
console.log(`This is input: ${data}`);
console.log(`These are passed settings: ${argv}`);
});
} else {
// Using as a module
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"