blob: 480201520fa8d84fd6299a2739d283ca9e38cf76 [file] [log] [blame]
"use strict";
// In order to accommodate nested blocks (postcss-nested),
// we need to run a shallow loop (instead of eachDecl() or eachRule(),
// which loop recursively) and allow each nested block to accumulate
// its own list of properties -- so that a property in a nested rule
// does not conflict with the same property in the parent rule
/**
* executes a provided function once for each declaration block.
* @param {Root|Document} root - root element of file.
* @param {function} cb - Function to execute for each declaration block
*/
module.exports = function(root /*: Object */, cb /* Function */) {
function each(statement) {
if (statement.nodes && statement.nodes.length) {
const decls = statement.nodes.filter(node => {
if (node.type === "decl") {
return true;
} else {
each(node);
}
});
if (decls.length) {
cb(decls.forEach.bind(decls));
}
}
}
each(root);
};