@sjsf/ajv8-validator
Version:
The ajv-8 based validator for svelte-jsonschema-form
73 lines (72 loc) • 2.89 kB
JavaScript
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));
}