@kitmi/data
Version:
Jacaranda Framework Data Access Model
40 lines (30 loc) • 1.36 kB
JavaScript
import typeSystem from '@kitmi/validators/allSync';
import { _ } from '@kitmi/utils';
import { ValidationError } from '@kitmi/types';
const validatorTable = typeSystem.handlers.validator;
export const _Validators = _.mapValues(
validatorTable,
(validator, name) => (entity, field, context, value, payload) => {
if (!validator.__metaCheckNull && value == null) return value;
if (skipValidator(field, context, name)) return value;
const [validated, reason] = validator(value, payload, field, context);
if (!validated) {
if (context.options.$dryRun) {
context.options.$errors || (context.options.$errors = []);
context.options.$errors.push({
message: reason,
info: { entity: entity.meta.name, field: field.name, value },
});
return value;
}
throw new ValidationError(reason, { entity: entity.meta.name, field: field.name, value, payload });
}
return value;
}
);
export const skipValidator = (field, context, validatorName) => {
const validators = context?.options.$skipValidators;
if (validators && (validators.has(validatorName) || validators.has(field.name + '.' + validatorName))) return true;
return false;
};
export default validatorTable;