validateWsc.js
1.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
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 };