@react-input-validator/rules
Version:
The validation rule objects used by the packages: `@react-input-validator/core`, `@react-input-validator/native` and `@react-input-validator/web`
182 lines (181 loc) • 7.3 kB
JavaScript
"use strict";
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
};
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
if (kind === "m") throw new TypeError("Private method is not writable");
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
var _Rule_arrayAsSingle, _Rule_messageFunc, _Rule_priority, _Rule_value;
Object.defineProperty(exports, "__esModule", { value: true });
exports.str = void 0;
exports.isFilled = isFilled;
/**
* https://github.com/atmulyana/react-input-validator
*/
const javascript_common_1 = require("javascript-common");
const messages_1 = __importDefault(require("./messages"));
const reVarNameHolders = /\$\{([_a-zA-Z][_a-zA-Z0-9]*)\}/g;
const dontReadRuleMembers = {
arrayAsSingle: 1,
errorMessage: 1,
inputValues: 1,
isArrayAsSingle: 1,
lang: 1,
messageFunc: 1,
priority: 1,
setMessageFunc: 1,
setName: 1,
setPriority: 1,
setValue: 1,
validate: 1,
};
const str = (template, params) => template &&
(params && typeof (params) == 'object' || null) &&
template.replace(reVarNameHolders, function (_, p1) {
let value = params[p1];
if (params instanceof Rule) {
if (p1 in dontReadRuleMembers)
value = javascript_common_1.emptyString;
else if (typeof value == 'function')
try {
value = value();
}
catch (_a) { }
}
if (value !== null && value !== undefined && typeof value != 'function')
return value + javascript_common_1.emptyString;
return javascript_common_1.emptyString;
});
exports.str = str;
function isFilled(value) {
if (typeof (value) == 'string') {
return !!value.trim();
}
else if (Array.isArray(value)) {
if (value.length == 1)
return isFilled(value[0]);
return value.length > 0;
}
else {
return value !== undefined && value !== null;
}
}
let defaultArrayAsSingle = false;
class Rule {
static get defaultLang() {
return javascript_common_1.noChange;
}
static get defaultArrayAsSingle() {
return defaultArrayAsSingle;
}
static set defaultArrayAsSingle(value) {
defaultArrayAsSingle = value;
}
constructor() {
var _a, _b;
_Rule_arrayAsSingle.set(this, false);
_Rule_messageFunc.set(this, void 0);
_Rule_priority.set(this, 0);
_Rule_value.set(this, void 0);
this.isValid = false;
this.lang = Rule.defaultLang;
let isCallingMessageFunc = false;
let _this = this;
/* We need the prototype's `errorMessage` getter function to get the prototype's `errorMessage` value
because `Object.getPrototypeOf(this).errorMessage` will fail to access the fields of `this`. The getter
function, as a function in general, can be bound to `this` as the context object. */
let getErrorMessage;
while (!getErrorMessage && (_this instanceof Rule)) {
_this = Object.getPrototypeOf(_this);
getErrorMessage = (_b = (_a = Object.getOwnPropertyDescriptor(_this, 'errorMessage')) === null || _a === void 0 ? void 0 : _a.get) === null || _b === void 0 ? void 0 : _b.bind(this);
}
_this = this;
Object.defineProperty(this, 'errorMessage', {
get() {
if (isCallingMessageFunc)
return getErrorMessage ? getErrorMessage() : javascript_common_1.emptyString;
let message;
if (__classPrivateFieldGet(_this, _Rule_messageFunc, "f")) {
isCallingMessageFunc = true; //to avoid recursive-calling forever
message = __classPrivateFieldGet(_this, _Rule_messageFunc, "f").call(_this, _this);
isCallingMessageFunc = false;
}
if (!message)
message = getErrorMessage && getErrorMessage();
return (0, exports.str)(message, _this);
}
});
__classPrivateFieldSet(this, _Rule_arrayAsSingle, defaultArrayAsSingle, "f");
}
get errorMessage() {
return this.lang(messages_1.default.invalid);
}
get isArrayAsSingle() {
return __classPrivateFieldGet(this, _Rule_arrayAsSingle, "f");
}
get messageFunc() {
return __classPrivateFieldGet(this, _Rule_messageFunc, "f");
}
get priority() { return __classPrivateFieldGet(this, _Rule_priority, "f"); }
get resultValue() {
return __classPrivateFieldGet(this, _Rule_value, "f");
}
get value() {
return __classPrivateFieldGet(this, _Rule_value, "f");
}
arrayAsSingle(isSingle = true) {
__classPrivateFieldSet(this, _Rule_arrayAsSingle, isSingle, "f");
return this;
}
setErrorMessage(message) {
message = message.trim();
return this.setMessageFunc(message ? (() => message) : null); //will throw `Error` as necessary on rules: `email`, `integer`, `numeric`, `required`
}
setMessageFunc(func) {
if (typeof func == 'function') //runtime check
__classPrivateFieldSet(this, _Rule_messageFunc, func, "f");
else
__classPrivateFieldSet(this, _Rule_messageFunc, null, "f");
return this;
}
setName(name) {
this.name = name;
return this;
}
setPriority(priority) {
__classPrivateFieldSet(this, _Rule_priority, priority < 0 ? 0 : priority, "f");
return this;
}
setValue(value) {
__classPrivateFieldSet(this, _Rule_value, value, "f");
return this;
}
validate() {
return this;
}
}
_Rule_arrayAsSingle = new WeakMap(), _Rule_messageFunc = new WeakMap(), _Rule_priority = new WeakMap(), _Rule_value = new WeakMap();
exports.default = Rule;
{
let _lang = Rule.defaultLang;
const translate = (s) => _lang(s) + javascript_common_1.emptyString; //make sure it always returns string (for runtime)
Object.defineProperty(Rule.prototype, 'lang', {
get() {
return translate;
},
set(f) {
if (typeof f == 'function') //runtime check
_lang = f;
else
_lang = Rule.defaultLang;
}
});
}