ajv-validator/ajv-errors

Getting instancePath when using with ajv-keywords and uniqueItemProperties

brandondurham opened this issue · 1 comments

When using alongside ajv-keywords and uniqueItemProperties, how do I get the instancePath of the erroneous record?

My code:

import Ajv from 'ajv';
import addFormats from 'ajv-formats';
import ajvErrors from 'ajv-errors';
import ajvKeywords from 'ajv-keywords';

const ajv = new Ajv({ allErrors: true });
ajvKeywords(ajv, ['uniqueItemProperties']);
addFormats(ajv, { formats: ['date', 'email'], keywords: true });
ajvErrors(ajv);

… and my schema:

export const employeeSchema = {
	errorMessage: {
		uniqueItemProperties: 'What’s going on?',
	},
	items: {
		properties: {
			firstName: {
				errorMessage: { type: 'required; and must be a string' },
				type: 'string',
			},
			lastName: {
				errorMessage: { type: 'required; and must be a string' },
				type: 'string',
			},
			email: {
				format: 'email',
				type: 'string',
			},
		},
		required: [
			'email',
			'firstName',
			'lastName',
		],
		type: 'object',
	},
	type: 'array',
	uniqueItemProperties: ['email'],
};

And when running against the following data:

[
    {
        email: 'dhachardy@tamu.edu',
        firstName: 2,
        lastName: 'Hachard',
    },
    {
        email: 'dhachardy@tamu.edu',
        firstName: 'Me',
        lastName: 'Hachard',
    },
]

… I get the following errors reported:

[
    {
        "instancePath": "",
        "schemaPath": "#/errorMessage",
        "keyword": "errorMessage",
        "params": {
            "errors": [
                {
                    "instancePath": "",
                    "schemaPath": "#/uniqueItemProperties",
                    "keyword": "uniqueItemProperties",
                    "params": {},
                    "message": "must pass \"uniqueItemProperties\" keyword validation",
                    "emUsed": true
                }
            ]
        },
        "message": "What’s going on?"
    }
]

I have also the same problem.
@epoberezkin : Is there anyway to identify the problematic duplicated: email / id / parameter? It would be great to identify the problem in stead of searching in a whole file for which one was duplicated.