37 lines
		
	
	
		
			985 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			37 lines
		
	
	
		
			985 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
'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');
 | 
						|
  }
 | 
						|
};
 |