summaryrefslogtreecommitdiff
path: root/node_modules/postcss-merge-longhand/src/lib/validateWsc.js
diff options
context:
space:
mode:
authorlittleblack111 <littleblack11111@gmail.com>2023-10-14 15:05:55 +0800
committerlittleblack111 <littleblack11111@gmail.com>2023-10-14 15:05:55 +0800
commitc06f7ee0a40255214c477e13d9b956a7e07c2900 (patch)
treef5982a568ef8fab865d0142e71c7494fea3e4c1b /node_modules/postcss-merge-longhand/src/lib/validateWsc.js
parent3fd9400d4dccc25aa29b5702216732e0b7542073 (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.js87
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 };