From 65263c56e2ebb6d8ed53b541c50d720037dee7d6 Mon Sep 17 00:00:00 2001 From: Rustam Giliaziev Date: Thu, 20 Feb 2025 13:04:15 +0100 Subject: [PATCH 1/3] Export the plugin name --- index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/index.js b/index.js index 4b479b1..adccbd8 100644 --- a/index.js +++ b/index.js @@ -379,3 +379,4 @@ module.exports = (opts = {}) => { } } module.exports.postcss = true +module.exports.postcssPlugin = 'postcss-nested' From 3fbc95077271fbeacaa42a8b995609ac59480e34 Mon Sep 17 00:00:00 2001 From: Rustam Giliaziev Date: Thu, 20 Feb 2025 13:28:02 +0100 Subject: [PATCH 2/3] Move the postcss plugin name to the main export --- index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/index.js b/index.js index adccbd8..88f5fed 100644 --- a/index.js +++ b/index.js @@ -305,6 +305,8 @@ module.exports = (opts = {}) => { let preserveEmpty = opts.preserveEmpty return { + postcssPlugin: 'postcss-nested', + Once(root) { root.walkAtRules(rootRuleName, node => { normalizeRootRule(node) @@ -379,4 +381,3 @@ module.exports = (opts = {}) => { } } module.exports.postcss = true -module.exports.postcssPlugin = 'postcss-nested' From 1f8e252685265c289a82b3e8ed1eb77ae60085a0 Mon Sep 17 00:00:00 2001 From: Rustam Giliaziev Date: Thu, 20 Feb 2025 13:37:58 +0100 Subject: [PATCH 3/3] Move the postcss plugin name to the creator function --- index.js | 134 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 69 insertions(+), 65 deletions(-) diff --git a/index.js b/index.js index 88f5fed..86a85ec 100644 --- a/index.js +++ b/index.js @@ -307,75 +307,79 @@ module.exports = (opts = {}) => { return { postcssPlugin: 'postcss-nested', - Once(root) { - root.walkAtRules(rootRuleName, node => { - normalizeRootRule(node) - root[hasRootRule] = true - }) - }, - - postcssPlugin: 'postcss-nested', - - RootExit(root) { - if (!root[hasRootRule]) return - - root.walkAtRules(rootRuleName, unwrapRootRule) - root[hasRootRule] = false - }, - - Rule(rule) { - let unwrapped = false - let after = rule - let copyDeclarations = false - let declarations = [] - - rule.each(child => { - switch (child.type) { - case 'atrule': - [after, declarations] = pickAndClearDeclarations(rule.selector, declarations, after) - - if (child.name === rootRuleName) { - unwrapped = true - atruleChilds(rule, child, true, child[rootRuleMergeSel]) - after = breakOut(child, after) - } else if (bubble[child.name]) { - copyDeclarations = true - unwrapped = true - atruleChilds(rule, child, true) - after = breakOut(child, after) - } else if (unwrap[child.name]) { - copyDeclarations = true - unwrapped = true - atruleChilds(rule, child, false) - after = breakOut(child, after) - } else if (copyDeclarations) { - declarations.push(child) - } - - break - case 'decl': - if (copyDeclarations) { - declarations.push(child) + prepare() { + return { + Once(root) { + root.walkAtRules(rootRuleName, node => { + normalizeRootRule(node) + root[hasRootRule] = true + }) + }, + + postcssPlugin: 'postcss-nested', + + RootExit(root) { + if (!root[hasRootRule]) return + + root.walkAtRules(rootRuleName, unwrapRootRule) + root[hasRootRule] = false + }, + + Rule(rule) { + let unwrapped = false + let after = rule + let copyDeclarations = false + let declarations = [] + + rule.each(child => { + switch (child.type) { + case 'atrule': + [after, declarations] = pickAndClearDeclarations(rule.selector, declarations, after) + + if (child.name === rootRuleName) { + unwrapped = true + atruleChilds(rule, child, true, child[rootRuleMergeSel]) + after = breakOut(child, after) + } else if (bubble[child.name]) { + copyDeclarations = true + unwrapped = true + atruleChilds(rule, child, true) + after = breakOut(child, after) + } else if (unwrap[child.name]) { + copyDeclarations = true + unwrapped = true + atruleChilds(rule, child, false) + after = breakOut(child, after) + } else if (copyDeclarations) { + declarations.push(child) + } + + break + case 'decl': + if (copyDeclarations) { + declarations.push(child) + } + + break + case 'rule': + [after, declarations] = pickAndClearDeclarations(rule.selector, declarations, after) + + copyDeclarations = true + unwrapped = true + child.selectors = mergeSelectors(rule, child) + after = breakOut(child, after) + + break } + }) - break - case 'rule': - [after, declarations] = pickAndClearDeclarations(rule.selector, declarations, after) - - copyDeclarations = true - unwrapped = true - child.selectors = mergeSelectors(rule, child) - after = breakOut(child, after) + pickAndClearDeclarations(rule.selector, declarations, after, false) - break + if (unwrapped && preserveEmpty !== true) { + rule.raws.semicolon = true + if (rule.nodes.length === 0) rule.remove() + } } - }) - - pickAndClearDeclarations(rule.selector, declarations, after, false) - - if (unwrapped && preserveEmpty !== true) { - rule.raws.semicolon = true - if (rule.nodes.length === 0) rule.remove() } } }