@vnmfify/core
Version:
```shell npm i @vnmfify/core -S ```
89 lines (69 loc) • 2.14 kB
JavaScript
import _isString from "lodash/isString";
import _isError from "lodash/isError";
import _isBoolean from "lodash/isBoolean";
import _isFunction from "lodash/isFunction";
import { isPromise } from "../utils/promisify";
function isEmptyValue(value) {
if (Array.isArray(value)) {
return !value.length;
}
if (value === 0) {
return false;
}
return !value;
}
function getRuleMessage(value, rule) {
var {
message
} = rule;
if (_isFunction(message)) {
return message(value, rule);
}
return message;
}
function getSyncRule(value, rule) {
if (rule.required && isEmptyValue(value)) {
return Promise.resolve(getRuleMessage(value, rule));
}
if (rule.pattern && !rule.pattern.test(String(value))) {
return Promise.resolve(getRuleMessage(value, rule));
}
}
function getValidatorRule(value, rule) {
function obtainInvalidMessage(error) {
if (_isBoolean(error) && !error) {
return getRuleMessage(value, rule);
}
if (_isError(error)) {
return error.message;
}
return error;
}
return new Promise(resolve => {
var _rule$validator;
var promise = (_rule$validator = rule.validator) === null || _rule$validator === void 0 ? void 0 : _rule$validator.call(rule, value, rule);
if (isPromise(promise)) {
promise.then(obtainInvalidMessage).catch(obtainInvalidMessage).then(resolve);
} else {
resolve(obtainInvalidMessage(promise));
}
});
}
function validateRule(value, rule) {
var _getSyncRule;
return (_getSyncRule = getSyncRule(value, rule)) !== null && _getSyncRule !== void 0 ? _getSyncRule : getValidatorRule(value, rule);
}
export function validateRules(value, rules) {
return rules.reduce((promise, rule) => promise.then(errors => {
if (rule.formatter) {
value = rule.formatter(value, rule);
}
return validateRule(value, rule).then(error => {
if (_isString(error)) {
errors.push(error);
}
return errors;
});
}), Promise.resolve([]));
}
//# sourceMappingURL=form.rule.js.map