| 'use strict'; |
| |
| module.exports = function defFunc(ajv) { |
| defFunc.definition = { |
| type: 'number', |
| macro: function (schema, parentSchema) { |
| var min = schema[0] |
| , max = schema[1] |
| , exclusive = parentSchema.exclusiveRange; |
| |
| validateRangeSchema(min, max, exclusive); |
| |
| return exclusive === true |
| ? {exclusiveMinimum: min, exclusiveMaximum: max} |
| : {minimum: min, maximum: max}; |
| }, |
| metaSchema: { |
| type: 'array', |
| minItems: 2, |
| maxItems: 2, |
| items: { type: 'number' } |
| } |
| }; |
| |
| ajv.addKeyword('range', defFunc.definition); |
| ajv.addKeyword('exclusiveRange'); |
| return ajv; |
| |
| function validateRangeSchema(min, max, exclusive) { |
| if (exclusive !== undefined && typeof exclusive != 'boolean') |
| throw new Error('Invalid schema for exclusiveRange keyword, should be boolean'); |
| |
| if (min > max || (exclusive && min == max)) |
| throw new Error('There are no numbers in range'); |
| } |
| }; |