UNPKG

@nodebysam/tiny-validation

Version:

Tiny Validation is a lightweight, chainable input validation library for Node.js. Validate strings, numbers, emails, and more with ease. Example: validate(input).isEmail().isNotEmpty(). No dependencies, simple API, and perfect for quick validation needs w

93 lines (79 loc) 2.49 kB
/** * TINY VALIDATION * A minimalistic NodeJS data validation library * * By Sam Wilcox <wilcox.sam@gmail.com> * * This library is relased under the GNU v3.0 license. * For further details, see the LICENSE file. */ /** * Validate whether the number is "lucky". * * A number is "lucky" if it: * - Contains the digit 7 (default) * - Is divisible by 7 (default) * - Is a prime number (default) * - Meets user-defined "lucky" criteria (configurable) * * @param {any} value - The value to validate. * @param {Object} [config={}] - Configuration object for custom rules. * @param {function} [config.customRule] - A function taking the number and returning true if it's "lucky". * @returns {boolean} True if the value is "lucky", false otherwise. */ const isLucky = (value, config = {}) => { if (typeof value !== 'number' || value < 0) { return false; } if (config && config.customRule && typeof config.customRule === 'function') { const defaultRuleResult = defaultRules(value); const customRuleResult = config.customRule(value); if (defaultRuleResult && !customRuleResult) { return false; } if (defaultRuleResult && customRuleResult) { return true; } if (!defaultRuleResult && customRuleResult) { return true; } return false; } if (defaultRules(value)) { return true; } return false; }; /** * Helper that determines if the value is "lucky" according to default rules. * * @param {any} value - The value to validate. * @returns {boolean} True if "lucky", false if not. */ function defaultRules(value) { const divisibleBySeven = value % 7 === 0; const containsSeven = value.toString().includes('7'); if (divisibleBySeven && !containsSeven) { return false; } else if (divisibleBySeven && containsSeven) { return true; } if (isPrime(value)) { return true; } return false; } /** * Helper that checks whether the given number is a "prime" number. * * @param {number} num - The number to check. * @returns {boolean} True if a prime number, false if not. */ function isPrime(num) { if (num <= 1) return false; for (let i = 2; i <= Math.sqrt(num); i++) { if (num % i === 0) return false; } return true; } module.exports = isLucky;