UNPKG

rule-filter-validator

Version:

A object and scope validator based on structured rules

86 lines 3.96 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.isValid = isValid; /* eslint-disable no-case-declarations */ function isValid(compareValue, fn, testValue, strict = false) { // When not strict convert all strings and numbers to UPPERCASE strings before comparing const strictValue = (value) => strict ? value : String(value).toUpperCase(); const strictString = (value) => strictValue(String(value)); const strictArray = (value) => strict ? value : strictValue(value.join(',')).split(','); function safeCompare(a, b, cb) { let A = Number(a * 1); let B = Number(b * 1); if (Number.isSafeInteger(A) && Number.isSafeInteger(B)) { return cb(A, B); } A = new Date(a); B = new Date(b); if (A.toString() !== 'Invalid Date' && B.toString() !== 'Invalid Date') { return cb(A, B); } return cb(strictValue(a), strictValue(b)); } const stringValue = strictString(compareValue); switch (fn) { case '_eq': return strictValue(compareValue) === strictValue(testValue); case '_neq': return strictValue(compareValue) !== strictValue(testValue); case '_contains': if (Array.isArray(testValue)) { return testValue.some(tv => strictString(tv) === stringValue); } return strictString(testValue).indexOf(stringValue) > -1; case '_ncontains': if (Array.isArray(testValue)) { return testValue.some(tv => strictString(tv) === stringValue) === false; } return strictString(testValue).indexOf(stringValue) === -1; case '_starts_with': return strictString(testValue).startsWith(stringValue); case '_nstarts_with': return !strictString(testValue).startsWith(stringValue); case '_ends_with': return strictString(testValue).endsWith(stringValue); case '_nends_with': return !strictString(testValue).endsWith(stringValue); case '_in': return strictArray(compareValue).includes(strictValue(testValue)); case '_nin': return !strictArray(compareValue).includes(strictValue(testValue)); case '_gt': return safeCompare(compareValue, testValue, (cv, tv) => tv > cv); case '_gte': return safeCompare(compareValue, testValue, (cv, tv) => tv >= cv); case '_lt': return safeCompare(compareValue, testValue, (cv, tv) => tv < cv); case '_lte': return safeCompare(compareValue, testValue, (cv, tv) => tv <= cv); case '_null': return testValue === null ? compareValue : !compareValue; case '_nnull': return testValue !== null ? compareValue : !compareValue; case '_empty': return Array.isArray(testValue) ? testValue.length === 0 : testValue === ''; case '_nempty': return Array.isArray(testValue) ? testValue.length > 0 : testValue !== ''; case '_between': return (isValid(compareValue[0], '_gte', testValue, strict) && isValid(compareValue[1], '_lte', testValue, strict)); case '_nbetween': return (isValid(compareValue[0], '_lt', testValue, strict) || isValid(compareValue[1], '_gt', testValue, strict)); case '_submitted': return (typeof testValue !== 'undefined' ? compareValue : !compareValue); case '_regex': const regex = compareValue; const wrapped = regex.startsWith('/') && regex.endsWith('/'); const regResult = new RegExp(wrapped ? regex.slice(1, -1) : regex).exec(testValue); return regResult ? regResult.length > 0 : false; default: return null; } } //# sourceMappingURL=is-valid.js.map