| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- // NOTICE: This file is generated by Rollup. To modify it,
- // please instead edit the ESM counterpart and rebuild with Rollup (npm run build).
- 'use strict';
- const typeGuards = require('./typeGuards.cjs');
- /** @typedef {import('postcss').Root} Root */
- /** @typedef {import('postcss').Root} Document */
- /** @typedef {import('postcss').Node} PostcssNode */
- /** @typedef {import('postcss').Container} PostcssContainerNode */
- /** @typedef {import('postcss').Declaration} Declaration */
- /** @typedef {(callbackFn: (decl: Declaration, index: number, decls: Declaration[]) => void) => void} EachDeclaration */
- /**
- * @param {PostcssNode} node
- * @returns {node is PostcssContainerNode}
- */
- function isContainerNode(node) {
- return typeGuards.isRule(node) || typeGuards.isAtRule(node) || typeGuards.isRoot(node);
- }
- /**
- * 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 {(eachDecl: EachDeclaration) => void} callback - Function to execute for each declaration block
- *
- * @returns {void}
- */
- function eachDeclarationBlock(root, callback) {
- /**
- * @param {PostcssNode} statement
- *
- * @returns {void}
- */
- function each(statement) {
- if (!isContainerNode(statement)) return;
- if (statement.nodes && statement.nodes.length) {
- /** @type {Declaration[]} */
- const decls = [];
- for (const node of statement.nodes) {
- if (node.type === 'decl') {
- decls.push(node);
- }
- each(node);
- }
- if (decls.length) {
- callback(decls.forEach.bind(decls));
- }
- }
- }
- each(root);
- }
- module.exports = eachDeclarationBlock;
|