114 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			114 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| 
								 | 
							
								{{# def.definitions }}
							 | 
						||
| 
								 | 
							
								{{# def.errors }}
							 | 
						||
| 
								 | 
							
								{{# def.setupKeyword }}
							 | 
						||
| 
								 | 
							
								{{# def.$data }}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								{{## def.setExclusiveLimit:
							 | 
						||
| 
								 | 
							
								  $exclusive = true;
							 | 
						||
| 
								 | 
							
								  $errorKeyword = $exclusiveKeyword;
							 | 
						||
| 
								 | 
							
								  $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword;
							 | 
						||
| 
								 | 
							
								#}}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								{{
							 | 
						||
| 
								 | 
							
								  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');
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								{{? $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 + ' + \'';
							 | 
						||
| 
								 | 
							
								  }}
							 | 
						||
| 
								 | 
							
								  var schemaExcl{{=$lvl}} = {{=$schemaValueExcl}};
							 | 
						||
| 
								 | 
							
								  {{ $schemaValueExcl = 'schemaExcl' + $lvl; }}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  var {{=$exclusive}};
							 | 
						||
| 
								 | 
							
								  var {{=$exclType}} = typeof {{=$schemaValueExcl}};
							 | 
						||
| 
								 | 
							
								  if ({{=$exclType}} != 'boolean' && {{=$exclType}} != 'undefined' && {{=$exclType}} != 'number') {
							 | 
						||
| 
								 | 
							
								    {{ var $errorKeyword = $exclusiveKeyword; }}
							 | 
						||
| 
								 | 
							
								    {{# def.error:'_exclusiveLimit' }}
							 | 
						||
| 
								 | 
							
								  } else if ({{# def.$dataNotType:'number' }}
							 | 
						||
| 
								 | 
							
								            {{=$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;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    }}
							 | 
						||
| 
								 | 
							
								{{??}}
							 | 
						||
| 
								 | 
							
								  {{
							 | 
						||
| 
								 | 
							
								    var $exclIsNumber = typeof $schemaExcl == 'number'
							 | 
						||
| 
								 | 
							
								      , $opStr = $op;  /*used in error*/
							 | 
						||
| 
								 | 
							
								  }}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  {{? $exclIsNumber && $isData }}
							 | 
						||
| 
								 | 
							
								    {{ var $opExpr = '\'' + $opStr + '\''; /*used in error*/ }}
							 | 
						||
| 
								 | 
							
								    if ({{# def.$dataNotType:'number' }}
							 | 
						||
| 
								 | 
							
								        ( {{=$schemaValue}} === undefined
							 | 
						||
| 
								 | 
							
								          || {{=$schemaExcl}} {{=$op}}= {{=$schemaValue}}
							 | 
						||
| 
								 | 
							
								            ? {{=$data}} {{=$notOp}}= {{=$schemaExcl}}
							 | 
						||
| 
								 | 
							
								            : {{=$data}} {{=$notOp}} {{=$schemaValue}} )
							 | 
						||
| 
								 | 
							
								        || {{=$data}} !== {{=$data}}) {
							 | 
						||
| 
								 | 
							
								  {{??}}
							 | 
						||
| 
								 | 
							
								    {{
							 | 
						||
| 
								 | 
							
								      if ($exclIsNumber && $schema === undefined) {
							 | 
						||
| 
								 | 
							
								          {{# def.setExclusiveLimit }}
							 | 
						||
| 
								 | 
							
								          $schemaValue = $schemaExcl;
							 | 
						||
| 
								 | 
							
								          $notOp += '=';
							 | 
						||
| 
								 | 
							
								      } else {
							 | 
						||
| 
								 | 
							
								        if ($exclIsNumber)
							 | 
						||
| 
								 | 
							
								          $schemaValue = Math[$isMax ? 'min' : 'max']($schemaExcl, $schema);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if ($schemaExcl === ($exclIsNumber ? $schemaValue : true)) {
							 | 
						||
| 
								 | 
							
								          {{# def.setExclusiveLimit }}
							 | 
						||
| 
								 | 
							
								          $notOp += '=';
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								          $exclusive = false;
							 | 
						||
| 
								 | 
							
								          $opStr += '=';
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      var $opExpr = '\'' + $opStr + '\''; /*used in error*/
							 | 
						||
| 
								 | 
							
								    }}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if ({{# def.$dataNotType:'number' }}
							 | 
						||
| 
								 | 
							
								        {{=$data}} {{=$notOp}} {{=$schemaValue}}
							 | 
						||
| 
								 | 
							
								        || {{=$data}} !== {{=$data}}) {
							 | 
						||
| 
								 | 
							
								  {{?}}
							 | 
						||
| 
								 | 
							
								{{?}}
							 | 
						||
| 
								 | 
							
								    {{ $errorKeyword = $errorKeyword || $keyword; }}
							 | 
						||
| 
								 | 
							
								    {{# def.error:'_limit' }}
							 | 
						||
| 
								 | 
							
								  } {{? $breakOnError }} else { {{?}}
							 |