@zensen/form-validators
Version:
Validators for form-service
275 lines (253 loc) • 9.61 kB
JavaScript
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('validator')) :
typeof define === 'function' && define.amd ? define(['exports', 'validator'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.FormValidators = {}, global.validator));
})(this, (function (exports, pkg) { 'use strict';
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var pkg__default = /*#__PURE__*/_interopDefaultLegacy(pkg);
function _toConsumableArray(arr) {
return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
}
function _arrayWithoutHoles(arr) {
if (Array.isArray(arr)) return _arrayLikeToArray(arr);
}
function _iterableToArray(iter) {
if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter);
}
function _unsupportedIterableToArray(o, minLen) {
if (!o) return;
if (typeof o === "string") return _arrayLikeToArray(o, minLen);
var n = Object.prototype.toString.call(o).slice(8, -1);
if (n === "Object" && o.constructor) n = o.constructor.name;
if (n === "Map" || n === "Set") return Array.from(o);
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
}
function _arrayLikeToArray(arr, len) {
if (len == null || len > arr.length) len = arr.length;
for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
return arr2;
}
function _nonIterableSpread() {
throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
function extents(ext1, ext2) {
return {
min: ext1 < ext2 ? ext1 : ext2,
max: ext1 > ext2 ? ext1 : ext2
};
}
function getValueByPath(obj, keyPath) {
return keyPath.reduce(function (obj, key) {
return typeof obj !== 'undefined' ? obj[key] : undefined;
}, obj);
}
function isRequired() {
var error = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'Required';
return {
error: error,
validate: function validate(v) {
return Array.isArray(v) ? v.length : typeof v === 'string' ? v.trim() : v;
}
};
}
function isRequiredIf(siblingKey) {
var autoValidate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
var error = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'Required';
return {
error: error,
validate: function validate(v, keyPath, state, service) {
var siblingPath = [].concat(_toConsumableArray(keyPath.slice(0, keyPath.length - 1)), [siblingKey]);
if (autoValidate) {
service.validateKey(siblingPath);
}
return getValueByPath(state, siblingPath) ? typeof v === 'string' ? v.trim() : v : true;
}
};
}
function isPropRequired(path) {
var error = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'Required';
return {
error: error,
validate: function validate(v) {
var prop = getValueByPath(v, path.split('.'));
return Array.isArray(prop) ? prop.length : prop;
}
};
}
function isSsn() {
var error = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '###-##-####';
return {
error: error,
validate: function validate(v) {
var REGEX_SSN = new RegExp(/^\d{3}-\d{2}-\d{4}$/g);
var result = v.match(REGEX_SSN);
return !v || Boolean(result && result.length);
}
};
}
function isDate() {
var fmt = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'mm/dd/yyyy';
var error = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'mm/dd/yyyy';
return {
error: error,
validate: function validate(v) {
return !v || pkg__default["default"].isDate(v, fmt);
}
};
}
function isDateBefore(targetDate) {
var error = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'Date is too late';
return {
error: error,
validate: function validate(v) {
return !v || pkg__default["default"].isBefore(v, targetDate);
}
};
}
function isDateAfter(targetDate) {
var error = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'Date is too early';
return {
error: error,
validate: function validate(v) {
return !v || pkg__default["default"].isAfter(v, targetDate);
}
};
}
function isEmailAddress() {
var error = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'Invalid email';
return {
error: error,
validate: function validate(v) {
return !v || pkg__default["default"].isEmail(v);
}
};
}
function isPhoneNumber() {
var error = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'Invalid phone number';
return {
error: error,
validate: function validate(v) {
return !v || pkg__default["default"].isMobilePhone(v);
}
};
}
function isPostalCode() {
var locale = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'US';
var error = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'Invalid Postal Code';
return {
error: error,
validate: function validate(v) {
return !v || pkg__default["default"].isPostalCode(v, locale);
}
};
}
function hasLength(length) {
var error = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
return {
error: error || "Must be ".concat(length, " characters"),
validate: function validate(v) {
return !v || v.length === length;
}
};
}
function hasDuplicate() {
var error = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'Duplicate';
return {
error: error,
validate: function validate(v, keyPath, state) {
var revPath = _toConsumableArray(keyPath).reverse();
var lastKey = revPath[0];
var targetIndex = Number(revPath[1]);
var rootPath = keyPath.slice(0, keyPath.length - 2);
var items = getValueByPath(state, rootPath);
var values = items.map(function (item) {
return item[lastKey];
}).filter(function (_, index) {
return index !== targetIndex;
});
return values.indexOf(v) === -1;
}
};
}
function atMin(extent) {
var inclusive = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
var error = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
return {
error: error,
validate: function validate(v) {
return v === '' || (inclusive ? v >= extent : v > extent);
}
};
}
function atMax(extent) {
var inclusive = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
var error = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
return {
error: error,
validate: function validate(v) {
return v === '' || (inclusive ? v <= extent : v < extent);
}
};
}
function inRange(ext1, ext2) {
var incMin = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
var incMax = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
var error = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null;
var _extents = extents(Number(ext1), Number(ext2)),
min = _extents.min,
max = _extents.max;
return {
error: error ? error : "".concat(min, " - ").concat(max),
validate: function validate(v) {
var passesMin = incMin ? v >= min : v > min;
var passesMax = incMax ? v <= max : v < max;
return v === '' || passesMin && passesMax;
}
};
}
function matchesPattern(regex) {
var error = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'Invalid';
return {
error: error,
validate: function validate(v) {
return !v || v.match(regex);
}
};
} // Default export for UMD compatibility
var FormValidators = {
isRequired: isRequired,
isRequiredIf: isRequiredIf,
isPropRequired: isPropRequired,
isSsn: isSsn,
isDate: isDate,
isDateBefore: isDateBefore,
isDateAfter: isDateAfter,
isEmailAddress: isEmailAddress,
isPhoneNumber: isPhoneNumber,
isPostalCode: isPostalCode,
hasLength: hasLength,
hasDuplicate: hasDuplicate,
atMin: atMin,
atMax: atMax,
inRange: inRange,
matchesPattern: matchesPattern
};
exports.atMax = atMax;
exports.atMin = atMin;
exports["default"] = FormValidators;
exports.hasDuplicate = hasDuplicate;
exports.hasLength = hasLength;
exports.inRange = inRange;
exports.isDate = isDate;
exports.isDateAfter = isDateAfter;
exports.isDateBefore = isDateBefore;
exports.isEmailAddress = isEmailAddress;
exports.isPhoneNumber = isPhoneNumber;
exports.isPostalCode = isPostalCode;
exports.isPropRequired = isPropRequired;
exports.isRequired = isRequired;
exports.isRequiredIf = isRequiredIf;
exports.isSsn = isSsn;
exports.matchesPattern = matchesPattern;
Object.defineProperty(exports, '__esModule', { value: true });
}));