| {{## def.setupKeyword: | |
|   {{ | |
|     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 $valid = 'valid' + $lvl; | |
|     var $errs = 'errs__' + $lvl; | |
|   }} | |
| #}} | |
| 
 | |
| 
 | |
| {{## def.setCompositeRule: | |
|   {{ | |
|     var $wasComposite = it.compositeRule; | |
|     it.compositeRule = $it.compositeRule = true; | |
|   }} | |
| #}} | |
| 
 | |
| 
 | |
| {{## def.resetCompositeRule: | |
|   {{ it.compositeRule = $it.compositeRule = $wasComposite; }} | |
| #}} | |
| 
 | |
| 
 | |
| {{## def.setupNextLevel: | |
|   {{ | |
|     var $it = it.util.copy(it); | |
|     var $closingBraces = ''; | |
|     $it.level++; | |
|     var $nextValid = 'valid' + $it.level; | |
|   }} | |
| #}} | |
| 
 | |
| 
 | |
| {{## def.ifValid: | |
|   {{? $breakOnError }} | |
|     if ({{=$valid}}) { | |
|     {{ $closingBraces += '}'; }} | |
|   {{?}} | |
| #}} | |
| 
 | |
| 
 | |
| {{## def.ifResultValid: | |
|   {{? $breakOnError }} | |
|     if ({{=$nextValid}}) { | |
|     {{ $closingBraces += '}'; }} | |
|   {{?}} | |
| #}} | |
| 
 | |
| 
 | |
| {{## def.elseIfValid: | |
|   {{? $breakOnError }} | |
|     {{ $closingBraces += '}'; }} | |
|     else { | |
|   {{?}} | |
| #}} | |
| 
 | |
| 
 | |
| {{## def.nonEmptySchema:_schema: | |
|   (it.opts.strictKeywords | |
|     ? (typeof _schema == 'object' && Object.keys(_schema).length > 0) | |
|       || _schema === false | |
|     : it.util.schemaHasRules(_schema, it.RULES.all)) | |
| #}} | |
| 
 | |
| 
 | |
| {{## def.strLength: | |
|   {{? it.opts.unicode === false }} | |
|     {{=$data}}.length | |
|   {{??}} | |
|     ucs2length({{=$data}}) | |
|   {{?}} | |
| #}} | |
| 
 | |
| 
 | |
| {{## def.willOptimize: | |
|   it.util.varOccurences($code, $nextData) < 2 | |
| #}} | |
| 
 | |
| 
 | |
| {{## def.generateSubschemaCode: | |
|   {{ | |
|     var $code = it.validate($it); | |
|     $it.baseId = $currentBaseId; | |
|   }} | |
| #}} | |
| 
 | |
| 
 | |
| {{## def.insertSubschemaCode: | |
|   {{= it.validate($it) }} | |
|   {{ $it.baseId = $currentBaseId; }} | |
| #}} | |
| 
 | |
| 
 | |
| {{## def._optimizeValidate: | |
|   it.util.varReplace($code, $nextData, $passData) | |
| #}} | |
| 
 | |
| 
 | |
| {{## def.optimizeValidate: | |
|   {{? {{# def.willOptimize}} }} | |
|     {{= {{# def._optimizeValidate }} }} | |
|   {{??}} | |
|     var {{=$nextData}} = {{=$passData}}; | |
|     {{= $code }} | |
|   {{?}} | |
| #}} | |
| 
 | |
| 
 | |
| {{## def.$data: | |
|   {{ | |
|     var $isData = it.opts.$data && $schema && $schema.$data | |
|       , $schemaValue; | |
|   }} | |
|   {{? $isData }} | |
|     var schema{{=$lvl}} = {{= it.util.getData($schema.$data, $dataLvl, it.dataPathArr) }}; | |
|     {{ $schemaValue = 'schema' + $lvl; }} | |
|   {{??}} | |
|     {{ $schemaValue = $schema; }} | |
|   {{?}} | |
| #}} | |
| 
 | |
| 
 | |
| {{## def.$dataNotType:_type: | |
|   {{?$isData}} ({{=$schemaValue}} !== undefined && typeof {{=$schemaValue}} != _type) || {{?}} | |
| #}} | |
| 
 | |
| 
 | |
| {{## def.check$dataIsArray: | |
|   if (schema{{=$lvl}} === undefined) {{=$valid}} = true; | |
|   else if (!Array.isArray(schema{{=$lvl}})) {{=$valid}} = false; | |
|   else { | |
| #}} | |
| 
 | |
| 
 | |
| {{## def.numberKeyword: | |
|   {{? !($isData || typeof $schema == 'number') }} | |
|     {{ throw new Error($keyword + ' must be number'); }} | |
|   {{?}} | |
| #}} | |
| 
 | |
| 
 | |
| {{## def.beginDefOut: | |
|   {{ | |
|     var $$outStack = $$outStack || []; | |
|     $$outStack.push(out); | |
|     out = ''; | |
|   }} | |
| #}} | |
| 
 | |
| 
 | |
| {{## def.storeDefOut:_variable: | |
|   {{ | |
|     var _variable = out; | |
|     out = $$outStack.pop(); | |
|   }} | |
| #}} | |
| 
 | |
| 
 | |
| {{## def.dataPath:(dataPath || ''){{? it.errorPath != '""'}} + {{= it.errorPath }}{{?}}#}} | |
| 
 | |
| {{## def.setParentData: | |
|   {{ | |
|     var $parentData = $dataLvl ? 'data' + (($dataLvl-1)||'') : 'parentData' | |
|       , $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty'; | |
|   }} | |
| #}} | |
| 
 | |
| {{## def.passParentData: | |
|   {{# def.setParentData }} | |
|   , {{= $parentData }} | |
|   , {{= $parentDataProperty }} | |
| #}} | |
| 
 | |
| 
 | |
| {{## def.iterateProperties: | |
|   {{? $ownProperties }} | |
|     {{=$dataProperties}} = {{=$dataProperties}} || Object.keys({{=$data}}); | |
|     for (var {{=$idx}}=0; {{=$idx}}<{{=$dataProperties}}.length; {{=$idx}}++) { | |
|       var {{=$key}} = {{=$dataProperties}}[{{=$idx}}]; | |
|   {{??}} | |
|     for (var {{=$key}} in {{=$data}}) { | |
|   {{?}} | |
| #}} | |
| 
 | |
| 
 | |
| {{## def.noPropertyInData: | |
|   {{=$useData}} === undefined | |
|   {{? $ownProperties }} | |
|     || !{{# def.isOwnProperty }} | |
|   {{?}} | |
| #}} | |
| 
 | |
| 
 | |
| {{## def.isOwnProperty: | |
|   Object.prototype.hasOwnProperty.call({{=$data}}, '{{=it.util.escapeQuotes($propertyKey)}}') | |
| #}}
 |