UNPKG

1.18 kBJavaScriptView Raw
1'use strict';
2
3/** @typedef {import('postcss-value-parser').Node} ValueNode */
4
5/**
6 * @param {ValueNode | undefined} valueNode
7 * @returns {boolean}
8 */
9module.exports = function (valueNode) {
10 if (!valueNode) {
11 return false;
12 }
13
14 if (valueNode.type !== 'function' || !valueNode.nodes || valueNode.value) {
15 return false;
16 }
17
18 // It's necessary to remove comments and spaces if they are present
19 const cleanNodes = valueNode.nodes.filter(
20 (node) => node.type !== 'comment' && node.type !== 'space',
21 );
22
23 // Map without comments and spaces will have the structure like $map (prop: value, prop2: value)
24 // ↑ ↑ ↑ ↑
25 // 0 1 2 3
26 if (cleanNodes[0] && cleanNodes[0].type !== 'word' && cleanNodes[0].type !== 'string') {
27 return false;
28 }
29
30 if (cleanNodes[1] && cleanNodes[1].value !== ':') {
31 return false;
32 }
33
34 // There is no need to check type or value of this node since it could be anything
35 if (!cleanNodes[2]) {
36 return false;
37 }
38
39 if (cleanNodes[3] && cleanNodes[3].value !== ',') {
40 return false;
41 }
42
43 return true;
44};