1 | "use strict";
|
2 |
|
3 | var _interopRequireDefault = require("@babel/runtime/helpers/builtin/interopRequireDefault");
|
4 |
|
5 | exports.__esModule = true;
|
6 | exports.default = StringSchema;
|
7 |
|
8 | var _inherits = _interopRequireDefault(require("./util/inherits"));
|
9 |
|
10 | var _mixed = _interopRequireDefault(require("./mixed"));
|
11 |
|
12 | var _locale = require("./locale");
|
13 |
|
14 | var _isAbsent = _interopRequireDefault(require("./util/isAbsent"));
|
15 |
|
16 |
|
17 | var 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;
|
18 |
|
19 | var 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 |
|
21 | var hasLength = function hasLength(value) {
|
22 | return (0, _isAbsent.default)(value) || value.length > 0;
|
23 | };
|
24 |
|
25 | var isTrimmed = function isTrimmed(value) {
|
26 | return (0, _isAbsent.default)(value) || value === value.trim();
|
27 | };
|
28 |
|
29 | function 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 |
|
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 | });
|
208 | module.exports = exports["default"]; |
\ | No newline at end of file |