'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 { minimum: min, exclusiveMinimum: exclusive, maximum: max, exclusiveMaximum: exclusive }; }, 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'); } };