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