MCPcopy Create free account
hub / github.com/composify-js/composify / parseAttribute

Function parseAttribute

packages/react/src/renderer/Parser/Parser.ts:60–152  ·  view source on GitHub ↗
(expression: any)

Source from the content-addressed store, hash-verified

58};
59
60const parseAttribute = (expression: any): any => {
61 if (expression === null) {
62 return true;
63 }
64
65 switch (expression.type) {
66 case 'Literal':
67 return expression.value;
68 case 'Identifier':
69 return expression.name;
70 case 'JSXElement':
71 return parseNode(expression);
72 case 'JSXExpressionContainer':
73 return parseAttribute(expression.expression);
74 case 'ArrayExpression':
75 return expression.elements.map(parseAttribute);
76 case 'TemplateLiteral':
77 return expression.quasis.reduce((acc: string, quasi: any) => acc + quasi.value.cooked, '');
78 case 'ObjectExpression':
79 return expression.properties.reduce((properties: Record<string, any>, property: any) => {
80 const key = parseAttribute(property.key);
81 const value = parseAttribute(property.value);
82
83 if (key === undefined || value === undefined) {
84 return properties;
85 }
86
87 properties[key] = value;
88
89 return properties;
90 }, {});
91 case 'BinaryExpression':
92 switch (expression.operator) {
93 case '+':
94 return parseAttribute(expression.left) + parseAttribute(expression.right);
95 case '-':
96 return parseAttribute(expression.left) - parseAttribute(expression.right);
97 case '*':
98 return parseAttribute(expression.left) * parseAttribute(expression.right);
99 case '**':
100 return parseAttribute(expression.left) ** parseAttribute(expression.right);
101 case '/':
102 return parseAttribute(expression.left) / parseAttribute(expression.right);
103 case '%':
104 return parseAttribute(expression.left) % parseAttribute(expression.right);
105 case '==':
106 // biome-ignore lint/suspicious/noDoubleEquals: Allowing loose equality for compatibility
107 return parseAttribute(expression.left) == parseAttribute(expression.right);
108 case '===':
109 return parseAttribute(expression.left) === parseAttribute(expression.right);
110 case '!=':
111 // biome-ignore lint/suspicious/noDoubleEquals: Allowing loose inequality for compatibility
112 return parseAttribute(expression.left) != parseAttribute(expression.right);
113 case '!==':
114 return parseAttribute(expression.left) !== parseAttribute(expression.right);
115 case '<':
116 return parseAttribute(expression.left) < parseAttribute(expression.right);
117 case '<=':

Callers 1

parseNodeFunction · 0.85

Calls 1

parseNodeFunction · 0.85

Tested by

no test coverage detected