| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318 | 
							- # ajv-errors
 
- Custom error messages in JSON-Schema for Ajv validator
 
- [](https://travis-ci.org/epoberezkin/ajv-errors)
 
- [](http://badge.fury.io/js/ajv-errors)
 
- [](https://coveralls.io/github/epoberezkin/ajv-errors?branch=master)
 
- [](https://gitter.im/ajv-validator/ajv)
 
- ## Contents
 
- - [Install](#install)
 
- - [Usage](#usage)
 
-   - [Single message](#single-message)
 
-   - [Messages for keywords](#messages-for-keywords)
 
-   - [Messages for properties and items](#messages-for-properties-and-items)
 
-   - [Default message](#default-message)
 
- - [Templates](#templates)
 
- - [Options](#options)
 
- - [License](#license)
 
- ## Install
 
- ```
 
- npm install ajv-errors
 
- ```
 
- ## Usage
 
- Add the keyword `errorMessages` to Ajv instance:
 
- ```javascript
 
- var Ajv = require('ajv');
 
- var ajv = new Ajv({allErrors: true, jsonPointers: true});
 
- // Ajv options allErrors and jsonPointers are required
 
- require('ajv-errors')(ajv /*, {singleError: true} */);
 
- ```
 
- See [Options](#options) below.
 
- ### Single message
 
- Replace all errors in the current schema and subschemas with a single message:
 
- ```javascript
 
- var schema = {
 
-   type: 'object',
 
-   required: ['foo'],
 
-   properties: {
 
-     foo: { type: 'integer' }
 
-   },
 
-   additionalProperties: false,
 
-   errorMessage: 'should be an object with an integer property foo only'
 
- };
 
- var validate = ajv.compile(schema);
 
- console.log(validate({foo: 'a', bar: 2})); // false
 
- console.log(validate.errors); // processed errors
 
- ```
 
- Processed errors:
 
- ```javascript
 
- [
 
-   {
 
-     keyword: 'errorMessage',
 
-     message: 'should be an object with an integer property foo only',
 
-     // ...
 
-     params: {
 
-       errors: [
 
-         { keyword: 'additionalProperties', dataPath: '' /* , ... */ },
 
-         { keyword: 'type', dataPath: '.foo' /* , ... */ }
 
-       ]
 
-     }
 
-   }
 
- ]
 
- ```
 
- ### Messages for keywords
 
- Replace errors for certain keywords in the current schema only:
 
- ```javascript
 
- var schema = {
 
-   type: 'object',
 
-   required: ['foo'],
 
-   properties: {
 
-     foo: { type: 'integer' }
 
-   },
 
-   additionalProperties: false,
 
-   errorMessage: {
 
-     type: 'should be an object', // will not replace internal "type" error for the property "foo"
 
-     required: 'should have property foo',
 
-     additionalProperties: 'should not have properties other than foo'
 
-   }
 
- };
 
- var validate = ajv.compile(schema);
 
- console.log(validate({foo: 'a', bar: 2})); // false
 
- console.log(validate.errors); // processed errors
 
- ```
 
- Processed errors:
 
- ```javascript
 
- [
 
-   {
 
-     // original error
 
-     keyword: type,
 
-     dataPath: '/foo',
 
-     // ...
 
-     message: 'should be integer'
 
-   },
 
-   {
 
-     // generated error
 
-     keyword: 'errorMessage',
 
-     message: 'should not have properties other than foo',
 
-     // ...
 
-     params: {
 
-       errors: [
 
-         { keyword: 'additionalProperties' /* , ... */ }
 
-       ]
 
-     },
 
-   }
 
- ]
 
- ```
 
- For keywords "required" and "dependencies" it is possible to specify different messages for different properties:
 
- ```javascript
 
- var schema = {
 
-   type: 'object',
 
-   required: ['foo', 'bar'],
 
-   properties: {
 
-     foo: { type: 'integer' },
 
-     bar: { type: 'string' }
 
-   },
 
-   errorMessage: {
 
-     type: 'should be an object', // will not replace internal "type" error for the property "foo"
 
-     required: {
 
-       foo: 'should have an integer property "foo"',
 
-       bar: 'should have a string property "bar"'
 
-     }
 
-   }
 
- };
 
- ```
 
- ### Messages for properties and items
 
- Replace errors for properties / items (and deeper), regardless where in schema they were created:
 
- ```javascript
 
- var schema = {
 
-   type: 'object',
 
-   required: ['foo', 'bar'],
 
-   allOf: [{
 
-     properties: {
 
-       foo: { type: 'integer', minimum: 2 },
 
-       bar: { type: 'string', minLength: 2 }
 
-     },
 
-     additionalProperties: false
 
-   }],
 
-   errorMessage: {
 
-     properties: {
 
-       foo: 'data.foo should be integer >= 2',
 
-       bar: 'data.bar should be string with length >= 2'
 
-     }
 
-   }
 
- };
 
- var validate = ajv.compile(schema);
 
- console.log(validate({foo: 1, bar: 'a'})); // false
 
- console.log(validate.errors); // processed errors
 
- ```
 
- Processed errors:
 
- ```javascript
 
- [
 
-   {
 
-     keyword: 'errorMessage',
 
-     message: 'data.foo should be integer >= 2',
 
-     dataPath: '/foo',
 
-     // ...
 
-     params: {
 
-       errors: [
 
-         { keyword: 'minimum' /* , ... */ }
 
-       ]
 
-     },
 
-   },
 
-   {
 
-     keyword: 'errorMessage',
 
-     message: 'data.bar should be string with length >= 2',
 
-     dataPath: '/bar',
 
-     // ...
 
-     params: {
 
-       errors: [
 
-         { keyword: 'minLength' /* , ... */ }
 
-       ]
 
-     },
 
-   }
 
- ]
 
- ```
 
- ### Default message
 
- When the value of keyword `errorMessage` is an object you can specify a message that will be used if any error appears that is not specified by keywords/properties/items:
 
- ```javascript
 
- var schema = {
 
-   type: 'object',
 
-   required: ['foo', 'bar'],
 
-   allOf: [{
 
-     properties: {
 
-       foo: { type: 'integer', minimum: 2 },
 
-       bar: { type: 'string', minLength: 2 }
 
-     },
 
-     additionalProperties: false
 
-   }],
 
-   errorMessage: {
 
-     type: 'data should be an object',
 
-     properties: {
 
-       foo: 'data.foo should be integer >= 2',
 
-       bar: 'data.bar should be string with length >= 2'
 
-     },
 
-     _: 'data should have properties "foo" and "bar" only'
 
-   }
 
- };
 
- var validate = ajv.compile(schema);
 
- console.log(validate({})); // false
 
- console.log(validate.errors); // processed errors
 
- ```
 
- Processed errors:
 
- ```javascript
 
- [
 
-   {
 
-     keyword: 'errorMessage',
 
-     message: 'data should be an object with properties "foo" and "bar" only',
 
-     dataPath: '',
 
-     // ...
 
-     params: {
 
-       errors: [
 
-         { keyword: 'required' /* , ... */ },
 
-         { keyword: 'required' /* , ... */ }
 
-       ]
 
-     },
 
-   }
 
- ]
 
- ```
 
- The message in property `_` of `errorMessage` replaces the same errors that would have been replaced if `errorMessage` were a string.
 
- ## Templates
 
- Custom error messages used in `errorMessage` keyword can be templates using [JSON-pointers](https://tools.ietf.org/html/rfc6901) or [relative JSON-pointers](http://tools.ietf.org/html/draft-luff-relative-json-pointer-00) to data being validated, in which case the value will be interpolated. Also see [examples](https://gist.github.com/geraintluff/5911303) of relative JSON-pointers.
 
- The syntax to interpolate a value is `${<pointer>}`.
 
- The values used in messages will be JSON-stringified:
 
- - to differentiate between `false` and `"false"`, etc.
 
- - to support structured values.
 
- Example:
 
- ```json
 
- {
 
-   "type": "object",
 
-   "properties": {
 
-     "size": {
 
-       "type": "number",
 
-       "minimum": 4
 
-     }
 
-   },
 
-   "errorMessage": {
 
-     "properties": {
 
-       "size": "size should be a number bigger or equal to 4, current value is ${/size}"
 
-     }
 
-   }
 
- }
 
- ```
 
- ## Options
 
- Defaults:
 
- ```javascript
 
- {
 
-   keepErrors: false,
 
-   singleError: false
 
- }
 
- ```
 
- - _keepErrors_: keep original errors. Default is to remove matched errors (they will still be available in `params.errors` property of generated error). If an error was matched and included in the error generated by `errorMessage` keyword it will have property `emUsed: true`.
 
- - _singleError_: create one error for all keywords used in `errorMessage` keyword (error messages defined for properties and items are not merged because they have different dataPaths). Multiple error messages are concatenated. Option values:
 
-   - `false` (default): create multiple errors, one for each message
 
-   - `true`: create single error, messages are concatenated using `"; "`
 
-   - non-empty string: this string is used as a separator to concatenate messages
 
- ## Supporters
 
- [<img src="https://media.licdn.com/mpr/mpr/shrinknp_400_400/AAEAAQAAAAAAAAwEAAAAJDg1YzBlYzFjLTA3YWYtNGEzOS1iMTdjLTQ0MTU1NWZjOGM0ZQ.jpg" width="48" height="48">](https://www.linkedin.com/in/rogerkepler/) [Roger Kepler](https://www.linkedin.com/in/rogerkepler/)
 
- ## License
 
- [MIT](https://github.com/epoberezkin/ajv-errors/blob/master/LICENSE)
 
 
  |