You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
1.7 KiB
62 lines
1.7 KiB
{{# def.definitions }} |
|
{{# def.errors }} |
|
{{# def.setupKeyword }} |
|
{{# def.$data }} |
|
|
|
|
|
{{? ($schema || $isData) && it.opts.uniqueItems !== false }} |
|
{{? $isData }} |
|
var {{=$valid}}; |
|
if ({{=$schemaValue}} === false || {{=$schemaValue}} === undefined) |
|
{{=$valid}} = true; |
|
else if (typeof {{=$schemaValue}} != 'boolean') |
|
{{=$valid}} = false; |
|
else { |
|
{{?}} |
|
|
|
var i = {{=$data}}.length |
|
, {{=$valid}} = true |
|
, j; |
|
if (i > 1) { |
|
{{ |
|
var $itemType = it.schema.items && it.schema.items.type |
|
, $typeIsArray = Array.isArray($itemType); |
|
}} |
|
{{? !$itemType || $itemType == 'object' || $itemType == 'array' || |
|
($typeIsArray && ($itemType.indexOf('object') >= 0 || $itemType.indexOf('array') >= 0)) }} |
|
outer: |
|
for (;i--;) { |
|
for (j = i; j--;) { |
|
if (equal({{=$data}}[i], {{=$data}}[j])) { |
|
{{=$valid}} = false; |
|
break outer; |
|
} |
|
} |
|
} |
|
{{??}} |
|
var itemIndices = {}, item; |
|
for (;i--;) { |
|
var item = {{=$data}}[i]; |
|
{{ var $method = 'checkDataType' + ($typeIsArray ? 's' : ''); }} |
|
if ({{= it.util[$method]($itemType, 'item', it.opts.strictNumbers, true) }}) continue; |
|
{{? $typeIsArray}} |
|
if (typeof item == 'string') item = '"' + item; |
|
{{?}} |
|
if (typeof itemIndices[item] == 'number') { |
|
{{=$valid}} = false; |
|
j = itemIndices[item]; |
|
break; |
|
} |
|
itemIndices[item] = i; |
|
} |
|
{{?}} |
|
} |
|
|
|
{{? $isData }} } {{?}} |
|
|
|
if (!{{=$valid}}) { |
|
{{# def.error:'uniqueItems' }} |
|
} {{? $breakOnError }} else { {{?}} |
|
{{??}} |
|
{{? $breakOnError }} if (true) { {{?}} |
|
{{?}}
|
|
|