| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 | 
							- 'use strict';
 
- var SCALAR_TYPES = ['number', 'integer', 'string', 'boolean', 'null'];
 
- module.exports = function defFunc(ajv) {
 
-   defFunc.definition = {
 
-     type: 'array',
 
-     compile: function(keys, parentSchema, it) {
 
-       var equal = it.util.equal;
 
-       var scalar = getScalarKeys(keys, parentSchema);
 
-       return function(data) {
 
-         if (data.length > 1) {
 
-           for (var k=0; k < keys.length; k++) {
 
-             var i, key = keys[k];
 
-             if (scalar[k]) {
 
-               var hash = {};
 
-               for (i = data.length; i--;) {
 
-                 if (!data[i] || typeof data[i] != 'object') continue;
 
-                 var prop = data[i][key];
 
-                 if (prop && typeof prop == 'object') continue;
 
-                 if (typeof prop == 'string') prop = '"' + prop;
 
-                 if (hash[prop]) return false;
 
-                 hash[prop] = true;
 
-               }
 
-             } else {
 
-               for (i = data.length; i--;) {
 
-                 if (!data[i] || typeof data[i] != 'object') continue;
 
-                 for (var j = i; j--;) {
 
-                   if (data[j] && 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;
 
- };
 
- function getScalarKeys(keys, schema) {
 
-   return keys.map(function(key) {
 
-     var properties = schema.items && schema.items.properties;
 
-     var propType = properties && properties[key] && properties[key].type;
 
-     return Array.isArray(propType)
 
-             ? propType.indexOf('object') < 0 && propType.indexOf('array') < 0
 
-             : SCALAR_TYPES.indexOf(propType) >= 0;
 
-   });
 
- }
 
 
  |