0.2.0 • Published 7 years ago

snobject2 v0.2.0

Weekly downloads
3
License
MIT
Repository
github
Last release
7 years ago

snobject2

A promise-based, lightweight object validator that makes use of jsonpointer to use flat-hierarchy access of data (like XPath).

Usage

Note that the validator freezes the validation specification object using Object.freeze to avoid unwanted side effects.

createValidator = require('snobject2')

var objectToValidate = {
  'foo': {
    'bar': {
      'xyz': 'foobar'
    }
  },
  'paramX': /^my-regex$/,
  'paramY': [
    1,2,3
  ]
};

var myValidator = createValidator({
  '/foo/bar/xyz': {
    required: true,
    type: 'String'
  },
  '/paramX': {
    required: false,
    type: 'RegExp'
  },
  '/paramY': {
    type: 'Array',
    required: true,
    validate: function(value, __) {
      if (value.indexOf(2) == -1) {
        return Promise.reject(__('The entry `2` is not in your array ?path')); //__ will replace ?path with the corresponding name
      } 
      
      return Promise.resolve();
    }
  }
});

Fetching all errors in one shot

If you want to fetch all errors, without stopping the validation at the first one that may be encountered, you can pass a second argument to the validate function, as an object with fetchAll key, set to true. See the following example.

snobject = require('snobject2')

const validate = snobject({
    '/test': {
      'type': 'String',
      'required': false,
    },
    '/test2': {
      'type': 'Array',
      'required': true
    }
  })

validate({ 'test': true }, { fetchAll: true })
  .then( ( result ) => console.log( result.length ) ) // 2
  .catch( ( err ) => console.log( err ) )

Variant type check

If you wish to, you can also have a variant check of your type. Useful if you expect different kind of types for a specific key ( example, an Array or an Object ). In order to use this type check you can use the pipe character ( | ) to separate possible type values. See the following example.

const validate = snobject({
    '/test': {
      'type': 'Array|Object',
      'required': false,
    },
    '/test2': {
      'type': 'Array',
      'required': true
    }
  })

  await validate({
    'test': {}, // can be an Array or an Object
    'test2': []
  })
    .then( () => t.pass() )
    .catch( () => t.fail() )
0.2.0

7 years ago

0.1.1

7 years ago

0.1.0

7 years ago