optioner

5.0.1 • Public • Published

optioner

Process and validate options for your module.

npm version Build Status Gitter

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, default true; allow unknown properties
  • must_match_literals: true|false, default false; force exact matches of literal values

Dependencies

Questions?

@rjrodger Gitter

License

Copyright (c) 2016, Richard Rodger and other contributors. Licensed under MIT.

Package Sidebar

Install

npm i optioner

Weekly Downloads

8,007

Version

5.0.1

License

MIT

Unpacked Size

9.43 kB

Total Files

4

Last publish

Collaborators

  • rjrodger