blob: 0660b25bd7a701f5e7838954a21dad3df60c120e [file] [log] [blame]
import { Ajv } from 'ajv';
import ajvErrors from 'ajv-errors';
import ajvFormats from 'ajv-formats';
/**
* Returns a new pre-configured Ajv instance.
* @returns the Ajv instance.
*/
export const createAjv = (): Ajv => {
const ajv = new Ajv({ allErrors: true });
// We use 'fast' because as a side effect that makes the "uri" format more lax.
// By default the "uri" format rejects ① and similar in URLs.
ajvFormats.default(ajv, { mode: 'fast' });
// Allow for custom error messages to provide better directions for contributors
ajvErrors.default(ajv);
// Define keywords for schema->TS converter
ajv.addKeyword('tsEnumNames');
ajv.addKeyword('tsName');
ajv.addKeyword('tsType');
return ajv;
};