{{# def.definitions }} {{# def.errors }} {{# def.setupKeyword }} {{# def.setupNextLevel }}

{{

var $currentBaseId = $it.baseId
  , $prevValid = 'prevValid' + $lvl
  , $passingSchemas = 'passingSchemas' + $lvl;

}}

var {{=$errs}} = errors

, {{=$prevValid}} = false
, {{=$valid}} = false
, {{=$passingSchemas}} = null;

{{# def.setCompositeRule }}

{{~ $schema:$sch:$i }}

{{? {{# def.nonEmptySchema:$sch }} }}
  {{
    $it.schema = $sch;
    $it.schemaPath = $schemaPath + '[' + $i + ']';
    $it.errSchemaPath = $errSchemaPath + '/' + $i;
  }}

  {{# def.insertSubschemaCode }}
{{??}}
  var {{=$nextValid}} = true;
{{?}}

{{? $i }}
  if ({{=$nextValid}} && {{=$prevValid}}) {
    {{=$valid}} = false;
    {{=$passingSchemas}} = [{{=$passingSchemas}}, {{=$i}}];
  } else {
  {{ $closingBraces += '}'; }}
{{?}}

  if ({{=$nextValid}}) {
    {{=$valid}} = {{=$prevValid}} = true;
    {{=$passingSchemas}} = {{=$i}};
  }

{{~}}

{{# def.resetCompositeRule }}

{{= $closingBraces }}

if (!{{=$valid}}) {

{{# def.extraError:'oneOf' }}

} else {

{{# def.resetErrors }}

{{? it.opts.allErrors }} } {{?}}