@yahapi/ajv-validate

1.0.1 • Public • Published

ajv-validate

A small wrapper for AJV designed to validate request bodies and query parameters.

Install

$ npm install --save @yahapi/ajv-validate

Example

import { bodyValidator } from 'ajv-validate';

const schema = {
  id: 'bodySchema',
  type: 'object',
  properties: {
    name: {
      type: 'string',
      minLength: 2,
    },
  },
};

bodyValidator.addSchema(schema);

const body = {
  name: 'a',
};
const throwError = false;

// {
//   path: '/name',
//   code: 'min_length',
//   message: 'should NOT be shorter than 2 characters',
// }
console.log(bodyValidator.validate('bodySchema', body, throwError));

Description

This library manages two AJV validation instances, one for validating a request body and one for validating query parameters. The difference between them are:

             | bodyValidator | queryValidator

-----------------|---------------|----------------------- coerceTypes | false | true pointerType | jsonPointer | queryPath

Explanation options

  • coerceTypes: automatically attempt to convert properties to their expected types.
  • pointerType: defines path format. Either jsonPointer as formatted by the JSON Pointer spec or queryPath which prefixed error paths with a question mark, e.g. ?name. Default is jsonPointer.

addSchema()

Alias for AJV addSchema().

Registers a JSON schema to validate.

import { queryValidator } from '@yahapi/ajv-validate';

const schema = {
  id: 'testBody',
  type: 'object',
  properties: {
    limit: { type: 'integer', minimum: 0 },
  },
};
queryValidator.addSchema(schema);

addKeyword()

Alias for AJV addKeyword().

addFormat()

Alias for AJV addFormat().

validate(schemaName, body, [throwError = true])

Validates a message body against specified schema. A schema is referenced by its id or keyword.

Throws a ValidationErrors by default. To simply return the validation errors set throwError to false.

import { bodyValidator } from '@yahapi/ajv-validate';

const schema = {
  id: 'testBody',
  type: 'object',
  properties: {
    limit: { type: 'integer', minimum: 0 },
  },
};
bodyValidator.addSchema(schema);

const errors = bodyValidator.validate('testBody', { name: 'test' }, false);
console.log(errors);

validate() returns an array of errors formatted as follows:

{
  code: 'minimum',
  path: '?limit',
  message: 'should be >= 0',
}
Property Description
code Error code formatted in snake_case.
path JSON pointer or query parameter name indicating which property validation failed.
message Human-readable error message.

Additional formats

The following formats overwrite or are in addition to those specified in AJV:

  • date-time: the standard date-time format is replaced by a moment(...).isValid() which accepts any IS0-8601 string.

Keywords

The keywords listed in this section are in addition to those specified by AJV.

sortOptions

When you specify sort order in an url like this ?sort=a,-b you can use the schema keyword sortOptions to validate which sorts are allowed. Example:

const schema = {
  type: 'object',
  properties: {
    sort: {
      type: 'string',
      sortOptions: ['a', '-b', '+c'],
    },
  },
};
addQuerySchema(schema, 'testQuery');
validateQuery('testQuery', { sort: '+a,-b,c' }); // This is valid
validateQuery('testQuery', { sort: '+b' }); // This is invalid
validateQuery('testQuery', { sort: '+a,-a' }); // This is invalid

Readme

Keywords

none

Package Sidebar

Install

npm i @yahapi/ajv-validate

Weekly Downloads

0

Version

1.0.1

License

ISC

Last publish

Collaborators

  • yahapi