optioner
v5.0.1
Published
Process and validate options for your module.
Downloads
32,656
Maintainers
Readme
optioner
Process and validate options for your module.
Specify a deeply-merged set of hapijs joi rules and defaults to process options provided to your module.
Users of your module can quickly debug issues as they get immediate feedback on configuration issues, and you can provide a user friendly set of defaults.
This provides essentially the same behavior as lodash.defaultsDeep, but also gives you validation, and more intelligent array handling (per element control).
You can use joi rules directly, or literal values, which are
translated into rules of the form: Joi.<type>().default(<value>)
where type is the type of the value.
Quick Example
var Optioner = require('optioner')
var check = Optioner({beatles: 4}).check
// prints { beatles: 4, stones: 5 }
console.log(check({stones: 5}))
var optioner = Optioner({
color: 'red',
size: Joi.number().integer().max(5).min(1).default(3),
range: [100, 200]
})
var promise = optioner({size: 2})
// prints: { color: 'red', size: 2, range: [ 100, 200 ] }
promise
.then(console.log)
// prints: { color: 'red', size: 2, range: [ 100, 200 ] }
console.log(promise.value)
optioner({}, function (err, out) {
// prints: { color: 'red', size: 3, range: [ 100, 200 ] }
console.log(out)
})
optioner({range: [50]}, function (err, out) {
// prints: { range: [ 50, 200 ], color: 'red', size: 3 }
console.log(out)
})
optioner({size: 6}, function (err, out) {
// prints: child "size" fails because ["size" must be less than or equal to 5
console.log(err)
})
Options
Optioner({ ... spec ... }, { ... options ... }})
- allow_unknown:
true|false
, defaulttrue
; allow unknown properties - must_match_literals:
true|false
, defaultfalse
; force exact matches of literal values
Dependencies
- NOTE: requires
@hapi/joi
>= 16, as: https://github.com/hapijs/joi/issues/2037
Questions?
License
Copyright (c) 2016, Richard Rodger and other contributors. Licensed under MIT.