Spaces:
Sleeping
Sleeping
| ; | |
| 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; | |
| } | |