UNPKG

@sjsf/ajv8-validator

Version:

The ajv-8 based validator for svelte-jsonschema-form

89 lines (88 loc) 3.54 kB
import { fromValidators } from "@sjsf/form/validators/precompile"; import { createFormErrorsTransformer, createFieldErrorsTransformer, validateAndTransformErrors, validateAndTransformErrorsAsync, } from "../errors.js"; import { CAST_FORM_DATA, NO_FILED_ERRORS, } from "../internals.js"; // TODO: Remove in v4 function createRetriever(options) { return "validateFunctions" in options ? (options.validatorRetriever ?? fromValidators(options.validateFunctions, options.augmentSuffix ? { idAugmentations: { combination: (id) => id + options.augmentSuffix, }, } : undefined)) : options.validatorRetriever; } export function createValidator(options) { const getValidateFunction = createRetriever(options); return { isValid(schema, _, formValue) { if (typeof schema === "boolean") { return schema; } const validate = getValidateFunction(schema); try { return validate(formValue); } catch (e) { console.warn("Failed to validate", e); return false; } }, }; } export function createFormValueValidator(options) { const getValidateFunction = createRetriever(options); const transformErrors = createFormErrorsTransformer(options); return { validateFormValue(rootSchema, formValue) { return validateAndTransformErrors(getValidateFunction(rootSchema), formValue, (CAST_FORM_DATA), transformErrors); }, }; } export function createFieldValueValidator(options) { const getValidateFunction = createRetriever(options); return { validateFieldValue(field, fieldValue) { return validateAndTransformErrors(getValidateFunction(field.schema), fieldValue, NO_FILED_ERRORS, createFieldErrorsTransformer(field)); }, }; } export function createAsyncFormValueValidator(options) { const getValidateFunction = createRetriever(options); const transformErrors = createFormErrorsTransformer(options); return { validateFormValueAsync(_, rootSchema, formValue) { return validateAndTransformErrorsAsync(getValidateFunction(rootSchema), formValue, (CAST_FORM_DATA), transformErrors); }, }; } export function createAsyncFieldValueValidator(options) { const getValidateFunction = createRetriever(options); return { validateFieldValueAsync(_, field, fieldValue) { return validateAndTransformErrorsAsync(getValidateFunction(field.schema), fieldValue, NO_FILED_ERRORS, createFieldErrorsTransformer(field)); }, }; } export function createFormValidatorFactory(vOptions) { return (options) => { const full = { ...options, ...vOptions, validatorRetriever: vOptions.validatorRetriever ?? createRetriever(vOptions), }; return Object.assign(createValidator(full), createFormValueValidator(full), createFieldValueValidator(full)); }; } export function createAsyncFormValidatorFactory(vOptions) { return (options) => { const full = { ...options, ...vOptions, validatorRetriever: vOptions.validatorRetriever ?? createRetriever(vOptions), }; return Object.assign(createValidator(full), createAsyncFormValueValidator(full), createAsyncFieldValueValidator(full)); }; }