UNPKG

@zensen/form-validators

Version:
275 lines (253 loc) 9.61 kB
(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 }); }));