UNPKG

json-schema-library

Version:

Customizable and hackable json-validator and json-schema utilities for traversal, data generation and validation

31 lines (30 loc) 999 B
import deepEqual from "fast-deep-equal"; export const uniqueItemsKeyword = { id: "uniqueItems", keyword: "uniqueItems", addValidate: ({ schema }) => schema.uniqueItems === true, validate: validateUniqueItems }; function validateUniqueItems({ node, data, pointer }) { if (!Array.isArray(data)) { return undefined; } const { schema } = node; const duplicates = []; const errors = []; data.forEach((item, index) => { for (let i = index + 1; i < data.length; i += 1) { if (deepEqual(item, data[i]) && !duplicates.includes(i)) { errors.push(node.createError("unique-items-error", { pointer: `${pointer}/${i}`, duplicatePointer: `${pointer}/${index}`, arrayPointer: pointer, value: JSON.stringify(item), schema })); duplicates.push(i); } } }); return errors; }