| 'use strict'; |
| |
| module.exports = function defFunc(ajv) { |
| defFunc.definition = { |
| type: 'array', |
| compile: function(keys, parentSchema, it) { |
| var equal = it.util.equal; |
| return function(data) { |
| if (data.length > 1) { |
| for (var k=0; k < keys.length; k++) { |
| var key = keys[k]; |
| for (var i = data.length; i--;) { |
| if (typeof data[i] != 'object') continue; |
| for (var j = i; j--;) { |
| if (typeof data[j] == 'object' && equal(data[i][key], data[j][key])) |
| return false; |
| } |
| } |
| } |
| } |
| return true; |
| }; |
| }, |
| metaSchema: { |
| type: 'array', |
| items: {type: 'string'} |
| } |
| }; |
| |
| ajv.addKeyword('uniqueItemProperties', defFunc.definition); |
| return ajv; |
| }; |