UNPKG

@sjsf/ajv8-validator

Version:

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

73 lines (72 loc) 2.89 kB
import { DEFAULT_AUGMENT_SUFFIX } from "@sjsf/form/validators/precompile"; import { createFormErrorsTransformer, createFieldErrorsTransformer, validateAndTransformErrors, validateAndTransformErrorsAsync, } from "../errors.js"; function getValidateFunction({ validateFunctions, augmentSuffix = DEFAULT_AUGMENT_SUFFIX, }, { $id: id, allOf }) { if (id === undefined) { const firstAllOfItem = allOf?.[0]; if (typeof firstAllOfItem === "object" && firstAllOfItem.$id !== undefined) { id = firstAllOfItem.$id + augmentSuffix; } else { throw new Error("Schema id not found"); } } const validate = validateFunctions[id]; if (validate === undefined) { throw new Error(`Validate function with id "${id}" not found`); } return validate; } export function createValidator(options) { return { isValid(schema, _, formValue) { if (typeof schema === "boolean") { return schema; } const validate = getValidateFunction(options, schema); try { return validate(formValue); } catch (e) { console.warn("Failed to validate", e); return false; } }, }; } export function createFormValueValidator(options) { const transformErrors = createFormErrorsTransformer(options); return { validateFormValue(rootSchema, formValue) { return validateAndTransformErrors(getValidateFunction(options, rootSchema), formValue, transformErrors); }, }; } export function createFieldValueValidator(options) { return { validateFieldValue(field, fieldValue) { return validateAndTransformErrors(getValidateFunction(options, field.schema), fieldValue, createFieldErrorsTransformer(field)); }, }; } export function createAsyncFormValueValidator(options) { const transformErrors = createFormErrorsTransformer(options); return { validateFormValueAsync(_, rootSchema, formValue) { return validateAndTransformErrorsAsync(getValidateFunction(options, rootSchema), formValue, transformErrors); }, }; } export function createAsyncFieldValueValidator(options) { return { validateFieldValueAsync(_, field, fieldValue) { return validateAndTransformErrorsAsync(getValidateFunction(options, field.schema), fieldValue, createFieldErrorsTransformer(field)); }, }; } export function createFormValidator(options) { return Object.assign(createValidator(options), createFormValueValidator(options), createFieldValueValidator(options)); } export function createAsyncFormValidator(options) { return Object.assign(createValidator(options), createAsyncFormValueValidator(options), createAsyncFieldValueValidator(options)); }