| {{# def.definitions }} | 
| {{# def.errors }} | 
| {{# def.setupKeyword }} | 
|   | 
| {{## def.skipFormat: | 
|   {{? $breakOnError }} if (true) { {{?}} | 
|   {{ return out; }} | 
| #}} | 
|   | 
| {{? it.opts.format === false }}{{# def.skipFormat }}{{?}} | 
|   | 
|   | 
| {{# def.$data }} | 
|   | 
|   | 
| {{## def.$dataCheckFormat: | 
|   {{# def.$dataNotType:'string' }} | 
|   ({{? $unknownFormats != 'ignore' }} | 
|      ({{=$schemaValue}} && !{{=$format}} | 
|       {{? $allowUnknown }} | 
|         && self._opts.unknownFormats.indexOf({{=$schemaValue}}) == -1 | 
|       {{?}}) || | 
|    {{?}} | 
|    ({{=$format}} && {{=$formatType}} == '{{=$ruleType}}' | 
|                  && !(typeof {{=$format}} == 'function' | 
|                      ? {{? it.async}} | 
|                         (async{{=$lvl}} ? await {{=$format}}({{=$data}}) : {{=$format}}({{=$data}})) | 
|                        {{??}} | 
|                         {{=$format}}({{=$data}}) | 
|                        {{?}} | 
|                      : {{=$format}}.test({{=$data}})))) | 
| #}} | 
|   | 
| {{## def.checkFormat: | 
|   {{ | 
|     var $formatRef = 'formats' + it.util.getProperty($schema); | 
|     if ($isObject) $formatRef += '.validate'; | 
|   }} | 
|   {{? typeof $format == 'function' }} | 
|     {{=$formatRef}}({{=$data}}) | 
|   {{??}} | 
|     {{=$formatRef}}.test({{=$data}}) | 
|   {{?}} | 
| #}} | 
|   | 
|   | 
| {{ | 
|   var $unknownFormats = it.opts.unknownFormats | 
|     , $allowUnknown = Array.isArray($unknownFormats); | 
| }} | 
|   | 
| {{? $isData }} | 
|   {{ | 
|     var $format = 'format' + $lvl | 
|       , $isObject = 'isObject' + $lvl | 
|       , $formatType = 'formatType' + $lvl; | 
|   }} | 
|   var {{=$format}} = formats[{{=$schemaValue}}]; | 
|   var {{=$isObject}} = typeof {{=$format}} == 'object' | 
|                         && !({{=$format}} instanceof RegExp) | 
|                         && {{=$format}}.validate; | 
|   var {{=$formatType}} = {{=$isObject}} && {{=$format}}.type || 'string'; | 
|   if ({{=$isObject}}) { | 
|     {{? it.async}} | 
|       var async{{=$lvl}} = {{=$format}}.async; | 
|     {{?}} | 
|     {{=$format}} = {{=$format}}.validate; | 
|   } | 
|   if ({{# def.$dataCheckFormat }}) { | 
| {{??}} | 
|   {{ var $format = it.formats[$schema]; }} | 
|   {{? !$format }} | 
|     {{? $unknownFormats == 'ignore' }} | 
|       {{ it.logger.warn('unknown format "' + $schema + '" ignored in schema at path "' + it.errSchemaPath + '"'); }} | 
|       {{# def.skipFormat }} | 
|     {{?? $allowUnknown && $unknownFormats.indexOf($schema) >= 0 }} | 
|       {{# def.skipFormat }} | 
|     {{??}} | 
|       {{ throw new Error('unknown format "' + $schema + '" is used in schema at path "' + it.errSchemaPath + '"'); }} | 
|     {{?}} | 
|   {{?}} | 
|   {{ | 
|     var $isObject = typeof $format == 'object' | 
|                     && !($format instanceof RegExp) | 
|                     && $format.validate; | 
|     var $formatType = $isObject && $format.type || 'string'; | 
|     if ($isObject) { | 
|       var $async = $format.async === true; | 
|       $format = $format.validate; | 
|     } | 
|   }} | 
|   {{? $formatType != $ruleType }} | 
|     {{# def.skipFormat }} | 
|   {{?}} | 
|   {{? $async }} | 
|     {{ | 
|       if (!it.async) throw new Error('async format in sync schema'); | 
|       var $formatRef = 'formats' + it.util.getProperty($schema) + '.validate'; | 
|     }} | 
|     if (!(await {{=$formatRef}}({{=$data}}))) { | 
|   {{??}} | 
|     if (!{{# def.checkFormat }}) { | 
|   {{?}} | 
| {{?}} | 
|     {{# def.error:'format' }} | 
|   } {{? $breakOnError }} else { {{?}} |