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 { {{?}}
 |