UNPKG

@validate-me/core

Version:

Main package for `validate-me`. It contains everything to run client side validations with any kind of JS framework or with vanilla JS.

78 lines (70 loc) 2.19 kB
const datePatterns = { date: /^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$/, time: /^([01]\d|2[0-3]):[0-5]\d$/, 'datetime-local': /^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])T([01]\d|2[0-3]):[0-5]\d$/, week: /^\d{4}-W([0-4]\d|5[0-3])$/, month: /^\d{4}-(0[1-9]|1[0-2])$/, }; const dateExamples = { date: '2019-03-24', time: '14:59', 'datetime-local': '2019-02-28T23:59', week: '2019-W53', month: '2019-12', }; const number = 'number'; const color = 'color'; const range = 'range'; const min = 'min'; const max = 'max'; const patternName = 'pattern'; const defaultMailPattern = "[a-z0-9!#$%&'*+/=?^_`{|}~.-]+@[a-z0-9-]+(.[a-z0-9-]+)*"; /** * @param {string} type Type * @param {any} props Props * @return {Array<Array<string>>} Configured rules */ export default function getRules(type, props) { const rules = props.required ? [['required']] : []; const addRule = rules.push.bind(rules); if (type === color) { addRule([color]); } else if (type === number || type === range) { addRule([number]); props.min && addRule([min, props.min]); props.max && addRule([max, props.max]); } else if (type in dateExamples) { const pattern = datePatterns[type]; addRule([patternName, pattern, '', '', dateExamples[type]]); if (props.min) { if (process.env.NODE_ENV !== 'production' && !pattern.test(props.min)) { throw new Error( `[dev-only] @validate-me: the value "${ props.min }" from the min prop must be a valid ${type} value.`, ); } addRule([min, props.min]); } if (props.max) { if (process.env.NODE_ENV !== 'production' && !pattern.test(props.max)) { throw new Error( `[dev-only] @validate-me: the value "${ props.max }" from the max prop must be a valid ${type} value.`, ); } addRule([max, props.max]); } } else if (type === 'email') { const rule = [patternName, props.pattern || defaultMailPattern, 'i']; if (props.multiple) { rule.push('mul'); } addRule(rule); } else if (props.pattern) { addRule([patternName, props.pattern]); } return rules; }