UNPKG

@amaui/ui-react

Version:
220 lines (219 loc) 12.3 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.onValidateError = void 0; const is_1 = __importDefault(require("@amaui/utils/is")); const isValid_1 = __importDefault(require("@amaui/utils/isValid")); const utils_1 = require("@amaui/utils"); const errors_1 = require("@amaui/errors"); const onValidateError = (options, model, message) => { const error = new errors_1.ValidationError(message); // Entire model message if (options.message !== undefined) error.message = options.message; // model item message else if (model.message !== undefined) error.message = model.message; // error throw error; }; exports.onValidateError = onValidateError; const validate = async (model, property, form, options_) => { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w; const options = (0, utils_1.merge)((options_ && (0, is_1.default)('object', options_)) ? options_ : {}, { uriDecode: true, parse: true }); const name = (0, is_1.default)('function', model.propertyNameUpdate) ? model.propertyNameUpdate(model.name) : model.capitalize !== false ? (0, utils_1.capitalize)(model.name) : model.name; const value = model.value; // value validate // with options above // required if (model.required) { const response = value; if (response === undefined) (0, exports.onValidateError)(options, model, ((_a = model.messages) === null || _a === void 0 ? void 0 : _a.required) || `${name} is required`); } // only validate // if value is not undefined // as it is optional if (value === undefined) return; // is if (model.is !== undefined) { const is_ = ((0, is_1.default)('array', model.is) ? model.is : [model.is]).filter(Boolean); for (const item of is_) { const itemType = (item === null || item === void 0 ? void 0 : item.type) || item; const itemOptions = (item === null || item === void 0 ? void 0 : item.options) || undefined; const response = (0, is_1.default)(itemType, value, itemOptions); if (!response) (0, exports.onValidateError)(options, model, ((_b = model.messages) === null || _b === void 0 ? void 0 : _b.is) || `${name} has to be a valid ${(0, utils_1.cleanValue)(itemType)}`); } } // is valid if (model.isValid !== undefined) { const isValid_ = ((0, is_1.default)('array', model.isValid) ? model.isValid : [model.isValid]).filter(Boolean); for (const item of isValid_) { const itemType = (item === null || item === void 0 ? void 0 : item.type) || item; const itemOptions = (item === null || item === void 0 ? void 0 : item.options) || undefined; const response = (0, isValid_1.default)(itemType, value, itemOptions); if (!response) (0, exports.onValidateError)(options, model, ((_c = model.messages) === null || _c === void 0 ? void 0 : _c.isValid) || `${name} has to be a valid ${(0, utils_1.cleanValue)(itemType)}`); } } // of if (model.of !== undefined) { const of_ = ((0, is_1.default)('array', model.of) ? model.of : [model.of]).filter(Boolean); if ((0, is_1.default)('array', value)) { const response = value.every(valueItem => { return of_.some(item => { const itemType = (item === null || item === void 0 ? void 0 : item.type) || item; const itemOptions = (item === null || item === void 0 ? void 0 : item.options) || undefined; return (0, is_1.default)(itemType, valueItem, itemOptions); }); }); if (!response) (0, exports.onValidateError)(options, model, ((_d = model.messages) === null || _d === void 0 ? void 0 : _d.of) || `${name} items have to be one of ${of_.map(item => (item === null || item === void 0 ? void 0 : item.type) || item).join(', ')}`); } } // ofValid if (model.ofValid !== undefined) { const ofValid = ((0, is_1.default)('array', model.ofValid) ? model.ofValid : [model.ofValid]).filter(Boolean); if ((0, is_1.default)('array', value)) { const response = value.every(valueItem => { return ofValid.some(item => { const itemType = (item === null || item === void 0 ? void 0 : item.type) || item; const itemOptions = (item === null || item === void 0 ? void 0 : item.options) || undefined; return (0, isValid_1.default)(itemType, valueItem, itemOptions); }); }); if (!response) (0, exports.onValidateError)(options, model, ((_e = model.messages) === null || _e === void 0 ? void 0 : _e.ofValid) || `${name} items have to be one of valid ${ofValid.map(item => (item === null || item === void 0 ? void 0 : item.type) || item).join(', ')}`); } } // equal if (model.equal !== undefined) { const response = value === model.equal; if (!response) (0, exports.onValidateError)(options, model, ((_f = model.messages) === null || _f === void 0 ? void 0 : _f.equal) || `${name} has to be equal to ${(0, utils_1.stringify)(model.equal)}`); } // not equal if (model.notEqual !== undefined) { const response = value !== model.equal; if (!response) (0, exports.onValidateError)(options, model, ((_g = model.messages) === null || _g === void 0 ? void 0 : _g.notEqual) || `${name} has to not be equal to ${(0, utils_1.stringify)(model.equal)}`); } // equal deep if (model.equalDeep !== undefined) { const response = (0, utils_1.equalDeep)(value, model.equalDeep); if (!response) (0, exports.onValidateError)(options, model, ((_h = model.messages) === null || _h === void 0 ? void 0 : _h.equalDeep) || `${name} has to be equal to ${(0, utils_1.stringify)(model.equalDeep)}`); } // not equal deep if (model.notEqualDeep !== undefined) { const response = !(0, utils_1.equalDeep)(value, model.notEqualDeep); if (!response) (0, exports.onValidateError)(options, model, ((_j = model.messages) === null || _j === void 0 ? void 0 : _j.notEqualDeep) || `${name} has to not be equal to ${(0, utils_1.stringify)(model.notEqualDeep)}`); } // some if ((0, is_1.default)('array', model.some)) { let response; if ((0, is_1.default)('string', value)) { response = !!model.some.find(item => (0, utils_1.equalDeep)(value, item)); if (!response) (0, exports.onValidateError)(options, model, ((_k = model.messages) === null || _k === void 0 ? void 0 : _k.some) || `${name} has to be one of ${model.some.map(item => (0, utils_1.stringify)(item)).join(', ')}`); } else if ((0, is_1.default)('array', value)) { response = value.some(item => !!model.some.find(item_ => (0, utils_1.equalDeep)(item, item_))); if (!response) (0, exports.onValidateError)(options, model, ((_l = model.messages) === null || _l === void 0 ? void 0 : _l.some) || `${name} has to include some of ${model.some.map(item => (0, utils_1.stringify)(item)).join(', ')}`); } } // in // every const every = model.in || model.every; if ((0, is_1.default)('array', every)) { let response; if ((0, is_1.default)('string', value)) { response = !!every.find(item => (0, utils_1.equalDeep)(value, item)); if (!response) (0, exports.onValidateError)(options, model, ((_m = model.messages) === null || _m === void 0 ? void 0 : _m.in) || ((_o = model.messages) === null || _o === void 0 ? void 0 : _o.every) || `${name} has to be one of ${every.map(item => (0, utils_1.stringify)(item)).join(', ')}`); } else if ((0, is_1.default)('array', value)) { response = value.every(item => !!every.find(item_ => (0, utils_1.equalDeep)(item, item_))); if (!response) (0, exports.onValidateError)(options, model, ((_p = model.messages) === null || _p === void 0 ? void 0 : _p.in) || ((_q = model.messages) === null || _q === void 0 ? void 0 : _q.every) || `${name} has to include one of ${every.map(item => (0, utils_1.stringify)(item)).join(', ')}`); } } // properties if ((0, is_1.default)('array', model.properties)) { const allowed = model.properties; const keys = Object.keys(value); const response = keys.every(item => allowed.includes(item)); if (!response) (0, exports.onValidateError)(options, model, ((_r = model.messages) === null || _r === void 0 ? void 0 : _r.properties) || `${name} allowed properties are ${allowed.join(', ')}`); } // not properties if ((0, is_1.default)('array', model.notProperties)) { const notAllowed = model.notProperties; const keys = Object.keys(value); const response = keys.every(item => !notAllowed.includes(item)); if (!response) (0, exports.onValidateError)(options, model, ((_s = model.messages) === null || _s === void 0 ? void 0 : _s.notProperties) || `${name} includes not allowed property. Not allowed properties are ${notAllowed.join(', ')}`); } // min // max // length if (![undefined, null].includes(value) && ((0, is_1.default)('number', model.min) || (0, is_1.default)('number', model.max) || (0, is_1.default)('number', model.length))) { let length = value; // object if ((0, is_1.default)('object', value)) length = Object.keys(value).length; // number else if ((0, is_1.default)('number', value)) length = value; // string, array, map, etc. else { length = (value === null || value === void 0 ? void 0 : value.length) !== undefined ? value === null || value === void 0 ? void 0 : value.length : value === null || value === void 0 ? void 0 : value.size; } if ((0, is_1.default)('number', model.min)) { const response = length >= model.min; if (!response) (0, exports.onValidateError)(options, model, ((_t = model.messages) === null || _t === void 0 ? void 0 : _t.min) || `${name} has to be minimum ${model.min}`); } if ((0, is_1.default)('number', model.max)) { const response = length <= model.max; if (!response) (0, exports.onValidateError)(options, model, ((_u = model.messages) === null || _u === void 0 ? void 0 : _u.max) || `${name} can be maximum ${model.max}`); } if ((0, is_1.default)('number', model.length)) { const response = length === model.length; if (!response) (0, exports.onValidateError)(options, model, ((_v = model.messages) === null || _v === void 0 ? void 0 : _v.length) || `${name} has to be exactly ${model.length} in length/size`); } } // method const methods = ((0, is_1.default)('array', model.method) ? model.method : [model.method]).filter(Boolean); for (const method_ of methods) { try { // either throw error or Promise.reject or return false const response = await method_(value, { form, object: model, property, options }); if (response !== undefined) { if (!response) throw new errors_1.ValidationError(`${name} is invalid`); } } catch (error) { const messageValue = (error === null || error === void 0 ? void 0 : error.message) !== undefined ? error.message : error; (0, exports.onValidateError)(options, model, ((_w = model.messages) === null || _w === void 0 ? void 0 : _w.method) || messageValue); } } }; exports.default = validate;