Validation for the fleek framework
JavaScript
Permalink
Failed to load latest commit information.
lib
tests fixed integer parssing and normalization Dec 9, 2016
.gitignore
.snyk
.travis.yml finished validation and normalization list Dec 9, 2016
LICENSE
README.md
index.js
package.json

README.md

Fleek Validator

Build Status

Middleware and utilities for validating data against swagger schema's.

Requirements:

Usage

This package is to be used as middleware for Koa2 to validate swagger documentation using ctx.fleek.context defined by fleek-context or an equivalent custom middleware. Results of the validation are mapped to ctx.fleek.validation, including passed, failed, and errors.

npm install --save fleek-validator

Examples

For a swagger example, refer to the test swagger json

const Koa = require('koa');
const fleekCtx = require('fleek-context');
const fleekValidator = require('fleek-validator');

const SWAGGER = require('./swagger.json');

let app = new Koa();

app.use(fleekCtx(SWAGGER));

app.use(fleekValidator()); // Reject promise for validation failure

// OR

app.use(fleekValidator().catch((ctx, next) => {
  console.log(ctx.fleek.validation); // =>{
  //   passed: [Boolean],
  //   failed: [Boolean],
  //   errors: [Array({ - github.com/fleekjs/fleek-validator/blob/lib/error/index.js
  //    name: [String] - github.com/fleekjs/fleek-validator/blob/lib/error/codes.json
  //    code: [Integer] - github.com/fleekjs/fleek-validator/blob/lib/error/codes.json,
  //    message: [String] - github.com/fleekjs/fleek-validator/blob/lib/error/codes.json,
  //    parameter : { [rejected param definition from swagger doc] }
  //  })]
  // }
  return next();
}));

app.listen(3000);

Documentation

Middleware

  • Accepts
    • Object - options
      • throw: Boolean - if false, do not reject the middleware promise on validation failure
      • catch: Function - must act as Koa2 middleware. this will be call if validation fails, with next referring to the next middleware in the chain. prioritized over throw
  • Returns
    • Function - returns a promise when called
      • Accepts
        • Object - context of the request. must have ctx.fleek.context to perform validation
        • Function - returns promise when called
  • Binds
    • ctx.fleek.validation
{
  passed: [Boolean],
  failed: [Boolean],
  errors: [Array({ - github.com/fleekjs/fleek-validator/blob/lib/error/index.js
   name: [String] - github.com/fleekjs/fleek-validator/blob/lib/error/codes.json
   code: [Integer] - github.com/fleekjs/fleek-validator/blob/lib/error/codes.json,
   message: [String] - github.com/fleekjs/fleek-validator/blob/lib/error/codes.json,
   parameter : { [rejected param definition from swagger doc] }
 })]
}

Example

app.use(validator()); // reject middleware promise on failure

app.use(validator({ throw: false })); // continue down middleware on failure

app.use(validator({ catch: (ctx, next) => { return next(); } })); // continue down middleware on failure
app.use(validator().catch((ctx, next) => { return next(); })); // continue down middleware on failure

Ctx

  • Accepts
    • Object - context of a request definted by Koa2, and containing ctx.fleek.context to define the validations
    • Object - swagger definition to validate, matches ctx.fleek.context set by fleek-context
    • Boolean - if true, the ctx will be cloned and returned. defaults to false, and updates in place
  • Returns
    • Object - updated context

Example

ctx.request.body = { name: 'foo' };

validator.ctx(ctx);
validator.ctx(ctx, {
  parameters: [{
    name: "user",
    in: "body",
    schema: {
      type: "object",
      required: ["name"],
      properties: {
        name: { type: "string", uppercase: true }
      }
    }
  }]
});

let newCtx = validator.ctx(ctx, null, true);

console.log(newCtx); // => {
//   passed: false,
//   failed: true,
//   errors: [{
//     name: 'VALUE.UPPERCASE'
//     code: 207,
//     message: 'Must be uppercase',
//     parameter : { name: 'user.name' type: 'string', uppercase: true }
//   }]
// }
// }

Object

  • Accepts
    • Mixed - value to be validated
    • Object - swagger object definition
  • Returns
    • Either
      • Mixed - normalized result of the validations
      • Error - error containing .errors list of validation errors

