UNPKG

@whitemordred/react-native-bootstrap5

Version:

A complete React Native library that replicates Bootstrap 5.3 with 100% feature parity, full theming support, CSS variables, and dark/light mode

121 lines (120 loc) 4.13 kB
"use strict"; /** * Validation utilities for React Native Bootstrap 5 * These helpers ensure props are valid and provide warnings in development */ Object.defineProperty(exports, "__esModule", { value: true }); exports.createErrorHandler = exports.validateChildren = exports.safeStyle = exports.isValidSize = exports.safeNumber = exports.safeString = exports.isValidButtonVariant = exports.isValidColorVariant = exports.isValidEnum = exports.isNotNullOrUndefined = exports.error = exports.warn = void 0; // Development-only warning const warn = (message) => { if (__DEV__) { console.warn(`[react-native-bootstrap5] ${message}`); } }; exports.warn = warn; // Development-only error const error = (message) => { if (__DEV__) { console.error(`[react-native-bootstrap5] ${message}`); } }; exports.error = error; // Validate that a value is not null or undefined const isNotNullOrUndefined = (value) => { return value !== null && value !== undefined; }; exports.isNotNullOrUndefined = isNotNullOrUndefined; // Validate enum values const isValidEnum = (value, validValues) => { return validValues.includes(value); }; exports.isValidEnum = isValidEnum; // Validate color variant const isValidColorVariant = (variant) => { const validVariants = [ 'primary', 'secondary', 'success', 'danger', 'warning', 'info', 'light', 'dark', 'blue', 'indigo', 'purple', 'pink', 'red', 'orange', 'yellow', 'green', 'teal', 'cyan' ]; return validVariants.includes(variant); }; exports.isValidColorVariant = isValidColorVariant; // Validate button variant const isValidButtonVariant = (variant) => { const baseVariants = [ 'primary', 'secondary', 'success', 'danger', 'warning', 'info', 'light', 'dark', 'link', 'blue', 'indigo', 'purple', 'pink', 'red', 'orange', 'yellow', 'green', 'teal', 'cyan' ]; if (baseVariants.includes(variant)) return true; // Check outline variants if (variant.startsWith('outline-')) { const baseVariant = variant.replace('outline-', ''); return baseVariants.includes(baseVariant) && baseVariant !== 'link'; } return false; }; exports.isValidButtonVariant = isValidButtonVariant; // Safe string conversion const safeString = (value, fallback = '') => { if (typeof value === 'string') return value; if ((0, exports.isNotNullOrUndefined)(value)) { try { return String(value); } catch (_a) { (0, exports.warn)(`Failed to convert value to string: ${value}`); } } return fallback; }; exports.safeString = safeString; // Safe number conversion const safeNumber = (value, fallback = 0) => { if (typeof value === 'number' && !isNaN(value)) return value; const parsed = Number(value); if (!isNaN(parsed)) return parsed; (0, exports.warn)(`Invalid number value: ${value}, using fallback: ${fallback}`); return fallback; }; exports.safeNumber = safeNumber; // Validate size prop const isValidSize = (size) => { return ['sm', 'md', 'lg', 'xl', 'default'].includes(size); }; exports.isValidSize = isValidSize; // Create a safe style object const safeStyle = (style) => { if (!style) return {}; if (Array.isArray(style)) { return style.filter(Boolean).map(exports.safeStyle); } if (typeof style === 'object') { return style; } (0, exports.warn)(`Invalid style prop: ${style}`); return {}; }; exports.safeStyle = safeStyle; // Validate children prop const validateChildren = (children, componentName) => { if (!children) { (0, exports.warn)(`${componentName} requires children prop`); return false; } return true; }; exports.validateChildren = validateChildren; // Create a default error handler const createErrorHandler = (componentName) => { return (error) => { if (__DEV__) { console.error(`[${componentName}] Error:`, error); } // In production, you might want to send this to a monitoring service }; }; exports.createErrorHandler = createErrorHandler;