forked from mystiq/hydrogen-web
Populate compiled variables map
This commit is contained in:
parent
4350d2f264
commit
918a3e42b1
1 changed files with 22 additions and 1 deletions
|
@ -94,6 +94,23 @@ function addResolvedVariablesToRootSelector(root, {Rule, Declaration}) {
|
||||||
root.append(newRule);
|
root.append(newRule);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function populateMapWithDerivedVariables(map, cssFileLocation) {
|
||||||
|
const location = cssFileLocation.match(/(.+)\/.+\.css/)?.[1];
|
||||||
|
if (map.has(location)) {
|
||||||
|
/**
|
||||||
|
* This postcss plugin is going to run on all theme variants of a single theme.
|
||||||
|
* But we only really need to populate the map once since theme variants only differ
|
||||||
|
* by the values of the base-variables and we don't care about values here.
|
||||||
|
*/
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const derivedVariables = new Set([
|
||||||
|
...([...resolvedMap.keys()].filter(v => !aliasMap.has(v))),
|
||||||
|
...([...aliasMap.entries()].map(([alias, variable]) => `${alias}=${variable}`))
|
||||||
|
]);
|
||||||
|
map.set(location, { "derived-variables": derivedVariables });
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @callback derive
|
* @callback derive
|
||||||
* @param {string} value - The base value on which an operation is applied
|
* @param {string} value - The base value on which an operation is applied
|
||||||
|
@ -104,6 +121,7 @@ function addResolvedVariablesToRootSelector(root, {Rule, Declaration}) {
|
||||||
*
|
*
|
||||||
* @param {Object} opts - Options for the plugin
|
* @param {Object} opts - Options for the plugin
|
||||||
* @param {derive} opts.derive - The callback which contains the logic for resolving derived variables
|
* @param {derive} opts.derive - The callback which contains the logic for resolving derived variables
|
||||||
|
* @param {Map} opts.compiledVariables - A map that stores derived variables so that manifest source sections can be produced
|
||||||
*/
|
*/
|
||||||
module.exports = (opts = {}) => {
|
module.exports = (opts = {}) => {
|
||||||
aliasMap = new Map();
|
aliasMap = new Map();
|
||||||
|
@ -125,13 +143,16 @@ module.exports = (opts = {}) => {
|
||||||
root.walkDecls(decl => extract(decl));
|
root.walkDecls(decl => extract(decl));
|
||||||
root.walkDecls(decl => resolveDerivedVariable(decl, opts.derive));
|
root.walkDecls(decl => resolveDerivedVariable(decl, opts.derive));
|
||||||
addResolvedVariablesToRootSelector(root, {Rule, Declaration});
|
addResolvedVariablesToRootSelector(root, {Rule, Declaration});
|
||||||
|
if (opts.compiledVariables){
|
||||||
|
populateMapWithDerivedVariables(opts.compiledVariables, cssFileLocation);
|
||||||
|
}
|
||||||
// Publish both the base-variables and derived-variables to the other postcss-plugins
|
// Publish both the base-variables and derived-variables to the other postcss-plugins
|
||||||
const combinedMap = new Map([...baseVariables, ...resolvedMap]);
|
const combinedMap = new Map([...baseVariables, ...resolvedMap]);
|
||||||
result.messages.push({
|
result.messages.push({
|
||||||
type: "resolved-variable-map",
|
type: "resolved-variable-map",
|
||||||
plugin: "postcss-compile-variables",
|
plugin: "postcss-compile-variables",
|
||||||
colorMap: combinedMap,
|
colorMap: combinedMap,
|
||||||
})
|
});
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue