UNPKG

@sjsf/ajv8-validator

Version:

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

70 lines (69 loc) 3.31 kB
import { Ajv, } from "ajv"; import { addFormComponents, DEFAULT_AJV_CONFIG } from "./model.js"; import { createFieldSchemaCompiler, createSchemaCompiler, } from "./schema-compilers.js"; import { createFormErrorsTransformer, createFieldErrorsTransformer, validateAndTransformErrors, validateAndTransformErrorsAsync, } from "./errors.js"; import { CAST_FORM_DATA, NO_FILED_ERRORS } from "./internals.js"; export function createValidator({ compileSchema, }) { return { isValid(schemaDef, rootSchema, formValue) { if (typeof schemaDef === "boolean") { return schemaDef; } const validator = compileSchema(schemaDef, rootSchema); try { return validator(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(options.compileSchema(rootSchema, rootSchema), formValue, (CAST_FORM_DATA), transformErrors); }, }; } export function createFieldValueValidator({ compileFieldSchema, }) { return { validateFieldValue(config, fieldValue) { return validateAndTransformErrors(compileFieldSchema(config), fieldValue, NO_FILED_ERRORS, createFieldErrorsTransformer(config)); }, }; } export function createAsyncFormValueValidator(options) { const transformErrors = createFormErrorsTransformer(options); return { async validateFormValueAsync(_, rootSchema, formValue) { return validateAndTransformErrorsAsync(options.compileAsyncSchema(rootSchema, rootSchema), formValue, (CAST_FORM_DATA), transformErrors); }, }; } export function createAsyncFieldValueValidator({ compileAsyncFieldSchema, }) { return { async validateFieldValueAsync(_, config, fieldValue) { return validateAndTransformErrorsAsync(compileAsyncFieldSchema(config), fieldValue, NO_FILED_ERRORS, createFieldErrorsTransformer(config)); }, }; } export function createFormValidator({ ajvOptions = DEFAULT_AJV_CONFIG, ajvPlugins = addFormComponents, ajv = ajvPlugins(new Ajv(ajvOptions)), validatorsCache, compileSchema = createSchemaCompiler(ajv, false, validatorsCache), compileFieldSchema = createFieldSchemaCompiler(ajv, false), ...rest } = {}) { const options = { ...rest, compileSchema, compileFieldSchema, }; return Object.assign(createValidator(options), createFormValueValidator(options), createFieldValueValidator(options)); } export function createAsyncFormValidator({ ajv, validatorsCache, compileSchema = createSchemaCompiler(ajv, false, validatorsCache), compileAsyncSchema = createSchemaCompiler(ajv, true, validatorsCache), compileAsyncFieldSchema = createFieldSchemaCompiler(ajv, true), ...rest }) { const options = { ...rest, compileSchema, compileAsyncSchema, compileAsyncFieldSchema, }; return Object.assign(createValidator(options), createAsyncFormValueValidator(options), createAsyncFieldValueValidator(options)); }