'use strict'; const colors = require('./colornames.js'); const widths = new Set(['thin', 'medium', 'thick']); const styles = new Set([ 'none', 'hidden', 'dotted', 'dashed', 'solid', 'double', 'groove', 'ridge', 'inset', 'outset', ]); /** * @param {string} value * @return {boolean} */ function isStyle(value) { return value !== undefined && styles.has(value.toLowerCase()); } /** * @param {string} value * @return {boolean} */ function isWidth(value) { return ( (value && widths.has(value.toLowerCase())) || /^(\d+(\.\d+)?|\.\d+)(\w+)?$/.test(value) ); } /** * @param {string} value * @return {boolean} */ function isColor(value) { if (!value) { return false; } value = value.toLowerCase(); if (/rgba?\(/.test(value)) { return true; } if (/hsla?\(/.test(value)) { return true; } if (/#([0-9a-z]{6}|[0-9a-z]{3})/.test(value)) { return true; } if (value === 'transparent') { return true; } if (value === 'currentcolor') { return true; } return colors.has(value); } /** * @param {[string, string, string]} wscs * @return {boolean} */ function isValidWsc(wscs) { const validWidth = isWidth(wscs[0]); const validStyle = isStyle(wscs[1]); const validColor = isColor(wscs[2]); return ( (validWidth && validStyle) || (validWidth && validColor) || (validStyle && validColor) ); } module.exports = { isStyle, isWidth, isColor, isValidWsc };