{{# def.definitions }} {{# def.errors }} {{# def.setupKeyword }} {{## def.em_errorMatch: {{# def._em_commonErrorMatch }} && ({{=$err}}.dataPath == {{=$dataPath}} || ({{=$err}}.dataPath.indexOf({{=$dataPath}}) == 0 && {{=$err}}.dataPath[{{=$dataPath}}.length] == '/')) && {{=$err}}.schemaPath.indexOf({{=$errSchemaPathString}}) == 0 && {{=$err}}.schemaPath[{{=it.errSchemaPath.length}}] == '/' #}} {{## def.em_keywordErrorMatch: {{# def._em_commonErrorMatch }} && {{=$err}}.keyword in {{=$errors}} && {{=$err}}.dataPath == {{=$dataPath}} && {{=$err}}.schemaPath.indexOf({{=$errSchemaPathString}}) == 0 && /^\/[^\/]*$/.test({{=$err}}.schemaPath.slice({{=it.errSchemaPath.length}})) #}} {{## def.em_childErrorMatch: {{# def._em_commonErrorMatch }} && {{=$err}}.dataPath.indexOf({{=$dataPath}}) == 0 && ({{=$matches}} = {{=$err}}.dataPath.slice({{=$dataPath}}.length).match(/^\/([^\/]*)(?:\/|$)/), {{=$child}} = {{=$matches}} && {{=$matches}}[1].replace(/~1/g, '/').replace(/~0/g, '~') ) !== undefined && {{=$child}} in {{=$errors}} #}} {{## def._em_commonErrorMatch: {{=$err}}.keyword != '{{=$keyword}}' {{? $config.options.keepErrors }} && !{{=$err}}.emUsed {{?}} #}} {{## def.em_useError: {{? $config.options.keepErrors }} {{=$err}}.emUsed = true; {{??}} vErrors.splice({{=$i}}, 1); errors--; {{?}} #}} {{## def.em_compileTemplates: _keysArray: var {{=$templates}} = { {{ var $comma = false; }} {{~ _keysArray:$k }} {{? INTERPOLATION.test($schema[$k]) }} {{?$comma}},{{?}}{{= it.util.toQuotedString($k) }}: {{= templateFunc($schema[$k]) }} {{ $comma = true; }} {{?}} {{~}} }; #}} {{## def.em_compilePropsTemplates: _keywordProps: var {{=$templates}} = { {{ var $comma = false; }} {{~ Object.keys(_keywordProps):$k }} {{ var $keywordMsgs = $schema[$k]; }} {{?$comma}},{{?}}{{= it.util.toQuotedString($k) }}: { {{ $comma = true; var $innerComma = false; }} {{~ Object.keys($keywordMsgs):$prop }} {{? INTERPOLATION.test($keywordMsgs[$prop]) }} {{?$innerComma}},{{?}}{{= it.util.toQuotedString($prop) }}: {{= templateFunc($keywordMsgs[$prop]) }} {{ $innerComma = true; }} {{?}} {{~}} } {{~}} }; #}} {{## def.em_compileChildTemplates: _children: {{ var _keysArray = Object.keys($childErrors._children); }} var {{=$templates}} = { {{ var $comma = false; }} {{~ _keysArray:$k }} {{? INTERPOLATION.test($schema._children[$k]) }} {{?$comma}},{{?}}{{= it.util.toQuotedString($k) }}: {{= templateFunc($schema._children[$k]) }} {{ $comma = true; }} {{?}} {{~}} }; #}} {{## def.em_errorMessage: {{=$key}} in {{=$templates}} ? {{=$templates}}[{{=$key}}] () : validate.schema{{=$schemaPath}}[{{=$key}}] #}} {{## def.em_keywordError: var err = { keyword: '{{=$keyword}}' , dataPath: {{=$dataPath}} , schemaPath: {{=$errSchemaPathString}} + '/{{=$keyword}}' , params: { errors: {{=$paramsErrors}} } , message: {{=$message}} {{? it.opts.verbose }} , schema: validate.schema{{=$schemaPath}} , parentSchema: validate.schema{{=it.schemaPath}} , data: {{=$data}} {{?}} }; {{# def._addError:'custom' }} #}} {{? it.createErrors !== false }} {{ var INTERPOLATION = /\$\{[^\}]+\}/; var INTERPOLATION_REPLACE = /\$\{([^\}]+)\}/g; var EMPTY_STR = /^\'\'\s*\+\s*|\s*\+\s*\'\'$/g; var $config = it.self.getKeyword($keyword).config , $dataPath = '_em_dataPath' + $lvl , $i = '_em_i' + $lvl , $key = '_em_key' + $lvl , $keyProp = '_em_keyProp' + $lvl , $err = '_em_err' + $lvl , $child = '_em_child' + $lvl , $childKeyword = '_em_childKeyword' + $lvl , $matches = '_em_matches' + $lvl , $isArray = '_em_isArray' + $lvl , $errors = '_em_errors' + $lvl , $message = '_em_message' + $lvl , $paramsErrors = '_em_paramsErrors' + $lvl , $propParam = '_em_propParam' + $lvl , $keywordPropParams = '_em_keywordPropParams' + $lvl , $templates = '_em_templates' + $lvl , $errSchemaPathString = it.util.toQuotedString(it.errSchemaPath); }} if (errors > 0) { var {{=$dataPath}} = (dataPath || '') + {{= it.errorPath }}; var {{=$i}}, {{=$err}}, {{=$errors}}; {{? typeof $schema == 'object' }} {{ var $keywordErrors = {} , $keywordPropErrors = {} , $childErrors = { properties: {}, items: {} } , $hasKeywordProps = false , $hasProperties = false , $hasItems = false; for (var $k in $schema) { switch ($k) { case 'properties': for (var $prop in $schema.properties) { $hasProperties = true; $childErrors.properties[$prop] = []; } break; case 'items': for (var $item=0; $item<$schema.items.length; $item++) { $hasItems = true; $childErrors.items[$item] = []; } break; default: if (typeof $schema[$k] == 'object') { $hasKeywordProps = true; $keywordPropErrors[$k] = {}; for (var $prop in $schema[$k]) { $keywordPropErrors[$k][$prop] = []; } } else { $keywordErrors[$k] = []; } } } }} {{ var $keywordErrorsArr = Object.keys($keywordErrors); }} {{? $keywordErrorsArr.length }} {{=$i}} = 0; {{=$errors}} = {{= JSON.stringify($keywordErrors) }}; {{# def.em_compileTemplates:$keywordErrorsArr }} while ({{=$i}} < errors) { {{=$err}} = vErrors[{{=$i}}]; if ({{# def.em_keywordErrorMatch}}) { {{=$errors}}[{{=$err}}.keyword].push({{=$err}}); {{# def.em_useError }} } else { {{=$i}}++; } } {{? $config.options.singleError }} var {{=$message}} = ''; var {{=$paramsErrors}} = []; {{?}} for (var {{=$key}} in {{=$errors}}) { if ({{=$errors}}[{{=$key}}].length) { {{? $config.options.singleError }} if ({{=$message}}) { {{=$message}} += {{? typeof $config.options.singleError == 'string' }} {{= it.util.toQuotedString($config.options.singleError) }} {{??}} '; ' {{?}}; } {{=$message}} += {{# def.em_errorMessage }}; {{=$paramsErrors}} = {{=$paramsErrors}}.concat({{=$errors}}[{{=$key}}]); } } {{??}} var {{=$message}} = {{# def.em_errorMessage }}; var {{=$paramsErrors}} = {{=$errors}}[{{=$key}}]; {{?}} {{# def.em_keywordError}} {{? !$config.options.singleError }} } } {{?}} {{?}} /* $keywordErrorsArr */ {{? $hasKeywordProps }} {{=$i}} = 0; {{=$errors}} = {{= JSON.stringify($keywordPropErrors) }}; var {{=$paramsErrors}}, {{=$propParam}}; var {{=$keywordPropParams}} = {{= JSON.stringify($config.KEYWORD_PROPERTY_PARAMS) }}; {{# def.em_compilePropsTemplates:$keywordPropErrors }} while ({{=$i}} < errors) { {{=$err}} = vErrors[{{=$i}}]; if ({{# def.em_keywordErrorMatch}}) { {{=$propParam}} = {{=$keywordPropParams}}[{{=$err}}.keyword]; {{=$paramsErrors}} = {{=$errors}}[{{=$err}}.keyword][{{=$err}}.params[{{=$propParam}}]]; if ({{=$paramsErrors}}) { {{=$paramsErrors}}.push({{=$err}}); {{# def.em_useError }} } else { {{=$i}}++; } } else { {{=$i}}++; } } for (var {{=$key}} in {{=$errors}}) { for (var {{=$keyProp}} in {{=$errors}}[{{=$key}}]) { {{=$paramsErrors}} = {{=$errors}}[{{=$key}}][{{=$keyProp}}]; if ({{=$paramsErrors}}.length) { var {{=$message}} = {{=$key}} in {{=$templates}} && {{=$keyProp}} in {{=$templates}}[{{=$key}}] ? {{=$templates}}[{{=$key}}][{{=$keyProp}}] () : validate.schema{{=$schemaPath}}[{{=$key}}][{{=$keyProp}}]; {{# def.em_keywordError}} } } } {{?}} /* $hasKeywordProps */ {{? $hasProperties || $hasItems }} var {{=$isArray}} = Array.isArray({{=$data}}); if {{? $hasProperties && $hasItems }} (typeof {{=$data}} == 'object') { {{ var $childProp = '[' + $childKeyword + ']'; }} {{=$i}} = 0; if ({{=$isArray}}) { var {{=$childKeyword}} = 'items'; {{=$errors}} = {{= JSON.stringify($childErrors.items) }}; {{# def.em_compileChildTemplates: items }} } else { var {{=$childKeyword}} = 'properties'; {{=$errors}} = {{= JSON.stringify($childErrors.properties) }}; {{# def.em_compileChildTemplates: properties }} } {{?? $hasProperties }} (typeof {{=$data}} == 'object' && !{{=$isArray}}) { {{ var $childProp = '.properties'; }} {{=$i}} = 0; {{=$errors}} = {{= JSON.stringify($childErrors.properties) }}; {{# def.em_compileChildTemplates: properties }} {{??}} ({{=$isArray}}) { {{ var $childProp = '.items'; }} {{=$i}} = 0; {{=$errors}} = {{= JSON.stringify($childErrors.items) }}; {{# def.em_compileChildTemplates: items }} {{?}} var {{=$child}}, {{=$matches}}; while ({{=$i}} < errors) { {{=$err}} = vErrors[{{=$i}}]; if ({{# def.em_childErrorMatch}}) { {{=$errors}}[{{=$child}}].push({{=$err}}); {{# def.em_useError }} } else { {{=$i}}++; } } for (var {{=$key}} in {{=$errors}}) { if ({{=$errors}}[{{=$key}}].length) { var err = { keyword: '{{=$keyword}}' , dataPath: {{=$dataPath}} + '/' + {{=$key}}.replace(/~/g, '~0').replace(/\//g, '~1') , schemaPath: {{=$errSchemaPathString}} + '/{{=$keyword}}' , params: { errors: {{=$errors}}[{{=$key}}] } , message: {{=$key}} in {{=$templates}} ? {{=$templates}}[{{=$key}}] () : validate.schema{{=$schemaPath}}{{=$childProp}}[{{=$key}}] {{? it.opts.verbose }} , schema: validate.schema{{=$schemaPath}} , parentSchema: validate.schema{{=it.schemaPath}} , data: {{=$data}} {{?}} }; {{# def._addError:'custom' }} } } /* for */ } /* if */ {{?}} /* $hasProperties || $hasItems */ {{?}} /* $schema is object */ {{ var $schemaMessage = typeof $schema == 'string' ? $schema : $schema._; }} {{? $schemaMessage }} {{=$i}} = 0; {{=$errors}} = []; while ({{=$i}} < errors) { {{=$err}} = vErrors[{{=$i}}]; if ({{# def.em_errorMatch}}) { {{=$errors}}.push({{=$err}}); {{# def.em_useError }} } else { {{=$i}}++; } } if ({{=$errors}}.length) { var err = { keyword: '{{=$keyword}}' , dataPath: {{=$dataPath}} , schemaPath: {{=$errSchemaPathString}} + '/{{=$keyword}}' , params: { errors: {{=$errors}} } , message: {{=templateExpr($schemaMessage)}} {{? it.opts.verbose }} , schema: {{=it.util.toQuotedString($schemaMessage)}} , parentSchema: validate.schema{{=it.schemaPath}} , data: {{=$data}} {{?}} }; {{# def._addError:'custom' }} } {{?}} } {{?}} {{ function templateExpr(str) { str = it.util.escapeQuotes(str); if (!INTERPOLATION.test(str)) return "'" + str + "'"; var expr = "'" + str.replace(INTERPOLATION_REPLACE, function ($0, $1) { return "' + JSON.stringify(" + it.util.getData($1, $dataLvl, it.dataPathArr) + ") + '"; }) + "'"; return expr.replace(EMPTY_STR, ''); } function templateFunc(str) { return 'function() { return ' + templateExpr(str) + '; }'; } }}