UNPKG

7.28 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime/helpers/builtin/interopRequireDefault");
4
5exports.__esModule = true;
6exports.default = StringSchema;
7
8var _inherits = _interopRequireDefault(require("./util/inherits"));
9
10var _mixed = _interopRequireDefault(require("./mixed"));
11
12var _locale = require("./locale");
13
14var _isAbsent = _interopRequireDefault(require("./util/isAbsent"));
15
16// eslint-disable-next-line
17var rEmail = /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i; // eslint-disable-next-line
18
19var rUrl = /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i;
20
21var hasLength = function hasLength(value) {
22 return (0, _isAbsent.default)(value) || value.length > 0;
23};
24
25var isTrimmed = function isTrimmed(value) {
26 return (0, _isAbsent.default)(value) || value === value.trim();
27};
28
29function StringSchema() {
30 var _this = this;
31
32 if (!(this instanceof StringSchema)) return new StringSchema();
33
34 _mixed.default.call(this, {
35 type: 'string'
36 });
37
38 this.withMutation(function () {
39 _this.transform(function (value) {
40 if (this.isType(value)) return value;
41 return value != null && value.toString ? value.toString() : value;
42 });
43 });
44}
45
46(0, _inherits.default)(StringSchema, _mixed.default, {
47 _typeCheck: function _typeCheck(value) {
48 if (value instanceof String) value = value.valueOf();
49 return typeof value === 'string';
50 },
51 required: function required(message) {
52 if (message === void 0) {
53 message = _locale.mixed.required;
54 }
55
56 var next = _mixed.default.prototype.required.call(this, message);
57
58 return next.test({
59 message: message,
60 name: 'required',
61 test: hasLength
62 });
63 },
64 length: function length(_length, message) {
65 if (message === void 0) {
66 message = _locale.string.length;
67 }
68
69 return this.test({
70 message: message,
71 name: 'length',
72 exclusive: true,
73 params: {
74 length: _length
75 },
76 test: function test(value) {
77 return (0, _isAbsent.default)(value) || value.length === this.resolve(_length);
78 }
79 });
80 },
81 min: function min(_min, message) {
82 if (message === void 0) {
83 message = _locale.string.min;
84 }
85
86 return this.test({
87 message: message,
88 name: 'min',
89 exclusive: true,
90 params: {
91 min: _min
92 },
93 test: function test(value) {
94 return (0, _isAbsent.default)(value) || value.length >= this.resolve(_min);
95 }
96 });
97 },
98 max: function max(_max, message) {
99 if (message === void 0) {
100 message = _locale.string.max;
101 }
102
103 return this.test({
104 name: 'max',
105 exclusive: true,
106 message: message,
107 params: {
108 max: _max
109 },
110 test: function test(value) {
111 return (0, _isAbsent.default)(value) || value.length <= this.resolve(_max);
112 }
113 });
114 },
115 matches: function matches(regex, options) {
116 var excludeEmptyString = false;
117 var message;
118
119 if (options) {
120 if (options.message || options.hasOwnProperty('excludeEmptyString')) {
121 excludeEmptyString = options.excludeEmptyString;
122 message = options.message;
123 } else message = options;
124 }
125
126 return this.test({
127 message: message || _locale.string.matches,
128 params: {
129 regex: regex
130 },
131 test: function test(value) {
132 return (0, _isAbsent.default)(value) || value === '' && excludeEmptyString || regex.test(value);
133 }
134 });
135 },
136 email: function email(message) {
137 if (message === void 0) {
138 message = _locale.string.email;
139 }
140
141 return this.matches(rEmail, {
142 message: message,
143 excludeEmptyString: true
144 });
145 },
146 url: function url(message) {
147 if (message === void 0) {
148 message = _locale.string.url;
149 }
150
151 return this.matches(rUrl, {
152 message: message,
153 excludeEmptyString: true
154 });
155 },
156 //-- transforms --
157 ensure: function ensure() {
158 return this.default('').transform(function (val) {
159 return val === null ? '' : val;
160 });
161 },
162 trim: function trim(message) {
163 if (message === void 0) {
164 message = _locale.string.trim;
165 }
166
167 return this.transform(function (val) {
168 return val != null ? val.trim() : val;
169 }).test({
170 message: message,
171 name: 'trim',
172 test: isTrimmed
173 });
174 },
175 lowercase: function lowercase(message) {
176 if (message === void 0) {
177 message = _locale.string.lowercase;
178 }
179
180 return this.transform(function (value) {
181 return !(0, _isAbsent.default)(value) ? value.toLowerCase() : value;
182 }).test({
183 message: message,
184 name: 'string_case',
185 exclusive: true,
186 test: function test(value) {
187 return (0, _isAbsent.default)(value) || value === value.toLowerCase();
188 }
189 });
190 },
191 uppercase: function uppercase(message) {
192 if (message === void 0) {
193 message = _locale.string.uppercase;
194 }
195
196 return this.transform(function (value) {
197 return !(0, _isAbsent.default)(value) ? value.toUpperCase() : value;
198 }).test({
199 message: message,
200 name: 'string_case',
201 exclusive: true,
202 test: function test(value) {
203 return (0, _isAbsent.default)(value) || value === value.toUpperCase();
204 }
205 });
206 }
207});
208module.exports = exports["default"];
\No newline at end of file