UNPKG

@sjsf/ajv8-validator

Version:

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

69 lines (68 loc) 3.09 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"; 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, transformErrors); }, }; } export function createFieldValueValidator({ compileFieldSchema, }) { return { validateFieldValue(config, fieldValue) { return validateAndTransformErrors(compileFieldSchema(config), fieldValue, createFieldErrorsTransformer(config)); }, }; } export function createAsyncFormValueValidator(options) { const transformErrors = createFormErrorsTransformer(options); return { async validateFormValueAsync(_, rootSchema, formValue) { return validateAndTransformErrorsAsync(options.compileAsyncSchema(rootSchema, rootSchema), formValue, transformErrors); }, }; } export function createAsyncFieldValueValidator({ compileAsyncFieldSchema, }) { return { async validateFieldValueAsync(_, config, fieldValue) { return validateAndTransformErrorsAsync(compileAsyncFieldSchema(config), fieldValue, createFieldErrorsTransformer(config)); }, }; } export function createFormValidator({ ajvOptions = DEFAULT_AJV_CONFIG, ajvPlugins = addFormComponents, ajv = ajvPlugins(new Ajv(ajvOptions)), compileSchema = createSchemaCompiler(ajv, false), compileFieldSchema = createFieldSchemaCompiler(ajv, false), ...rest } = {}) { const options = { ...rest, compileSchema, compileFieldSchema, }; return Object.assign(createValidator(options), createFormValueValidator(options), createFieldValueValidator(options)); } export function createAsyncFormValidator({ ajv, compileSchema = createSchemaCompiler(ajv, false), compileAsyncSchema = createSchemaCompiler(ajv, true), compileAsyncFieldSchema = createFieldSchemaCompiler(ajv, true), ...rest }) { const options = { ...rest, compileSchema, compileAsyncSchema, compileAsyncFieldSchema, }; return Object.assign(createValidator(options), createAsyncFormValueValidator(options), createAsyncFieldValueValidator(options)); }