UNPKG

postcss-css-variables

Version:

PostCSS plugin to transform CSS Custom Properties(CSS variables) syntax into a static representation

51 lines (42 loc) 1.95 kB
// Variables that referenced in some way by the target variable // // `variablesUsed`: Array of string variable names that may be in the map // // Returns: `object` // - `deps`: array of complete dependecies recursively gathered (entries from the `map`) // - `hasCircularOrSelfReference`: bool of whether there is some circular or self reference of dependencies. // - If true, the variable can't be deduced var gatherVariableDependencies = function(variablesUsed, map, _dependencyVariablesList) { _dependencyVariablesList = _dependencyVariablesList || []; var hasCircularOrSelfReference = false; if(variablesUsed) { _dependencyVariablesList = variablesUsed.reduce(function(dependencyVariablesList, variableUsedName) { var isVariableInMap = !!map[variableUsedName]; var doesThisVarHaveCircularOrSelfReference = !isVariableInMap ? false : dependencyVariablesList.some(function(dep) { return map[variableUsedName].some(function(mapItem) { // If already in the list, we got a circular reference if(dep === mapItem) { return true; } return false; }); }); // Update the overall state of dependency health hasCircularOrSelfReference = hasCircularOrSelfReference || doesThisVarHaveCircularOrSelfReference; if(isVariableInMap && !hasCircularOrSelfReference) { dependencyVariablesList = dependencyVariablesList.concat(map[variableUsedName]); (map[variableUsedName] || []).forEach(function(mapItem) { var result = gatherVariableDependencies(mapItem.variablesUsed, map, dependencyVariablesList); dependencyVariablesList = result.deps; hasCircularOrSelfReference = hasCircularOrSelfReference || result.hasCircularOrSelfReference; }); } return dependencyVariablesList; }, _dependencyVariablesList); } return { deps: _dependencyVariablesList, hasCircularOrSelfReference: hasCircularOrSelfReference }; }; module.exports = gatherVariableDependencies;