|  | 'use strict'; | 
						
						
							|  | module.exports = function generate__limit(it, $keyword, $ruleType) { | 
						
						
							|  |   var out = ' '; | 
						
						
							|  |   var $lvl = it.level; | 
						
						
							|  |   var $dataLvl = it.dataLevel; | 
						
						
							|  |   var $schema = it.schema[$keyword]; | 
						
						
							|  |   var $schemaPath = it.schemaPath + it.util.getProperty($keyword); | 
						
						
							|  |   var $errSchemaPath = it.errSchemaPath + '/' + $keyword; | 
						
						
							|  |   var $breakOnError = !it.opts.allErrors; | 
						
						
							|  |   var $errorKeyword; | 
						
						
							|  |   var $data = 'data' + ($dataLvl || ''); | 
						
						
							|  |   var $isData = it.opts.$data && $schema && $schema.$data, | 
						
						
							|  |     $schemaValue; | 
						
						
							|  |   if ($isData) { | 
						
						
							|  |     out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; | 
						
						
							|  |     $schemaValue = 'schema' + $lvl; | 
						
						
							|  |   } else { | 
						
						
							|  |     $schemaValue = $schema; | 
						
						
							|  |   } | 
						
						
							|  |   var $isMax = $keyword == 'maximum', | 
						
						
							|  |     $exclusiveKeyword = $isMax ? 'exclusiveMaximum' : 'exclusiveMinimum', | 
						
						
							|  |     $schemaExcl = it.schema[$exclusiveKeyword], | 
						
						
							|  |     $isDataExcl = it.opts.$data && $schemaExcl && $schemaExcl.$data, | 
						
						
							|  |     $op = $isMax ? '<' : '>', | 
						
						
							|  |     $notOp = $isMax ? '>' : '<', | 
						
						
							|  |     $errorKeyword = undefined; | 
						
						
							|  |   if (!($isData || typeof $schema == 'number' || $schema === undefined)) { | 
						
						
							|  |     throw new Error($keyword + ' must be number'); | 
						
						
							|  |   } | 
						
						
							|  |   if (!($isDataExcl || $schemaExcl === undefined || typeof $schemaExcl == 'number' || typeof $schemaExcl == 'boolean')) { | 
						
						
							|  |     throw new Error($exclusiveKeyword + ' must be number or boolean'); | 
						
						
							|  |   } | 
						
						
							|  |   if ($isDataExcl) { | 
						
						
							|  |     var $schemaValueExcl = it.util.getData($schemaExcl.$data, $dataLvl, it.dataPathArr), | 
						
						
							|  |       $exclusive = 'exclusive' + $lvl, | 
						
						
							|  |       $exclType = 'exclType' + $lvl, | 
						
						
							|  |       $exclIsNumber = 'exclIsNumber' + $lvl, | 
						
						
							|  |       $opExpr = 'op' + $lvl, | 
						
						
							|  |       $opStr = '\' + ' + $opExpr + ' + \''; | 
						
						
							|  |     out += ' var schemaExcl' + ($lvl) + ' = ' + ($schemaValueExcl) + '; '; | 
						
						
							|  |     $schemaValueExcl = 'schemaExcl' + $lvl; | 
						
						
							|  |     out += ' var ' + ($exclusive) + '; var ' + ($exclType) + ' = typeof ' + ($schemaValueExcl) + '; if (' + ($exclType) + ' != \'boolean\' && ' + ($exclType) + ' != \'undefined\' && ' + ($exclType) + ' != \'number\') { '; | 
						
						
							|  |     var $errorKeyword = $exclusiveKeyword; | 
						
						
							|  |     var $$outStack = $$outStack || []; | 
						
						
							|  |     $$outStack.push(out); | 
						
						
							|  |     out = ''; /* istanbul ignore else */ | 
						
						
							|  |     if (it.createErrors !== false) { | 
						
						
							|  |       out += ' { keyword: \'' + ($errorKeyword || '_exclusiveLimit') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; | 
						
						
							|  |       if (it.opts.messages !== false) { | 
						
						
							|  |         out += ' , message: \'' + ($exclusiveKeyword) + ' should be boolean\' '; | 
						
						
							|  |       } | 
						
						
							|  |       if (it.opts.verbose) { | 
						
						
							|  |         out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; | 
						
						
							|  |       } | 
						
						
							|  |       out += ' } '; | 
						
						
							|  |     } else { | 
						
						
							|  |       out += ' {} '; | 
						
						
							|  |     } | 
						
						
							|  |     var __err = out; | 
						
						
							|  |     out = $$outStack.pop(); | 
						
						
							|  |     if (!it.compositeRule && $breakOnError) { | 
						
						
							|  |       /* istanbul ignore if */ | 
						
						
							|  |       if (it.async) { | 
						
						
							|  |         out += ' throw new ValidationError([' + (__err) + ']); '; | 
						
						
							|  |       } else { | 
						
						
							|  |         out += ' validate.errors = [' + (__err) + ']; return false; '; | 
						
						
							|  |       } | 
						
						
							|  |     } else { | 
						
						
							|  |       out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; | 
						
						
							|  |     } | 
						
						
							|  |     out += ' } else if ( '; | 
						
						
							|  |     if ($isData) { | 
						
						
							|  |       out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; | 
						
						
							|  |     } | 
						
						
							|  |     out += ' ' + ($exclType) + ' == \'number\' ? ( (' + ($exclusive) + ' = ' + ($schemaValue) + ' === undefined || ' + ($schemaValueExcl) + ' ' + ($op) + '= ' + ($schemaValue) + ') ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaValueExcl) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) : ( (' + ($exclusive) + ' = ' + ($schemaValueExcl) + ' === true) ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaValue) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) || ' + ($data) + ' !== ' + ($data) + ') { var op' + ($lvl) + ' = ' + ($exclusive) + ' ? \'' + ($op) + '\' : \'' + ($op) + '=\'; '; | 
						
						
							|  |     if ($schema === undefined) { | 
						
						
							|  |       $errorKeyword = $exclusiveKeyword; | 
						
						
							|  |       $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword; | 
						
						
							|  |       $schemaValue = $schemaValueExcl; | 
						
						
							|  |       $isData = $isDataExcl; | 
						
						
							|  |     } | 
						
						
							|  |   } else { | 
						
						
							|  |     var $exclIsNumber = typeof $schemaExcl == 'number', | 
						
						
							|  |       $opStr = $op; | 
						
						
							|  |     if ($exclIsNumber && $isData) { | 
						
						
							|  |       var $opExpr = '\'' + $opStr + '\''; | 
						
						
							|  |       out += ' if ( '; | 
						
						
							|  |       if ($isData) { | 
						
						
							|  |         out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; | 
						
						
							|  |       } | 
						
						
							|  |       out += ' ( ' + ($schemaValue) + ' === undefined || ' + ($schemaExcl) + ' ' + ($op) + '= ' + ($schemaValue) + ' ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaExcl) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) || ' + ($data) + ' !== ' + ($data) + ') { '; | 
						
						
							|  |     } else { | 
						
						
							|  |       if ($exclIsNumber && $schema === undefined) { | 
						
						
							|  |         $exclusive = true; | 
						
						
							|  |         $errorKeyword = $exclusiveKeyword; | 
						
						
							|  |         $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword; | 
						
						
							|  |         $schemaValue = $schemaExcl; | 
						
						
							|  |         $notOp += '='; | 
						
						
							|  |       } else { | 
						
						
							|  |         if ($exclIsNumber) $schemaValue = Math[$isMax ? 'min' : 'max']($schemaExcl, $schema); | 
						
						
							|  |         if ($schemaExcl === ($exclIsNumber ? $schemaValue : true)) { | 
						
						
							|  |           $exclusive = true; | 
						
						
							|  |           $errorKeyword = $exclusiveKeyword; | 
						
						
							|  |           $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword; | 
						
						
							|  |           $notOp += '='; | 
						
						
							|  |         } else { | 
						
						
							|  |           $exclusive = false; | 
						
						
							|  |           $opStr += '='; | 
						
						
							|  |         } | 
						
						
							|  |       } | 
						
						
							|  |       var $opExpr = '\'' + $opStr + '\''; | 
						
						
							|  |       out += ' if ( '; | 
						
						
							|  |       if ($isData) { | 
						
						
							|  |         out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; | 
						
						
							|  |       } | 
						
						
							|  |       out += ' ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' || ' + ($data) + ' !== ' + ($data) + ') { '; | 
						
						
							|  |     } | 
						
						
							|  |   } | 
						
						
							|  |   $errorKeyword = $errorKeyword || $keyword; | 
						
						
							|  |   var $$outStack = $$outStack || []; | 
						
						
							|  |   $$outStack.push(out); | 
						
						
							|  |   out = ''; /* istanbul ignore else */ | 
						
						
							|  |   if (it.createErrors !== false) { | 
						
						
							|  |     out += ' { keyword: \'' + ($errorKeyword || '_limit') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { comparison: ' + ($opExpr) + ', limit: ' + ($schemaValue) + ', exclusive: ' + ($exclusive) + ' } '; | 
						
						
							|  |     if (it.opts.messages !== false) { | 
						
						
							|  |       out += ' , message: \'should be ' + ($opStr) + ' '; | 
						
						
							|  |       if ($isData) { | 
						
						
							|  |         out += '\' + ' + ($schemaValue); | 
						
						
							|  |       } else { | 
						
						
							|  |         out += '' + ($schemaValue) + '\''; | 
						
						
							|  |       } | 
						
						
							|  |     } | 
						
						
							|  |     if (it.opts.verbose) { | 
						
						
							|  |       out += ' , schema:  '; | 
						
						
							|  |       if ($isData) { | 
						
						
							|  |         out += 'validate.schema' + ($schemaPath); | 
						
						
							|  |       } else { | 
						
						
							|  |         out += '' + ($schema); | 
						
						
							|  |       } | 
						
						
							|  |       out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; | 
						
						
							|  |     } | 
						
						
							|  |     out += ' } '; | 
						
						
							|  |   } else { | 
						
						
							|  |     out += ' {} '; | 
						
						
							|  |   } | 
						
						
							|  |   var __err = out; | 
						
						
							|  |   out = $$outStack.pop(); | 
						
						
							|  |   if (!it.compositeRule && $breakOnError) { | 
						
						
							|  |     /* istanbul ignore if */ | 
						
						
							|  |     if (it.async) { | 
						
						
							|  |       out += ' throw new ValidationError([' + (__err) + ']); '; | 
						
						
							|  |     } else { | 
						
						
							|  |       out += ' validate.errors = [' + (__err) + ']; return false; '; | 
						
						
							|  |     } | 
						
						
							|  |   } else { | 
						
						
							|  |     out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; | 
						
						
							|  |   } | 
						
						
							|  |   out += ' } '; | 
						
						
							|  |   if ($breakOnError) { | 
						
						
							|  |     out += ' else { '; | 
						
						
							|  |   } | 
						
						
							|  |   return out; | 
						
						
							|  | }
 |