"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.create = create; exports.default = void 0; var _locale = require("./locale"); var _isAbsent = _interopRequireDefault(require("./util/isAbsent")); var _schema = _interopRequireDefault(require("./schema")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } // eslint-disable-next-line let 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 let 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; // eslint-disable-next-line let rUUID = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i; let isTrimmed = value => (0, _isAbsent.default)(value) || value === value.trim(); let objStringTag = {}.toString(); function create() { return new StringSchema(); } class StringSchema extends _schema.default { constructor() { super({ type: 'string' }); this.withMutation(() => { this.transform(function (value) { if (this.isType(value)) return value; if (Array.isArray(value)) return value; const strValue = value != null && value.toString ? value.toString() : value; if (strValue === objStringTag) return value; return strValue; }); }); } _typeCheck(value) { if (value instanceof String) value = value.valueOf(); return typeof value === 'string'; } _isPresent(value) { return super._isPresent(value) && !!value.length; } length(length, message = _locale.string.length) { return this.test({ message, name: 'length', exclusive: true, params: { length }, test(value) { return (0, _isAbsent.default)(value) || value.length === this.resolve(length); } }); } min(min, message = _locale.string.min) { return this.test({ message, name: 'min', exclusive: true, params: { min }, test(value) { return (0, _isAbsent.default)(value) || value.length >= this.resolve(min); } }); } max(max, message = _locale.string.max) { return this.test({ name: 'max', exclusive: true, message, params: { max }, test(value) { return (0, _isAbsent.default)(value) || value.length <= this.resolve(max); } }); } matches(regex, options) { let excludeEmptyString = false; let message; let name; if (options) { if (typeof options === 'object') { ({ excludeEmptyString = false, message, name } = options); } else { message = options; } } return this.test({ name: name || 'matches', message: message || _locale.string.matches, params: { regex }, test: value => (0, _isAbsent.default)(value) || value === '' && excludeEmptyString || value.search(regex) !== -1 }); } email(message = _locale.string.email) { return this.matches(rEmail, { name: 'email', message, excludeEmptyString: true }); } url(message = _locale.string.url) { return this.matches(rUrl, { name: 'url', message, excludeEmptyString: true }); } uuid(message = _locale.string.uuid) { return this.matches(rUUID, { name: 'uuid', message, excludeEmptyString: false }); } //-- transforms -- ensure() { return this.default('').transform(val => val === null ? '' : val); } trim(message = _locale.string.trim) { return this.transform(val => val != null ? val.trim() : val).test({ message, name: 'trim', test: isTrimmed }); } lowercase(message = _locale.string.lowercase) { return this.transform(value => !(0, _isAbsent.default)(value) ? value.toLowerCase() : value).test({ message, name: 'string_case', exclusive: true, test: value => (0, _isAbsent.default)(value) || value === value.toLowerCase() }); } uppercase(message = _locale.string.uppercase) { return this.transform(value => !(0, _isAbsent.default)(value) ? value.toUpperCase() : value).test({ message, name: 'string_case', exclusive: true, test: value => (0, _isAbsent.default)(value) || value === value.toUpperCase() }); } } exports.default = StringSchema; create.prototype = StringSchema.prototype; // // String Interfaces //