b7ce55cdae554b59a9c0b1e6cc5dab85fb3e1abc18a6d5a97c51ccd867c8ce457284d7838bc7fba7e8715a31d75a596f090f89dcc0da0b67a3bd036f27669e 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. 'use strict';
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. var _typeof2 = require('babel-runtime/helpers/typeof');
  6. var _typeof3 = _interopRequireDefault(_typeof2);
  7. var _util = require('../util');
  8. var util = _interopRequireWildcard(_util);
  9. var _required = require('./required');
  10. var _required2 = _interopRequireDefault(_required);
  11. function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
  12. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
  13. /* eslint max-len:0 */
  14. var pattern = {
  15. // http://emailregex.com/
  16. email: /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,
  17. url: new RegExp('^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$', 'i'),
  18. hex: /^#?([a-f0-9]{6}|[a-f0-9]{3})$/i
  19. };
  20. var types = {
  21. integer: function integer(value) {
  22. return types.number(value) && parseInt(value, 10) === value;
  23. },
  24. float: function float(value) {
  25. return types.number(value) && !types.integer(value);
  26. },
  27. array: function array(value) {
  28. return Array.isArray(value);
  29. },
  30. regexp: function regexp(value) {
  31. if (value instanceof RegExp) {
  32. return true;
  33. }
  34. try {
  35. return !!new RegExp(value);
  36. } catch (e) {
  37. return false;
  38. }
  39. },
  40. date: function date(value) {
  41. return typeof value.getTime === 'function' && typeof value.getMonth === 'function' && typeof value.getYear === 'function';
  42. },
  43. number: function number(value) {
  44. if (isNaN(value)) {
  45. return false;
  46. }
  47. return typeof value === 'number';
  48. },
  49. object: function object(value) {
  50. return (typeof value === 'undefined' ? 'undefined' : (0, _typeof3['default'])(value)) === 'object' && !types.array(value);
  51. },
  52. method: function method(value) {
  53. return typeof value === 'function';
  54. },
  55. email: function email(value) {
  56. return typeof value === 'string' && !!value.match(pattern.email) && value.length < 255;
  57. },
  58. url: function url(value) {
  59. return typeof value === 'string' && !!value.match(pattern.url);
  60. },
  61. hex: function hex(value) {
  62. return typeof value === 'string' && !!value.match(pattern.hex);
  63. }
  64. };
  65. /**
  66. * Rule for validating the type of a value.
  67. *
  68. * @param rule The validation rule.
  69. * @param value The value of the field on the source object.
  70. * @param source The source object being validated.
  71. * @param errors An array of errors that this rule may add
  72. * validation errors to.
  73. * @param options The validation options.
  74. * @param options.messages The validation messages.
  75. */
  76. function type(rule, value, source, errors, options) {
  77. if (rule.required && value === undefined) {
  78. (0, _required2['default'])(rule, value, source, errors, options);
  79. return;
  80. }
  81. var custom = ['integer', 'float', 'array', 'regexp', 'object', 'method', 'email', 'number', 'date', 'url', 'hex'];
  82. var ruleType = rule.type;
  83. if (custom.indexOf(ruleType) > -1) {
  84. if (!types[ruleType](value)) {
  85. errors.push(util.format(options.messages.types[ruleType], rule.fullField, rule.type));
  86. }
  87. // straight typeof check
  88. } else if (ruleType && (typeof value === 'undefined' ? 'undefined' : (0, _typeof3['default'])(value)) !== rule.type) {
  89. errors.push(util.format(options.messages.types[ruleType], rule.fullField, rule.type));
  90. }
  91. }
  92. exports['default'] = type;
  93. module.exports = exports['default'];