| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203 | {{## 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)}}')#}}
 |