blob: 865984158bd5a615250e050cc1ee29f6b764554f [file] [log] [blame]
Mathias Bynens79e2cf02020-05-29 16:46:17 +02001module.exports = function resolveNestedSelector(selector, node) {
2 var parent = node.parent;
3 var parentIsNestAtRule = parent.type === 'atrule' && parent.name === 'nest';
4
5 if (parent.type === 'root') return [selector];
6 if (parent.type !== 'rule' && !parentIsNestAtRule) return resolveNestedSelector(selector, parent);
7
8 var parentSelectors = (parentIsNestAtRule)
9 ? parent.params.split(',').map(function(s) { return s.trim(); })
10 : parent.selectors;
11
12 var resolvedSelectors = parentSelectors.reduce(function(result, parentSelector) {
13 if (selector.indexOf('&') !== -1) {
14 var newlyResolvedSelectors = resolveNestedSelector(parentSelector, parent).map(function(resolvedParentSelector) {
15 return selector.replace(/&/g, resolvedParentSelector);
16 });
17 return result.concat(newlyResolvedSelectors);
18 }
19
20 var combinedSelector = [ parentSelector, selector ].join(' ');
21 return result.concat(resolveNestedSelector(combinedSelector, parent));
22 }, []);
23
24 return resolvedSelectors;
25}