Example

let result = validator.object({ name: 'FOO' }, { name: { type: 'string', uppercase: true } });
console.log(result); // => { name: 'FOO' }
let result = validator.object({ name: 'foo' }, { name: { type: 'string', toUpperCase: true } });
console.log(result); // => { name: 'FOO' }
let result = validator.object({ name: 'foo' }, { name: { type: 'string', uppercase: true } });
console.log(result); // => {
//   message 'Validation failed',
//   errors: [{
//     name: 'VALUE.UPPERCASE'
//     code: 207,
//     message: 'Must be uppercase',
//     parameter : { type: 'string', uppercase: true }
//   }]
// }

One

  • Accepts
    • Mixed - value to be validated
    • Object - swagger parameter definition
  • Returns
    • Either
      • Mixed - normalized result of the validations
      • ValidationError - validation error

Example

let result = validator.one('FOO', { type: 'string', uppercase: true });
console.log(result); // => 'FOO'
let result = validator.one('foo', { type: 'string', toUpperCase: true });
console.log(result); // => 'FOO'
let result = validator.one('foo', { type: 'string', uppercase: true });
console.log(result); // => {
//   name: 'VALUE.UPPERCASE'
//   code: 207,
//   message: 'Must be uppercase',
//   parameter : { type: 'string', uppercase: true }
// }

Normalizations

default

  • Expect: [Boolean]
  • Type: [Mixed]
  • Action: if the value is not defined, set it to the default
  • Note: First action taken in order of operations

trim

  • Expect: [Boolean]
  • Type: [String]
  • Action: trim whitespace

toUpperCase

  • Expect: [Boolean]
  • Type: [String]
  • Action: convert to uppercase

toLowerCase

  • Expect: [Boolean]
  • Type: [String]
  • Action: convert to uppercase

Validations

required

  • Expect: [Boolean]
  • Type: [String]
  • Action: reject undefined
  • Note: Second action taken in order of operations, after default

type

  • Expect: [String]
  • Type: [Mixed]
  • Action: reject the value if it does not match the expected type

maxItems

  • Expect: [Integer]
  • Type: [Array]
  • Action: rejects an array with more than the expected max

minItems

  • Expect: [Integer]
  • Type: [Array]
  • Action: rejects an array with fewer than the expected min

uniqueItems

  • Expect: [Boolean]
  • Type: [Array]
  • Action: reject an array with duplicate items

multipleOf

  • Expect: [Integer]
  • Type: [Number]
  • Action: reject a number thats not a multiple of the expected integer

maximum

  • Expect: [Integer]
  • Type: [Number]
  • Action: reject a number thats above the expected max

exclusiveMaximum

  • Expect: [Integer]
  • Type: [Number]
  • Action: reject a number thats above or equal to the expected max

minimum

  • Expect: [Integer]
  • Type: [Number]
  • Action: reject a number thats below the expected min

exclusiveMinimum

  • Expect: [Integer]
  • Type: [Number]
  • Action: reject a number thats below or equal to the expected min

maxProperties

  • Expect: [Integer]
  • Type: [Object]
  • Action: reject an object with more than the expected max number of properties

minProperties

  • Expect: [Integer]
  • Type: [Object]
  • Action: reject an object with fewer than the expected min number of properties

email

  • Expect: [Boolean]
  • Type: [String]
  • Action: reject a string that is not a valid email

alphanumeric

  • Expect: [Boolean]
  • Type: [String]
  • Action: reject a non-alphanumeric string

lowercase

  • Expect: [Boolean]
  • Type: [String]
  • Action: reject a string containing uppercase characters

uppercase

  • Expect: [Boolean]
  • Type: [String]
  • Action: reject a string containing lowercase characters

minLength

  • Expect: [Integer]
  • Type: [String]
  • Action: reject a string of length below the expected length

maxLength

  • Expect: [Integer]
  • Type: [String]
  • Action: reject a string of length above the expected length

pattern

  • Expect: [RegExp String]
  • Type: [String]
  • Action: reject a string that doesnt pass the rejex

enum

  • Expect: [Array]
  • Type: [Mixed]
  • Action: reject any value not listed in the enumeration

Authors

Built and maintained with by the Hart team.