diff options
| author | littleblack111 <littleblack11111@gmail.com> | 2023-10-14 15:05:55 +0800 |
|---|---|---|
| committer | littleblack111 <littleblack11111@gmail.com> | 2023-10-14 15:05:55 +0800 |
| commit | c06f7ee0a40255214c477e13d9b956a7e07c2900 (patch) | |
| tree | f5982a568ef8fab865d0142e71c7494fea3e4c1b /node_modules/postcss-merge-longhand/src/lib/validateWsc.js | |
| parent | 3fd9400d4dccc25aa29b5702216732e0b7542073 (diff) | |
postcss,(plugins): nanocss, postcss-preset-env
Diffstat (limited to 'node_modules/postcss-merge-longhand/src/lib/validateWsc.js')
| -rw-r--r-- | node_modules/postcss-merge-longhand/src/lib/validateWsc.js | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/node_modules/postcss-merge-longhand/src/lib/validateWsc.js b/node_modules/postcss-merge-longhand/src/lib/validateWsc.js new file mode 100644 index 00000000..df4409b2 --- /dev/null +++ b/node_modules/postcss-merge-longhand/src/lib/validateWsc.js @@ -0,0 +1,87 @@ +'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 }; |
