import { draft07Config, DraftConfig } from '@squiz/json-schema-library'; import { customFormatValidators } from './validators/customFormatValidators'; import { customKeywordValidators } from './validators/customKeywordValidators'; export const defaultConfig: DraftConfig = { ...draft07Config, validateFormat: { ...draft07Config.validateFormat, ...customFormatValidators, }, typeKeywords: { ...draft07Config.typeKeywords, array: draft07Config.typeKeywords.array.concat('ui:metadata'), object: draft07Config.typeKeywords.object.concat('ui:metadata'), boolean: draft07Config.typeKeywords.boolean.concat('ui:metadata'), string: draft07Config.typeKeywords.string.concat('ui:metadata'), number: draft07Config.typeKeywords.number.concat('ui:metadata'), }, validateKeyword: { ...draft07Config.validateKeyword, ...customKeywordValidators, }, errors: { ...draft07Config.errors, enumError(data) { let values = '[]'; if (data.values && Array.isArray(data.values)) { if (data.values.length < 5) { values = `[${data.values.join(', ')}]`; } else { const firstFiveValues = data.values.slice(0, 5); values = `[${firstFiveValues.join(', ')}, ... ${data.values.length - 5} more]`; } } return { type: 'error', name: 'EnumError', code: 'enum-error', message: `Expected given value \`${data.value}\` in ${data.pointer}\` to be one of \`${values}\``, data, }; }, anyOfError(data) { let value = `Value \`${data.value}\` at`; if (typeof data.value == 'object') { value = 'Object at'; } if (Array.isArray(data.value)) { value = 'Array at'; } return { type: 'error', name: 'AnyOfError', code: 'any-of-error', message: `${value} \`${data.pointer}\` does not match any schema`, data, }; }, typeError(data) { let value = `${data.value}`; if (data.received == 'object') { value = `Object ${JSON.stringify(data.value)}`; } if (data.received == 'array') { value = `Array ${JSON.stringify(data.value)}`; } const expected = JSON.stringify(data.expected).replace(/"/g, '`'); return { type: 'error', name: 'TypeError', code: 'type-error', message: `Expected \`${value}\` (${data.received}) in \`${data.pointer}\` to be of type ${expected}`, data, }; }, }, };